@coralogix/rum-cli 1.1.25 → 1.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +0 -12
  2. package/api/client/request-builder.ts +18 -27
  3. package/api/react-native.api.ts +12 -9
  4. package/api/source-maps.api.ts +47 -84
  5. package/cli/commands/source-maps/index.ts +1 -3
  6. package/cli/rum-cli.ts +0 -4
  7. package/consts/consts.ts +1 -0
  8. package/dist/api/client/client-factory.d.ts +0 -20
  9. package/dist/api/client/request-builder.d.ts +4 -10
  10. package/dist/api/client/request-builder.js +11 -11
  11. package/dist/api/react-native.api.d.ts +1 -1
  12. package/dist/api/react-native.api.js +7 -6
  13. package/dist/api/source-maps.api.d.ts +2 -5
  14. package/dist/api/source-maps.api.js +19 -65
  15. package/dist/cli/commands/source-maps/index.d.ts +0 -2
  16. package/dist/cli/commands/source-maps/index.js +2 -4
  17. package/dist/cli/rum-cli.js +1 -5
  18. package/dist/consts/consts.js +3 -2
  19. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.d.ts +19 -17
  20. package/dist/proto-models/com/coralogix/blobset/v2/blobset_query_service.js +6 -6
  21. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.d.ts +0 -18
  22. package/dist/proto-models/com/coralogix/blobset/v2/entity_metadata.js +5 -142
  23. package/dist/proto-models/com/coralogix/blobset/v2/source_map.d.ts +62 -0
  24. package/dist/proto-models/com/coralogix/blobset/v2/source_map.js +367 -0
  25. package/dist/services/react-native.service.js +2 -2
  26. package/dist/services/source-maps.service.d.ts +0 -2
  27. package/dist/services/source-maps.service.js +8 -50
  28. package/package.json +4 -3
  29. package/proto-models/com/coralogix/blobset/v2/blobset_query_service.ts +5 -5
  30. package/proto-models/com/coralogix/blobset/v2/entity_metadata.ts +4 -163
  31. package/proto-models/com/coralogix/blobset/v2/{react_native.ts → source_map.ts} +87 -36
  32. package/protofetch.lock +2 -2
  33. package/protofetch.toml +1 -1
  34. package/protos/com/coralogix/blobset/v2/blobset_query_service.proto +3 -3
  35. package/protos/com/coralogix/blobset/v2/entity_metadata.proto +0 -10
  36. package/protos/com/coralogix/blobset/v2/{react_native.proto → source_map.proto} +10 -3
  37. package/protoset.bin +0 -0
  38. package/services/react-native.service.ts +2 -2
  39. package/services/source-maps.service.ts +7 -69
  40. package/cli/commands/source-maps/delete-source-maps-command.ts +0 -32
  41. package/cli/commands/source-maps/update-source-maps-command.ts +0 -37
  42. package/dist/cli/commands/source-maps/delete-source-maps-command.d.ts +0 -2
  43. package/dist/cli/commands/source-maps/delete-source-maps-command.js +0 -41
  44. package/dist/cli/commands/source-maps/update-source-maps-command.d.ts +0 -2
  45. package/dist/cli/commands/source-maps/update-source-maps-command.js +0 -46
  46. package/dist/proto-models/com/coralogix/blobset/v2/react_native.d.ts +0 -54
  47. package/dist/proto-models/com/coralogix/blobset/v2/react_native.js +0 -318
  48. package/dist/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.d.ts +0 -261
  49. package/dist/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.js +0 -703
  50. package/dist/proto-models/com/coralogix/rum/v2/snooze_errors.d.ts +0 -109
  51. package/dist/proto-models/com/coralogix/rum/v2/snooze_errors.js +0 -588
  52. package/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.ts +0 -824
  53. package/proto-models/com/coralogix/rum/v2/snooze_errors.ts +0 -665
  54. package/protos/com/coralogix/rum/v2/rum_snooze_errors_service.proto +0 -64
  55. package/protos/com/coralogix/rum/v2/snooze_errors.proto +0 -55
