aws-cdk 2.1142.0 → 2.1143.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.
package/lib/cli/cli.js CHANGED
@@ -45,6 +45,7 @@ const chalk_1 = __importDefault(require("chalk"));
45
45
  const util_1 = require("../util");
46
46
  const cdk_toolkit_1 = require("./cdk-toolkit");
47
47
  const ci_systems_1 = require("./ci-systems");
48
+ const debug_handles_1 = require("./debug-handles");
48
49
  const display_version_1 = require("./display-version");
49
50
  const io_host_1 = require("./io-host");
50
51
  const parse_command_line_arguments_1 = require("./parse-command-line-arguments");
@@ -75,11 +76,25 @@ const cxapp_1 = require("../cxapp");
75
76
  const check_unknown_options_1 = require("./util/check-unknown-options");
76
77
  const ci_1 = require("./util/ci");
77
78
  const guess_agent_1 = require("./util/guess-agent");
79
+ /**
80
+ * The handle tracker for this process, if `--debug-cli` asked for one.
81
+ *
82
+ * Split across the two functions on purpose. `exec()` creates it, because only it
83
+ * has the parsed arguments and because tracking has to start before the CLI opens
84
+ * anything. `cli()` is what schedules the report, for two reasons: a command that
85
+ * fails before reaching `exec`'s own cleanup still gets one, and the grace period
86
+ * starts after telemetry has finished its network calls rather than during them,
87
+ * so telemetry's own sockets are not reported as leaks.
88
+ */
89
+ let handleTracker;
78
90
  async function exec(args, synthesizer) {
79
91
  // This is the very first code that runs, but libraries have been loaded already and that also costs time.
80
92
  // Measure that.
81
93
  const libraryLoadTime = performance.now();
82
94
  const argv = await (0, parse_command_line_arguments_1.parseCommandLineArguments)(args);
95
+ // Start tracking async resources as early as possible, so we can identify the
96
+ // ones still alive at exit time. `cli()` schedules the report.
97
+ handleTracker = argv.debugCli ? (0, debug_handles_1.trackLeakedHandles)() : undefined;
83
98
  argv.language = (0, language_1.getLanguageFromAlias)(argv.language) ?? argv.language;
84
99
  // Handle color output settings
85
100
  // Priority: --no-color > --color > TTY detection
@@ -94,20 +109,7 @@ async function exec(args, synthesizer) {
94
109
  process.env.FORCE_COLOR = '0';
95
110
  }
96
111
  const cmd = argv._[0];
97
- // if one -v, log at a DEBUG level
98
- // if 2 -v, log at a TRACE level
99
- let ioMessageLevel = 'info';
100
- if (argv.verbose) {
101
- switch (argv.verbose) {
102
- case 1:
103
- ioMessageLevel = 'debug';
104
- break;
105
- case 2:
106
- default:
107
- ioMessageLevel = 'trace';
108
- break;
109
- }
110
- }
112
+ const ioMessageLevel = determineIoMessageLevel(argv);
111
113
  const ioHost = io_host_1.CliIoHost.instance({
112
114
  logLevel: ioMessageLevel,
113
115
  isTTY: process.stdout.isTTY,
@@ -343,6 +345,12 @@ async function exec(args, synthesizer) {
343
345
  case 'diff':
344
346
  ioHost.currentAction = 'diff';
345
347
  const enableDiffNoFail = isFeatureEnabled(configuration, cxapi.ENABLE_DIFF_NO_FAIL_CONTEXT);
348
+ const diffMethod = determineDiffMethod(args);
349
+ if (diffMethod === 'template') {
350
+ rejectIncompatibleOptions(args, '--method=template', {
351
+ changeSetName: '--change-set-name',
352
+ });
353
+ }
346
354
  return cli.diff({
347
355
  stackNames: args.STACKS,
348
356
  exclusively: args.exclusively,
@@ -353,7 +361,8 @@ async function exec(args, synthesizer) {
353
361
  fail: args.fail != null ? args.fail : !enableDiffNoFail,
354
362
  compareAgainstProcessedTemplate: args.processed,
355
363
  quiet: args.quiet,
356
- method: determineDiffMethod(args),
364
+ method: diffMethod,
365
+ changeSetName: args.changeSetName,
357
366
  toolkitStackName: toolkitStackName,
358
367
  importExistingResources: args.importExistingResources,
359
368
  includeMoves: args['include-moves'],
@@ -662,6 +671,22 @@ async function exec(args, synthesizer) {
662
671
  }
663
672
  }
664
673
  }
674
+ /**
675
+ * Determine the log level the CLI should run at.
676
+ *
677
+ * `--verbose` decides it whenever it is given. Otherwise a flag that needs a certain
678
+ * level to be useful may raise it, but never past what `--verbose` would have asked
679
+ * for, so no flag can make the output quieter than another one wanted.
680
+ */
681
+ function determineIoMessageLevel(argv) {
682
+ // one -v logs at DEBUG, two or more at TRACE
683
+ if (argv.verbose) {
684
+ return argv.verbose === 1 ? 'debug' : 'trace';
685
+ }
686
+ // `--debug-cli` needs DEBUG, otherwise its handle report is filtered out and the
687
+ // flag has no visible effect.
688
+ return argv.debugCli ? 'debug' : 'info';
689
+ }
665
690
  /**
666
691
  * Determine which version of bootstrapping
667
692
  */
@@ -920,7 +945,15 @@ function cli(args = process.argv.slice(2)) {
920
945
  catch (e) {
921
946
  await io_host_1.CliIoHost.get()?.asIoHelper().defaults.trace(`Ending Telemetry failed: ${e.message}`);
922
947
  }
948
+ // Last thing we do, on both the success and the failure path. Arms an `unref`'d
949
+ // timer rather than printing now, so on a clean exit the process is gone before it
950
+ // fires and nothing is reported. If it does fire, something is still holding the
951
+ // event loop open, and all of the CLI's own work is already done by then.
952
+ const ioHelper = io_host_1.CliIoHost.get()?.asIoHelper();
953
+ if (ioHelper) {
954
+ handleTracker?.scheduleReport(ioHelper);
955
+ }
923
956
  });
924
957
  }
925
958
  /* c8 ignore stop */
926
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOENBLG9CQTJvQkM7QUF1UEQsa0JBOEJDO0FBOThCRCxpREFBaUQsQ0FBQyxRQUFRO0FBQzFELHVEQUF5QztBQUV6QyxzREFBdUg7QUFDdkgsa0RBQTBCO0FBQzFCLGtDQUF3QztBQUN4QywrQ0FBMkQ7QUFDM0QsNkNBQW9EO0FBQ3BELHVEQUF1RjtBQUV2Rix1Q0FBc0M7QUFDdEMsaUZBQTJFO0FBQzNFLDJEQUErRDtBQUMvRCw2REFBd0Q7QUFDeEQsK0NBQW1EO0FBQ25ELG1FQUE2RDtBQUM3RCw2Q0FBb0Q7QUFHcEQsNkRBQXFEO0FBQ3JELG9EQUFnRDtBQUNoRCx1Q0FBcUY7QUFDckYsdURBQW1EO0FBRW5ELGdDQUFnRztBQUNoRyw4Q0FBaUc7QUFFakcsZ0RBQWdEO0FBQ2hELG9EQUFpRDtBQUNqRCw0Q0FBNkM7QUFFN0MsaURBQWdFO0FBQ2hFLCtDQUEyRDtBQUMzRCwyQ0FBd0M7QUFDeEMsK0NBQTRDO0FBQzVDLG1EQUE2RDtBQUM3RCwyQ0FBb0U7QUFDcEUsbURBQTREO0FBQzVELHlDQUFzQztBQUN0QyxpREFBeUQ7QUFDekQsb0NBQXdEO0FBRXhELHdFQUFrRTtBQUNsRSxrQ0FBaUM7QUFDakMsb0RBQWdEO0FBRXpDLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBYyxFQUFFLFdBQXlCO0lBQ2xFLDBHQUEwRztJQUMxRyxnQkFBZ0I7SUFDaEIsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSx3REFBeUIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsK0JBQW9CLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFR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UUFDM0IsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbkIsb0dBQW9HO1FBQ3BHLHdFQUF3RTtRQUN4RSxNQUFNLElBQUksR0FBRyx3QkFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxrR0FBa0c7UUFDbEcsdUVBQXVFO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUEsaUNBQXVCLEdBQUUsQ0FBQztRQUV4QyxJQUFBLHFDQUFnQixFQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssR0FBRztZQUNOLElBQUksRUFBRSxJQUFBLHVCQUFlLEVBQUMsR0FBRyxDQUFDO1NBQzNCLENBQUM7UUFDRixPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7U0FDRCxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxtQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRCxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovIC8vIHlhcmdzXG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VTZXREZXBsb3ltZW50LCBEZXBsb3ltZW50TWV0aG9kLCBEaXJlY3REZXBsb3ltZW50LCBTdGFja1NlbGVjdG9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgRXhwYW5kU3RhY2tTZWxlY3Rpb24sIFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3ksIFRvb2xraXRFcnJvciwgVG9vbGtpdCwgQWJvcnRFcnJvciB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBndWVzc0xhbmd1YWdlIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBDZGtUb29sa2l0LCBBc3NldEJ1aWxkVGltZSB9IGZyb20gJy4vY2RrLXRvb2xraXQnO1xuaW1wb3J0IHsgY2lTeXN0ZW1Jc1N0ZEVyclNhZmUgfSBmcm9tICcuL2NpLXN5c3RlbXMnO1xuaW1wb3J0IHsgZGlzcGxheVZlcnNpb25NZXNzYWdlLCBzaG91bGREaXNwbGF5VmVyc2lvbk1lc3NhZ2UgfSBmcm9tICcuL2Rpc3BsYXktdmVyc2lvbic7XG5pbXBvcnQgdHlwZSB7IElvTWVzc2FnZUxldmVsIH0gZnJvbSAnLi9pby1ob3N0JztcbmltcG9ydCB7IENsaUlvSG9zdCB9IGZyb20gJy4vaW8taG9zdCc7XG5pbXBvcnQgeyBwYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzIH0gZnJvbSAnLi9wYXJzZS1jb21tYW5kLWxpbmUtYXJndW1lbnRzJztcbmltcG9ydCB7IGNoZWNrRm9yUGxhdGZvcm1XYXJuaW5ncyB9IGZyb20gJy4vcGxhdGZvcm0td2FybmluZ3MnO1xuaW1wb3J0IHsgcHJldHR5UHJpbnRFcnJvciB9IGZyb20gJy4vcHJldHR5LXByaW50LWVycm9yJztcbmltcG9ydCB7IFByb3h5QWdlbnRQcm92aWRlciB9IGZyb20gJy4vcHJveHktYWdlbnQnO1xuaW1wb3J0IHsgR0xPQkFMX1BMVUdJTl9IT1NUIH0gZnJvbSAnLi9zaW5nbGV0b24tcGx1Z2luLWhvc3QnO1xuaW1wb3J0IHsgY2RrQ2xpRXJyb3JOYW1lIH0gZnJvbSAnLi90ZWxlbWV0cnkvZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBFcnJvckRldGFpbHMgfSBmcm9tICcuL3RlbGVtZXRyeS9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi91c2VyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vdXNlci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHRyYXBFcnJvcnMgfSBmcm9tICcuL3V0aWwvdHJhcC1lcnJvcnMnO1xuaW1wb3J0IHsgaXNEZXZlbG9wZXJCdWlsZFZlcnNpb24sIHZlcnNpb25XaXRoQnVpbGQsIHZlcnNpb25OdW1iZXIgfSBmcm9tICcuL3ZlcnNpb24nO1xuaW1wb3J0IHsgYXNJb0hlbHBlciB9IGZyb20gJy4uLy4uL2xpYi9hcGktcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElSZWFkTG9jayB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBUb29sa2l0SW5mbywgTm90aWNlcywgbG9hZFRyZWUsIGZpbmRDb25zdHJ1Y3RMaWJyYXJ5VmVyc2lvbiwgbXVzdE1hdGNoIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFNka1Byb3ZpZGVyLCBJb0hvc3RTZGtMb2dnZXIsIHNldFNka1RyYWNpbmcsIHNka1JlcXVlc3RIYW5kbGVyIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoJztcbmltcG9ydCB0eXBlIHsgQm9vdHN0cmFwU291cmNlIH0gZnJvbSAnLi4vYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXIgfSBmcm9tICcuLi9hcGkvYm9vdHN0cmFwJztcbmltcG9ydCB7IERlcGxveW1lbnRzIH0gZnJvbSAnLi4vYXBpL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IEhvdHN3YXBNb2RlIH0gZnJvbSAnLi4vYXBpL2hvdHN3YXAnO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gJy4uL2FwaS9zZXR0aW5ncyc7XG5pbXBvcnQgeyBjb250ZXh0SGFuZGxlciBhcyBjb250ZXh0IH0gZnJvbSAnLi4vY29tbWFuZHMvY29udGV4dCc7XG5pbXBvcnQgeyBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MgfSBmcm9tICcuLi9jb21tYW5kcy9kZXBsb3knO1xuaW1wb3J0IHsgZG9jcyB9IGZyb20gJy4uL2NvbW1hbmRzL2RvY3MnO1xuaW1wb3J0IHsgZG9jdG9yIH0gZnJvbSAnLi4vY29tbWFuZHMvZG9jdG9yJztcbmltcG9ydCB7IEZsYWdDb21tYW5kSGFuZGxlciB9IGZyb20gJy4uL2NvbW1hbmRzL2ZsYWdzL2ZsYWdzJztcbmltcG9ydCB7IGNsaUluaXQsIHByaW50QXZhaWxhYmxlVGVtcGxhdGVzIH0gZnJvbSAnLi4vY29tbWFuZHMvaW5pdCc7XG5pbXBvcnQgeyBnZXRMYW5ndWFnZUZyb21BbGlhcyB9IGZyb20gJy4uL2NvbW1hbmRzL2xhbmd1YWdlJztcbmltcG9ydCB7IGxzcCB9IGZyb20gJy4uL2NvbW1hbmRzL2xzcCc7XG5pbXBvcnQgeyBnZXRNaWdyYXRlU2NhblR5cGUgfSBmcm9tICcuLi9jb21tYW5kcy9taWdyYXRlJztcbmltcG9ydCB7IGV4ZWNQcm9ncmFtLCBDbG91ZEV4ZWN1dGFibGUgfSBmcm9tICcuLi9jeGFwcCc7XG5pbXBvcnQgdHlwZSB7IFN5bnRoZXNpemVyIH0gZnJvbSAnLi4vY3hhcHAnO1xuaW1wb3J0IHsgZmluZFVua25vd25PcHRpb25zIH0gZnJvbSAnLi91dGlsL2NoZWNrLXVua25vd24tb3B0aW9ucyc7XG5pbXBvcnQgeyBpc0NJIH0gZnJvbSAnLi91dGlsL2NpJztcbmltcG9ydCB7IGd1ZXNzQWdlbnQgfSBmcm9tICcuL3V0aWwvZ3Vlc3MtYWdlbnQnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlYyhhcmdzOiBzdHJpbmdbXSwgc3ludGhlc2l6ZXI/OiBTeW50aGVzaXplcik6IFByb21pc2U8bnVtYmVyIHwgdm9pZD4ge1xuICAvLyBUaGlzIGlzIHRoZSB2ZXJ5IGZpcnN0IGNvZGUgdGhhdCBydW5zLCBidXQgbGlicmFyaWVzIGhhdmUgYmVlbiBsb2FkZWQgYWxyZWFkeSBhbmQgdGhhdCBhbHNvIGNvc3RzIHRpbWUuXG4gIC8vIE1lYXN1cmUgdGhhdC5cbiAgY29uc3QgbGlicmFyeUxvYWRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgY29uc3QgYXJndiA9IGF3YWl0IHBhcnNlQ29tbWFuZExpbmVBcmd1bWVudHMoYXJncyk7XG4gIGFyZ3YubGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZUZyb21BbGlhcyhhcmd2Lmxhbmd1YWdlKSA/PyBhcmd2Lmxhbmd1YWdlO1xuXG4gIC8vIEhhbmRsZSBjb2xvciBvdXRwdXQgc2V0dGluZ3NcbiAgLy8gUHJpb3JpdHk6IC0tbm8tY29sb3IgPiAtLWNvbG9yID4gVFRZIGRldGVjdGlvblxuICBpZiAoYXJndi5ub0NvbG9yKSB7XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMCc7XG4gIH0gZWxzZSBpZiAoYXJndi5jb2xvcikge1xuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzMnO1xuICB9IGVsc2UgaWYgKCFwcm9jZXNzLnN0ZG91dC5pc1RUWSkge1xuICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IGRpc2FibGUgY29sb3JzIGZvciBub24tVFRZXG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMCc7XG4gIH1cblxuICBjb25zdCBjbWQgPSBhcmd2Ll9bMF07XG5cbiAgLy8gaWYgb25lIC12LCBsb2cgYXQgYSBERUJVRyBsZXZlbFxuICAvLyBpZiAyIC12LCBsb2cgYXQgYSBUUkFDRSBsZXZlbFxuICBsZXQgaW9NZXNzYWdlTGV2ZWw6IElvTWVzc2FnZUxldmVsID0gJ2luZm8nO1xuICBpZiAoYXJndi52ZXJib3NlKSB7XG4gICAgc3dpdGNoIChhcmd2LnZlcmJvc2UpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaW9NZXNzYWdlTGV2ZWwgPSAnZGVidWcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlvTWVzc2FnZUxldmVsID0gJ3RyYWNlJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW9Ib3N0ID0gQ2xpSW9Ib3N0Lmluc3RhbmNlKHtcbiAgICBsb2dMZXZlbDogaW9NZXNzYWdlTGV2ZWwsXG4gICAgaXNUVFk6IHByb2Nlc3Muc3Rkb3V0LmlzVFRZLFxuICAgIGlzQ0k6IEJvb2xlYW4oYXJndi5jaSksXG4gICAgY3VycmVudEFjdGlvbjogY21kLFxuICAgIHN0YWNrUHJvZ3Jlc3M6IGFyZ3YucHJvZ3Jlc3MsXG4gICAgYXV0b1Jlc3BvbmQ6IGFyZ3YueWVzLFxuICB9LCB0cnVlKTtcbiAgY29uc3QgaW9IZWxwZXIgPSBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KTtcblxuICAvLyBDTEkgZGVidWdnaW5nIChhbmQgdGhlIGhpZ2hlc3QgdmVyYm9zaXR5LCBgLXZ2dmApIHR1cm5zIG9uIHZlcmJvc2UgQVdTIFNESyB0cmFjaW5nLlxuICBzZXRTZGtUcmFjaW5nKEJvb2xlYW4oYXJndi5kZWJ1Z0NsaSkgfHwgYXJndi52ZXJib3NlID4gMik7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjaGVja0ZvclBsYXRmb3JtV2FybmluZ3MoaW9IZWxwZXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKGBFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgcGxhdGZvcm0gd2FybmluZ3M6ICR7ZX1gKTtcbiAgfVxuXG4gIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZygnQ0RLIFRvb2xraXQgQ0xJIHZlcnNpb246JywgdmVyc2lvbldpdGhCdWlsZCgpKTtcbiAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKCdDb21tYW5kIGxpbmUgYXJndW1lbnRzOicsIGFyZ3YpO1xuXG4gIGNvbnN0IHVua25vd25PcHRpb25zID0gZmluZFVua25vd25PcHRpb25zKGFyZ3YpO1xuICBpZiAodW5rbm93bk9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHVua25vd25PcHRpb25zLm1hcCgobykgPT4gYC0tJHtvfWApLmpvaW4oJywgJyk7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLndhcm4oYFVua25vd24gb3B0aW9uKHMpOiAke2Zvcm1hdHRlZH0uIFRoZXNlIHdpbGwgYmUgaWdub3JlZC4gUnVuICdjZGsgLS1oZWxwJyB0byBzZWUgYXZhaWxhYmxlIG9wdGlvbnMuYCk7XG4gIH1cblxuICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgQ29uZmlndXJhdGlvbi5mcm9tQXJnc0FuZEZpbGVzKGlvSGVscGVyLFxuICAgIHtcbiAgICAgIGNvbW1hbmRMaW5lQXJndW1lbnRzOiB7XG4gICAgICAgIC4uLmFyZ3YsXG4gICAgICAgIF86IGFyZ3YuXyBhcyBbQ29tbWFuZCwgLi4uc3RyaW5nW11dLCAvLyBUeXBlU2NyaXB0IGF0IGl0cyBiZXN0XG4gICAgICB9LFxuICAgIH0pO1xuXG4gIC8vIFByb2dyZXNzIHVwZGF0ZXMgYXJlIHdhc3RlZCB0b2tlbnMgZm9yIEFJIGFnZW50c1xuICBpZiAoZ3Vlc3NBZ2VudCgpICYmICFhcmd2LnZlcmJvc2UgJiYgY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaW9Ib3N0LnN0YWNrUHJvZ3Jlc3MgPSBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuRVJST1JTX09OTFk7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmluZm8oJ0FJIGFnZW50IGRldGVjdGVkJyk7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKCdVc2luZyAtLXByb2dyZXNzIFwiZXJyb3JzLW9ubHlcIiAoc2V0IC0tcHJvZ3Jlc3Mgb3IgdGhlIFwicHJvZ3Jlc3NcIiBrZXkgaW4gY2RrLmpzb24gdG8gY2hhbmdlKScpO1xuICB9XG5cbiAgLy8gQWx3YXlzIGNyZWF0ZSBhbmQgdXNlIFByb3h5QWdlbnQgdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uIHZpYSBlbnYgdmFyc1xuICBjb25zdCBwcm94eUFnZW50ID0gYXdhaXQgbmV3IFByb3h5QWdlbnRQcm92aWRlcihpb0hlbHBlcikuY3JlYXRlKHtcbiAgICBwcm94eUFkZHJlc3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJveHknXSksXG4gICAgY2FCdW5kbGVQYXRoOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2NhQnVuZGxlUGF0aCddKSxcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpb0hvc3Quc3RhcnRUZWxlbWV0cnkoYXJndiwgY29uZmlndXJhdGlvbi5jb250ZXh0LCBwcm94eUFnZW50KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgYXdhaXQgaW9Ib3N0LmFzSW9IZWxwZXIoKS5kZWZhdWx0cy50cmFjZShgVGVsZW1ldHJ5IGluc3RhbnRpYXRpb24gZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaExvYWRUaW1lKGxpYnJhcnlMb2FkVGltZSk7XG4gIGlvSG9zdC50ZWxlbWV0cnk/LmF0dGFjaExhbmd1YWdlKGF3YWl0IGd1ZXNzTGFuZ3VhZ2UocHJvY2Vzcy5jd2QoKSkpO1xuICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hBZ2VudChndWVzc0FnZW50KCkpO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZGlzcGxheWluZyAoYW5kIHJlZnJlc2hpbmcpIG5vdGljZXMgb24gYWxsIGNvbW1hbmRzLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBkaWRuJ3Qgc3VwcGx5IGVpdGhlciBgLS1ub3RpY2VzYCBvciBgLS1uby1ub3RpY2VzYCwgd2UgZG9cbiAgICogYXV0b2RldGVjdGlvbi4gVGhlIGF1dG9kZXRlY3Rpb24gY3VycmVudGx5IGlzOiBkbyB3cml0ZSBub3RpY2VzIGlmIHdlIGFyZVxuICAgKiBub3Qgb24gQ0ksIG9yIGFyZSBvbiBhIENJIHN5c3RlbSB3aGVyZSB3ZSBrbm93IHRoYXQgd3JpdGluZyB0byBzdGRlcnIgaXNcbiAgICogc2FmZS4gV2UgZmFpbCBcImNsb3NlZFwiOyB0aGF0IGlzLCB3ZSBkZWNpZGUgdG8gTk9UIHByaW50IGZvciB1bmtub3duIENJXG4gICAqIHN5c3RlbXMsIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5IHdlIG1heWJlIGNvdWxkLlxuICAgKi9cbiAgY29uc3QgaXNTYWZlVG9Xcml0ZU5vdGljZXMgPSAhaXNDSSgpIHx8IEJvb2xlYW4oY2lTeXN0ZW1Jc1N0ZEVyclNhZmUoKSk7XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIG5vdGljZXMgc2hvdWxkIGJlIGRpc3BsYXllZCBiYXNlZCBvbiBDTEkgYXJncyBhbmQgY29uZmlndXJhdGlvblxuICBsZXQgc2hvdWxkRGlzcGxheU5vdGljZXM6IGJvb2xlYW47XG4gIGlmIChhcmd2Lm5vdGljZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIENMSSBhcmd1bWVudCB0YWtlcyBwcmVjZWRlbmNlXG4gICAgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBhcmd2Lm5vdGljZXM7XG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbCBiYWNrIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5nLCB0aGVuIGF1dG9kZXRlY3Rpb25cbiAgICBjb25zdCBjb25maWdOb3RpY2VzID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydub3RpY2VzJ10pO1xuICAgIGlmIChjb25maWdOb3RpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENvbnNpZGVyIHN0cmluZyBcImZhbHNlXCIgdG8gYmUgZmFsc3kgaW4gdGhpcyBjb250ZXh0XG4gICAgICBzaG91bGREaXNwbGF5Tm90aWNlcyA9IGNvbmZpZ05vdGljZXMgIT09ICdmYWxzZScgJiYgQm9vbGVhbihjb25maWdOb3RpY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCBhdXRvZGV0ZWN0aW9uIGJlaGF2aW9yXG4gICAgICBzaG91bGREaXNwbGF5Tm90aWNlcyA9IGlzU2FmZVRvV3JpdGVOb3RpY2VzO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vdGljZXMgZWl0aGVyIGdvIHRvIHN0ZGVyciwgb3Igbm93aGVyZVxuICBpb0hvc3Qubm90aWNlc0Rlc3RpbmF0aW9uID0gc2hvdWxkRGlzcGxheU5vdGljZXMgPyAnc3RkZXJyJyA6ICdkcm9wJztcbiAgY29uc3Qgbm90aWNlcyA9IE5vdGljZXMuY3JlYXRlKHtcbiAgICBpb0hvc3QsXG4gICAgY29udGV4dDogY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgIG91dHB1dDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydvdXRkaXInXSksXG4gICAgbGFuZ3VhZ2U6IGF3YWl0IGd1ZXNzTGFuZ3VhZ2UocHJvY2Vzcy5jd2QoKSksXG4gICAgaHR0cE9wdGlvbnM6IHsgYWdlbnQ6IHByb3h5QWdlbnQgfSxcbiAgICBjbGlWZXJzaW9uOiB2ZXJzaW9uTnVtYmVyKCksXG4gIH0pO1xuICBjb25zdCByZWZyZXNoTm90aWNlcyA9IChhc3luYyAoKSA9PiB7XG4gICAgLy8gdGhlIGNkayBub3RpY2VzIGNvbW1hbmQgaGFzIGl0J3Mgb3duIHJlZnJlc2hcbiAgICBpZiAoc2hvdWxkRGlzcGxheU5vdGljZXMgJiYgY21kICE9PSAnbm90aWNlcycpIHtcbiAgICAgIGF3YWl0IHRyYXBFcnJvcnMoaW9IZWxwZXIsICdDb3VsZCBub3QgcmVmcmVzaCBub3RpY2VzJywgKCkgPT4gbm90aWNlcy5yZWZyZXNoKCkpO1xuICAgIH1cbiAgfSkoKTtcblxuICBjb25zdCBzZGtQcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoe1xuICAgIGlvSGVscGVyLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBzZGtSZXF1ZXN0SGFuZGxlcihwcm94eUFnZW50KSxcbiAgICBsb2dnZXI6IG5ldyBJb0hvc3RTZGtMb2dnZXIoYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSkpLFxuICAgIHBsdWdpbkhvc3Q6IEdMT0JBTF9QTFVHSU5fSE9TVCxcbiAgfSwgY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9maWxlJ10pLCBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JlZ2lvbiddKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hSZWdpb24oc2RrUHJvdmlkZXIuZGVmYXVsdFJlZ2lvbik7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGF3YWl0IGlvSG9zdC5hc0lvSGVscGVyKCkuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBhdHRhY2ggcmVnaW9uIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBsZXQgb3V0RGlyTG9jazogSVJlYWRMb2NrIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBjb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyLFxuICAgIHN5bnRoZXNpemVyOlxuICAgICAgc3ludGhlc2l6ZXIgPz9cbiAgICAgIChhc3luYyAoYXdzLCBjb25maWcpID0+IHtcbiAgICAgICAgLy8gSW52b2tlICdleGVjUHJvZ3JhbScsIGFuZCBjb3B5IHRoZSBsb2NrIGZvciB0aGUgZGlyZWN0b3J5IGluIHRoZSBnbG9iYWxcbiAgICAgICAgLy8gdmFyaWFibGUgaGVyZS4gSXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBDTEkgZXhpdHMuIExvY2tzIGFyZSBub3QgcmUtZW50cmFudFxuICAgICAgICAvLyBzbyByZWxlYXNlIGl0IGlmIHdlIGhhdmUgdG8gc3ludGhlc2l6ZSBtb3JlIHRoYW4gb25jZSAoYmVjYXVzZSBvZiBjb250ZXh0IGxvb2t1cHMpLlxuICAgICAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG4gICAgICAgIGNvbnN0IHsgYXNzZW1ibHksIGxvY2ssIHBlcmZDb3VudGVycyB9ID0gYXdhaXQgZXhlY1Byb2dyYW0oYXdzLCBpb0hvc3QuYXNJb0hlbHBlcigpLCBjb25maWcpO1xuICAgICAgICBvdXREaXJMb2NrID0gbG9jaztcblxuICAgICAgICBjb25zdCB0cmVlID0gYXdhaXQgbG9hZFRyZWUoYXNzZW1ibHksIGlvSGVscGVyLmRlZmF1bHRzLnRyYWNlLmJpbmQoaW9IZWxwZXIuZGVmYXVsdHMpKTtcbiAgICAgICAgaWYgKHRyZWUpIHtcbiAgICAgICAgICBjb25zdCB2ID0gZmluZENvbnN0cnVjdExpYnJhcnlWZXJzaW9uKHRyZWUpO1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hDZGtMaWJWZXJzaW9uKHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJmQ291bnRlcnMpIHtcbiAgICAgICAgICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hDb3VudGVyc1RvTmV4dEV2ZW50KHBlcmZDb3VudGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNzZW1ibHk7XG4gICAgICB9KSxcbiAgICBpb0hlbHBlcjogaW9Ib3N0LmFzSW9IZWxwZXIoKSxcbiAgfSk7XG5cbiAgLyoqIEZ1bmN0aW9uIHRvIGxvYWQgcGx1Zy1pbnMsIHVzaW5nIGNvbmZpZ3VyYXRpb25zIGFkZGl0aXZlbHkuICovXG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRQbHVnaW5zKC4uLnNldHRpbmdzOiBTZXR0aW5nc1tdKSB7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0IHBsdWdpbnM6IHN0cmluZ1tdID0gc291cmNlLmdldChbJ3BsdWdpbiddKSB8fCBbXTtcbiAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgICAgYXdhaXQgR0xPQkFMX1BMVUdJTl9IT1NULmxvYWQocGx1Z2luLCBpb0hvc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGxvYWRQbHVnaW5zKGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MpO1xuXG4gIGlmICgodHlwZW9mIGNtZCkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignSW52YWxpZEFyZ1R5cGUnLCBgRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nLiBHb3Q6ICR7Y21kfSAoJHt0eXBlb2YgY21kfSlgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG1haW4oY21kLCBhcmd2KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBJZiB3ZSBsb2NrZWQgdGhlICdjZGsub3V0JyBkaXJlY3RvcnksIHJlbGVhc2UgaXQgaGVyZS5cbiAgICBhd2FpdCBvdXREaXJMb2NrPy5yZWxlYXNlKCk7XG5cbiAgICAvLyBEbyBQU0FzIGhlcmVcbiAgICBpZiAoc2hvdWxkRGlzcGxheVZlcnNpb25NZXNzYWdlKCkpIHtcbiAgICAgIGF3YWl0IGRpc3BsYXlWZXJzaW9uTWVzc2FnZShpb0hlbHBlciwgeyBhZ2VudDogcHJveHlBZ2VudCB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCByZWZyZXNoTm90aWNlcztcbiAgICBpZiAoY21kID09PSAnbm90aWNlcycpIHtcbiAgICAgIC8vIGRvIG5vdCB0cmFwIGVycm9ycyBoZXJlXG4gICAgICAvLyB0aGlzIGlzIHRoZSBub3RpY2VzIGNvbW1hbmQgaXRzZWxmLCBhbnkgZXJyb3Igc2hvdWxkIGJlIGxvdWRcbiAgICAgIGF3YWl0IG5vdGljZXMucmVmcmVzaCh7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgbm90aWNlcy5kaXNwbGF5KHtcbiAgICAgICAgaW5jbHVkZUFja25vd2xlZGdlZDogIWFyZ3YudW5hY2tub3dsZWRnZWQsXG4gICAgICAgIHNob3dUb3RhbDogYXJndi51bmFja25vd2xlZGdlZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkRGlzcGxheU5vdGljZXMgJiYgY21kICE9PSAndmVyc2lvbicpIHtcbiAgICAgIGF3YWl0IHRyYXBFcnJvcnMoaW9IZWxwZXIsICdDb3VsZCBub3QgZGlzcGxheSBub3RpY2VzJywgKCkgPT4gbm90aWNlcy5kaXNwbGF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG1haW4oY29tbWFuZDogc3RyaW5nLCBhcmdzOiBhbnkpOiBQcm9taXNlPG51bWJlciB8IHZvaWQ+IHtcbiAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9IGNvbW1hbmQgYXMgYW55O1xuICAgIGNvbnN0IHRvb2xraXRTdGFja05hbWU6IHN0cmluZyA9IFRvb2xraXRJbmZvLmRldGVybWluZU5hbWUoY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd0b29sa2l0U3RhY2tOYW1lJ10pKTtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoYFRvb2xraXQgc3RhY2s6ICR7Y2hhbGsuYm9sZCh0b29sa2l0U3RhY2tOYW1lKX1gKTtcblxuICAgIGNvbnN0IGNsb3VkRm9ybWF0aW9uID0gbmV3IERlcGxveW1lbnRzKHtcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgIGlvSGVscGVyOiBhc0lvSGVscGVyKGlvSG9zdCwgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gYXMgYW55KSxcbiAgICB9KTtcblxuICAgIGlmIChhcmdzLmFsbCAmJiBhcmdzLlNUQUNLUykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU3RhY2tzT3JBbGxSZXF1aXJlZCcsICdZb3UgbXVzdCBlaXRoZXIgc3BlY2lmeSBhIGxpc3Qgb2YgU3RhY2tzIG9yIHRoZSBgLS1hbGxgIGFyZ3VtZW50Jyk7XG4gICAgfVxuXG4gICAgYXJncy5TVEFDS1MgPSBhcmdzLlNUQUNLUyA/PyAoYXJncy5TVEFDSyA/IFthcmdzLlNUQUNLXSA6IFtdKTtcbiAgICBhcmdzLkVOVklST05NRU5UUyA9IGFyZ3MuRU5WSVJPTk1FTlRTID8/IFtdO1xuXG4gICAgY29uc3QgY2xpID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgaW9Ib3N0LFxuICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgdG9vbGtpdFN0YWNrTmFtZSxcbiAgICAgIGRlcGxveW1lbnRzOiBjbG91ZEZvcm1hdGlvbixcbiAgICAgIHZlcmJvc2U6IGFyZ3YudHJhY2UgfHwgYXJndi52ZXJib3NlID4gMCxcbiAgICAgIGlnbm9yZUVycm9yczogYXJndlsnaWdub3JlLWVycm9ycyddLFxuICAgICAgc3RyaWN0OiBhcmd2LnN0cmljdCxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcixcbiAgICB9KTtcblxuICAgIGlvSG9zdC50ZWxlbWV0cnk/Lm1hcmtPcGVyYXRpb25TdGFydCgpO1xuXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XG4gICAgICBjYXNlICdjb250ZXh0JzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnY29udGV4dCc7XG4gICAgICAgIHJldHVybiBjb250ZXh0KHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBjb250ZXh0OiBjb25maWd1cmF0aW9uLmNvbnRleHQsXG4gICAgICAgICAgc291cmNlRmlsZXM6IGNvbmZpZ3VyYXRpb24uY29udGV4dFNvdXJjZUZpbGVzLFxuICAgICAgICAgIGNsZWFyOiBhcmd2LmNsZWFyLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgICBmb3JjZTogYXJndi5mb3JjZSxcbiAgICAgICAgICByZXNldDogYXJndi5yZXNldCxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RvY3MnOlxuICAgICAgY2FzZSAnZG9jJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZG9jcyc7XG4gICAgICAgIHJldHVybiBkb2NzKHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBicm93c2VyOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Jyb3dzZXInXSksXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkb2N0b3InOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdkb2N0b3InO1xuICAgICAgICByZXR1cm4gZG9jdG9yKHtcbiAgICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgICBzZXR0aW5nczogY29uZmlndXJhdGlvbi5zZXR0aW5ncyxcbiAgICAgICAgICBhZ2VudDogcHJveHlBZ2VudCxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2xzcCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2xzcCc7XG4gICAgICAgIHJldHVybiBsc3AoeyBmZWF0dXJlczogYXJndi5mZWF0dXJlcyB9KTtcblxuICAgICAgY2FzZSAnbHMnOlxuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2xpc3QnO1xuICAgICAgICByZXR1cm4gY2xpLmxpc3QoYXJncy5TVEFDS1MsIHtcbiAgICAgICAgICBsb25nOiBhcmdzLmxvbmcsXG4gICAgICAgICAganNvbjogYXJndi5qc29uLFxuICAgICAgICAgIHNob3dEZXBzOiBhcmdzLnNob3dEZXBlbmRlbmNpZXMsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWZmJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlmZic7XG4gICAgICAgIGNvbnN0IGVuYWJsZURpZmZOb0ZhaWwgPSBpc0ZlYXR1cmVFbmFibGVkKGNvbmZpZ3VyYXRpb24sIGN4YXBpLkVOQUJMRV9ESUZGX05PX0ZBSUxfQ09OVEVYVCk7XG4gICAgICAgIHJldHVybiBjbGkuZGlmZih7XG4gICAgICAgICAgc3RhY2tOYW1lczogYXJncy5TVEFDS1MsXG4gICAgICAgICAgZXhjbHVzaXZlbHk6IGFyZ3MuZXhjbHVzaXZlbHksXG4gICAgICAgICAgdGVtcGxhdGVQYXRoOiBhcmdzLnRlbXBsYXRlLFxuICAgICAgICAgIHN0cmljdDogYXJncy5zdHJpY3QsXG4gICAgICAgICAgY29udGV4dExpbmVzOiBhcmdzLmNvbnRleHRMaW5lcyxcbiAgICAgICAgICBzZWN1cml0eU9ubHk6IGFyZ3Muc2VjdXJpdHlPbmx5LFxuICAgICAgICAgIGZhaWw6IGFyZ3MuZmFpbCAhPSBudWxsID8gYXJncy5mYWlsIDogIWVuYWJsZURpZmZOb0ZhaWwsXG4gICAgICAgICAgY29tcGFyZUFnYWluc3RQcm9jZXNzZWRUZW1wbGF0ZTogYXJncy5wcm9jZXNzZWQsXG4gICAgICAgICAgcXVpZXQ6IGFyZ3MucXVpZXQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRlcm1pbmVEaWZmTWV0aG9kKGFyZ3MpLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgICAgaW5jbHVkZU1vdmVzOiBhcmdzWydpbmNsdWRlLW1vdmVzJ10sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkcmlmdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RyaWZ0JztcbiAgICAgICAgcmV0dXJuIGNsaS5kcmlmdCh7XG4gICAgICAgICAgc2VsZWN0b3I6IHNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShhcmdzLlNUQUNLUyksXG4gICAgICAgICAgZmFpbDogYXJncy5mYWlsLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncmVmYWN0b3InOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3JlZmFjdG9yJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncmVmYWN0b3InO1xuICAgICAgICByZXR1cm4gY2xpLnJlZmFjdG9yKHtcbiAgICAgICAgICBkcnlSdW46IGFyZ3MuZHJ5UnVuLFxuICAgICAgICAgIG92ZXJyaWRlRmlsZTogYXJncy5vdmVycmlkZUZpbGUsXG4gICAgICAgICAgcmV2ZXJ0OiBhcmdzLnJldmVydCxcbiAgICAgICAgICBzdGFja3M6IHNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShhcmdzLlNUQUNLUyksXG4gICAgICAgICAgYWRkaXRpb25hbFN0YWNrTmFtZXM6IGFycmF5RnJvbVlhcmdzKGFyZ3MuYWRkaXRpb25hbFN0YWNrTmFtZSA/PyBbXSksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UgPz8gZmFsc2UsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnYm9vdHN0cmFwJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnYm9vdHN0cmFwJztcbiAgICAgICAgY29uc3Qgc291cmNlOiBCb290c3RyYXBTb3VyY2UgPSBhd2FpdCBkZXRlcm1pbmVCb290c3RyYXBWZXJzaW9uKGlvSG9zdCwgYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3Muc2hvd1RlbXBsYXRlKSB7XG4gICAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVyID0gbmV3IEJvb3RzdHJhcHBlcihzb3VyY2UsIGFzSW9IZWxwZXIoaW9Ib3N0LCBpb0hvc3QuY3VycmVudEFjdGlvbikpO1xuICAgICAgICAgIHJldHVybiBib290c3RyYXBwZXIuc2hvd1RlbXBsYXRlKGFyZ3MuanNvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xpLmJvb3RzdHJhcChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgZm9yY2VEZXBsb3ltZW50OiBhcmd2LmZvcmNlLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgZXhlY3V0ZTogYXJncy5leGVjdXRlLFxuICAgICAgICAgIHRhZ3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndGFncyddKSxcbiAgICAgICAgICB0ZXJtaW5hdGlvblByb3RlY3Rpb246IGFyZ3MudGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogYXJnc1sncHJldmlvdXMtcGFyYW1ldGVycyddLFxuICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgIGV4cHJlc3M6IGFyZ3MuZXhwcmVzcyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBidWNrZXROYW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAnYnVja2V0TmFtZSddKSxcbiAgICAgICAgICAgIGttc0tleUlkOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAna21zS2V5SWQnXSksXG4gICAgICAgICAgICBjcmVhdGVDdXN0b21lck1hc3RlcktleTogYXJncy5ib290c3RyYXBDdXN0b21lcktleSxcbiAgICAgICAgICAgIHF1YWxpZmllcjogYXJncy5xdWFsaWZpZXIgPz8gY29uZmlndXJhdGlvbi5jb250ZXh0LmdldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInKSxcbiAgICAgICAgICAgIHB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjogYXJncy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBleGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeTogYXJndi5leGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIGN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIHRydXN0ZWRBY2NvdW50czogYXJyYXlGcm9tWWFyZ3MoYXJncy50cnVzdCksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3RGb3JMb29rdXApLFxuICAgICAgICAgICAgdW50cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudW50cnVzdCksXG4gICAgICAgICAgICBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMpLFxuICAgICAgICAgICAgZGVueUV4dGVybmFsSWQ6IGFyZ3MuZGVueUV4dGVybmFsSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RlcGxveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RlcGxveSc7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlck1hcDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYXJncy5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IChwYXJhbWV0ZXIgYXMgc3RyaW5nKS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgcGFyYW1ldGVyTWFwW2tleVZhbHVlWzBdXSA9IGtleVZhbHVlLnNsaWNlKDEpLmpvaW4oJz0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5leGVjdXRlICE9PSB1bmRlZmluZWQgJiYgYXJncy5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0NvbmZsaWN0aW5nRXhlY3V0ZUFuZE1ldGhvZCcsICdDYW4gbm90IHN1cHBseSBib3RoIC0tW25vLV1leGVjdXRlIGFuZCAtLW1ldGhvZCBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xpLmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgIC4uLmV4cGFuZFVwKG11c3RNYXRjaChleHBsaWNpdE9yRGVmYXVsdFN0YWNrcyhhcmdzLlNUQUNLUywgYXJncy5hbGwpKSwgYXJncy5leGNsdXNpdmVseSksXG4gICAgICAgICAgICBmYWlsT25FbXB0eTogIWFyZ3MuaWdub3JlTm9TdGFja3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zOiBhcmdzLm5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JlcXVpcmVBcHByb3ZhbCddKSxcbiAgICAgICAgICByZXVzZUFzc2V0czogYXJnc1snYnVpbGQtZXhjbHVkZSddLFxuICAgICAgICAgIHRhZ3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndGFncyddKSxcbiAgICAgICAgICBkZXBsb3ltZW50TWV0aG9kOiBkZXRlcm1pbmVEZXBsb3ltZW50TWV0aG9kKGFyZ3MsIGNvbmZpZ3VyYXRpb24pLFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlck1hcCxcbiAgICAgICAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IGFyZ3NbJ3ByZXZpb3VzLXBhcmFtZXRlcnMnXSxcbiAgICAgICAgICBvdXRwdXRzRmlsZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydvdXRwdXRzRmlsZSddKSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICBjaTogYXJncy5jaSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICB3YXRjaDogYXJncy53YXRjaCxcbiAgICAgICAgICB0cmFjZUxvZ3M6IGFyZ3MubG9ncyxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICBhc3NldFBhcmFsbGVsaXNtOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Fzc2V0UGFyYWxsZWxpc20nXSksXG4gICAgICAgICAgYXNzZXRCdWlsZENvbmN1cnJlbmN5OiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Fzc2V0QnVpbGRDb25jdXJyZW5jeSddKSxcbiAgICAgICAgICBhc3NldEJ1aWxkVGltZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldFByZWJ1aWxkJ10pXG4gICAgICAgICAgICA/IEFzc2V0QnVpbGRUaW1lLkFMTF9CRUZPUkVfREVQTE9ZXG4gICAgICAgICAgICA6IEFzc2V0QnVpbGRUaW1lLkpVU1RfSU5fVElNRSxcbiAgICAgICAgICBleHByZXNzOiBhcmdzLmV4cHJlc3MsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICd2YWxpZGF0ZSc6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAndmFsaWRhdGUnKTtcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAndmFsaWRhdGUnO1xuICAgICAgICBjb25maWd1cmF0aW9uLmNvbnRleHQuc2V0KCdAYXdzLWNkay9jb3JlOmZhaWxTeW50aE9uVmFsaWRhdGlvbkVycm9ycycsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGNsaS52YWxpZGF0ZSh7XG4gICAgICAgICAgc3RhY2tzOiBzcGVjaWZpY1N0YWNrc09yQWxsUmVjdXJzaXZlbHkoYXJncy5TVEFDS1MpLFxuICAgICAgICAgIG9ubGluZTogYXJncy5vbmxpbmUsXG4gICAgICAgICAgd2F0Y2g6IGFyZ3Mud2F0Y2gsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWFnbm9zZSc6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZGlhZ25vc2UnKTtcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlhZ25vc2UnO1xuXG4gICAgICAgIHJldHVybiBjbGkuZGlhZ25vc2Uoe1xuICAgICAgICAgIHN0YWNrczogc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KGFyZ3MuU1RBQ0tTKSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiBhcmdzLnRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3JvbGxiYWNrJztcbiAgICAgICAgcmV0dXJuIGNsaS5yb2xsYmFjayh7XG4gICAgICAgICAgc2VsZWN0b3I6IG11c3RNYXRjaChleHBsaWNpdE9yRGVmYXVsdFN0YWNrcyhhcmdzLlNUQUNLUywgYXJncy5hbGwpKSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbjogYXJnc1sndmFsaWRhdGUtYm9vdHN0cmFwLXZlcnNpb24nXSxcbiAgICAgICAgICBvcnBoYW5Mb2dpY2FsSWRzOiBhcmdzLm9ycGhhbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3B1Ymxpc2gtYXNzZXRzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncHVibGlzaC1hc3NldHMnO1xuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3B1Ymxpc2gtYXNzZXRzJyk7XG5cbiAgICAgICAgcmV0dXJuIGNsaS5wdWJsaXNoQXNzZXRzKHtcbiAgICAgICAgICBzdGFja3M6IHtcbiAgICAgICAgICAgIC4uLnNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShhcmdzLlNUQUNLUyksXG4gICAgICAgICAgICBleHBhbmQ6IGFyZ3MuZXhjbHVzaXZlbHkgPyBFeHBhbmRTdGFja1NlbGVjdGlvbi5OT05FIDogRXhwYW5kU3RhY2tTZWxlY3Rpb24uVVBTVFJFQU0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ29ycGhhbic6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnb3JwaGFuJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnb3JwaGFuJztcbiAgICAgICAgcmV0dXJuIGNsaS5vcnBoYW4oe1xuICAgICAgICAgIGNvbnN0cnVjdFBhdGg6IGFyZ3MuUEFUSFMgPz8gW10sXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbXBvcnQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbXBvcnQnO1xuICAgICAgICByZXR1cm4gY2xpLmltcG9ydCh7XG4gICAgICAgICAgc2VsZWN0b3I6IG11c3RNYXRjaChleHBsaWNpdE9yRGVmYXVsdFN0YWNrcyhhcmdzLlNUQUNLUywgYXJncy5hbGwpKSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zOiBhcmdzLm5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDoge1xuICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICBleGVjdXRlOiBhcmdzLmV4ZWN1dGUsXG4gICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICByZWNvcmRSZXNvdXJjZU1hcHBpbmc6IGFyZ3NbJ3JlY29yZC1yZXNvdXJjZS1tYXBwaW5nJ10sXG4gICAgICAgICAgcmVzb3VyY2VNYXBwaW5nRmlsZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZyddLFxuICAgICAgICAgIHJlc291cmNlTWFwcGluZ0lubGluZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZy1pbmxpbmUnXSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3dhdGNoJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnd2F0Y2gnO1xuICAgICAgICBhd2FpdCBjbGkud2F0Y2goe1xuICAgICAgICAgIHNlbGVjdG9yOiBleHBhbmRVcChtdXN0TWF0Y2goZXhwbGljaXRPckRlZmF1bHRTdGFja3MoYXJncy5TVEFDS1MsIGFyZ3MuYWxsKSksIGFyZ3MuZXhjbHVzaXZlbHkpLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDogZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzLCBjb25maWd1cmF0aW9uLCB0cnVlKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICB0cmFjZUxvZ3M6IGFyZ3MubG9ncyxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnZGVzdHJveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Rlc3Ryb3knO1xuICAgICAgICByZXR1cm4gY2xpLmRlc3Ryb3koe1xuICAgICAgICAgIC8vIE5vIGBtdXN0TWF0Y2goKWAgaGVyZTogYGNkayBkZXN0cm95YCBoaXN0b3JpY2FsbHkgdHJlYXRzIHBhdHRlcm5zXG4gICAgICAgICAgLy8gdGhhdCBtYXRjaCBub3RoaW5nIGFzIFwibm90aGluZyB0byBkb1wiICh0aGUgZGVzdHJveSBhY3Rpb24gd2FybnMpLlxuICAgICAgICAgIHNlbGVjdG9yOiBleHBhbmREb3duKGV4cGxpY2l0T3JEZWZhdWx0U3RhY2tzKGFyZ3MuU1RBQ0tTLCBhcmdzLmFsbCksIGFyZ3MuZXhjbHVzaXZlbHkpLFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICBleHByZXNzOiBhcmdzLmV4cHJlc3MsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdnYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2djJztcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdnYycpO1xuICAgICAgICBpZiAoYXJncy5ib290c3RyYXBTdGFja05hbWUpIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignLS1ib290c3RyYXAtc3RhY2stbmFtZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBnYyBpcyBHQS4gVXNlIC0tdG9vbGtpdC1zdGFjay1uYW1lLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJvbGVBcm4gaXMgZGVmaW5lZCBmb3Igd2hlbiBjbG91ZGZvcm1hdGlvbiBpcyBpbnZva2VkXG4gICAgICAgIC8vIFRoaXMgY29uZmxpY3RzIHdpdGggZGlyZWN0IHNkayBjYWxscyBleGlzdGluZyBpbiB0aGUgZ2MgY29tbWFuZCB0byBzMyBhbmQgZWNyXG4gICAgICAgIGlmIChhcmdzLnJvbGVBcm4pIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignVGhlIC0tcm9sZS1hcm4gb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBnYyBjb21tYW5kIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsaS5nYXJiYWdlQ29sbGVjdChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgdHlwZTogYXJncy50eXBlLFxuICAgICAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogYXJnc1sncm9sbGJhY2stYnVmZmVyLWRheXMnXSxcbiAgICAgICAgICBjcmVhdGVkQnVmZmVyRGF5czogYXJnc1snY3JlYXRlZC1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogYXJncy50b29sa2l0U3RhY2tOYW1lID8/IGFyZ3MuYm9vdHN0cmFwU3RhY2tOYW1lLFxuICAgICAgICAgIGNvbmZpcm06IGFyZ3MuY29uZmlybSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZsYWdzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZmxhZ3MnO1xuXG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZmxhZ3MnKTtcblxuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IFRvb2xraXQoe1xuICAgICAgICAgIGlvSG9zdCxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHVuc3RhYmxlRmVhdHVyZXM6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndW5zdGFibGUnXSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmbGFnc0RhdGEgPSBhd2FpdCB0b29sa2l0LmZsYWdzKGNsb3VkRXhlY3V0YWJsZSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgRmxhZ0NvbW1hbmRIYW5kbGVyKGZsYWdzRGF0YSwgaW9IZWxwZXIsIGFyZ3MsIHRvb2xraXQsIGNvbmZpZ3VyYXRpb24uY29udGV4dC5hbGwpO1xuICAgICAgICByZXR1cm4gaGFuZGxlci5wcm9jZXNzRmxhZ3NDb21tYW5kKCk7XG5cbiAgICAgIGNhc2UgJ3N5bnRoZXNpemUnOlxuICAgICAgY2FzZSAnc3ludGgnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdzeW50aCc7XG4gICAgICAgIGlmIChhcmdzLndhdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aFdhdGNoKHtcbiAgICAgICAgICAgIHN0YWNrczogc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KGFyZ3MuU1RBQ0tTKSxcbiAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tzOiBhcmdzLnZhbGlkYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVpZXQgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3F1aWV0J10pID8/IGFyZ3MucXVpZXQ7XG4gICAgICAgIHJldHVybiBjbGkuc3ludGgoe1xuICAgICAgICAgIHN0YWNrTmFtZXM6IGFyZ3MuU1RBQ0tTLFxuICAgICAgICAgIC8vIEhpc3RvcmljIHF1aXJrOiBgY2RrIHN5bnRoYCBhbHdheXMgc2VsZWN0cyBleGNsdXNpdmVseSwgd2hldGhlciBvciBub3QgYC0tZXhjbHVzaXZlbHlgIHdhcyBnaXZlblxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiB0cnVlLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIGF1dG9WYWxpZGF0ZTogYXJncy52YWxpZGF0aW9uLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ25vdGljZXMnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciBub3RpY2VzLCB0aGV5IGFyZSBub3cgdGhlIHByaW1hcnkgb3V0cHV0XG4gICAgICAgIC8vIG9mIHRoZSBjb21tYW5kIGFuZCB0aGV5IHNob3VsZCBnbyB0byBzdGRvdXQuXG4gICAgICAgIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSAnc3Rkb3V0JztcblxuICAgICAgICAvLyBUaGlzIGlzIGEgdmFsaWQgY29tbWFuZCwgYnV0IHdlJ3JlIHBvc3Rwb25pbmcgaXRzIGV4ZWN1dGlvbiBiZWNhdXNlIGRpc3BsYXlpbmdcbiAgICAgICAgLy8gbm90aWNlcyBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgZXZlcnkgY29tbWFuZC5cbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21ldGFkYXRhJztcbiAgICAgICAgcmV0dXJuIGNsaS5tZXRhZGF0YShhcmdzLlNUQUNLLCBhcmd2Lmpzb24pO1xuXG4gICAgICBjYXNlICdhY2tub3dsZWRnZSc6XG4gICAgICBjYXNlICdhY2snOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgcmV0dXJuIGNsaS5hY2tub3dsZWRnZShhcmdzLklEKTtcblxuICAgICAgY2FzZSAnY2xpLXRlbGVtZXRyeSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2NsaS10ZWxlbWV0cnknO1xuICAgICAgICBpZiAoYXJncy5lbmFibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLmRpc2FibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVGVsZW1ldHJ5QXJnUmVxdWlyZWQnLCAnTXVzdCBzcGVjaWZ5IFxcJy0tZW5hYmxlXFwnLCBcXCctLWRpc2FibGVcXCcsIG9yIFxcJy0tc3RhdHVzXFwnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5zdGF0dXMpIHtcbiAgICAgICAgICByZXR1cm4gY2xpLmNsaVRlbGVtZXRyeVN0YXR1cyhhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlbmFibGUgPSBhcmdzLmVuYWJsZSA/PyAhYXJncy5kaXNhYmxlO1xuICAgICAgICAgIHJldHVybiBjbGkuY2xpVGVsZW1ldHJ5KGVuYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2luaXQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbml0JztcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2xhbmd1YWdlJ10pO1xuICAgICAgICBpZiAoYXJncy5saXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHByaW50QXZhaWxhYmxlVGVtcGxhdGVzKGlvSGVscGVyLCBsYW5ndWFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gR2F0ZSBjdXN0b20gdGVtcGxhdGUgc3VwcG9ydCB3aXRoIHVuc3RhYmxlIGZsYWdcbiAgICAgICAgICBpZiAoYXJnc1snZnJvbS1wYXRoJ10pIHtcbiAgICAgICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnaW5pdCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjbGlJbml0KHtcbiAgICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICAgICAgdHlwZTogYXJncy5URU1QTEFURSxcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgY2FuVXNlTmV0d29yazogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ2VuZXJhdGVPbmx5OiBhcmdzLmdlbmVyYXRlT25seSxcbiAgICAgICAgICAgIGxpYlZlcnNpb246IGFyZ3MubGliVmVyc2lvbixcbiAgICAgICAgICAgIGZyb21QYXRoOiBhcmdzWydmcm9tLXBhdGgnXSxcbiAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogYXJnc1sndGVtcGxhdGUtcGF0aCddLFxuICAgICAgICAgICAgcGFja2FnZU1hbmFnZXI6IGFyZ3NbJ3BhY2thZ2UtbWFuYWdlciddLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IGFyZ3MucHJvamVjdE5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21pZ3JhdGUnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtaWdyYXRlJztcbiAgICAgICAgcmV0dXJuIGNsaS5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6IGFyZ3NbJ3N0YWNrLW5hbWUnXSxcbiAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgZnJvbVN0YWNrOiBhcmdzWydmcm9tLXN0YWNrJ10sXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFyZ3MubGFuZ3VhZ2UsXG4gICAgICAgICAgb3V0cHV0UGF0aDogYXJnc1snb3V0cHV0LXBhdGgnXSxcbiAgICAgICAgICBmcm9tU2NhbjogZ2V0TWlncmF0ZVNjYW5UeXBlKGFyZ3NbJ2Zyb20tc2NhbiddKSxcbiAgICAgICAgICBmaWx0ZXI6IGFyZ3MuZmlsdGVyLFxuICAgICAgICAgIGFjY291bnQ6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICByZWdpb246IGFyZ3MucmVnaW9uLFxuICAgICAgICAgIGNvbXByZXNzOiBhcmdzLmNvbXByZXNzLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICd2ZXJzaW9uJztcbiAgICAgICAgcmV0dXJuIGlvSG9zdC5kZWZhdWx0cy5yZXN1bHQodmVyc2lvbldpdGhCdWlsZCgpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5rbm93bkNvbW1hbmQnLCAnVW5rbm93biBjb21tYW5kOiAnICsgY29tbWFuZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoaWNoIHZlcnNpb24gb2YgYm9vdHN0cmFwcGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBkZXRlcm1pbmVCb290c3RyYXBWZXJzaW9uKGlvSG9zdDogQ2xpSW9Ib3N0LCBhcmdzOiB7IHRlbXBsYXRlPzogc3RyaW5nIH0pOiBQcm9taXNlPEJvb3RzdHJhcFNvdXJjZT4ge1xuICBsZXQgc291cmNlOiBCb290c3RyYXBTb3VyY2U7XG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmluZm8oYFVzaW5nIGJvb3RzdHJhcHBpbmcgdGVtcGxhdGUgZnJvbSAke2FyZ3MudGVtcGxhdGV9YCk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdjdXN0b20nLCB0ZW1wbGF0ZUZpbGU6IGFyZ3MudGVtcGxhdGUgfTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5DREtfTEVHQUNZX0JPT1RTVFJBUCkge1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5pbmZvKCdDREtfTEVHQUNZX0JPT1RTVFJBUCBzZXQsIHVzaW5nIGxlZ2FjeS1zdHlsZSBib290c3RyYXBwaW5nJyk7XG4gICAgc291cmNlID0geyBzb3VyY2U6ICdsZWdhY3knIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gVjIsIHRoZSBcIm5ld1wiIGJvb3RzdHJhcHBpbmcgaXMgdGhlIGRlZmF1bHRcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2RlZmF1bHQnIH07XG4gIH1cbiAgcmV0dXJuIHNvdXJjZTtcbn1cblxuZnVuY3Rpb24gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlRmxhZzogc3RyaW5nKSB7XG4gIHJldHVybiBjb25maWd1cmF0aW9uLmNvbnRleHQuZ2V0KGZlYXR1cmVGbGFnKSA/PyBjeGFwaS5mdXR1cmVGbGFnRGVmYXVsdChmZWF0dXJlRmxhZyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSB0b29sa2l0LWxpYiBTdGFja1NlbGVjdG9yIGZyb20gYSBnaXZlbiBzZXQgb2Ygc3RhY2sgY29uc3RydWN0IHBhdGggcGF0dGVybnNcbiAqXG4gKiBJZiBubyBwYXR0ZXJucyBhcmUgZ2l2ZW4sIGFsbCBzdGFja3MgaW4gdGhlIGFzc2VtYmx5IGFuZCBhbGwgb2YgaXRzIHN0YWdlcyBhcmUgc2VsZWN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShwYXR0ZXJuczogc3RyaW5nW10pOiBTdGFja1NlbGVjdG9yIHtcbiAgcmV0dXJuIHtcbiAgICBzdHJhdGVneTogcGF0dGVybnMubGVuZ3RoID4gMCA/IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NQVRDSCA6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuQUxMX1NUQUNLUyxcbiAgICBwYXR0ZXJucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHRvb2xraXQtbGliIFN0YWNrU2VsZWN0b3IgZm9yIHRoZSBkZXBsb3ktbGlrZSBjb21tYW5kcyAoZGVwbG95LCB3YXRjaCwgcm9sbGJhY2ssIGltcG9ydCwgZGVzdHJveSlcbiAqXG4gKiBTZWxlY3RzIHRoZSBzdGFja3MgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tlZCBmb3Ig4oCUIG1hdGNoaW5nIHBhdHRlcm5zLCBvciBhbGxcbiAqIHRvcC1sZXZlbCBzdGFja3Mgd2l0aCBgLS1hbGxgIOKAlCBhbmQgZGVmYXVsdHMgdG8gdGhlIGFwcCdzIHNpbmdsZSB0b3AtbGV2ZWxcbiAqIHN0YWNrIHdoZW4gbm8gYXJndW1lbnRzIGFyZSBnaXZlbiAoZmFpbGluZyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lKS5cbiAqIFVubGlrZSBgc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5YCwgdGhpcyBuZXZlciBmYWxscyBiYWNrIHRvIGFsbFxuICogc3RhY2tzLiBUaGUgc2VsZWN0aW9uIGlzIGV4YWN0OyBjb21iaW5lIHdpdGggYGV4cGFuZFVwKClgIG9yIGBleHBhbmREb3duKClgXG4gKiB0byBpbmNsdWRlIGRlcGVuZGVuY3kgc3RhY2tzLlxuICovXG5mdW5jdGlvbiBleHBsaWNpdE9yRGVmYXVsdFN0YWNrcyhwYXR0ZXJuczogc3RyaW5nW10sIGFsbDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IFN0YWNrU2VsZWN0b3Ige1xuICByZXR1cm4ge1xuICAgIHBhdHRlcm5zLFxuICAgIHN0cmF0ZWd5OiBhbGxcbiAgICAgID8gU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5NQUlOX0FTU0VNQkxZXG4gICAgICA6IHBhdHRlcm5zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LlBBVFRFUk5fTUFUQ0hcbiAgICAgICAgOiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5Lk9OTFlfU0lOR0xFLFxuICB9O1xufVxuXG4vKipcbiAqIEV4dGVuZCB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBvZiB0aGUgc2VsZWN0ZWQgc3RhY2tzLCB1bmxlc3MgYC0tZXhjbHVzaXZlbHlgIHdhcyBnaXZlblxuICovXG5mdW5jdGlvbiBleHBhbmRVcChzZWxlY3RvcjogU3RhY2tTZWxlY3RvciwgZXhjbHVzaXZlbHk/OiBib29sZWFuKTogU3RhY2tTZWxlY3RvciB7XG4gIHJldHVybiB7XG4gICAgLi4uc2VsZWN0b3IsXG4gICAgZXhwYW5kOiBleGNsdXNpdmVseSA/IEV4cGFuZFN0YWNrU2VsZWN0aW9uLk5PTkUgOiBFeHBhbmRTdGFja1NlbGVjdGlvbi5VUFNUUkVBTSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRlbmQgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSBkb3duc3RyZWFtIGRlcGVuZGVudHMgb2YgdGhlIHNlbGVjdGVkIHN0YWNrcywgdW5sZXNzIGAtLWV4Y2x1c2l2ZWx5YCB3YXMgZ2l2ZW5cbiAqL1xuZnVuY3Rpb24gZXhwYW5kRG93bihzZWxlY3RvcjogU3RhY2tTZWxlY3RvciwgZXhjbHVzaXZlbHk/OiBib29sZWFuKTogU3RhY2tTZWxlY3RvciB7XG4gIHJldHVybiB7XG4gICAgLi4uc2VsZWN0b3IsXG4gICAgZXhwYW5kOiBleGNsdXNpdmVseSA/IEV4cGFuZFN0YWNrU2VsZWN0aW9uLk5PTkUgOiBFeHBhbmRTdGFja1NlbGVjdGlvbi5ET1dOU1RSRUFNLFxuICB9O1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBhIFlhcmdzIGlucHV0IGFycmF5IHRvIHNvbWV0aGluZyB0aGF0IG1ha2VzIG1vcmUgc2Vuc2UgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZVxuICogbW9kZWwgKHRlbGxpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhYnNlbmNlIGFuZCBhbiBlbXB0eSBhcnJheSlcbiAqXG4gKiAtIEFuIGVtcHR5IGFycmF5IGlzIHRoZSBkZWZhdWx0IGNhc2UsIG1lYW5pbmcgdGhlIHVzZXIgZGlkbid0IHBhc3MgYW55IGFyZ3VtZW50cy4gV2UgcmV0dXJuXG4gKiAgIHVuZGVmaW5lZC5cbiAqIC0gSWYgdGhlIHVzZXIgcGFzc2VkIGEgc2luZ2xlIGVtcHR5IHN0cmluZywgdGhleSBkaWQgc29tZXRoaW5nIGxpa2UgYC0tYXJyYXk9YCwgd2hpY2ggd2UnbGxcbiAqICAgdGFrZSB0byBtZWFuIHRoZXkgcGFzc2VkIGFuIGVtcHR5IGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZyb21ZYXJncyh4czogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICh4cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB4cy5maWx0ZXIoKHgpID0+IHggIT09ICcnKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBkaWZmIG1ldGhvZCBmcm9tIENMSSBhcmdzLlxuICogLS1tZXRob2QgdGFrZXMgcHJlY2VkZW5jZSwgdGhlbiBkZXByZWNhdGVkIC0tY2hhbmdlLXNldCwgdGhlbiAtLXRlbXBsYXRlIGltcGxpZXMgdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZURpZmZNZXRob2QoYXJnczogYW55KTogJ2NoYW5nZS1zZXQnIHwgJ3RlbXBsYXRlJyB8ICdhdXRvJyB7XG4gIGlmIChhcmdzLm1ldGhvZCAmJiBhcmdzLm1ldGhvZCAhPT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuIGFyZ3MubWV0aG9kO1xuICB9XG5cbiAgLy8gRGVwcmVjYXRlZCAtLW5vLWNoYW5nZS1zZXQgbWFwcyB0byB0ZW1wbGF0ZVxuICBpZiAoYXJnc1snY2hhbmdlLXNldCddID09PSBmYWxzZSkge1xuICAgIHJldHVybiAndGVtcGxhdGUnO1xuICB9XG5cbiAgLy8gLS10ZW1wbGF0ZSBpbXBsaWVzIHRlbXBsYXRlXG4gIGlmIChhcmdzLnRlbXBsYXRlKSB7XG4gICAgcmV0dXJuICd0ZW1wbGF0ZSc7XG4gIH1cblxuICByZXR1cm4gJ2F1dG8nO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVEZXBsb3ltZW50TWV0aG9kKGFyZ3M6IGFueSwgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgd2F0Y2g/OiBib29sZWFuKTogRGVwbG95bWVudE1ldGhvZCB7XG4gIGxldCBkZXBsb3ltZW50TWV0aG9kOiBDaGFuZ2VTZXREZXBsb3ltZW50IHwgRGlyZWN0RGVwbG95bWVudCB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLm1ldGhvZCkge1xuICAgIGNhc2UgJ2V4ZWN1dGUtY2hhbmdlLXNldCc6XG4gICAgICBpZiAoIWFyZ3MuU1RBQ0tTIHx8IGFyZ3MuU1RBQ0tTLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdFeGFjdGx5T25lU3RhY2snLCAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0IHJlcXVpcmVzIGV4YWN0bHkgb25lIHN0YWNrJyk7XG4gICAgICB9XG4gICAgICBpZiAod2F0Y2ggfHwgYXJncy53YXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdXYXRjaFdpdGhFeGVjdXRlQ2hhbmdlU2V0JywgJy0tbWV0aG9kPWV4ZWN1dGUtY2hhbmdlLXNldCBjYW5ub3QgYmUgdXNlZCB3aXRoIHdhdGNoJyk7XG4gICAgICB9XG4gICAgICByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3MsICctLW1ldGhvZD1leGVjdXRlLWNoYW5nZS1zZXQnLCB7XG4gICAgICAgIGZvcmNlOiAnLS1mb3JjZScsXG4gICAgICAgIHBhcmFtZXRlcnM6ICctLXBhcmFtZXRlcnMnLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogJy0taW1wb3J0LWV4aXN0aW5nLXJlc291cmNlcycsXG4gICAgICAgIHJldmVydERyaWZ0OiAnLS1yZXZlcnQtZHJpZnQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdleGVjdXRlLWNoYW5nZS1zZXQnLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUgPz8gJ2Nkay1kZXBsb3ktY2hhbmdlLXNldCcsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RpcmVjdCc6XG4gICAgICByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3MsICctLW1ldGhvZD1kaXJlY3QnLCB7XG4gICAgICAgIGNoYW5nZVNldE5hbWU6ICctLWNoYW5nZS1zZXQtbmFtZScsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiAnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJyxcbiAgICAgICAgcmV2ZXJ0RHJpZnQ6ICctLXJldmVydC1kcmlmdCcsXG4gICAgICB9KTtcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7IG1ldGhvZDogJ2RpcmVjdCcgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NoYW5nZS1zZXQnOlxuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgIGV4ZWN1dGU6IHRydWUsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXBhcmUtY2hhbmdlLXNldCc6XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgZXhlY3V0ZTogZmFsc2UsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgZXhlY3V0ZTogd2F0Y2ggPyB0cnVlIDogYXJncy5leGVjdXRlID8/IHRydWUsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgIHJldmVydERyaWZ0OiBhcmdzLnJldmVydERyaWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgaG90c3dhcE1vZGUgPSBkZXRlcm1pbmVIb3Rzd2FwTW9kZShhcmdzLmhvdHN3YXAsIGFyZ3MuaG90c3dhcEZhbGxiYWNrLCB3YXRjaCk7XG4gIGNvbnN0IGhvdHN3YXBQcm9wZXJ0aWVzID0gY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydob3Rzd2FwJ10pIHx8IHt9O1xuICBzd2l0Y2ggKGhvdHN3YXBNb2RlKSB7XG4gICAgY2FzZSBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0s6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgcHJvcGVydGllczogaG90c3dhcFByb3BlcnRpZXMsXG4gICAgICAgIGZhbGxiYWNrOiBkZXBsb3ltZW50TWV0aG9kLFxuICAgICAgfTtcbiAgICBjYXNlIEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ2hvdHN3YXAnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBob3Rzd2FwUHJvcGVydGllcyxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICBjYXNlIEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDpcbiAgICAgIHJldHVybiBkZXBsb3ltZW50TWV0aG9kO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCBmZWF0dXJlOiBzdHJpbmcpIHtcbiAgaWYgKCFjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Vuc3RhYmxlJ10pLmluY2x1ZGVzKGZlYXR1cmUpKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVW5zdGFibGUke3VjZmlyc3QoZmVhdHVyZSl9YCwgYFVuc3RhYmxlIGZlYXR1cmUgdXNlOiBcXCcke2ZlYXR1cmV9XFwnIGlzIHVuc3RhYmxlLiBJdCBtdXN0IGJlIG9wdGVkIGluIHZpYSBcXCctLXVuc3RhYmxlXFwnLCBlLmcuIFxcJ2NkayAke2ZlYXR1cmV9IC0tdW5zdGFibGU9JHtmZWF0dXJlfVxcJ2ApO1xuICB9XG5cbiAgZnVuY3Rpb24gdWNmaXJzdCh4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4geFswXS50b1VwcGVyQ2FzZSgpICsgeC5zbGljZSgxKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93IGlmIGFueSBvZiB0aGUgZ2l2ZW4gZmxhZ3MgYXJlIHNldCwgYXMgdGhleSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIG9wdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmVqZWN0SW5jb21wYXRpYmxlT3B0aW9ucyhhcmdzOiBhbnksIG9wdGlvbjogc3RyaW5nLCBmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICBmb3IgKGNvbnN0IFtrZXksIGZsYWddIG9mIE9iamVjdC5lbnRyaWVzKGZsYWdzKSkge1xuICAgIGNvbnN0IHZhbHVlID0gYXJnc1trZXldO1xuXG4gICAgbGV0IGlzU2V0ID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyB5YXJncyBtYXkgZGVmYXVsdCBhcnJheSBvcHRpb25zIHRvIFt7fV0sIHNvIG9ubHkgY291bnQgcmVhbCB2YWx1ZXNcbiAgICAgIGlzU2V0ID0gdmFsdWUuc29tZSgodjogdW5rbm93bikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU2V0ID0gISF2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNTZXQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0luY29tcGF0aWJsZU9wdGlvbnMnLCBgJHtmbGFnfSBjYW5ub3QgYmUgdXNlZCB3aXRoICR7b3B0aW9ufWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVIb3Rzd2FwTW9kZShob3Rzd2FwPzogYm9vbGVhbiwgaG90c3dhcEZhbGxiYWNrPzogYm9vbGVhbiwgd2F0Y2g/OiBib29sZWFuKTogSG90c3dhcE1vZGUge1xuICBpZiAoaG90c3dhcCAmJiBob3Rzd2FwRmFsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDb25mbGljdGluZ0hvdHN3YXBBcmdzJywgJ0NhbiBub3Qgc3VwcGx5IGJvdGggLS1ob3Rzd2FwIGFuZCAtLWhvdHN3YXAtZmFsbGJhY2sgYXQgdGhlIHNhbWUgdGltZScpO1xuICB9IGVsc2UgaWYgKCFob3Rzd2FwICYmICFob3Rzd2FwRmFsbGJhY2spIHtcbiAgICBpZiAoaG90c3dhcCA9PT0gdW5kZWZpbmVkICYmIGhvdHN3YXBGYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gd2F0Y2ggPyBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFkgOiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQ7XG4gICAgfSBlbHNlIGlmIChob3Rzd2FwID09PSBmYWxzZSB8fCBob3Rzd2FwRmFsbGJhY2sgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cbiAgfVxuXG4gIGxldCBob3Rzd2FwTW9kZTogSG90c3dhcE1vZGU7XG4gIGlmIChob3Rzd2FwKSB7XG4gICAgaG90c3dhcE1vZGUgPSBIb3Rzd2FwTW9kZS5IT1RTV0FQX09OTFk7XG4gICAgLyogaWYgKGhvdHN3YXBGYWxsYmFjaykqL1xuICB9IGVsc2Uge1xuICAgIGhvdHN3YXBNb2RlID0gSG90c3dhcE1vZGUuRkFMTF9CQUNLO1xuICB9XG5cbiAgcmV0dXJuIGhvdHN3YXBNb2RlO1xufVxuXG4vKiBjOCBpZ25vcmUgc3RhcnQgKi8gLy8gd2UgbmV2ZXIgY2FsbCB0aGlzIGluIHVuaXQgdGVzdHNcbmV4cG9ydCBmdW5jdGlvbiBjbGkoYXJnczogc3RyaW5nW10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpIHtcbiAgbGV0IGVycm9yOiBFcnJvckRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGV4ZWMoYXJncylcbiAgICAudGhlbihhc3luYyAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaChhc3luYyAoZXJyKSA9PiB7XG4gICAgICAvLyBUaGUgdXNlciBkZWNsaW5lZCBhIGNvbmZpcm1hdGlvbi4gVGhpcyBpcyBhbiBleHBlY3RlZCBvdXRjb21lLCBub3QgYSBjcmFzaCwgc28gcHJlc2VudCBpdCBzb2Z0bHkvXG4gICAgICAvLyBXZSBzdGlsbCBleGl0IG5vbi16ZXJvIHNvIHRoZSBvcGVyYXRpb24gaXMgcmVwb3J0ZWQgYXMgbm90IGNvbXBsZXRlZC5cbiAgICAgIGNvbnN0IHNvZnQgPSBBYm9ydEVycm9yLmlzQWJvcnRFcnJvcihlcnIpO1xuXG4gICAgICAvLyBMb2cgdGhlIHN0YWNrIHRyYWNlIGlmIHdlJ3JlIG9uIGEgZGV2ZWxvcGVyIHdvcmtzdGF0aW9uLiBPdGhlcndpc2UgdGhpcyB3aWxsIGJlIGludG8gYSBtaW5pZmllZFxuICAgICAgLy8gZmlsZSBhbmQgdGhlIHByaW50ZWQgY29kZSBsaW5lIGFuZCBzdGFjayB0cmFjZSBhcmUgaHVnZSBhbmQgdXNlbGVzcy5cbiAgICAgIGNvbnN0IGRlYnVnID0gaXNEZXZlbG9wZXJCdWlsZFZlcnNpb24oKTtcblxuICAgICAgcHJldHR5UHJpbnRFcnJvcihlcnIsIHsgZGVidWcsIHNvZnQgfSk7XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbmFtZTogY2RrQ2xpRXJyb3JOYW1lKGVyciksXG4gICAgICB9O1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgfSlcbiAgICAuZmluYWxseShhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBDbGlJb0hvc3QuZ2V0KCk/LnRlbGVtZXRyeT8uZW5kKGVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBhd2FpdCBDbGlJb0hvc3QuZ2V0KCk/LmFzSW9IZWxwZXIoKS5kZWZhdWx0cy50cmFjZShgRW5kaW5nIFRlbGVtZXRyeSBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pO1xufVxuLyogYzggaWdub3JlIHN0b3AgKi9cbiJdfQ==
959
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNERBLG9CQTBvQkM7QUF5UUQsa0JBdUNDO0FBdC9CRCxpREFBaUQsQ0FBQyxRQUFRO0FBQzFELHVEQUF5QztBQUV6QyxzREFBdUg7QUFDdkgsa0RBQTBCO0FBQzFCLGtDQUF3QztBQUN4QywrQ0FBMkQ7QUFDM0QsNkNBQW9EO0FBRXBELG1EQUFxRDtBQUNyRCx1REFBdUY7QUFFdkYsdUNBQXNDO0FBQ3RDLGlGQUEyRTtBQUMzRSwyREFBK0Q7QUFDL0QsNkRBQXdEO0FBQ3hELCtDQUFtRDtBQUNuRCxtRUFBNkQ7QUFDN0QsNkNBQW9EO0FBR3BELDZEQUFxRDtBQUNyRCxvREFBZ0Q7QUFDaEQsdUNBQXFGO0FBQ3JGLHVEQUFtRDtBQUVuRCxnQ0FBZ0c7QUFDaEcsOENBQWlHO0FBRWpHLGdEQUFnRDtBQUNoRCxvREFBaUQ7QUFDakQsNENBQTZDO0FBRTdDLGlEQUFnRTtBQUNoRSwrQ0FBMkQ7QUFDM0QsMkNBQXdDO0FBQ3hDLCtDQUE0QztBQUM1QyxtREFBNkQ7QUFDN0QsMkNBQW9FO0FBQ3BFLG1EQUE0RDtBQUM1RCx5Q0FBc0M7QUFDdEMsaURBQXlEO0FBQ3pELG9DQUF3RDtBQUV4RCx3RUFBa0U7QUFDbEUsa0NBQWlDO0FBQ2pDLG9EQUFnRDtBQUVoRDs7Ozs7Ozs7O0dBU0c7QUFDSCxJQUFJLGFBQThDLENBQUM7QUFFNUMsS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFjLEVBQUUsV0FBeUI7SUFDbEUsMEdBQTBHO0lBQzFHLGdCQUFnQjtJQUNoQixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFMUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHdEQUF5QixFQUFDLElBQUksQ0FBQyxDQUFDO0lBRW5ELDhFQUE4RTtJQUM5RSwrREFBK0Q7SUFD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Q0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sbUJBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBRUQsZ0ZBQWdGO1FBQ2hGLG1GQUFtRjtRQUNuRixpRkFBaUY7UUFDakYsMEVBQTBFO1FBQzFFLE1BQU0sUUFBUSxHQUFHLG1CQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDL0MsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLGFBQWEsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNELG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi8gLy8geWFyZ3NcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZVNldERlcGxveW1lbnQsIERlcGxveW1lbnRNZXRob2QsIERpcmVjdERlcGxveW1lbnQsIFN0YWNrU2VsZWN0b3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBFeHBhbmRTdGFja1NlbGVjdGlvbiwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdEVycm9yLCBUb29sa2l0LCBBYm9ydEVycm9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IGd1ZXNzTGFuZ3VhZ2UgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IENka1Rvb2xraXQsIEFzc2V0QnVpbGRUaW1lIH0gZnJvbSAnLi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBjaVN5c3RlbUlzU3RkRXJyU2FmZSB9IGZyb20gJy4vY2ktc3lzdGVtcyc7XG5pbXBvcnQgdHlwZSB7IExlYWtlZEhhbmRsZVRyYWNrZXIgfSBmcm9tICcuL2RlYnVnLWhhbmRsZXMnO1xuaW1wb3J0IHsgdHJhY2tMZWFrZWRIYW5kbGVzIH0gZnJvbSAnLi9kZWJ1Zy1oYW5kbGVzJztcbmltcG9ydCB7IGRpc3BsYXlWZXJzaW9uTWVzc2FnZSwgc2hvdWxkRGlzcGxheVZlcnNpb25NZXNzYWdlIH0gZnJvbSAnLi9kaXNwbGF5LXZlcnNpb24nO1xuaW1wb3J0IHR5cGUgeyBJb01lc3NhZ2VMZXZlbCB9IGZyb20gJy4vaW8taG9zdCc7XG5pbXBvcnQgeyBDbGlJb0hvc3QgfSBmcm9tICcuL2lvLWhvc3QnO1xuaW1wb3J0IHsgcGFyc2VDb21tYW5kTGluZUFyZ3VtZW50cyB9IGZyb20gJy4vcGFyc2UtY29tbWFuZC1saW5lLWFyZ3VtZW50cyc7XG5pbXBvcnQgeyBjaGVja0ZvclBsYXRmb3JtV2FybmluZ3MgfSBmcm9tICcuL3BsYXRmb3JtLXdhcm5pbmdzJztcbmltcG9ydCB7IHByZXR0eVByaW50RXJyb3IgfSBmcm9tICcuL3ByZXR0eS1wcmludC1lcnJvcic7XG5pbXBvcnQgeyBQcm94eUFnZW50UHJvdmlkZXIgfSBmcm9tICcuL3Byb3h5LWFnZW50JztcbmltcG9ydCB7IEdMT0JBTF9QTFVHSU5fSE9TVCB9IGZyb20gJy4vc2luZ2xldG9uLXBsdWdpbi1ob3N0JztcbmltcG9ydCB7IGNka0NsaUVycm9yTmFtZSB9IGZyb20gJy4vdGVsZW1ldHJ5L2Vycm9yJztcbmltcG9ydCB0eXBlIHsgRXJyb3JEZXRhaWxzIH0gZnJvbSAnLi90ZWxlbWV0cnkvc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gJy4vdXNlci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3VzZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyB0cmFwRXJyb3JzIH0gZnJvbSAnLi91dGlsL3RyYXAtZXJyb3JzJztcbmltcG9ydCB7IGlzRGV2ZWxvcGVyQnVpbGRWZXJzaW9uLCB2ZXJzaW9uV2l0aEJ1aWxkLCB2ZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi92ZXJzaW9uJztcbmltcG9ydCB7IGFzSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9saWIvYXBpLXByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJUmVhZExvY2sgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgVG9vbGtpdEluZm8sIE5vdGljZXMsIGxvYWRUcmVlLCBmaW5kQ29uc3RydWN0TGlicmFyeVZlcnNpb24sIG11c3RNYXRjaCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBTZGtQcm92aWRlciwgSW9Ib3N0U2RrTG9nZ2VyLCBzZXRTZGtUcmFjaW5nLCBzZGtSZXF1ZXN0SGFuZGxlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aCc7XG5pbXBvcnQgdHlwZSB7IEJvb3RzdHJhcFNvdXJjZSB9IGZyb20gJy4uL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVyIH0gZnJvbSAnLi4vYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBEZXBsb3ltZW50cyB9IGZyb20gJy4uL2FwaS9kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBIb3Rzd2FwTW9kZSB9IGZyb20gJy4uL2FwaS9ob3Rzd2FwJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3MgfSBmcm9tICcuLi9hcGkvc2V0dGluZ3MnO1xuaW1wb3J0IHsgY29udGV4dEhhbmRsZXIgYXMgY29udGV4dCB9IGZyb20gJy4uL2NvbW1hbmRzL2NvbnRleHQnO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eVByb2dyZXNzIH0gZnJvbSAnLi4vY29tbWFuZHMvZGVwbG95JztcbmltcG9ydCB7IGRvY3MgfSBmcm9tICcuLi9jb21tYW5kcy9kb2NzJztcbmltcG9ydCB7IGRvY3RvciB9IGZyb20gJy4uL2NvbW1hbmRzL2RvY3Rvcic7XG5pbXBvcnQgeyBGbGFnQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuLi9jb21tYW5kcy9mbGFncy9mbGFncyc7XG5pbXBvcnQgeyBjbGlJbml0LCBwcmludEF2YWlsYWJsZVRlbXBsYXRlcyB9IGZyb20gJy4uL2NvbW1hbmRzL2luaXQnO1xuaW1wb3J0IHsgZ2V0TGFuZ3VhZ2VGcm9tQWxpYXMgfSBmcm9tICcuLi9jb21tYW5kcy9sYW5ndWFnZSc7XG5pbXBvcnQgeyBsc3AgfSBmcm9tICcuLi9jb21tYW5kcy9sc3AnO1xuaW1wb3J0IHsgZ2V0TWlncmF0ZVNjYW5UeXBlIH0gZnJvbSAnLi4vY29tbWFuZHMvbWlncmF0ZSc7XG5pbXBvcnQgeyBleGVjUHJvZ3JhbSwgQ2xvdWRFeGVjdXRhYmxlIH0gZnJvbSAnLi4vY3hhcHAnO1xuaW1wb3J0IHR5cGUgeyBTeW50aGVzaXplciB9IGZyb20gJy4uL2N4YXBwJztcbmltcG9ydCB7IGZpbmRVbmtub3duT3B0aW9ucyB9IGZyb20gJy4vdXRpbC9jaGVjay11bmtub3duLW9wdGlvbnMnO1xuaW1wb3J0IHsgaXNDSSB9IGZyb20gJy4vdXRpbC9jaSc7XG5pbXBvcnQgeyBndWVzc0FnZW50IH0gZnJvbSAnLi91dGlsL2d1ZXNzLWFnZW50JztcblxuLyoqXG4gKiBUaGUgaGFuZGxlIHRyYWNrZXIgZm9yIHRoaXMgcHJvY2VzcywgaWYgYC0tZGVidWctY2xpYCBhc2tlZCBmb3Igb25lLlxuICpcbiAqIFNwbGl0IGFjcm9zcyB0aGUgdHdvIGZ1bmN0aW9ucyBvbiBwdXJwb3NlLiBgZXhlYygpYCBjcmVhdGVzIGl0LCBiZWNhdXNlIG9ubHkgaXRcbiAqIGhhcyB0aGUgcGFyc2VkIGFyZ3VtZW50cyBhbmQgYmVjYXVzZSB0cmFja2luZyBoYXMgdG8gc3RhcnQgYmVmb3JlIHRoZSBDTEkgb3BlbnNcbiAqIGFueXRoaW5nLiBgY2xpKClgIGlzIHdoYXQgc2NoZWR1bGVzIHRoZSByZXBvcnQsIGZvciB0d28gcmVhc29uczogYSBjb21tYW5kIHRoYXRcbiAqIGZhaWxzIGJlZm9yZSByZWFjaGluZyBgZXhlY2AncyBvd24gY2xlYW51cCBzdGlsbCBnZXRzIG9uZSwgYW5kIHRoZSBncmFjZSBwZXJpb2RcbiAqIHN0YXJ0cyBhZnRlciB0ZWxlbWV0cnkgaGFzIGZpbmlzaGVkIGl0cyBuZXR3b3JrIGNhbGxzIHJhdGhlciB0aGFuIGR1cmluZyB0aGVtLFxuICogc28gdGVsZW1ldHJ5J3Mgb3duIHNvY2tldHMgYXJlIG5vdCByZXBvcnRlZCBhcyBsZWFrcy5cbiAqL1xubGV0IGhhbmRsZVRyYWNrZXI6IExlYWtlZEhhbmRsZVRyYWNrZXIgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKGFyZ3M6IHN0cmluZ1tdLCBzeW50aGVzaXplcj86IFN5bnRoZXNpemVyKTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7XG4gIC8vIFRoaXMgaXMgdGhlIHZlcnkgZmlyc3QgY29kZSB0aGF0IHJ1bnMsIGJ1dCBsaWJyYXJpZXMgaGF2ZSBiZWVuIGxvYWRlZCBhbHJlYWR5IGFuZCB0aGF0IGFsc28gY29zdHMgdGltZS5cbiAgLy8gTWVhc3VyZSB0aGF0LlxuICBjb25zdCBsaWJyYXJ5TG9hZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICBjb25zdCBhcmd2ID0gYXdhaXQgcGFyc2VDb21tYW5kTGluZUFyZ3VtZW50cyhhcmdzKTtcblxuICAvLyBTdGFydCB0cmFja2luZyBhc3luYyByZXNvdXJjZXMgYXMgZWFybHkgYXMgcG9zc2libGUsIHNvIHdlIGNhbiBpZGVudGlmeSB0aGVcbiAgLy8gb25lcyBzdGlsbCBhbGl2ZSBhdCBleGl0IHRpbWUuIGBjbGkoKWAgc2NoZWR1bGVzIHRoZSByZXBvcnQuXG4gIGhhbmRsZVRyYWNrZXIgPSBhcmd2LmRlYnVnQ2xpID8gdHJhY2tMZWFrZWRIYW5kbGVzKCkgOiB1bmRlZmluZWQ7XG5cbiAgYXJndi5sYW5ndWFnZSA9IGdldExhbmd1YWdlRnJvbUFsaWFzKGFyZ3YubGFuZ3VhZ2UpID8/IGFyZ3YubGFuZ3VhZ2U7XG5cbiAgLy8gSGFuZGxlIGNvbG9yIG91dHB1dCBzZXR0aW5nc1xuICAvLyBQcmlvcml0eTogLS1uby1jb2xvciA+IC0tY29sb3IgPiBUVFkgZGV0ZWN0aW9uXG4gIGlmIChhcmd2Lm5vQ29sb3IpIHtcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9ICcwJztcbiAgfSBlbHNlIGlmIChhcmd2LmNvbG9yKSB7XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPSAnMyc7XG4gIH0gZWxzZSBpZiAoIXByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvcjogZGlzYWJsZSBjb2xvcnMgZm9yIG5vbi1UVFlcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9ICcwJztcbiAgfVxuXG4gIGNvbnN0IGNtZCA9IGFyZ3YuX1swXTtcblxuICBjb25zdCBpb01lc3NhZ2VMZXZlbCA9IGRldGVybWluZUlvTWVzc2FnZUxldmVsKGFyZ3YpO1xuXG4gIGNvbnN0IGlvSG9zdCA9IENsaUlvSG9zdC5pbnN0YW5jZSh7XG4gICAgbG9nTGV2ZWw6IGlvTWVzc2FnZUxldmVsLFxuICAgIGlzVFRZOiBwcm9jZXNzLnN0ZG91dC5pc1RUWSxcbiAgICBpc0NJOiBCb29sZWFuKGFyZ3YuY2kpLFxuICAgIGN1cnJlbnRBY3Rpb246IGNtZCxcbiAgICBzdGFja1Byb2dyZXNzOiBhcmd2LnByb2dyZXNzLFxuICAgIGF1dG9SZXNwb25kOiBhcmd2LnllcyxcbiAgfSwgdHJ1ZSk7XG4gIGNvbnN0IGlvSGVscGVyID0gYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSk7XG5cbiAgLy8gQ0xJIGRlYnVnZ2luZyAoYW5kIHRoZSBoaWdoZXN0IHZlcmJvc2l0eSwgYC12dnZgKSB0dXJucyBvbiB2ZXJib3NlIEFXUyBTREsgdHJhY2luZy5cbiAgc2V0U2RrVHJhY2luZyhCb29sZWFuKGFyZ3YuZGVidWdDbGkpIHx8IGFyZ3YudmVyYm9zZSA+IDIpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2hlY2tGb3JQbGF0Zm9ybVdhcm5pbmdzKGlvSGVscGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZyhgRXJyb3Igd2hpbGUgY2hlY2tpbmcgZm9yIHBsYXRmb3JtIHdhcm5pbmdzOiAke2V9YCk7XG4gIH1cblxuICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuZGVidWcoJ0NESyBUb29sa2l0IENMSSB2ZXJzaW9uOicsIHZlcnNpb25XaXRoQnVpbGQoKSk7XG4gIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZygnQ29tbWFuZCBsaW5lIGFyZ3VtZW50czonLCBhcmd2KTtcblxuICBjb25zdCB1bmtub3duT3B0aW9ucyA9IGZpbmRVbmtub3duT3B0aW9ucyhhcmd2KTtcbiAgaWYgKHVua25vd25PcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB1bmtub3duT3B0aW9ucy5tYXAoKG8pID0+IGAtLSR7b31gKS5qb2luKCcsICcpO1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy53YXJuKGBVbmtub3duIG9wdGlvbihzKTogJHtmb3JtYXR0ZWR9LiBUaGVzZSB3aWxsIGJlIGlnbm9yZWQuIFJ1biAnY2RrIC0taGVscCcgdG8gc2VlIGF2YWlsYWJsZSBvcHRpb25zLmApO1xuICB9XG5cbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IENvbmZpZ3VyYXRpb24uZnJvbUFyZ3NBbmRGaWxlcyhpb0hlbHBlcixcbiAgICB7XG4gICAgICBjb21tYW5kTGluZUFyZ3VtZW50czoge1xuICAgICAgICAuLi5hcmd2LFxuICAgICAgICBfOiBhcmd2Ll8gYXMgW0NvbW1hbmQsIC4uLnN0cmluZ1tdXSwgLy8gVHlwZVNjcmlwdCBhdCBpdHMgYmVzdFxuICAgICAgfSxcbiAgICB9KTtcblxuICAvLyBQcm9ncmVzcyB1cGRhdGVzIGFyZSB3YXN0ZWQgdG9rZW5zIGZvciBBSSBhZ2VudHNcbiAgaWYgKGd1ZXNzQWdlbnQoKSAmJiAhYXJndi52ZXJib3NlICYmIGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZ3Jlc3MnXSkgPT09IHVuZGVmaW5lZCkge1xuICAgIGlvSG9zdC5zdGFja1Byb2dyZXNzID0gU3RhY2tBY3Rpdml0eVByb2dyZXNzLkVSUk9SU19PTkxZO1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5pbmZvKCdBSSBhZ2VudCBkZXRlY3RlZCcpO1xuICAgIGF3YWl0IGlvSG9zdC5kZWZhdWx0cy5kZWJ1ZygnVXNpbmcgLS1wcm9ncmVzcyBcImVycm9ycy1vbmx5XCIgKHNldCAtLXByb2dyZXNzIG9yIHRoZSBcInByb2dyZXNzXCIga2V5IGluIGNkay5qc29uIHRvIGNoYW5nZSknKTtcbiAgfVxuXG4gIC8vIEFsd2F5cyBjcmVhdGUgYW5kIHVzZSBQcm94eUFnZW50IHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiB2aWEgZW52IHZhcnNcbiAgY29uc3QgcHJveHlBZ2VudCA9IGF3YWl0IG5ldyBQcm94eUFnZW50UHJvdmlkZXIoaW9IZWxwZXIpLmNyZWF0ZSh7XG4gICAgcHJveHlBZGRyZXNzOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Byb3h5J10pLFxuICAgIGNhQnVuZGxlUGF0aDogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydjYUJ1bmRsZVBhdGgnXSksXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaW9Ib3N0LnN0YXJ0VGVsZW1ldHJ5KGFyZ3YsIGNvbmZpZ3VyYXRpb24uY29udGV4dCwgcHJveHlBZ2VudCk7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGF3YWl0IGlvSG9zdC5hc0lvSGVscGVyKCkuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBpbnN0YW50aWF0aW9uIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hMb2FkVGltZShsaWJyYXJ5TG9hZFRpbWUpO1xuICBpb0hvc3QudGVsZW1ldHJ5Py5hdHRhY2hMYW5ndWFnZShhd2FpdCBndWVzc0xhbmd1YWdlKHByb2Nlc3MuY3dkKCkpKTtcbiAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoQWdlbnQoZ3Vlc3NBZ2VudCgpKTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGRpc3BsYXlpbmcgKGFuZCByZWZyZXNoaW5nKSBub3RpY2VzIG9uIGFsbCBjb21tYW5kcy5cbiAgICpcbiAgICogSWYgdGhlIHVzZXIgZGlkbid0IHN1cHBseSBlaXRoZXIgYC0tbm90aWNlc2Agb3IgYC0tbm8tbm90aWNlc2AsIHdlIGRvXG4gICAqIGF1dG9kZXRlY3Rpb24uIFRoZSBhdXRvZGV0ZWN0aW9uIGN1cnJlbnRseSBpczogZG8gd3JpdGUgbm90aWNlcyBpZiB3ZSBhcmVcbiAgICogbm90IG9uIENJLCBvciBhcmUgb24gYSBDSSBzeXN0ZW0gd2hlcmUgd2Uga25vdyB0aGF0IHdyaXRpbmcgdG8gc3RkZXJyIGlzXG4gICAqIHNhZmUuIFdlIGZhaWwgXCJjbG9zZWRcIjsgdGhhdCBpcywgd2UgZGVjaWRlIHRvIE5PVCBwcmludCBmb3IgdW5rbm93biBDSVxuICAgKiBzeXN0ZW1zLCBldmVuIHRob3VnaCB0ZWNobmljYWxseSB3ZSBtYXliZSBjb3VsZC5cbiAgICovXG4gIGNvbnN0IGlzU2FmZVRvV3JpdGVOb3RpY2VzID0gIWlzQ0koKSB8fCBCb29sZWFuKGNpU3lzdGVtSXNTdGRFcnJTYWZlKCkpO1xuXG4gIC8vIERldGVybWluZSBpZiBub3RpY2VzIHNob3VsZCBiZSBkaXNwbGF5ZWQgYmFzZWQgb24gQ0xJIGFyZ3MgYW5kIGNvbmZpZ3VyYXRpb25cbiAgbGV0IHNob3VsZERpc3BsYXlOb3RpY2VzOiBib29sZWFuO1xuICBpZiAoYXJndi5ub3RpY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBDTEkgYXJndW1lbnQgdGFrZXMgcHJlY2VkZW5jZVxuICAgIHNob3VsZERpc3BsYXlOb3RpY2VzID0gYXJndi5ub3RpY2VzO1xuICB9IGVsc2Uge1xuICAgIC8vIEZhbGwgYmFjayB0byBjb25maWd1cmF0aW9uIGZpbGUgc2V0dGluZywgdGhlbiBhdXRvZGV0ZWN0aW9uXG4gICAgY29uc3QgY29uZmlnTm90aWNlcyA9IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnbm90aWNlcyddKTtcbiAgICBpZiAoY29uZmlnTm90aWNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDb25zaWRlciBzdHJpbmcgXCJmYWxzZVwiIHRvIGJlIGZhbHN5IGluIHRoaXMgY29udGV4dFxuICAgICAgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBjb25maWdOb3RpY2VzICE9PSAnZmFsc2UnICYmIEJvb2xlYW4oY29uZmlnTm90aWNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgYXV0b2RldGVjdGlvbiBiZWhhdmlvclxuICAgICAgc2hvdWxkRGlzcGxheU5vdGljZXMgPSBpc1NhZmVUb1dyaXRlTm90aWNlcztcbiAgICB9XG4gIH1cblxuICAvLyBOb3RpY2VzIGVpdGhlciBnbyB0byBzdGRlcnIsIG9yIG5vd2hlcmVcbiAgaW9Ib3N0Lm5vdGljZXNEZXN0aW5hdGlvbiA9IHNob3VsZERpc3BsYXlOb3RpY2VzID8gJ3N0ZGVycicgOiAnZHJvcCc7XG4gIGNvbnN0IG5vdGljZXMgPSBOb3RpY2VzLmNyZWF0ZSh7XG4gICAgaW9Ib3N0LFxuICAgIGNvbnRleHQ6IGNvbmZpZ3VyYXRpb24uY29udGV4dCxcbiAgICBvdXRwdXQ6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnb3V0ZGlyJ10pLFxuICAgIGxhbmd1YWdlOiBhd2FpdCBndWVzc0xhbmd1YWdlKHByb2Nlc3MuY3dkKCkpLFxuICAgIGh0dHBPcHRpb25zOiB7IGFnZW50OiBwcm94eUFnZW50IH0sXG4gICAgY2xpVmVyc2lvbjogdmVyc2lvbk51bWJlcigpLFxuICB9KTtcbiAgY29uc3QgcmVmcmVzaE5vdGljZXMgPSAoYXN5bmMgKCkgPT4ge1xuICAgIC8vIHRoZSBjZGsgbm90aWNlcyBjb21tYW5kIGhhcyBpdCdzIG93biByZWZyZXNoXG4gICAgaWYgKHNob3VsZERpc3BsYXlOb3RpY2VzICYmIGNtZCAhPT0gJ25vdGljZXMnKSB7XG4gICAgICBhd2FpdCB0cmFwRXJyb3JzKGlvSGVscGVyLCAnQ291bGQgbm90IHJlZnJlc2ggbm90aWNlcycsICgpID0+IG5vdGljZXMucmVmcmVzaCgpKTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgY29uc3Qgc2RrUHJvdmlkZXIgPSBhd2FpdCBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHtcbiAgICBpb0hlbHBlcixcbiAgICByZXF1ZXN0SGFuZGxlcjogc2RrUmVxdWVzdEhhbmRsZXIocHJveHlBZ2VudCksXG4gICAgbG9nZ2VyOiBuZXcgSW9Ib3N0U2RrTG9nZ2VyKGFzSW9IZWxwZXIoaW9Ib3N0LCBpb0hvc3QuY3VycmVudEFjdGlvbiBhcyBhbnkpKSxcbiAgICBwbHVnaW5Ib3N0OiBHTE9CQUxfUExVR0lOX0hPU1QsXG4gIH0sIGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsncHJvZmlsZSddKSwgY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyZWdpb24nXSkpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoUmVnaW9uKHNka1Byb3ZpZGVyLmRlZmF1bHRSZWdpb24pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBhd2FpdCBpb0hvc3QuYXNJb0hlbHBlcigpLmRlZmF1bHRzLnRyYWNlKGBUZWxlbWV0cnkgYXR0YWNoIHJlZ2lvbiBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG5cbiAgbGV0IG91dERpckxvY2s6IElSZWFkTG9jayB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2xvdWRFeGVjdXRhYmxlID0gbmV3IENsb3VkRXhlY3V0YWJsZSh7XG4gICAgY29uZmlndXJhdGlvbixcbiAgICBzZGtQcm92aWRlcixcbiAgICBzeW50aGVzaXplcjpcbiAgICAgIHN5bnRoZXNpemVyID8/XG4gICAgICAoYXN5bmMgKGF3cywgY29uZmlnKSA9PiB7XG4gICAgICAgIC8vIEludm9rZSAnZXhlY1Byb2dyYW0nLCBhbmQgY29weSB0aGUgbG9jayBmb3IgdGhlIGRpcmVjdG9yeSBpbiB0aGUgZ2xvYmFsXG4gICAgICAgIC8vIHZhcmlhYmxlIGhlcmUuIEl0IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgQ0xJIGV4aXRzLiBMb2NrcyBhcmUgbm90IHJlLWVudHJhbnRcbiAgICAgICAgLy8gc28gcmVsZWFzZSBpdCBpZiB3ZSBoYXZlIHRvIHN5bnRoZXNpemUgbW9yZSB0aGFuIG9uY2UgKGJlY2F1c2Ugb2YgY29udGV4dCBsb29rdXBzKS5cbiAgICAgICAgYXdhaXQgb3V0RGlyTG9jaz8ucmVsZWFzZSgpO1xuICAgICAgICBjb25zdCB7IGFzc2VtYmx5LCBsb2NrLCBwZXJmQ291bnRlcnMgfSA9IGF3YWl0IGV4ZWNQcm9ncmFtKGF3cywgaW9Ib3N0LmFzSW9IZWxwZXIoKSwgY29uZmlnKTtcbiAgICAgICAgb3V0RGlyTG9jayA9IGxvY2s7XG5cbiAgICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGxvYWRUcmVlKGFzc2VtYmx5LCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZS5iaW5kKGlvSGVscGVyLmRlZmF1bHRzKSk7XG4gICAgICAgIGlmICh0cmVlKSB7XG4gICAgICAgICAgY29uc3QgdiA9IGZpbmRDb25zdHJ1Y3RMaWJyYXJ5VmVyc2lvbih0cmVlKTtcbiAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoQ2RrTGliVmVyc2lvbih2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGVyZkNvdW50ZXJzKSB7XG4gICAgICAgICAgaW9Ib3N0LnRlbGVtZXRyeT8uYXR0YWNoQ291bnRlcnNUb05leHRFdmVudChwZXJmQ291bnRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzc2VtYmx5O1xuICAgICAgfSksXG4gICAgaW9IZWxwZXI6IGlvSG9zdC5hc0lvSGVscGVyKCksXG4gIH0pO1xuXG4gIC8qKiBGdW5jdGlvbiB0byBsb2FkIHBsdWctaW5zLCB1c2luZyBjb25maWd1cmF0aW9ucyBhZGRpdGl2ZWx5LiAqL1xuICBhc3luYyBmdW5jdGlvbiBsb2FkUGx1Z2lucyguLi5zZXR0aW5nczogU2V0dGluZ3NbXSkge1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCBwbHVnaW5zOiBzdHJpbmdbXSA9IHNvdXJjZS5nZXQoWydwbHVnaW4nXSkgfHwgW107XG4gICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKSB7XG4gICAgICAgIGF3YWl0IEdMT0JBTF9QTFVHSU5fSE9TVC5sb2FkKHBsdWdpbiwgaW9Ib3N0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhd2FpdCBsb2FkUGx1Z2lucyhjb25maWd1cmF0aW9uLnNldHRpbmdzKTtcblxuICBpZiAoKHR5cGVvZiBjbWQpICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ludmFsaWRBcmdUeXBlJywgYEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZy4gR290OiAke2NtZH0gKCR7dHlwZW9mIGNtZH0pYCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBtYWluKGNtZCwgYXJndik7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gSWYgd2UgbG9ja2VkIHRoZSAnY2RrLm91dCcgZGlyZWN0b3J5LCByZWxlYXNlIGl0IGhlcmUuXG4gICAgYXdhaXQgb3V0RGlyTG9jaz8ucmVsZWFzZSgpO1xuXG4gICAgLy8gRG8gUFNBcyBoZXJlXG4gICAgaWYgKHNob3VsZERpc3BsYXlWZXJzaW9uTWVzc2FnZSgpKSB7XG4gICAgICBhd2FpdCBkaXNwbGF5VmVyc2lvbk1lc3NhZ2UoaW9IZWxwZXIsIHsgYWdlbnQ6IHByb3h5QWdlbnQgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgcmVmcmVzaE5vdGljZXM7XG4gICAgaWYgKGNtZCA9PT0gJ25vdGljZXMnKSB7XG4gICAgICAvLyBkbyBub3QgdHJhcCBlcnJvcnMgaGVyZVxuICAgICAgLy8gdGhpcyBpcyB0aGUgbm90aWNlcyBjb21tYW5kIGl0c2VsZiwgYW55IGVycm9yIHNob3VsZCBiZSBsb3VkXG4gICAgICBhd2FpdCBub3RpY2VzLnJlZnJlc2goeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IG5vdGljZXMuZGlzcGxheSh7XG4gICAgICAgIGluY2x1ZGVBY2tub3dsZWRnZWQ6ICFhcmd2LnVuYWNrbm93bGVkZ2VkLFxuICAgICAgICBzaG93VG90YWw6IGFyZ3YudW5hY2tub3dsZWRnZWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZERpc3BsYXlOb3RpY2VzICYmIGNtZCAhPT0gJ3ZlcnNpb24nKSB7XG4gICAgICBhd2FpdCB0cmFwRXJyb3JzKGlvSGVscGVyLCAnQ291bGQgbm90IGRpc3BsYXkgbm90aWNlcycsICgpID0+IG5vdGljZXMuZGlzcGxheSgpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBtYWluKGNvbW1hbmQ6IHN0cmluZywgYXJnczogYW55KTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7XG4gICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSBjb21tYW5kIGFzIGFueTtcbiAgICBjb25zdCB0b29sa2l0U3RhY2tOYW1lOiBzdHJpbmcgPSBUb29sa2l0SW5mby5kZXRlcm1pbmVOYW1lKGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndG9vbGtpdFN0YWNrTmFtZSddKSk7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmRlYnVnKGBUb29sa2l0IHN0YWNrOiAke2NoYWxrLmJvbGQodG9vbGtpdFN0YWNrTmFtZSl9YCk7XG5cbiAgICBjb25zdCBjbG91ZEZvcm1hdGlvbiA9IG5ldyBEZXBsb3ltZW50cyh7XG4gICAgICBzZGtQcm92aWRlcixcbiAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICBpb0hlbHBlcjogYXNJb0hlbHBlcihpb0hvc3QsIGlvSG9zdC5jdXJyZW50QWN0aW9uIGFzIGFueSksXG4gICAgfSk7XG5cbiAgICBpZiAoYXJncy5hbGwgJiYgYXJncy5TVEFDS1MpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1N0YWNrc09yQWxsUmVxdWlyZWQnLCAnWW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBsaXN0IG9mIFN0YWNrcyBvciB0aGUgYC0tYWxsYCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIGFyZ3MuU1RBQ0tTID0gYXJncy5TVEFDS1MgPz8gKGFyZ3MuU1RBQ0sgPyBbYXJncy5TVEFDS10gOiBbXSk7XG4gICAgYXJncy5FTlZJUk9OTUVOVFMgPSBhcmdzLkVOVklST05NRU5UUyA/PyBbXTtcblxuICAgIGNvbnN0IGNsaSA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGlvSG9zdCxcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICBkZXBsb3ltZW50czogY2xvdWRGb3JtYXRpb24sXG4gICAgICB2ZXJib3NlOiBhcmd2LnRyYWNlIHx8IGFyZ3YudmVyYm9zZSA+IDAsXG4gICAgICBpZ25vcmVFcnJvcnM6IGFyZ3ZbJ2lnbm9yZS1lcnJvcnMnXSxcbiAgICAgIHN0cmljdDogYXJndi5zdHJpY3QsXG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXIsXG4gICAgfSk7XG5cbiAgICBpb0hvc3QudGVsZW1ldHJ5Py5tYXJrT3BlcmF0aW9uU3RhcnQoKTtcblxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2NvbnRleHQnO1xuICAgICAgICByZXR1cm4gY29udGV4dCh7XG4gICAgICAgICAgaW9IZWxwZXIsXG4gICAgICAgICAgY29udGV4dDogY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgICAgICAgIHNvdXJjZUZpbGVzOiBjb25maWd1cmF0aW9uLmNvbnRleHRTb3VyY2VGaWxlcyxcbiAgICAgICAgICBjbGVhcjogYXJndi5jbGVhcixcbiAgICAgICAgICBqc29uOiBhcmd2Lmpzb24sXG4gICAgICAgICAgZm9yY2U6IGFyZ3YuZm9yY2UsXG4gICAgICAgICAgcmVzZXQ6IGFyZ3YucmVzZXQsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkb2NzJzpcbiAgICAgIGNhc2UgJ2RvYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RvY3MnO1xuICAgICAgICByZXR1cm4gZG9jcyh7XG4gICAgICAgICAgaW9IZWxwZXIsXG4gICAgICAgICAgYnJvd3NlcjogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydicm93c2VyJ10pLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZG9jdG9yJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZG9jdG9yJztcbiAgICAgICAgcmV0dXJuIGRvY3Rvcih7XG4gICAgICAgICAgaW9IZWxwZXIsXG4gICAgICAgICAgc2V0dGluZ3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MsXG4gICAgICAgICAgYWdlbnQ6IHByb3h5QWdlbnQsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdsc3AnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdsc3AnO1xuICAgICAgICByZXR1cm4gbHNwKHsgZmVhdHVyZXM6IGFyZ3YuZmVhdHVyZXMgfSk7XG5cbiAgICAgIGNhc2UgJ2xzJzpcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdsaXN0JztcbiAgICAgICAgcmV0dXJuIGNsaS5saXN0KGFyZ3MuU1RBQ0tTLCB7XG4gICAgICAgICAgbG9uZzogYXJncy5sb25nLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgICBzaG93RGVwczogYXJncy5zaG93RGVwZW5kZW5jaWVzLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZGlmZic6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RpZmYnO1xuICAgICAgICBjb25zdCBlbmFibGVEaWZmTm9GYWlsID0gaXNGZWF0dXJlRW5hYmxlZChjb25maWd1cmF0aW9uLCBjeGFwaS5FTkFCTEVfRElGRl9OT19GQUlMX0NPTlRFWFQpO1xuICAgICAgICBjb25zdCBkaWZmTWV0aG9kID0gZGV0ZXJtaW5lRGlmZk1ldGhvZChhcmdzKTtcbiAgICAgICAgaWYgKGRpZmZNZXRob2QgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3MsICctLW1ldGhvZD10ZW1wbGF0ZScsIHtcbiAgICAgICAgICAgIGNoYW5nZVNldE5hbWU6ICctLWNoYW5nZS1zZXQtbmFtZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsaS5kaWZmKHtcbiAgICAgICAgICBzdGFja05hbWVzOiBhcmdzLlNUQUNLUyxcbiAgICAgICAgICBleGNsdXNpdmVseTogYXJncy5leGNsdXNpdmVseSxcbiAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IGFyZ3MudGVtcGxhdGUsXG4gICAgICAgICAgc3RyaWN0OiBhcmdzLnN0cmljdCxcbiAgICAgICAgICBjb250ZXh0TGluZXM6IGFyZ3MuY29udGV4dExpbmVzLFxuICAgICAgICAgIHNlY3VyaXR5T25seTogYXJncy5zZWN1cml0eU9ubHksXG4gICAgICAgICAgZmFpbDogYXJncy5mYWlsICE9IG51bGwgPyBhcmdzLmZhaWwgOiAhZW5hYmxlRGlmZk5vRmFpbCxcbiAgICAgICAgICBjb21wYXJlQWdhaW5zdFByb2Nlc3NlZFRlbXBsYXRlOiBhcmdzLnByb2Nlc3NlZCxcbiAgICAgICAgICBxdWlldDogYXJncy5xdWlldCxcbiAgICAgICAgICBtZXRob2Q6IGRpZmZNZXRob2QsXG4gICAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6IGFyZ3MuaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXMsXG4gICAgICAgICAgaW5jbHVkZU1vdmVzOiBhcmdzWydpbmNsdWRlLW1vdmVzJ10sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkcmlmdCc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RyaWZ0JztcbiAgICAgICAgcmV0dXJuIGNsaS5kcmlmdCh7XG4gICAgICAgICAgc2VsZWN0b3I6IHNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShhcmdzLlNUQUNLUyksXG4gICAgICAgICAgZmFpbDogYXJncy5mYWlsLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncmVmYWN0b3InOlxuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3JlZmFjdG9yJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncmVmYWN0b3InO1xuICAgICAgICByZXR1cm4gY2xpLnJlZmFjdG9yKHtcbiAgICAgICAgICBkcnlSdW46IGFyZ3MuZHJ5UnVuLFxuICAgICAgICAgIG92ZXJyaWRlRmlsZTogYXJncy5vdmVycmlkZUZpbGUsXG4gICAgICAgICAgcmV2ZXJ0OiBhcmdzLnJldmVydCxcbiAgICAgICAgICBzdGFja3M6IHNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShhcmdzLlNUQUNLUyksXG4gICAgICAgICAgYWRkaXRpb25hbFN0YWNrTmFtZXM6IGFycmF5RnJvbVlhcmdzKGFyZ3MuYWRkaXRpb25hbFN0YWNrTmFtZSA/PyBbXSksXG4gICAgICAgICAgZm9yY2U6IGFyZ3MuZm9yY2UgPz8gZmFsc2UsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnYm9vdHN0cmFwJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnYm9vdHN0cmFwJztcbiAgICAgICAgY29uc3Qgc291cmNlOiBCb290c3RyYXBTb3VyY2UgPSBhd2FpdCBkZXRlcm1pbmVCb290c3RyYXBWZXJzaW9uKGlvSG9zdCwgYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3Muc2hvd1RlbXBsYXRlKSB7XG4gICAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVyID0gbmV3IEJvb3RzdHJhcHBlcihzb3VyY2UsIGFzSW9IZWxwZXIoaW9Ib3N0LCBpb0hvc3QuY3VycmVudEFjdGlvbikpO1xuICAgICAgICAgIHJldHVybiBib290c3RyYXBwZXIuc2hvd1RlbXBsYXRlKGFyZ3MuanNvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xpLmJvb3RzdHJhcChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICByb2xlQXJuOiBhcmdzLnJvbGVBcm4sXG4gICAgICAgICAgZm9yY2VEZXBsb3ltZW50OiBhcmd2LmZvcmNlLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWU6IHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgZXhlY3V0ZTogYXJncy5leGVjdXRlLFxuICAgICAgICAgIHRhZ3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndGFncyddKSxcbiAgICAgICAgICB0ZXJtaW5hdGlvblByb3RlY3Rpb246IGFyZ3MudGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogYXJnc1sncHJldmlvdXMtcGFyYW1ldGVycyddLFxuICAgICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiBhcmdzLmltcG9ydEV4aXN0aW5nUmVzb3VyY2VzLFxuICAgICAgICAgIGV4cHJlc3M6IGFyZ3MuZXhwcmVzcyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBidWNrZXROYW1lOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAnYnVja2V0TmFtZSddKSxcbiAgICAgICAgICAgIGttc0tleUlkOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3Rvb2xraXRCdWNrZXQnLCAna21zS2V5SWQnXSksXG4gICAgICAgICAgICBjcmVhdGVDdXN0b21lck1hc3RlcktleTogYXJncy5ib290c3RyYXBDdXN0b21lcktleSxcbiAgICAgICAgICAgIHF1YWxpZmllcjogYXJncy5xdWFsaWZpZXIgPz8gY29uZmlndXJhdGlvbi5jb250ZXh0LmdldCgnQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXInKSxcbiAgICAgICAgICAgIHB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjogYXJncy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBleGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeTogYXJndi5leGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIGN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk6IGFyZ3YuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSxcbiAgICAgICAgICAgIHRydXN0ZWRBY2NvdW50czogYXJyYXlGcm9tWWFyZ3MoYXJncy50cnVzdCksXG4gICAgICAgICAgICB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IGFycmF5RnJvbVlhcmdzKGFyZ3MudHJ1c3RGb3JMb29rdXApLFxuICAgICAgICAgICAgdW50cnVzdGVkQWNjb3VudHM6IGFycmF5RnJvbVlhcmdzKGFyZ3MudW50cnVzdCksXG4gICAgICAgICAgICBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBhcnJheUZyb21ZYXJncyhhcmdzLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMpLFxuICAgICAgICAgICAgZGVueUV4dGVybmFsSWQ6IGFyZ3MuZGVueUV4dGVybmFsSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2RlcGxveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2RlcGxveSc7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlck1hcDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgYXJncy5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IChwYXJhbWV0ZXIgYXMgc3RyaW5nKS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgcGFyYW1ldGVyTWFwW2tleVZhbHVlWzBdXSA9IGtleVZhbHVlLnNsaWNlKDEpLmpvaW4oJz0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5leGVjdXRlICE9PSB1bmRlZmluZWQgJiYgYXJncy5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0NvbmZsaWN0aW5nRXhlY3V0ZUFuZE1ldGhvZCcsICdDYW4gbm90IHN1cHBseSBib3RoIC0tW25vLV1leGVjdXRlIGFuZCAtLW1ldGhvZCBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xpLmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgIC4uLmV4cGFuZFVwKG11c3RNYXRjaChleHBsaWNpdE9yRGVmYXVsdFN0YWNrcyhhcmdzLlNUQUNLUywgYXJncy5hbGwpKSwgYXJncy5leGNsdXNpdmVseSksXG4gICAgICAgICAgICBmYWlsT25FbXB0eTogIWFyZ3MuaWdub3JlTm9TdGFja3MsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zOiBhcmdzLm5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3JlcXVpcmVBcHByb3ZhbCddKSxcbiAgICAgICAgICByZXVzZUFzc2V0czogYXJnc1snYnVpbGQtZXhjbHVkZSddLFxuICAgICAgICAgIHRhZ3M6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndGFncyddKSxcbiAgICAgICAgICBkZXBsb3ltZW50TWV0aG9kOiBkZXRlcm1pbmVEZXBsb3ltZW50TWV0aG9kKGFyZ3MsIGNvbmZpZ3VyYXRpb24pLFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlck1hcCxcbiAgICAgICAgICB1c2VQcmV2aW91c1BhcmFtZXRlcnM6IGFyZ3NbJ3ByZXZpb3VzLXBhcmFtZXRlcnMnXSxcbiAgICAgICAgICBvdXRwdXRzRmlsZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydvdXRwdXRzRmlsZSddKSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICBjaTogYXJncy5jaSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICB3YXRjaDogYXJncy53YXRjaCxcbiAgICAgICAgICB0cmFjZUxvZ3M6IGFyZ3MubG9ncyxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICBhc3NldFBhcmFsbGVsaXNtOiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Fzc2V0UGFyYWxsZWxpc20nXSksXG4gICAgICAgICAgYXNzZXRCdWlsZENvbmN1cnJlbmN5OiBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2Fzc2V0QnVpbGRDb25jdXJyZW5jeSddKSxcbiAgICAgICAgICBhc3NldEJ1aWxkVGltZTogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydhc3NldFByZWJ1aWxkJ10pXG4gICAgICAgICAgICA/IEFzc2V0QnVpbGRUaW1lLkFMTF9CRUZPUkVfREVQTE9ZXG4gICAgICAgICAgICA6IEFzc2V0QnVpbGRUaW1lLkpVU1RfSU5fVElNRSxcbiAgICAgICAgICBleHByZXNzOiBhcmdzLmV4cHJlc3MsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICd2YWxpZGF0ZSc6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAndmFsaWRhdGUnKTtcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAndmFsaWRhdGUnO1xuICAgICAgICBjb25maWd1cmF0aW9uLmNvbnRleHQuc2V0KCdAYXdzLWNkay9jb3JlOmZhaWxTeW50aE9uVmFsaWRhdGlvbkVycm9ycycsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGNsaS52YWxpZGF0ZSh7XG4gICAgICAgICAgc3RhY2tzOiBzcGVjaWZpY1N0YWNrc09yQWxsUmVjdXJzaXZlbHkoYXJncy5TVEFDS1MpLFxuICAgICAgICAgIG9ubGluZTogYXJncy5vbmxpbmUsXG4gICAgICAgICAgd2F0Y2g6IGFyZ3Mud2F0Y2gsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdkaWFnbm9zZSc6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZGlhZ25vc2UnKTtcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZGlhZ25vc2UnO1xuXG4gICAgICAgIHJldHVybiBjbGkuZGlhZ25vc2Uoe1xuICAgICAgICAgIHN0YWNrczogc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KGFyZ3MuU1RBQ0tTKSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lOiBhcmdzLnRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ3JvbGxiYWNrJztcbiAgICAgICAgcmV0dXJuIGNsaS5yb2xsYmFjayh7XG4gICAgICAgICAgc2VsZWN0b3I6IG11c3RNYXRjaChleHBsaWNpdE9yRGVmYXVsdFN0YWNrcyhhcmdzLlNUQUNLUywgYXJncy5hbGwpKSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbjogYXJnc1sndmFsaWRhdGUtYm9vdHN0cmFwLXZlcnNpb24nXSxcbiAgICAgICAgICBvcnBoYW5Mb2dpY2FsSWRzOiBhcmdzLm9ycGhhbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3B1Ymxpc2gtYXNzZXRzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAncHVibGlzaC1hc3NldHMnO1xuICAgICAgICBjbGlSZXF1aXJlVW5zdGFibGUoY29uZmlndXJhdGlvbiwgJ3B1Ymxpc2gtYXNzZXRzJyk7XG5cbiAgICAgICAgcmV0dXJuIGNsaS5wdWJsaXNoQXNzZXRzKHtcbiAgICAgICAgICBzdGFja3M6IHtcbiAgICAgICAgICAgIC4uLnNwZWNpZmljU3RhY2tzT3JBbGxSZWN1cnNpdmVseShhcmdzLlNUQUNLUyksXG4gICAgICAgICAgICBleHBhbmQ6IGFyZ3MuZXhjbHVzaXZlbHkgPyBFeHBhbmRTdGFja1NlbGVjdGlvbi5OT05FIDogRXhwYW5kU3RhY2tTZWxlY3Rpb24uVVBTVFJFQU0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ29ycGhhbic6XG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnb3JwaGFuJyk7XG5cbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnb3JwaGFuJztcbiAgICAgICAgcmV0dXJuIGNsaS5vcnBoYW4oe1xuICAgICAgICAgIGNvbnN0cnVjdFBhdGg6IGFyZ3MuUEFUSFMgPz8gW10sXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbXBvcnQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbXBvcnQnO1xuICAgICAgICByZXR1cm4gY2xpLmltcG9ydCh7XG4gICAgICAgICAgc2VsZWN0b3I6IG11c3RNYXRjaChleHBsaWNpdE9yRGVmYXVsdFN0YWNrcyhhcmdzLlNUQUNLUywgYXJncy5hbGwpKSxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zOiBhcmdzLm5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDoge1xuICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICBleGVjdXRlOiBhcmdzLmV4ZWN1dGUsXG4gICAgICAgICAgICBjaGFuZ2VTZXROYW1lOiBhcmdzLmNoYW5nZVNldE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICByZWNvcmRSZXNvdXJjZU1hcHBpbmc6IGFyZ3NbJ3JlY29yZC1yZXNvdXJjZS1tYXBwaW5nJ10sXG4gICAgICAgICAgcmVzb3VyY2VNYXBwaW5nRmlsZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZyddLFxuICAgICAgICAgIHJlc291cmNlTWFwcGluZ0lubGluZTogYXJnc1sncmVzb3VyY2UtbWFwcGluZy1pbmxpbmUnXSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3dhdGNoJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnd2F0Y2gnO1xuICAgICAgICBhd2FpdCBjbGkud2F0Y2goe1xuICAgICAgICAgIHNlbGVjdG9yOiBleHBhbmRVcChtdXN0TWF0Y2goZXhwbGljaXRPckRlZmF1bHRTdGFja3MoYXJncy5TVEFDS1MsIGFyZ3MuYWxsKSksIGFyZ3MuZXhjbHVzaXZlbHkpLFxuICAgICAgICAgIHRvb2xraXRTdGFja05hbWUsXG4gICAgICAgICAgcm9sZUFybjogYXJncy5yb2xlQXJuLFxuICAgICAgICAgIHJldXNlQXNzZXRzOiBhcmdzWydidWlsZC1leGNsdWRlJ10sXG4gICAgICAgICAgZGVwbG95bWVudE1ldGhvZDogZGV0ZXJtaW5lRGVwbG95bWVudE1ldGhvZChhcmdzLCBjb25maWd1cmF0aW9uLCB0cnVlKSxcbiAgICAgICAgICBmb3JjZTogYXJncy5mb3JjZSxcbiAgICAgICAgICBwcm9ncmVzczogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydwcm9ncmVzcyddKSxcbiAgICAgICAgICByb2xsYmFjazogY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWydyb2xsYmFjayddKSxcbiAgICAgICAgICB0cmFjZUxvZ3M6IGFyZ3MubG9ncyxcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnZGVzdHJveSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2Rlc3Ryb3knO1xuICAgICAgICByZXR1cm4gY2xpLmRlc3Ryb3koe1xuICAgICAgICAgIC8vIE5vIGBtdXN0TWF0Y2goKWAgaGVyZTogYGNkayBkZXN0cm95YCBoaXN0b3JpY2FsbHkgdHJlYXRzIHBhdHRlcm5zXG4gICAgICAgICAgLy8gdGhhdCBtYXRjaCBub3RoaW5nIGFzIFwibm90aGluZyB0byBkb1wiICh0aGUgZGVzdHJveSBhY3Rpb24gd2FybnMpLlxuICAgICAgICAgIHNlbGVjdG9yOiBleHBhbmREb3duKGV4cGxpY2l0T3JEZWZhdWx0U3RhY2tzKGFyZ3MuU1RBQ0tTLCBhcmdzLmFsbCksIGFyZ3MuZXhjbHVzaXZlbHkpLFxuICAgICAgICAgIGZvcmNlOiBhcmdzLmZvcmNlLFxuICAgICAgICAgIHJvbGVBcm46IGFyZ3Mucm9sZUFybixcbiAgICAgICAgICBjb25jdXJyZW5jeTogYXJncy5jb25jdXJyZW5jeSxcbiAgICAgICAgICBleHByZXNzOiBhcmdzLmV4cHJlc3MsXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdnYyc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2djJztcbiAgICAgICAgY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb24sICdnYycpO1xuICAgICAgICBpZiAoYXJncy5ib290c3RyYXBTdGFja05hbWUpIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignLS1ib290c3RyYXAtc3RhY2stbmFtZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBnYyBpcyBHQS4gVXNlIC0tdG9vbGtpdC1zdGFjay1uYW1lLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJvbGVBcm4gaXMgZGVmaW5lZCBmb3Igd2hlbiBjbG91ZGZvcm1hdGlvbiBpcyBpbnZva2VkXG4gICAgICAgIC8vIFRoaXMgY29uZmxpY3RzIHdpdGggZGlyZWN0IHNkayBjYWxscyBleGlzdGluZyBpbiB0aGUgZ2MgY29tbWFuZCB0byBzMyBhbmQgZWNyXG4gICAgICAgIGlmIChhcmdzLnJvbGVBcm4pIHtcbiAgICAgICAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMud2FybignVGhlIC0tcm9sZS1hcm4gb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBnYyBjb21tYW5kIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsaS5nYXJiYWdlQ29sbGVjdChhcmdzLkVOVklST05NRU5UUywge1xuICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgdHlwZTogYXJncy50eXBlLFxuICAgICAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogYXJnc1sncm9sbGJhY2stYnVmZmVyLWRheXMnXSxcbiAgICAgICAgICBjcmVhdGVkQnVmZmVyRGF5czogYXJnc1snY3JlYXRlZC1idWZmZXItZGF5cyddLFxuICAgICAgICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogYXJncy50b29sa2l0U3RhY2tOYW1lID8/IGFyZ3MuYm9vdHN0cmFwU3RhY2tOYW1lLFxuICAgICAgICAgIGNvbmZpcm06IGFyZ3MuY29uZmlybSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZsYWdzJzpcbiAgICAgICAgaW9Ib3N0LmN1cnJlbnRBY3Rpb24gPSAnZmxhZ3MnO1xuXG4gICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnZmxhZ3MnKTtcblxuICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IFRvb2xraXQoe1xuICAgICAgICAgIGlvSG9zdCxcbiAgICAgICAgICB0b29sa2l0U3RhY2tOYW1lLFxuICAgICAgICAgIHVuc3RhYmxlRmVhdHVyZXM6IGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndW5zdGFibGUnXSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmbGFnc0RhdGEgPSBhd2FpdCB0b29sa2l0LmZsYWdzKGNsb3VkRXhlY3V0YWJsZSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgRmxhZ0NvbW1hbmRIYW5kbGVyKGZsYWdzRGF0YSwgaW9IZWxwZXIsIGFyZ3MsIHRvb2xraXQsIGNvbmZpZ3VyYXRpb24uY29udGV4dC5hbGwpO1xuICAgICAgICByZXR1cm4gaGFuZGxlci5wcm9jZXNzRmxhZ3NDb21tYW5kKCk7XG5cbiAgICAgIGNhc2UgJ3N5bnRoZXNpemUnOlxuICAgICAgY2FzZSAnc3ludGgnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdzeW50aCc7XG4gICAgICAgIGlmIChhcmdzLndhdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIGNsaS5zeW50aFdhdGNoKHtcbiAgICAgICAgICAgIHN0YWNrczogc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KGFyZ3MuU1RBQ0tTKSxcbiAgICAgICAgICAgIHZhbGlkYXRlU3RhY2tzOiBhcmdzLnZhbGlkYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVpZXQgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ3F1aWV0J10pID8/IGFyZ3MucXVpZXQ7XG4gICAgICAgIHJldHVybiBjbGkuc3ludGgoe1xuICAgICAgICAgIHN0YWNrTmFtZXM6IGFyZ3MuU1RBQ0tTLFxuICAgICAgICAgIC8vIEhpc3RvcmljIHF1aXJrOiBgY2RrIHN5bnRoYCBhbHdheXMgc2VsZWN0cyBleGNsdXNpdmVseSwgd2hldGhlciBvciBub3QgYC0tZXhjbHVzaXZlbHlgIHdhcyBnaXZlblxuICAgICAgICAgIGV4Y2x1c2l2ZWx5OiB0cnVlLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIGF1dG9WYWxpZGF0ZTogYXJncy52YWxpZGF0aW9uLFxuICAgICAgICAgIGpzb246IGFyZ3YuanNvbixcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ25vdGljZXMnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgZXhwbGljaXRseSBhc2tzIGZvciBub3RpY2VzLCB0aGV5IGFyZSBub3cgdGhlIHByaW1hcnkgb3V0cHV0XG4gICAgICAgIC8vIG9mIHRoZSBjb21tYW5kIGFuZCB0aGV5IHNob3VsZCBnbyB0byBzdGRvdXQuXG4gICAgICAgIGlvSG9zdC5ub3RpY2VzRGVzdGluYXRpb24gPSAnc3Rkb3V0JztcblxuICAgICAgICAvLyBUaGlzIGlzIGEgdmFsaWQgY29tbWFuZCwgYnV0IHdlJ3JlIHBvc3Rwb25pbmcgaXRzIGV4ZWN1dGlvbiBiZWNhdXNlIGRpc3BsYXlpbmdcbiAgICAgICAgLy8gbm90aWNlcyBhdXRvbWF0aWNhbGx5IGhhcHBlbnMgYWZ0ZXIgZXZlcnkgY29tbWFuZC5cbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ21ldGFkYXRhJztcbiAgICAgICAgcmV0dXJuIGNsaS5tZXRhZGF0YShhcmdzLlNUQUNLLCBhcmd2Lmpzb24pO1xuXG4gICAgICBjYXNlICdhY2tub3dsZWRnZSc6XG4gICAgICBjYXNlICdhY2snOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdub3RpY2VzJztcbiAgICAgICAgcmV0dXJuIGNsaS5hY2tub3dsZWRnZShhcmdzLklEKTtcblxuICAgICAgY2FzZSAnY2xpLXRlbGVtZXRyeSc6XG4gICAgICAgIGlvSG9zdC5jdXJyZW50QWN0aW9uID0gJ2NsaS10ZWxlbWV0cnknO1xuICAgICAgICBpZiAoYXJncy5lbmFibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLmRpc2FibGUgPT09IHVuZGVmaW5lZCAmJiBhcmdzLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVGVsZW1ldHJ5QXJnUmVxdWlyZWQnLCAnTXVzdCBzcGVjaWZ5IFxcJy0tZW5hYmxlXFwnLCBcXCctLWRpc2FibGVcXCcsIG9yIFxcJy0tc3RhdHVzXFwnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5zdGF0dXMpIHtcbiAgICAgICAgICByZXR1cm4gY2xpLmNsaVRlbGVtZXRyeVN0YXR1cyhhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlbmFibGUgPSBhcmdzLmVuYWJsZSA/PyAhYXJncy5kaXNhYmxlO1xuICAgICAgICAgIHJldHVybiBjbGkuY2xpVGVsZW1ldHJ5KGVuYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2luaXQnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdpbml0JztcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2xhbmd1YWdlJ10pO1xuICAgICAgICBpZiAoYXJncy5saXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHByaW50QXZhaWxhYmxlVGVtcGxhdGVzKGlvSGVscGVyLCBsYW5ndWFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gR2F0ZSBjdXN0b20gdGVtcGxhdGUgc3VwcG9ydCB3aXRoIHVuc3RhYmxlIGZsYWdcbiAgICAgICAgICBpZiAoYXJnc1snZnJvbS1wYXRoJ10pIHtcbiAgICAgICAgICAgIGNsaVJlcXVpcmVVbnN0YWJsZShjb25maWd1cmF0aW9uLCAnaW5pdCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjbGlJbml0KHtcbiAgICAgICAgICAgIGlvSGVscGVyLFxuICAgICAgICAgICAgdHlwZTogYXJncy5URU1QTEFURSxcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgY2FuVXNlTmV0d29yazogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ2VuZXJhdGVPbmx5OiBhcmdzLmdlbmVyYXRlT25seSxcbiAgICAgICAgICAgIGxpYlZlcnNpb246IGFyZ3MubGliVmVyc2lvbixcbiAgICAgICAgICAgIGZyb21QYXRoOiBhcmdzWydmcm9tLXBhdGgnXSxcbiAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogYXJnc1sndGVtcGxhdGUtcGF0aCddLFxuICAgICAgICAgICAgcGFja2FnZU1hbmFnZXI6IGFyZ3NbJ3BhY2thZ2UtbWFuYWdlciddLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IGFyZ3MucHJvamVjdE5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21pZ3JhdGUnOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICdtaWdyYXRlJztcbiAgICAgICAgcmV0dXJuIGNsaS5taWdyYXRlKHtcbiAgICAgICAgICBzdGFja05hbWU6IGFyZ3NbJ3N0YWNrLW5hbWUnXSxcbiAgICAgICAgICBmcm9tUGF0aDogYXJnc1snZnJvbS1wYXRoJ10sXG4gICAgICAgICAgZnJvbVN0YWNrOiBhcmdzWydmcm9tLXN0YWNrJ10sXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFyZ3MubGFuZ3VhZ2UsXG4gICAgICAgICAgb3V0cHV0UGF0aDogYXJnc1snb3V0cHV0LXBhdGgnXSxcbiAgICAgICAgICBmcm9tU2NhbjogZ2V0TWlncmF0ZVNjYW5UeXBlKGFyZ3NbJ2Zyb20tc2NhbiddKSxcbiAgICAgICAgICBmaWx0ZXI6IGFyZ3MuZmlsdGVyLFxuICAgICAgICAgIGFjY291bnQ6IGFyZ3MuYWNjb3VudCxcbiAgICAgICAgICByZWdpb246IGFyZ3MucmVnaW9uLFxuICAgICAgICAgIGNvbXByZXNzOiBhcmdzLmNvbXByZXNzLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICBpb0hvc3QuY3VycmVudEFjdGlvbiA9ICd2ZXJzaW9uJztcbiAgICAgICAgcmV0dXJuIGlvSG9zdC5kZWZhdWx0cy5yZXN1bHQodmVyc2lvbldpdGhCdWlsZCgpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignVW5rbm93bkNvbW1hbmQnLCAnVW5rbm93biBjb21tYW5kOiAnICsgY29tbWFuZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSBsb2cgbGV2ZWwgdGhlIENMSSBzaG91bGQgcnVuIGF0LlxuICpcbiAqIGAtLXZlcmJvc2VgIGRlY2lkZXMgaXQgd2hlbmV2ZXIgaXQgaXMgZ2l2ZW4uIE90aGVyd2lzZSBhIGZsYWcgdGhhdCBuZWVkcyBhIGNlcnRhaW5cbiAqIGxldmVsIHRvIGJlIHVzZWZ1bCBtYXkgcmFpc2UgaXQsIGJ1dCBuZXZlciBwYXN0IHdoYXQgYC0tdmVyYm9zZWAgd291bGQgaGF2ZSBhc2tlZFxuICogZm9yLCBzbyBubyBmbGFnIGNhbiBtYWtlIHRoZSBvdXRwdXQgcXVpZXRlciB0aGFuIGFub3RoZXIgb25lIHdhbnRlZC5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lSW9NZXNzYWdlTGV2ZWwoYXJndjogeyB2ZXJib3NlPzogbnVtYmVyOyBkZWJ1Z0NsaT86IGJvb2xlYW4gfSk6IElvTWVzc2FnZUxldmVsIHtcbiAgLy8gb25lIC12IGxvZ3MgYXQgREVCVUcsIHR3byBvciBtb3JlIGF0IFRSQUNFXG4gIGlmIChhcmd2LnZlcmJvc2UpIHtcbiAgICByZXR1cm4gYXJndi52ZXJib3NlID09PSAxID8gJ2RlYnVnJyA6ICd0cmFjZSc7XG4gIH1cblxuICAvLyBgLS1kZWJ1Zy1jbGlgIG5lZWRzIERFQlVHLCBvdGhlcndpc2UgaXRzIGhhbmRsZSByZXBvcnQgaXMgZmlsdGVyZWQgb3V0IGFuZCB0aGVcbiAgLy8gZmxhZyBoYXMgbm8gdmlzaWJsZSBlZmZlY3QuXG4gIHJldHVybiBhcmd2LmRlYnVnQ2xpID8gJ2RlYnVnJyA6ICdpbmZvJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hpY2ggdmVyc2lvbiBvZiBib290c3RyYXBwaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVybWluZUJvb3RzdHJhcFZlcnNpb24oaW9Ib3N0OiBDbGlJb0hvc3QsIGFyZ3M6IHsgdGVtcGxhdGU/OiBzdHJpbmcgfSk6IFByb21pc2U8Qm9vdHN0cmFwU291cmNlPiB7XG4gIGxldCBzb3VyY2U6IEJvb3RzdHJhcFNvdXJjZTtcbiAgaWYgKGFyZ3MudGVtcGxhdGUpIHtcbiAgICBhd2FpdCBpb0hvc3QuZGVmYXVsdHMuaW5mbyhgVXNpbmcgYm9vdHN0cmFwcGluZyB0ZW1wbGF0ZSBmcm9tICR7YXJncy50ZW1wbGF0ZX1gKTtcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2N1c3RvbScsIHRlbXBsYXRlRmlsZTogYXJncy50ZW1wbGF0ZSB9O1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LkNES19MRUdBQ1lfQk9PVFNUUkFQKSB7XG4gICAgYXdhaXQgaW9Ib3N0LmRlZmF1bHRzLmluZm8oJ0NES19MRUdBQ1lfQk9PVFNUUkFQIHNldCwgdXNpbmcgbGVnYWN5LXN0eWxlIGJvb3RzdHJhcHBpbmcnKTtcbiAgICBzb3VyY2UgPSB7IHNvdXJjZTogJ2xlZ2FjeScgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpbiBWMiwgdGhlIFwibmV3XCIgYm9vdHN0cmFwcGluZyBpcyB0aGUgZGVmYXVsdFxuICAgIHNvdXJjZSA9IHsgc291cmNlOiAnZGVmYXVsdCcgfTtcbiAgfVxuICByZXR1cm4gc291cmNlO1xufVxuXG5mdW5jdGlvbiBpc0ZlYXR1cmVFbmFibGVkKGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sIGZlYXR1cmVGbGFnOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvbmZpZ3VyYXRpb24uY29udGV4dC5nZXQoZmVhdHVyZUZsYWcpID8/IGN4YXBpLmZ1dHVyZUZsYWdEZWZhdWx0KGZlYXR1cmVGbGFnKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHRvb2xraXQtbGliIFN0YWNrU2VsZWN0b3IgZnJvbSBhIGdpdmVuIHNldCBvZiBzdGFjayBjb25zdHJ1Y3QgcGF0aCBwYXR0ZXJuc1xuICpcbiAqIElmIG5vIHBhdHRlcm5zIGFyZSBnaXZlbiwgYWxsIHN0YWNrcyBpbiB0aGUgYXNzZW1ibHkgYW5kIGFsbCBvZiBpdHMgc3RhZ2VzIGFyZSBzZWxlY3RlZC5cbiAqL1xuZnVuY3Rpb24gc3BlY2lmaWNTdGFja3NPckFsbFJlY3Vyc2l2ZWx5KHBhdHRlcm5zOiBzdHJpbmdbXSk6IFN0YWNrU2VsZWN0b3Ige1xuICByZXR1cm4ge1xuICAgIHN0cmF0ZWd5OiBwYXR0ZXJucy5sZW5ndGggPiAwID8gU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5QQVRURVJOX01BVENIIDogU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5BTExfU1RBQ0tTLFxuICAgIHBhdHRlcm5zLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgdG9vbGtpdC1saWIgU3RhY2tTZWxlY3RvciBmb3IgdGhlIGRlcGxveS1saWtlIGNvbW1hbmRzIChkZXBsb3ksIHdhdGNoLCByb2xsYmFjaywgaW1wb3J0LCBkZXN0cm95KVxuICpcbiAqIFNlbGVjdHMgdGhlIHN0YWNrcyB0aGUgdXNlciBleHBsaWNpdGx5IGFza2VkIGZvciDigJQgbWF0Y2hpbmcgcGF0dGVybnMsIG9yIGFsbFxuICogdG9wLWxldmVsIHN0YWNrcyB3aXRoIGAtLWFsbGAg4oCUIGFuZCBkZWZhdWx0cyB0byB0aGUgYXBwJ3Mgc2luZ2xlIHRvcC1sZXZlbFxuICogc3RhY2sgd2hlbiBubyBhcmd1bWVudHMgYXJlIGdpdmVuIChmYWlsaW5nIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUpLlxuICogVW5saWtlIGBzcGVjaWZpY1N0YWNrc09yQWxsUmVjdXJzaXZlbHlgLCB0aGlzIG5ldmVyIGZhbGxzIGJhY2sgdG8gYWxsXG4gKiBzdGFja3MuIFRoZSBzZWxlY3Rpb24gaXMgZXhhY3Q7IGNvbWJpbmUgd2l0aCBgZXhwYW5kVXAoKWAgb3IgYGV4cGFuZERvd24oKWBcbiAqIHRvIGluY2x1ZGUgZGVwZW5kZW5jeSBzdGFja3MuXG4gKi9cbmZ1bmN0aW9uIGV4cGxpY2l0T3JEZWZhdWx0U3RhY2tzKHBhdHRlcm5zOiBzdHJpbmdbXSwgYWxsOiBib29sZWFuIHwgdW5kZWZpbmVkKTogU3RhY2tTZWxlY3RvciB7XG4gIHJldHVybiB7XG4gICAgcGF0dGVybnMsXG4gICAgc3RyYXRlZ3k6IGFsbFxuICAgICAgPyBTdGFja1NlbGVjdGlvblN0cmF0ZWd5Lk1BSU5fQVNTRU1CTFlcbiAgICAgIDogcGF0dGVybnMubGVuZ3RoID4gMFxuICAgICAgICA/IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuUEFUVEVSTl9NQVRDSFxuICAgICAgICA6IFN0YWNrU2VsZWN0aW9uU3RyYXRlZ3kuT05MWV9TSU5HTEUsXG4gIH07XG59XG5cbi8qKlxuICogRXh0ZW5kIHRoZSBzZWxlY3Rpb24gd2l0aCB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIG9mIHRoZSBzZWxlY3RlZCBzdGFja3MsIHVubGVzcyBgLS1leGNsdXNpdmVseWAgd2FzIGdpdmVuXG4gKi9cbmZ1bmN0aW9uIGV4cGFuZFVwKHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yLCBleGNsdXNpdmVseT86IGJvb2xlYW4pOiBTdGFja1NlbGVjdG9yIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RvcixcbiAgICBleHBhbmQ6IGV4Y2x1c2l2ZWx5ID8gRXhwYW5kU3RhY2tTZWxlY3Rpb24uTk9ORSA6IEV4cGFuZFN0YWNrU2VsZWN0aW9uLlVQU1RSRUFNLFxuICB9O1xufVxuXG4vKipcbiAqIEV4dGVuZCB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIGRvd25zdHJlYW0gZGVwZW5kZW50cyBvZiB0aGUgc2VsZWN0ZWQgc3RhY2tzLCB1bmxlc3MgYC0tZXhjbHVzaXZlbHlgIHdhcyBnaXZlblxuICovXG5mdW5jdGlvbiBleHBhbmREb3duKHNlbGVjdG9yOiBTdGFja1NlbGVjdG9yLCBleGNsdXNpdmVseT86IGJvb2xlYW4pOiBTdGFja1NlbGVjdG9yIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RvcixcbiAgICBleHBhbmQ6IGV4Y2x1c2l2ZWx5ID8gRXhwYW5kU3RhY2tTZWxlY3Rpb24uTk9ORSA6IEV4cGFuZFN0YWNrU2VsZWN0aW9uLkRPV05TVFJFQU0sXG4gIH07XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHhzLmZpbHRlcigoeCkgPT4geCAhPT0gJycpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGRpZmYgbWV0aG9kIGZyb20gQ0xJIGFyZ3MuXG4gKiAtLW1ldGhvZCB0YWtlcyBwcmVjZWRlbmNlLCB0aGVuIGRlcHJlY2F0ZWQgLS1jaGFuZ2Utc2V0LCB0aGVuIC0tdGVtcGxhdGUgaW1wbGllcyB0ZW1wbGF0ZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lRGlmZk1ldGhvZChhcmdzOiBhbnkpOiAnY2hhbmdlLXNldCcgfCAndGVtcGxhdGUnIHwgJ2F1dG8nIHtcbiAgaWYgKGFyZ3MubWV0aG9kICYmIGFyZ3MubWV0aG9kICE9PSAnYXV0bycpIHtcbiAgICByZXR1cm4gYXJncy5tZXRob2Q7XG4gIH1cblxuICAvLyBEZXByZWNhdGVkIC0tbm8tY2hhbmdlLXNldCBtYXBzIHRvIHRlbXBsYXRlXG4gIGlmIChhcmdzWydjaGFuZ2Utc2V0J10gPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICd0ZW1wbGF0ZSc7XG4gIH1cblxuICAvLyAtLXRlbXBsYXRlIGltcGxpZXMgdGVtcGxhdGVcbiAgaWYgKGFyZ3MudGVtcGxhdGUpIHtcbiAgICByZXR1cm4gJ3RlbXBsYXRlJztcbiAgfVxuXG4gIHJldHVybiAnYXV0byc7XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZURlcGxveW1lbnRNZXRob2QoYXJnczogYW55LCBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLCB3YXRjaD86IGJvb2xlYW4pOiBEZXBsb3ltZW50TWV0aG9kIHtcbiAgbGV0IGRlcGxveW1lbnRNZXRob2Q6IENoYW5nZVNldERlcGxveW1lbnQgfCBEaXJlY3REZXBsb3ltZW50IHwgdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubWV0aG9kKSB7XG4gICAgY2FzZSAnZXhlY3V0ZS1jaGFuZ2Utc2V0JzpcbiAgICAgIGlmICghYXJncy5TVEFDS1MgfHwgYXJncy5TVEFDS1MubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0V4YWN0bHlPbmVTdGFjaycsICctLW1ldGhvZD1leGVjdXRlLWNoYW5nZS1zZXQgcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RhY2snKTtcbiAgICAgIH1cbiAgICAgIGlmICh3YXRjaCB8fCBhcmdzLndhdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1dhdGNoV2l0aEV4ZWN1dGVDaGFuZ2VTZXQnLCAnLS1tZXRob2Q9ZXhlY3V0ZS1jaGFuZ2Utc2V0IGNhbm5vdCBiZSB1c2VkIHdpdGggd2F0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJlamVjdEluY29tcGF0aWJsZU9wdGlvbnMoYXJncywgJy0tbWV0aG9kPWV4ZWN1dGUtY2hhbmdlLXNldCcsIHtcbiAgICAgICAgZm9yY2U6ICctLWZvcmNlJyxcbiAgICAgICAgcGFyYW1ldGVyczogJy0tcGFyYW1ldGVycycsXG4gICAgICAgIGltcG9ydEV4aXN0aW5nUmVzb3VyY2VzOiAnLS1pbXBvcnQtZXhpc3RpbmctcmVzb3VyY2VzJyxcbiAgICAgICAgcmV2ZXJ0RHJpZnQ6ICctLXJldmVydC1kcmlmdCcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ2V4ZWN1dGUtY2hhbmdlLXNldCcsXG4gICAgICAgIGNoYW5nZVNldE5hbWU6IGFyZ3MuY2hhbmdlU2V0TmFtZSA/PyAnY2RrLWRlcGxveS1jaGFuZ2Utc2V0JyxcbiAgICAgIH07XG4gICAgY2FzZSAnZGlyZWN0JzpcbiAgICAgIHJlamVjdEluY29tcGF0aWJsZU9wdGlvbnMoYXJncywgJy0tbWV0aG9kPWRpcmVjdCcsIHtcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogJy0tY2hhbmdlLXNldC1uYW1lJyxcbiAgICAgICAgaW1wb3J0RXhpc3RpbmdSZXNvdXJjZXM6ICctLWltcG9ydC1leGlzdGluZy1yZXNvdXJjZXMnLFxuICAgICAgICByZXZlcnREcmlmdDogJy0tcmV2ZXJ0LWRyaWZ0JyxcbiAgICAgIH0pO1xuICAgICAgZGVwbG95bWVudE1ldGhvZCA9IHsgbWV0aG9kOiAnZGlyZWN0JyB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2hhbmdlLXNldCc6XG4gICAgICBkZXBsb3ltZW50TWV0aG9kID0ge1xuICAgICAgICBtZXRob2Q6ICdjaGFuZ2Utc2V0JyxcbiAgICAgICAgZXhlY3V0ZTogdHJ1ZSxcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYXJncy5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICAgICAgcmV2ZXJ0RHJpZnQ6IGFyZ3MucmV2ZXJ0RHJpZnQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncHJlcGFyZS1jaGFuZ2Utc2V0JzpcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICBleGVjdXRlOiBmYWxzZSxcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYXJncy5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICAgICAgcmV2ZXJ0RHJpZnQ6IGFyZ3MucmV2ZXJ0RHJpZnQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICBleGVjdXRlOiB3YXRjaCA/IHRydWUgOiBhcmdzLmV4ZWN1dGUgPz8gdHJ1ZSxcbiAgICAgICAgY2hhbmdlU2V0TmFtZTogYXJncy5jaGFuZ2VTZXROYW1lLFxuICAgICAgICBpbXBvcnRFeGlzdGluZ1Jlc291cmNlczogYXJncy5pbXBvcnRFeGlzdGluZ1Jlc291cmNlcyxcbiAgICAgICAgcmV2ZXJ0RHJpZnQ6IGFyZ3MucmV2ZXJ0RHJpZnQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBob3Rzd2FwTW9kZSA9IGRldGVybWluZUhvdHN3YXBNb2RlKGFyZ3MuaG90c3dhcCwgYXJncy5ob3Rzd2FwRmFsbGJhY2ssIHdhdGNoKTtcbiAgY29uc3QgaG90c3dhcFByb3BlcnRpZXMgPSBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2hvdHN3YXAnXSkgfHwge307XG4gIHN3aXRjaCAoaG90c3dhcE1vZGUpIHtcbiAgICBjYXNlIEhvdHN3YXBNb2RlLkZBTExfQkFDSzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ2hvdHN3YXAnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBob3Rzd2FwUHJvcGVydGllcyxcbiAgICAgICAgZmFsbGJhY2s6IGRlcGxveW1lbnRNZXRob2QsXG4gICAgICB9O1xuICAgIGNhc2UgSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAnaG90c3dhcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IGhvdHN3YXBQcm9wZXJ0aWVzLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgIGNhc2UgSG90c3dhcE1vZGUuRlVMTF9ERVBMT1lNRU5UOlxuICAgICAgcmV0dXJuIGRlcGxveW1lbnRNZXRob2Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xpUmVxdWlyZVVuc3RhYmxlKGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sIGZlYXR1cmU6IHN0cmluZykge1xuICBpZiAoIWNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsndW5zdGFibGUnXSkuaW5jbHVkZXMoZmVhdHVyZSkpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBVbnN0YWJsZSR7dWNmaXJzdChmZWF0dXJlKX1gLCBgVW5zdGFibGUgZmVhdHVyZSB1c2U6IFxcJyR7ZmVhdHVyZX1cXCcgaXMgdW5zdGFibGUuIEl0IG11c3QgYmUgb3B0ZWQgaW4gdmlhIFxcJy0tdW5zdGFibGVcXCcsIGUuZy4gXFwnY2RrICR7ZmVhdHVyZX0gLS11bnN0YWJsZT0ke2ZlYXR1cmV9XFwnYCk7XG4gIH1cblxuICBmdW5jdGlvbiB1Y2ZpcnN0KHg6IHN0cmluZykge1xuICAgIHJldHVybiB4WzBdLnRvVXBwZXJDYXNlKCkgKyB4LnNsaWNlKDEpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3cgaWYgYW55IG9mIHRoZSBnaXZlbiBmbGFncyBhcmUgc2V0LCBhcyB0aGV5IGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uLlxuICovXG5mdW5jdGlvbiByZWplY3RJbmNvbXBhdGlibGVPcHRpb25zKGFyZ3M6IGFueSwgb3B0aW9uOiBzdHJpbmcsIGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGZvciAoY29uc3QgW2tleSwgZmxhZ10gb2YgT2JqZWN0LmVudHJpZXMoZmxhZ3MpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBhcmdzW2tleV07XG5cbiAgICBsZXQgaXNTZXQgPSBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIHlhcmdzIG1heSBkZWZhdWx0IGFycmF5IG9wdGlvbnMgdG8gW3t9XSwgc28gb25seSBjb3VudCByZWFsIHZhbHVlc1xuICAgICAgaXNTZXQgPSB2YWx1ZS5zb21lKCh2OiB1bmtub3duKSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHYgPT09ICdudW1iZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNTZXQgPSAhIXZhbHVlO1xuICAgIH1cblxuICAgIGlmIChpc1NldCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignSW5jb21wYXRpYmxlT3B0aW9ucycsIGAke2ZsYWd9IGNhbm5vdCBiZSB1c2VkIHdpdGggJHtvcHRpb259YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZUhvdHN3YXBNb2RlKGhvdHN3YXA/OiBib29sZWFuLCBob3Rzd2FwRmFsbGJhY2s/OiBib29sZWFuLCB3YXRjaD86IGJvb2xlYW4pOiBIb3Rzd2FwTW9kZSB7XG4gIGlmIChob3Rzd2FwICYmIGhvdHN3YXBGYWxsYmFjaykge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0NvbmZsaWN0aW5nSG90c3dhcEFyZ3MnLCAnQ2FuIG5vdCBzdXBwbHkgYm90aCAtLWhvdHN3YXAgYW5kIC0taG90c3dhcC1mYWxsYmFjayBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gIH0gZWxzZSBpZiAoIWhvdHN3YXAgJiYgIWhvdHN3YXBGYWxsYmFjaykge1xuICAgIGlmIChob3Rzd2FwID09PSB1bmRlZmluZWQgJiYgaG90c3dhcEZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB3YXRjaCA/IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWSA6IEhvdHN3YXBNb2RlLkZVTExfREVQTE9ZTUVOVDtcbiAgICB9IGVsc2UgaWYgKGhvdHN3YXAgPT09IGZhbHNlIHx8IGhvdHN3YXBGYWxsYmFjayA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlQ7XG4gICAgfVxuICB9XG5cbiAgbGV0IGhvdHN3YXBNb2RlOiBIb3Rzd2FwTW9kZTtcbiAgaWYgKGhvdHN3YXApIHtcbiAgICBob3Rzd2FwTW9kZSA9IEhvdHN3YXBNb2RlLkhPVFNXQVBfT05MWTtcbiAgICAvKiBpZiAoaG90c3dhcEZhbGxiYWNrKSovXG4gIH0gZWxzZSB7XG4gICAgaG90c3dhcE1vZGUgPSBIb3Rzd2FwTW9kZS5GQUxMX0JBQ0s7XG4gIH1cblxuICByZXR1cm4gaG90c3dhcE1vZGU7XG59XG5cbi8qIGM4IGlnbm9yZSBzdGFydCAqLyAvLyB3ZSBuZXZlciBjYWxsIHRoaXMgaW4gdW5pdCB0ZXN0c1xuZXhwb3J0IGZ1bmN0aW9uIGNsaShhcmdzOiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKSkge1xuICBsZXQgZXJyb3I6IEVycm9yRGV0YWlscyB8IHVuZGVmaW5lZDtcbiAgZXhlYyhhcmdzKVxuICAgIC50aGVuKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgIC8vIFRoZSB1c2VyIGRlY2xpbmVkIGEgY29uZmlybWF0aW9uLiBUaGlzIGlzIGFuIGV4cGVjdGVkIG91dGNvbWUsIG5vdCBhIGNyYXNoLCBzbyBwcmVzZW50IGl0IHNvZnRseS9cbiAgICAgIC8vIFdlIHN0aWxsIGV4aXQgbm9uLXplcm8gc28gdGhlIG9wZXJhdGlvbiBpcyByZXBvcnRlZCBhcyBub3QgY29tcGxldGVkLlxuICAgICAgY29uc3Qgc29mdCA9IEFib3J0RXJyb3IuaXNBYm9ydEVycm9yKGVycik7XG5cbiAgICAgIC8vIExvZyB0aGUgc3RhY2sgdHJhY2UgaWYgd2UncmUgb24gYSBkZXZlbG9wZXIgd29ya3N0YXRpb24uIE90aGVyd2lzZSB0aGlzIHdpbGwgYmUgaW50byBhIG1pbmlmaWVkXG4gICAgICAvLyBmaWxlIGFuZCB0aGUgcHJpbnRlZCBjb2RlIGxpbmUgYW5kIHN0YWNrIHRyYWNlIGFyZSBodWdlIGFuZCB1c2VsZXNzLlxuICAgICAgY29uc3QgZGVidWcgPSBpc0RldmVsb3BlckJ1aWxkVmVyc2lvbigpO1xuXG4gICAgICBwcmV0dHlQcmludEVycm9yKGVyciwgeyBkZWJ1Zywgc29mdCB9KTtcbiAgICAgIGVycm9yID0ge1xuICAgICAgICBuYW1lOiBjZGtDbGlFcnJvck5hbWUoZXJyKSxcbiAgICAgIH07XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICB9KVxuICAgIC5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IENsaUlvSG9zdC5nZXQoKT8udGVsZW1ldHJ5Py5lbmQoZXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGF3YWl0IENsaUlvSG9zdC5nZXQoKT8uYXNJb0hlbHBlcigpLmRlZmF1bHRzLnRyYWNlKGBFbmRpbmcgVGVsZW1ldHJ5IGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIExhc3QgdGhpbmcgd2UgZG8sIG9uIGJvdGggdGhlIHN1Y2Nlc3MgYW5kIHRoZSBmYWlsdXJlIHBhdGguIEFybXMgYW4gYHVucmVmYCdkXG4gICAgICAvLyB0aW1lciByYXRoZXIgdGhhbiBwcmludGluZyBub3csIHNvIG9uIGEgY2xlYW4gZXhpdCB0aGUgcHJvY2VzcyBpcyBnb25lIGJlZm9yZSBpdFxuICAgICAgLy8gZmlyZXMgYW5kIG5vdGhpbmcgaXMgcmVwb3J0ZWQuIElmIGl0IGRvZXMgZmlyZSwgc29tZXRoaW5nIGlzIHN0aWxsIGhvbGRpbmcgdGhlXG4gICAgICAvLyBldmVudCBsb29wIG9wZW4sIGFuZCBhbGwgb2YgdGhlIENMSSdzIG93biB3b3JrIGlzIGFscmVhZHkgZG9uZSBieSB0aGVuLlxuICAgICAgY29uc3QgaW9IZWxwZXIgPSBDbGlJb0hvc3QuZ2V0KCk/LmFzSW9IZWxwZXIoKTtcbiAgICAgIGlmIChpb0hlbHBlcikge1xuICAgICAgICBoYW5kbGVUcmFja2VyPy5zY2hlZHVsZVJlcG9ydChpb0hlbHBlcik7XG4gICAgICB9XG4gICAgfSk7XG59XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xuIl19