aws-cdk 2.1013.0 → 2.1015.0

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 (112) hide show
  1. package/README.md +128 -20
  2. package/THIRD_PARTY_LICENSES +67 -67
  3. package/build-info.json +2 -2
  4. package/db.json.gz +0 -0
  5. package/lib/api/aws-auth.d.ts +1 -0
  6. package/lib/api/aws-auth.js +3 -1
  7. package/lib/api/bootstrap/bootstrap-template.yaml +12 -1
  8. package/lib/api/bootstrap.js +2 -1
  9. package/lib/api/cloud-assembly.js +2 -1
  10. package/lib/api/cloudformation.js +2 -1
  11. package/lib/api/context.js +2 -1
  12. package/lib/api/deployments.js +2 -1
  13. package/lib/api/hotswap.js +2 -1
  14. package/lib/api/index.d.ts +12 -6
  15. package/lib/api/index.js +18 -7
  16. package/lib/api/notices.js +2 -1
  17. package/lib/api/plugin.js +2 -1
  18. package/lib/api/settings.js +2 -1
  19. package/lib/api/tags.js +2 -1
  20. package/lib/api-private.d.ts +3 -1
  21. package/lib/api-private.js +5 -2
  22. package/lib/cli/cdk-toolkit.d.ts +47 -2
  23. package/lib/cli/cdk-toolkit.js +102 -88
  24. package/lib/cli/cli-config.js +43 -4
  25. package/lib/cli/cli.js +45 -45
  26. package/lib/cli/convert-to-user-input.js +19 -1
  27. package/lib/cli/io-host/cli-io-host.d.ts +3 -3
  28. package/lib/cli/io-host/cli-io-host.js +13 -14
  29. package/lib/cli/messages.d.ts +1 -1
  30. package/lib/cli/messages.js +1 -1
  31. package/lib/cli/parse-command-line-arguments.js +51 -3
  32. package/lib/cli/pretty-print-error.js +2 -2
  33. package/lib/cli/root-dir.js +3 -3
  34. package/lib/cli/singleton-plugin-host.d.ts +1 -1
  35. package/lib/cli/singleton-plugin-host.js +3 -3
  36. package/lib/cli/user-configuration.js +12 -11
  37. package/lib/cli/user-input.d.ts +54 -0
  38. package/lib/cli/user-input.js +1 -1
  39. package/lib/cli/util/npm.js +4 -4
  40. package/lib/cli/util/yargs-helpers.d.ts +10 -0
  41. package/lib/cli/util/yargs-helpers.js +18 -3
  42. package/lib/cli/version.js +3 -3
  43. package/lib/commands/context.js +7 -7
  44. package/lib/commands/init/init-hooks.js +3 -3
  45. package/lib/commands/init/init.js +8 -8
  46. package/lib/commands/init/os.js +3 -3
  47. package/lib/commands/list-stacks.d.ts +1 -1
  48. package/lib/commands/list-stacks.js +1 -1
  49. package/lib/commands/migrate.js +18 -17
  50. package/lib/context-providers.d.ts +1 -0
  51. package/lib/{api/logs-monitor.js → context-providers.js} +3 -2
  52. package/lib/cxapp/cloud-assembly.d.ts +1 -1
  53. package/lib/cxapp/cloud-assembly.js +13 -12
  54. package/lib/cxapp/cloud-executable.d.ts +2 -2
  55. package/lib/cxapp/cloud-executable.js +7 -8
  56. package/lib/cxapp/environments.js +5 -5
  57. package/lib/cxapp/exec.d.ts +1 -1
  58. package/lib/cxapp/exec.js +12 -11
  59. package/lib/index.js +220668 -218476
  60. package/lib/init-templates/.init-version.json +1 -1
  61. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  62. package/lib/init-templates/app/typescript/tsconfig.json +4 -3
  63. package/lib/init-templates/lib/typescript/tsconfig.json +5 -4
  64. package/lib/init-templates/sample-app/typescript/tsconfig.json +4 -3
  65. package/lib/legacy-aws-auth.js +1 -1
  66. package/lib/legacy-exports-source.d.ts +1 -1
  67. package/lib/legacy-exports-source.js +3 -3
  68. package/lib/legacy-types.js +1 -1
  69. package/lib/logging.js +4 -4
  70. package/lib/util.js +2 -1
  71. package/package.json +21 -22
  72. package/lib/api/environment.d.ts +0 -1
  73. package/lib/api/environment.js +0 -18
  74. package/lib/api/garbage-collection.d.ts +0 -1
  75. package/lib/api/garbage-collection.js +0 -18
  76. package/lib/api/logs-monitor.d.ts +0 -1
  77. package/lib/api/resource-import.d.ts +0 -1
  78. package/lib/api/resource-import.js +0 -18
  79. package/lib/api/rwlock.d.ts +0 -1
  80. package/lib/api/rwlock.js +0 -18
  81. package/lib/api/stack-events.d.ts +0 -1
  82. package/lib/api/stack-events.js +0 -18
  83. package/lib/api/toolkit-info.d.ts +0 -1
  84. package/lib/api/toolkit-info.js +0 -18
  85. package/lib/api/tree.d.ts +0 -1
  86. package/lib/api/tree.js +0 -18
  87. package/lib/api/work-graph.d.ts +0 -1
  88. package/lib/api/work-graph.js +0 -18
  89. package/lib/commands/diff.d.ts +0 -1
  90. package/lib/commands/diff.js +0 -7
  91. package/lib/context-providers/ami.d.ts +0 -1
  92. package/lib/context-providers/ami.js +0 -18
  93. package/lib/context-providers/availability-zones.d.ts +0 -1
  94. package/lib/context-providers/availability-zones.js +0 -18
  95. package/lib/context-providers/cc-api-provider.d.ts +0 -1
  96. package/lib/context-providers/cc-api-provider.js +0 -18
  97. package/lib/context-providers/endpoint-service-availability-zones.d.ts +0 -1
  98. package/lib/context-providers/endpoint-service-availability-zones.js +0 -18
  99. package/lib/context-providers/hosted-zones.d.ts +0 -1
  100. package/lib/context-providers/hosted-zones.js +0 -18
  101. package/lib/context-providers/index.d.ts +0 -1
  102. package/lib/context-providers/index.js +0 -18
  103. package/lib/context-providers/keys.d.ts +0 -1
  104. package/lib/context-providers/keys.js +0 -18
  105. package/lib/context-providers/load-balancers.d.ts +0 -1
  106. package/lib/context-providers/load-balancers.js +0 -18
  107. package/lib/context-providers/security-groups.d.ts +0 -1
  108. package/lib/context-providers/security-groups.js +0 -18
  109. package/lib/context-providers/ssm-parameters.d.ts +0 -1
  110. package/lib/context-providers/ssm-parameters.js +0 -18
  111. package/lib/context-providers/vpcs.d.ts +0 -1
  112. package/lib/context-providers/vpcs.js +0 -18
package/lib/cli/cli.js CHANGED
@@ -2,34 +2,30 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.exec = exec;
4
4
  exports.cli = cli;
5
+ /* eslint-disable @typescript-eslint/no-shadow */ // yargs
5
6
  const cxapi = require("@aws-cdk/cx-api");
7
+ const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
6
8
  const chalk = require("chalk");
7
9
  const cdk_toolkit_1 = require("./cdk-toolkit");
8
- const ci_systems_1 = require("./ci-systems");
9
10
  const io_host_1 = require("./io-host");
10
11
  const parse_command_line_arguments_1 = require("./parse-command-line-arguments");
11
12
  const platform_warnings_1 = require("./platform-warnings");
12
13
  const pretty_print_error_1 = require("./pretty-print-error");
14
+ const singleton_plugin_host_1 = require("./singleton-plugin-host");
13
15
  const user_configuration_1 = require("./user-configuration");
14
16
  const version = require("./version");
15
- const api_1 = require("../../../@aws-cdk/toolkit-lib/lib/api");
16
- const private_1 = require("../../../@aws-cdk/toolkit-lib/lib/api/io/private");
17
+ const api_private_1 = require("../../lib/api-private");
18
+ const api_1 = require("../api");
17
19
  const aws_auth_1 = require("../api/aws-auth");
18
20
  const bootstrap_1 = require("../api/bootstrap");
19
21
  const deployments_1 = require("../api/deployments");
20
22
  const hotswap_1 = require("../api/hotswap");
21
- const notices_1 = require("../api/notices");
22
- const toolkit_info_1 = require("../api/toolkit-info");
23
23
  const context_1 = require("../commands/context");
24
24
  const docs_1 = require("../commands/docs");
25
25
  const doctor_1 = require("../commands/doctor");
26
26
  const init_1 = require("../commands/init");
27
27
  const migrate_1 = require("../commands/migrate");
28
28
  const cxapp_1 = require("../cxapp");
29
- const singleton_plugin_host_1 = require("./singleton-plugin-host");
30
- const shared_private_1 = require("../../../@aws-cdk/toolkit-lib/lib/api/shared-private");
31
- /* eslint-disable max-len */
32
- /* eslint-disable @typescript-eslint/no-shadow */ // yargs
33
29
  if (!process.stdout.isTTY) {
34
30
  // Disable chalk color highlighting
35
31
  process.env.FORCE_COLOR = '0';
@@ -81,41 +77,39 @@ async function exec(args, synthesizer) {
81
77
  },
82
78
  });
83
79
  await configuration.load();
80
+ const ioHelper = (0, api_private_1.asIoHelper)(ioHost, ioHost.currentAction);
84
81
  const shouldDisplayNotices = configuration.settings.get(['notices']);