@@ -1,32 +0,0 @@
1
- import { Command } from 'commander';
2
- import { validateEnvironment } from '../../validators';
3
- import { SourceMapsService } from '../../../services/source-maps.service';
4
- import { checkMissingArguments, consoleError } from '../../../utils/shared.utils';
5
- import { DeleteSourceMapsCommandOptions } from '../../../models/source-maps-commands.model';
6
-
7
- export const deleteSourceMapsCommand = () => {
8
- const deleteCommand = new Command('delete-source-maps')
9
- .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
10
- .option('-a, --application <application>', 'Name of the application')
11
- .option('-v, --version <version>', 'The application version - must match the version used by RUM sdk')
12
- .option('-e, --env <env>', 'Your environment', validateEnvironment)
13
- .description('Delete source maps')
14
- .action(async (options: DeleteSourceMapsCommandOptions) => {
15
- try {
16
- if (options.help) {
17
- deleteCommand.outputHelp();
18
- process.exit(0);
19
- }
20
-
21
- const { privateKey, application, version, env } = options;
22
-
23
- checkMissingArguments<DeleteSourceMapsCommandOptions>(options, ['privateKey', 'application', 'version', 'env']);
24
-
25
- await SourceMapsService.delete(application, version, env, privateKey);
26
- } catch (error) {
27
- consoleError(error);
28
- }
29
- });
30
-
31
- return deleteCommand;
32
- };
@@ -1,37 +0,0 @@
1
- import { Command } from 'commander';
2
- import { validateEnvironment } from '../../validators';
3
- import { SourceMapsService } from '../../../services/source-maps.service';
4
- import { checkMissingArguments, consoleError } from '../../../utils/shared.utils';
5
- import { UpdateSourceMapsCommandOptions } from '../../../models/source-maps-commands.model';
6
-
7
- export const updateSourceMapsCommand = () => {
8
- const updateCommand = new Command('update-source-maps')
9
- .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
10
- .option('-a, --application <application>', 'Name of the application')
11
- .option('-v, --version <version>', 'The application version - must match the version used by RUM sdk')
12
- .option('-f, --folder-path <folderPath>', 'Path to the folder containing the source maps')
13
- .option('-e, --env <env>', 'Your environment', validateEnvironment)
14
- .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
15
- .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
16
- .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
17
- .option('-g, --generate [generate]', 'Update existing release or create a new one if not found (optional)')
18
- .description('Update source maps')
19
- .action(async (options: UpdateSourceMapsCommandOptions) => {
20
- try {
21
- if (options.help) {
22
- updateCommand.outputHelp();
23
- process.exit(0);
24
- }
25
-
26
- const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env, generate } = options;
27
-
28
- checkMissingArguments<UpdateSourceMapsCommandOptions>(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
29
-
30
- await SourceMapsService.update(application, version, repoName, commitHash, orgName, folderPath, generate, env, privateKey);
31
- } catch (error) {
32
- consoleError(error);
33
- }
34
- });
35
-
36
- return updateCommand;
37
- };
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const deleteSourceMapsCommand: () => Command;
@@ -1,41 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.deleteSourceMapsCommand = void 0;
13
- const commander_1 = require("commander");
14
- const validators_1 = require("../../validators");
15
- const source_maps_service_1 = require("../../../services/source-maps.service");
16
- const shared_utils_1 = require("../../../utils/shared.utils");
17
- const deleteSourceMapsCommand = () => {
18
- const deleteCommand = new commander_1.Command('delete-source-maps')
19
- .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
20
- .option('-a, --application <application>', 'Name of the application')
21
- .option('-v, --version <version>', 'The application version - must match the version used by RUM sdk')
22
- .option('-e, --env <env>', 'Your environment', validators_1.validateEnvironment)
23
- .description('Delete source maps')
24
- .action((options) => __awaiter(void 0, void 0, void 0, function* () {
25
- try {
26
- if (options.help) {
27
- deleteCommand.outputHelp();
28
- process.exit(0);
29
- }
30
- const { privateKey, application, version, env } = options;
31
- (0, shared_utils_1.checkMissingArguments)(options, ['privateKey', 'application', 'version', 'env']);
32
- yield source_maps_service_1.SourceMapsService.delete(application, version, env, privateKey);
33
- }
34
- catch (error) {
35
- (0, shared_utils_1.consoleError)(error);
36
- }
37
- }));
38
- return deleteCommand;
39
- };
40
- exports.deleteSourceMapsCommand = deleteSourceMapsCommand;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXNvdXJjZS1tYXBzLWNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jbGkvY29tbWFuZHMvc291cmNlLW1hcHMvZGVsZXRlLXNvdXJjZS1tYXBzLWNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEseUNBQW9DO0FBQ3BDLGlEQUF1RDtBQUN2RCwrRUFBMEU7QUFDMUUsOERBQWtGO0FBRzNFLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxFQUFFO0lBQzFDLE1BQU0sYUFBYSxHQUFHLElBQUksbUJBQU8sQ0FBQyxvQkFBb0IsQ0FBQztTQUNwRCxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsMENBQTBDLENBQUM7U0FDcEYsTUFBTSxDQUFDLGlDQUFpQyxFQUFFLHlCQUF5QixDQUFDO1NBQ3BFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxrRUFBa0UsQ0FBQztTQUNyRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0NBQW1CLENBQUM7U0FDbEUsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxDQUFPLE9BQXVDLEVBQUUsRUFBRTtRQUN4RCxJQUFJO1lBQ0YsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNoQixhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakI7WUFFRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1lBRTFELElBQUEsb0NBQXFCLEVBQWlDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFaEgsTUFBTSx1Q0FBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDdkU7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUEsMkJBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtJQUNILENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFTCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDLENBQUM7QUF6QlcsUUFBQSx1QkFBdUIsMkJBeUJsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgdmFsaWRhdGVFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgU291cmNlTWFwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zb3VyY2UtbWFwcy5zZXJ2aWNlJztcbmltcG9ydCB7IGNoZWNrTWlzc2luZ0FyZ3VtZW50cywgY29uc29sZUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc2hhcmVkLnV0aWxzJztcbmltcG9ydCB7IERlbGV0ZVNvdXJjZU1hcHNDb21tYW5kT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zb3VyY2UtbWFwcy1jb21tYW5kcy5tb2RlbCc7XG5cbmV4cG9ydCBjb25zdCBkZWxldGVTb3VyY2VNYXBzQ29tbWFuZCA9ICgpID0+IHtcbiAgY29uc3QgZGVsZXRlQ29tbWFuZCA9IG5ldyBDb21tYW5kKCdkZWxldGUtc291cmNlLW1hcHMnKVxuICAgIC5vcHRpb24oJy1rLCAtLXByaXZhdGUta2V5IDxwcml2YXRlS2V5PicsICdQcml2YXRlIGtleSB0byBhdXRoZW50aWNhdGUgd2l0aCB0aGUgQVBJJylcbiAgICAub3B0aW9uKCctYSwgLS1hcHBsaWNhdGlvbiA8YXBwbGljYXRpb24+JywgJ05hbWUgb2YgdGhlIGFwcGxpY2F0aW9uJylcbiAgICAub3B0aW9uKCctdiwgLS12ZXJzaW9uIDx2ZXJzaW9uPicsICdUaGUgYXBwbGljYXRpb24gdmVyc2lvbiAtIG11c3QgbWF0Y2ggdGhlIHZlcnNpb24gdXNlZCBieSBSVU0gc2RrJylcbiAgICAub3B0aW9uKCctZSwgLS1lbnYgPGVudj4nLCAnWW91ciBlbnZpcm9ubWVudCcsIHZhbGlkYXRlRW52aXJvbm1lbnQpXG4gICAgLmRlc2NyaXB0aW9uKCdEZWxldGUgc291cmNlIG1hcHMnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IERlbGV0ZVNvdXJjZU1hcHNDb21tYW5kT3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaGVscCkge1xuICAgICAgICAgIGRlbGV0ZUNvbW1hbmQub3V0cHV0SGVscCgpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcHJpdmF0ZUtleSwgYXBwbGljYXRpb24sIHZlcnNpb24sIGVudiB9ID0gb3B0aW9ucztcblxuICAgICAgICBjaGVja01pc3NpbmdBcmd1bWVudHM8RGVsZXRlU291cmNlTWFwc0NvbW1hbmRPcHRpb25zPihvcHRpb25zLCBbJ3ByaXZhdGVLZXknLCAnYXBwbGljYXRpb24nLCAndmVyc2lvbicsICdlbnYnXSk7XG5cbiAgICAgICAgYXdhaXQgU291cmNlTWFwc1NlcnZpY2UuZGVsZXRlKGFwcGxpY2F0aW9uLCB2ZXJzaW9uLCBlbnYsIHByaXZhdGVLZXkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZUVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gZGVsZXRlQ29tbWFuZDtcbn07XG4iXX0=
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const updateSourceMapsCommand: () => Command;
@@ -1,46 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.updateSourceMapsCommand = void 0;
13
- const commander_1 = require("commander");
14
- const validators_1 = require("../../validators");
15
- const source_maps_service_1 = require("../../../services/source-maps.service");
16
- const shared_utils_1 = require("../../../utils/shared.utils");
17
- const updateSourceMapsCommand = () => {
18
- const updateCommand = new commander_1.Command('update-source-maps')
19
- .option('-k, --private-key <privateKey>', 'Private key to authenticate with the API')
20
- .option('-a, --application <application>', 'Name of the application')
21
- .option('-v, --version <version>', 'The application version - must match the version used by RUM sdk')
22
- .option('-f, --folder-path <folderPath>', 'Path to the folder containing the source maps')
23
- .option('-e, --env <env>', 'Your environment', validators_1.validateEnvironment)
24
- .option('-c, --commit-hash <commitHash>', 'GitHub commit hash (optional)')
25
- .option('-n, --repo-name <repoName>', 'GitHub Repository name (optional)')
26
- .option('-o, --org-name <orgName>', 'GitHub user name (optional)')
27
- .option('-g, --generate [generate]', 'Update existing release or create a new one if not found (optional)')
28
- .description('Update source maps')
29
- .action((options) => __awaiter(void 0, void 0, void 0, function* () {
30
- try {
31
- if (options.help) {
32
- updateCommand.outputHelp();
33
- process.exit(0);
34
- }
35
- const { privateKey, application, version, folderPath, commitHash, repoName, orgName, env, generate } = options;
36
- (0, shared_utils_1.checkMissingArguments)(options, ['privateKey', 'application', 'version', 'folderPath', 'env']);
37
- yield source_maps_service_1.SourceMapsService.update(application, version, repoName, commitHash, orgName, folderPath, generate, env, privateKey);
38
- }
39
- catch (error) {
40
- (0, shared_utils_1.consoleError)(error);
41
- }
42
- }));
43
- return updateCommand;
44
- };
45
- exports.updateSourceMapsCommand = updateSourceMapsCommand;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXNvdXJjZS1tYXBzLWNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jbGkvY29tbWFuZHMvc291cmNlLW1hcHMvdXBkYXRlLXNvdXJjZS1tYXBzLWNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEseUNBQW9DO0FBQ3BDLGlEQUF1RDtBQUN2RCwrRUFBMEU7QUFDMUUsOERBQWtGO0FBRzNFLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxFQUFFO0lBQzFDLE1BQU0sYUFBYSxHQUFHLElBQUksbUJBQU8sQ0FBQyxvQkFBb0IsQ0FBQztTQUNwRCxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsMENBQTBDLENBQUM7U0FDcEYsTUFBTSxDQUFDLGlDQUFpQyxFQUFFLHlCQUF5QixDQUFDO1NBQ3BFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxrRUFBa0UsQ0FBQztTQUNyRyxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsK0NBQStDLENBQUM7U0FDekYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdDQUFtQixDQUFDO1NBQ2xFLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSwrQkFBK0IsQ0FBQztTQUN6RSxNQUFNLENBQUMsNEJBQTRCLEVBQUUsbUNBQW1DLENBQUM7U0FDekUsTUFBTSxDQUFDLDBCQUEwQixFQUFFLDZCQUE2QixDQUFDO1NBQ2pFLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxxRUFBcUUsQ0FBQztTQUMxRyxXQUFXLENBQUMsb0JBQW9CLENBQUM7U0FDakMsTUFBTSxDQUFDLENBQU8sT0FBdUMsRUFBRSxFQUFFO1FBQ3hELElBQUk7WUFDRixJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQjtZQUVELE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUUvRyxJQUFBLG9DQUFxQixFQUFpQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUU5SCxNQUFNLHVDQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzVIO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFBLDJCQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7U0FDckI7SUFDSCxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRUwsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBOUJXLFFBQUEsdUJBQXVCLDJCQThCbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHZhbGlkYXRlRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IFNvdXJjZU1hcHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc291cmNlLW1hcHMuc2VydmljZSc7XG5pbXBvcnQgeyBjaGVja01pc3NpbmdBcmd1bWVudHMsIGNvbnNvbGVFcnJvciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NoYXJlZC51dGlscyc7XG5pbXBvcnQgeyBVcGRhdGVTb3VyY2VNYXBzQ29tbWFuZE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc291cmNlLW1hcHMtY29tbWFuZHMubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlU291cmNlTWFwc0NvbW1hbmQgPSAoKSA9PiB7XG4gIGNvbnN0IHVwZGF0ZUNvbW1hbmQgPSBuZXcgQ29tbWFuZCgndXBkYXRlLXNvdXJjZS1tYXBzJylcbiAgICAub3B0aW9uKCctaywgLS1wcml2YXRlLWtleSA8cHJpdmF0ZUtleT4nLCAnUHJpdmF0ZSBrZXkgdG8gYXV0aGVudGljYXRlIHdpdGggdGhlIEFQSScpXG4gICAgLm9wdGlvbignLWEsIC0tYXBwbGljYXRpb24gPGFwcGxpY2F0aW9uPicsICdOYW1lIG9mIHRoZSBhcHBsaWNhdGlvbicpXG4gICAgLm9wdGlvbignLXYsIC0tdmVyc2lvbiA8dmVyc2lvbj4nLCAnVGhlIGFwcGxpY2F0aW9uIHZlcnNpb24gLSBtdXN0IG1hdGNoIHRoZSB2ZXJzaW9uIHVzZWQgYnkgUlVNIHNkaycpXG4gICAgLm9wdGlvbignLWYsIC0tZm9sZGVyLXBhdGggPGZvbGRlclBhdGg+JywgJ1BhdGggdG8gdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBzb3VyY2UgbWFwcycpXG4gICAgLm9wdGlvbignLWUsIC0tZW52IDxlbnY+JywgJ1lvdXIgZW52aXJvbm1lbnQnLCB2YWxpZGF0ZUVudmlyb25tZW50KVxuICAgIC5vcHRpb24oJy1jLCAtLWNvbW1pdC1oYXNoIDxjb21taXRIYXNoPicsICdHaXRIdWIgY29tbWl0IGhhc2ggKG9wdGlvbmFsKScpXG4gICAgLm9wdGlvbignLW4sIC0tcmVwby1uYW1lIDxyZXBvTmFtZT4nLCAnR2l0SHViIFJlcG9zaXRvcnkgbmFtZSAob3B0aW9uYWwpJylcbiAgICAub3B0aW9uKCctbywgLS1vcmctbmFtZSA8b3JnTmFtZT4nLCAnR2l0SHViIHVzZXIgbmFtZSAob3B0aW9uYWwpJylcbiAgICAub3B0aW9uKCctZywgLS1nZW5lcmF0ZSBbZ2VuZXJhdGVdJywgJ1VwZGF0ZSBleGlzdGluZyByZWxlYXNlIG9yIGNyZWF0ZSBhIG5ldyBvbmUgaWYgbm90IGZvdW5kIChvcHRpb25hbCknKVxuICAgIC5kZXNjcmlwdGlvbignVXBkYXRlIHNvdXJjZSBtYXBzJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBVcGRhdGVTb3VyY2VNYXBzQ29tbWFuZE9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLmhlbHApIHtcbiAgICAgICAgICB1cGRhdGVDb21tYW5kLm91dHB1dEhlbHAoKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHByaXZhdGVLZXksIGFwcGxpY2F0aW9uLCB2ZXJzaW9uLCBmb2xkZXJQYXRoLCBjb21taXRIYXNoLCByZXBvTmFtZSwgb3JnTmFtZSwgZW52LCBnZW5lcmF0ZSB9ID0gb3B0aW9ucztcblxuICAgICAgICBjaGVja01pc3NpbmdBcmd1bWVudHM8VXBkYXRlU291cmNlTWFwc0NvbW1hbmRPcHRpb25zPihvcHRpb25zLCBbJ3ByaXZhdGVLZXknLCAnYXBwbGljYXRpb24nLCAndmVyc2lvbicsICdmb2xkZXJQYXRoJywgJ2VudiddKTtcblxuICAgICAgICBhd2FpdCBTb3VyY2VNYXBzU2VydmljZS51cGRhdGUoYXBwbGljYXRpb24sIHZlcnNpb24sIHJlcG9OYW1lLCBjb21taXRIYXNoLCBvcmdOYW1lLCBmb2xkZXJQYXRoLCBnZW5lcmF0ZSwgZW52LCBwcml2YXRlS2V5KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGVFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUNvbW1hbmQ7XG59O1xuIl19
@@ -1,54 +0,0 @@
1
- import _m0 from "protobufjs/minimal";
2
- export declare const protobufPackage = "com.coralogix.blobset.v2";
3
- export interface Chunk {
4
- chunk: string;
5
- content: Uint8Array;
6
- }
7
- export interface GetReactNativeSourceMapsChunksRequest {
8
- application: string;
9
- releaseId: string;
10
- chunkNames: string[];
11
- }
12
- export interface GetReactNativeSourceMapsChunksResponse {
13
- application: string;
14
- releaseId: string;
15
- chunks: Chunk[];
16
- commitHash?: string | undefined;
17
- repoName?: string | undefined;
18
- user?: string | undefined;
19
- }
20
- export declare const Chunk: {
21
- encode(message: Chunk, writer?: _m0.Writer): _m0.Writer;
22
- decode(input: _m0.Reader | Uint8Array, length?: number): Chunk;
23
- fromJSON(object: any): Chunk;
24
- toJSON(message: Chunk): unknown;
25
- create(base?: DeepPartial<Chunk>): Chunk;
26
- fromPartial(object: DeepPartial<Chunk>): Chunk;
27
- };
28
- export declare const GetReactNativeSourceMapsChunksRequest: {
29
- encode(message: GetReactNativeSourceMapsChunksRequest, writer?: _m0.Writer): _m0.Writer;
30
- decode(input: _m0.Reader | Uint8Array, length?: number): GetReactNativeSourceMapsChunksRequest;
31
- fromJSON(object: any): GetReactNativeSourceMapsChunksRequest;
32
- toJSON(message: GetReactNativeSourceMapsChunksRequest): unknown;
33
- create(base?: DeepPartial<GetReactNativeSourceMapsChunksRequest>): GetReactNativeSourceMapsChunksRequest;
34
- fromPartial(object: DeepPartial<GetReactNativeSourceMapsChunksRequest>): GetReactNativeSourceMapsChunksRequest;
35
- };
36
- export declare const GetReactNativeSourceMapsChunksResponse: {
37
- encode(message: GetReactNativeSourceMapsChunksResponse, writer?: _m0.Writer): _m0.Writer;
38
- decode(input: _m0.Reader | Uint8Array, length?: number): GetReactNativeSourceMapsChunksResponse;
39
- fromJSON(object: any): GetReactNativeSourceMapsChunksResponse;
40
- toJSON(message: GetReactNativeSourceMapsChunksResponse): unknown;
41
- create(base?: DeepPartial<GetReactNativeSourceMapsChunksResponse>): GetReactNativeSourceMapsChunksResponse;
42
- fromPartial(object: DeepPartial<GetReactNativeSourceMapsChunksResponse>): GetReactNativeSourceMapsChunksResponse;
43
- };
44
- type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
45
- export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {
46
- $case: string;
47
- } ? {
48
- [K in keyof Omit<T, "$case">]?: DeepPartial<T[K]>;
49
- } & {
50
- $case: T["$case"];
51
- } : T extends {} ? {
52
- [K in keyof T]?: DeepPartial<T[K]>;
53
- } : Partial<T>;
54
- export {};
@@ -1,318 +0,0 @@
1
- "use strict";
2
- // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
- // versions:
4
- // protoc-gen-ts_proto v1.181.1
5
- // protoc v3.19.1
6
- // source: com/coralogix/blobset/v2/react_native.proto
7
- var __importDefault = (this && this.__importDefault) || function (mod) {
8
- return (mod && mod.__esModule) ? mod : { "default": mod };
9
- };
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.GetReactNativeSourceMapsChunksResponse = exports.GetReactNativeSourceMapsChunksRequest = exports.Chunk = exports.protobufPackage = void 0;
12
- /* eslint-disable */
13
- const minimal_1 = __importDefault(require("protobufjs/minimal"));
14
- exports.protobufPackage = "com.coralogix.blobset.v2";
15
- function createBaseChunk() {
16
- return { chunk: "", content: new Uint8Array(0) };
17
- }
18
- exports.Chunk = {
19
- encode(message, writer = minimal_1.default.Writer.create()) {
20
- if (message.chunk !== "") {
21
- writer.uint32(10).string(message.chunk);
22
- }
23
- if (message.content.length !== 0) {
24
- writer.uint32(18).bytes(message.content);
25
- }
26
- return writer;
27
- },
28
- decode(input, length) {
29
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
30
- let end = length === undefined ? reader.len : reader.pos + length;
31
- const message = createBaseChunk();
32
- while (reader.pos < end) {
33
- const tag = reader.uint32();
34
- switch (tag >>> 3) {
35
- case 1:
36
- if (tag !== 10) {
37
- break;
38
- }
39
- message.chunk = reader.string();
40
- continue;
41
- case 2:
42
- if (tag !== 18) {
43
- break;
44
- }
45
- message.content = reader.bytes();
46
- continue;
47
- }
48
- if ((tag & 7) === 4 || tag === 0) {
49
- break;
50
- }
51
- reader.skipType(tag & 7);
52
- }
53
- return message;
54
- },
55
- fromJSON(object) {
56
- return {
57
- chunk: isSet(object.chunk) ? globalThis.String(object.chunk) : "",
58
- content: isSet(object.content) ? bytesFromBase64(object.content) : new Uint8Array(0),
59
- };
60
- },
61
- toJSON(message) {
62
- const obj = {};
63
- if (message.chunk !== "") {
64
- obj.chunk = message.chunk;
65
- }
66
- if (message.content.length !== 0) {
67
- obj.content = base64FromBytes(message.content);
68
- }
69
- return obj;
70
- },
71
- create(base) {
72
- return exports.Chunk.fromPartial(base !== null && base !== void 0 ? base : {});
73
- },
74
- fromPartial(object) {
75
- var _a, _b;
76
- const message = createBaseChunk();
77
- message.chunk = (_a = object.chunk) !== null && _a !== void 0 ? _a : "";
78
- message.content = (_b = object.content) !== null && _b !== void 0 ? _b : new Uint8Array(0);
79
- return message;
80
- },
81
- };
82
- function createBaseGetReactNativeSourceMapsChunksRequest() {
83
- return { application: "", releaseId: "", chunkNames: [] };
84
- }
85
- exports.GetReactNativeSourceMapsChunksRequest = {
86
- encode(message, writer = minimal_1.default.Writer.create()) {
87
- if (message.application !== "") {
88
- writer.uint32(10).string(message.application);
89
- }
90
- if (message.releaseId !== "") {
91
- writer.uint32(18).string(message.releaseId);
92
- }
93
- for (const v of message.chunkNames) {
94
- writer.uint32(26).string(v);
95
- }
96
- return writer;
97
- },
98
- decode(input, length) {
99
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
100
- let end = length === undefined ? reader.len : reader.pos + length;
101
- const message = createBaseGetReactNativeSourceMapsChunksRequest();
102
- while (reader.pos < end) {
103
- const tag = reader.uint32();
104
- switch (tag >>> 3) {
105
- case 1:
106
- if (tag !== 10) {
107
- break;
108
- }
109
- message.application = reader.string();
110
- continue;
111
- case 2:
112
- if (tag !== 18) {
113
- break;
114
- }
115
- message.releaseId = reader.string();
116
- continue;
117
- case 3:
118
- if (tag !== 26) {
119
- break;
120
- }
121
- message.chunkNames.push(reader.string());
122
- continue;
123
- }
124
- if ((tag & 7) === 4 || tag === 0) {
125
- break;
126
- }
127
- reader.skipType(tag & 7);
128
- }
129
- return message;
130
- },
131
- fromJSON(object) {
132
- return {
133
- application: isSet(object.application) ? globalThis.String(object.application) : "",
134
- releaseId: isSet(object.releaseId) ? globalThis.String(object.releaseId) : "",
135
- chunkNames: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.chunkNames)
136
- ? object.chunkNames.map((e) => globalThis.String(e))
137
- : [],
138
- };
139
- },
140
- toJSON(message) {
141
- var _a;
142
- const obj = {};
143
- if (message.application !== "") {
144
- obj.application = message.application;
145
- }
146
- if (message.releaseId !== "") {
147
- obj.releaseId = message.releaseId;
148
- }
149
- if ((_a = message.chunkNames) === null || _a === void 0 ? void 0 : _a.length) {
150
- obj.chunkNames = message.chunkNames;
151
- }
152
- return obj;
153
- },
154
- create(base) {
155
- return exports.GetReactNativeSourceMapsChunksRequest.fromPartial(base !== null && base !== void 0 ? base : {});
156
- },
157
- fromPartial(object) {
158
- var _a, _b, _c;
159
- const message = createBaseGetReactNativeSourceMapsChunksRequest();
160
- message.application = (_a = object.application) !== null && _a !== void 0 ? _a : "";
161
- message.releaseId = (_b = object.releaseId) !== null && _b !== void 0 ? _b : "";
162
- message.chunkNames = ((_c = object.chunkNames) === null || _c === void 0 ? void 0 : _c.map((e) => e)) || [];
163
- return message;
164
- },
165
- };
166
- function createBaseGetReactNativeSourceMapsChunksResponse() {
167
- return { application: "", releaseId: "", chunks: [], commitHash: undefined, repoName: undefined, user: undefined };
168
- }
169
- exports.GetReactNativeSourceMapsChunksResponse = {
170
- encode(message, writer = minimal_1.default.Writer.create()) {
171
- if (message.application !== "") {
172
- writer.uint32(10).string(message.application);
173
- }
174
- if (message.releaseId !== "") {
175
- writer.uint32(18).string(message.releaseId);
176
- }
177
- for (const v of message.chunks) {
178
- exports.Chunk.encode(v, writer.uint32(26).fork()).ldelim();
179
- }
180
- if (message.commitHash !== undefined) {
181
- writer.uint32(34).string(message.commitHash);
182
- }
183
- if (message.repoName !== undefined) {
184
- writer.uint32(42).string(message.repoName);
185
- }
186
- if (message.user !== undefined) {
187
- writer.uint32(50).string(message.user);
188
- }
189
- return writer;
190
- },
191
- decode(input, length) {
192
- const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
193
- let end = length === undefined ? reader.len : reader.pos + length;
194
- const message = createBaseGetReactNativeSourceMapsChunksResponse();
195
- while (reader.pos < end) {
196
- const tag = reader.uint32();
197
- switch (tag >>> 3) {
198
- case 1:
199
- if (tag !== 10) {
200
- break;
201
- }
202
- message.application = reader.string();
203
- continue;
204
- case 2:
205
- if (tag !== 18) {
206
- break;
207
- }
208
- message.releaseId = reader.string();
209
- continue;
210
- case 3:
211
- if (tag !== 26) {
212
- break;
213
- }
214
- message.chunks.push(exports.Chunk.decode(reader, reader.uint32()));
215
- continue;
216
- case 4:
217
- if (tag !== 34) {
218
- break;
219
- }
220
- message.commitHash = reader.string();
221
- continue;
222
- case 5:
223
- if (tag !== 42) {
224
- break;
225
- }
226
- message.repoName = reader.string();
227
- continue;
228
- case 6:
229
- if (tag !== 50) {
230
- break;
231
- }
232
- message.user = reader.string();
233
- continue;
234
- }
235
- if ((tag & 7) === 4 || tag === 0) {
236
- break;
237
- }
238
- reader.skipType(tag & 7);
239
- }
240
- return message;
241
- },
242
- fromJSON(object) {
243
- return {
244
- application: isSet(object.application) ? globalThis.String(object.application) : "",
245
- releaseId: isSet(object.releaseId) ? globalThis.String(object.releaseId) : "",
246
- chunks: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.chunks) ? object.chunks.map((e) => exports.Chunk.fromJSON(e)) : [],
247
- commitHash: isSet(object.commitHash) ? globalThis.String(object.commitHash) : undefined,
248
- repoName: isSet(object.repoName) ? globalThis.String(object.repoName) : undefined,
249
- user: isSet(object.user) ? globalThis.String(object.user) : undefined,
250
- };
251
- },
252
- toJSON(message) {
253
- var _a;
254
- const obj = {};
255
- if (message.application !== "") {
256
- obj.application = message.application;
257
- }
258
- if (message.releaseId !== "") {
259
- obj.releaseId = message.releaseId;
260
- }
261
- if ((_a = message.chunks) === null || _a === void 0 ? void 0 : _a.length) {
262
- obj.chunks = message.chunks.map((e) => exports.Chunk.toJSON(e));
263
- }
264
- if (message.commitHash !== undefined) {
265
- obj.commitHash = message.commitHash;
266
- }
267
- if (message.repoName !== undefined) {
268
- obj.repoName = message.repoName;
269
- }
270
- if (message.user !== undefined) {
271
- obj.user = message.user;
272
- }
273
- return obj;
274
- },
275
- create(base) {
276
- return exports.GetReactNativeSourceMapsChunksResponse.fromPartial(base !== null && base !== void 0 ? base : {});
277
- },
278
- fromPartial(object) {
279
- var _a, _b, _c, _d, _e, _f;
280
- const message = createBaseGetReactNativeSourceMapsChunksResponse();
281
- message.application = (_a = object.application) !== null && _a !== void 0 ? _a : "";
282
- message.releaseId = (_b = object.releaseId) !== null && _b !== void 0 ? _b : "";
283
- message.chunks = ((_c = object.chunks) === null || _c === void 0 ? void 0 : _c.map((e) => exports.Chunk.fromPartial(e))) || [];
284
- message.commitHash = (_d = object.commitHash) !== null && _d !== void 0 ? _d : undefined;
285
- message.repoName = (_e = object.repoName) !== null && _e !== void 0 ? _e : undefined;
286
- message.user = (_f = object.user) !== null && _f !== void 0 ? _f : undefined;
287
- return message;
288
- },
289
- };
290
- function bytesFromBase64(b64) {
291
- if (globalThis.Buffer) {
292
- return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
293
- }
294
- else {
295
- const bin = globalThis.atob(b64);
296
- const arr = new Uint8Array(bin.length);
297
- for (let i = 0; i < bin.length; ++i) {
298
- arr[i] = bin.charCodeAt(i);
299
- }
300
- return arr;
301
- }
302
- }
303
- function base64FromBytes(arr) {
304
- if (globalThis.Buffer) {
305
- return globalThis.Buffer.from(arr).toString("base64");
306
- }
307
- else {
308
- const bin = [];
309
- arr.forEach((byte) => {
310
- bin.push(globalThis.String.fromCharCode(byte));
311
- });
312
- return globalThis.btoa(bin.join(""));
313
- }
314
- }
315
- function isSet(value) {
316
- return value !== null && value !== undefined;
317
- }
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RfbmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvYmxvYnNldC92Mi9yZWFjdF9uYXRpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNEQUFzRDtBQUN0RCxZQUFZO0FBQ1osa0NBQWtDO0FBQ2xDLGlDQUFpQztBQUNqQyxzREFBc0Q7Ozs7OztBQUV0RCxvQkFBb0I7QUFDcEIsaUVBQXFDO0FBRXhCLFFBQUEsZUFBZSxHQUFHLDBCQUEwQixDQUFDO0FBc0IxRCxTQUFTLGVBQWU7SUFDdEIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQUVZLFFBQUEsS0FBSyxHQUFHO0lBQ25CLE1BQU0sQ0FBQyxPQUFjLEVBQUUsU0FBcUIsaUJBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQzdELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWU7UUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLGlCQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFHLENBQUMsTUFBTSxDQUFD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Q0FBQyxDQUFDO0tBQ3ZEO1NBQU07UUFDTCxNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7UUFDekIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBV0QsU0FBUyxLQUFLLENBQUMsS0FBVTtJQUN2QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZSBnZW5lcmF0ZWQgYnkgcHJvdG9jLWdlbi10c19wcm90by4gRE8gTk9UIEVESVQuXG4vLyB2ZXJzaW9uczpcbi8vICAgcHJvdG9jLWdlbi10c19wcm90byAgdjEuMTgxLjFcbi8vICAgcHJvdG9jICAgICAgICAgICAgICAgdjMuMTkuMVxuLy8gc291cmNlOiBjb20vY29yYWxvZ2l4L2Jsb2JzZXQvdjIvcmVhY3RfbmF0aXZlLnByb3RvXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gXCJwcm90b2J1ZmpzL21pbmltYWxcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiY29tLmNvcmFsb2dpeC5ibG9ic2V0LnYyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2h1bmsge1xuICBjaHVuazogc3RyaW5nO1xuICBjb250ZW50OiBVaW50OEFycmF5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1JlcXVlc3Qge1xuICBhcHBsaWNhdGlvbjogc3RyaW5nO1xuICByZWxlYXNlSWQ6IHN0cmluZztcbiAgY2h1bmtOYW1lczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvbjogc3RyaW5nO1xuICByZWxlYXNlSWQ6IHN0cmluZztcbiAgY2h1bmtzOiBDaHVua1tdO1xuICBjb21taXRIYXNoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZXBvTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXNlcj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNodW5rKCk6IENodW5rIHtcbiAgcmV0dXJuIHsgY2h1bms6IFwiXCIsIGNvbnRlbnQ6IG5ldyBVaW50OEFycmF5KDApIH07XG59XG5cbmV4cG9ydCBjb25zdCBDaHVuayA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENodW5rLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuY2h1bmsgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmNodW5rKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY29udGVudC5sZW5ndGggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLmJ5dGVzKG1lc3NhZ2UuY29udGVudCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogQ2h1bmsge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ2h1bmsoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNodW5rID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY29udGVudCA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogQ2h1bmsge1xuICAgIHJldHVybiB7XG4gICAgICBjaHVuazogaXNTZXQob2JqZWN0LmNodW5rKSA/IGdsb2JhbFRoaXMuU3RyaW5nKG9iamVjdC5jaHVuaykgOiBcIlwiLFxuICAgICAgY29udGVudDogaXNTZXQob2JqZWN0LmNvbnRlbnQpID8gYnl0ZXNGcm9tQmFzZTY0KG9iamVjdC5jb250ZW50KSA6IG5ldyBVaW50OEFycmF5KDApLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IENodW5rKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5jaHVuayAhPT0gXCJcIikge1xuICAgICAgb2JqLmNodW5rID0gbWVzc2FnZS5jaHVuaztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY29udGVudC5sZW5ndGggIT09IDApIHtcbiAgICAgIG9iai5jb250ZW50ID0gYmFzZTY0RnJvbUJ5dGVzKG1lc3NhZ2UuY29udGVudCk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxDaHVuaz4pOiBDaHVuayB7XG4gICAgcmV0dXJuIENodW5rLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPENodW5rPik6IENodW5rIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNodW5rKCk7XG4gICAgbWVzc2FnZS5jaHVuayA9IG9iamVjdC5jaHVuayA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuY29udGVudCA9IG9iamVjdC5jb250ZW50ID8/IG5ldyBVaW50OEFycmF5KDApO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1JlcXVlc3QoKTogR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVxdWVzdCB7XG4gIHJldHVybiB7IGFwcGxpY2F0aW9uOiBcIlwiLCByZWxlYXNlSWQ6IFwiXCIsIGNodW5rTmFtZXM6IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXF1ZXN0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVxdWVzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFwcGxpY2F0aW9uICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5hcHBsaWNhdGlvbik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJlbGVhc2VJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UucmVsZWFzZUlkKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuY2h1bmtOYW1lcykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKHYhKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXF1ZXN0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1JlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmFwcGxpY2F0aW9uID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVsZWFzZUlkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2h1bmtOYW1lcy5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXF1ZXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwbGljYXRpb246IGlzU2V0KG9iamVjdC5hcHBsaWNhdGlvbikgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuYXBwbGljYXRpb24pIDogXCJcIixcbiAgICAgIHJlbGVhc2VJZDogaXNTZXQob2JqZWN0LnJlbGVhc2VJZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QucmVsZWFzZUlkKSA6IFwiXCIsXG4gICAgICBjaHVua05hbWVzOiBnbG9iYWxUaGlzLkFycmF5LmlzQXJyYXkob2JqZWN0Py5jaHVua05hbWVzKVxuICAgICAgICA/IG9iamVjdC5jaHVua05hbWVzLm1hcCgoZTogYW55KSA9PiBnbG9iYWxUaGlzLlN0cmluZyhlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXF1ZXN0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5hcHBsaWNhdGlvbiAhPT0gXCJcIikge1xuICAgICAgb2JqLmFwcGxpY2F0aW9uID0gbWVzc2FnZS5hcHBsaWNhdGlvbjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmVsZWFzZUlkICE9PSBcIlwiKSB7XG4gICAgICBvYmoucmVsZWFzZUlkID0gbWVzc2FnZS5yZWxlYXNlSWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNodW5rTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgb2JqLmNodW5rTmFtZXMgPSBtZXNzYWdlLmNodW5rTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXF1ZXN0Pik6IEdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1JlcXVlc3Qge1xuICAgIHJldHVybiBHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1JlcXVlc3Q+KTogR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5hcHBsaWNhdGlvbiA9IG9iamVjdC5hcHBsaWNhdGlvbiA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucmVsZWFzZUlkID0gb2JqZWN0LnJlbGVhc2VJZCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuY2h1bmtOYW1lcyA9IG9iamVjdC5jaHVua05hbWVzPy5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1Jlc3BvbnNlKCk6IEdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1Jlc3BvbnNlIHtcbiAgcmV0dXJuIHsgYXBwbGljYXRpb246IFwiXCIsIHJlbGVhc2VJZDogXCJcIiwgY2h1bmtzOiBbXSwgY29tbWl0SGFzaDogdW5kZWZpbmVkLCByZXBvTmFtZTogdW5kZWZpbmVkLCB1c2VyOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1Jlc3BvbnNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVzcG9uc2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5hcHBsaWNhdGlvbiAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuYXBwbGljYXRpb24pO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZWxlYXNlSWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLnJlbGVhc2VJZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmNodW5rcykge1xuICAgICAgQ2h1bmsuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jb21taXRIYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQpLnN0cmluZyhtZXNzYWdlLmNvbW1pdEhhc2gpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZXBvTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQyKS5zdHJpbmcobWVzc2FnZS5yZXBvTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnVzZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MCkuc3RyaW5nKG1lc3NhZ2UudXNlcik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVzcG9uc2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVzcG9uc2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmFwcGxpY2F0aW9uID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVsZWFzZUlkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2h1bmtzLnB1c2goQ2h1bmsuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5jb21taXRIYXNoID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVwb05hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA1MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51c2VyID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBsaWNhdGlvbjogaXNTZXQob2JqZWN0LmFwcGxpY2F0aW9uKSA/IGdsb2JhbFRoaXMuU3RyaW5nKG9iamVjdC5hcHBsaWNhdGlvbikgOiBcIlwiLFxuICAgICAgcmVsZWFzZUlkOiBpc1NldChvYmplY3QucmVsZWFzZUlkKSA/IGdsb2JhbFRoaXMuU3RyaW5nKG9iamVjdC5yZWxlYXNlSWQpIDogXCJcIixcbiAgICAgIGNodW5rczogZ2xvYmFsVGhpcy5BcnJheS5pc0FycmF5KG9iamVjdD8uY2h1bmtzKSA/IG9iamVjdC5jaHVua3MubWFwKChlOiBhbnkpID0+IENodW5rLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgY29tbWl0SGFzaDogaXNTZXQob2JqZWN0LmNvbW1pdEhhc2gpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LmNvbW1pdEhhc2gpIDogdW5kZWZpbmVkLFxuICAgICAgcmVwb05hbWU6IGlzU2V0KG9iamVjdC5yZXBvTmFtZSkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QucmVwb05hbWUpIDogdW5kZWZpbmVkLFxuICAgICAgdXNlcjogaXNTZXQob2JqZWN0LnVzZXIpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnVzZXIpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEdldFJlYWN0TmF0aXZlU291cmNlTWFwc0NodW5rc1Jlc3BvbnNlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5hcHBsaWNhdGlvbiAhPT0gXCJcIikge1xuICAgICAgb2JqLmFwcGxpY2F0aW9uID0gbWVzc2FnZS5hcHBsaWNhdGlvbjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmVsZWFzZUlkICE9PSBcIlwiKSB7XG4gICAgICBvYmoucmVsZWFzZUlkID0gbWVzc2FnZS5yZWxlYXNlSWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNodW5rcz8ubGVuZ3RoKSB7XG4gICAgICBvYmouY2h1bmtzID0gbWVzc2FnZS5jaHVua3MubWFwKChlKSA9PiBDaHVuay50b0pTT04oZSkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jb21taXRIYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5jb21taXRIYXNoID0gbWVzc2FnZS5jb21taXRIYXNoO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZXBvTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmoucmVwb05hbWUgPSBtZXNzYWdlLnJlcG9OYW1lO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51c2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai51c2VyID0gbWVzc2FnZS51c2VyO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8R2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVzcG9uc2U+KTogR2V0UmVhY3ROYXRpdmVTb3VyY2VNYXBzQ2h1bmtzUmVzcG9uc2Uge1xuICAgIHJldHVybiBHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXNwb25zZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXNwb25zZT4pOiBHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXNwb25zZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRSZWFjdE5hdGl2ZVNvdXJjZU1hcHNDaHVua3NSZXNwb25zZSgpO1xuICAgIG1lc3NhZ2UuYXBwbGljYXRpb24gPSBvYmplY3QuYXBwbGljYXRpb24gPz8gXCJcIjtcbiAgICBtZXNzYWdlLnJlbGVhc2VJZCA9IG9iamVjdC5yZWxlYXNlSWQgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmNodW5rcyA9IG9iamVjdC5jaHVua3M/Lm1hcCgoZSkgPT4gQ2h1bmsuZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuY29tbWl0SGFzaCA9IG9iamVjdC5jb21taXRIYXNoID8/IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnJlcG9OYW1lID0gb2JqZWN0LnJlcG9OYW1lID8/IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnVzZXIgPSBvYmplY3QudXNlciA/PyB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBieXRlc0Zyb21CYXNlNjQoYjY0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKChnbG9iYWxUaGlzIGFzIGFueSkuQnVmZmVyKSB7XG4gICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShnbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKGI2NCwgXCJiYXNlNjRcIikpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJpbiA9IGdsb2JhbFRoaXMuYXRvYihiNjQpO1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KGJpbi5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRGcm9tQnl0ZXMoYXJyOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgaWYgKChnbG9iYWxUaGlzIGFzIGFueSkuQnVmZmVyKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuQnVmZmVyLmZyb20oYXJyKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBiaW46IHN0cmluZ1tdID0gW107XG4gICAgYXJyLmZvckVhY2goKGJ5dGUpID0+IHtcbiAgICAgIGJpbi5wdXNoKGdsb2JhbFRoaXMuU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuYnRvYShiaW4uam9pbihcIlwiKSk7XG4gIH1cbn1cblxudHlwZSBCdWlsdGluID0gRGF0ZSB8IEZ1bmN0aW9uIHwgVWludDhBcnJheSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIEJ1aWx0aW4gPyBUXG4gIDogVCBleHRlbmRzIGdsb2JhbFRoaXMuQXJyYXk8aW5mZXIgVT4gPyBnbG9iYWxUaGlzLkFycmF5PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gUmVhZG9ubHlBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgeyAkY2FzZTogc3RyaW5nIH0gPyB7IFtLIGluIGtleW9mIE9taXQ8VCwgXCIkY2FzZVwiPl0/OiBEZWVwUGFydGlhbDxUW0tdPiB9ICYgeyAkY2FzZTogVFtcIiRjYXNlXCJdIH1cbiAgOiBUIGV4dGVuZHMge30gPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbmZ1bmN0aW9uIGlzU2V0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=