85
- if (shouldDisplayNotices !== undefined) {
86
- // Notices either go to stderr, or nowhere
87
- ioHost.noticesDestination = shouldDisplayNotices ? 'stderr' : 'drop';
88
- }
89
- else {
90
- // If the user didn't supply either `--notices` or `--no-notices`, we do
91
- // autodetection. The autodetection currently is: do write notices if we are
92
- // not on CI, or are on a CI system where we know that writing to stderr is
93
- // safe. We fail "closed"; that is, we decide to NOT print for unknown CI
94
- // systems, even though technically we maybe could.
95
- const safeToWriteToStdErr = !argv.ci || Boolean((0, ci_systems_1.ciSystemIsStdErrSafe)());
96
- ioHost.noticesDestination = safeToWriteToStdErr ? 'stderr' : 'drop';
97
- }
98
- const notices = notices_1.Notices.create({
82
+ // Notices either go to stderr, or nowhere
83
+ ioHost.noticesDestination = shouldDisplayNotices ? 'stderr' : 'drop';
84
+ const notices = api_1.Notices.create({
99
85
  ioHost,
100
86
  context: configuration.context,
101
87
  output: configuration.settings.get(['outdir']),
102
- includeAcknowledged: cmd === 'notices' ? !argv.unacknowledged : false,
103
88
  httpOptions: {
104
89
  proxyAddress: configuration.settings.get(['proxy']),
105
90
  caBundlePath: configuration.settings.get(['caBundlePath']),
106
91
  },
107
92
  cliVersion: version.versionNumber(),
108
93
  });
109
- await notices.refresh();
110
- const ioHelper = (0, private_1.asIoHelper)(ioHost, ioHost.currentAction);
94
+ const refreshNotices = (async () => {
95
+ // the cdk notices command has it's own refresh
96
+ if (shouldDisplayNotices && cmd !== 'notices') {
97
+ try {
98
+ return await notices.refresh();
99
+ }
100
+ catch (e) {
101
+ await ioHelper.notify(api_private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Could not refresh notices: ${e}`));
102
+ }
103
+ }
104
+ })();
111
105
  const sdkProvider = await aws_auth_1.SdkProvider.withAwsCliCompatibleDefaults({
112
106
  ioHelper,
113
107
  profile: configuration.settings.get(['profile']),
114
- requestHandler: await (0, shared_private_1.makeRequestHandler)(ioHelper, {
108
+ requestHandler: await (0, aws_auth_1.makeRequestHandler)(ioHelper, {
115
109
  proxyAddress: argv.proxy,
116
110
  caBundlePath: argv['ca-bundle-path'],
117
111
  }),
118
- logger: new aws_auth_1.SdkToCliLogger((0, private_1.asIoHelper)(ioHost, ioHost.currentAction)),
112
+ logger: new aws_auth_1.IoHostSdkLogger((0, api_private_1.asIoHelper)(ioHost, ioHost.currentAction)),
119
113
  pluginHost: singleton_plugin_host_1.GLOBAL_PLUGIN_HOST,
120
114
  });
121
115
  let outDirLock;
@@ -144,8 +138,8 @@ async function exec(args, synthesizer) {
144
138
  }
145
139
  }
146
140
  loadPlugins(configuration.settings);
147
- if (typeof (cmd) !== 'string') {
148
- throw new api_1.ToolkitError(`First argument should be a string. Got: ${cmd} (${typeof (cmd)})`);
141
+ if ((typeof cmd) !== 'string') {
142
+ throw new toolkit_lib_1.ToolkitError(`First argument should be a string. Got: ${cmd} (${typeof cmd})`);
149
143
  }
150
144
  try {
151
145
  return await main(cmd, argv);
@@ -155,26 +149,29 @@ async function exec(args, synthesizer) {
155
149
  await outDirLock?.release();
156
150
  // Do PSAs here
157
151
  await version.displayVersionMessage();
152
+ await refreshNotices;
158
153
  if (cmd === 'notices') {
159
154
  await notices.refresh({ force: true });
160
- notices.display({ showTotal: argv.unacknowledged });
155
+ await notices.display({
156
+ includeAcknowledged: !argv.unacknowledged,
157
+ showTotal: argv.unacknowledged,
158
+ });
161
159
  }
162
160
  else if (cmd !== 'version') {
163
- await notices.refresh();
164
- notices.display();
161
+ await notices.display();
165
162
  }
166
163
  }
167
164
  async function main(command, args) {
168
165
  ioHost.currentAction = command;
169
- const toolkitStackName = toolkit_info_1.ToolkitInfo.determineName(configuration.settings.get(['toolkitStackName']));
166
+ const toolkitStackName = api_1.ToolkitInfo.determineName(configuration.settings.get(['toolkitStackName']));
170
167
  ioHost.defaults.debug(`Toolkit stack: ${chalk.bold(toolkitStackName)}`);
171
168
  const cloudFormation = new deployments_1.Deployments({
172
169
  sdkProvider,
173
170
  toolkitStackName,
174
- ioHelper: (0, private_1.asIoHelper)(ioHost, ioHost.currentAction),
171
+ ioHelper: (0, api_private_1.asIoHelper)(ioHost, ioHost.currentAction),
175
172
  });
176
173
  if (args.all && args.STACKS) {
177
- throw new api_1.ToolkitError('You must either specify a list of Stacks or the `--all` argument');
174
+ throw new toolkit_lib_1.ToolkitError('You must either specify a list of Stacks or the `--all` argument');
178
175
  }
179
176
  args.STACKS = args.STACKS ?? (args.STACK ? [args.STACK] : []);
180
177
  args.ENVIRONMENTS = args.ENVIRONMENTS ?? [];
@@ -236,18 +233,21 @@ async function exec(args, synthesizer) {
236
233
  });
237
234
  case 'refactor':
238
235
  if (!configuration.settings.get(['unstable']).includes('refactor')) {
239
- throw new api_1.ToolkitError('Unstable feature use: \'refactor\' is unstable. It must be opted in via \'--unstable\', e.g. \'cdk refactor --unstable=refactor\'');
236
+ throw new toolkit_lib_1.ToolkitError('Unstable feature use: \'refactor\' is unstable. It must be opted in via \'--unstable\', e.g. \'cdk refactor --unstable=refactor\'');
240
237
  }
241
238
  ioHost.currentAction = 'refactor';
242
239
  return cli.refactor({
243
240
  dryRun: args.dryRun,
244
241
  selector,
242
+ excludeFile: args.excludeFile,
243
+ mappingFile: args.mappingFile,
244
+ revert: args.revert,
245
245
  });
246
246
  case 'bootstrap':
247
247
  ioHost.currentAction = 'bootstrap';
248
248
  const source = determineBootstrapVersion(ioHost, args);
249
249
  if (args.showTemplate) {
250
- const bootstrapper = new bootstrap_1.Bootstrapper(source, (0, private_1.asIoHelper)(ioHost, ioHost.currentAction));
250
+ const bootstrapper = new bootstrap_1.Bootstrapper(source, (0, api_private_1.asIoHelper)(ioHost, ioHost.currentAction));
251
251
  return bootstrapper.showTemplate(args.json);
252
252
  }
253
253
  return cli.bootstrap(args.ENVIRONMENTS, {
@@ -283,16 +283,16 @@ async function exec(args, synthesizer) {
283
283
  }
284
284
  }
285
285
  if (args.execute !== undefined && args.method !== undefined) {
286
- throw new api_1.ToolkitError('Can not supply both --[no-]execute and --method at the same time');
286
+ throw new toolkit_lib_1.ToolkitError('Can not supply both --[no-]execute and --method at the same time');
287
287
  }
288
288
  let deploymentMethod;
289
289
  switch (args.method) {
290
290
  case 'direct':
291
291
  if (args.changeSetName) {
292
- throw new api_1.ToolkitError('--change-set-name cannot be used with method=direct');
292
+ throw new toolkit_lib_1.ToolkitError('--change-set-name cannot be used with method=direct');
293
293
  }
294
294
  if (args.importExistingResources) {
295
- throw new api_1.ToolkitError('--import-existing-resources cannot be enabled with method=direct');
295
+ throw new toolkit_lib_1.ToolkitError('--import-existing-resources cannot be enabled with method=direct');
296
296
  }
297
297
  deploymentMethod = { method: 'direct' };
298
298
  break;
@@ -406,7 +406,7 @@ async function exec(args, synthesizer) {
406
406
  case 'gc':
407
407
  ioHost.currentAction = 'gc';
408
408
  if (!configuration.settings.get(['unstable']).includes('gc')) {
409
- throw new api_1.ToolkitError('Unstable feature use: \'gc\' is unstable. It must be opted in via \'--unstable\', e.g. \'cdk gc --unstable=gc\'');
409
+ throw new toolkit_lib_1.ToolkitError('Unstable feature use: \'gc\' is unstable. It must be opted in via \'--unstable\', e.g. \'cdk gc --unstable=gc\'');
410
410
  }
411
411
  return cli.garbageCollect(args.ENVIRONMENTS, {
412
412
  action: args.action,
@@ -474,7 +474,7 @@ async function exec(args, synthesizer) {
474
474
  ioHost.currentAction = 'version';
475
475
  return ioHost.defaults.result(version.displayVersion());
476
476
  default:
477
- throw new api_1.ToolkitError('Unknown command: ' + command);
477
+ throw new toolkit_lib_1.ToolkitError('Unknown command: ' + command);
478
478
  }
479
479
  }
480
480
  }
@@ -517,7 +517,7 @@ function arrayFromYargs(xs) {
517
517
  }
518
518
  function determineHotswapMode(hotswap, hotswapFallback, watch) {
519
519
  if (hotswap && hotswapFallback) {
520
- throw new api_1.ToolkitError('Can not supply both --hotswap and --hotswap-fallback at the same time');
520
+ throw new toolkit_lib_1.ToolkitError('Can not supply both --hotswap and --hotswap-fallback at the same time');
521
521
  }
522
522
  else if (!hotswap && !hotswapFallback) {
523
523
  if (hotswap === undefined && hotswapFallback === undefined) {
@@ -553,4 +553,4 @@ function cli(args = process.argv.slice(2)) {
553
553
  });
554
554
  }
555
555
  /* c8 ignore stop */
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUNBLG9CQXFlQztBQStERCxrQkFhQztBQTFsQkQseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQiwrQ0FBMkQ7QUFDM0QsNkNBQW9EO0FBRXBELHVDQUFzQztBQUN0QyxpRkFBMkU7QUFDM0UsMkRBQStEO0FBQy9ELDZEQUF3RDtBQUV4RCw2REFBcUQ7QUFDckQscUNBQXFDO0FBQ3JDLCtEQUFxRTtBQUNyRSw4RUFBOEU7QUFDOUUsOENBQTZFO0FBRTdFLGdEQUFnRDtBQUVoRCxvREFBaUQ7QUFDakQsNENBQTZDO0FBQzdDLDRDQUF5QztBQUd6QyxzREFBa0Q7QUFDbEQsaURBQWdFO0FBQ2hFLDJDQUF3QztBQUN4QywrQ0FBNEM7QUFDNUMsMkNBQW9FO0FBQ3BFLGlEQUF5RDtBQUN6RCxvQ0FBd0Q7QUFFeEQsbUVBQTZEO0FBQzdELHlGQUEwRjtBQUMxRiw0QkFBNEI7QUFDNUIsaURBQWlELENBQUMsUUFBUTtBQUUxRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixtQ0FBbUM7SUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLENBQUM7QUFFTSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQWMsRUFBRSxXQUF5QjtJQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsd0RBQXlCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0QixrQ0FBa0M7SUFDbEMsZ0NBQWdDO0lBQ2hDLElBQUksY0FBYyxHQUFtQixNQUFNLENBQUM7SUFDNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFD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QWtHO1FBQ2xHLHVFQUF1RTtRQUN2RSxJQUFBLHFDQUFnQixFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNELG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBDZGtUb29sa2l0LCBBc3NldEJ1aWxkVGltZSB9IGZyb20gJy4vY2RrLXRvb2xraXQnO1xuaW1wb3J0IHsgY2lTeXN0ZW1Jc1N0ZEVyclNhZmUgfSBmcm9tICcuL2NpLXN5c3RlbXMnO1xuaW1wb3J0IHR5cGUgeyBJb01lc3NhZ2VMZXZlbCB9IGZyb20gJy4vaW8taG9zdCc7XG5pbXBvcnQgeyBDbGlJb0hvc3QgfSBmcm9tICcuL2lvLWhvc3QnO1xuaW1wb3J0IHsgcGFyc2VDb21tYW5kTGluZUFyZ3VtZW50cyB9IGZyb20gJy4vcGFyc2UtY29tbWFuZC1saW5lLWFyZ3VtZW50cyc7XG5pbXBvcnQgeyBjaGVja0ZvclBsYXRmb3JtV2FybmluZ3MgfSBmcm9tICcuL3BsYXRmb3JtLXdhcm5pbmdzJztcbmltcG9ydCB7IHByZXR0eVByaW50RXJyb3IgfSBmcm9tICcuL3ByZXR0eS1wcmludC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuL3VzZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi91c2VyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0ICogYXMgdmVyc2lvbiBmcm9tICcuL3ZlcnNpb24nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vQGF3cy1jZGsvdG9vbGtpdC1saWIvbGliL2FwaSc7XG5pbXBvcnQgeyBhc0lvSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vQGF3cy1jZGsvdG9vbGtpdC1saWIvbGliL2FwaS9pby9wcml2YXRlJztcbmltcG9ydCB7IFNka1Byb3ZpZGVyLCBTZGtUb0NsaUxvZ2dlciwgc2V0U2RrVHJhY2luZyB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aCc7XG5pbXBvcnQgdHlwZSB7IEJvb3RzdHJhcFNvdXJjZSB9IGZyb20gJy4uL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVyIH0gZnJvbSAnLi4vYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgdHlwZSB7IERlcGxveW1lbnRNZXRob2QgfSBmcm9tICcuLi9hcGkvZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgRGVwbG95bWVudHMgfSBmcm9tICcuLi9hcGkvZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgSG90c3dhcE1vZGUgfSBmcm9tICcuLi9hcGkvaG90c3dhcCc7XG5pbXBvcnQgeyBOb3RpY2VzIH0gZnJvbSAnLi4vYXBpL25vdGljZXMnO1xuaW1wb3J0IHR5cGUgeyBJUmVhZExvY2sgfSBmcm9tICcuLi9hcGkvcndsb2NrJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3MgfSBmcm9tICcuLi9hcGkvc2V0dGluZ3MnO1xuaW1wb3J0IHsgVG9vbGtpdEluZm8gfSBmcm9tICcuLi9hcGkvdG9vbGtpdC1pbmZvJztcbmltcG9ydCB7IGNvbnRleHRIYW5kbGVyIGFzIGNvbnRleHQgfSBmcm9tICcuLi9jb21tYW5kcy9jb250ZXh0JztcbmltcG9ydCB7IGRvY3MgfSBmcm9tICcuLi9jb21tYW5kcy9kb2NzJztcbmltcG9ydCB7IGRvY3RvciB9IGZyb20gJy4uL2NvbW1hbmRzL2RvY3Rvcic7XG5pbXBvcnQgeyBjbGlJbml0LCBwcmludEF2YWlsYWJsZVRlbXBsYXRlcyB9IGZyb20gJy4uL2NvbW1hbmRzL2luaXQnO1xuaW1wb3J0IHsgZ2V0TWlncmF0ZVNjYW5UeXBlIH0gZnJvbSAnLi4vY29tbWFuZHMvbWlncmF0ZSc7XG5pbXBvcnQgeyBleGVjUHJvZ3JhbSwgQ2xvdWRFeGVjdXRhYmxlIH0gZnJvbSAnLi4vY3hhcHAnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yLCBTeW50aGVzaXplciB9IGZyb20gJy4uL2N4YXBwJztcbmltcG9ydCB7IEdMT0JBTF9QTFVHSU5fSE9TVCB9IGZyb20gJy4vc2luZ2xldG9uLXBsdWdpbi1ob3N0JztcbmltcG9ydCB7IG1ha2VSZXF1ZXN0SGFuZGxlciB9IGZyb20gJy4uLy4uLy4uL0Bhd3MtY2RrL3Rvb2xraXQtbGliL2xpYi9hcGkvc2hhcmVkLXByaXZhdGUnO1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqLyAvLyB5YXJnc1xuXG5pZiAoIXByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XG4gIC8vIERpc2FibGUgY2hhbGsgY29sb3IgaGlnaGxpZ2h0aW5nXG4gIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzAnO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlYyhhcmdzOiBzdHJpbmdbXSwgc3ludGhlc2l6ZXI/OiBTeW50aGVzaXplcik6IFByb21pc2U8bnVtYmVyIHwgdm9pZD4ge1xuICBjb25zdCBhcmd2ID0gYXdhaXQgcGFyc2VDb21tYW5kTGluZUFyZ3VtZW50cyhhcmdzKTtcbiAgY29uc3QgY21kID0gYXJndi5fWzBdO1xuXG4gIC8vIGlmIG9uZSAtdiwgbG9nIGF0IGEgREVCVUcgbGV2ZWxcbiAgLy8gaWYgMiAtdiwgbG9nIGF0IGEgVFJBQ0UgbGV2ZWxcbiAgbGV0IGlvTWVzc2FnZUxldmVsOiBJb01lc3NhZ2VMZXZlbCA9ICdpbmZvJztcbiAgaWYgKGFyZ3YudmVyYm9zZSkge1xuICAgIHN3aXRjaCAoYXJndi52ZXJib3NlKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlvTWVzc2FnZUxldmVsID0gJ2RlYnVnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpb01lc3NhZ2VMZXZlbCA9ICd0cmFjZSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlvSG9zdCA9IENsaUlvSG9zdC5pbnN0YW5jZSh7XG4gICAgbG9nTGV2ZWw6IGlvTWVzc2FnZUxldmVsLFxuICAgIGlzVFRZOiBwcm9jZXNzLnN0ZG91dC5pc1RUWSxcbiAgICBpc0NJOiBCb29sZWFuKGFyZ3YuY2kpLFxuICAgIGN1cnJlbnRBY3Rpb246IGNtZCxcbiAgICBzdGFja1Byb2dyZXNzOiBhcmd2LnByb2dyZXNzLFxuICB9LCB0cnVlKTtcblxuICAvLyBEZWJ1ZyBzaG91bGQgYWx3YXlzIGltcGx5IHRyYWNpbmdcbiAgaWYgKGFyZ3YuZGVidWcgfHwgYXJndi52ZXJib3NlID4gMikge1xuICAgIHNldFNka1RyYWNpbmcodHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gY2xpLWxpYi1hbHBoYSBuZWVkcyB0byBleHBsaWNpdGx5IHNldCBpbiBjYXNlIGl0IHdhcyBlbmFibGVkIGJlZm9yZVxuICAgIHNldFNka1RyYWNpbmcoZmFsc2UpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjaGVja0ZvclBsYXRmb3JtV2FybmluZ3MoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZyhgRXJyb3Igd2hpbGUgY2hlY2tpbmcgZm9yIHBsYXRmb3JtIHdhcm5pbmdzOiAke2V9YCk7XG4gIH1cblxuICBpb0hvc3QuZGVmYXVsdHMuZGVidWcoJ0NESyBUb29sa2l0IENMSSB2ZXJzaW9uOicsIHZlcnNpb24uZGlzcGxheVZlcnNpb24oKSk7XG4gIGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZygnQ29tbWFuZCBsaW5lIGFyZ3VtZW50czonLCBhcmd2KTtcblxuICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgIGNvbW1hbmRMaW5lQXJndW1lbnRzOiB7XG4gICAgICAuLi5hcmd2LFxuICAgICAgXzogYXJndi5fIGFzIFtDb21tYW5kLCAuLi5zdHJpbmdbXV0sIC8vIFR5cGVTY3JpcHQgYXQgaXRzIGJlc3RcbiAgICB9LFxuICB9KTtcbiAgYXdhaXQgY29uZmlndXJhdGlvbi5sb2FkKCk7XG5cbiAgY29uc3Qgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ25vdGljZXMnXSk7XG4gIGlmIChzaG91bGREaXNwbGF5Tm90aWNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTm90aWNlcyBlaXRoZXIgZ28gdG8gc3RkZXJyLCBvciBub3doZXJlXG4gICAgaW9Ib3N0Lm5vdGljZXNEZXN0aW5hdGlvbiA9IHNob3VsZERpc3BsYXlOb3RpY2VzID8gJ3N0ZGVycicgOiAnZHJvcCc7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIHVzZXIgZGlkbid0IHN1cHBseSBlaXRoZXIgYC0tbm90aWNlc2Agb3IgYC0tbm8tbm90aWNlc2AsIHdlIGRvXG4gICAgLy8gYXV0b2RldGVjdGlvbi4gVGhlIGF1dG9kZXRlY3Rpb24gY3VycmVudGx5IGlzOiBkbyB3cml0ZSBub3RpY2VzIGlmIHdlIGFyZVxuICAgIC8vIG5vdCBvbiBDSSwgb3IgYXJlIG9uIGEgQ0kgc3lzdGVtIHdoZXJlIHdlIGtub3cgdGhhdCB3cml0aW5nIHRvIHN0ZGVyciBpc1xuICAgIC8vIHNhZmUuIFdlIGZhaWwgXCJjbG9zZWRcIjsgdGhhdCBpcywgd2UgZGVjaWRlIHRvIE5PVCBwcmludCBmb3IgdW5rbm93biBDSVxuICAgIC8vIHN5c3RlbXMsIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5IHdlIG1heWJlIGNvdWxkLlxuICAgIGNvbnN0IHNhZmVUb1dyaXRlVG9TdGRFcnIgPSAhYXJndi5jaSB8fCBCb29sZWFuKGNpU3lzdGVtSXNTdGRFcnJTYWZlKCkpO1xuICAgIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSBzYWZlVG9Xcml0ZVRvU3RkRXJyID8gJ3N0ZGVycicgOiAnZHJvcCc7XG4gIH1cblxuICBjb25zdCBub3RpY2VzID0gTm90aWNlcy5jcmVhdGUoe1xuICAgIGlvSG9zdCxcbiAgICBjb250ZXh0OiBjb25maWd1cmF0aW9uLmNvbnRleHQsXG4gICAgb3V0cHV0OiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ291dGRpciddKSxcbiAgICBpbmNsdWRlQWNrbm93bGVkZ2VkOiBjbWQgPT09ICdub3RpY2VzJyA/ICFhcmd2LnVuYWNrbm93bGVkZ2VkIDogZmFsc2UsXG4gICAgaHR0cE9wdGlvbnM6IHtcbiAgICAgIHByb3h5QWRkcmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm94eSddKSxcbiAgICAgIGNhQnVuZGxlUGF0aDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydjYUJ1bmRsZVBhdGgnXSksXG4gICAgfSxcbiAgICBjbGlWZXJzaW9uOiB2ZXJzaW9uLnZlcnNpb25OdW1iZXIoKSxcbiAgfSk7XG4gIGF3YWl0IG5vdGljZXMucmVmcmVzaCgpO1xuXG4gIGNvbnN0IGlvSGVscGVyID0gYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSk7XG4gIGNvbnN0IHNka1Byb3ZpZGVyID0gYXdhaXQgU2RrUHJvdmlkZXIud2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyh7XG4gICAgaW9IZWxwZXIsXG4gICAgcHJvZmlsZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9maWxlJ10pLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBhd2FpdCBtYWtlUmVxdWVzdEhhbmRsZXIoaW9IZWxwZXIsIHtcbiAgICAgIHByb3h5QWRkcmVzczogYXJndi5wcm94eSxcbiAgICAgIGNhQnVuZGxlUGF0aDogYXJndlsnY2EtYnVuZGxlLXBhdGgnXSxcbiAgICB9KSxcbiAgICBsb2dnZXI6IG5ldyBTZGtUb0NsaUxvZ2dlcihhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KSksXG4gICAgcGx1Z2luSG9zdDogR0xPQkFMX1BMVUdJTl9IT1NULFxuICB9KTtcblxuICBsZXQgb3V0RGlyTG9jazogSVJlYWRMb2NrIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBjb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyLFxuICAgIHN5bnRoZXNpemVyOlxuICAgICAgc3ludGhlc2l6ZXIgPz9cbiAgICAgIChhc3luYyAoYXdzLCBjb25maWcpID0+IHtcbiAgICAgICAgLy8gSW52b2tlICdleGVjUHJvZ3JhbScsIGFuZCBjb3B5IHRoZSBsb2NrIGZvciB0aGUgZGlyZWN0b3J5IGluIHRoZSBnbG9iYWxcbiAgICAgICAgLy8gdmFyaWFibGUgaGVyZS4gSXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBDTEkgZXhpdHMuIExvY2tzIGFyZSBub3QgcmUtZW50cmFudFxuICAgICAgICAvLyBzbyByZWxlYXNlIGl0IGlmIHdlIGhhdmUgdG8gc3ludGhlc2l6ZSBtb3JlIHRoYW4gb25jZSAoYmVjYXVzZSBvZiBjb250ZXh0IGxvb2t1cHMpLlxuICAgICAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG4gICAgICAgIGNvbnN0IHsgYXNzZW1ibHksIGxvY2sgfSA9IGF3YWl0IGV4ZWNQcm9ncmFtKGF3cywgaW9Ib3N0LmFzSW9IZWxwZXIoKSwgY29uZmlnKTtcbiAgICAgICAgb3V0RGlyTG9jayA9IGxvY2s7XG4gICAgICAgIHJldHVybiBhc3NlbWJseTtcbiAgICAgIH0pLFxuICAgIGlvSGVscGVyOiBpb0hvc3QuYXNJb0hlbHBlcigpLFxuICB9KTtcblxuICAvKiogRnVuY3Rpb24gdG8gbG9hZCBwbHVnLWlucywgdXNpbmcgY29uZmlndXJhdGlvbnMgYWRkaXRpdmVseS4gKi9cbiAgZnVuY3Rpb24gbG9hZFBsdWdpbnMoLi4uc2V0dGluZ3M6IFNldHRpbmdzW10pIHtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzZXR0aW5ncykge1xuICAgICAgY29uc3QgcGx1Z2luczogc3RyaW5nW10gPSBzb3VyY2UuZ2V0KFsncGx1Z2luJ10pIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuICAgICAgICBHTE9CQUxfUExVR0lOX0hPU1QubG9hZChwbHVnaW4sIGlvSG9zdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbG9hZFBsdWdpbnMoY29uZmlndXJhdGlvbi5zZXR0aW5ncyk7XG5cbiAgaWYgKHR5cGVvZihjbWQpICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZy4gR290OiAke2NtZH0gKCR7dHlwZW9mKGNtZCl9KWApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbWFpbihjbWQsIGFyZ3YpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIElmIHdlIGxvY2tlZCB0aGUgJ2Nkay5vdXQnIGRpcmVjdG9yeSwgcmVsZWFzZSBpdCBoZXJlLlxuICAgIGF3YWl0IG91dERpckxvY2s/LnJlbGVhc2UoKTtcblxuICAgIC8vIERvIFBTQXMgaGVyZVxuICAgIGF3YWl0IHZlcnNpb24uZGlzcGxheVZlcnNpb25NZXNzYWdlKCk7XG5cbiAgICBpZiAoY21kID09PSAnbm90aWNlcycpIHtcbiAgICAgIGF3YWl0IG5vdGljZXMucmVmcmVzaCh7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgbm90aWNlcy5kaXNwbGF5KHsgc2hvd1RvdGFsOiBhcmd2LnVuYWNrbm93bGVkZ2VkIH0pO1xuICAgIH0gZWxzZSBpZiAoY21kICE9PSAndmVyc2lvbicpIHtcbiAgICAgIGF3YWl0IG5vdGljZXMucmVmcmVzaCgpO1xuICAgICAgbm90aWNlcy5kaXNwbGF5KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbWFpbihjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IGFueSk6IFByb21pc2U8bnVtYmVyIHwgdm9pZD4ge1xuICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gY29tbWFuZCBhcyBhbnk7XG4gICAgY29uc3QgdG9vbGtpdFN0YWNrTmFtZTogc3RyaW5nID0gVG9vbGtpdEluZm8uZGV0ZXJtaW5lTmFtZShjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRTdGFja05hbWUnXSkpO1xuICAgIGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZyhgVG9vbGtpdCBzdGFjazogJHtjaGFsay5ib2xkKHRvb2xraXRTdGFja05hbWUpfWApO1xuXG4gICAgY29uc3QgY2xvdWRGb3JtYXRpb24gPSBuZXcgRGVwbG95bWVudHMoe1xuICAgICAgc2RrUHJvdmlkZXIsXG4gICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgaW9IZWxwZXI6IGFzSW9IZWxwZXIoaW9Ib3N0LCBpb0hvc3QuY3VycmVudEFjdGlvbiBhcyBhbnkpLFxuICAgIH0pO1xuXG4gICAgaWYgKGFyZ3MuYWxsICYmIGFyZ3MuU1RBQ0tTKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdZb3UgbXVzdCBlaXRoZXIgc3BlY2lmeSBhIGxpc3Qgb2YgU3RhY2tzIG9yIHRoZSBgLS1hbGxgIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgYXJncy5TVEFDS1MgPSBhcmdzLlNUQUNLUyA/PyAoYXJncy5TVEFDSyA/IFthcmdzLlNUQUNLXSA6IFtdKTtcbiAgICBhcmdzLkVOVklST05NRU5UUyA9IGFyZ3MuRU5WSVJPTk1FTlRTID8/IFtdO1xuXG4gICAgY29uc3Qgc2VsZWN0b3I6IFN0YWNrU2VsZWN0b3IgPSB7XG4gICAgICBhbGxUb3BMZXZlbDogYXJncy5hbGwsXG4gICAgICBwYXR0ZXJuczogYXJncy5TVEFDS1MsXG4gICAgfTtcblxuICAgIGNvbnN0IGNsaSA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGlvSG9zdCxcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICBkZXBsb3ltZW50czogY2xvdWRGb3JtYXRpb24sXG4gICAgICB2ZXJib3NlOiBhcmd2LnRyYWNlIHx8IGFyZ3YudmVyYm9zZSA+IDAsXG4gICAgICBpZ25vcmVFcnJvcnM6IGFyZ3ZbJ2lnbm9yZS1lcnJvcnMnXSxcbiAgICAgIHN0cmljdDogYXJndi5zdHJpY3QsXG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcbiAgICAgIGNhc2UgJ2NvbnRleHQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdjb250ZXh0JztcbiAgICAgICAgcmV0dXJuIGNvbnRleHQoe1xuICAgICAgICAgIGNvbnRleHQ6IGNvbmZpZ3VyYXRpb24uY29udGV4dCxcbiAgICAgICAgICBjbGVhcjogYXJndi5jbGVhcixcbiAgICAgICAgICBqc29uOiBhcmd2Lmpzb24sXG4gICAgICAgICAgZm9yY2U6IGFyZ3YuZm9yY2UsXG4gICAgICAgICAgcmVzZXQ6IGFyZ3YucmVzZXQsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkb2NzJzpcbiAgICAgIGNhc2UgJ2RvYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RvY3MnO1xuICAgICAgICByZXR1cm4gZG9jcyh7IGJyb3dzZXI6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYnJvd3NlciddKSB9KTtcblxuICAgICAgY2FzZSAnZG9jdG9yJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZG9jdG9yJztcbiAgICAgICAgcmV0dXJuIGRvY3RvcigpO1xuXG4gICAgICBjYXNlICdscyc6XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnbGlzdCc7XG4gICAgICAgIHJldHVybiBjbGkubGlzdChhcmdzLlNUQUNLUywge1xuICAgICAgICAgIGxvbmc6IGFyZ3MubG9uZyxcbiAgICAgICAgICBqc29uOiBhcmd2Lmpzb24sXG4gICAgICAgICAgc2hvd0RlcHM6IGFyZ3Muc2hvd0RlcGVuZGVuY2llcyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RpZmYnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkaWZmJztcbiAgICAgICAgY29uc3QgZW5hYmxlRGlmZk5vRmFpbCA9IGlzRmVhdHVyZUVuYWJsZWQoY29uZmlndXJhdGlvbiwgY3hhcGkuRU5BQkxFX0RJRkZfTk9fRkFJTF9DT05URVhUKTtcbiAgICAgICAgcmV0dXJuIGNsaS5kaWZmKHtcbiAgICAgICAgICBzdGFja05hbWVzOiBhcmdzLlNUQUNLUyxcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IGFyZ3MudGVtcGxhdGUsXG4gICAgICAgICAgc3RyaWN0OiBhcmdzLnN0cmljdCxcbiAgICAgICAgICBjb250ZXh0TGluZXM6IGFyZ3MuY29udGV4dExpbmVzLFxuICAgICAgICAgIHNlY3VyaXR5T25seTogYXJncy5zZWN1cml0eU9ubHksXG4gICAgICAgICAgZmFpbDogYXJncy5mYWlsICE9IG51bGwgPyBhcmdzLmZhaWwgOiAhZW5hYmxlRGlmZk5vRmFpbCxcbiAgICAgICAgICBjb21wYXJlQWdhaW5zdFByb2Nlc3NlZFRlbXBsYXRlOiBhcmdzLnByb2Nlc3NlZCxcbiAgICAgICAgICBxdWlldDogYXJncy5xdWlldCxcbiAgICAgICAgICBjaGFuZ2VTZXQ6IGFyZ3NbJ2NoYW5nZS1zZXQnXSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncmVmYWN0b3InOlxuICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndW5zdGFibGUnXSkuaW5jbHVkZXMoJ3JlZmFjdG9yJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdVbnN0YWJsZSBmZWF0dXJlIHVzZTogXFwncmVmYWN0b3JcXCcgaXMgdW5zdGFibGUuIEl0IG11c3QgYmUgb3B0ZWQgaW4gdmlhIFxcJy0tdW5zdGFibGVcXCcsIGUuZy4gXFwnY2RrIHJlZmFjdG9yIC0tdW5zdGFibGU9cmVmYWN0b3JcXCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3JlZmFjdG9yJztcbiAgICAgICAgcmV0dXJuIGNsaS5yZWZhY3Rvcih7XG4gICAgICAgICAgZHJ5UnVuOiBhcmdzLmRyeVJ1bixcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Jvb3RzdHJhcCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Jvb3RzdHJhcCc7XG4gICAgICAgIGNvbnN0IHNvdXJjZTogQm9vdHN0cmFwU291cmNlID0gZGV0ZXJtaW5lQm9vdHN0cmFwVmVyc2lvbihpb0hvc3QsIGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLnNob3dUZW1wbGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGJvb3RzdHJhcHBlciA9IG5ldyBCb290c3RyYXBwZXIoc291cmNlLCBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24pKTtcbiAgICAgICAgICByZXR1cm4gYm9vdHN0cmFwcGVyLnNob3dUZW1wbGF0ZShhcmdzLmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5ib290c3RyYXAoYXJncy5FTlZJUk9OTUVOVFMsIHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIGZvcmNlRGVwbG95bWVudDogYXJndi5mb3JjZSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSxcbiAgICAgICAgICB0YWdzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3RhZ3MnXSksXG4gICAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBhcmdzLnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IGFyZ3NbJ3ByZXZpb3VzLXBhcmFtZXRlcnMnXSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBidWNrZXROYW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAnYnVja2V0TmFtZSddKSxcbiAgICAgICAgICAgIGttc0tleUlkOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAna21zS2V5SWQnXSksXG4gICAgICAgICAgICBjcmVhdGVDdXN0b21lck1hc3RlcktleTogYXJncy5ib290c3RyYXBDdXN0b21lcktleSxcbiAgICAgICAgICAgIHF1YWxpZmllcjogYXJncy5xdWFsaWZpZXIgPz8gY29uZmlndXJhdGlvbi5jb250ZXh0LmdldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInKSxcbiAgICAgICAgICAgIHB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjogYXJncy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBleGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeTogYXJndi5leGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIGN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIHRydXN0ZWRBY2NvdW50czogYXJyYXlGcm9tWWFyZ3MoYXJncy50cnVzdCksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3RGb3JMb29rdXApLFxuICAgICAgICAgICAgdW50cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudW50cnVzdCksXG4gICAgICAgICAgICBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkZXBsb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXBsb3knO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJNYXA6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGFyZ3MucGFyYW1ldGVycykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSAocGFyYW1ldGVyIGFzIHN0cmluZykuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcFtrZXlWYWx1ZVswXV0gPSBrZXlWYWx1ZS5zbGljZSgxKS5qb2luKCc9Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MuZXhlY3V0ZSAhPT0gdW5kZWZpbmVkICYmIGFyZ3MubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDYW4gbm90IHN1cHBseSBib3RoIC0tW25vLV1leGVjdXRlIGFuZCAtLW1ldGhvZCBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGVwbG95bWVudE1ldGhvZDogRGVwbG95bWVudE1ldGhvZCB8IHVuZGVmaW5lZDtcbiAgICAgICAgc3dpdGNoIChhcmdzLm1ldGhvZCkge1xuICAgICAgICAgIGNhc2UgJ2RpcmVjdCc6XG4gICAgICAgICAgICBpZiAoYXJncy5jaGFuZ2VTZXROYW1lKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJy0tY2hhbmdlLXNldC1uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGggbWV0aG9kPWRpcmVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzIGNhbm5vdCBiZSBlbmFibGVkIHdpdGggbWV0aG9kPWRpcmVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHsgbWV0aG9kOiAnZGlyZWN0JyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY2hhbmdlLXNldCc6XG4gICAgICAgICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgICAgICAgZXhlY3V0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYXJncy5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdwcmVwYXJlLWNoYW5nZS1zZXQnOlxuICAgICAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICAgIGV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSA/PyB0cnVlLFxuICAgICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5kZXBsb3koe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnM6IGFyZ3Mubm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncmVxdWlyZUFwcHJvdmFsJ10pLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgdGFnczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0YWdzJ10pLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2QsXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVyTWFwLFxuICAgICAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogYXJnc1sncHJldmlvdXMtcGFyYW1ldGVycyddLFxuICAgICAgICAgIG91dHB1dHNGaWxlOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ291dHB1dHNGaWxlJ10pLFxuICAgICAgICAgIHByb2dyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2dyZXNzJ10pLFxuICAgICAgICAgIGNpOiBhcmdzLmNpLFxuICAgICAgICAgIHJvbGxiYWNrOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JvbGxiYWNrJ10pLFxuICAgICAgICAgIGhvdHN3YXA6IGRldGVybWluZUhvdHN3YXBNb2RlKGFyZ3MuaG90c3dhcCwgYXJncy5ob3Rzd2FwRmFsbGJhY2spLFxuICAgICAgICAgIHdhdGNoOiBhcmdzLndhdGNoLFxuICAgICAgICAgIHRyYWNlTG9nczogYXJncy5sb2dzLFxuICAgICAgICAgIGNvbmN1cnJlbmN5OiBhcmdzLmNvbmN1cnJlbmN5LFxuICAgICAgICAgIGFzc2V0UGFyYWxsZWxpc206IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRQYXJhbGxlbGlzbSddKSxcbiAgICAgICAgICBhc3NldEJ1aWxkVGltZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldFByZWJ1aWxkJ10pXG4gICAgICAgICAgICA/IEFzc2V0QnVpbGRUaW1lLkFMTF9CRUZPUkVfREVQTE9ZXG4gICAgICAgICAgICA6IEFzc2V0QnVpbGRUaW1lLkpVU1RfSU5fVElNRSxcbiAgICAgICAgICBpZ25vcmVOb1N0YWNrczogYXJncy5pZ25vcmVOb1N0YWNrcyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3JvbGxiYWNrJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncm9sbGJhY2snO1xuICAgICAgICByZXR1cm4gY2xpLnJvbGxiYWNrKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbjogYXJnc1sndmFsaWRhdGUtYm9vdHN0cmFwLXZlcnNpb24nXSxcbiAgICAgICAgICBvcnBoYW5Mb2dpY2FsSWRzOiBhcmdzLm9ycGhhbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ltcG9ydCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2ltcG9ydCc7XG4gICAgICAgIHJldHVybiBjbGkuaW1wb3J0KHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBkZXBsb3ltZW50TWV0aG9kOiB7XG4gICAgICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSxcbiAgICAgICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb2dyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2dyZXNzJ10pLFxuICAgICAgICAgIHJvbGxiYWNrOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JvbGxiYWNrJ10pLFxuICAgICAgICAgIHJlY29yZFJlc291cmNlTWFwcGluZzogYXJnc1sncmVjb3JkLXJlc291cmNlLW1hcHBpbmcnXSxcbiAgICAgICAgICByZXNvdXJjZU1hcHBpbmdGaWxlOiBhcmdzWydyZXNvdXJjZS1tYXBwaW5nJ10sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICd3YXRjaCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3dhdGNoJztcbiAgICAgICAgYXdhaXQgY2xpLndhdGNoKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICByZXVzZUFzc2V0czogYXJnc1snYnVpbGQtZXhjbHVkZSddLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgaG90c3dhcDogZGV0ZXJtaW5lSG90c3dhcE1vZGUoYXJncy5ob3Rzd2FwLCBhcmdzLmhvdHN3YXBGYWxsYmFjaywgdHJ1ZSksXG4gICAgICAgICAgdHJhY2VMb2dzOiBhcmdzLmxvZ3MsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXN0cm95JztcbiAgICAgICAgcmV0dXJuIGNsaS5kZXN0cm95KHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdnYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2djJztcbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Vuc3RhYmxlJ10pLmluY2x1ZGVzKCdnYycpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5zdGFibGUgZmVhdHVyZSB1c2U6IFxcJ2djXFwnIGlzIHVuc3RhYmxlLiBJdCBtdXN0IGJlIG9wdGVkIGluIHZpYSBcXCctLXVuc3RhYmxlXFwnLCBlLmcuIFxcJ2NkayBnYyAtLXVuc3RhYmxlPWdjXFwnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsaS5nYXJiYWdlQ29sbGVjdChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgdHlwZTogYXJncy50eXBlLFxuICAgICAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogYXJnc1sncm9sbGJhY2stYnVmZmVyLWRheXMnXSxcbiAgICAgICAgICBjcmVhdGVkQnVmZmVyRGF5czogYXJnc1snY3JlYXRlZC1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogYXJncy5ib290c3RyYXBTdGFja05hbWUsXG4gICAgICAgICAgY29uZmlybTogYXJncy5jb25maXJtLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc3ludGhlc2l6ZSc6XG4gICAgICBjYXNlICdzeW50aCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3N5bnRoJztcbiAgICAgICAgY29uc3QgcXVpZXQgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3F1aWV0J10pID8/IGFyZ3MucXVpZXQ7XG4gICAgICAgIGlmIChhcmdzLmV4Y2x1c2l2ZWx5KSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aChhcmdzLlNUQUNLUywgYXJncy5leGNsdXNpdmVseSwgcXVpZXQsIGFyZ3MudmFsaWRhdGlvbiwgYXJndi5qc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2xpLnN5bnRoKGFyZ3MuU1RBQ0tTLCB0cnVlLCBxdWlldCwgYXJncy52YWxpZGF0aW9uLCBhcmd2Lmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ25vdGljZXMnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciBub3RpY2VzLCB0aGV5IGFyZSBub3cgdGhlIHByaW1hcnkgb3V0cHV0XG4gICAgICAgIC8vIG9mIHRoZSBjb21tYW5kIGFuZCB0aGV5IHNob3VsZCBnbyB0byBzdGRvdXQuXG4gICAgICAgIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSAnc3Rkb3V0JztcblxuICAgICAgICAvLyBUaGlzIGlzIGEgdmFsaWQgY29tbWFuZCwgYnV0IHdlJ3JlIHBvc3Rwb25pbmcgaXRzIGV4ZWN1dGlvbiBiZWNhdXNlIGRpc3BsYXlpbmdcbiAgICAgICAgLy8gbm90aWNlcyBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgZXZlcnkgY29tbWFuZC5cbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21ldGFkYXRhJztcbiAgICAgICAgcmV0dXJuIGNsaS5tZXRhZGF0YShhcmdzLlNUQUNLLCBhcmd2Lmpzb24pO1xuXG4gICAgICBjYXNlICdhY2tub3dsZWRnZSc6XG4gICAgICBjYXNlICdhY2snOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgcmV0dXJuIGNsaS5hY2tub3dsZWRnZShhcmdzLklEKTtcblxuICAgICAgY2FzZSAnaW5pdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2luaXQnO1xuICAgICAgICBjb25zdCBsYW5ndWFnZSA9IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnbGFuZ3VhZ2UnXSk7XG4gICAgICAgIGlmIChhcmdzLmxpc3QpIHtcbiAgICAgICAgICByZXR1cm4gcHJpbnRBdmFpbGFibGVUZW1wbGF0ZXMobGFuZ3VhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjbGlJbml0KHtcbiAgICAgICAgICAgIHR5cGU6IGFyZ3MuVEVNUExBVEUsXG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgIGNhblVzZU5ldHdvcms6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGdlbmVyYXRlT25seTogYXJncy5nZW5lcmF0ZU9ubHksXG4gICAgICAgICAgICBsaWJWZXJzaW9uOiBhcmdzLmxpYlZlcnNpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21pZ3JhdGUnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtaWdyYXRlJztcbiAgICAgICAgcmV0dXJuIGNsaS5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6IGFyZ3NbJ3N0YWNrLW5hbWUnXSxcbiAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgZnJvbVN0YWNrOiBhcmdzWydmcm9tLXN0YWNrJ10sXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFyZ3MubGFuZ3VhZ2UsXG4gICAgICAgICAgb3V0cHV0UGF0aDogYXJnc1snb3V0cHV0LXBhdGgnXSxcbiAgICAgICAgICBmcm9tU2NhbjogZ2V0TWlncmF0ZVNjYW5UeXBlKGFyZ3NbJ2Zyb20tc2NhbiddKSxcbiAgICAgICAgICBmaWx0ZXI6IGFyZ3MuZmlsdGVyLFxuICAgICAgICAgIGFjY291bnQ6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICByZWdpb246IGFyZ3MucmVnaW9uLFxuICAgICAgICAgIGNvbXByZXNzOiBhcmdzLmNvbXByZXNzLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICd2ZXJzaW9uJztcbiAgICAgICAgcmV0dXJuIGlvSG9zdC5kZWZhdWx0cy5yZXN1bHQodmVyc2lvbi5kaXNwbGF5VmVyc2lvbigpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5rbm93biBjb21tYW5kOiAnICsgY29tbWFuZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoaWNoIHZlcnNpb24gb2YgYm9vdHN0cmFwcGluZ1xuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVCb290c3RyYXBWZXJzaW9uKGlvSG9zdDogQ2xpSW9Ib3N0LCBhcmdzOiB7IHRlbXBsYXRlPzogc3RyaW5nIH0pOiBCb290c3RyYXBTb3VyY2Uge1xuICBsZXQgc291cmNlOiBCb290c3RyYXBTb3VyY2U7XG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgaW9Ib3N0LmRlZmF1bHRzLmluZm8oYFVzaW5nIGJvb3RzdHJhcHBpbmcgdGVtcGxhdGUgZnJvbSAke2FyZ3MudGVtcGxhdGV9YCk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdjdXN0b20nLCB0ZW1wbGF0ZUZpbGU6IGFyZ3MudGVtcGxhdGUgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5DREtfTEVHQUNZX0JPT1RTVFJBUCkge1xuICAgIGlvSG9zdC5kZWZhdWx0cy5pbmZvKCdDREtfTEVHQUNZX0JPT1RTVFJBUCBzZXQsIHVzaW5nIGxlZ2FjeS1zdHlsZSBib290c3RyYXBwaW5nJyk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdsZWdhY3knIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gVjIsIHRoZSBcIm5ld1wiIGJvb3RzdHJhcHBpbmcgaXMgdGhlIGRlZmF1bHRcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2RlZmF1bHQnIH07XG4gIH1cbiAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZnVuY3Rpb24gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlRmxhZzogc3RyaW5nKSB7XG4gIHJldHVybiBjb25maWd1cmF0aW9uLmNvbnRleHQuZ2V0KGZlYXR1cmVGbGFnKSA/PyBjeGFwaS5mdXR1cmVGbGFnRGVmYXVsdChmZWF0dXJlRmxhZyk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHhzLmZpbHRlcigoeCkgPT4geCAhPT0gJycpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVIb3Rzd2FwTW9kZShob3Rzd2FwPzogYm9vbGVhbiwgaG90c3dhcEZhbGxiYWNrPzogYm9vbGVhbiwgd2F0Y2g/OiBib29sZWFuKTogSG90c3dhcE1vZGUge1xuICBpZiAoaG90c3dhcCAmJiBob3Rzd2FwRmFsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDYW4gbm90IHN1cHBseSBib3RoIC0taG90c3dhcCBhbmQgLS1ob3Rzd2FwLWZhbGxiYWNrIGF0IHRoZSBzYW1lIHRpbWUnKTtcbiAgfSBlbHNlIGlmICghaG90c3dhcCAmJiAhaG90c3dhcEZhbGxiYWNrKSB7XG4gICAgaWYgKGhvdHN3YXAgPT09IHVuZGVmaW5lZCAmJiBob3Rzd2FwRmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHdhdGNoID8gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZIDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UO1xuICAgIH0gZWxzZSBpZiAoaG90c3dhcCA9PT0gZmFsc2UgfHwgaG90c3dhcEZhbGxiYWNrID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICBsZXQgaG90c3dhcE1vZGU6IEhvdHN3YXBNb2RlO1xuICBpZiAoaG90c3dhcCkge1xuICAgIGhvdHN3YXBNb2RlID0gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZO1xuICAvKiBpZiAoaG90c3dhcEZhbGxiYWNrKSovXG4gIH0gZWxzZSB7XG4gICAgaG90c3dhcE1vZGUgPSBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0s7XG4gIH1cblxuICByZXR1cm4gaG90c3dhcE1vZGU7XG59XG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqLyAvLyB3ZSBuZXZlciBjYWxsIHRoaXMgaW4gdW5pdCB0ZXN0c1xuZXhwb3J0IGZ1bmN0aW9uIGNsaShhcmdzOiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKSkge1xuICBleGVjKGFyZ3MpXG4gICAgLnRoZW4oYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gTG9nIHRoZSBzdGFjayB0cmFjZSBpZiB3ZSdyZSBvbiBhIGRldmVsb3BlciB3b3Jrc3RhdGlvbi4gT3RoZXJ3aXNlIHRoaXMgd2lsbCBiZSBpbnRvIGEgbWluaWZpZWRcbiAgICAgIC8vIGZpbGUgYW5kIHRoZSBwcmludGVkIGNvZGUgbGluZSBhbmQgc3RhY2sgdHJhY2UgYXJlIGh1Z2UgYW5kIHVzZWxlc3MuXG4gICAgICBwcmV0dHlQcmludEVycm9yKGVyciwgdmVyc2lvbi5pc0RldmVsb3BlckJ1aWxkKCkpO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgfSk7XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuIl19
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcUNBLG9CQXllQztBQStERCxrQkFhQztBQTFsQkQsaURBQWlELENBQUMsUUFBUTtBQUMxRCx5Q0FBeUM7QUFDekMsc0RBQW9EO0FBQ3BELCtCQUErQjtBQUMvQiwrQ0FBMkQ7QUFFM0QsdUNBQXNDO0FBQ3RDLGlGQUEyRTtBQUMzRSwyREFBK0Q7QUFDL0QsNkRBQXdEO0FBQ3hELG1FQUE2RDtBQUU3RCw2REFBcUQ7QUFDckQscUNBQXFDO0FBQ3JDLHVEQUF1RDtBQUV2RCxnQ0FBOEM7QUFDOUMsOENBQWtHO0FBRWxHLGdEQUFnRDtBQUVoRCxvREFBaUQ7QUFDakQsNENBQTZDO0FBRTdDLGlEQUFnRTtBQUNoRSwyQ0FBd0M7QUFDeEMsK0NBQTRDO0FBQzVDLDJDQUFvRTtBQUNwRSxpREFBeUQ7QUFDekQsb0NBQXdEO0FBR3hELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLG1DQUFtQztJQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDaEMsQ0FBQztBQUVNLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBYyxFQUFFLFdBQXlCO0lBQ2xFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSx3REFBeUIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRCLGtDQUFrQztJQUNsQyxnQ0FBZ0M7SUFDaEMsSUFBSSxjQUFjLEdBQW1CLE1BQU0sQ0FBQztJQUM1QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUM7Z0JBQ0osY0FBYyxHQUFHLE9BQU8sQ0FBQztnQkFDekIsTUFBTTtZ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O1FBQ3ZFLElBQUEscUNBQWdCLEVBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Qsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqLyAvLyB5YXJnc1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IENka1Rvb2xraXQsIEFzc2V0QnVpbGRUaW1lIH0gZnJvbSAnLi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgdHlwZSB7IElvTWVzc2FnZUxldmVsIH0gZnJvbSAnLi9pby1ob3N0JztcbmltcG9ydCB7IENsaUlvSG9zdCB9IGZyb20gJy4vaW8taG9zdCc7XG5pbXBvcnQgeyBwYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzIH0gZnJvbSAnLi9wYXJzZS1jb21tYW5kLWxpbmUtYXJndW1lbnRzJztcbmltcG9ydCB7IGNoZWNrRm9yUGxhdGZvcm1XYXJuaW5ncyB9IGZyb20gJy4vcGxhdGZvcm0td2FybmluZ3MnO1xuaW1wb3J0IHsgcHJldHR5UHJpbnRFcnJvciB9IGZyb20gJy4vcHJldHR5LXByaW50LWVycm9yJztcbmltcG9ydCB7IEdMT0JBTF9QTFVHSU5fSE9TVCB9IGZyb20gJy4vc2luZ2xldG9uLXBsdWdpbi1ob3N0JztcbmltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gJy4vdXNlci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3VzZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgKiBhcyB2ZXJzaW9uIGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQgeyBhc0lvSGVscGVyLCBJTyB9IGZyb20gJy4uLy4uL2xpYi9hcGktcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElSZWFkTG9jayB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBUb29sa2l0SW5mbywgTm90aWNlcyB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBTZGtQcm92aWRlciwgSW9Ib3N0U2RrTG9nZ2VyLCBzZXRTZGtUcmFjaW5nLCBtYWtlUmVxdWVzdEhhbmRsZXIgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgnO1xuaW1wb3J0IHR5cGUgeyBCb290c3RyYXBTb3VyY2UgfSBmcm9tICcuLi9hcGkvYm9vdHN0cmFwJztcbmltcG9ydCB7IEJvb3RzdHJhcHBlciB9IGZyb20gJy4uL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHR5cGUgeyBEZXBsb3ltZW50TWV0aG9kIH0gZnJvbSAnLi4vYXBpL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi4vYXBpL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IEhvdHN3YXBNb2RlIH0gZnJvbSAnLi4vYXBpL2hvdHN3YXAnO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gJy4uL2FwaS9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb250ZXh0SGFuZGxlciBhcyBjb250ZXh0IH0gZnJvbSAnLi4vY29tbWFuZHMvY29udGV4dCc7XG5pbXBvcnQgeyBkb2NzIH0gZnJvbSAnLi4vY29tbWFuZHMvZG9jcyc7XG5pbXBvcnQgeyBkb2N0b3IgfSBmcm9tICcuLi9jb21tYW5kcy9kb2N0b3InO1xuaW1wb3J0IHsgY2xpSW5pdCwgcHJpbnRBdmFpbGFibGVUZW1wbGF0ZXMgfSBmcm9tICcuLi9jb21tYW5kcy9pbml0JztcbmltcG9ydCB7IGdldE1pZ3JhdGVTY2FuVHlwZSB9IGZyb20gJy4uL2NvbW1hbmRzL21pZ3JhdGUnO1xuaW1wb3J0IHsgZXhlY1Byb2dyYW0sIENsb3VkRXhlY3V0YWJsZSB9IGZyb20gJy4uL2N4YXBwJztcbmltcG9ydCB0eXBlIHsgU3RhY2tTZWxlY3RvciwgU3ludGhlc2l6ZXIgfSBmcm9tICcuLi9jeGFwcCc7XG5cbmlmICghcHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcbiAgLy8gRGlzYWJsZSBjaGFsayBjb2xvciBoaWdobGlnaHRpbmdcbiAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMCc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKGFyZ3M6IHN0cmluZ1tdLCBzeW50aGVzaXplcj86IFN5bnRoZXNpemVyKTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7XG4gIGNvbnN0IGFyZ3YgPSBhd2FpdCBwYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzKGFyZ3MpO1xuICBjb25zdCBjbWQgPSBhcmd2Ll9bMF07XG5cbiAgLy8gaWYgb25lIC12LCBsb2cgYXQgYSBERUJVRyBsZXZlbFxuICAvLyBpZiAyIC12LCBsb2cgYXQgYSBUUkFDRSBsZXZlbFxuICBsZXQgaW9NZXNzYWdlTGV2ZWw6IElvTWVzc2FnZUxldmVsID0gJ2luZm8nO1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgc3dpdGNoIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaW9NZXNzYWdlTGV2ZWwgPSAnZGVidWcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlvTWVzc2FnZUxldmVsID0gJ3RyYWNlJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW9Ib3N0ID0gQ2xpSW9Ib3N0Lmluc3RhbmNlKHtcbiAgICBsb2dMZXZlbDogaW9NZXNzYWdlTGV2ZWwsXG4gICAgaXNUVFk6IHByb2Nlc3Muc3Rkb3V0LmlzVFRZLFxuICAgIGlzQ0k6IEJvb2xlYW4oYXJndi5jaSksXG4gICAgY3VycmVudEFjdGlvbjogY21kLFxuICAgIHN0YWNrUHJvZ3Jlc3M6IGFyZ3YucHJvZ3Jlc3MsXG4gIH0sIHRydWUpO1xuXG4gIC8vIERlYnVnIHNob3VsZCBhbHdheXMgaW1wbHkgdHJhY2luZ1xuICBpZiAoYXJndi5kZWJ1ZyB8fCBhcmd2LnZlcmJvc2UgPiAyKSB7XG4gICAgc2V0U2RrVHJhY2luZyh0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjbGktbGliLWFscGhhIG5lZWRzIHRvIGV4cGxpY2l0bHkgc2V0IGluIGNhc2UgaXQgd2FzIGVuYWJsZWQgYmVmb3JlXG4gICAgc2V0U2RrVHJhY2luZyhmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGNoZWNrRm9yUGxhdGZvcm1XYXJuaW5ncygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKGBFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgcGxhdGZvcm0gd2FybmluZ3M6ICR7ZX1gKTtcbiAgfVxuXG4gIGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZygnQ0RLIFRvb2xraXQgQ0xJIHZlcnNpb246JywgdmVyc2lvbi5kaXNwbGF5VmVyc2lvbigpKTtcbiAgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKCdDb21tYW5kIGxpbmUgYXJndW1lbnRzOicsIGFyZ3YpO1xuXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7XG4gICAgY29tbWFuZExpbmVBcmd1bWVudHM6IHtcbiAgICAgIC4uLmFyZ3YsXG4gICAgICBfOiBhcmd2Ll8gYXMgW0NvbW1hbmQsIC4uLnN0cmluZ1tdXSwgLy8gVHlwZVNjcmlwdCBhdCBpdHMgYmVzdFxuICAgIH0sXG4gIH0pO1xuICBhd2FpdCBjb25maWd1cmF0aW9uLmxvYWQoKTtcblxuICBjb25zdCBpb0hlbHBlciA9IGFzSW9IZWxwZXIoaW9Ib3N0LCBpb0hvc3QuY3VycmVudEFjdGlvbiBhcyBhbnkpO1xuXG4gIGNvbnN0IHNob3VsZERpc3BsYXlOb3RpY2VzID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydub3RpY2VzJ10pO1xuICAvLyBOb3RpY2VzIGVpdGhlciBnbyB0byBzdGRlcnIsIG9yIG5vd2hlcmVcbiAgaW9Ib3N0Lm5vdGljZXNEZXN0aW5hdGlvbiA9IHNob3VsZERpc3BsYXlOb3RpY2VzID8gJ3N0ZGVycicgOiAnZHJvcCc7XG4gIGNvbnN0IG5vdGljZXMgPSBOb3RpY2VzLmNyZWF0ZSh7XG4gICAgaW9Ib3N0LFxuICAgIGNvbnRleHQ6IGNvbmZpZ3VyYXRpb24uY29udGV4dCxcbiAgICBvdXRwdXQ6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnb3V0ZGlyJ10pLFxuICAgIGh0dHBPcHRpb25zOiB7XG4gICAgICBwcm94eUFkZHJlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJveHknXSksXG4gICAgICBjYUJ1bmRsZVBhdGg6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnY2FCdW5kbGVQYXRoJ10pLFxuICAgIH0sXG4gICAgY2xpVmVyc2lvbjogdmVyc2lvbi52ZXJzaW9uTnVtYmVyKCksXG4gIH0pO1xuICBjb25zdCByZWZyZXNoTm90aWNlcyA9IChhc3luYyAoKSA9PiB7XG4gICAgLy8gdGhlIGNkayBub3RpY2VzIGNvbW1hbmQgaGFzIGl0J3Mgb3duIHJlZnJlc2hcbiAgICBpZiAoc2hvdWxkRGlzcGxheU5vdGljZXMgJiYgY21kICE9PSAnbm90aWNlcycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBub3RpY2VzLnJlZnJlc2goKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgQ291bGQgbm90IHJlZnJlc2ggbm90aWNlczogJHtlfWApKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pKCk7XG5cbiAgY29uc3Qgc2RrUHJvdmlkZXIgPSBhd2FpdCBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHtcbiAgICBpb0hlbHBlcixcbiAgICBwcm9maWxlOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2ZpbGUnXSksXG4gICAgcmVxdWVzdEhhbmRsZXI6IGF3YWl0IG1ha2VSZXF1ZXN0SGFuZGxlcihpb0hlbHBlciwge1xuICAgICAgcHJveHlBZGRyZXNzOiBhcmd2LnByb3h5LFxuICAgICAgY2FCdW5kbGVQYXRoOiBhcmd2WydjYS1idW5kbGUtcGF0aCddLFxuICAgIH0pLFxuICAgIGxvZ2dlcjogbmV3IElvSG9zdFNka0xvZ2dlcihhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KSksXG4gICAgcGx1Z2luSG9zdDogR0xPQkFMX1BMVUdJTl9IT1NULFxuICB9KTtcblxuICBsZXQgb3V0RGlyTG9jazogSVJlYWRMb2NrIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBjb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyLFxuICAgIHN5bnRoZXNpemVyOlxuICAgICAgc3ludGhlc2l6ZXIgPz9cbiAgICAgIChhc3luYyAoYXdzLCBjb25maWcpID0+IHtcbiAgICAgICAgLy8gSW52b2tlICdleGVjUHJvZ3JhbScsIGFuZCBjb3B5IHRoZSBsb2NrIGZvciB0aGUgZGlyZWN0b3J5IGluIHRoZSBnbG9iYWxcbiAgICAgICAgLy8gdmFyaWFibGUgaGVyZS4gSXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBDTEkgZXhpdHMuIExvY2tzIGFyZSBub3QgcmUtZW50cmFudFxuICAgICAgICAvLyBzbyByZWxlYXNlIGl0IGlmIHdlIGhhdmUgdG8gc3ludGhlc2l6ZSBtb3JlIHRoYW4gb25jZSAoYmVjYXVzZSBvZiBjb250ZXh0IGxvb2t1cHMpLlxuICAgICAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG4gICAgICAgIGNvbnN0IHsgYXNzZW1ibHksIGxvY2sgfSA9IGF3YWl0IGV4ZWNQcm9ncmFtKGF3cywgaW9Ib3N0LmFzSW9IZWxwZXIoKSwgY29uZmlnKTtcbiAgICAgICAgb3V0RGlyTG9jayA9IGxvY2s7XG4gICAgICAgIHJldHVybiBhc3NlbWJseTtcbiAgICAgIH0pLFxuICAgIGlvSGVscGVyOiBpb0hvc3QuYXNJb0hlbHBlcigpLFxuICB9KTtcblxuICAvKiogRnVuY3Rpb24gdG8gbG9hZCBwbHVnLWlucywgdXNpbmcgY29uZmlndXJhdGlvbnMgYWRkaXRpdmVseS4gKi9cbiAgZnVuY3Rpb24gbG9hZFBsdWdpbnMoLi4uc2V0dGluZ3M6IFNldHRpbmdzW10pIHtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzZXR0aW5ncykge1xuICAgICAgY29uc3QgcGx1Z2luczogc3RyaW5nW10gPSBzb3VyY2UuZ2V0KFsncGx1Z2luJ10pIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuICAgICAgICBHTE9CQUxfUExVR0lOX0hPU1QubG9hZChwbHVnaW4sIGlvSG9zdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbG9hZFBsdWdpbnMoY29uZmlndXJhdGlvbi5zZXR0aW5ncyk7XG5cbiAgaWYgKCh0eXBlb2YgY21kKSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcuIEdvdDogJHtjbWR9ICgke3R5cGVvZiBjbWR9KWApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbWFpbihjbWQsIGFyZ3YpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIElmIHdlIGxvY2tlZCB0aGUgJ2Nkay5vdXQnIGRpcmVjdG9yeSwgcmVsZWFzZSBpdCBoZXJlLlxuICAgIGF3YWl0IG91dERpckxvY2s/LnJlbGVhc2UoKTtcblxuICAgIC8vIERvIFBTQXMgaGVyZVxuICAgIGF3YWl0IHZlcnNpb24uZGlzcGxheVZlcnNpb25NZXNzYWdlKCk7XG5cbiAgICBhd2FpdCByZWZyZXNoTm90aWNlcztcbiAgICBpZiAoY21kID09PSAnbm90aWNlcycpIHtcbiAgICAgIGF3YWl0IG5vdGljZXMucmVmcmVzaCh7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgbm90aWNlcy5kaXNwbGF5KHtcbiAgICAgICAgaW5jbHVkZUFja25vd2xlZGdlZDogIWFyZ3YudW5hY2tub3dsZWRnZWQsXG4gICAgICAgIHNob3dUb3RhbDogYXJndi51bmFja25vd2xlZGdlZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY21kICE9PSAndmVyc2lvbicpIHtcbiAgICAgIGF3YWl0IG5vdGljZXMuZGlzcGxheSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG1haW4oY29tbWFuZDogc3RyaW5nLCBhcmdzOiBhbnkpOiBQcm9taXNlPG51bWJlciB8IHZvaWQ+IHtcbiAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9IGNvbW1hbmQgYXMgYW55O1xuICAgIGNvbnN0IHRvb2xraXRTdGFja05hbWU6IHN0cmluZyA9IFRvb2xraXRJbmZvLmRldGVybWluZU5hbWUoY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0b29sa2l0U3RhY2tOYW1lJ10pKTtcbiAgICBpb0hvc3QuZGVmYXVsdHMuZGVidWcoYFRvb2xraXQgc3RhY2s6ICR7Y2hhbGsuYm9sZCh0b29sa2l0U3RhY2tOYW1lKX1gKTtcblxuICAgIGNvbnN0IGNsb3VkRm9ybWF0aW9uID0gbmV3IERlcGxveW1lbnRzKHtcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgIGlvSGVscGVyOiBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KSxcbiAgICB9KTtcblxuICAgIGlmIChhcmdzLmFsbCAmJiBhcmdzLlNUQUNLUykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignWW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBsaXN0IG9mIFN0YWNrcyBvciB0aGUgYC0tYWxsYCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIGFyZ3MuU1RBQ0tTID0gYXJncy5TVEFDS1MgPz8gKGFyZ3MuU1RBQ0sgPyBbYXJncy5TVEFDS10gOiBbXSk7XG4gICAgYXJncy5FTlZJUk9OTUVOVFMgPSBhcmdzLkVOVklST05NRU5UUyA/PyBbXTtcblxuICAgIGNvbnN0IHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yID0ge1xuICAgICAgYWxsVG9wTGV2ZWw6IGFyZ3MuYWxsLFxuICAgICAgcGF0dGVybnM6IGFyZ3MuU1RBQ0tTLFxuICAgIH07XG5cbiAgICBjb25zdCBjbGkgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBpb0hvc3QsXG4gICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgZGVwbG95bWVudHM6IGNsb3VkRm9ybWF0aW9uLFxuICAgICAgdmVyYm9zZTogYXJndi50cmFjZSB8fCBhcmd2LnZlcmJvc2UgPiAwLFxuICAgICAgaWdub3JlRXJyb3JzOiBhcmd2WydpZ25vcmUtZXJyb3JzJ10sXG4gICAgICBzdHJpY3Q6IGFyZ3Yuc3RyaWN0LFxuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XG4gICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnY29udGV4dCc7XG4gICAgICAgIHJldHVybiBjb250ZXh0KHtcbiAgICAgICAgICBjb250ZXh0OiBjb25maWd1cmF0aW9uLmNvbnRleHQsXG4gICAgICAgICAgY2xlYXI6IGFyZ3YuY2xlYXIsXG4gICAgICAgICAganNvbjogYXJndi5qc29uLFxuICAgICAgICAgIGZvcmNlOiBhcmd2LmZvcmNlLFxuICAgICAgICAgIHJlc2V0OiBhcmd2LnJlc2V0LFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZG9jcyc6XG4gICAgICBjYXNlICdkb2MnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkb2NzJztcbiAgICAgICAgcmV0dXJuIGRvY3MoeyBicm93c2VyOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Jyb3dzZXInXSkgfSk7XG5cbiAgICAgIGNhc2UgJ2RvY3Rvcic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RvY3Rvcic7XG4gICAgICAgIHJldHVybiBkb2N0b3IoKTtcblxuICAgICAgY2FzZSAnbHMnOlxuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2xpc3QnO1xuICAgICAgICByZXR1cm4gY2xpLmxpc3QoYXJncy5TVEFDS1MsIHtcbiAgICAgICAgICBsb25nOiBhcmdzLmxvbmcsXG4gICAgICAgICAganNvbjogYXJndi5qc29uLFxuICAgICAgICAgIHNob3dEZXBzOiBhcmdzLnNob3dEZXBlbmRlbmNpZXMsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWZmJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlmZic7XG4gICAgICAgIGNvbnN0IGVuYWJsZURpZmZOb0ZhaWwgPSBpc0ZlYXR1cmVFbmFibGVkKGNvbmZpZ3VyYXRpb24sIGN4YXBpLkVOQUJMRV9ESUZGX05PX0ZBSUxfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiBjbGkuZGlmZih7XG4gICAgICAgICAgc3RhY2tOYW1lczogYXJncy5TVEFDS1MsXG4gICAgICAgICAgZXhjbHVzaXZlbHk6IGFyZ3MuZXhjbHVzaXZlbHksXG4gICAgICAgICAgdGVtcGxhdGVQYXRoOiBhcmdzLnRlbXBsYXRlLFxuICAgICAgICAgIHN0cmljdDogYXJncy5zdHJpY3QsXG4gICAgICAgICAgY29udGV4dExpbmVzOiBhcmdzLmNvbnRleHRMaW5lcyxcbiAgICAgICAgICBzZWN1cml0eU9ubHk6IGFyZ3Muc2VjdXJpdHlPbmx5LFxuICAgICAgICAgIGZhaWw6IGFyZ3MuZmFpbCAhPSBudWxsID8gYXJncy5mYWlsIDogIWVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICAgICAgY29tcGFyZUFnYWluc3RQcm9jZXNzZWRUZW1wbGF0ZTogYXJncy5wcm9jZXNzZWQsXG4gICAgICAgICAgcXVpZXQ6IGFyZ3MucXVpZXQsXG4gICAgICAgICAgY2hhbmdlU2V0OiBhcmdzWydjaGFuZ2Utc2V0J10sXG4gICAgICAgICAgdG9vbGtpdFN0YWNrTmFtZTogdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3JlZmFjdG9yJzpcbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Vuc3RhYmxlJ10pLmluY2x1ZGVzKCdyZWZhY3RvcicpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5zdGFibGUgZmVhdHVyZSB1c2U6IFxcJ3JlZmFjdG9yXFwnIGlzIHVuc3RhYmxlLiBJdCBtdXN0IGJlIG9wdGVkIGluIHZpYSBcXCctLXVuc3RhYmxlXFwnLCBlLmcuIFxcJ2NkayByZWZhY3RvciAtLXVuc3RhYmxlPXJlZmFjdG9yXFwnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdyZWZhY3Rvcic7XG4gICAgICAgIHJldHVybiBjbGkucmVmYWN0b3Ioe1xuICAgICAgICAgIGRyeVJ1bjogYXJncy5kcnlSdW4sXG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgZXhjbHVkZUZpbGU6IGFyZ3MuZXhjbHVkZUZpbGUsXG4gICAgICAgICAgbWFwcGluZ0ZpbGU6IGFyZ3MubWFwcGluZ0ZpbGUsXG4gICAgICAgICAgcmV2ZXJ0OiBhcmdzLnJldmVydCxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Jvb3RzdHJhcCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Jvb3RzdHJhcCc7XG4gICAgICAgIGNvbnN0IHNvdXJjZTogQm9vdHN0cmFwU291cmNlID0gZGV0ZXJtaW5lQm9vdHN0cmFwVmVyc2lvbihpb0hvc3QsIGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLnNob3dUZW1wbGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGJvb3RzdHJhcHBlciA9IG5ldyBCb290c3RyYXBwZXIoc291cmNlLCBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24pKTtcbiAgICAgICAgICByZXR1cm4gYm9vdHN0cmFwcGVyLnNob3dUZW1wbGF0ZShhcmdzLmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5ib290c3RyYXAoYXJncy5FTlZJUk9OTUVOVFMsIHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIGZvcmNlRGVwbG95bWVudDogYXJndi5mb3JjZSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSxcbiAgICAgICAgICB0YWdzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3RhZ3MnXSksXG4gICAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBhcmdzLnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IGFyZ3NbJ3ByZXZpb3VzLXBhcmFtZXRlcnMnXSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBidWNrZXROYW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAnYnVja2V0TmFtZSddKSxcbiAgICAgICAgICAgIGttc0tleUlkOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAna21zS2V5SWQnXSksXG4gICAgICAgICAgICBjcmVhdGVDdXN0b21lck1hc3RlcktleTogYXJncy5ib290c3RyYXBDdXN0b21lcktleSxcbiAgICAgICAgICAgIHF1YWxpZmllcjogYXJncy5xdWFsaWZpZXIgPz8gY29uZmlndXJhdGlvbi5jb250ZXh0LmdldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInKSxcbiAgICAgICAgICAgIHB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjogYXJncy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBleGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeTogYXJndi5leGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIGN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIHRydXN0ZWRBY2NvdW50czogYXJyYXlGcm9tWWFyZ3MoYXJncy50cnVzdCksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3RGb3JMb29rdXApLFxuICAgICAgICAgICAgdW50cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudW50cnVzdCksXG4gICAgICAgICAgICBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkZXBsb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXBsb3knO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJNYXA6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGFyZ3MucGFyYW1ldGVycykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSAocGFyYW1ldGVyIGFzIHN0cmluZykuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcFtrZXlWYWx1ZVswXV0gPSBrZXlWYWx1ZS5zbGljZSgxKS5qb2luKCc9Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MuZXhlY3V0ZSAhPT0gdW5kZWZpbmVkICYmIGFyZ3MubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDYW4gbm90IHN1cHBseSBib3RoIC0tW25vLV1leGVjdXRlIGFuZCAtLW1ldGhvZCBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGVwbG95bWVudE1ldGhvZDogRGVwbG95bWVudE1ldGhvZCB8IHVuZGVmaW5lZDtcbiAgICAgICAgc3dpdGNoIChhcmdzLm1ldGhvZCkge1xuICAgICAgICAgIGNhc2UgJ2RpcmVjdCc6XG4gICAgICAgICAgICBpZiAoYXJncy5jaGFuZ2VTZXROYW1lKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJy0tY2hhbmdlLXNldC1uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGggbWV0aG9kPWRpcmVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzIGNhbm5vdCBiZSBlbmFibGVkIHdpdGggbWV0aG9kPWRpcmVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHsgbWV0aG9kOiAnZGlyZWN0JyB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY2hhbmdlLXNldCc6XG4gICAgICAgICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgICAgICAgZXhlY3V0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYXJncy5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdwcmVwYXJlLWNoYW5nZS1zZXQnOlxuICAgICAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICAgIGV4ZWN1dGU6IGZhbHNlLFxuICAgICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSA/PyB0cnVlLFxuICAgICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsaS5kZXBsb3koe1xuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiBhcmdzLmV4Y2x1c2l2ZWx5LFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnM6IGFyZ3Mubm90aWZpY2F0aW9uQXJucyxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncmVxdWlyZUFwcHJvdmFsJ10pLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgdGFnczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0YWdzJ10pLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2QsXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVyTWFwLFxuICAgICAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogYXJnc1sncHJldmlvdXMtcGFyYW1ldGVycyddLFxuICAgICAgICAgIG91dHB1dHNGaWxlOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ291dHB1dHNGaWxlJ10pLFxuICAgICAgICAgIHByb2dyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2dyZXNzJ10pLFxuICAgICAgICAgIGNpOiBhcmdzLmNpLFxuICAgICAgICAgIHJvbGxiYWNrOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JvbGxiYWNrJ10pLFxuICAgICAgICAgIGhvdHN3YXA6IGRldGVybWluZUhvdHN3YXBNb2RlKGFyZ3MuaG90c3dhcCwgYXJncy5ob3Rzd2FwRmFsbGJhY2spLFxuICAgICAgICAgIHdhdGNoOiBhcmdzLndhdGNoLFxuICAgICAgICAgIHRyYWNlTG9nczogYXJncy5sb2dzLFxuICAgICAgICAgIGNvbmN1cnJlbmN5OiBhcmdzLmNvbmN1cnJlbmN5LFxuICAgICAgICAgIGFzc2V0UGFyYWxsZWxpc206IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXNzZXRQYXJhbGxlbGlzbSddKSxcbiAgICAgICAgICBhc3NldEJ1aWxkVGltZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldFByZWJ1aWxkJ10pXG4gICAgICAgICAgICA/IEFzc2V0QnVpbGRUaW1lLkFMTF9CRUZPUkVfREVQTE9ZXG4gICAgICAgICAgICA6IEFzc2V0QnVpbGRUaW1lLkpVU1RfSU5fVElNRSxcbiAgICAgICAgICBpZ25vcmVOb1N0YWNrczogYXJncy5pZ25vcmVOb1N0YWNrcyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3JvbGxiYWNrJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncm9sbGJhY2snO1xuICAgICAgICByZXR1cm4gY2xpLnJvbGxiYWNrKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbjogYXJnc1sndmFsaWRhdGUtYm9vdHN0cmFwLXZlcnNpb24nXSxcbiAgICAgICAgICBvcnBoYW5Mb2dpY2FsSWRzOiBhcmdzLm9ycGhhbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ltcG9ydCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2ltcG9ydCc7XG4gICAgICAgIHJldHVybiBjbGkuaW1wb3J0KHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBkZXBsb3ltZW50TWV0aG9kOiB7XG4gICAgICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFyZ3MuZXhlY3V0ZSxcbiAgICAgICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb2dyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb2dyZXNzJ10pLFxuICAgICAgICAgIHJvbGxiYWNrOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JvbGxiYWNrJ10pLFxuICAgICAgICAgIHJlY29yZFJlc291cmNlTWFwcGluZzogYXJnc1sncmVjb3JkLXJlc291cmNlLW1hcHBpbmcnXSxcbiAgICAgICAgICByZXNvdXJjZU1hcHBpbmdGaWxlOiBhcmdzWydyZXNvdXJjZS1tYXBwaW5nJ10sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICd3YXRjaCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3dhdGNoJztcbiAgICAgICAgYXdhaXQgY2xpLndhdGNoKHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICByZXVzZUFzc2V0czogYXJnc1snYnVpbGQtZXhjbHVkZSddLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UsXG4gICAgICAgICAgcHJvZ3Jlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSksXG4gICAgICAgICAgcm9sbGJhY2s6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncm9sbGJhY2snXSksXG4gICAgICAgICAgaG90c3dhcDogZGV0ZXJtaW5lSG90c3dhcE1vZGUoYXJncy5ob3Rzd2FwLCBhcmdzLmhvdHN3YXBGYWxsYmFjaywgdHJ1ZSksXG4gICAgICAgICAgdHJhY2VMb2dzOiBhcmdzLmxvZ3MsXG4gICAgICAgICAgY29uY3VycmVuY3k6IGFyZ3MuY29uY3VycmVuY3ksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkZXN0cm95JztcbiAgICAgICAgcmV0dXJuIGNsaS5kZXN0cm95KHtcbiAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdnYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2djJztcbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Vuc3RhYmxlJ10pLmluY2x1ZGVzKCdnYycpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5zdGFibGUgZmVhdHVyZSB1c2U6IFxcJ2djXFwnIGlzIHVuc3RhYmxlLiBJdCBtdXN0IGJlIG9wdGVkIGluIHZpYSBcXCctLXVuc3RhYmxlXFwnLCBlLmcuIFxcJ2NkayBnYyAtLXVuc3RhYmxlPWdjXFwnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsaS5nYXJiYWdlQ29sbGVjdChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgdHlwZTogYXJncy50eXBlLFxuICAgICAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogYXJnc1sncm9sbGJhY2stYnVmZmVyLWRheXMnXSxcbiAgICAgICAgICBjcmVhdGVkQnVmZmVyRGF5czogYXJnc1snY3JlYXRlZC1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogYXJncy5ib290c3RyYXBTdGFja05hbWUsXG4gICAgICAgICAgY29uZmlybTogYXJncy5jb25maXJtLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc3ludGhlc2l6ZSc6XG4gICAgICBjYXNlICdzeW50aCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3N5bnRoJztcbiAgICAgICAgY29uc3QgcXVpZXQgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3F1aWV0J10pID8/IGFyZ3MucXVpZXQ7XG4gICAgICAgIGlmIChhcmdzLmV4Y2x1c2l2ZWx5KSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aChhcmdzLlNUQUNLUywgYXJncy5leGNsdXNpdmVseSwgcXVpZXQsIGFyZ3MudmFsaWRhdGlvbiwgYXJndi5qc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2xpLnN5bnRoKGFyZ3MuU1RBQ0tTLCB0cnVlLCBxdWlldCwgYXJncy52YWxpZGF0aW9uLCBhcmd2Lmpzb24pO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ25vdGljZXMnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciBub3RpY2VzLCB0aGV5IGFyZSBub3cgdGhlIHByaW1hcnkgb3V0cHV0XG4gICAgICAgIC8vIG9mIHRoZSBjb21tYW5kIGFuZCB0aGV5IHNob3VsZCBnbyB0byBzdGRvdXQuXG4gICAgICAgIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSAnc3Rkb3V0JztcblxuICAgICAgICAvLyBUaGlzIGlzIGEgdmFsaWQgY29tbWFuZCwgYnV0IHdlJ3JlIHBvc3Rwb25pbmcgaXRzIGV4ZWN1dGlvbiBiZWNhdXNlIGRpc3BsYXlpbmdcbiAgICAgICAgLy8gbm90aWNlcyBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgZXZlcnkgY29tbWFuZC5cbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21ldGFkYXRhJztcbiAgICAgICAgcmV0dXJuIGNsaS5tZXRhZGF0YShhcmdzLlNUQUNLLCBhcmd2Lmpzb24pO1xuXG4gICAgICBjYXNlICdhY2tub3dsZWRnZSc6XG4gICAgICBjYXNlICdhY2snOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgcmV0dXJuIGNsaS5hY2tub3dsZWRnZShhcmdzLklEKTtcblxuICAgICAgY2FzZSAnaW5pdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2luaXQnO1xuICAgICAgICBjb25zdCBsYW5ndWFnZSA9IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnbGFuZ3VhZ2UnXSk7XG4gICAgICAgIGlmIChhcmdzLmxpc3QpIHtcbiAgICAgICAgICByZXR1cm4gcHJpbnRBdmFpbGFibGVUZW1wbGF0ZXMobGFuZ3VhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjbGlJbml0KHtcbiAgICAgICAgICAgIHR5cGU6IGFyZ3MuVEVNUExBVEUsXG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgIGNhblVzZU5ldHdvcms6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGdlbmVyYXRlT25seTogYXJncy5nZW5lcmF0ZU9ubHksXG4gICAgICAgICAgICBsaWJWZXJzaW9uOiBhcmdzLmxpYlZlcnNpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21pZ3JhdGUnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtaWdyYXRlJztcbiAgICAgICAgcmV0dXJuIGNsaS5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6IGFyZ3NbJ3N0YWNrLW5hbWUnXSxcbiAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgZnJvbVN0YWNrOiBhcmdzWydmcm9tLXN0YWNrJ10sXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFyZ3MubGFuZ3VhZ2UsXG4gICAgICAgICAgb3V0cHV0UGF0aDogYXJnc1snb3V0cHV0LXBhdGgnXSxcbiAgICAgICAgICBmcm9tU2NhbjogZ2V0TWlncmF0ZVNjYW5UeXBlKGFyZ3NbJ2Zyb20tc2NhbiddKSxcbiAgICAgICAgICBmaWx0ZXI6IGFyZ3MuZmlsdGVyLFxuICAgICAgICAgIGFjY291bnQ6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICByZWdpb246IGFyZ3MucmVnaW9uLFxuICAgICAgICAgIGNvbXByZXNzOiBhcmdzLmNvbXByZXNzLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICd2ZXJzaW9uJztcbiAgICAgICAgcmV0dXJuIGlvSG9zdC5kZWZhdWx0cy5yZXN1bHQodmVyc2lvbi5kaXNwbGF5VmVyc2lvbigpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5rbm93biBjb21tYW5kOiAnICsgY29tbWFuZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoaWNoIHZlcnNpb24gb2YgYm9vdHN0cmFwcGluZ1xuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVCb290c3RyYXBWZXJzaW9uKGlvSG9zdDogQ2xpSW9Ib3N0LCBhcmdzOiB7IHRlbXBsYXRlPzogc3RyaW5nIH0pOiBCb290c3RyYXBTb3VyY2Uge1xuICBsZXQgc291cmNlOiBCb290c3RyYXBTb3VyY2U7XG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgaW9Ib3N0LmRlZmF1bHRzLmluZm8oYFVzaW5nIGJvb3RzdHJhcHBpbmcgdGVtcGxhdGUgZnJvbSAke2FyZ3MudGVtcGxhdGV9YCk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdjdXN0b20nLCB0ZW1wbGF0ZUZpbGU6IGFyZ3MudGVtcGxhdGUgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5DREtfTEVHQUNZX0JPT1RTVFJBUCkge1xuICAgIGlvSG9zdC5kZWZhdWx0cy5pbmZvKCdDREtfTEVHQUNZX0JPT1RTVFJBUCBzZXQsIHVzaW5nIGxlZ2FjeS1zdHlsZSBib290c3RyYXBwaW5nJyk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdsZWdhY3knIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gVjIsIHRoZSBcIm5ld1wiIGJvb3RzdHJhcHBpbmcgaXMgdGhlIGRlZmF1bHRcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2RlZmF1bHQnIH07XG4gIH1cbiAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZnVuY3Rpb24gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlRmxhZzogc3RyaW5nKSB7XG4gIHJldHVybiBjb25maWd1cmF0aW9uLmNvbnRleHQuZ2V0KGZlYXR1cmVGbGFnKSA/PyBjeGFwaS5mdXR1cmVGbGFnRGVmYXVsdChmZWF0dXJlRmxhZyk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHhzLmZpbHRlcigoeCkgPT4geCAhPT0gJycpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVIb3Rzd2FwTW9kZShob3Rzd2FwPzogYm9vbGVhbiwgaG90c3dhcEZhbGxiYWNrPzogYm9vbGVhbiwgd2F0Y2g/OiBib29sZWFuKTogSG90c3dhcE1vZGUge1xuICBpZiAoaG90c3dhcCAmJiBob3Rzd2FwRmFsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDYW4gbm90IHN1cHBseSBib3RoIC0taG90c3dhcCBhbmQgLS1ob3Rzd2FwLWZhbGxiYWNrIGF0IHRoZSBzYW1lIHRpbWUnKTtcbiAgfSBlbHNlIGlmICghaG90c3dhcCAmJiAhaG90c3dhcEZhbGxiYWNrKSB7XG4gICAgaWYgKGhvdHN3YXAgPT09IHVuZGVmaW5lZCAmJiBob3Rzd2FwRmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHdhdGNoID8gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZIDogSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UO1xuICAgIH0gZWxzZSBpZiAoaG90c3dhcCA9PT0gZmFsc2UgfHwgaG90c3dhcEZhbGxiYWNrID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICBsZXQgaG90c3dhcE1vZGU6IEhvdHN3YXBNb2RlO1xuICBpZiAoaG90c3dhcCkge1xuICAgIGhvdHN3YXBNb2RlID0gSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZO1xuICAgIC8qIGlmIChob3Rzd2FwRmFsbGJhY2spKi9cbiAgfSBlbHNlIHtcbiAgICBob3Rzd2FwTW9kZSA9IEhvdHN3YXBNb2RlLkZBTExfQkFDSztcbiAgfVxuXG4gIHJldHVybiBob3Rzd2FwTW9kZTtcbn1cblxuLyogYzggaWdub3JlIHN0YXJ0ICovIC8vIHdlIG5ldmVyIGNhbGwgdGhpcyBpbiB1bml0IHRlc3RzXG5leHBvcnQgZnVuY3Rpb24gY2xpKGFyZ3M6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gIGV4ZWMoYXJncylcbiAgICAudGhlbihhc3luYyAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBMb2cgdGhlIHN0YWNrIHRyYWNlIGlmIHdlJ3JlIG9uIGEgZGV2ZWxvcGVyIHdvcmtzdGF0aW9uLiBPdGhlcndpc2UgdGhpcyB3aWxsIGJlIGludG8gYSBtaW5pZmllZFxuICAgICAgLy8gZmlsZSBhbmQgdGhlIHByaW50ZWQgY29kZSBsaW5lIGFuZCBzdGFjayB0cmFjZSBhcmUgaHVnZSBhbmQgdXNlbGVzcy5cbiAgICAgIHByZXR0eVByaW50RXJyb3IoZXJyLCB2ZXJzaW9uLmlzRGV2ZWxvcGVyQnVpbGQoKSk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICB9KTtcbn1cbi8qIGM4IGlnbm9yZSBzdG9wICovXG4iXX0=