@workflow/builders 5.0.0-beta.19 → 5.0.0-beta.20

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.
@@ -232,6 +232,24 @@ export declare abstract class BaseBuilder {
232
232
  * emit one.
233
233
  */
234
234
  protected getDiagnosticsManifestPath(): string | undefined;
235
+ /**
236
+ * Whether this is a development/watch build (e.g. `next dev`, `nitro dev`,
237
+ * or a Vite-based dev server for astro/sveltekit/vite). `config.watch` is
238
+ * plumbed by the builders that own a dev server (next, nitro, nest); the
239
+ * Vite-based integrations don't set it but run with
240
+ * `NODE_ENV === 'development'`. When neither signal is present we treat the
241
+ * build as production, so CLI/Vercel production builds default to off.
242
+ */
243
+ protected get isDevelopmentBuild(): boolean;
244
+ /**
245
+ * Default source map mode for the stack-relevant bundles (steps + the
246
+ * intermediate workflow VM bundle): inline source maps in development so
247
+ * stack traces point at source files, and off in production so function
248
+ * bundles stay small (helps stay under the Vercel 250MB function limit) and
249
+ * skip the source-map-support runtime shim. The `sourcemap` config option
250
+ * and `WORKFLOW_SOURCEMAP` env var override this in either environment.
251
+ */
252
+ protected get defaultSourcemapMode(): SourcemapMode;
235
253
  /**
236
254
  * Resolve the effective source map mode for a given call site. Precedence:
237
255
  * explicit `sourcemap` config > `WORKFLOW_SOURCEMAP` env var > the call
@@ -242,7 +260,9 @@ export declare abstract class BaseBuilder {
242
260
  /**
243
261
  * Whether the resolved source map mode emits any source maps at all.
244
262
  * Used by consumers like the Vercel builder to decide whether to include
245
- * the source-map-support runtime shim in generated functions.
263
+ * the source-map-support runtime shim in generated functions. Uses the same
264
+ * environment-aware default (`defaultSourcemapMode`) as the step/workflow
265
+ * bundles, so a production build with no override omits the shim.
246
266
  */
247
267
  protected get sourcemapsEnabled(): boolean;
248
268
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"base-builder.d.ts","sourceRoot":"","sources":["../src/base-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-builder.d.ts","sourceRoot":"","sources":["../src/base-builder.ts"],"names":[],"mappings":"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"}
@@ -641,11 +641,14 @@ export class BaseBuilder {
641
641
  '.mjs',
642
642
  '.cjs',
643
643
  ],
644
- // Inline source maps for better stack traces in step execution.
645
- // Steps execute in Node.js context and inline sourcemaps ensure we get
646
- // meaningful stack traces with proper file names and line numbers when errors
647
- // occur in deeply nested function calls across multiple files.
648
- sourcemap: this.resolveSourcemap('inline'),
644
+ // Source maps for better stack traces in step execution. Steps execute
645
+ // in Node.js context and inline sourcemaps give meaningful stack traces
646
+ // with proper file names and line numbers when errors occur in deeply
647
+ // nested function calls across multiple files. Defaults to inline in
648
+ // development and off in production (see `defaultSourcemapMode`) to keep
649
+ // production function bundles small; override with the `sourcemap`
650
+ // config option or the `WORKFLOW_SOURCEMAP` env var.
651
+ sourcemap: this.resolveSourcemap(this.defaultSourcemapMode),
649
652
  plugins: [
650
653
  // Handle pseudo-packages like 'server-only' and 'client-only' by providing
651
654
  // empty modules. Must run first to intercept these before other resolution.
@@ -796,10 +799,15 @@ export class BaseBuilder {
796
799
  banner: {
797
800
  js: 'globalThis.__private_workflows = new Map();',
798
801
  },
799
- // Inline source maps for better stack traces in workflow VM execution.
800
- // This intermediate bundle is executed via runInContext() in a VM, so we need
801
- // inline source maps to get meaningful stack traces instead of "evalmachine.<anonymous>".
802
- sourcemap: this.resolveSourcemap('inline'),
802
+ // Source maps for better stack traces in workflow VM execution. This
803
+ // intermediate bundle is executed via runInContext() in a VM, so inline
804
+ // source maps give meaningful stack traces instead of
805
+ // "evalmachine.<anonymous>". Defaults to inline in development and off in
806
+ // production (see `defaultSourcemapMode`) to keep production function
807
+ // bundles small; override with the `sourcemap` config option or the
808
+ // `WORKFLOW_SOURCEMAP` env var. The runtime remaps stacks only when a
809
+ // map is present, so disabling maps degrades gracefully.
810
+ sourcemap: this.resolveSourcemap(this.defaultSourcemapMode),
803
811
  // Use tsconfig for path alias resolution.
804
812
  // For symlinked configs this uses tsconfigRaw to preserve cwd-relative aliases.
805
813
  ...esbuildTsconfigOptions,
@@ -1420,6 +1428,28 @@ export const OPTIONS = handler;`;
1420
1428
  return this.resolvePath('.vercel/output/diagnostics/workflows-manifest.json');
1421
1429
  }
1422
1430
  }
1431
+ /**
1432
+ * Whether this is a development/watch build (e.g. `next dev`, `nitro dev`,
1433
+ * or a Vite-based dev server for astro/sveltekit/vite). `config.watch` is
1434
+ * plumbed by the builders that own a dev server (next, nitro, nest); the
1435
+ * Vite-based integrations don't set it but run with
1436
+ * `NODE_ENV === 'development'`. When neither signal is present we treat the
1437
+ * build as production, so CLI/Vercel production builds default to off.
1438
+ */
1439
+ get isDevelopmentBuild() {
1440
+ return this.config.watch === true || process.env.NODE_ENV === 'development';
1441
+ }
1442
+ /**
1443
+ * Default source map mode for the stack-relevant bundles (steps + the
1444
+ * intermediate workflow VM bundle): inline source maps in development so
1445
+ * stack traces point at source files, and off in production so function
1446
+ * bundles stay small (helps stay under the Vercel 250MB function limit) and
1447
+ * skip the source-map-support runtime shim. The `sourcemap` config option
1448
+ * and `WORKFLOW_SOURCEMAP` env var override this in either environment.
1449
+ */
1450
+ get defaultSourcemapMode() {
1451
+ return this.isDevelopmentBuild ? 'inline' : false;
1452
+ }
1423
1453
  /**
1424
1454
  * Resolve the effective source map mode for a given call site. Precedence:
1425
1455
  * explicit `sourcemap` config > `WORKFLOW_SOURCEMAP` env var > the call
@@ -1437,10 +1467,12 @@ export const OPTIONS = handler;`;
1437
1467
  /**
1438
1468
  * Whether the resolved source map mode emits any source maps at all.
1439
1469
  * Used by consumers like the Vercel builder to decide whether to include
1440
- * the source-map-support runtime shim in generated functions.
1470
+ * the source-map-support runtime shim in generated functions. Uses the same
1471
+ * environment-aware default (`defaultSourcemapMode`) as the step/workflow
1472
+ * bundles, so a production build with no override omits the shim.
1441
1473
  */
1442
1474
  get sourcemapsEnabled() {
1443
- return this.resolveSourcemap(true) !== false;
1475
+ return this.resolveSourcemap(this.defaultSourcemapMode) !== false;
1444
1476
  }
1445
1477
  /**
1446
1478
  * Creates a manifest JSON file containing step/workflow/class metadata
@@ -1532,4 +1564,4 @@ export const OPTIONS = handler;`;
1532
1564
  return result;
1533
1565
  }
1534
1566
  }
1535
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jhc2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyx1QkFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFDTCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLG1CQUFtQixH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UUFDdkUsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUU1QixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCByZWFscGF0aCwgcmVuYW1lLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IFdvcmtmbG93QnVpbGRFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgZW5oYW5jZWRSZXNvbHZlT3JpZ2luYWwgZnJvbSAnZW5oYW5jZWQtcmVzb2x2ZSc7XG5pbXBvcnQgKiBhcyBlc2J1aWxkIGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHsgZmluZFVwIH0gZnJvbSAnZmluZC11cCc7XG5pbXBvcnQgeyBnbG9iIH0gZnJvbSAndGlueWdsb2JieSc7XG5pbXBvcnQge1xuICBhcHBseVN3Y1RyYW5zZm9ybSxcbiAgdHlwZSBXb3JrZmxvd01hbmlmZXN0LFxufSBmcm9tICcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnO1xuaW1wb3J0IHsgY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVEaXNjb3ZlckVudHJpZXNQbHVnaW4gfSBmcm9tICcuL2Rpc2NvdmVyLWVudHJpZXMtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgZ2V0RXNidWlsZFRzY29uZmlnT3B0aW9ucyB9IGZyb20gJy4vZXNidWlsZC10c2NvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBnZXRJbXBvcnRQYXRoLFxuICByZXNvbHZlTW9kdWxlU3BlY2lmaWVyLFxuICBzdHJpcFBhY2thZ2VWZXJzaW9uLFxufSBmcm9tICcuL21vZHVsZS1zcGVjaWZpZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlTm9kZU1vZHVsZUVycm9yUGx1Z2luIH0gZnJvbSAnLi9ub2RlLW1vZHVsZS1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVQc2V1ZG9QYWNrYWdlUGx1Z2luIH0gZnJvbSAnLi9wc2V1ZG8tcGFja2FnZS1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTd2NQbHVnaW4gfSBmcm9tICcuL3N3Yy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0gZnJvbSAnLi90cmFuc2Zvcm0tdXRpbHMuanMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VtYXBNb2RlLCBXb3JrZmxvd0NvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFdvcmtmbG93R3JhcGhzIH0gZnJvbSAnLi93b3JrZmxvd3MtZXh0cmFjdG9yLmpzJztcblxuY29uc3QgZW5oYW5jZWRSZXNvbHZlID0gcHJvbWlzaWZ5KGVuaGFuY2VkUmVzb2x2ZU9yaWdpbmFsKTtcbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbi8qKlxuICogTGVnYWN5IG9wdC1pbiBmb3Igc291cmNlIG1hcHMgb24gdGhlIGZpbmFsIHdvcmtmbG93IHdyYXBwZXIgKyB3ZWJob29rXG4gKiBidW5kbGVzICh3aGljaCBkZWZhdWx0IHRvIG9mZiwgdW5saWtlIHRoZSBzdGVwL2ludGVyaW0gd29ya2Zsb3cgYnVuZGxlc1xuICogdGhhdCBkZWZhdWx0IHRvIGlubGluZSkuIFN1cGVyc2VkZWQgYnkgdGhlIGBzb3VyY2VtYXBgIGNvbmZpZyBvcHRpb24gYW5kXG4gKiB0aGUgYFdPUktGTE9XX1NPVVJDRU1BUGAgZW52aXJvbm1lbnQgdmFyaWFibGU7IGtlcHQgZm9yIGJhY2stY29tcGF0LlxuICovXG5jb25zdCBFTUlUX1NPVVJDRU1BUFNfRk9SX0RFQlVHR0lORyA9XG4gIHByb2Nlc3MuZW52LldPUktGTE9XX0VNSVRfU09VUkNFTUFQU19GT1JfREVCVUdHSU5HID09PSAnMSc7XG5cbmNvbnN0IFZBTElEX1NPVVJDRU1BUF9TVFJJTkdTID0gbmV3IFNldChbXG4gICdpbmxpbmUnLFxuICAnbGlua2VkJyxcbiAgJ2V4dGVybmFsJyxcbiAgJ2JvdGgnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgdGhlIHZhbHVlIG9mIHRoZSBgV09SS0ZMT1dfU09VUkNFTUFQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbnRvIGFcbiAqIGBTb3VyY2VtYXBNb2RlYC4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW52IHZhciBpcyB1bnNldCwgZW1wdHksIG9yXG4gKiB1bnJlY29nbml6ZWQgKGEgd2FybmluZyBpcyBlbWl0dGVkIGZvciB1bnJlY29nbml6ZWQgdmFsdWVzKS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VTb3VyY2VtYXBFbnYoXG4gIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFNvdXJjZW1hcE1vZGUgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlICcwJzpcbiAgICBjYXNlICdmYWxzZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnMSc6XG4gICAgY2FzZSAndHJ1ZSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKFZBTElEX1NPVVJDRU1BUF9TVFJJTkdTLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGFzIFNvdXJjZW1hcE1vZGU7XG4gICAgICB9XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBJZ25vcmluZyB1bnJlY29nbml6ZWQgV09SS0ZMT1dfU09VUkNFTUFQPSR7dmFsdWV9LiBgICtcbiAgICAgICAgICBgRXhwZWN0ZWQgb25lIG9mOiB0cnVlLCBmYWxzZSwgMCwgMSwgaW5saW5lLCBsaW5rZWQsIGV4dGVybmFsLCBib3RoLmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFuIGFycmF5IG9mIGZpbGUgcGF0aHMgYnkgYXBwZW5kaW5nIHRoZSBgcmVhbHBhdGgoKWAgb2YgZWFjaCBlbnRyeVxuICogKHRvIGhhbmRsZSBzeW1saW5rcywgZS5nLiBwbnBtL3dvcmtzcGFjZSBsYXlvdXRzKSBhbmQgZGVkdXBsaWNhdGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFJlYWxwYXRocyhlbnRyaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgbmV3IFNldChcbiAgICAgIChcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgZW50cmllcy5tYXAoYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlYWxwYXRoKGVudHJ5KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkID8gW2VudHJ5LCByZXNvbHZlZF0gOiBbZW50cnldO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICkuZmxhdCgpXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBcIndoYXQgbW9kdWxlIGRvZXMgdGhpcyBmaWxlIHJlcHJlc2VudD9cIiBrZXkgdXNlZCB0byBkZWR1cGVcbiAqIHZpcnR1YWwtZW50cnkgaW1wb3J0cy5cbiAqXG4gKiBJZiB0aGUgZmlsZSByZXNvbHZlcyB0byBhIHJlYWwgcGFja2FnZSBzcGVjaWZpZXIgKGB3b3JrZmxvdy9pbnRlcm5hbC9idWlsdGluc2AsXG4gKiBgQGludGVybmFsL2FnZW50L3NlcnZlcmAsIGV0Yy4pLCB3ZSByZXR1cm4gdGhlIGJhcmUgc3BlY2lmaWVyIOKAlCB2ZXJzaW9uXG4gKiBzdHJpcHBlZCDigJQgYmVjYXVzZSBlc2J1aWxkJ3MgcGFja2FnZSByZXNvbHV0aW9uIHdpbGwgY29sbGFwc2UgYWxsXG4gKiBpbXBvcnRlcnMgb2YgdGhhdCBzcGVjaWZpZXIgdG8gdGhlIHNhbWUgcGh5c2ljYWwgbW9kdWxlIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoaWNoIG9uLWRpc2sgY29weSAoc3JjIHZzIGRpc3QpIGFueSBvbmUgaW1wb3J0ZXIgd3JvdGUuXG4gKlxuICogT3RoZXJ3aXNlIHdlIGZhbGwgYmFjayB0byB0aGUgYWJzb2x1dGUgZmlsZSBwYXRoLiBEaXN0aW5jdCBsb2NhbC1hcHBcbiAqIGZpbGVzIGhhdmUgZGlzdGluY3QgcGF0aHMsIHNvIHRoaXMgc3RpbGwgZGVkdXBlcyBhIGZpbGUgYWdhaW5zdCBpdHNlbGZcbiAqIChlLmcuIGlmIGl0IHNob3dzIHVwIGluIGJvdGggYHN0ZXBGaWxlc2AgYW5kIGBzZXJkZU9ubHlGaWxlc2ApIHdpdGhvdXRcbiAqIGNvbmZsYXRpbmcgdW5yZWxhdGVkIGZpbGVzLlxuICovXG5mdW5jdGlvbiBtb2R1bGVJZGVudGl0eUtleShmaWxlOiBzdHJpbmcsIG1vZHVsZVNwZWNpZmllclJvb3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgbW9kdWxlU3BlY2lmaWVyIH0gPSByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGUsIG1vZHVsZVNwZWNpZmllclJvb3QpO1xuICBpZiAobW9kdWxlU3BlY2lmaWVyKSB7XG4gICAgLy8gU3RyaXAgdGhlIFwiQDx2ZXJzaW9uPlwiIHN1ZmZpeCBzbyBzb3VyY2UgYW5kIGRpc3QgY29waWVzIG9mIHRoZSBzYW1lXG4gICAgLy8gZXhwb3J0IGNvbGxhcHNlIHRvIHRoZSBzYW1lIGtleS5cbiAgICByZXR1cm4gc3RyaXBQYWNrYWdlVmVyc2lvbihtb2R1bGVTcGVjaWZpZXIpO1xuICB9XG4gIHJldHVybiBmaWxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNjb3ZlcmVkRW50cmllcyB7XG4gIGRpc2NvdmVyZWRTdGVwczogU2V0PHN0cmluZz47XG4gIGRpc2NvdmVyZWRXb3JrZmxvd3M6IFNldDxzdHJpbmc+O1xuICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogU2V0PHN0cmluZz47XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3Igd29ya2Zsb3cgYnVpbGRlcnMuIFByb3ZpZGVzIGNvbW1vbiBidWlsZCBsb2dpYyBmb3IgdHJhbnNmb3JtaW5nXG4gKiB3b3JrZmxvdyBzb3VyY2UgZmlsZXMgaW50byBkZXBsb3lhYmxlIGJ1bmRsZXMgdXNpbmcgZXNidWlsZCBhbmQgU1dDLlxuICpcbiAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhlIGJ1aWxkKCkgbWV0aG9kIHRvIGRlZmluZSBidWlsZGVyLXNwZWNpZmljIGxvZ2ljLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgY29uZmlnOiBXb3JrZmxvd0NvbmZpZztcblxuICAvKipcbiAgICogVHJhY2tzIHdoaWNoIGV4dGVybmFsIHBhY2thZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIHdhcm5lZCBhYm91dFxuICAgKiB0byBhdm9pZCBkdXBsaWNhdGUgd2FybmluZ3MgYWNyb3NzIG11bHRpcGxlIGRpc2NvdmVyRW50cmllcygpIGNhbGxzLlxuICAgKi9cbiAgcHJpdmF0ZSB3YXJuZWRFeHRlcm5hbFBhY2thZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBXb3JrZmxvd0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2Zvcm1Qcm9qZWN0Um9vdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wcm9qZWN0Um9vdCB8fCB0aGlzLmNvbmZpZy53b3JraW5nRGlyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBtb2R1bGVTcGVjaWZpZXJSb290KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm1vZHVsZVNwZWNpZmllclJvb3QgfHwgdGhpcy50cmFuc2Zvcm1Qcm9qZWN0Um9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGluZm9ybWF0aW9uYWwgQmFzZUJ1aWxkZXIgbG9ncyBzaG91bGQgYmUgcHJpbnRlZC5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBzaWxlbmNlIHByb2dyZXNzIGxvZ3Mgd2hpbGUga2VlcGluZyB3YXJuaW5ncy9lcnJvcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNob3VsZExvZ0Jhc2VCdWlsZGVySW5mbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsb2dCYXNlQnVpbGRlckluZm8oLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdWxkTG9nQmFzZUJ1aWxkZXJJbmZvKSB7XG4gICAgICBjb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvZ0NyZWF0ZVdvcmtmbG93c0J1bmRsZUluZm8oLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zdXBwcmVzc0NyZWF0ZVdvcmtmbG93c0J1bmRsZUxvZ3MpIHtcbiAgICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nQ3JlYXRlV2ViaG9va0J1bmRsZUluZm8oLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zdXBwcmVzc0NyZWF0ZVdlYmhvb2tCdW5kbGVMb2dzKSB7XG4gICAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyguLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvZ0NyZWF0ZU1hbmlmZXN0SW5mbyguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnN1cHByZXNzQ3JlYXRlTWFuaWZlc3RMb2dzKSB7XG4gICAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyguLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBvdXRwdXR0aW5nIENKUywgZXNidWlsZCByZXBsYWNlcyBgaW1wb3J0Lm1ldGFgIHdpdGggYW4gZW1wdHkgb2JqZWN0LFxuICAgKiBtYWtpbmcgYGltcG9ydC5tZXRhLnVybGAgKGFuZCBgaW1wb3J0Lm1ldGEucmVzb2x2ZWApIHVuZGVmaW5lZC4gVGhpcyBtZXRob2RcbiAgICogcmV0dXJucyBiYW5uZXIgY29kZSBhbmQgYGRlZmluZWAgZW50cmllcyB0aGF0IHBvbHlmaWxsIHRoZW0gdXNpbmcgQ0pTXG4gICAqIGVxdWl2YWxlbnRzIChgX19maWxlbmFtZWAsIGByZXF1aXJlLnJlc29sdmVgKSBzbyB1c2VyIGNvZGUgKGUuZy4gUHJpc21hKVxuICAgKiB0aGF0IHJlbGllcyBvbiBgaW1wb3J0Lm1ldGEudXJsYCB3b3JrcyBjb3JyZWN0bHkgaW4gYnVuZGxlZCBDSlMgb3V0cHV0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDanNJbXBvcnRNZXRhUG9seWZpbGwoZm9ybWF0OiBzdHJpbmcpOiB7XG4gICAgYmFubmVyOiBzdHJpbmc7XG4gICAgZGVmaW5lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHtcbiAgICBpZiAoZm9ybWF0ICE9PSAnY2pzJykgcmV0dXJuIHsgYmFubmVyOiAnJywgZGVmaW5lOiB7fSB9O1xuICAgIHJldHVybiB7XG4gICAgICBiYW5uZXI6XG4gICAgICAgICd2YXIgX19pbXBvcnRfbWV0YV91cmwgPSB0eXBlb2YgX19maWxlbmFtZSAhPT0gXCJ1bmRlZmluZWRcIiA/IHJlcXVpcmUoXCJ1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmIDogdW5kZWZpbmVkO1xcbicgK1xuICAgICAgICAndmFyIF9faW1wb3J0X21ldGFfcmVzb2x2ZSA9IHR5cGVvZiByZXF1aXJlICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBfX2ZpbGVuYW1lICE9PSBcInVuZGVmaW5lZFwiICcgK1xuICAgICAgICAnPyAocykgPT4gcmVxdWlyZShcInVybFwiKS5wYXRoVG9GaWxlVVJMKHJlcXVpcmUucmVzb2x2ZShzKSkuaHJlZiA6IHVuZGVmaW5lZDtcXG4nLFxuICAgICAgZGVmaW5lOiB7XG4gICAgICAgICdpbXBvcnQubWV0YS51cmwnOiAnX19pbXBvcnRfbWV0YV91cmwnLFxuICAgICAgICAnaW1wb3J0Lm1ldGEucmVzb2x2ZSc6ICdfX2ltcG9ydF9tZXRhX3Jlc29sdmUnLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gb3V0cHV0dGluZyBmdWxseS1idW5kbGVkIEVTTSwgQ0pTIGRlcGVuZGVuY2llcyB0aGF0IGNhbGwgcmVxdWlyZSgpXG4gICAqIGZvciBOb2RlLmpzIGJ1aWx0aW5zIChlLmcuIGRlYnVnIOKGkiByZXF1aXJlKCd0dHknKSkgYnJlYWsgYmVjYXVzZSBlc2J1aWxkJ3NcbiAgICogQ0pTLXRvLUVTTSBfX3JlcXVpcmUgc2hpbSBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIGEgcmVhbCByZXF1aXJlIGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhbm5lciBwcm92aWRlcyBvbmUgdmlhIGNyZWF0ZVJlcXVpcmUgc28gYnVuZGxlZCBDSlMgY29kZSB3b3JrcyBpbiBFU00uXG4gICAqL1xuICBwcml2YXRlIGdldEVzbVJlcXVpcmVCYW5uZXIoZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChmb3JtYXQgIT09ICdlc20nKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuICdpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIGFzIF9fY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xcbnZhciByZXF1aXJlID0gX19jcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XFxuJztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyB0aGUgY29tcGxldGUgYnVpbGQgcHJvY2VzcyBmb3Igd29ya2Zsb3dzLlxuICAgKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoaXMgdG8gZGVmaW5lIHRoZWlyIHNwZWNpZmljIGJ1aWxkIHN0ZXBzLlxuICAgKi9cbiAgYWJzdHJhY3QgYnVpbGQoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRmluZHMgdHNjb25maWcuanNvbi9qc2NvbmZpZy5qc29uIGZvciB0aGUgcHJvamVjdC5cbiAgICogVXNlZCBieSBlc2J1aWxkIHRvIHByb3Blcmx5IHJlc29sdmUgbW9kdWxlIGltcG9ydHMgZHVyaW5nIGJ1bmRsaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGZpbmRUc0NvbmZpZ1BhdGgoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBjd2QgPSB0aGlzLmNvbmZpZy53b3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgcmV0dXJuIGZpbmRVcChbJ3RzY29uZmlnLmpzb24nLCAnanNjb25maWcuanNvbiddLCB7IGN3ZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb3ZlcnMgYWxsIHNvdXJjZSBmaWxlcyBpbiB0aGUgY29uZmlndXJlZCBkaXJlY3Rvcmllcy5cbiAgICogU2VhcmNoZXMgZm9yIFR5cGVTY3JpcHQgYW5kIEphdmFTY3JpcHQgZmlsZXMgd2hpbGUgZXhjbHVkaW5nIGNvbW1vbiBidWlsZFxuICAgKiBhbmQgZGVwZW5kZW5jeSBkaXJlY3Rvcmllcy5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRJbnB1dEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBpZ25vcmUgPSBbXG4gICAgICAnKiovbm9kZV9tb2R1bGVzLyoqJyxcbiAgICAgICcqKi8uZ2l0LyoqJyxcbiAgICAgICcqKi8ubmV4dC8qKicsXG4gICAgICAnKiovLm5pdHJvLyoqJyxcbiAgICAgICcqKi8ubnV4dC8qKicsXG4gICAgICAnKiovLm91dHB1dC8qKicsXG4gICAgICAnKiovLnZlcmNlbC8qKicsXG4gICAgICAnKiovLndvcmtmbG93LWRhdGEvKionLFxuICAgICAgJyoqLy53b3JrZmxvdy12aXRlc3QvKionLFxuICAgICAgJyoqLy53ZWxsLWtub3duL3dvcmtmbG93LyoqJyxcbiAgICAgICcqKi8uc3djLyoqJyxcbiAgICAgICcqKi8uc3ZlbHRlLWtpdC8qKicsXG4gICAgICAnKiovLnR1cmJvLyoqJyxcbiAgICAgICcqKi8uY2FjaGUvKionLFxuICAgICAgJyoqLy55YXJuLyoqJyxcbiAgICAgICcqKi8ucG5wbS1zdG9yZS8qKicsXG4gICAgXTtcblxuICAgIC8vIFVzZSByZWxhdGl2ZSBwYXR0ZXJucyB3aXRoIGBjd2RgIHBlciBkaXJlY3Rvcnkgc28gdGhhdCBgZG90OiB0cnVlYFxuICAgIC8vIGFwcGxpZXMgY29uc2lzdGVudGx5IHRvIGJvdGggdGhlIHNlYXJjaCBwYXR0ZXJuICphbmQqIHRoZSBpZ25vcmVcbiAgICAvLyBwYXR0ZXJucy4gV2hlbiBhYnNvbHV0ZSBwYXR0ZXJucyBhcmUgdXNlZCB3aXRoIHRpbnlnbG9iYnksIHRoZSBgKipgXG4gICAgLy8gaW4gaWdub3JlIHBhdHRlcm5zIGRvZXMgbm90IG1hdGNoIGRvdC1wcmVmaXhlZCBwYXRoIHNlZ21lbnRzLlxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRoaXMuY29uZmlnLmRpcnMubWFwKChkaXIpID0+IHtcbiAgICAgICAgY29uc3QgY3dkID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBkaXIpO1xuICAgICAgICByZXR1cm4gZ2xvYihbJyoqLyoue3RzLHRzeCxtdHMsY3RzLGpzLGpzeCxtanMsY2pzfSddLCB7XG4gICAgICAgICAgY3dkLFxuICAgICAgICAgIGlnbm9yZSxcbiAgICAgICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdHMuZmxhdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlcyBkaXNjb3ZlcmVkIHdvcmtmbG93IGVudHJpZXMgYnkgaW5wdXQgYXJyYXkgcmVmZXJlbmNlLlxuICAgKiBVc2VzIFdlYWtNYXAgdG8gYWxsb3cgZ2FyYmFnZSBjb2xsZWN0aW9uIHdoZW4gaW5wdXQgYXJyYXlzIGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZC5cbiAgICogVGhpcyBjYWNoZSBpcyBpbnZhbGlkYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGlucHV0cyBhcnJheSByZWZlcmVuY2UgY2hhbmdlc1xuICAgKiAoZS5nLiwgd2hlbiBmaWxlcyBhcmUgYWRkZWQvcmVtb3ZlZCBkdXJpbmcgd2F0Y2ggbW9kZSkuXG4gICAqL1xuICBwcml2YXRlIGRpc2NvdmVyZWRFbnRyaWVzOiBXZWFrTWFwPHN0cmluZ1tdLCBEaXNjb3ZlcmVkRW50cmllcz4gPVxuICAgIG5ldyBXZWFrTWFwKCk7XG5cbiAgLyoqXG4gICAqIFBzZXVkby1wYWNrYWdlcyB0aGF0IHNob3VsZCBub3QgYmUgY2hlY2tlZCBmb3Igd29ya2Zsb3cgcGF0dGVybnMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQU0VVRE9fUEFDS0FHRVMgPSBuZXcgU2V0KFtcbiAgICAnc2VydmVyLW9ubHknLFxuICAgICdjbGllbnQtb25seScsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZWFjaCBwYWNrYWdlIGluIGV4dGVybmFsUGFja2FnZXMgZm9yIHdvcmtmbG93IHBhdHRlcm5zIGFuZCBlbWl0c1xuICAgKiB3YXJuaW5ncyBpZiBhbnkgY29udGFpbiBcInVzZSBzdGVwXCIsIFwidXNlIHdvcmtmbG93XCIgZGlyZWN0aXZlcywgb3JcbiAgICogc2VyaWFsaXphdGlvbiBjbGFzc2VzLiBUaGVzZSBwYXR0ZXJucyB3aWxsIG5vdCBiZSB0cmFuc2Zvcm1lZCBieSB0aGVcbiAgICogd29ya2Zsb3cgY29tcGlsZXIgd2hlbiB0aGUgcGFja2FnZSBpcyBleHRlcm5hbGl6ZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhcm5BYm91dEV4dGVybmFsV29ya2Zsb3dQYWNrYWdlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBleHRlcm5hbFBhY2thZ2VzID0gdGhpcy5jb25maWcuZXh0ZXJuYWxQYWNrYWdlcztcbiAgICBpZiAoIWV4dGVybmFsUGFja2FnZXM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBwa2cgb2YgZXh0ZXJuYWxQYWNrYWdlcykge1xuICAgICAgaWYgKEJhc2VCdWlsZGVyLlBTRVVET19QQUNLQUdFUy5oYXMocGtnKSkgY29udGludWU7XG4gICAgICBpZiAodGhpcy53YXJuZWRFeHRlcm5hbFBhY2thZ2VzLmhhcyhwa2cpKSBjb250aW51ZTtcblxuICAgICAgaWYgKFxuICAgICAgICBwa2cuc3RhcnRzV2l0aCgnLicpIHx8XG4gICAgICAgIHBrZy5zdGFydHNXaXRoKCcvJykgfHxcbiAgICAgICAgcGtnLnN0YXJ0c1dpdGgoJyQnKSB8fFxuICAgICAgICBwa2cuaW5jbHVkZXMoJyonKSB8fFxuICAgICAgICBwa2cuaW5jbHVkZXMoJzonKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBDaGVjayBwYWNrYWdlLmpzb24gZGVwZW5kZW5jaWVzIGZvciBAd29ya2Zsb3cvc2VyZGUgKGZhc3QgcGF0aClcbiAgICAgICAgbGV0IGhhc1dvcmtmbG93U2VyZGVEZXAgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwa2dKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtwa2d9L3BhY2thZ2UuanNvbmAsIHtcbiAgICAgICAgICAgIHBhdGhzOiBbdGhpcy5jb25maWcud29ya2luZ0Rpcl0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcGtnSnNvblNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHBrZ0pzb25QYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBwa2dKc29uID0gSlNPTi5wYXJzZShwa2dKc29uU291cmNlKSBhcyB7XG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM/OiB1bmtub3duO1xuICAgICAgICAgICAgcGVlckRlcGVuZGVuY2llcz86IHVua25vd247XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPVxuICAgICAgICAgICAgdHlwZW9mIHBrZ0pzb24uZGVwZW5kZW5jaWVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgcGtnSnNvbi5kZXBlbmRlbmNpZXMgIT09IG51bGwgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBrZ0pzb24uZGVwZW5kZW5jaWVzKVxuICAgICAgICAgICAgICA/IChwa2dKc29uLmRlcGVuZGVuY2llcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICBjb25zdCBwZWVyRGVwZW5kZW5jaWVzID1cbiAgICAgICAgICAgIHR5cGVvZiBwa2dKc29uLnBlZXJEZXBlbmRlbmNpZXMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBwa2dKc29uLnBlZXJEZXBlbmRlbmNpZXMgIT09IG51bGwgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBrZ0pzb24ucGVlckRlcGVuZGVuY2llcylcbiAgICAgICAgICAgICAgPyAocGtnSnNvbi5wZWVyRGVwZW5kZW5jaWVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAgICAgICA6IHt9O1xuICAgICAgICAgIGhhc1dvcmtmbG93U2VyZGVEZXAgPVxuICAgICAgICAgICAgT2JqZWN0Lmhhc093bihkZXBlbmRlbmNpZXMsICdAd29ya2Zsb3cvc2VyZGUnKSB8fFxuICAgICAgICAgICAgT2JqZWN0Lmhhc093bihwZWVyRGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIHBhY2thZ2UuanNvbiBub3QgcmVzb2x2YWJsZSAtIGNvbnRpbnVlIHRvIHNvdXJjZSBjaGVja1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgc291cmNlIHBhdHRlcm5zICh0aG9yb3VnaCBwYXRoKS5cbiAgICAgICAgLy8gTm90ZTogcmVxdWlyZS5yZXNvbHZlIG9ubHkgaW5zcGVjdHMgdGhlIHBhY2thZ2UncyBtYWluIGVudHJ5IHBvaW50LlxuICAgICAgICAvLyBJZiB3b3JrZmxvdyBjb25zdHJ1Y3RzIGxpdmUgaW4gc3ViLXBhdGhzIChlLmcuIGBteS1wa2cvd29ya2Zsb3dzYCksXG4gICAgICAgIC8vIHRoZXkgd29uJ3QgYmUgZGV0ZWN0ZWQgaGVyZS4gVGhlIEB3b3JrZmxvdy9zZXJkZSBkZXAgY2hlY2sgYWJvdmVcbiAgICAgICAgLy8gcGFydGlhbGx5IGNvdmVycyBzZXJkZSBjYXNlcy4gVGhpcyBpcyBhY2NlcHRhYmxlIGFzIGEgYmVzdC1lZmZvcnRcbiAgICAgICAgLy8gaGV1cmlzdGljIOKAlCB0aGUgcHJpbWFyeSBmaXggaXMgYXV0by1yZW1vdmFsIGluIHdpdGhXb3JrZmxvdygpLlxuICAgICAgICBsZXQgaGFzVXNlU3RlcCA9IGZhbHNlO1xuICAgICAgICBsZXQgaGFzVXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgbGV0IGhhc1NlcmRlID0gaGFzV29ya2Zsb3dTZXJkZURlcDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbnRyeVBhdGggPSByZXF1aXJlLnJlc29sdmUocGtnLCB7XG4gICAgICAgICAgICBwYXRoczogW3RoaXMuY29uZmlnLndvcmtpbmdEaXJdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKGVudHJ5UGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgcGF0dGVybnMgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICAgICAgaGFzVXNlU3RlcCA9IHBhdHRlcm5zLmhhc1VzZVN0ZXA7XG4gICAgICAgICAgaGFzVXNlV29ya2Zsb3cgPSBwYXR0ZXJucy5oYXNVc2VXb3JrZmxvdztcbiAgICAgICAgICBpZiAoIWhhc1NlcmRlKSB7XG4gICAgICAgICAgICBoYXNTZXJkZSA9IHBhdHRlcm5zLmhhc1NlcmRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gRW50cnkgZmlsZSBub3QgcmVzb2x2YWJsZSBvciBub3QgcmVhZGFibGUgLSB1c2Ugd2hhdCB3ZSBoYXZlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc1VzZVN0ZXAgJiYgIWhhc1VzZVdvcmtmbG93ICYmICFoYXNTZXJkZSkgY29udGludWU7XG5cbiAgICAgICAgLy8gQnVpbGQgYSBzcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBmb3VuZFxuICAgICAgICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmIChoYXNVc2VXb3JrZmxvdykgaXNzdWVzLnB1c2goJ1widXNlIHdvcmtmbG93XCIgZnVuY3Rpb25zJyk7XG4gICAgICAgIGlmIChoYXNVc2VTdGVwKSBpc3N1ZXMucHVzaCgnXCJ1c2Ugc3RlcFwiIGZ1bmN0aW9ucycpO1xuICAgICAgICBpZiAoaGFzU2VyZGUpIGlzc3Vlcy5wdXNoKCdzZXJpYWxpemF0aW9uIGNsYXNzZXMnKTtcblxuICAgICAgICB0aGlzLndhcm5lZEV4dGVybmFsUGFja2FnZXMuYWRkKHBrZyk7XG5cbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBcXG4ke2NoYWxrLnllbGxvdygn4pqgJyl9IFdhcm5pbmc6ICR7Y2hhbGsuYm9sZChgXCIke3BrZ31cImApfSBpcyBsaXN0ZWQgaW4gJHtjaGFsay5ib2xkKCdleHRlcm5hbFBhY2thZ2VzJyl9ICgke2NoYWxrLmJvbGQoJ3NlcnZlckV4dGVybmFsUGFja2FnZXMnKX0gaW4gTmV4dC5qcykgYnV0IGNvbnRhaW5zIHdvcmtmbG93IGNvZGUgKCR7aXNzdWVzLmpvaW4oJywgJyl9KS5gICtcbiAgICAgICAgICAgIGBcXG4gIFRoaXMgY29kZSB3aWxsICR7Y2hhbGsuYm9sZCgnbm90Jyl9IGJlIHRyYW5zZm9ybWVkIGJ5IHRoZSB3b3JrZmxvdyBjb21waWxlciwgd2hpY2ggY2FuIGNhdXNlIHJ1bnRpbWUgZmFpbHVyZXMuYCArXG4gICAgICAgICAgICBgXFxuICBSZW1vdmUgJHtjaGFsay5ib2xkKGBcIiR7cGtnfVwiYCl9IGZyb20gJHtjaGFsay5ib2xkKCdleHRlcm5hbFBhY2thZ2VzJyl9ICgke2NoYWxrLmJvbGQoJ3NlcnZlckV4dGVybmFsUGFja2FnZXMnKX0gaW4gTmV4dC5qcykgdG8gZml4IHRoaXMuXFxuYFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEJlc3QtZWZmb3J0OiBpZiBhbnl0aGluZyBnb2VzIHdyb25nLCBza2lwIHRoaXMgcGFja2FnZSBzaWxlbnRseVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBkaXNjb3ZlckVudHJpZXMoXG4gICAgaW5wdXRzOiBzdHJpbmdbXSxcbiAgICBvdXRkaXI6IHN0cmluZyxcbiAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEaXNjb3ZlcmVkRW50cmllcz4ge1xuICAgIGNvbnN0IHByZXZpb3VzUmVzdWx0ID0gdGhpcy5kaXNjb3ZlcmVkRW50cmllcy5nZXQoaW5wdXRzKTtcblxuICAgIGlmIChwcmV2aW91c1Jlc3VsdCkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBzdGF0ZTogRGlzY292ZXJlZEVudHJpZXMgPSB7XG4gICAgICBkaXNjb3ZlcmVkU3RlcHM6IG5ldyBTZXQoKSxcbiAgICAgIGRpc2NvdmVyZWRXb3JrZmxvd3M6IG5ldyBTZXQoKSxcbiAgICAgIGRpc2NvdmVyZWRTZXJkZUZpbGVzOiBuZXcgU2V0KCksXG4gICAgfTtcblxuICAgIGNvbnN0IGRpc2NvdmVyU3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgLy8gUmVzb2x2ZSB0aGUgU0RLIHJ1bnRpbWUgZW50cnkgcG9pbnQgc28gdGhhdCB0aGUgZGlzY292ZXJ5IHBhc3NcbiAgICAvLyB0cmFjZXMgdGhyb3VnaCBpdCBhbmQgZGlzY292ZXJzIHNlcmRlIGNsYXNzZXMgKGxpa2UgYFJ1bmApIHRoYXRcbiAgICAvLyBsaXZlIGluc2lkZSBTREsgcGFja2FnZXMuIFdpdGhvdXQgdGhpcywgZmlsZXMgbGlrZSBgcnVuLmpzYCBhcmVcbiAgICAvLyBvbmx5IGRpc2NvdmVyZWQgd2hlbiB1c2VyIGNvZGUgaGFwcGVucyB0byBpbXBvcnQgdGhlbS5cbiAgICAvLyBUaGlzIGlzIHJlc29sdmVkIGhlcmUgKHJhdGhlciB0aGFuIGluIGNhbGxlcnMpIHNvIHRoYXQgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGlucHV0c2AgYXJyYXkgcmVmZXJlbmNlIGlzIHByZXNlcnZlZCBmb3IgV2Vha01hcCBjYWNoaW5nIOKAlCBjYWxsZXJzXG4gICAgLy8gbGlrZSBjcmVhdGVXb3JrZmxvd3NCdW5kbGUgYW5kIGNyZWF0ZVN0ZXBzQnVuZGxlIGNhbiBzaGFyZSB0aGUgc2FtZVxuICAgIC8vIGNhY2hlIGVudHJ5IHdoZW4gdGhleSBwYXNzIHRoZSBzYW1lIGlucHV0RmlsZXMgYXJyYXkuXG4gICAgY29uc3QgcmVzb2x2ZWRXb3JrZmxvd1J1bnRpbWUgPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoXG4gICAgICBvdXRkaXIsXG4gICAgICAnd29ya2Zsb3cvcnVudGltZSdcbiAgICApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZW50cnlQb2ludHMgPSByZXNvbHZlZFdvcmtmbG93UnVudGltZVxuICAgICAgPyBbLi4uaW5wdXRzLCByZXNvbHZlZFdvcmtmbG93UnVudGltZV1cbiAgICAgIDogaW5wdXRzO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlVHNjb25maWdQYXRoID1cbiAgICAgIHRzY29uZmlnUGF0aCA/PyAoYXdhaXQgdGhpcy5maW5kVHNDb25maWdQYXRoKCkpO1xuICAgIGNvbnN0IGVzYnVpbGRUc2NvbmZpZ09wdGlvbnMgPSBhd2FpdCBnZXRFc2J1aWxkVHNjb25maWdPcHRpb25zKFxuICAgICAgZWZmZWN0aXZlVHNjb25maWdQYXRoXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgICBlbnRyeVBvaW50cyxcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIGNyZWF0ZURpc2NvdmVyRW50cmllc1BsdWdpbihzdGF0ZSwgdGhpcy50cmFuc2Zvcm1Qcm9qZWN0Um9vdCksXG4gICAgICAgIF0sXG4gICAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgICAgb3V0ZGlyLFxuICAgICAgICBidW5kbGU6IHRydWUsXG4gICAgICAgIHNvdXJjZW1hcDogZmFsc2UsXG4gICAgICAgIGFic1dvcmtpbmdEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcbiAgICAgICAgLi4uZXNidWlsZFRzY29uZmlnT3B0aW9ucyxcbiAgICAgICAgLy8gRXh0ZXJuYWwgcGFja2FnZXMgdGhhdCBzaG91bGQgbm90IGJlIGJ1bmRsZWQgZHVyaW5nIGRpc2NvdmVyeVxuICAgICAgICBleHRlcm5hbDogdGhpcy5jb25maWcuZXh0ZXJuYWxQYWNrYWdlcyB8fCBbXSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHt9XG5cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgIGBEaXNjb3ZlcmluZyB3b3JrZmxvdyBkaXJlY3RpdmVzYCxcbiAgICAgIGAke0RhdGUubm93KCkgLSBkaXNjb3ZlclN0YXJ0fW1zYFxuICAgICk7XG5cbiAgICAvLyBXYXJuIGFib3V0IGV4dGVybmFsIHBhY2thZ2VzIHRoYXQgY29udGFpbiB3b3JrZmxvdyBjb2RlXG4gICAgYXdhaXQgdGhpcy53YXJuQWJvdXRFeHRlcm5hbFdvcmtmbG93UGFja2FnZXMoKTtcblxuICAgIHRoaXMuZGlzY292ZXJlZEVudHJpZXMuc2V0KGlucHV0cywgc3RhdGUpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgZGVidWcgaW5mb3JtYXRpb24gdG8gYSBKU09OIGZpbGUgZm9yIHRyb3VibGVzaG9vdGluZyBidWlsZCBpc3N1ZXMuXG4gICAqIFVzZXMgYXRvbWljIHdyaXRlICh0ZW1wIGZpbGUgKyByZW5hbWUpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdoZW5cbiAgICogbXVsdGlwbGUgYnVpbGRzIHJ1biBjb25jdXJyZW50bHkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdyaXRlRGVidWdGaWxlKFxuICAgIG91dGZpbGU6IHN0cmluZyxcbiAgICBkZWJ1Z0RhdGE6IG9iamVjdCxcbiAgICBtZXJnZT86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ID0gdGhpcy5jb25maWcuZGVidWdGaWxlUHJlZml4IHx8ICcnO1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSBgJHtkaXJuYW1lKG91dGZpbGUpfS8ke3ByZWZpeH0ke2Jhc2VuYW1lKG91dGZpbGUpfS5kZWJ1Zy5qc29uYDtcbiAgICBsZXQgZXhpc3RpbmcgPSB7fTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAobWVyZ2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUodGFyZ2V0UGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICBleGlzdGluZyA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QgeWV0IG9yIGlzIGNvcnJ1cHRlZCAtIHN0YXJ0IGZyZXNoLlxuICAgICAgICAgIC8vIERvbid0IGxvZyBlcnJvciBmb3IgRU5PRU5UIChmaWxlIG5vdCBmb3VuZCkgYXMgdGhhdCdzIGV4cGVjdGVkIG9uIGZpcnN0IHJ1bi5cbiAgICAgICAgICBpZiAoKGUgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciByZWFkaW5nIGRlYnVnIGZpbGUsIHN0YXJ0aW5nIGZyZXNoOicsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXJnZWREYXRhID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgICAuLi5kZWJ1Z0RhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIDJcbiAgICAgICk7XG5cbiAgICAgIC8vIFdyaXRlIGF0b21pY2FsbHk6IHdyaXRlIHRvIHRlbXAgZmlsZSwgdGhlbiByZW5hbWUuXG4gICAgICAvLyByZW5hbWUoKSBpcyBhdG9taWMgb24gUE9TSVggc3lzdGVtcyBhbmQgcHJvdmlkZXMgYmVzdC1lZmZvcnQgYXRvbWljaXR5IG9uIFdpbmRvd3MuXG4gICAgICAvLyBQcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgd2hlcmUgY29uY3VycmVudCBidWlsZHMgcmVhZCBwYXJ0aWFsbHktd3JpdHRlbiBmaWxlcy5cbiAgICAgIGNvbnN0IHRlbXBQYXRoID0gYCR7dGFyZ2V0UGF0aH0uJHtyYW5kb21VVUlEKCl9LnRtcGA7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUodGVtcFBhdGgsIG1lcmdlZERhdGEpO1xuICAgICAgYXdhaXQgcmVuYW1lKHRlbXBQYXRoLCB0YXJnZXRQYXRoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gd3JpdGUgZGVidWcgZmlsZTonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYW5kIG9wdGlvbmFsbHkgdGhyb3dzIG9uIGVzYnVpbGQgZXJyb3JzIGFuZCB3YXJuaW5ncy5cbiAgICogQHBhcmFtIHRocm93T25FcnJvciAtIElmIHRydWUsIHRocm93cyBhbiBlcnJvciB3aGVuIGVzYnVpbGQgZXJyb3JzIGFyZSBwcmVzZW50XG4gICAqL1xuICBwcml2YXRlIGxvZ0VzYnVpbGRNZXNzYWdlcyhcbiAgICByZXN1bHQ6IHsgZXJyb3JzPzogYW55W107IHdhcm5pbmdzPzogYW55W10gfSxcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIHRocm93T25FcnJvciA9IHRydWUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHN1cHByZXNzV2FybmluZ3M/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHJlc3VsdC5lcnJvcnMgJiYgcmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGDinYwgZXNidWlsZCBlcnJvcnMgaW4gJHtwaGFzZX06YCk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlcnJvciBvZiByZXN1bHQuZXJyb3JzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgJHtlcnJvci50ZXh0fWApO1xuICAgICAgICBlcnJvck1lc3NhZ2VzLnB1c2goZXJyb3IudGV4dCk7XG4gICAgICAgIGlmIChlcnJvci5sb2NhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gYCAgICBhdCAke2Vycm9yLmxvY2F0aW9uLmZpbGV9OiR7ZXJyb3IubG9jYXRpb24ubGluZX06JHtlcnJvci5sb2NhdGlvbi5jb2x1bW59YDtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGxvY2F0aW9uKTtcbiAgICAgICAgICBlcnJvck1lc3NhZ2VzLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93QnVpbGRFcnJvcihcbiAgICAgICAgICBgQnVpbGQgZmFpbGVkIGR1cmluZyAke3BoYXNlfTpcXG4ke2Vycm9yTWVzc2FnZXMuam9pbignXFxuJyl9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoaW50OiBgUmV2aWV3IHRoZSBlc2J1aWxkIGVycm9ycyBhYm92ZSDigJQgdGhleSBjb21lIGZyb20gdGhlICR7cGhhc2V9IGJ1bmRsZS4gRml4IHRoZSBvZmZlbmRpbmcgc291cmNlIGZpbGVzIGFuZCByZS1ydW4gdGhlIGJ1aWxkLmAsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFvcHRpb25zPy5zdXBwcmVzc1dhcm5pbmdzICYmXG4gICAgICByZXN1bHQud2FybmluZ3MgJiZcbiAgICAgIHJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCEgIGVzYnVpbGQgd2FybmluZ3MgaW4gJHtwaGFzZX06YCk7XG4gICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2YgcmVzdWx0Lndhcm5pbmdzKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgICAke3dhcm5pbmcudGV4dH1gKTtcbiAgICAgICAgaWYgKHdhcm5pbmcubG9jYXRpb24pIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgICAgIGF0ICR7d2FybmluZy5sb2NhdGlvbi5maWxlfToke3dhcm5pbmcubG9jYXRpb24ubGluZX06JHt3YXJuaW5nLmxvY2F0aW9uLmNvbHVtbn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggdG8gYSBub3JtYWxpemVkIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtYW5pZmVzdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UmVsYXRpdmVGaWxlcGF0aChhYnNvbHV0ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBhYnNvbHV0ZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gdGhpcy5jb25maWcud29ya2luZ0Rpci5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKG5vcm1hbGl6ZWRXb3JraW5nRGlyLCBub3JtYWxpemVkRmlsZSkucmVwbGFjZShcbiAgICAgIC9cXFxcL2csXG4gICAgICAnLydcbiAgICApO1xuICAgIC8vIEhhbmRsZSBmaWxlcyBkaXNjb3ZlcmVkIG91dHNpZGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgaWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmVQYXRoXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgIC5qb2luKCcvJyk7XG4gICAgfVxuICAgIHJldHVybiByZWxhdGl2ZVBhdGg7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGJ1bmRsZSBmb3Igd29ya2Zsb3cgc3RlcCBmdW5jdGlvbnMuXG4gICAqIFN0ZXBzIGhhdmUgZnVsbCBOb2RlLmpzIHJ1bnRpbWUgYWNjZXNzIGFuZCBoYW5kbGUgc2lkZSBlZmZlY3RzLCBBUEkgY2FsbHMsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIGV4dGVybmFsaXplTm9uU3RlcHMgLSBJZiB0cnVlLCBvbmx5IGJ1bmRsZXMgc3RlcCBlbnRyeSBwb2ludHMgYW5kIGV4dGVybmFsaXplcyBvdGhlciBjb2RlXG4gICAqIEBwYXJhbSBidW5kbGVUcmFuc2l0aXZlTG9jYWxTdGVwRGVwZW5kZW5jaWVzIC0gSWYgdHJ1ZSwgYWxzbyBidW5kbGVzIHByb2plY3QtbG9jYWwgZmlsZXMgaW1wb3J0ZWQgYnkgc3RlcCBlbnRyaWVzIGZvciBkaXJlY3QgcnVudGltZSBsb2FkaW5nXG4gICAqIEByZXR1cm5zIEJ1aWxkIGNvbnRleHQgKGZvciB3YXRjaCBtb2RlKSBhbmQgdGhlIGNvbGxlY3RlZCB3b3JrZmxvdyBtYW5pZmVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVN0ZXBzQnVuZGxlKHtcbiAgICBpbnB1dEZpbGVzLFxuICAgIGZvcm1hdCA9ICdlc20nLFxuICAgIG91dGZpbGUsXG4gICAgZXh0ZXJuYWxpemVOb25TdGVwcyxcbiAgICBidW5kbGVUcmFuc2l0aXZlTG9jYWxTdGVwRGVwZW5kZW5jaWVzLFxuICAgIHJld3JpdGVUc0V4dGVuc2lvbnMsXG4gICAgdHNjb25maWdQYXRoLFxuICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgIHNraXBFc21SZXF1aXJlQmFubmVyID0gZmFsc2UsXG4gIH06IHtcbiAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gICAgb3V0ZmlsZTogc3RyaW5nO1xuICAgIGZvcm1hdD86ICdjanMnIHwgJ2VzbSc7XG4gICAgZXh0ZXJuYWxpemVOb25TdGVwcz86IGJvb2xlYW47XG4gICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gICAgcmV3cml0ZVRzRXh0ZW5zaW9ucz86IGJvb2xlYW47XG4gICAgZGlzY292ZXJlZEVudHJpZXM/OiBEaXNjb3ZlcmVkRW50cmllcztcbiAgICAvKipcbiAgICAgKiBXaGVuIHRydWUsIHNraXAgdGhlIGBjcmVhdGVSZXF1aXJlYCBiYW5uZXIgb24gdGhlIHN0ZXBzIGJ1bmRsZS5cbiAgICAgKiBVc2VkIGJ5IGBjcmVhdGVDb21iaW5lZEJ1bmRsZWAgd2l0aCBgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWVgIHdoZXJlXG4gICAgICogdGhlIG91dGVyIGVzYnVpbGQgcGFzcyBwcm92aWRlcyBpdHMgb3duIGJhbm5lciwgcHJldmVudGluZyB0aGVcbiAgICAgKiBgX19jcmVhdGVSZXF1aXJlYCBpZGVudGlmaWVyIGZyb20gYmVpbmcgZGVjbGFyZWQgdHdpY2UgYWZ0ZXIgaW5saW5pbmcuXG4gICAgICovXG4gICAgc2tpcEVzbVJlcXVpcmVCYW5uZXI/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx7XG4gICAgY29udGV4dDogZXNidWlsZC5CdWlsZENvbnRleHQgfCB1bmRlZmluZWQ7XG4gICAgbWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3Q7XG4gIH0+IHtcbiAgICBjb25zdCBzdGVwc0J1bmRsZVN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB3b3JrZmxvd01hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0ID0ge307XG4gICAgY29uc3QgYnVpbHRJblN0ZXBzID0gJ3dvcmtmbG93L2ludGVybmFsL2J1aWx0aW5zJztcblxuICAgIGNvbnN0IHJlc29sdmVkQnVpbHRJblN0ZXBzID0gYXdhaXQgZW5oYW5jZWRSZXNvbHZlKFxuICAgICAgZGlybmFtZShvdXRmaWxlKSxcbiAgICAgICd3b3JrZmxvdy9pbnRlcm5hbC9idWlsdGlucydcbiAgICApLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIHRocm93IG5ldyBXb3JrZmxvd0J1aWxkRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmVzb2x2ZSBidWlsdC1pbiBzdGVwcyBzb3VyY2VzLlxcblxcbkNhdXNlZCBieTogJHtTdHJpbmcoZXJyKX1gLFxuICAgICAgICB7XG4gICAgICAgICAgaGludDogJ3J1biBgcG5wbSBpbnN0YWxsIHdvcmtmbG93YCB0byByZXNvbHZlIHRoaXMgaXNzdWUuJyxcbiAgICAgICAgICBjYXVzZTogZXJyLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gRGlzY292ZXJ5IG9mIHdvcmtmbG93L3N0ZXAvc2VyZGUgZW50cmllcy4gVGhlIFNESyBydW50aW1lIGVudHJ5IHBvaW50XG4gICAgLy8gKHdvcmtmbG93L3J1bnRpbWUpIGlzIHJlc29sdmVkIGluc2lkZSBkaXNjb3ZlckVudHJpZXMoKSBpdHNlbGYgc28gdGhhdFxuICAgIC8vIGNhbGxlcnMgY2FuIHBhc3MgdGhlIG9yaWdpbmFsIGlucHV0RmlsZXMgcmVmZXJlbmNlIGFuZCBiZW5lZml0IGZyb21cbiAgICAvLyBXZWFrTWFwIGNhY2hpbmcgYWNyb3NzIGNyZWF0ZVdvcmtmbG93c0J1bmRsZSAvIGNyZWF0ZVN0ZXBzQnVuZGxlIGNhbGxzLlxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPVxuICAgICAgZGlzY292ZXJlZEVudHJpZXMgPz9cbiAgICAgIChhd2FpdCB0aGlzLmRpc2NvdmVyRW50cmllcyhpbnB1dEZpbGVzLCBkaXJuYW1lKG91dGZpbGUpLCB0c2NvbmZpZ1BhdGgpKTtcbiAgICBjb25zdCBzdGVwRmlsZXMgPSBbLi4uZGlzY292ZXJlZC5kaXNjb3ZlcmVkU3RlcHNdLnNvcnQoKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGVzID0gWy4uLmRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93c10uc29ydCgpO1xuICAgIGNvbnN0IHNlcmRlRmlsZXMgPSBbLi4uZGlzY292ZXJlZC5kaXNjb3ZlcmVkU2VyZGVGaWxlc10uc29ydCgpO1xuXG4gICAgLy8gSW5jbHVkZSBzZXJkZSBmaWxlcyB0aGF0IGFyZW4ndCBhbHJlYWR5IHN0ZXAgZmlsZXMgZm9yIGNyb3NzLWNvbnRleHQgY2xhc3MgcmVnaXN0cmF0aW9uLlxuICAgIC8vIENsYXNzZXMgbmVlZCB0byBiZSByZWdpc3RlcmVkIGluIHRoZSBzdGVwIGJ1bmRsZSBzbyB0aGV5IGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICAvLyB3aGVuIHJlY2VpdmluZyBkYXRhIGZyb20gd29ya2Zsb3dzIGFuZCBzZXJpYWxpemVkIHdoZW4gcmV0dXJuaW5nIGRhdGEgdG8gd29ya2Zsb3dzLlxuICAgIGNvbnN0IHN0ZXBGaWxlc1NldCA9IG5ldyBTZXQoc3RlcEZpbGVzKTtcbiAgICBjb25zdCBzZXJkZU9ubHlGaWxlcyA9IHNlcmRlRmlsZXMuZmlsdGVyKChmKSA9PiAhc3RlcEZpbGVzU2V0LmhhcyhmKSk7XG5cbiAgICAvLyBsb2cgdGhlIHN0ZXAgZmlsZXMgZm9yIGRlYnVnZ2luZ1xuICAgIGF3YWl0IHRoaXMud3JpdGVEZWJ1Z0ZpbGUob3V0ZmlsZSwge1xuICAgICAgc3RlcEZpbGVzLFxuICAgICAgd29ya2Zsb3dGaWxlcyxcbiAgICAgIHNlcmRlT25seUZpbGVzLFxuICAgIH0pO1xuXG4gICAgLy8gSGVscGVyIHRvIGNyZWF0ZSBpbXBvcnQgc3RhdGVtZW50IGZyb20gZmlsZSBwYXRoXG4gICAgLy8gRm9yIHdvcmtzcGFjZS9ub2RlX21vZHVsZXMgcGFja2FnZXMsIHVzZXMgdGhlIHBhY2thZ2UgbmFtZSBzbyBlc2J1aWxkXG4gICAgLy8gd2lsbCByZXNvbHZlIHRocm91Z2ggcGFja2FnZS5qc29uIGV4cG9ydHMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29uZGl0aW9uc1xuICAgIGNvbnN0IGNyZWF0ZUltcG9ydCA9IChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3Jrc3BhY2VSb290ID0gdGhpcy5jb25maWcud29ya2luZ0RpclxuICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFdvcmtzcGFjZUZpbGUgPSBmaWxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgIC8vIE9ubHkgdXNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBmb3Igd29ya3NwYWNlIHN5bWxpbmtzIChmaWxlc1xuICAgICAgLy8gb3V0c2lkZSBub2RlX21vZHVsZXMgaW4gYSBwYWNrYWdlcy8qL3NyYy8gZGlyZWN0b3J5KS4gRm9yIHRhcmJhbGwtXG4gICAgICAvLyBpbnN0YWxsZWQgcGFja2FnZXMgKGZpbGVzIGluc2lkZSBub2RlX21vZHVsZXMvKSwgZmFsbCB0aHJvdWdoIHRvXG4gICAgICAvLyBnZXRJbXBvcnRQYXRoIHdoaWNoIHJldHVybnMgcGFja2FnZSBzcGVjaWZpZXJzIOKAlCB0aGlzIGFsbG93cyB0aGVcbiAgICAgIC8vIFNXQyBwbHVnaW4ncyBleHRlcm5hbGl6ZU5vblN0ZXBzIHRvIHdvcmsgY29ycmVjdGx5LlxuICAgICAgY29uc3QgaXNXb3Jrc3BhY2VTb3VyY2VCYWNrZWRQYWNrYWdlRmlsZSA9XG4gICAgICAgIG5vcm1hbGl6ZWRXb3Jrc3BhY2VGaWxlLmluY2x1ZGVzKCcvcGFja2FnZXMvJykgJiZcbiAgICAgICAgbm9ybWFsaXplZFdvcmtzcGFjZUZpbGUuaW5jbHVkZXMoJy9zcmMvJykgJiZcbiAgICAgICAgIW5vcm1hbGl6ZWRXb3Jrc3BhY2VGaWxlLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpICYmXG4gICAgICAgICEoXG4gICAgICAgICAgbm9ybWFsaXplZFdvcmtzcGFjZUZpbGUgPT09IG5vcm1hbGl6ZWRXb3Jrc3BhY2VSb290IHx8XG4gICAgICAgICAgbm9ybWFsaXplZFdvcmtzcGFjZUZpbGUuc3RhcnRzV2l0aChgJHtub3JtYWxpemVkV29ya3NwYWNlUm9vdH0vYClcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IGlzU291cmNlQmFja2VkUGFja2FnZUZpbGUgPSBpc1dvcmtzcGFjZVNvdXJjZUJhY2tlZFBhY2thZ2VGaWxlO1xuXG4gICAgICBpZiAoaXNTb3VyY2VCYWNrZWRQYWNrYWdlRmlsZSkge1xuICAgICAgICBsZXQgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoXG4gICAgICAgICAgbm9ybWFsaXplZFdvcmtzcGFjZVJvb3QsXG4gICAgICAgICAgbm9ybWFsaXplZFdvcmtzcGFjZUZpbGVcbiAgICAgICAgKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4vJykgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgJyR7cmVsYXRpdmVQYXRofSc7YDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpbXBvcnRQYXRoLCBpc1BhY2thZ2UgfSA9IGdldEltcG9ydFBhdGgoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHRoaXMuY29uZmlnLndvcmtpbmdEaXJcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc1BhY2thZ2UpIHtcbiAgICAgICAgLy8gVXNlIHBhY2thZ2UgbmFtZSAtIGVzYnVpbGQgd2lsbCByZXNvbHZlIHZpYSBwYWNrYWdlLmpzb24gZXhwb3J0c1xuICAgICAgICByZXR1cm4gYGltcG9ydCAnJHtpbXBvcnRQYXRofSc7YDtcbiAgICAgIH1cblxuICAgICAgLy8gTG9jYWwgYXBwIGZpbGUgLSB1c2UgcmVsYXRpdmUgcGF0aFxuICAgICAgLy8gTm9ybWFsaXplIGJvdGggcGF0aHMgdG8gZm9yd2FyZCBzbGFzaGVzIGJlZm9yZSBjYWxsaW5nIHJlbGF0aXZlKClcbiAgICAgIC8vIFRoaXMgaXMgY3JpdGljYWwgb24gV2luZG93cyB3aGVyZSByZWxhdGl2ZSgpIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aXRoIG1peGVkIHBhdGggZm9ybWF0c1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFdvcmtpbmdEaXIgPSB0aGlzLmNvbmZpZy53b3JraW5nRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlID0gZmlsZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmcm9tIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBmaWxlXG4gICAgICBsZXQgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUobm9ybWFsaXplZFdvcmtpbmdEaXIsIG5vcm1hbGl6ZWRGaWxlKS5yZXBsYWNlKFxuICAgICAgICAvXFxcXC9nLFxuICAgICAgICAnLydcbiAgICAgICk7XG4gICAgICAvLyBFbnN1cmUgcmVsYXRpdmUgcGF0aHMgc3RhcnQgd2l0aCAuLyBzbyBlc2J1aWxkIHJlc29sdmVzIHRoZW0gY29ycmVjdGx5LlxuICAgICAgLy8gUGF0aHMgbGlrZSBcIi5vdXRwdXQvLi4uXCIgYXJlIG5vdCB2YWxpZCByZWxhdGl2ZSBzcGVjaWZpZXJzIGFuZCBtdXN0XG4gICAgICAvLyBiZWNvbWUgXCIuLy5vdXRwdXQvLi4uXCIuXG4gICAgICBpZiAoIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLycpICYmICFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgcmVsYXRpdmVQYXRoID0gYC4vJHtyZWxhdGl2ZVBhdGh9YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgaW1wb3J0ICcke3JlbGF0aXZlUGF0aH0nO2A7XG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIHZpcnR1YWwgZW50cnkgdGhhdCBpbXBvcnRzIGFsbCBmaWxlcy4gQWxsIHN0ZXAgZGVmaW5pdGlvbnNcbiAgICAvLyB3aWxsIGdldCByZWdpc3RlcmVkIHRoYW5rcyB0byB0aGUgc3djIHRyYW5zZm9ybS5cbiAgICAvL1xuICAgIC8vIERlZHVwZSBpbXBvcnRzIGJ5IGNhbm9uaWNhbCBtb2R1bGUgaWRlbnRpdHkgc28gd2UgbmV2ZXIgZW1pdCB0d29cbiAgICAvLyBpbXBvcnQgbGluZXMgdGhhdCByZXNvbHZlIHRvIHRoZSBzYW1lIHBoeXNpY2FsIG1vZHVsZS4gUHJlLXNlZWQgdGhlXG4gICAgLy8gc2V0IHdpdGggdGhlIGJ1aWx0LWluIHN0ZXBzIGltcG9ydCBzbyBhIHdvcmtzcGFjZSBzdGVwIGZpbGUgYXRcbiAgICAvLyBgcGFja2FnZXMvd29ya2Zsb3cvc3JjL2ludGVybmFsL2J1aWx0aW5zLnRzYCBkb2Vzbid0IGVtaXQgYSBzZWNvbmQsXG4gICAgLy8gcmVsYXRpdmUtcGF0aCBjb21wZXRpbmcgaW1wb3J0IOKAlCBlc2J1aWxkIHdvdWxkIG90aGVyd2lzZSB0cmFuc2Zvcm1cbiAgICAvLyBib3RoIGNvcGllcyBhbmQgdGhlIHN3YyBwbHVnaW4gd291bGQgZ2VuZXJhdGUgZHVwbGljYXRlIHN0ZXAgSURzLlxuICAgIGNvbnN0IGVtaXR0ZWRJbXBvcnRJZGVudGl0aWVzID0gbmV3IFNldDxzdHJpbmc+KFtidWlsdEluU3RlcHNdKTtcbiAgICBjb25zdCBidWlsZEltcG9ydHMgPSAoZmlsZXM6IHN0cmluZ1tdKTogc3RyaW5nID0+XG4gICAgICBmaWxlc1xuICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWRlbnRpdHkgPSBtb2R1bGVJZGVudGl0eUtleShmaWxlLCB0aGlzLm1vZHVsZVNwZWNpZmllclJvb3QpO1xuICAgICAgICAgIGlmIChlbWl0dGVkSW1wb3J0SWRlbnRpdGllcy5oYXMoaWRlbnRpdHkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgZW1pdHRlZEltcG9ydElkZW50aXRpZXMuYWRkKGlkZW50aXR5KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcChjcmVhdGVJbXBvcnQpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IHN0ZXBJbXBvcnRzID0gYnVpbGRJbXBvcnRzKHN0ZXBGaWxlcyk7XG5cbiAgICAvLyBJbmNsdWRlIHNlcmRlLW9ubHkgZmlsZXMgZm9yIGNsYXNzIHJlZ2lzdHJhdGlvbiBzaWRlIGVmZmVjdHNcbiAgICBjb25zdCBzZXJkZUltcG9ydHMgPSBidWlsZEltcG9ydHMoc2VyZGVPbmx5RmlsZXMpO1xuXG4gICAgY29uc3QgZW50cnlDb250ZW50ID0gYFxuICAgIC8vIEJ1aWx0IGluIHN0ZXBzXG4gICAgaW1wb3J0ICcke2J1aWx0SW5TdGVwc30nO1xuICAgIC8vIFVzZXIgc3RlcHNcbiAgICAke3N0ZXBJbXBvcnRzfVxuICAgIC8vIFNlcmRlIGZpbGVzIGZvciBjcm9zcy1jb250ZXh0IGNsYXNzIHJlZ2lzdHJhdGlvblxuICAgICR7c2VyZGVJbXBvcnRzfVxuICAgIC8vIFNlbnRpbmVsIGV4cG9ydCBzbyBidW5kbGVycyAocm9sbHVwKSBkb24ndCB0cmVlLXNoYWtlIHRoaXMgbW9kdWxlXG4gICAgLy8gd2hlbiBpdCdzIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3Qtb25seSBkZXBlbmRlbmN5LlxuICAgIGV4cG9ydCBjb25zdCBfX3N0ZXBzX3JlZ2lzdGVyZWQgPSB0cnVlO2A7XG5cbiAgICAvLyBCdW5kbGUgd2l0aCBlc2J1aWxkIGFuZCBvdXIgY3VzdG9tIFNXQyBwbHVnaW5cbiAgICBjb25zdCBlbnRyaWVzVG9CdW5kbGUgPSBleHRlcm5hbGl6ZU5vblN0ZXBzXG4gICAgICA/IFtcbiAgICAgICAgICAuLi5zdGVwRmlsZXMsXG4gICAgICAgICAgLi4uc2VyZGVGaWxlcyxcbiAgICAgICAgICAuLi4ocmVzb2x2ZWRCdWlsdEluU3RlcHMgPyBbcmVzb2x2ZWRCdWlsdEluU3RlcHNdIDogW10pLFxuICAgICAgICBdXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBub3JtYWxpemVkRW50cmllc1RvQnVuZGxlID0gZW50cmllc1RvQnVuZGxlXG4gICAgICA/IGF3YWl0IHdpdGhSZWFscGF0aHMoZW50cmllc1RvQnVuZGxlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzID0gYXdhaXQgd2l0aFJlYWxwYXRocyhbXG4gICAgICAuLi5zdGVwRmlsZXMsXG4gICAgICAuLi5zZXJkZU9ubHlGaWxlcyxcbiAgICAgIC4uLihyZXNvbHZlZEJ1aWx0SW5TdGVwcyA/IFtyZXNvbHZlZEJ1aWx0SW5TdGVwc10gOiBbXSksXG4gICAgXSk7XG4gICAgY29uc3QgZXNidWlsZFRzY29uZmlnT3B0aW9ucyA9XG4gICAgICBhd2FpdCBnZXRFc2J1aWxkVHNjb25maWdPcHRpb25zKHRzY29uZmlnUGF0aCk7XG4gICAgY29uc3QgeyBiYW5uZXI6IGltcG9ydE1ldGFCYW5uZXIsIGRlZmluZTogaW1wb3J0TWV0YURlZmluZSB9ID1cbiAgICAgIHRoaXMuZ2V0Q2pzSW1wb3J0TWV0YVBvbHlmaWxsKGZvcm1hdCk7XG4gICAgY29uc3QgZXNtUmVxdWlyZUJhbm5lciA9IHNraXBFc21SZXF1aXJlQmFubmVyXG4gICAgICA/ICcnXG4gICAgICA6IHRoaXMuZ2V0RXNtUmVxdWlyZUJhbm5lcihmb3JtYXQpO1xuXG4gICAgY29uc3QgZXNidWlsZEN0eCA9IGF3YWl0IGVzYnVpbGQuY29udGV4dCh7XG4gICAgICBiYW5uZXI6IHtcbiAgICAgICAganM6IGAvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXFxuLyogZXNsaW50LWRpc2FibGUgKi9cXG4ke2ltcG9ydE1ldGFCYW5uZXJ9JHtlc21SZXF1aXJlQmFubmVyfWAsXG4gICAgICB9LFxuICAgICAgc3RkaW46IHtcbiAgICAgICAgY29udGVudHM6IGVudHJ5Q29udGVudCxcbiAgICAgICAgcmVzb2x2ZURpcjogdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgb3V0ZmlsZSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgY29uZGl0aW9uczogWydub2RlJ10sXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgd3JpdGU6IHRydWUsXG4gICAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICAgIGtlZXBOYW1lczogdHJ1ZSxcbiAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICBqc3g6ICdwcmVzZXJ2ZScsXG4gICAgICBsb2dMZXZlbDogJ2Vycm9yJyxcbiAgICAgIC8vIFVzZSB0c2NvbmZpZyBmb3IgcGF0aCBhbGlhcyByZXNvbHV0aW9uLlxuICAgICAgLy8gRm9yIHN5bWxpbmtlZCBjb25maWdzIHRoaXMgdXNlcyB0c2NvbmZpZ1JhdyB0byBwcmVzZXJ2ZSBjd2QtcmVsYXRpdmUgYWxpYXNlcy5cbiAgICAgIC4uLmVzYnVpbGRUc2NvbmZpZ09wdGlvbnMsXG4gICAgICBkZWZpbmU6IGltcG9ydE1ldGFEZWZpbmUsXG4gICAgICByZXNvbHZlRXh0ZW5zaW9uczogW1xuICAgICAgICAnLnRzJyxcbiAgICAgICAgJy50c3gnLFxuICAgICAgICAnLm10cycsXG4gICAgICAgICcuY3RzJyxcbiAgICAgICAgJy5qcycsXG4gICAgICAgICcuanN4JyxcbiAgICAgICAgJy5tanMnLFxuICAgICAgICAnLmNqcycsXG4gICAgICBdLFxuICAgICAgLy8gSW5saW5lIHNvdXJjZSBtYXBzIGZvciBiZXR0ZXIgc3RhY2sgdHJhY2VzIGluIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAgLy8gU3RlcHMgZXhlY3V0ZSBpbiBOb2RlLmpzIGNvbnRleHQgYW5kIGlubGluZSBzb3VyY2VtYXBzIGVuc3VyZSB3ZSBnZXRcbiAgICAgIC8vIG1lYW5pbmdmdWwgc3RhY2sgdHJhY2VzIHdpdGggcHJvcGVyIGZpbGUgbmFtZXMgYW5kIGxpbmUgbnVtYmVycyB3aGVuIGVycm9yc1xuICAgICAgLy8gb2NjdXIgaW4gZGVlcGx5IG5lc3RlZCBmdW5jdGlvbiBjYWxscyBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMuXG4gICAgICBzb3VyY2VtYXA6IHRoaXMucmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJyksXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIC8vIEhhbmRsZSBwc2V1ZG8tcGFja2FnZXMgbGlrZSAnc2VydmVyLW9ubHknIGFuZCAnY2xpZW50LW9ubHknIGJ5IHByb3ZpZGluZ1xuICAgICAgICAvLyBlbXB0eSBtb2R1bGVzLiBNdXN0IHJ1biBmaXJzdCB0byBpbnRlcmNlcHQgdGhlc2UgYmVmb3JlIG90aGVyIHJlc29sdXRpb24uXG4gICAgICAgIGNyZWF0ZVBzZXVkb1BhY2thZ2VQbHVnaW4oKSxcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnc3RlcCcsXG4gICAgICAgICAgZW50cmllc1RvQnVuZGxlOiBub3JtYWxpemVkRW50cmllc1RvQnVuZGxlLFxuICAgICAgICAgIG91dGRpcjogb3V0ZmlsZSA/IGRpcm5hbWUob3V0ZmlsZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJvamVjdFJvb3Q6IHRoaXMudHJhbnNmb3JtUHJvamVjdFJvb3QsXG4gICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogdGhpcy5tb2R1bGVTcGVjaWZpZXJSb290LFxuICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3QsXG4gICAgICAgICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcyxcbiAgICAgICAgICByZXdyaXRlVHNFeHRlbnNpb25zLFxuICAgICAgICAgIHNpZGVFZmZlY3RFbnRyaWVzOiBub3JtYWxpemVkU2lkZUVmZmVjdEVudHJpZXMsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIC8vIFBsdWdpbiBzaG91bGQgY2F0Y2ggbW9zdCB0aGluZ3MsIGJ1dCB0aGlzIGxldHMgdXNlcnMgaGFyZCBvdmVycmlkZVxuICAgICAgLy8gaWYgdGhlIHBsdWdpbiBtaXNzZXMgYW55dGhpbmcgdGhhdCBzaG91bGQgYmUgZXh0ZXJuYWxpemVkXG4gICAgICBleHRlcm5hbDogWydidW4nLCAnYnVuOionLCAuLi4odGhpcy5jb25maWcuZXh0ZXJuYWxQYWNrYWdlcyB8fCBbXSldLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RlcHNSZXN1bHQgPSBhd2FpdCBlc2J1aWxkQ3R4LnJlYnVpbGQoKTtcblxuICAgIHRoaXMubG9nRXNidWlsZE1lc3NhZ2VzKHN0ZXBzUmVzdWx0LCAnc3RlcHMgYnVuZGxlIGNyZWF0aW9uJyk7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRlZCBzdGVwcyBidW5kbGUnLFxuICAgICAgYCR7RGF0ZS5ub3coKSAtIHN0ZXBzQnVuZGxlU3RhcnR9bXNgXG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSB3b3JrZmxvdy1vbmx5IGZpbGVzIHRoYXQgbWF5IGhhdmUgYmVlbiB0cmVlLXNoYWtlbiBmcm9tIHRoZSBidW5kbGUuXG4gICAgLy8gVGhlc2UgZmlsZXMgaGF2ZSBubyBzdGVwcywgc28gZXNidWlsZCByZW1vdmVzIHRoZW0sIGJ1dCB3ZSBzdGlsbCBuZWVkIHRoZWlyXG4gICAgLy8gd29ya2Zsb3cgbWV0YWRhdGEgZm9yIHRoZSBtYW5pZmVzdC4gVHJhbnNmb3JtIHRoZW0gc2VwYXJhdGVseS5cbiAgICBjb25zdCB3b3JrZmxvd09ubHlGaWxlcyA9IHdvcmtmbG93RmlsZXMuZmlsdGVyKFxuICAgICAgKGYpID0+ICFzdGVwRmlsZXMuaW5jbHVkZXMoZilcbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgd29ya2Zsb3dPbmx5RmlsZXMubWFwKGFzeW5jICh3b3JrZmxvd0ZpbGUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZSh3b3JrZmxvd0ZpbGUsICd1dGY4Jyk7XG4gICAgICAgICAgY29uc3QgcmVsYXRpdmVGaWxlcGF0aCA9IHRoaXMuZ2V0UmVsYXRpdmVGaWxlcGF0aCh3b3JrZmxvd0ZpbGUpO1xuICAgICAgICAgIGNvbnN0IHsgd29ya2Zsb3dNYW5pZmVzdDogZmlsZU1hbmlmZXN0IH0gPSBhd2FpdCBhcHBseVN3Y1RyYW5zZm9ybShcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGgsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAnd29ya2Zsb3cnLFxuICAgICAgICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Qcm9qZWN0Um9vdCxcbiAgICAgICAgICAgIHRoaXMubW9kdWxlU3BlY2lmaWVyUm9vdFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZpbGVNYW5pZmVzdC53b3JrZmxvd3MpIHtcbiAgICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3Qud29ya2Zsb3dzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdC53b3JrZmxvd3MgfHwge30sXG4gICAgICAgICAgICAgIGZpbGVNYW5pZmVzdC53b3JrZmxvd3NcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWxlTWFuaWZlc3QuY2xhc3Nlcykge1xuICAgICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdC5jbGFzc2VzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdC5jbGFzc2VzIHx8IHt9LFxuICAgICAgICAgICAgICBmaWxlTWFuaWZlc3QuY2xhc3Nlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTG9nIHdhcm5pbmcgYnV0IGNvbnRpbnVlIC0gZG9uJ3QgZmFpbCBidWlsZCBmb3Igd29ya2Zsb3ctb25seSBmaWxlIGlzc3Vlc1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBXYXJuaW5nOiBGYWlsZWQgdG8gZXh0cmFjdCB3b3JrZmxvdyBtZXRhZGF0YSBmcm9tICR7d29ya2Zsb3dGaWxlfTpgLFxuICAgICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVTd2NJZ25vcmVkKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgIHJldHVybiB7IGNvbnRleHQ6IGVzYnVpbGRDdHgsIG1hbmlmZXN0OiB3b3JrZmxvd01hbmlmZXN0IH07XG4gICAgfVxuICAgIGF3YWl0IGVzYnVpbGRDdHguZGlzcG9zZSgpO1xuICAgIHJldHVybiB7IGNvbnRleHQ6IHVuZGVmaW5lZCwgbWFuaWZlc3Q6IHdvcmtmbG93TWFuaWZlc3QgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYnVuZGxlIGZvciB3b3JrZmxvdyBvcmNoZXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICogV29ya2Zsb3dzIHJ1biBpbiBhIHNhbmRib3hlZCBWTSBhbmQgY29vcmRpbmF0ZSBzdGVwIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGJ1bmRsZUZpbmFsT3V0cHV0IC0gSWYgZmFsc2UsIHNraXBzIHRoZSBmaW5hbCBidW5kbGluZyBzdGVwICh1c2VkIGJ5IE5leHQuanMpXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlV29ya2Zsb3dzQnVuZGxlKHtcbiAgICBpbnB1dEZpbGVzLFxuICAgIGZvcm1hdCA9ICdlc20nLFxuICAgIG91dGZpbGUsXG4gICAgYnVuZGxlRmluYWxPdXRwdXQgPSB0cnVlLFxuICAgIGtlZXBJbnRlcmltQnVuZGxlQ29udGV4dCA9IHRoaXMuY29uZmlnLndhdGNoLFxuICAgIHRzY29uZmlnUGF0aCxcbiAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgfToge1xuICAgIHRzY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICBvdXRmaWxlOiBzdHJpbmc7XG4gICAgZm9ybWF0PzogJ2NqcycgfCAnZXNtJztcbiAgICBidW5kbGVGaW5hbE91dHB1dD86IGJvb2xlYW47XG4gICAga2VlcEludGVyaW1CdW5kbGVDb250ZXh0PzogYm9vbGVhbjtcbiAgICBkaXNjb3ZlcmVkRW50cmllcz86IERpc2NvdmVyZWRFbnRyaWVzO1xuICB9KTogUHJvbWlzZTx7XG4gICAgbWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3Q7XG4gICAgaW50ZXJpbUJ1bmRsZUN0eD86IGVzYnVpbGQuQnVpbGRDb250ZXh0O1xuICAgIGJ1bmRsZUZpbmFsPzogKGludGVyaW1CdW5kbGVSZXN1bHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogVGhlIHJhdyB3b3JrZmxvdyBWTSBjb2RlIChiZWZvcmUgd3JhcHBpbmcgd2l0aCBlbnRyeXBvaW50KSAqL1xuICAgIGludGVyaW1CdW5kbGVUZXh0Pzogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgZGlzY292ZXJlZCA9XG4gICAgICBkaXNjb3ZlcmVkRW50cmllcyA/P1xuICAgICAgKGF3YWl0IHRoaXMuZGlzY292ZXJFbnRyaWVzKGlucHV0RmlsZXMsIGRpcm5hbWUob3V0ZmlsZSksIHRzY29uZmlnUGF0aCkpO1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZXMgPSBbLi4uZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzXS5zb3J0KCk7XG4gICAgY29uc3Qgc2VyZGVGaWxlcyA9IFsuLi5kaXNjb3ZlcmVkLmRpc2NvdmVyZWRTZXJkZUZpbGVzXS5zb3J0KCk7XG5cbiAgICAvLyBJbmNsdWRlIHNlcmRlIGZpbGVzIHRoYXQgYXJlbid0IGFscmVhZHkgd29ya2Zsb3cgZmlsZXMgZm9yIGNyb3NzLWNvbnRleHQgY2xhc3MgcmVnaXN0cmF0aW9uLlxuICAgIC8vIENsYXNzZXMgbmVlZCB0byBiZSByZWdpc3RlcmVkIGluIHRoZSB3b3JrZmxvdyBidW5kbGUgc28gdGhleSBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAgLy8gd2hlbiByZWNlaXZpbmcgZGF0YSBmcm9tIHN0ZXBzIG9yIHdoZW4gc2VyaWFsaXppbmcgZGF0YSB0byBzZW5kIHRvIHN0ZXBzLlxuICAgIGNvbnN0IHdvcmtmbG93RmlsZXNTZXQgPSBuZXcgU2V0KHdvcmtmbG93RmlsZXMpO1xuICAgIGNvbnN0IHNlcmRlT25seUZpbGVzID0gc2VyZGVGaWxlcy5maWx0ZXIoKGYpID0+ICF3b3JrZmxvd0ZpbGVzU2V0LmhhcyhmKSk7XG5cbiAgICAvLyBsb2cgdGhlIHdvcmtmbG93IGZpbGVzIGZvciBkZWJ1Z2dpbmdcbiAgICBhd2FpdCB0aGlzLndyaXRlRGVidWdGaWxlKG91dGZpbGUsIHsgd29ya2Zsb3dGaWxlcywgc2VyZGVPbmx5RmlsZXMgfSk7XG5cbiAgICAvLyBIZWxwZXIgdG8gY3JlYXRlIGltcG9ydCBzdGF0ZW1lbnQgZnJvbSBmaWxlIHBhdGhcbiAgICAvLyBGb3IgcGFja2FnZXMsIHVzZXMgdGhlIHBhY2thZ2UgbmFtZSBzbyBlc2J1aWxkIHdpbGwgcmVzb2x2ZSB0aHJvdWdoXG4gICAgLy8gcGFja2FnZS5qc29uIGV4cG9ydHMgd2l0aCBjb25kaXRpb25zOiBbJ3dvcmtmbG93J11cbiAgICBjb25zdCBjcmVhdGVJbXBvcnQgPSAoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IGltcG9ydFBhdGgsIGlzUGFja2FnZSB9ID0gZ2V0SW1wb3J0UGF0aChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgdGhpcy5jb25maWcud29ya2luZ0RpclxuICAgICAgKTtcblxuICAgICAgaWYgKGlzUGFja2FnZSkge1xuICAgICAgICAvLyBVc2UgcGFja2FnZSBuYW1lIC0gZXNidWlsZCB3aWxsIHJlc29sdmUgdmlhIHBhY2thZ2UuanNvbiBleHBvcnRzXG4gICAgICAgIC8vIGFuZCBhcHBseSB0aGUgJ3dvcmtmbG93JyBjb25kaXRpb25cbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgJyR7aW1wb3J0UGF0aH0nO2A7XG4gICAgICB9XG5cbiAgICAgIC8vIExvY2FsIGFwcCBmaWxlIC0gdXNlIHJlbGF0aXZlIHBhdGhcbiAgICAgIC8vIE5vcm1hbGl6ZSBib3RoIHBhdGhzIHRvIGZvcndhcmQgc2xhc2hlcyBiZWZvcmUgY2FsbGluZyByZWxhdGl2ZSgpXG4gICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIG9uIFdpbmRvd3Mgd2hlcmUgcmVsYXRpdmUoKSBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2l0aCBtaXhlZCBwYXRoIGZvcm1hdHNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gdGhpcy5jb25maWcud29ya2luZ0Rpci5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIHBhdGggZnJvbSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgZmlsZVxuICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKG5vcm1hbGl6ZWRXb3JraW5nRGlyLCBub3JtYWxpemVkRmlsZSkucmVwbGFjZShcbiAgICAgICAgL1xcXFwvZyxcbiAgICAgICAgJy8nXG4gICAgICApO1xuICAgICAgLy8gRW5zdXJlIHJlbGF0aXZlIHBhdGhzIHN0YXJ0IHdpdGggLi8gc28gZXNidWlsZCByZXNvbHZlcyB0aGVtIGNvcnJlY3RseS5cbiAgICAgIC8vIFBhdGhzIGxpa2UgXCIub3V0cHV0Ly4uLlwiIGFyZSBub3QgdmFsaWQgcmVsYXRpdmUgc3BlY2lmaWVycyBhbmQgbXVzdFxuICAgICAgLy8gYmVjb21lIFwiLi8ub3V0cHV0Ly4uLlwiLlxuICAgICAgaWYgKCFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi8nKSAmJiAhcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYGltcG9ydCAnJHtyZWxhdGl2ZVBhdGh9JztgO1xuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSB2aXJ0dWFsIGVudHJ5IHRoYXQgaW1wb3J0cyBhbGwgd29ya2Zsb3cgZmlsZXMuIERlZHVwZSBieVxuICAgIC8vIGNhbm9uaWNhbCBtb2R1bGUgaWRlbnRpdHkgc28gc291cmNlL2Rpc3QgY29waWVzIG9mIHRoZSBzYW1lIHdvcmtzcGFjZVxuICAgIC8vIHBhY2thZ2UgZXhwb3J0IGRvbid0IGJvdGggZ2V0IGltcG9ydGVkICh3aGljaCB3b3VsZCBtYWtlIHRoZSBzd2NcbiAgICAvLyBwbHVnaW4gZ2VuZXJhdGUgZHVwbGljYXRlIHdvcmtmbG93IElEcykuXG4gICAgY29uc3QgZW1pdHRlZEltcG9ydElkZW50aXRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBidWlsZEltcG9ydHMgPSAoZmlsZXM6IHN0cmluZ1tdKTogc3RyaW5nID0+XG4gICAgICBmaWxlc1xuICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWRlbnRpdHkgPSBtb2R1bGVJZGVudGl0eUtleShmaWxlLCB0aGlzLm1vZHVsZVNwZWNpZmllclJvb3QpO1xuICAgICAgICAgIGlmIChlbWl0dGVkSW1wb3J0SWRlbnRpdGllcy5oYXMoaWRlbnRpdHkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgZW1pdHRlZEltcG9ydElkZW50aXRpZXMuYWRkKGlkZW50aXR5KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcChjcmVhdGVJbXBvcnQpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIC8vIFRoZSBTV0MgcGx1Z2luIGluIHdvcmtmbG93IG1vZGUgZW1pdHMgYGdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQod29ya2Zsb3dJZCwgZm4pYFxuICAgIC8vIGNhbGxzIGRpcmVjdGx5LCBzbyB3ZSBqdXN0IG5lZWQgdG8gaW1wb3J0IHRoZSBmaWxlcyAoTWFwIGlzIGluaXRpYWxpemVkIHZpYSBiYW5uZXIpXG4gICAgY29uc3Qgd29ya2Zsb3dJbXBvcnRzID0gYnVpbGRJbXBvcnRzKHdvcmtmbG93RmlsZXMpO1xuXG4gICAgLy8gSW5jbHVkZSBzZXJkZS1vbmx5IGZpbGVzIGZvciBjbGFzcyByZWdpc3RyYXRpb24gc2lkZSBlZmZlY3RzXG4gICAgY29uc3Qgc2VyZGVJbXBvcnRzID0gYnVpbGRJbXBvcnRzKHNlcmRlT25seUZpbGVzKTtcblxuICAgIGNvbnN0IGltcG9ydHMgPSBzZXJkZUltcG9ydHNcbiAgICAgID8gYCR7d29ya2Zsb3dJbXBvcnRzfVxcbi8vIFNlcmRlIGZpbGVzIGZvciBjcm9zcy1jb250ZXh0IGNsYXNzIHJlZ2lzdHJhdGlvblxcbiR7c2VyZGVJbXBvcnRzfWBcbiAgICAgIDogd29ya2Zsb3dJbXBvcnRzO1xuXG4gICAgY29uc3QgYnVuZGxlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB3b3JrZmxvd01hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0ID0ge307XG4gICAgY29uc3QgZXNidWlsZFRzY29uZmlnT3B0aW9ucyA9XG4gICAgICBhd2FpdCBnZXRFc2J1aWxkVHNjb25maWdPcHRpb25zKHRzY29uZmlnUGF0aCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFdvcmtmbG93U2lkZUVmZmVjdEVudHJpZXMgPSBhd2FpdCB3aXRoUmVhbHBhdGhzKFtcbiAgICAgIC4uLndvcmtmbG93RmlsZXMsXG4gICAgICAuLi5zZXJkZU9ubHlGaWxlcyxcbiAgICBdKTtcblxuICAgIC8vIEJ1bmRsZSB3aXRoIGVzYnVpbGQgYW5kIG91ciBjdXN0b20gU1dDIHBsdWdpbiBpbiB3b3JrZmxvdyBtb2RlLlxuICAgIC8vIHRoaXMgYnVuZGxlIHdpbGwgYmUgcnVuIGluc2lkZSBhIHZtIGlzb2xhdGVcbiAgICBjb25zdCBpbnRlcmltQnVuZGxlQ3R4ID0gYXdhaXQgZXNidWlsZC5jb250ZXh0KHtcbiAgICAgIHN0ZGluOiB7XG4gICAgICAgIGNvbnRlbnRzOiBpbXBvcnRzLFxuICAgICAgICByZXNvbHZlRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICBzb3VyY2VmaWxlOiAndmlydHVhbC1lbnRyeS5qcycsXG4gICAgICAgIGxvYWRlcjogJ2pzJyxcbiAgICAgIH0sXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBhYnNXb3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgZm9ybWF0OiAnY2pzJywgLy8gUnVucyBpbnNpZGUgdGhlIFZNIHdoaWNoIGV4cGVjdHMgY2pzXG4gICAgICBwbGF0Zm9ybTogJ25ldXRyYWwnLCAvLyBUaGUgcGxhdGZvcm0gaXMgbmVpdGhlciBub2RlIG5vciBicm93c2VyXG4gICAgICBtYWluRmllbGRzOiBbJ21vZHVsZScsICdtYWluJ10sIC8vIFRvIHN1cHBvcnQgbnBtIHN0eWxlIGltcG9ydHNcbiAgICAgIGNvbmRpdGlvbnM6IFsnd29ya2Zsb3cnXSwgLy8gQWxsb3cgcGFja2FnZXMgdG8gZXhwb3J0ICd3b3JrZmxvdycgY29tcGxpYW50IHZlcnNpb25zXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgd3JpdGU6IGZhbHNlLFxuICAgICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgICBrZWVwTmFtZXM6IHRydWUsXG4gICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgd29ya2Zsb3cgcmVnaXN0cnkgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBidW5kbGVcbiAgICAgIC8vIFRoaXMgbXVzdCBiZSBpbiBiYW5uZXIgKG5vdCB0aGUgdmlydHVhbCBlbnRyeSkgYmVjYXVzZSBlc2J1aWxkJ3MgYnVuZGxpbmdcbiAgICAgIC8vIGNhbiByZW9yZGVyIGNvZGUsIGFuZCB0aGUgLnNldCgpIGNhbGxzIG5lZWQgdGhlIE1hcCB0byBleGlzdCBmaXJzdFxuICAgICAgYmFubmVyOiB7XG4gICAgICAgIGpzOiAnZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzID0gbmV3IE1hcCgpOycsXG4gICAgICB9LFxuICAgICAgLy8gSW5saW5lIHNvdXJjZSBtYXBzIGZvciBiZXR0ZXIgc3RhY2sgdHJhY2VzIGluIHdvcmtmbG93IFZNIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoaXMgaW50ZXJtZWRpYXRlIGJ1bmRsZSBpcyBleGVjdXRlZCB2aWEgcnVuSW5Db250ZXh0KCkgaW4gYSBWTSwgc28gd2UgbmVlZFxuICAgICAgLy8gaW5saW5lIHNvdXJjZSBtYXBzIHRvIGdldCBtZWFuaW5nZnVsIHN0YWNrIHRyYWNlcyBpbnN0ZWFkIG9mIFwiZXZhbG1hY2hpbmUuPGFub255bW91cz5cIi5cbiAgICAgIHNvdXJjZW1hcDogdGhpcy5yZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSxcbiAgICAgIC8vIFVzZSB0c2NvbmZpZyBmb3IgcGF0aCBhbGlhcyByZXNvbHV0aW9uLlxuICAgICAgLy8gRm9yIHN5bWxpbmtlZCBjb25maWdzIHRoaXMgdXNlcyB0c2NvbmZpZ1JhdyB0byBwcmVzZXJ2ZSBjd2QtcmVsYXRpdmUgYWxpYXNlcy5cbiAgICAgIC4uLmVzYnVpbGRUc2NvbmZpZ09wdGlvbnMsXG4gICAgICByZXNvbHZlRXh0ZW5zaW9uczogW1xuICAgICAgICAnLnRzJyxcbiAgICAgICAgJy50c3gnLFxuICAgICAgICAnLm10cycsXG4gICAgICAgICcuY3RzJyxcbiAgICAgICAgJy5qcycsXG4gICAgICAgICcuanN4JyxcbiAgICAgICAgJy5tanMnLFxuICAgICAgICAnLmNqcycsXG4gICAgICBdLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICAvLyBIYW5kbGUgcHNldWRvLXBhY2thZ2VzIGxpa2UgJ3NlcnZlci1vbmx5JyBhbmQgJ2NsaWVudC1vbmx5JyBieSBwcm92aWRpbmdcbiAgICAgICAgLy8gZW1wdHkgbW9kdWxlcy4gTXVzdCBydW4gZmlyc3QgdG8gaW50ZXJjZXB0IHRoZXNlIGJlZm9yZSBvdGhlciByZXNvbHV0aW9uLlxuICAgICAgICBjcmVhdGVQc2V1ZG9QYWNrYWdlUGx1Z2luKCksXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3dvcmtmbG93JyxcbiAgICAgICAgICBwcm9qZWN0Um9vdDogdGhpcy50cmFuc2Zvcm1Qcm9qZWN0Um9vdCxcbiAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290OiB0aGlzLm1vZHVsZVNwZWNpZmllclJvb3QsXG4gICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdCxcbiAgICAgICAgICBzaWRlRWZmZWN0RW50cmllczogbm9ybWFsaXplZFdvcmtmbG93U2lkZUVmZmVjdEVudHJpZXMsXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBUaGlzIHBsdWdpbiBtdXN0IHJ1biBhZnRlciB0aGUgc3djIHBsdWdpbiB0byBlbnN1cmUgZGVhZCBjb2RlIGVsaW1pbmF0aW9uXG4gICAgICAgIC8vIGhhcHBlbnMgZmlyc3QsIHByZXZlbnRpbmcgZmFsc2UgcG9zaXRpdmVzIG9uIE5vZGUuanMgaW1wb3J0cyBpbiB1bnVzZWQgY29kZSBwYXRoc1xuICAgICAgICBjcmVhdGVOb2RlTW9kdWxlRXJyb3JQbHVnaW4oKSxcbiAgICAgIF0sXG4gICAgICAvLyBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGRvIE5PVCB1c2UgdGhlIGV4dGVybmFsIG9wdGlvbiBoZXJlIGZvciB3b3JrZmxvdyBidW5kbGVzLlxuICAgICAgLy8gV2hlbiBwYWNrYWdlcyBhcmUgbWFya2VkIGV4dGVybmFsIHdpdGggZm9ybWF0OiAnY2pzJywgZXNidWlsZCBnZW5lcmF0ZXMgcmVxdWlyZSgpIGNhbGxzLlxuICAgICAgLy8gSG93ZXZlciwgdGhlIHdvcmtmbG93IFZNICh2bS5ydW5JbkNvbnRleHQpIGRvZXMgbm90IGhhdmUgcmVxdWlyZSgpIGRlZmluZWQgLSBpdCBvbmx5XG4gICAgICAvLyBwcm92aWRlcyBtb2R1bGUuZXhwb3J0cyBhbmQgZXhwb3J0cy4gRXh0ZXJuYWwgcGFja2FnZXMgd291bGQgZmFpbCBhdCBydW50aW1lIHdpdGg6XG4gICAgICAvLyAgIFJlZmVyZW5jZUVycm9yOiByZXF1aXJlIGlzIG5vdCBkZWZpbmVkXG4gICAgICAvLyBJbnN0ZWFkLCB3ZSBidW5kbGUgZXZlcnl0aGluZyBhbmQgcmVseSBvbjpcbiAgICAgIC8vIC0gY3JlYXRlUHNldWRvUGFja2FnZVBsdWdpbigpIHRvIGhhbmRsZSBzZXJ2ZXItb25seS9jbGllbnQtb25seSB3aXRoIGVtcHR5IG1vZHVsZXNcbiAgICAgIC8vIC0gY3JlYXRlTm9kZU1vZHVsZUVycm9yUGx1Z2luKCkgdG8gY2F0Y2ggTm9kZS5qcyBidWlsdGluIGltcG9ydHMgYXQgYnVpbGQgdGltZVxuICAgIH0pO1xuICAgIGxldCBzaG91bGREaXNwb3NlSW50ZXJpbUJ1bmRsZUN0eCA9ICFrZWVwSW50ZXJpbUJ1bmRsZUNvbnRleHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGludGVyaW1CdW5kbGUgPSBhd2FpdCBpbnRlcmltQnVuZGxlQ3R4LnJlYnVpbGQoKTtcblxuICAgICAgdGhpcy5sb2dFc2J1aWxkTWVzc2FnZXMoXG4gICAgICAgIGludGVyaW1CdW5kbGUsXG4gICAgICAgICdpbnRlcm1lZGlhdGUgd29ya2Zsb3cgYnVuZGxlJyxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAge1xuICAgICAgICAgIHN1cHByZXNzV2FybmluZ3M6IHRoaXMuY29uZmlnLnN1cHByZXNzQ3JlYXRlV29ya2Zsb3dzQnVuZGxlV2FybmluZ3MsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmxvZ0NyZWF0ZVdvcmtmbG93c0J1bmRsZUluZm8oXG4gICAgICAgICdDcmVhdGVkIGludGVybWVkaWF0ZSB3b3JrZmxvdyBidW5kbGUnLFxuICAgICAgICBgJHtEYXRlLm5vdygpIC0gYnVuZGxlU3RhcnRUaW1lfW1zYFxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLndvcmtmbG93TWFuaWZlc3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoXG4gICAgICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICB0aGlzLmNvbmZpZy53b3JrZmxvd01hbmlmZXN0UGF0aFxuICAgICAgICApO1xuICAgICAgICBsZXQgcHJlZml4ID0gJyc7XG5cbiAgICAgICAgaWYgKHJlc29sdmVkUGF0aC5lbmRzV2l0aCgnLmNqcycpKSB7XG4gICAgICAgICAgcHJlZml4ID0gJ21vZHVsZS5leHBvcnRzID0gJztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICByZXNvbHZlZFBhdGguZW5kc1dpdGgoJy5qcycpIHx8XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoLmVuZHNXaXRoKCcubWpzJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcHJlZml4ID0gJ2V4cG9ydCBkZWZhdWx0ICc7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHJlc29sdmVkUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICAgICAgcmVzb2x2ZWRQYXRoLFxuICAgICAgICAgIHByZWZpeCArIEpTT04uc3RyaW5naWZ5KHdvcmtmbG93TWFuaWZlc3QsIG51bGwsIDIpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlU3djSWdub3JlZCgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgICFpbnRlcmltQnVuZGxlLm91dHB1dEZpbGVzIHx8XG4gICAgICAgIGludGVyaW1CdW5kbGUub3V0cHV0RmlsZXMubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93QnVpbGRFcnJvcignTm8gb3V0cHV0IGZpbGVzIGdlbmVyYXRlZCBmcm9tIGVzYnVpbGQnLCB7XG4gICAgICAgICAgaGludDogJ1RoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBtaXNjb25maWd1cmVkIGVudHJ5IHBvaW50IG9yIGFuIGVtcHR5IHdvcmtmbG93IGRpcmVjdG9yeS4gQ2hlY2sgdGhhdCB5b3VyIHdvcmtmbG93IGZpbGVzIGNvbnRhaW4gYSBgXCJ1c2Ugd29ya2Zsb3dcImAgb3IgYFwidXNlIHN0ZXBcImAgZGlyZWN0aXZlLicsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXJkZSBjb21wbGlhbmNlIHdhcm5pbmdzOiBjaGVjayBpZiB3b3JrZmxvdyBidW5kbGUgaGFzIE5vZGUuanMgaW1wb3J0c1xuICAgICAgLy8gYWxvbmdzaWRlIHNlcmRlLXJlZ2lzdGVyZWQgY2xhc3NlcyAodGhlc2Ugd2lsbCBmYWlsIGF0IHJ1bnRpbWUgaW4gdGhlIHNhbmRib3gpXG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3QuY2xhc3NlcyAmJlxuICAgICAgICBPYmplY3Qua2V5cyh3b3JrZmxvd01hbmlmZXN0LmNsYXNzZXMpLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBjb25zdCB7IGFuYWx5emVTZXJkZUNvbXBsaWFuY2UgfSA9IGF3YWl0IGltcG9ydCgnLi9zZXJkZS1jaGVja2VyLmpzJyk7XG4gICAgICAgIGNvbnN0IGJ1bmRsZVRleHQgPSBpbnRlcmltQnVuZGxlLm91dHB1dEZpbGVzWzBdLnRleHQ7XG4gICAgICAgIGNvbnN0IHNlcmRlUmVzdWx0ID0gYW5hbHl6ZVNlcmRlQ29tcGxpYW5jZSh7XG4gICAgICAgICAgc291cmNlQ29kZTogJycsXG4gICAgICAgICAgd29ya2Zsb3dDb2RlOiBidW5kbGVUZXh0LFxuICAgICAgICAgIG1hbmlmZXN0OiB3b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gRGUtZHVwZSB3YXJuaW5nczogZ3JvdXAgaWRlbnRpY2FsIGlzc3VlcyBhY3Jvc3MgY2xhc3Nlc1xuICAgICAgICBjb25zdCBpc3N1ZXNUb0NsYXNzZXMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gICAgICAgIGZvciAoY29uc3QgY2xzIG9mIHNlcmRlUmVzdWx0LmNsYXNzZXMpIHtcbiAgICAgICAgICBpZiAoIWNscy5jb21wbGlhbnQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgY2xzLmlzc3Vlcykge1xuICAgICAgICAgICAgICBsZXQgYWZmZWN0ZWRDbGFzc2VzID0gaXNzdWVzVG9DbGFzc2VzLmdldChpc3N1ZSk7XG4gICAgICAgICAgICAgIGlmICghYWZmZWN0ZWRDbGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgYWZmZWN0ZWRDbGFzc2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICAgICAgaXNzdWVzVG9DbGFzc2VzLnNldChpc3N1ZSwgYWZmZWN0ZWRDbGFzc2VzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhZmZlY3RlZENsYXNzZXMuYWRkKGNscy5jbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtpc3N1ZSwgYWZmZWN0ZWRDbGFzc2VzXSBvZiBpc3N1ZXNUb0NsYXNzZXMpIHtcbiAgICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gWy4uLmFmZmVjdGVkQ2xhc3Nlc107XG4gICAgICAgICAgY29uc3QgY2xhc3NMYWJlbCA9XG4gICAgICAgICAgICBjbGFzc05hbWVzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICA/IGBjbGFzcyBcIiR7Y2xhc3NOYW1lc1swXX1cImBcbiAgICAgICAgICAgICAgOiBgY2xhc3NlcyAke2NsYXNzTmFtZXMubWFwKChuYW1lKSA9PiBgXCIke25hbWV9XCJgKS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KGDimqAgU2VyZGUgd2FybmluZyBmb3IgJHtjbGFzc0xhYmVsfTogYCkgKyBpc3N1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgd29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUgPVxuICAgICAgICBjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSgpO1xuXG4gICAgICBjb25zdCBidW5kbGVGaW5hbCA9IGFzeW5jIChpbnRlcmltQnVuZGxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dCdW5kbGVDb2RlID0gaW50ZXJpbUJ1bmRsZTtcblxuICAgICAgICBjb25zdCB3b3JrZmxvd0Z1bmN0aW9uQ29kZSA9IGAvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgd29ya2Zsb3dFbnRyeXBvaW50IH0gZnJvbSAnd29ya2Zsb3cvcnVudGltZSc7XG5cbmNvbnN0IHdvcmtmbG93Q29kZSA9IFxcYCR7d29ya2Zsb3dCdW5kbGVDb2RlLnJlcGxhY2UoL1tcXFxcYCRdL2csICdcXFxcJCYnKX1cXGA7XG5cbmV4cG9ydCBjb25zdCBQT1NUID0gd29ya2Zsb3dFbnRyeXBvaW50KHdvcmtmbG93Q29kZSR7d29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGV9KTtgO1xuXG4gICAgICAgIC8vIHdlIHNraXAgdGhlIGZpbmFsIGJ1bmRsaW5nIHN0ZXAgZm9yIE5leHQuanMgc28gaXQgY2FuIGJ1bmRsZSBpdHNlbGZcbiAgICAgICAgaWYgKCFidW5kbGVGaW5hbE91dHB1dCkge1xuICAgICAgICAgIGlmICghb3V0ZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhcmlhbnQ6IG1pc3Npbmcgb3V0ZmlsZSBmb3Igd29ya2Zsb3cgYnVuZGxlYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEVuc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICAgICAgICBjb25zdCBvdXRwdXREaXIgPSBkaXJuYW1lKG91dGZpbGUpO1xuICAgICAgICAgIGF3YWl0IG1rZGlyKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgICAgICAvLyBBdG9taWMgd3JpdGU6IHdyaXRlIHRvIHRlbXAgZmlsZSB0aGVuIHJlbmFtZSB0byBwcmV2ZW50XG4gICAgICAgICAgLy8gZmlsZSB3YXRjaGVycyBmcm9tIHJlYWRpbmcgcGFydGlhbCBmaWxlIGR1cmluZyB3cml0ZVxuICAgICAgICAgIGNvbnN0IHRlbXBQYXRoID0gYCR7b3V0ZmlsZX0uJHtyYW5kb21VVUlEKCl9LnRtcGA7XG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRlbXBQYXRoLCB3b3JrZmxvd0Z1bmN0aW9uQ29kZSk7XG4gICAgICAgICAgYXdhaXQgcmVuYW1lKHRlbXBQYXRoLCBvdXRmaWxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidW5kbGVTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIE5vdyBidW5kbGUgdGhpcyBzbyB3ZSBjYW4gcmVzb2x2ZSB0aGUgQHdvcmtmbG93L2NvcmUgZGVwZW5kZW5jeVxuICAgICAgICAvLyB3ZSBjb3VsZCByZW1vdmUgdGhpcyBpZiB3ZSBkbyBuZnQgdHJhY2luZyBvciBzaW1pbGFyIGluc3RlYWRcbiAgICAgICAgY29uc3QgZmluYWxFc21SZXF1aXJlQmFubmVyID0gdGhpcy5nZXRFc21SZXF1aXJlQmFubmVyKGZvcm1hdCk7XG4gICAgICAgIGNvbnN0IGZpbmFsV29ya2Zsb3dSZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgICAgICBiYW5uZXI6IHtcbiAgICAgICAgICAgIGpzOiBgLy8gYmlvbWUtaWdub3JlLWFsbCBsaW50OiBnZW5lcmF0ZWQgZmlsZVxcbi8qIGVzbGludC1kaXNhYmxlICovXFxuJHtmaW5hbEVzbVJlcXVpcmVCYW5uZXJ9YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0ZGluOiB7XG4gICAgICAgICAgICBjb250ZW50czogd29ya2Zsb3dGdW5jdGlvbkNvZGUsXG4gICAgICAgICAgICByZXNvbHZlRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0ZmlsZSxcbiAgICAgICAgICAvLyBTb3VyY2UgbWFwcyBmb3IgdGhlIGZpbmFsIHdvcmtmbG93IGJ1bmRsZSB3cmFwcGVyIChub3QgaW1wb3J0YW50IHNpbmNlIHRoaXMgY29kZVxuICAgICAgICAgIC8vIGRvZXNuJ3QgcnVuIGluIHRoZSBWTSAtIG9ubHkgdGhlIGludGVybWVkaWF0ZSBidW5kbGUgc291cmNlbWFwIGlzIHJlbGV2YW50KVxuICAgICAgICAgIHNvdXJjZW1hcDogdGhpcy5yZXNvbHZlU291cmNlbWFwKEVNSVRfU09VUkNFTUFQU19GT1JfREVCVUdHSU5HKSxcbiAgICAgICAgICBhYnNXb3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICAgIHdyaXRlOiB0cnVlLFxuICAgICAgICAgIGtlZXBOYW1lczogdHJ1ZSxcbiAgICAgICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgICAgIGV4dGVybmFsOiBbJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5J10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nRXNidWlsZE1lc3NhZ2VzKFxuICAgICAgICAgIGZpbmFsV29ya2Zsb3dSZXN1bHQsXG4gICAgICAgICAgJ2ZpbmFsIHdvcmtmbG93IGJ1bmRsZScsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdXBwcmVzc1dhcm5pbmdzOiB0aGlzLmNvbmZpZy5zdXBwcmVzc0NyZWF0ZVdvcmtmbG93c0J1bmRsZVdhcm5pbmdzLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sb2dDcmVhdGVXb3JrZmxvd3NCdW5kbGVJbmZvKFxuICAgICAgICAgICdDcmVhdGVkIGZpbmFsIHdvcmtmbG93IGJ1bmRsZScsXG4gICAgICAgICAgYCR7RGF0ZS5ub3coKSAtIGJ1bmRsZVN0YXJ0VGltZX1tc2BcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnRlcmltQnVuZGxlVGV4dCA9IGludGVyaW1CdW5kbGUub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICAgIGF3YWl0IGJ1bmRsZUZpbmFsKGludGVyaW1CdW5kbGVUZXh0KTtcblxuICAgICAgaWYgKGtlZXBJbnRlcmltQnVuZGxlQ29udGV4dCkge1xuICAgICAgICBzaG91bGREaXNwb3NlSW50ZXJpbUJ1bmRsZUN0eCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hbmlmZXN0OiB3b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgIGludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgYnVuZGxlRmluYWwsXG4gICAgICAgICAgaW50ZXJpbUJ1bmRsZVRleHQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBtYW5pZmVzdDogd29ya2Zsb3dNYW5pZmVzdCwgaW50ZXJpbUJ1bmRsZVRleHQgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2hvdWxkRGlzcG9zZUludGVyaW1CdW5kbGVDdHggPSB0cnVlO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzaG91bGREaXNwb3NlSW50ZXJpbUJ1bmRsZUN0eCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGludGVyaW1CdW5kbGVDdHguZGlzcG9zZSgpO1xuICAgICAgICB9IGNhdGNoIChkaXNwb3NlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnV2FybmluZzogRmFpbGVkIHRvIGRpc3Bvc2Ugd29ya2Zsb3cgYnVuZGxlIGNvbnRleHQnLFxuICAgICAgICAgICAgZGlzcG9zZUVycm9yXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWMjogQ3JlYXRlcyBhIGNvbWJpbmVkIGJ1bmRsZSB0aGF0IGluY2x1ZGVzIGJvdGggc3RlcCByZWdpc3RyYXRpb25zIGFuZFxuICAgKiB3b3JrZmxvdyBvcmNoZXN0cmF0aW9uIGluIGEgc2luZ2xlIHJvdXRlLiBUaGUgY29tYmluZWQgZW50cnlwb2ludCBleGVjdXRlc1xuICAgKiBzdGVwcyBpbmxpbmUgd2hlbiBwb3NzaWJsZSwgcmVkdWNpbmcgZnVuY3Rpb24gaW52b2NhdGlvbnMgYW5kIHF1ZXVlIG92ZXJoZWFkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCByZXVzZXMgY3JlYXRlU3RlcHNCdW5kbGUgKGZvciBzdGVwIHJlZ2lzdHJhdGlvbnMpIGFuZFxuICAgKiBjcmVhdGVXb3JrZmxvd3NCdW5kbGUgKGZvciB3b3JrZmxvdyBWTSBjb2RlKSwgdGhlbiBjb21iaW5lcyB0aGVtIGludG9cbiAgICogYSBzaW5nbGUgcm91dGUgZmlsZSB1c2luZyB3b3JrZmxvd0VudHJ5cG9pbnQoKS5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVDb21iaW5lZEJ1bmRsZSh7XG4gICAgaW5wdXRGaWxlcyxcbiAgICBzdGVwc091dGZpbGUsXG4gICAgZmxvd091dGZpbGUsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgYnVuZGxlRmluYWxPdXRwdXQgPSB0cnVlLFxuICAgIHRzY29uZmlnUGF0aCxcbiAgICBleHRlcm5hbGl6ZU5vblN0ZXBzLFxuICAgIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXMsXG4gICAgZGlzY292ZXJlZEVudHJpZXMsXG4gIH06IHtcbiAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICAvKiogT3V0cHV0IHBhdGggZm9yIHRoZSBzdGVwIHJlZ2lzdHJhdGlvbnMgYnVuZGxlIChzaWRlIGVmZmVjdHMgb25seSkgKi9cbiAgICBzdGVwc091dGZpbGU6IHN0cmluZztcbiAgICAvKiogT3V0cHV0IHBhdGggZm9yIHRoZSBjb21iaW5lZCByb3V0ZSBmaWxlICovXG4gICAgZmxvd091dGZpbGU6IHN0cmluZztcbiAgICBmb3JtYXQ/OiAnY2pzJyB8ICdlc20nO1xuICAgIGJ1bmRsZUZpbmFsT3V0cHV0PzogYm9vbGVhbjtcbiAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgZXh0ZXJuYWxpemVOb25TdGVwcz86IGJvb2xlYW47XG4gICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gICAgZGlzY292ZXJlZEVudHJpZXM/OiBEaXNjb3ZlcmVkRW50cmllcztcbiAgfSk6IFByb21pc2U8e1xuICAgIG1hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0O1xuICAgIHN0ZXBzQ29udGV4dD86IGVzYnVpbGQuQnVpbGRDb250ZXh0O1xuICAgIGludGVyaW1CdW5kbGVDdHg/OiBlc2J1aWxkLkJ1aWxkQ29udGV4dDtcbiAgICBidW5kbGVGaW5hbD86IChpbnRlcmltQnVuZGxlUmVzdWx0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIH0+IHtcbiAgICAvLyAxLiBCdWlsZCBzdGVwIHJlZ2lzdHJhdGlvbnMgYnVuZGxlICh1c2VkIGFzIHNlcGFyYXRlIGZpbGUgZm9yXG4gICAgLy8gYnVuZGxlRmluYWxPdXRwdXQ6IGZhbHNlLCBvciByZWFkIGJhY2sgZm9yIGlubGluZSBjb250ZW50IHdoZW4gdHJ1ZSlcbiAgICBjb25zdCB7IGNvbnRleHQ6IHN0ZXBzQ29udGV4dCwgbWFuaWZlc3Q6IHN0ZXBzTWFuaWZlc3QgfSA9XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVN0ZXBzQnVuZGxlKHtcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgb3V0ZmlsZTogc3RlcHNPdXRmaWxlLFxuICAgICAgICAvLyBXaGVuIGJ1bmRsZUZpbmFsT3V0cHV0IGlzIHRydWUsIHVzZSBFU00gZm9yIHRoZSBzdGVwcyBidW5kbGVcbiAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgZmluYWwgb3V0cHV0IGZvcm1hdC4gVGhlIGZpbmFsIGVzYnVpbGQgcGFzc1xuICAgICAgICAvLyBjb252ZXJ0cyBldmVyeXRoaW5nIHRvIHRoZSB0YXJnZXQgZm9ybWF0LiBVc2luZyBDSlMgaGVyZSBjYXVzZXNcbiAgICAgICAgLy8gYSBtb2R1bGUuZXhwb3J0cyBjb2xsaXNpb246IHRoZSBzdGVwcyBidW5kbGUncyB0b3AtbGV2ZWxcbiAgICAgICAgLy8gbW9kdWxlLmV4cG9ydHMgb3ZlcndyaXRlcyB0aGUgY29tYmluZWQgcm91dGUncyBtb2R1bGUuZXhwb3J0c1xuICAgICAgICAvLyB3aGVuIGVzYnVpbGQgaW5saW5lcyB0aGUgc3RlcHMgd2l0aG91dCBhIF9fY29tbW9uSlMgd3JhcHBlci5cbiAgICAgICAgZm9ybWF0OiBidW5kbGVGaW5hbE91dHB1dCA/ICdlc20nIDogZm9ybWF0LFxuICAgICAgICBleHRlcm5hbGl6ZU5vblN0ZXBzLFxuICAgICAgICBidW5kbGVUcmFuc2l0aXZlTG9jYWxTdGVwRGVwZW5kZW5jaWVzLFxuICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgICAgICAvLyBTa2lwIHRoZSBjcmVhdGVSZXF1aXJlIGJhbm5lciBoZXJlIOKAlCB3aGVuIGJ1bmRsZUZpbmFsT3V0cHV0IGlzIHRydWVcbiAgICAgICAgLy8gdGhlIG91dGVyIGVzYnVpbGQgcGFzcyB3aWxsIGlubGluZSB0aGlzIGJ1bmRsZSBhbmQgYWRkIGl0cyBvd25cbiAgICAgICAgLy8gYmFubmVyLiBFbWl0dGluZyBpdCB0d2ljZSBkZWNsYXJlcyBfX2NyZWF0ZVJlcXVpcmUgdHdpY2UuXG4gICAgICAgIHNraXBFc21SZXF1aXJlQmFubmVyOiBidW5kbGVGaW5hbE91dHB1dCxcbiAgICAgIH0pO1xuXG4gICAgLy8gMi4gQnVpbGQgd29ya2Zsb3cgVk0gY29kZVxuICAgIGNvbnN0IHRlbXBXb3JrZmxvd091dGZpbGUgPSBgJHtmbG93T3V0ZmlsZX0uX193Zl90bXAuanNgO1xuICAgIGNvbnN0IHdvcmtmbG93c1Jlc3VsdCA9IGF3YWl0IHRoaXMuY3JlYXRlV29ya2Zsb3dzQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBvdXRmaWxlOiB0ZW1wV29ya2Zsb3dPdXRmaWxlLFxuICAgICAgZm9ybWF0LFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IGZhbHNlLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB3b3JrZmxvd1ZNQ29kZSA9IHdvcmtmbG93c1Jlc3VsdC5pbnRlcmltQnVuZGxlVGV4dDtcbiAgICBpZiAoIXdvcmtmbG93Vk1Db2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyZWF0ZVdvcmtmbG93c0J1bmRsZSBkaWQgbm90IHJldHVybiBpbnRlcmltQnVuZGxlVGV4dCcpO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwIHRoZSB3cmFwcGVyIGZpbGVcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB1bmxpbmsgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuICAgICAgYXdhaXQgdW5saW5rKHRlbXBXb3JrZmxvd091dGZpbGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIGNsZWFudXAgZXJyb3JzXG4gICAgfVxuXG4gICAgLy8gMy4gR2VuZXJhdGUgY29tYmluZWQgcm91dGUgZmlsZVxuICAgIGNvbnN0IHN0ZXBzUmVsYXRpdmVQYXRoID0gJy4vJyArIGJhc2VuYW1lKHN0ZXBzT3V0ZmlsZSkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgIGNvbnN0IGVzY2FwZWRWTUNvZGUgPSB3b3JrZmxvd1ZNQ29kZS5yZXBsYWNlKC9bXFxcXGAkXS9nLCAnXFxcXCQmJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUgPSBjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSgpO1xuXG4gICAgY29uc3QgY29tYmluZWRGdW5jdGlvbkNvZGUgPSBgLy8gYmlvbWUtaWdub3JlLWFsbCBsaW50OiBnZW5lcmF0ZWQgZmlsZVxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IF9fc3RlcHNfcmVnaXN0ZXJlZCB9IGZyb20gJyR7c3RlcHNSZWxhdGl2ZVBhdGh9JztcbmltcG9ydCB7IHdvcmtmbG93RW50cnlwb2ludCB9IGZyb20gJ3dvcmtmbG93L3J1bnRpbWUnO1xuXG4vLyBQcmV2ZW50IHJvbGx1cCBmcm9tIHRyZWUtc2hha2luZyB0aGUgc3RlcHMgc2lkZS1lZmZlY3QgaW1wb3J0XG52b2lkIF9fc3RlcHNfcmVnaXN0ZXJlZDtcblxuY29uc3Qgd29ya2Zsb3dDb2RlID0gXFxgJHtlc2NhcGVkVk1Db2RlfVxcYDtcblxuZXhwb3J0IGNvbnN0IFBPU1QgPSB3b3JrZmxvd0VudHJ5cG9pbnQod29ya2Zsb3dDb2RlJHt3b3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZX0pO2A7XG5cbiAgICBpZiAoIWJ1bmRsZUZpbmFsT3V0cHV0KSB7XG4gICAgICAvLyBXcml0ZSBkaXJlY3RseSAoTmV4dC5qcyB3aWxsIGJ1bmRsZSlcbiAgICAgIGNvbnN0IHRlbXBQYXRoID0gYCR7Zmxvd091dGZpbGV9LiR7cmFuZG9tVVVJRCgpfS50bXBgO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHRlbXBQYXRoLCBjb21iaW5lZEZ1bmN0aW9uQ29kZSk7XG4gICAgICBhd2FpdCByZW5hbWUodGVtcFBhdGgsIGZsb3dPdXRmaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQnVuZGxlIHRoZSBjb21iaW5lZCBjb2RlIGZvciBzdGFuZGFsb25lIHVzZVxuICAgICAgY29uc3QgYnVuZGxlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHsgYmFubmVyOiBpbXBvcnRNZXRhQmFubmVyLCBkZWZpbmU6IGltcG9ydE1ldGFEZWZpbmUgfSA9XG4gICAgICAgIHRoaXMuZ2V0Q2pzSW1wb3J0TWV0YVBvbHlmaWxsKGZvcm1hdCk7XG4gICAgICAvLyBFU00gYmFubmVyIHByb3ZpZGVzIGByZXF1aXJlYCB2aWEgY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpIHNvXG4gICAgICAvLyBDSlMgZGVwZW5kZW5jaWVzIHRoYXQgY2FsbCByZXF1aXJlKCkgZm9yIE5vZGUuanMgYnVpbHRpbnMga2VlcCB3b3JraW5nXG4gICAgICAvLyBpbiB0aGUgRVNNIG91dHB1dCBwcm9kdWNlZCBieSBidW5kbGVGaW5hbE91dHB1dDogdHJ1ZS5cbiAgICAgIGNvbnN0IGZpbmFsRXNtUmVxdWlyZUJhbm5lciA9IHRoaXMuZ2V0RXNtUmVxdWlyZUJhbm5lcihmb3JtYXQpO1xuICAgICAgY29uc3QgZmluYWxSZXN1bHQgPSBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgICAgYmFubmVyOiB7XG4gICAgICAgICAganM6IGAvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXFxuLyogZXNsaW50LWRpc2FibGUgKi9cXG4ke2ltcG9ydE1ldGFCYW5uZXJ9JHtmaW5hbEVzbVJlcXVpcmVCYW5uZXJ9YCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RkaW46IHtcbiAgICAgICAgICBjb250ZW50czogY29tYmluZWRGdW5jdGlvbkNvZGUsXG4gICAgICAgICAgcmVzb2x2ZURpcjogZGlybmFtZShmbG93T3V0ZmlsZSksXG4gICAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICAgIGxvYWRlcjogJ2pzJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3V0ZmlsZTogZmxvd091dGZpbGUsXG4gICAgICAgIGFic1dvcmtpbmdEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICB3cml0ZTogdHJ1ZSxcbiAgICAgICAga2VlcE5hbWVzOiB0cnVlLFxuICAgICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgICBkZWZpbmU6IGltcG9ydE1ldGFEZWZpbmUsXG4gICAgICAgIGV4dGVybmFsOiBbJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5J10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nRXNidWlsZE1lc3NhZ2VzKGZpbmFsUmVzdWx0LCAnY29tYmluZWQgYnVuZGxlJywgdHJ1ZSk7XG4gICAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICAgJ0NyZWF0ZWQgY29tYmluZWQgYnVuZGxlJyxcbiAgICAgICAgYCR7RGF0ZS5ub3coKSAtIGJ1bmRsZVN0YXJ0VGltZX1tc2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgbWFuaWZlc3RzXG4gICAgY29uc3QgbWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3QgPSB7XG4gICAgICAuLi5zdGVwc01hbmlmZXN0LFxuICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgIC4uLnN0ZXBzTWFuaWZlc3Qud29ya2Zsb3dzLFxuICAgICAgICAuLi53b3JrZmxvd3NSZXN1bHQubWFuaWZlc3Qud29ya2Zsb3dzLFxuICAgICAgfSxcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgLi4uc3RlcHNNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAuLi53b3JrZmxvd3NSZXN1bHQubWFuaWZlc3QuY2xhc3NlcyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBidW5kbGVGaW5hbCBmb3Igd2F0Y2ggbW9kZSB0aGF0IHVzZXMgd29ya2Zsb3dFbnRyeXBvaW50XG4gICAgY29uc3QgY29tYmluZWRCdW5kbGVGaW5hbCA9IGFzeW5jIChpbnRlcmltQnVuZGxlVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBlc2NhcGVkID0gaW50ZXJpbUJ1bmRsZVRleHQucmVwbGFjZSgvW1xcXFxgJF0vZywgJ1xcXFwkJicpO1xuICAgICAgY29uc3Qgd29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUgPVxuICAgICAgICBjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSgpO1xuICAgICAgY29uc3QgY29kZSA9IGAvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgX19zdGVwc19yZWdpc3RlcmVkIH0gZnJvbSAnJHtzdGVwc1JlbGF0aXZlUGF0aH0nO1xuaW1wb3J0IHsgd29ya2Zsb3dFbnRyeXBvaW50IH0gZnJvbSAnd29ya2Zsb3cvcnVudGltZSc7XG5cbnZvaWQgX19zdGVwc19yZWdpc3RlcmVkO1xuXG5jb25zdCB3b3JrZmxvd0NvZGUgPSBcXGAke2VzY2FwZWR9XFxgO1xuXG5leHBvcnQgY29uc3QgUE9TVCA9IHdvcmtmbG93RW50cnlwb2ludCh3b3JrZmxvd0NvZGUke3dvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlfSk7YDtcblxuICAgICAgY29uc3Qgb3V0cHV0RGlyID0gZGlybmFtZShmbG93T3V0ZmlsZSk7XG4gICAgICBhd2FpdCBta2RpcihvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29uc3QgdGVtcFBhdGggPSBgJHtmbG93T3V0ZmlsZX0uJHtyYW5kb21VVUlEKCl9LnRtcGA7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUodGVtcFBhdGgsIGNvZGUpO1xuICAgICAgYXdhaXQgcmVuYW1lKHRlbXBQYXRoLCBmbG93T3V0ZmlsZSk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy53YXRjaCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIHN0ZXBzQ29udGV4dCxcbiAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogd29ya2Zsb3dzUmVzdWx0LmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgIGJ1bmRsZUZpbmFsOiBjb21iaW5lZEJ1bmRsZUZpbmFsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBtYW5pZmVzdCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGllbnQgbGlicmFyeSBidW5kbGUgZm9yIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAgICogVGhlIGNsaWVudCBsaWJyYXJ5IGFsbG93cyBpbXBvcnRpbmcgYW5kIGNhbGxpbmcgd29ya2Zsb3dzIGZyb20gYXBwbGljYXRpb24gY29kZS5cbiAgICogT25seSBnZW5lcmF0ZWQgaWYgY2xpZW50QnVuZGxlUGF0aCBpcyBzcGVjaWZpZWQgaW4gY29uZmlnLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZUNsaWVudExpYnJhcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jbGllbnRCdW5kbGVQYXRoKSB7XG4gICAgICAvLyBTaWxlbnRseSBleGl0IHNpbmNlIG5vIGNsaWVudCBidW5kbGUgd2FzIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKFxuICAgICAgJ0dlbmVyYXRpbmcgYSBjbGllbnQgbGlicmFyeSBhdCcsXG4gICAgICB0aGlzLmNvbmZpZy5jbGllbnRCdW5kbGVQYXRoXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdOT1RFOiBUaGUgcmVjb21tZW5kZWQgd2F5IHRvIHVzZSB3b3JrZmxvdyB3aXRoIGEgZnJhbWV3b3JrIGxpa2UgTmV4dEpTIGlzIHVzaW5nIHRoZSBsb2FkZXIvcGx1Z2luIHdpdGggd2VicGFjay90dXJib2JwYWNrL3JvbGx1cCdcbiAgICApO1xuXG4gICAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIGNsaWVudCBidW5kbGVcbiAgICBjb25zdCBvdXRwdXREaXIgPSBkaXJuYW1lKHRoaXMuY29uZmlnLmNsaWVudEJ1bmRsZVBhdGgpO1xuICAgIGF3YWl0IG1rZGlyKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG5cbiAgICAvLyBEaXNjb3ZlciBzZXJkZSBmaWxlcyBmcm9tIHRoZSBpbnB1dCBmaWxlcycgZGVwZW5kZW5jeSB0cmVlIGZvciBjcm9zcy1jb250ZXh0IGNsYXNzIHJlZ2lzdHJhdGlvbi5cbiAgICAvLyBDbGFzc2VzIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgY2xpZW50IGJ1bmRsZSBzbyB0aGV5IGNhbiBiZSBzZXJpYWxpemVkXG4gICAgLy8gd2hlbiBwYXNzaW5nIGRhdGEgdG8gd29ya2Zsb3dzIHZpYSBzdGFydCgpIGFuZCBkZXNlcmlhbGl6ZWQgd2hlbiByZWNlaXZpbmcgd29ya2Zsb3cgcmVzdWx0cy5cbiAgICBjb25zdCB7IGRpc2NvdmVyZWRTZXJkZUZpbGVzIH0gPSBhd2FpdCB0aGlzLmRpc2NvdmVyRW50cmllcyhcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBvdXRwdXREaXJcbiAgICApO1xuXG4gICAgLy8gSWRlbnRpZnkgc2VyZGUgZmlsZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIGlucHV0RmlsZXMgKGRlZHVwbGljYXRlZClcbiAgICBjb25zdCBpbnB1dEZpbGVzTm9ybWFsaXplZCA9IG5ldyBTZXQoXG4gICAgICBpbnB1dEZpbGVzLm1hcCgoZikgPT4gZi5yZXBsYWNlKC9cXFxcL2csICcvJykpXG4gICAgKTtcbiAgICBjb25zdCBzZXJkZU9ubHlGaWxlcyA9IFsuLi5kaXNjb3ZlcmVkU2VyZGVGaWxlc10uZmlsdGVyKFxuICAgICAgKGYpID0+ICFpbnB1dEZpbGVzTm9ybWFsaXplZC5oYXMoZilcbiAgICApO1xuXG4gICAgLy8gUmUtZXhwb3J0cyBmb3IgaW5wdXQgZmlsZXMgKHVzZXIncyB3b3JrZmxvdy9zdGVwIGRlZmluaXRpb25zKS5cbiAgICAvLyBUaGVzZSBtdXN0IHVzZSB2YWxpZCByZWxhdGl2ZSBzcGVjaWZpZXJzIGJlY2F1c2Ugc29tZSBmcmFtZXdvcmtzIHBhc3NcbiAgICAvLyBnZW5lcmF0ZWQgZmlsZXMgbGlrZSBcIi5vdXRwdXQvc2VydmVyL2luZGV4Lm1qc1wiIGFzIGlucHV0IGZpbGVzLlxuICAgIGNvbnN0IHJlZXhwb3J0cyA9IGlucHV0RmlsZXNcbiAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFdvcmtpbmdEaXIgPSB0aGlzLmNvbmZpZy53b3JraW5nRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKG5vcm1hbGl6ZWRXb3JraW5nRGlyLCBmaWxlKS5yZXBsYWNlKFxuICAgICAgICAgIC9cXFxcL2csXG4gICAgICAgICAgJy8nXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4vJykgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBleHBvcnQgKiBmcm9tICcke3JlbGF0aXZlUGF0aH0nO2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgLy8gU2lkZS1lZmZlY3QgaW1wb3J0cyBmb3Igc2VyZGUgZmlsZXMgbm90IGluIGlucHV0RmlsZXMgKGZvciBjbGFzcyByZWdpc3RyYXRpb24pXG4gICAgY29uc3Qgc2VyZGVJbXBvcnRzID0gc2VyZGVPbmx5RmlsZXNcbiAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFdvcmtpbmdEaXIgPSB0aGlzLmNvbmZpZy53b3JraW5nRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKG5vcm1hbGl6ZWRXb3JraW5nRGlyLCBmaWxlKS5yZXBsYWNlKFxuICAgICAgICAgIC9cXFxcL2csXG4gICAgICAgICAgJy8nXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4vJykgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgJyR7cmVsYXRpdmVQYXRofSc7YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgICAvLyBDb21iaW5lOiBzZXJkZSBpbXBvcnRzIChmb3IgcmVnaXN0cmF0aW9uIHNpZGUgZWZmZWN0cykgKyByZS1leHBvcnRzXG4gICAgY29uc3QgZW50cnlDb250ZW50ID0gc2VyZGVJbXBvcnRzXG4gICAgICA/IGAvLyBTZXJkZSBmaWxlcyBmb3IgY3Jvc3MtY29udGV4dCBjbGFzcyByZWdpc3RyYXRpb25cXG4ke3NlcmRlSW1wb3J0c31cXG4ke3JlZXhwb3J0c31gXG4gICAgICA6IHJlZXhwb3J0cztcblxuICAgIC8vIEJ1bmRsZSB3aXRoIGVzYnVpbGQgYW5kIG91ciBjdXN0b20gU1dDIHBsdWdpblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnRTaWRlRWZmZWN0RW50cmllcyA9IGF3YWl0IHdpdGhSZWFscGF0aHMoW1xuICAgICAgLi4uaW5wdXRGaWxlcyxcbiAgICAgIC4uLnNlcmRlT25seUZpbGVzLFxuICAgIF0pO1xuICAgIGNvbnN0IGNsaWVudFJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgYmFubmVyOiB7XG4gICAgICAgIGpzOiAnLy8gYmlvbWUtaWdub3JlLWFsbCBsaW50OiBnZW5lcmF0ZWQgZmlsZVxcbi8qIGVzbGludC1kaXNhYmxlICovXFxuJyxcbiAgICAgIH0sXG4gICAgICBzdGRpbjoge1xuICAgICAgICBjb250ZW50czogZW50cnlDb250ZW50LFxuICAgICAgICByZXNvbHZlRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICBzb3VyY2VmaWxlOiAndmlydHVhbC1lbnRyeS5qcycsXG4gICAgICAgIGxvYWRlcjogJ2pzJyxcbiAgICAgIH0sXG4gICAgICBvdXRmaWxlOiB0aGlzLmNvbmZpZy5jbGllbnRCdW5kbGVQYXRoLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICBqc3g6ICdwcmVzZXJ2ZScsXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgd3JpdGU6IHRydWUsXG4gICAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICAgIGV4dGVybmFsOiBbJ0B3b3JrZmxvdy9jb3JlJ10sXG4gICAgICByZXNvbHZlRXh0ZW5zaW9uczogW1xuICAgICAgICAnLnRzJyxcbiAgICAgICAgJy50c3gnLFxuICAgICAgICAnLm10cycsXG4gICAgICAgICcuY3RzJyxcbiAgICAgICAgJy5qcycsXG4gICAgICAgICcuanN4JyxcbiAgICAgICAgJy5tanMnLFxuICAgICAgICAnLmNqcycsXG4gICAgICBdLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICBjcmVhdGVTd2NQbHVnaW4oe1xuICAgICAgICAgIG1vZGU6ICdzdGVwJyxcbiAgICAgICAgICBwcm9qZWN0Um9vdDogdGhpcy50cmFuc2Zvcm1Qcm9qZWN0Um9vdCxcbiAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290OiB0aGlzLm1vZHVsZVNwZWNpZmllclJvb3QsXG4gICAgICAgICAgc2lkZUVmZmVjdEVudHJpZXM6IG5vcm1hbGl6ZWRDbGllbnRTaWRlRWZmZWN0RW50cmllcyxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2dFc2J1aWxkTWVzc2FnZXMoY2xpZW50UmVzdWx0LCAnY2xpZW50IGxpYnJhcnkgYnVuZGxlJyk7XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVN3Y0lnbm9yZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgd2ViaG9vayBoYW5kbGVyIGJ1bmRsZSBmb3IgcmVzdW1pbmcgd29ya2Zsb3dzIHZpYSBIVFRQIGNhbGxiYWNrcy5cbiAgICpcbiAgICogQHBhcmFtIGJ1bmRsZSAtIElmIHRydWUsIGJ1bmRsZXMgZGVwZW5kZW5jaWVzIChuZWVkZWQgZm9yIEJ1aWxkIE91dHB1dCBBUEkpXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlV2ViaG9va0J1bmRsZSh7XG4gICAgb3V0ZmlsZSxcbiAgICBidW5kbGUgPSBmYWxzZSxcbiAgfToge1xuICAgIG91dGZpbGU6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dDcmVhdGVXZWJob29rQnVuZGxlSW5mbygnQ3JlYXRpbmcgd2ViaG9vayByb3V0ZScpO1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0ZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgc3RhdGljIHJvdXRlIHRoYXQgY2FsbHMgcmVzdW1lV2ViaG9va1xuICAgIC8vIFRoaXMgcm91dGUgd29ya3MgZm9yIGJvdGggTmV4dC5qcyBhbmQgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUElcbiAgICAvLyBCdW5kbGVkIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbnMgbmVlZCB3b3JsZC50cyBzdGF0aWNhbGx5XG4gICAgLy8gcHJlc2VudCBzbyBnZXRXb3JsZExhenkoKSBjYW4gdXNlIHRoZSBnbG9iYWwgZ2V0V29ybGQgcmVnaXN0cmF0aW9uXG4gICAgLy8gaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gYSBtaXNzaW5nIHNpYmxpbmcgaW1wb3J0KFwiLi93b3JsZC5qc1wiKS5cbiAgICBjb25zdCByb3V0ZUNvbnRlbnQgPSBgJHtidW5kbGUgPyBcImltcG9ydCAnd29ya2Zsb3cvcnVudGltZSc7XFxuXCIgOiAnJ31pbXBvcnQgeyByZXN1bWVXZWJob29rIH0gZnJvbSAnd29ya2Zsb3cvYXBpJztcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihyZXF1ZXN0KSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAvLyBFeHRyYWN0IHRva2VuIGZyb20gcGF0aG5hbWU6IC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rL3t0b2tlbn1cbiAgY29uc3QgcGF0aFBhcnRzID0gdXJsLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG4gIGNvbnN0IHRva2VuID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV0pO1xuXG4gIGlmICghdG9rZW4pIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdNaXNzaW5nIHRva2VuJywgeyBzdGF0dXM6IDQwMCB9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXN1bWVXZWJob29rKHRva2VuLCByZXF1ZXN0KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gVE9ETzogZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludmFsaWQgdG9rZW4gYW5kIG90aGVyIGVycm9yc1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyByZXN1bWVXZWJob29rJywgZXJyb3IpO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQwNCB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgR0VUID0gaGFuZGxlcjtcbmV4cG9ydCBjb25zdCBQT1NUID0gaGFuZGxlcjtcbmV4cG9ydCBjb25zdCBQVVQgPSBoYW5kbGVyO1xuZXhwb3J0IGNvbnN0IFBBVENIID0gaGFuZGxlcjtcbmV4cG9ydCBjb25zdCBERUxFVEUgPSBoYW5kbGVyO1xuZXhwb3J0IGNvbnN0IEhFQUQgPSBoYW5kbGVyO1xuZXhwb3J0IGNvbnN0IE9QVElPTlMgPSBoYW5kbGVyO2A7XG5cbiAgICBpZiAoIWJ1bmRsZSkge1xuICAgICAgLy8gRm9yIE5leHQuanMsIGp1c3Qgd3JpdGUgdGhlIHVuYnVuZGxlZCBmaWxlXG4gICAgICBhd2FpdCB3cml0ZUZpbGUob3V0ZmlsZSwgcm91dGVDb250ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3IgQnVpbGQgT3V0cHV0IEFQSSwgYnVuZGxlIHdpdGggZXNidWlsZCB0byByZXNvbHZlIGltcG9ydHNcblxuICAgIGNvbnN0IHdlYmhvb2tFc21SZXF1aXJlQmFubmVyID0gdGhpcy5nZXRFc21SZXF1aXJlQmFubmVyKCdlc20nKTtcbiAgICBjb25zdCB3ZWJob29rQnVuZGxlU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgYmFubmVyOiB7XG4gICAgICAgIGpzOiBgLy8gYmlvbWUtaWdub3JlLWFsbCBsaW50OiBnZW5lcmF0ZWQgZmlsZVxcbi8qIGVzbGludC1kaXNhYmxlICovXFxuJHt3ZWJob29rRXNtUmVxdWlyZUJhbm5lcn1gLFxuICAgICAgfSxcbiAgICAgIHN0ZGluOiB7XG4gICAgICAgIGNvbnRlbnRzOiByb3V0ZUNvbnRlbnQsXG4gICAgICAgIHJlc29sdmVEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgIHNvdXJjZWZpbGU6ICd3ZWJob29rLXJvdXRlLmpzJyxcbiAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgfSxcbiAgICAgIG91dGZpbGUsXG4gICAgICBhYnNXb3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAganN4OiAncHJlc2VydmUnLFxuICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICBjb25kaXRpb25zOiBbJ2ltcG9ydCcsICdtb2R1bGUnLCAnbm9kZScsICdkZWZhdWx0J10sXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgd3JpdGU6IHRydWUsXG4gICAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICAgIGtlZXBOYW1lczogdHJ1ZSxcbiAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICByZXNvbHZlRXh0ZW5zaW9uczogW1xuICAgICAgICAnLnRzJyxcbiAgICAgICAgJy50c3gnLFxuICAgICAgICAnLm10cycsXG4gICAgICAgICcuY3RzJyxcbiAgICAgICAgJy5qcycsXG4gICAgICAgICcuanN4JyxcbiAgICAgICAgJy5tanMnLFxuICAgICAgICAnLmNqcycsXG4gICAgICBdLFxuICAgICAgc291cmNlbWFwOiB0aGlzLnJlc29sdmVTb3VyY2VtYXAoRU1JVF9TT1VSQ0VNQVBTX0ZPUl9ERUJVR0dJTkcpLFxuICAgICAgbWFpbkZpZWxkczogWydtb2R1bGUnLCAnbWFpbiddLFxuICAgICAgLy8gRG9uJ3QgZXh0ZXJuYWxpemUgYW55dGhpbmcgLSBidW5kbGUgZXZlcnl0aGluZyBpbmNsdWRpbmcgd29ya2Zsb3cgcGFja2FnZXNcbiAgICAgIGV4dGVybmFsOiBbXSxcbiAgICB9KTtcblxuICAgIHRoaXMubG9nRXNidWlsZE1lc3NhZ2VzKHJlc3VsdCwgJ3dlYmhvb2sgYnVuZGxlIGNyZWF0aW9uJyk7XG4gICAgdGhpcy5sb2dDcmVhdGVXZWJob29rQnVuZGxlSW5mbyhcbiAgICAgICdDcmVhdGVkIHdlYmhvb2sgYnVuZGxlJyxcbiAgICAgIGAke0RhdGUubm93KCkgLSB3ZWJob29rQnVuZGxlU3RhcnR9bXNgXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGFja2FnZS5qc29uIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG1vZHVsZSB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVBhY2thZ2VKc29uKFxuICAgIGRpcjogc3RyaW5nLFxuICAgIHR5cGU6ICdjb21tb25qcycgfCAnbW9kdWxlJ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IHsgdHlwZSB9O1xuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIGpvaW4oZGlyLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShwYWNrYWdlSnNvbiwgbnVsbCwgMilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSAudmMtY29uZmlnLmpzb24gZmlsZSBmb3IgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgZnVuY3Rpb25zLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVZjQ29uZmlnKFxuICAgIGRpcjogc3RyaW5nLFxuICAgIGNvbmZpZzoge1xuICAgICAgcnVudGltZT86IHN0cmluZztcbiAgICAgIGhhbmRsZXI/OiBzdHJpbmc7XG4gICAgICBsYXVuY2hlclR5cGU/OiBzdHJpbmc7XG4gICAgICBhcmNoaXRlY3R1cmU/OiBzdHJpbmc7XG4gICAgICBzaG91bGRBZGRIZWxwZXJzPzogYm9vbGVhbjtcbiAgICAgIHNob3VsZEFkZFNvdXJjZW1hcFN1cHBvcnQ/OiBib29sZWFuO1xuICAgICAgbWF4RHVyYXRpb24/OiBudW1iZXIgfCAnbWF4JztcbiAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzPzogQXJyYXk8e1xuICAgICAgICB0eXBlOiAncXVldWUvdjJiZXRhJztcbiAgICAgICAgdG9waWM6IHN0cmluZztcbiAgICAgICAgY29uc3VtZXI6IHN0cmluZztcbiAgICAgICAgbWF4RGVsaXZlcmllcz86IG51bWJlcjtcbiAgICAgICAgcmV0cnlBZnRlclNlY29uZHM/OiBudW1iZXI7XG4gICAgICAgIGluaXRpYWxEZWxheVNlY29uZHM/OiBudW1iZXI7XG4gICAgICB9PjtcbiAgICB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZjQ29uZmlnID0ge1xuICAgICAgcnVudGltZTogY29uZmlnLnJ1bnRpbWUgPz8gJ25vZGVqczIyLngnLFxuICAgICAgaGFuZGxlcjogY29uZmlnLmhhbmRsZXIgPz8gJ2luZGV4Lm1qcycsXG4gICAgICBsYXVuY2hlclR5cGU6IGNvbmZpZy5sYXVuY2hlclR5cGUgPz8gJ05vZGVqcycsXG4gICAgICBhcmNoaXRlY3R1cmU6IGNvbmZpZy5hcmNoaXRlY3R1cmUgPz8gJ2FybTY0JyxcbiAgICAgIHNob3VsZEFkZEhlbHBlcnM6IGNvbmZpZy5zaG91bGRBZGRIZWxwZXJzID8/IHRydWUsXG4gICAgICAuLi4oY29uZmlnLm1heER1cmF0aW9uICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBtYXhEdXJhdGlvbjogY29uZmlnLm1heER1cmF0aW9uLFxuICAgICAgfSksXG4gICAgICAuLi4oY29uZmlnLnNob3VsZEFkZFNvdXJjZW1hcFN1cHBvcnQgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIHNob3VsZEFkZFNvdXJjZW1hcFN1cHBvcnQ6IGNvbmZpZy5zaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0LFxuICAgICAgfSksXG4gICAgICAuLi4oY29uZmlnLmV4cGVyaW1lbnRhbFRyaWdnZXJzICYmIHtcbiAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IGNvbmZpZy5leHBlcmltZW50YWxUcmlnZ2VycyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKGRpciwgJy52Yy1jb25maWcuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmNDb25maWcsIG51bGwsIDIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgZGlyZWN0b3J5IGZvciBhIGZpbGUgcGF0aCBleGlzdHMsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoZmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbnN1cmVTd2NJZ25vcmVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUHJvamVjdFN3Y0dpdGlnbm9yZUVudHJ5KCk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVTd2NEaXJlY3RvcnlHaXRpZ25vcmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlUHJvamVjdFN3Y0dpdGlnbm9yZUVudHJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGdpdGlnbm9yZVBhdGggPSBqb2luKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICcuZ2l0aWdub3JlJyk7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGNvbnRlbnQgPSAnJztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShnaXRpZ25vcmVQYXRoLCAndXRmLTgnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNTd2NFbnRyeSA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKS5zb21lKChsaW5lKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0cmltbWVkID09PSAnLnN3YycgfHxcbiAgICAgICAgICB0cmltbWVkID09PSAnLnN3Yy8nIHx8XG4gICAgICAgICAgdHJpbW1lZCA9PT0gJy8uc3djJyB8fFxuICAgICAgICAgIHRyaW1tZWQgPT09ICcvLnN3Yy8nXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc1N3Y0VudHJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VwYXJhdG9yID1cbiAgICAgICAgY29udGVudC5sZW5ndGggPiAwICYmICFjb250ZW50LmVuZHNXaXRoKCdcXG4nKSA/ICdcXG4nIDogJyc7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZ2l0aWdub3JlUGF0aCwgYCR7Y29udGVudH0ke3NlcGFyYXRvcn0vLnN3Y1xcbmApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gV2UncmUgaW50ZW50aW9uYWxseSBzaWxlbnRseSBpZ25vcmluZyB0aGlzIGVycm9yIC0gdXBkYXRpbmcgLmdpdGlnbm9yZSBpc24ndCBjcml0aWNhbFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlU3djRGlyZWN0b3J5R2l0aWdub3JlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICAgIGpvaW4odGhpcy5jb25maWcud29ya2luZ0RpciwgJy5zd2MnLCAnLmdpdGlnbm9yZScpLFxuICAgICAgICAnKlxcbidcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBXZSdyZSBpbnRlbnRpb25hbGx5IHNpbGVudGx5IGlnbm9yaW5nIHRoaXMgZXJyb3IgLSBjcmVhdGluZyAuZ2l0aWdub3JlIGlzbid0IGNyaXRpY2FsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1hbmlmZXN0IHNob3VsZCBiZSBleHBvc2VkIGFzIGEgcHVibGljIEhUVFAgcm91dGUuXG4gICAqIENvbnRyb2xsZWQgYnkgdGhlIGBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1RgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBzaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUFVCTElDX01BTklGRVNUID09PSAnMSc7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHdvcmtmbG93IG1hbmlmZXN0IGRpYWdub3N0aWNzIHBhdGgsIHdoZW4gdGhpcyBidWlsZGVyIHNob3VsZFxuICAgKiBlbWl0IG9uZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXREaWFnbm9zdGljc01hbmlmZXN0UGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5kaWFnbm9zdGljc0Rpcikge1xuICAgICAgcmV0dXJuIHJlc29sdmUoXG4gICAgICAgIHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgIHRoaXMuY29uZmlnLmRpYWdub3N0aWNzRGlyLFxuICAgICAgICAnd29ya2Zsb3dzLW1hbmlmZXN0Lmpzb24nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5idWlsZFRhcmdldCA9PT0gJ3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVBhdGgoXG4gICAgICAgICcudmVyY2VsL291dHB1dC9kaWFnbm9zdGljcy93b3JrZmxvd3MtbWFuaWZlc3QuanNvbidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBzb3VyY2UgbWFwIG1vZGUgZm9yIGEgZ2l2ZW4gY2FsbCBzaXRlLiBQcmVjZWRlbmNlOlxuICAgKiBleHBsaWNpdCBgc291cmNlbWFwYCBjb25maWcgPiBgV09SS0ZMT1dfU09VUkNFTUFQYCBlbnYgdmFyID4gdGhlIGNhbGxcbiAgICogc2l0ZSdzIGRlZmF1bHQuIFJldHVybmVkIHZhbHVlIGlzIHBhc3NlZCBkaXJlY3RseSB0byBlc2J1aWxkJ3NcbiAgICogYHNvdXJjZW1hcGAgb3B0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVTb3VyY2VtYXAoZGVmYXVsdE1vZGU6IFNvdXJjZW1hcE1vZGUpOiBTb3VyY2VtYXBNb2RlIHtcbiAgICBpZiAodGhpcy5jb25maWcuc291cmNlbWFwICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmNvbmZpZy5zb3VyY2VtYXA7XG4gICAgY29uc3QgZW52TW9kZSA9IHBhcnNlU291cmNlbWFwRW52KHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCk7XG4gICAgaWYgKGVudk1vZGUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGVudk1vZGU7XG4gICAgcmV0dXJuIGRlZmF1bHRNb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlc29sdmVkIHNvdXJjZSBtYXAgbW9kZSBlbWl0cyBhbnkgc291cmNlIG1hcHMgYXQgYWxsLlxuICAgKiBVc2VkIGJ5IGNvbnN1bWVycyBsaWtlIHRoZSBWZXJjZWwgYnVpbGRlciB0byBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlXG4gICAqIHRoZSBzb3VyY2UtbWFwLXN1cHBvcnQgcnVudGltZSBzaGltIGluIGdlbmVyYXRlZCBmdW5jdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNvdXJjZW1hcHNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTb3VyY2VtYXAodHJ1ZSkgIT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtYW5pZmVzdCBKU09OIGZpbGUgY29udGFpbmluZyBzdGVwL3dvcmtmbG93L2NsYXNzIG1ldGFkYXRhXG4gICAqIGFuZCBncmFwaCBkYXRhIGZvciB2aXN1YWxpemF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbWFuaWZlc3QgSlNPTiBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBtYW5pZmVzdCBjcmVhdGlvbiBmYWlsZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTWFuaWZlc3Qoe1xuICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICBtYW5pZmVzdERpcixcbiAgICBtYW5pZmVzdCxcbiAgfToge1xuICAgIHdvcmtmbG93QnVuZGxlUGF0aDogc3RyaW5nO1xuICAgIG1hbmlmZXN0RGlyOiBzdHJpbmc7XG4gICAgbWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3Q7XG4gIH0pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGJ1aWxkU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMubG9nQ3JlYXRlTWFuaWZlc3RJbmZvKCdDcmVhdGluZyBtYW5pZmVzdC4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93R3JhcGhzID0gYXdhaXQgZXh0cmFjdFdvcmtmbG93R3JhcGhzKHdvcmtmbG93QnVuZGxlUGF0aCk7XG5cbiAgICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5jb252ZXJ0U3RlcHNNYW5pZmVzdChtYW5pZmVzdC5zdGVwcyk7XG4gICAgICBjb25zdCB3b3JrZmxvd3MgPSB0aGlzLmNvbnZlcnRXb3JrZmxvd3NNYW5pZmVzdChcbiAgICAgICAgbWFuaWZlc3Qud29ya2Zsb3dzLFxuICAgICAgICB3b3JrZmxvd0dyYXBoc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLmNvbnZlcnRDbGFzc2VzTWFuaWZlc3QobWFuaWZlc3QuY2xhc3Nlcyk7XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IHsgdmVyc2lvbjogJzEuMC4wJywgc3RlcHMsIHdvcmtmbG93cywgY2xhc3NlcyB9O1xuICAgICAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5zdHJpbmdpZnkob3V0cHV0LCBudWxsLCAyKTtcblxuICAgICAgYXdhaXQgbWtkaXIobWFuaWZlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4obWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJyksIG1hbmlmZXN0SnNvbik7XG5cbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoID0gdGhpcy5nZXREaWFnbm9zdGljc01hbmlmZXN0UGF0aCgpO1xuICAgICAgaWYgKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyZWN0b3J5KGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoLCBtYW5pZmVzdEpzb24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGVwQ291bnQgPSBPYmplY3QudmFsdWVzKHN0ZXBzKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHMpID0+IGFjYyArIE9iamVjdC5rZXlzKHMpLmxlbmd0aCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdvcmtmbG93Q291bnQgPSBPYmplY3QudmFsdWVzKHdvcmtmbG93cykucmVkdWNlKFxuICAgICAgICAoYWNjLCB3KSA9PiBhY2MgKyBPYmplY3Qua2V5cyh3KS5sZW5ndGgsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb25zdCBjbGFzc0NvdW50ID0gT2JqZWN0LnZhbHVlcyhjbGFzc2VzKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGMpID0+IGFjYyArIE9iamVjdC5rZXlzKGMpLmxlbmd0aCxcbiAgICAgICAgMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5sb2dDcmVhdGVNYW5pZmVzdEluZm8oXG4gICAgICAgIGBDcmVhdGVkIG1hbmlmZXN0IHdpdGggJHtzdGVwQ291bnR9ICR7cGx1cmFsaXplKCdzdGVwJywgJ3N0ZXBzJywgc3RlcENvdW50KX0sICR7d29ya2Zsb3dDb3VudH0gJHtwbHVyYWxpemUoJ3dvcmtmbG93JywgJ3dvcmtmbG93cycsIHdvcmtmbG93Q291bnQpfSwgYW5kICR7Y2xhc3NDb3VudH0gJHtwbHVyYWxpemUoJ2NsYXNzJywgJ2NsYXNzZXMnLCBjbGFzc0NvdW50KX1gLFxuICAgICAgICBgJHtEYXRlLm5vdygpIC0gYnVpbGRTdGFydH1tc2BcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBtYW5pZmVzdEpzb247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbWFuaWZlc3Q6JyxcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRTdGVwc01hbmlmZXN0KFxuICAgIHN0ZXBzOiBXb3JrZmxvd01hbmlmZXN0WydzdGVwcyddXG4gICk6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4+ID0ge307XG4gICAgaWYgKCFzdGVwcykgcmV0dXJuIHJlc3VsdDtcblxuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBlbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhzdGVwcykpIHtcbiAgICAgIHJlc3VsdFtmaWxlUGF0aF0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICAgIHJlc3VsdFtmaWxlUGF0aF1bbmFtZV0gPSB7IHN0ZXBJZDogZGF0YS5zdGVwSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFdvcmtmbG93c01hbmlmZXN0KFxuICAgIHdvcmtmbG93czogV29ya2Zsb3dNYW5pZmVzdFsnd29ya2Zsb3dzJ10sXG4gICAgZ3JhcGhzOiBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICBSZWNvcmQ8c3RyaW5nLCB7IGdyYXBoOiB7IG5vZGVzOiBhbnlbXTsgZWRnZXM6IGFueVtdIH0gfT5cbiAgICA+XG4gICk6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgeyB3b3JrZmxvd0lkOiBzdHJpbmc7IGdyYXBoOiB7IG5vZGVzOiBhbnlbXTsgZWRnZXM6IGFueVtdIH0gfVxuICAgID5cbiAgPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgeyB3b3JrZmxvd0lkOiBzdHJpbmc7IGdyYXBoOiB7IG5vZGVzOiBhbnlbXTsgZWRnZXM6IGFueVtdIH0gfVxuICAgICAgPlxuICAgID4gPSB7fTtcbiAgICBpZiAoIXdvcmtmbG93cykgcmV0dXJuIHJlc3VsdDtcblxuICAgIC8vIEJ1aWxkIGEgbm9ybWFsaXplZCBsb29rdXAgZm9yIGdyYXBocyBzaW5jZSB0aGUgZ3JhcGggZXh0cmFjdG9yIHVzZXNcbiAgICAvLyBwYXRocyBmcm9tIHdvcmtmbG93SWQgKGUuZy4gXCIuL3dvcmtmbG93cy9oZWxsby1hZ2VudFwiKSB3aGlsZSB0aGVcbiAgICAvLyBtYW5pZmVzdCB1c2VzIHNvdXJjZSBmaWxlIHBhdGhzIChlLmcuIFwid29ya2Zsb3dzL2hlbGxvLWFnZW50LnRzXCIpLlxuICAgIC8vIE5vcm1hbGl6ZSBieSBzdHJpcHBpbmcgbGVhZGluZyBcIi4vXCIgYW5kIGZpbGUgZXh0ZW5zaW9ucy5cbiAgICBjb25zdCBub3JtYWxpemVkR3JhcGhzID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIFJlY29yZDxzdHJpbmcsIHsgZ3JhcGg6IHsgbm9kZXM6IGFueVtdOyBlZGdlczogYW55W10gfSB9PlxuICAgID4oKTtcbiAgICBmb3IgKGNvbnN0IFtncmFwaFBhdGgsIGdyYXBoRW50cmllc10gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGhzKSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGdyYXBoUGF0aFxuICAgICAgICAucmVwbGFjZSgvXlxcLlxcLy8sICcnKVxuICAgICAgICAucmVwbGFjZSgvXFwuW14vLl0rJC8sICcnKTtcbiAgICAgIG5vcm1hbGl6ZWRHcmFwaHMuc2V0KG5vcm1hbGl6ZWQsIGdyYXBoRW50cmllcyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKHdvcmtmbG93cykpIHtcbiAgICAgIHJlc3VsdFtmaWxlUGF0aF0gPSB7fTtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgbWFuaWZlc3QgZmlsZSBwYXRoIGZvciBsb29rdXBcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlUGF0aCA9IGZpbGVQYXRoXG4gICAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpO1xuXG4gICAgICBjb25zdCBncmFwaEVudHJpZXMgPVxuICAgICAgICBncmFwaHNbZmlsZVBhdGhdIHx8IG5vcm1hbGl6ZWRHcmFwaHMuZ2V0KG5vcm1hbGl6ZWRGaWxlUGF0aCk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICAgIHJlc3VsdFtmaWxlUGF0aF1bbmFtZV0gPSB7XG4gICAgICAgICAgd29ya2Zsb3dJZDogZGF0YS53b3JrZmxvd0lkLFxuICAgICAgICAgIGdyYXBoOiBncmFwaEVudHJpZXM/LltuYW1lXT8uZ3JhcGggfHwgeyBub2RlczogW10sIGVkZ2VzOiBbXSB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0Q2xhc3Nlc01hbmlmZXN0KFxuICAgIGNsYXNzZXM6IFdvcmtmbG93TWFuaWZlc3RbJ2NsYXNzZXMnXVxuICApOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGNsYXNzSWQ6IHN0cmluZyB9Pj4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgeyBjbGFzc0lkOiBzdHJpbmcgfT4+ID0ge307XG4gICAgaWYgKCFjbGFzc2VzKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzZXMpKSB7XG4gICAgICByZXN1bHRbZmlsZVBhdGhdID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBkYXRhXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkge1xuICAgICAgICByZXN1bHRbZmlsZVBhdGhdW25hbWVdID0geyBjbGFzc0lkOiBkYXRhLmNsYXNzSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
1567
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jhc2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyx1QkFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFDTCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLG1CQUFtQixH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QUMsQ0FBQztZQUUvRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUc7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDM0IsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtpQkFDL0QsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLHNCQUFzQixDQUM1QixPQUFvQztRQUVwQyxNQUFNLE1BQU0sR0FBd0QsRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFNUIsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgcmVhbHBhdGgsIHJlbmFtZSwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBXb3JrZmxvd0J1aWxkRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGVuaGFuY2VkUmVzb2x2ZU9yaWdpbmFsIGZyb20gJ2VuaGFuY2VkLXJlc29sdmUnO1xuaW1wb3J0ICogYXMgZXNidWlsZCBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IGZpbmRVcCB9IGZyb20gJ2ZpbmQtdXAnO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gJ3RpbnlnbG9iYnknO1xuaW1wb3J0IHtcbiAgYXBwbHlTd2NUcmFuc2Zvcm0sXG4gIHR5cGUgV29ya2Zsb3dNYW5pZmVzdCxcbn0gZnJvbSAnLi9hcHBseS1zd2MtdHJhbnNmb3JtLmpzJztcbmltcG9ydCB7IGNyZWF0ZVdvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRGlzY292ZXJFbnRyaWVzUGx1Z2luIH0gZnJvbSAnLi9kaXNjb3Zlci1lbnRyaWVzLWVzYnVpbGQtcGx1Z2luLmpzJztcbmltcG9ydCB7IGdldEVzYnVpbGRUc2NvbmZpZ09wdGlvbnMgfSBmcm9tICcuL2VzYnVpbGQtdHNjb25maWcuanMnO1xuaW1wb3J0IHtcbiAgZ2V0SW1wb3J0UGF0aCxcbiAgcmVzb2x2ZU1vZHVsZVNwZWNpZmllcixcbiAgc3RyaXBQYWNrYWdlVmVyc2lvbixcbn0gZnJvbSAnLi9tb2R1bGUtc3BlY2lmaWVyLmpzJztcbmltcG9ydCB7IGNyZWF0ZU5vZGVNb2R1bGVFcnJvclBsdWdpbiB9IGZyb20gJy4vbm9kZS1tb2R1bGUtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgY3JlYXRlUHNldWRvUGFja2FnZVBsdWdpbiB9IGZyb20gJy4vcHNldWRvLXBhY2thZ2UtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgY3JlYXRlU3djUGx1Z2luIH0gZnJvbSAnLi9zd2MtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyB9IGZyb20gJy4vdHJhbnNmb3JtLXV0aWxzLmpzJztcbmltcG9ydCB0eXBlIHsgU291cmNlbWFwTW9kZSwgV29ya2Zsb3dDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGV4dHJhY3RXb3JrZmxvd0dyYXBocyB9IGZyb20gJy4vd29ya2Zsb3dzLWV4dHJhY3Rvci5qcyc7XG5cbmNvbnN0IGVuaGFuY2VkUmVzb2x2ZSA9IHByb21pc2lmeShlbmhhbmNlZFJlc29sdmVPcmlnaW5hbCk7XG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG4vKipcbiAqIExlZ2FjeSBvcHQtaW4gZm9yIHNvdXJjZSBtYXBzIG9uIHRoZSBmaW5hbCB3b3JrZmxvdyB3cmFwcGVyICsgd2ViaG9va1xuICogYnVuZGxlcyAod2hpY2ggZGVmYXVsdCB0byBvZmYsIHVubGlrZSB0aGUgc3RlcC9pbnRlcmltIHdvcmtmbG93IGJ1bmRsZXNcbiAqIHRoYXQgZGVmYXVsdCB0byBpbmxpbmUpLiBTdXBlcnNlZGVkIGJ5IHRoZSBgc291cmNlbWFwYCBjb25maWcgb3B0aW9uIGFuZFxuICogdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgIGVudmlyb25tZW50IHZhcmlhYmxlOyBrZXB0IGZvciBiYWNrLWNvbXBhdC5cbiAqL1xuY29uc3QgRU1JVF9TT1VSQ0VNQVBTX0ZPUl9ERUJVR0dJTkcgPVxuICBwcm9jZXNzLmVudi5XT1JLRkxPV19FTUlUX1NPVVJDRU1BUFNfRk9SX0RFQlVHR0lORyA9PT0gJzEnO1xuXG5jb25zdCBWQUxJRF9TT1VSQ0VNQVBfU1RSSU5HUyA9IG5ldyBTZXQoW1xuICAnaW5saW5lJyxcbiAgJ2xpbmtlZCcsXG4gICdleHRlcm5hbCcsXG4gICdib3RoJyxcbl0pO1xuXG4vKipcbiAqIFBhcnNlIHRoZSB2YWx1ZSBvZiB0aGUgYFdPUktGTE9XX1NPVVJDRU1BUGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaW50byBhXG4gKiBgU291cmNlbWFwTW9kZWAuIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudiB2YXIgaXMgdW5zZXQsIGVtcHR5LCBvclxuICogdW5yZWNvZ25pemVkIChhIHdhcm5pbmcgaXMgZW1pdHRlZCBmb3IgdW5yZWNvZ25pemVkIHZhbHVlcykuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU291cmNlbWFwRW52KFxuICB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBTb3VyY2VtYXBNb2RlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgY2FzZSAnMCc6XG4gICAgY2FzZSAnZmFsc2UnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgJzEnOlxuICAgIGNhc2UgJ3RydWUnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChWQUxJRF9TT1VSQ0VNQVBfU1RSSU5HUy5oYXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBhcyBTb3VyY2VtYXBNb2RlO1xuICAgICAgfVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgSWdub3JpbmcgdW5yZWNvZ25pemVkIFdPUktGTE9XX1NPVVJDRU1BUD0ke3ZhbHVlfS4gYCArXG4gICAgICAgICAgYEV4cGVjdGVkIG9uZSBvZjogdHJ1ZSwgZmFsc2UsIDAsIDEsIGlubGluZSwgbGlua2VkLCBleHRlcm5hbCwgYm90aC5gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbiBhcnJheSBvZiBmaWxlIHBhdGhzIGJ5IGFwcGVuZGluZyB0aGUgYHJlYWxwYXRoKClgIG9mIGVhY2ggZW50cnlcbiAqICh0byBoYW5kbGUgc3ltbGlua3MsIGUuZy4gcG5wbS93b3Jrc3BhY2UgbGF5b3V0cykgYW5kIGRlZHVwbGljYXRpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhSZWFscGF0aHMoZW50cmllczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHJldHVybiBBcnJheS5mcm9tKFxuICAgIG5ldyBTZXQoXG4gICAgICAoXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGVudHJpZXMubWFwKGFzeW5jIChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZWFscGF0aChlbnRyeSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZCA/IFtlbnRyeSwgcmVzb2x2ZWRdIDogW2VudHJ5XTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApLmZsYXQoKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBDYW5vbmljYWwgXCJ3aGF0IG1vZHVsZSBkb2VzIHRoaXMgZmlsZSByZXByZXNlbnQ/XCIga2V5IHVzZWQgdG8gZGVkdXBlXG4gKiB2aXJ0dWFsLWVudHJ5IGltcG9ydHMuXG4gKlxuICogSWYgdGhlIGZpbGUgcmVzb2x2ZXMgdG8gYSByZWFsIHBhY2thZ2Ugc3BlY2lmaWVyIChgd29ya2Zsb3cvaW50ZXJuYWwvYnVpbHRpbnNgLFxuICogYEBpbnRlcm5hbC9hZ2VudC9zZXJ2ZXJgLCBldGMuKSwgd2UgcmV0dXJuIHRoZSBiYXJlIHNwZWNpZmllciDigJQgdmVyc2lvblxuICogc3RyaXBwZWQg4oCUIGJlY2F1c2UgZXNidWlsZCdzIHBhY2thZ2UgcmVzb2x1dGlvbiB3aWxsIGNvbGxhcHNlIGFsbFxuICogaW1wb3J0ZXJzIG9mIHRoYXQgc3BlY2lmaWVyIHRvIHRoZSBzYW1lIHBoeXNpY2FsIG1vZHVsZSByZWdhcmRsZXNzIG9mXG4gKiB3aGljaCBvbi1kaXNrIGNvcHkgKHNyYyB2cyBkaXN0KSBhbnkgb25lIGltcG9ydGVyIHdyb3RlLlxuICpcbiAqIE90aGVyd2lzZSB3ZSBmYWxsIGJhY2sgdG8gdGhlIGFic29sdXRlIGZpbGUgcGF0aC4gRGlzdGluY3QgbG9jYWwtYXBwXG4gKiBmaWxlcyBoYXZlIGRpc3RpbmN0IHBhdGhzLCBzbyB0aGlzIHN0aWxsIGRlZHVwZXMgYSBmaWxlIGFnYWluc3QgaXRzZWxmXG4gKiAoZS5nLiBpZiBpdCBzaG93cyB1cCBpbiBib3RoIGBzdGVwRmlsZXNgIGFuZCBgc2VyZGVPbmx5RmlsZXNgKSB3aXRob3V0XG4gKiBjb25mbGF0aW5nIHVucmVsYXRlZCBmaWxlcy5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlSWRlbnRpdHlLZXkoZmlsZTogc3RyaW5nLCBtb2R1bGVTcGVjaWZpZXJSb290OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IG1vZHVsZVNwZWNpZmllciB9ID0gcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlLCBtb2R1bGVTcGVjaWZpZXJSb290KTtcbiAgaWYgKG1vZHVsZVNwZWNpZmllcikge1xuICAgIC8vIFN0cmlwIHRoZSBcIkA8dmVyc2lvbj5cIiBzdWZmaXggc28gc291cmNlIGFuZCBkaXN0IGNvcGllcyBvZiB0aGUgc2FtZVxuICAgIC8vIGV4cG9ydCBjb2xsYXBzZSB0byB0aGUgc2FtZSBrZXkuXG4gICAgcmV0dXJuIHN0cmlwUGFja2FnZVZlcnNpb24obW9kdWxlU3BlY2lmaWVyKTtcbiAgfVxuICByZXR1cm4gZmlsZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJlZEVudHJpZXMge1xuICBkaXNjb3ZlcmVkU3RlcHM6IFNldDxzdHJpbmc+O1xuICBkaXNjb3ZlcmVkV29ya2Zsb3dzOiBTZXQ8c3RyaW5nPjtcbiAgZGlzY292ZXJlZFNlcmRlRmlsZXM6IFNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHdvcmtmbG93IGJ1aWxkZXJzLiBQcm92aWRlcyBjb21tb24gYnVpbGQgbG9naWMgZm9yIHRyYW5zZm9ybWluZ1xuICogd29ya2Zsb3cgc291cmNlIGZpbGVzIGludG8gZGVwbG95YWJsZSBidW5kbGVzIHVzaW5nIGVzYnVpbGQgYW5kIFNXQy5cbiAqXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBidWlsZCgpIG1ldGhvZCB0byBkZWZpbmUgYnVpbGRlci1zcGVjaWZpYyBsb2dpYy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VCdWlsZGVyIHtcbiAgcHJvdGVjdGVkIGNvbmZpZzogV29ya2Zsb3dDb25maWc7XG5cbiAgLyoqXG4gICAqIFRyYWNrcyB3aGljaCBleHRlcm5hbCBwYWNrYWdlcyBoYXZlIGFscmVhZHkgYmVlbiB3YXJuZWQgYWJvdXRcbiAgICogdG8gYXZvaWQgZHVwbGljYXRlIHdhcm5pbmdzIGFjcm9zcyBtdWx0aXBsZSBkaXNjb3ZlckVudHJpZXMoKSBjYWxscy5cbiAgICovXG4gIHByaXZhdGUgd2FybmVkRXh0ZXJuYWxQYWNrYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogV29ya2Zsb3dDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNmb3JtUHJvamVjdFJvb3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucHJvamVjdFJvb3QgfHwgdGhpcy5jb25maWcud29ya2luZ0RpcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgbW9kdWxlU3BlY2lmaWVyUm9vdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5tb2R1bGVTcGVjaWZpZXJSb290IHx8IHRoaXMudHJhbnNmb3JtUHJvamVjdFJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBpbmZvcm1hdGlvbmFsIEJhc2VCdWlsZGVyIGxvZ3Mgc2hvdWxkIGJlIHByaW50ZWQuXG4gICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgdG8gc2lsZW5jZSBwcm9ncmVzcyBsb2dzIHdoaWxlIGtlZXBpbmcgd2FybmluZ3MvZXJyb3JzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBzaG91bGRMb2dCYXNlQnVpbGRlckluZm8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgbG9nQmFzZUJ1aWxkZXJJbmZvKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3VsZExvZ0Jhc2VCdWlsZGVySW5mbykge1xuICAgICAgY29uc29sZS5sb2coLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2dDcmVhdGVXb3JrZmxvd3NCdW5kbGVJbmZvKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcuc3VwcHJlc3NDcmVhdGVXb3JrZmxvd3NCdW5kbGVMb2dzKSB7XG4gICAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyguLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvZ0NyZWF0ZVdlYmhvb2tCdW5kbGVJbmZvKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcuc3VwcHJlc3NDcmVhdGVXZWJob29rQnVuZGxlTG9ncykge1xuICAgICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2dDcmVhdGVNYW5pZmVzdEluZm8oLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zdXBwcmVzc0NyZWF0ZU1hbmlmZXN0TG9ncykge1xuICAgICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gb3V0cHV0dGluZyBDSlMsIGVzYnVpbGQgcmVwbGFjZXMgYGltcG9ydC5tZXRhYCB3aXRoIGFuIGVtcHR5IG9iamVjdCxcbiAgICogbWFraW5nIGBpbXBvcnQubWV0YS51cmxgIChhbmQgYGltcG9ydC5tZXRhLnJlc29sdmVgKSB1bmRlZmluZWQuIFRoaXMgbWV0aG9kXG4gICAqIHJldHVybnMgYmFubmVyIGNvZGUgYW5kIGBkZWZpbmVgIGVudHJpZXMgdGhhdCBwb2x5ZmlsbCB0aGVtIHVzaW5nIENKU1xuICAgKiBlcXVpdmFsZW50cyAoYF9fZmlsZW5hbWVgLCBgcmVxdWlyZS5yZXNvbHZlYCkgc28gdXNlciBjb2RlIChlLmcuIFByaXNtYSlcbiAgICogdGhhdCByZWxpZXMgb24gYGltcG9ydC5tZXRhLnVybGAgd29ya3MgY29ycmVjdGx5IGluIGJ1bmRsZWQgQ0pTIG91dHB1dC5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q2pzSW1wb3J0TWV0YVBvbHlmaWxsKGZvcm1hdDogc3RyaW5nKToge1xuICAgIGJhbm5lcjogc3RyaW5nO1xuICAgIGRlZmluZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSB7XG4gICAgaWYgKGZvcm1hdCAhPT0gJ2NqcycpIHJldHVybiB7IGJhbm5lcjogJycsIGRlZmluZToge30gfTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFubmVyOlxuICAgICAgICAndmFyIF9faW1wb3J0X21ldGFfdXJsID0gdHlwZW9mIF9fZmlsZW5hbWUgIT09IFwidW5kZWZpbmVkXCIgPyByZXF1aXJlKFwidXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZiA6IHVuZGVmaW5lZDtcXG4nICtcbiAgICAgICAgJ3ZhciBfX2ltcG9ydF9tZXRhX3Jlc29sdmUgPSB0eXBlb2YgcmVxdWlyZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgX19maWxlbmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAnICtcbiAgICAgICAgJz8gKHMpID0+IHJlcXVpcmUoXCJ1cmxcIikucGF0aFRvRmlsZVVSTChyZXF1aXJlLnJlc29sdmUocykpLmhyZWYgOiB1bmRlZmluZWQ7XFxuJyxcbiAgICAgIGRlZmluZToge1xuICAgICAgICAnaW1wb3J0Lm1ldGEudXJsJzogJ19faW1wb3J0X21ldGFfdXJsJyxcbiAgICAgICAgJ2ltcG9ydC5tZXRhLnJlc29sdmUnOiAnX19pbXBvcnRfbWV0YV9yZXNvbHZlJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIG91dHB1dHRpbmcgZnVsbHktYnVuZGxlZCBFU00sIENKUyBkZXBlbmRlbmNpZXMgdGhhdCBjYWxsIHJlcXVpcmUoKVxuICAgKiBmb3IgTm9kZS5qcyBidWlsdGlucyAoZS5nLiBkZWJ1ZyDihpIgcmVxdWlyZSgndHR5JykpIGJyZWFrIGJlY2F1c2UgZXNidWlsZCdzXG4gICAqIENKUy10by1FU00gX19yZXF1aXJlIHNoaW0gZG9lc24ndCBoYXZlIGFjY2VzcyB0byBhIHJlYWwgcmVxdWlyZSBmdW5jdGlvbi5cbiAgICogVGhpcyBiYW5uZXIgcHJvdmlkZXMgb25lIHZpYSBjcmVhdGVSZXF1aXJlIHNvIGJ1bmRsZWQgQ0pTIGNvZGUgd29ya3MgaW4gRVNNLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFc21SZXF1aXJlQmFubmVyKGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZm9ybWF0ICE9PSAnZXNtJykgcmV0dXJuICcnO1xuICAgIHJldHVybiAnaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSBhcyBfX2NyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcXG52YXIgcmVxdWlyZSA9IF9fY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xcbic7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgdGhlIGNvbXBsZXRlIGJ1aWxkIHByb2Nlc3MgZm9yIHdvcmtmbG93cy5cbiAgICogU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIHRvIGRlZmluZSB0aGVpciBzcGVjaWZpYyBidWlsZCBzdGVwcy5cbiAgICovXG4gIGFic3RyYWN0IGJ1aWxkKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRzY29uZmlnLmpzb24vanNjb25maWcuanNvbiBmb3IgdGhlIHByb2plY3QuXG4gICAqIFVzZWQgYnkgZXNidWlsZCB0byBwcm9wZXJseSByZXNvbHZlIG1vZHVsZSBpbXBvcnRzIGR1cmluZyBidW5kbGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBmaW5kVHNDb25maWdQYXRoKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgY3dkID0gdGhpcy5jb25maWcud29ya2luZ0RpciB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHJldHVybiBmaW5kVXAoWyd0c2NvbmZpZy5qc29uJywgJ2pzY29uZmlnLmpzb24nXSwgeyBjd2QgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY292ZXJzIGFsbCBzb3VyY2UgZmlsZXMgaW4gdGhlIGNvbmZpZ3VyZWQgZGlyZWN0b3JpZXMuXG4gICAqIFNlYXJjaGVzIGZvciBUeXBlU2NyaXB0IGFuZCBKYXZhU2NyaXB0IGZpbGVzIHdoaWxlIGV4Y2x1ZGluZyBjb21tb24gYnVpbGRcbiAgICogYW5kIGRlcGVuZGVuY3kgZGlyZWN0b3JpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0SW5wdXRGaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgaWdub3JlID0gW1xuICAgICAgJyoqL25vZGVfbW9kdWxlcy8qKicsXG4gICAgICAnKiovLmdpdC8qKicsXG4gICAgICAnKiovLm5leHQvKionLFxuICAgICAgJyoqLy5uaXRyby8qKicsXG4gICAgICAnKiovLm51eHQvKionLFxuICAgICAgJyoqLy5vdXRwdXQvKionLFxuICAgICAgJyoqLy52ZXJjZWwvKionLFxuICAgICAgJyoqLy53b3JrZmxvdy1kYXRhLyoqJyxcbiAgICAgICcqKi8ud29ya2Zsb3ctdml0ZXN0LyoqJyxcbiAgICAgICcqKi8ud2VsbC1rbm93bi93b3JrZmxvdy8qKicsXG4gICAgICAnKiovLnN3Yy8qKicsXG4gICAgICAnKiovLnN2ZWx0ZS1raXQvKionLFxuICAgICAgJyoqLy50dXJiby8qKicsXG4gICAgICAnKiovLmNhY2hlLyoqJyxcbiAgICAgICcqKi8ueWFybi8qKicsXG4gICAgICAnKiovLnBucG0tc3RvcmUvKionLFxuICAgIF07XG5cbiAgICAvLyBVc2UgcmVsYXRpdmUgcGF0dGVybnMgd2l0aCBgY3dkYCBwZXIgZGlyZWN0b3J5IHNvIHRoYXQgYGRvdDogdHJ1ZWBcbiAgICAvLyBhcHBsaWVzIGNvbnNpc3RlbnRseSB0byBib3RoIHRoZSBzZWFyY2ggcGF0dGVybiAqYW5kKiB0aGUgaWdub3JlXG4gICAgLy8gcGF0dGVybnMuIFdoZW4gYWJzb2x1dGUgcGF0dGVybnMgYXJlIHVzZWQgd2l0aCB0aW55Z2xvYmJ5LCB0aGUgYCoqYFxuICAgIC8vIGluIGlnbm9yZSBwYXR0ZXJucyBkb2VzIG5vdCBtYXRjaCBkb3QtcHJlZml4ZWQgcGF0aCBzZWdtZW50cy5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aGlzLmNvbmZpZy5kaXJzLm1hcCgoZGlyKSA9PiB7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgZGlyKTtcbiAgICAgICAgcmV0dXJuIGdsb2IoWycqKi8qLnt0cyx0c3gsbXRzLGN0cyxqcyxqc3gsbWpzLGNqc30nXSwge1xuICAgICAgICAgIGN3ZCxcbiAgICAgICAgICBpZ25vcmUsXG4gICAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHRzLmZsYXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZXMgZGlzY292ZXJlZCB3b3JrZmxvdyBlbnRyaWVzIGJ5IGlucHV0IGFycmF5IHJlZmVyZW5jZS5cbiAgICogVXNlcyBXZWFrTWFwIHRvIGFsbG93IGdhcmJhZ2UgY29sbGVjdGlvbiB3aGVuIGlucHV0IGFycmF5cyBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQuXG4gICAqIFRoaXMgY2FjaGUgaXMgaW52YWxpZGF0ZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBpbnB1dHMgYXJyYXkgcmVmZXJlbmNlIGNoYW5nZXNcbiAgICogKGUuZy4sIHdoZW4gZmlsZXMgYXJlIGFkZGVkL3JlbW92ZWQgZHVyaW5nIHdhdGNoIG1vZGUpLlxuICAgKi9cbiAgcHJpdmF0ZSBkaXNjb3ZlcmVkRW50cmllczogV2Vha01hcDxzdHJpbmdbXSwgRGlzY292ZXJlZEVudHJpZXM+ID1cbiAgICBuZXcgV2Vha01hcCgpO1xuXG4gIC8qKlxuICAgKiBQc2V1ZG8tcGFja2FnZXMgdGhhdCBzaG91bGQgbm90IGJlIGNoZWNrZWQgZm9yIHdvcmtmbG93IHBhdHRlcm5zLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUFNFVURPX1BBQ0tBR0VTID0gbmV3IFNldChbXG4gICAgJ3NlcnZlci1vbmx5JyxcbiAgICAnY2xpZW50LW9ubHknLFxuICBdKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGVhY2ggcGFja2FnZSBpbiBleHRlcm5hbFBhY2thZ2VzIGZvciB3b3JrZmxvdyBwYXR0ZXJucyBhbmQgZW1pdHNcbiAgICogd2FybmluZ3MgaWYgYW55IGNvbnRhaW4gXCJ1c2Ugc3RlcFwiLCBcInVzZSB3b3JrZmxvd1wiIGRpcmVjdGl2ZXMsIG9yXG4gICAqIHNlcmlhbGl6YXRpb24gY2xhc3Nlcy4gVGhlc2UgcGF0dGVybnMgd2lsbCBub3QgYmUgdHJhbnNmb3JtZWQgYnkgdGhlXG4gICAqIHdvcmtmbG93IGNvbXBpbGVyIHdoZW4gdGhlIHBhY2thZ2UgaXMgZXh0ZXJuYWxpemVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YXJuQWJvdXRFeHRlcm5hbFdvcmtmbG93UGFja2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXh0ZXJuYWxQYWNrYWdlcyA9IHRoaXMuY29uZmlnLmV4dGVybmFsUGFja2FnZXM7XG4gICAgaWYgKCFleHRlcm5hbFBhY2thZ2VzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgcGtnIG9mIGV4dGVybmFsUGFja2FnZXMpIHtcbiAgICAgIGlmIChCYXNlQnVpbGRlci5QU0VVRE9fUEFDS0FHRVMuaGFzKHBrZykpIGNvbnRpbnVlO1xuICAgICAgaWYgKHRoaXMud2FybmVkRXh0ZXJuYWxQYWNrYWdlcy5oYXMocGtnKSkgY29udGludWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGtnLnN0YXJ0c1dpdGgoJy4nKSB8fFxuICAgICAgICBwa2cuc3RhcnRzV2l0aCgnLycpIHx8XG4gICAgICAgIHBrZy5zdGFydHNXaXRoKCckJykgfHxcbiAgICAgICAgcGtnLmluY2x1ZGVzKCcqJykgfHxcbiAgICAgICAgcGtnLmluY2x1ZGVzKCc6JylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2hlY2sgcGFja2FnZS5qc29uIGRlcGVuZGVuY2llcyBmb3IgQHdvcmtmbG93L3NlcmRlIChmYXN0IHBhdGgpXG4gICAgICAgIGxldCBoYXNXb3JrZmxvd1NlcmRlRGVwID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGtnSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoYCR7cGtnfS9wYWNrYWdlLmpzb25gLCB7XG4gICAgICAgICAgICBwYXRoczogW3RoaXMuY29uZmlnLndvcmtpbmdEaXJdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHBrZ0pzb25Tb3VyY2UgPSBhd2FpdCByZWFkRmlsZShwa2dKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgcGtnSnNvbiA9IEpTT04ucGFyc2UocGtnSnNvblNvdXJjZSkgYXMge1xuICAgICAgICAgICAgZGVwZW5kZW5jaWVzPzogdW5rbm93bjtcbiAgICAgICAgICAgIHBlZXJEZXBlbmRlbmNpZXM/OiB1bmtub3duO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID1cbiAgICAgICAgICAgIHR5cGVvZiBwa2dKc29uLmRlcGVuZGVuY2llcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIHBrZ0pzb24uZGVwZW5kZW5jaWVzICE9PSBudWxsICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwa2dKc29uLmRlcGVuZGVuY2llcylcbiAgICAgICAgICAgICAgPyAocGtnSnNvbi5kZXBlbmRlbmNpZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgY29uc3QgcGVlckRlcGVuZGVuY2llcyA9XG4gICAgICAgICAgICB0eXBlb2YgcGtnSnNvbi5wZWVyRGVwZW5kZW5jaWVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgcGtnSnNvbi5wZWVyRGVwZW5kZW5jaWVzICE9PSBudWxsICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwa2dKc29uLnBlZXJEZXBlbmRlbmNpZXMpXG4gICAgICAgICAgICAgID8gKHBrZ0pzb24ucGVlckRlcGVuZGVuY2llcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICBoYXNXb3JrZmxvd1NlcmRlRGVwID1cbiAgICAgICAgICAgIE9iamVjdC5oYXNPd24oZGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJykgfHxcbiAgICAgICAgICAgIE9iamVjdC5oYXNPd24ocGVlckRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBwYWNrYWdlLmpzb24gbm90IHJlc29sdmFibGUgLSBjb250aW51ZSB0byBzb3VyY2UgY2hlY2tcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIHNvdXJjZSBwYXR0ZXJucyAodGhvcm91Z2ggcGF0aCkuXG4gICAgICAgIC8vIE5vdGU6IHJlcXVpcmUucmVzb2x2ZSBvbmx5IGluc3BlY3RzIHRoZSBwYWNrYWdlJ3MgbWFpbiBlbnRyeSBwb2ludC5cbiAgICAgICAgLy8gSWYgd29ya2Zsb3cgY29uc3RydWN0cyBsaXZlIGluIHN1Yi1wYXRocyAoZS5nLiBgbXktcGtnL3dvcmtmbG93c2ApLFxuICAgICAgICAvLyB0aGV5IHdvbid0IGJlIGRldGVjdGVkIGhlcmUuIFRoZSBAd29ya2Zsb3cvc2VyZGUgZGVwIGNoZWNrIGFib3ZlXG4gICAgICAgIC8vIHBhcnRpYWxseSBjb3ZlcnMgc2VyZGUgY2FzZXMuIFRoaXMgaXMgYWNjZXB0YWJsZSBhcyBhIGJlc3QtZWZmb3J0XG4gICAgICAgIC8vIGhldXJpc3RpYyDigJQgdGhlIHByaW1hcnkgZml4IGlzIGF1dG8tcmVtb3ZhbCBpbiB3aXRoV29ya2Zsb3coKS5cbiAgICAgICAgbGV0IGhhc1VzZVN0ZXAgPSBmYWxzZTtcbiAgICAgICAgbGV0IGhhc1VzZVdvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgIGxldCBoYXNTZXJkZSA9IGhhc1dvcmtmbG93U2VyZGVEZXA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW50cnlQYXRoID0gcmVxdWlyZS5yZXNvbHZlKHBrZywge1xuICAgICAgICAgICAgcGF0aHM6IFt0aGlzLmNvbmZpZy53b3JraW5nRGlyXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShlbnRyeVBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IHBhdHRlcm5zID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgICAgIGhhc1VzZVN0ZXAgPSBwYXR0ZXJucy5oYXNVc2VTdGVwO1xuICAgICAgICAgIGhhc1VzZVdvcmtmbG93ID0gcGF0dGVybnMuaGFzVXNlV29ya2Zsb3c7XG4gICAgICAgICAgaWYgKCFoYXNTZXJkZSkge1xuICAgICAgICAgICAgaGFzU2VyZGUgPSBwYXR0ZXJucy5oYXNTZXJkZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEVudHJ5IGZpbGUgbm90IHJlc29sdmFibGUgb3Igbm90IHJlYWRhYmxlIC0gdXNlIHdoYXQgd2UgaGF2ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoYXNVc2VTdGVwICYmICFoYXNVc2VXb3JrZmxvdyAmJiAhaGFzU2VyZGUpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgc3BlY2lmaWMgZGVzY3JpcHRpb24gb2Ygd2hhdCB3YXMgZm91bmRcbiAgICAgICAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoaGFzVXNlV29ya2Zsb3cpIGlzc3Vlcy5wdXNoKCdcInVzZSB3b3JrZmxvd1wiIGZ1bmN0aW9ucycpO1xuICAgICAgICBpZiAoaGFzVXNlU3RlcCkgaXNzdWVzLnB1c2goJ1widXNlIHN0ZXBcIiBmdW5jdGlvbnMnKTtcbiAgICAgICAgaWYgKGhhc1NlcmRlKSBpc3N1ZXMucHVzaCgnc2VyaWFsaXphdGlvbiBjbGFzc2VzJyk7XG5cbiAgICAgICAgdGhpcy53YXJuZWRFeHRlcm5hbFBhY2thZ2VzLmFkZChwa2cpO1xuXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgXFxuJHtjaGFsay55ZWxsb3coJ+KaoCcpfSBXYXJuaW5nOiAke2NoYWxrLmJvbGQoYFwiJHtwa2d9XCJgKX0gaXMgbGlzdGVkIGluICR7Y2hhbGsuYm9sZCgnZXh0ZXJuYWxQYWNrYWdlcycpfSAoJHtjaGFsay5ib2xkKCdzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzJyl9IGluIE5leHQuanMpIGJ1dCBjb250YWlucyB3b3JrZmxvdyBjb2RlICgke2lzc3Vlcy5qb2luKCcsICcpfSkuYCArXG4gICAgICAgICAgICBgXFxuICBUaGlzIGNvZGUgd2lsbCAke2NoYWxrLmJvbGQoJ25vdCcpfSBiZSB0cmFuc2Zvcm1lZCBieSB0aGUgd29ya2Zsb3cgY29tcGlsZXIsIHdoaWNoIGNhbiBjYXVzZSBydW50aW1lIGZhaWx1cmVzLmAgK1xuICAgICAgICAgICAgYFxcbiAgUmVtb3ZlICR7Y2hhbGsuYm9sZChgXCIke3BrZ31cImApfSBmcm9tICR7Y2hhbGsuYm9sZCgnZXh0ZXJuYWxQYWNrYWdlcycpfSAoJHtjaGFsay5ib2xkKCdzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzJyl9IGluIE5leHQuanMpIHRvIGZpeCB0aGlzLlxcbmBcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBCZXN0LWVmZm9ydDogaWYgYW55dGhpbmcgZ29lcyB3cm9uZywgc2tpcCB0aGlzIHBhY2thZ2Ugc2lsZW50bHlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZGlzY292ZXJFbnRyaWVzKFxuICAgIGlucHV0czogc3RyaW5nW10sXG4gICAgb3V0ZGlyOiBzdHJpbmcsXG4gICAgdHNjb25maWdQYXRoPzogc3RyaW5nXG4gICk6IFByb21pc2U8RGlzY292ZXJlZEVudHJpZXM+IHtcbiAgICBjb25zdCBwcmV2aW91c1Jlc3VsdCA9IHRoaXMuZGlzY292ZXJlZEVudHJpZXMuZ2V0KGlucHV0cyk7XG5cbiAgICBpZiAocHJldmlvdXNSZXN1bHQpIHtcbiAgICAgIHJldHVybiBwcmV2aW91c1Jlc3VsdDtcbiAgICB9XG4gICAgY29uc3Qgc3RhdGU6IERpc2NvdmVyZWRFbnRyaWVzID0ge1xuICAgICAgZGlzY292ZXJlZFN0ZXBzOiBuZXcgU2V0KCksXG4gICAgICBkaXNjb3ZlcmVkV29ya2Zsb3dzOiBuZXcgU2V0KCksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldCgpLFxuICAgIH07XG5cbiAgICBjb25zdCBkaXNjb3ZlclN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIFJlc29sdmUgdGhlIFNESyBydW50aW1lIGVudHJ5IHBvaW50IHNvIHRoYXQgdGhlIGRpc2NvdmVyeSBwYXNzXG4gICAgLy8gdHJhY2VzIHRocm91Z2ggaXQgYW5kIGRpc2NvdmVycyBzZXJkZSBjbGFzc2VzIChsaWtlIGBSdW5gKSB0aGF0XG4gICAgLy8gbGl2ZSBpbnNpZGUgU0RLIHBhY2thZ2VzLiBXaXRob3V0IHRoaXMsIGZpbGVzIGxpa2UgYHJ1bi5qc2AgYXJlXG4gICAgLy8gb25seSBkaXNjb3ZlcmVkIHdoZW4gdXNlciBjb2RlIGhhcHBlbnMgdG8gaW1wb3J0IHRoZW0uXG4gICAgLy8gVGhpcyBpcyByZXNvbHZlZCBoZXJlIChyYXRoZXIgdGhhbiBpbiBjYWxsZXJzKSBzbyB0aGF0IHRoZSBvcmlnaW5hbFxuICAgIC8vIGBpbnB1dHNgIGFycmF5IHJlZmVyZW5jZSBpcyBwcmVzZXJ2ZWQgZm9yIFdlYWtNYXAgY2FjaGluZyDigJQgY2FsbGVyc1xuICAgIC8vIGxpa2UgY3JlYXRlV29ya2Zsb3dzQnVuZGxlIGFuZCBjcmVhdGVTdGVwc0J1bmRsZSBjYW4gc2hhcmUgdGhlIHNhbWVcbiAgICAvLyBjYWNoZSBlbnRyeSB3aGVuIHRoZXkgcGFzcyB0aGUgc2FtZSBpbnB1dEZpbGVzIGFycmF5LlxuICAgIGNvbnN0IHJlc29sdmVkV29ya2Zsb3dSdW50aW1lID0gYXdhaXQgZW5oYW5jZWRSZXNvbHZlKFxuICAgICAgb3V0ZGlyLFxuICAgICAgJ3dvcmtmbG93L3J1bnRpbWUnXG4gICAgKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gcmVzb2x2ZWRXb3JrZmxvd1J1bnRpbWVcbiAgICAgID8gWy4uLmlucHV0cywgcmVzb2x2ZWRXb3JrZmxvd1J1bnRpbWVdXG4gICAgICA6IGlucHV0cztcblxuICAgIGNvbnN0IGVmZmVjdGl2ZVRzY29uZmlnUGF0aCA9XG4gICAgICB0c2NvbmZpZ1BhdGggPz8gKGF3YWl0IHRoaXMuZmluZFRzQ29uZmlnUGF0aCgpKTtcbiAgICBjb25zdCBlc2J1aWxkVHNjb25maWdPcHRpb25zID0gYXdhaXQgZ2V0RXNidWlsZFRzY29uZmlnT3B0aW9ucyhcbiAgICAgIGVmZmVjdGl2ZVRzY29uZmlnUGF0aFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICAgICAgZW50cnlQb2ludHMsXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICBjcmVhdGVEaXNjb3ZlckVudHJpZXNQbHVnaW4oc3RhdGUsIHRoaXMudHJhbnNmb3JtUHJvamVjdFJvb3QpLFxuICAgICAgICBdLFxuICAgICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgICB3cml0ZTogZmFsc2UsXG4gICAgICAgIG91dGRpcixcbiAgICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgICBzb3VyY2VtYXA6IGZhbHNlLFxuICAgICAgICBhYnNXb3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXG4gICAgICAgIC4uLmVzYnVpbGRUc2NvbmZpZ09wdGlvbnMsXG4gICAgICAgIC8vIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBidW5kbGVkIGR1cmluZyBkaXNjb3ZlcnlcbiAgICAgICAgZXh0ZXJuYWw6IHRoaXMuY29uZmlnLmV4dGVybmFsUGFja2FnZXMgfHwgW10sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7fVxuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICBgRGlzY292ZXJpbmcgd29ya2Zsb3cgZGlyZWN0aXZlc2AsXG4gICAgICBgJHtEYXRlLm5vdygpIC0gZGlzY292ZXJTdGFydH1tc2BcbiAgICApO1xuXG4gICAgLy8gV2FybiBhYm91dCBleHRlcm5hbCBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gd29ya2Zsb3cgY29kZVxuICAgIGF3YWl0IHRoaXMud2FybkFib3V0RXh0ZXJuYWxXb3JrZmxvd1BhY2thZ2VzKCk7XG5cbiAgICB0aGlzLmRpc2NvdmVyZWRFbnRyaWVzLnNldChpbnB1dHMsIHN0YXRlKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGRlYnVnIGluZm9ybWF0aW9uIHRvIGEgSlNPTiBmaWxlIGZvciB0cm91Ymxlc2hvb3RpbmcgYnVpbGQgaXNzdWVzLlxuICAgKiBVc2VzIGF0b21pYyB3cml0ZSAodGVtcCBmaWxlICsgcmVuYW1lKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuXG4gICAqIG11bHRpcGxlIGJ1aWxkcyBydW4gY29uY3VycmVudGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZURlYnVnRmlsZShcbiAgICBvdXRmaWxlOiBzdHJpbmcsXG4gICAgZGVidWdEYXRhOiBvYmplY3QsXG4gICAgbWVyZ2U/OiBib29sZWFuXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuY29uZmlnLmRlYnVnRmlsZVByZWZpeCB8fCAnJztcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gYCR7ZGlybmFtZShvdXRmaWxlKX0vJHtwcmVmaXh9JHtiYXNlbmFtZShvdXRmaWxlKX0uZGVidWcuanNvbmA7XG4gICAgbGV0IGV4aXN0aW5nID0ge307XG5cbiAgICB0cnkge1xuICAgICAgaWYgKG1lcmdlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHRhcmdldFBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgZXhpc3RpbmcgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0IHlldCBvciBpcyBjb3JydXB0ZWQgLSBzdGFydCBmcmVzaC5cbiAgICAgICAgICAvLyBEb24ndCBsb2cgZXJyb3IgZm9yIEVOT0VOVCAoZmlsZSBub3QgZm91bmQpIGFzIHRoYXQncyBleHBlY3RlZCBvbiBmaXJzdCBydW4uXG4gICAgICAgICAgaWYgKChlIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgcmVhZGluZyBkZWJ1ZyBmaWxlLCBzdGFydGluZyBmcmVzaDonLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVyZ2VkRGF0YSA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgLi4uZGVidWdEYXRhLFxuICAgICAgICB9LFxuICAgICAgICBudWxsLFxuICAgICAgICAyXG4gICAgICApO1xuXG4gICAgICAvLyBXcml0ZSBhdG9taWNhbGx5OiB3cml0ZSB0byB0ZW1wIGZpbGUsIHRoZW4gcmVuYW1lLlxuICAgICAgLy8gcmVuYW1lKCkgaXMgYXRvbWljIG9uIFBPU0lYIHN5c3RlbXMgYW5kIHByb3ZpZGVzIGJlc3QtZWZmb3J0IGF0b21pY2l0eSBvbiBXaW5kb3dzLlxuICAgICAgLy8gUHJldmVudHMgcmFjZSBjb25kaXRpb25zIHdoZXJlIGNvbmN1cnJlbnQgYnVpbGRzIHJlYWQgcGFydGlhbGx5LXdyaXR0ZW4gZmlsZXMuXG4gICAgICBjb25zdCB0ZW1wUGF0aCA9IGAke3RhcmdldFBhdGh9LiR7cmFuZG9tVVVJRCgpfS50bXBgO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHRlbXBQYXRoLCBtZXJnZWREYXRhKTtcbiAgICAgIGF3YWl0IHJlbmFtZSh0ZW1wUGF0aCwgdGFyZ2V0UGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHdyaXRlIGRlYnVnIGZpbGU6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGFuZCBvcHRpb25hbGx5IHRocm93cyBvbiBlc2J1aWxkIGVycm9ycyBhbmQgd2FybmluZ3MuXG4gICAqIEBwYXJhbSB0aHJvd09uRXJyb3IgLSBJZiB0cnVlLCB0aHJvd3MgYW4gZXJyb3Igd2hlbiBlc2J1aWxkIGVycm9ycyBhcmUgcHJlc2VudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2dFc2J1aWxkTWVzc2FnZXMoXG4gICAgcmVzdWx0OiB7IGVycm9ycz86IGFueVtdOyB3YXJuaW5ncz86IGFueVtdIH0sXG4gICAgcGhhc2U6IHN0cmluZyxcbiAgICB0aHJvd09uRXJyb3IgPSB0cnVlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBzdXBwcmVzc1dhcm5pbmdzPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGlmIChyZXN1bHQuZXJyb3JzICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihg4p2MIGVzYnVpbGQgZXJyb3JzIGluICR7cGhhc2V9OmApO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgcmVzdWx0LmVycm9ycykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgICR7ZXJyb3IudGV4dH1gKTtcbiAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGVycm9yLnRleHQpO1xuICAgICAgICBpZiAoZXJyb3IubG9jYXRpb24pIHtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGAgICAgYXQgJHtlcnJvci5sb2NhdGlvbi5maWxlfToke2Vycm9yLmxvY2F0aW9uLmxpbmV9OiR7ZXJyb3IubG9jYXRpb24uY29sdW1ufWA7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihsb2NhdGlvbik7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBXb3JrZmxvd0J1aWxkRXJyb3IoXG4gICAgICAgICAgYEJ1aWxkIGZhaWxlZCBkdXJpbmcgJHtwaGFzZX06XFxuJHtlcnJvck1lc3NhZ2VzLmpvaW4oJ1xcbicpfWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGludDogYFJldmlldyB0aGUgZXNidWlsZCBlcnJvcnMgYWJvdmUg4oCUIHRoZXkgY29tZSBmcm9tIHRoZSAke3BoYXNlfSBidW5kbGUuIEZpeCB0aGUgb2ZmZW5kaW5nIHNvdXJjZSBmaWxlcyBhbmQgcmUtcnVuIHRoZSBidWlsZC5gLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhb3B0aW9ucz8uc3VwcHJlc3NXYXJuaW5ncyAmJlxuICAgICAgcmVzdWx0Lndhcm5pbmdzICYmXG4gICAgICByZXN1bHQud2FybmluZ3MubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKGAhICBlc2J1aWxkIHdhcm5pbmdzIGluICR7cGhhc2V9OmApO1xuICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHJlc3VsdC53YXJuaW5ncykge1xuICAgICAgICBjb25zb2xlLndhcm4oYCAgJHt3YXJuaW5nLnRleHR9YCk7XG4gICAgICAgIGlmICh3YXJuaW5nLmxvY2F0aW9uKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYCAgICBhdCAke3dhcm5pbmcubG9jYXRpb24uZmlsZX06JHt3YXJuaW5nLmxvY2F0aW9uLmxpbmV9OiR7d2FybmluZy5sb2NhdGlvbi5jb2x1bW59YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIHRvIGEgbm9ybWFsaXplZCByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbWFuaWZlc3QuXG4gICAqL1xuICBwcml2YXRlIGdldFJlbGF0aXZlRmlsZXBhdGgoYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlID0gYWJzb2x1dGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHRoaXMuY29uZmlnLndvcmtpbmdEaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgIGxldCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShub3JtYWxpemVkV29ya2luZ0Rpciwgbm9ybWFsaXplZEZpbGUpLnJlcGxhY2UoXG4gICAgICAvXFxcXC9nLFxuICAgICAgJy8nXG4gICAgKTtcbiAgICAvLyBIYW5kbGUgZmlsZXMgZGlzY292ZXJlZCBvdXRzaWRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgIHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSAnLi4nKVxuICAgICAgICAuam9pbignLycpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpdmVQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBidW5kbGUgZm9yIHdvcmtmbG93IHN0ZXAgZnVuY3Rpb25zLlxuICAgKiBTdGVwcyBoYXZlIGZ1bGwgTm9kZS5qcyBydW50aW1lIGFjY2VzcyBhbmQgaGFuZGxlIHNpZGUgZWZmZWN0cywgQVBJIGNhbGxzLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSBleHRlcm5hbGl6ZU5vblN0ZXBzIC0gSWYgdHJ1ZSwgb25seSBidW5kbGVzIHN0ZXAgZW50cnkgcG9pbnRzIGFuZCBleHRlcm5hbGl6ZXMgb3RoZXIgY29kZVxuICAgKiBAcGFyYW0gYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcyAtIElmIHRydWUsIGFsc28gYnVuZGxlcyBwcm9qZWN0LWxvY2FsIGZpbGVzIGltcG9ydGVkIGJ5IHN0ZXAgZW50cmllcyBmb3IgZGlyZWN0IHJ1bnRpbWUgbG9hZGluZ1xuICAgKiBAcmV0dXJucyBCdWlsZCBjb250ZXh0IChmb3Igd2F0Y2ggbW9kZSkgYW5kIHRoZSBjb2xsZWN0ZWQgd29ya2Zsb3cgbWFuaWZlc3RcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVTdGVwc0J1bmRsZSh7XG4gICAgaW5wdXRGaWxlcyxcbiAgICBmb3JtYXQgPSAnZXNtJyxcbiAgICBvdXRmaWxlLFxuICAgIGV4dGVybmFsaXplTm9uU3RlcHMsXG4gICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcyxcbiAgICByZXdyaXRlVHNFeHRlbnNpb25zLFxuICAgIHRzY29uZmlnUGF0aCxcbiAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICBza2lwRXNtUmVxdWlyZUJhbm5lciA9IGZhbHNlLFxuICB9OiB7XG4gICAgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICAgIG91dGZpbGU6IHN0cmluZztcbiAgICBmb3JtYXQ/OiAnY2pzJyB8ICdlc20nO1xuICAgIGV4dGVybmFsaXplTm9uU3RlcHM/OiBib29sZWFuO1xuICAgIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICAgIHJld3JpdGVUc0V4dGVuc2lvbnM/OiBib29sZWFuO1xuICAgIGRpc2NvdmVyZWRFbnRyaWVzPzogRGlzY292ZXJlZEVudHJpZXM7XG4gICAgLyoqXG4gICAgICogV2hlbiB0cnVlLCBza2lwIHRoZSBgY3JlYXRlUmVxdWlyZWAgYmFubmVyIG9uIHRoZSBzdGVwcyBidW5kbGUuXG4gICAgICogVXNlZCBieSBgY3JlYXRlQ29tYmluZWRCdW5kbGVgIHdpdGggYGJ1bmRsZUZpbmFsT3V0cHV0OiB0cnVlYCB3aGVyZVxuICAgICAqIHRoZSBvdXRlciBlc2J1aWxkIHBhc3MgcHJvdmlkZXMgaXRzIG93biBiYW5uZXIsIHByZXZlbnRpbmcgdGhlXG4gICAgICogYF9fY3JlYXRlUmVxdWlyZWAgaWRlbnRpZmllciBmcm9tIGJlaW5nIGRlY2xhcmVkIHR3aWNlIGFmdGVyIGlubGluaW5nLlxuICAgICAqL1xuICAgIHNraXBFc21SZXF1aXJlQmFubmVyPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIGNvbnRleHQ6IGVzYnVpbGQuQnVpbGRDb250ZXh0IHwgdW5kZWZpbmVkO1xuICAgIG1hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0O1xuICB9PiB7XG4gICAgY29uc3Qgc3RlcHNCdW5kbGVTdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgd29ya2Zsb3dNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdCA9IHt9O1xuICAgIGNvbnN0IGJ1aWx0SW5TdGVwcyA9ICd3b3JrZmxvdy9pbnRlcm5hbC9idWlsdGlucyc7XG5cbiAgICBjb25zdCByZXNvbHZlZEJ1aWx0SW5TdGVwcyA9IGF3YWl0IGVuaGFuY2VkUmVzb2x2ZShcbiAgICAgIGRpcm5hbWUob3V0ZmlsZSksXG4gICAgICAnd29ya2Zsb3cvaW50ZXJuYWwvYnVpbHRpbnMnXG4gICAgKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgV29ya2Zsb3dCdWlsZEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHJlc29sdmUgYnVpbHQtaW4gc3RlcHMgc291cmNlcy5cXG5cXG5DYXVzZWQgYnk6ICR7U3RyaW5nKGVycil9YCxcbiAgICAgICAge1xuICAgICAgICAgIGhpbnQ6ICdydW4gYHBucG0gaW5zdGFsbCB3b3JrZmxvd2AgdG8gcmVzb2x2ZSB0aGlzIGlzc3VlLicsXG4gICAgICAgICAgY2F1c2U6IGVycixcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIERpc2NvdmVyeSBvZiB3b3JrZmxvdy9zdGVwL3NlcmRlIGVudHJpZXMuIFRoZSBTREsgcnVudGltZSBlbnRyeSBwb2ludFxuICAgIC8vICh3b3JrZmxvdy9ydW50aW1lKSBpcyByZXNvbHZlZCBpbnNpZGUgZGlzY292ZXJFbnRyaWVzKCkgaXRzZWxmIHNvIHRoYXRcbiAgICAvLyBjYWxsZXJzIGNhbiBwYXNzIHRoZSBvcmlnaW5hbCBpbnB1dEZpbGVzIHJlZmVyZW5jZSBhbmQgYmVuZWZpdCBmcm9tXG4gICAgLy8gV2Vha01hcCBjYWNoaW5nIGFjcm9zcyBjcmVhdGVXb3JrZmxvd3NCdW5kbGUgLyBjcmVhdGVTdGVwc0J1bmRsZSBjYWxscy5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID1cbiAgICAgIGRpc2NvdmVyZWRFbnRyaWVzID8/XG4gICAgICAoYXdhaXQgdGhpcy5kaXNjb3ZlckVudHJpZXMoaW5wdXRGaWxlcywgZGlybmFtZShvdXRmaWxlKSwgdHNjb25maWdQYXRoKSk7XG4gICAgY29uc3Qgc3RlcEZpbGVzID0gWy4uLmRpc2NvdmVyZWQuZGlzY292ZXJlZFN0ZXBzXS5zb3J0KCk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlcyA9IFsuLi5kaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3NdLnNvcnQoKTtcbiAgICBjb25zdCBzZXJkZUZpbGVzID0gWy4uLmRpc2NvdmVyZWQuZGlzY292ZXJlZFNlcmRlRmlsZXNdLnNvcnQoKTtcblxuICAgIC8vIEluY2x1ZGUgc2VyZGUgZmlsZXMgdGhhdCBhcmVuJ3QgYWxyZWFkeSBzdGVwIGZpbGVzIGZvciBjcm9zcy1jb250ZXh0IGNsYXNzIHJlZ2lzdHJhdGlvbi5cbiAgICAvLyBDbGFzc2VzIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgc3RlcCBidW5kbGUgc28gdGhleSBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAgLy8gd2hlbiByZWNlaXZpbmcgZGF0YSBmcm9tIHdvcmtmbG93cyBhbmQgc2VyaWFsaXplZCB3aGVuIHJldHVybmluZyBkYXRhIHRvIHdvcmtmbG93cy5cbiAgICBjb25zdCBzdGVwRmlsZXNTZXQgPSBuZXcgU2V0KHN0ZXBGaWxlcyk7XG4gICAgY29uc3Qgc2VyZGVPbmx5RmlsZXMgPSBzZXJkZUZpbGVzLmZpbHRlcigoZikgPT4gIXN0ZXBGaWxlc1NldC5oYXMoZikpO1xuXG4gICAgLy8gbG9nIHRoZSBzdGVwIGZpbGVzIGZvciBkZWJ1Z2dpbmdcbiAgICBhd2FpdCB0aGlzLndyaXRlRGVidWdGaWxlKG91dGZpbGUsIHtcbiAgICAgIHN0ZXBGaWxlcyxcbiAgICAgIHdvcmtmbG93RmlsZXMsXG4gICAgICBzZXJkZU9ubHlGaWxlcyxcbiAgICB9KTtcblxuICAgIC8vIEhlbHBlciB0byBjcmVhdGUgaW1wb3J0IHN0YXRlbWVudCBmcm9tIGZpbGUgcGF0aFxuICAgIC8vIEZvciB3b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzIHBhY2thZ2VzLCB1c2VzIHRoZSBwYWNrYWdlIG5hbWUgc28gZXNidWlsZFxuICAgIC8vIHdpbGwgcmVzb2x2ZSB0aHJvdWdoIHBhY2thZ2UuanNvbiBleHBvcnRzIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbmRpdGlvbnNcbiAgICBjb25zdCBjcmVhdGVJbXBvcnQgPSAoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkV29ya3NwYWNlUm9vdCA9IHRoaXMuY29uZmlnLndvcmtpbmdEaXJcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3Jrc3BhY2VGaWxlID0gZmlsZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAvLyBPbmx5IHVzZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgZm9yIHdvcmtzcGFjZSBzeW1saW5rcyAoZmlsZXNcbiAgICAgIC8vIG91dHNpZGUgbm9kZV9tb2R1bGVzIGluIGEgcGFja2FnZXMvKi9zcmMvIGRpcmVjdG9yeSkuIEZvciB0YXJiYWxsLVxuICAgICAgLy8gaW5zdGFsbGVkIHBhY2thZ2VzIChmaWxlcyBpbnNpZGUgbm9kZV9tb2R1bGVzLyksIGZhbGwgdGhyb3VnaCB0b1xuICAgICAgLy8gZ2V0SW1wb3J0UGF0aCB3aGljaCByZXR1cm5zIHBhY2thZ2Ugc3BlY2lmaWVycyDigJQgdGhpcyBhbGxvd3MgdGhlXG4gICAgICAvLyBTV0MgcGx1Z2luJ3MgZXh0ZXJuYWxpemVOb25TdGVwcyB0byB3b3JrIGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGlzV29ya3NwYWNlU291cmNlQmFja2VkUGFja2FnZUZpbGUgPVxuICAgICAgICBub3JtYWxpemVkV29ya3NwYWNlRmlsZS5pbmNsdWRlcygnL3BhY2thZ2VzLycpICYmXG4gICAgICAgIG5vcm1hbGl6ZWRXb3Jrc3BhY2VGaWxlLmluY2x1ZGVzKCcvc3JjLycpICYmXG4gICAgICAgICFub3JtYWxpemVkV29ya3NwYWNlRmlsZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSAmJlxuICAgICAgICAhKFxuICAgICAgICAgIG5vcm1hbGl6ZWRXb3Jrc3BhY2VGaWxlID09PSBub3JtYWxpemVkV29ya3NwYWNlUm9vdCB8fFxuICAgICAgICAgIG5vcm1hbGl6ZWRXb3Jrc3BhY2VGaWxlLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFdvcmtzcGFjZVJvb3R9L2ApXG4gICAgICAgICk7XG4gICAgICBjb25zdCBpc1NvdXJjZUJhY2tlZFBhY2thZ2VGaWxlID0gaXNXb3Jrc3BhY2VTb3VyY2VCYWNrZWRQYWNrYWdlRmlsZTtcblxuICAgICAgaWYgKGlzU291cmNlQmFja2VkUGFja2FnZUZpbGUpIHtcbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKFxuICAgICAgICAgIG5vcm1hbGl6ZWRXb3Jrc3BhY2VSb290LFxuICAgICAgICAgIG5vcm1hbGl6ZWRXb3Jrc3BhY2VGaWxlXG4gICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBpZiAoIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLycpICYmICFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggPSBgLi8ke3JlbGF0aXZlUGF0aH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgaW1wb3J0ICcke3JlbGF0aXZlUGF0aH0nO2A7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaW1wb3J0UGF0aCwgaXNQYWNrYWdlIH0gPSBnZXRJbXBvcnRQYXRoKFxuICAgICAgICBmaWxlLFxuICAgICAgICB0aGlzLmNvbmZpZy53b3JraW5nRGlyXG4gICAgICApO1xuXG4gICAgICBpZiAoaXNQYWNrYWdlKSB7XG4gICAgICAgIC8vIFVzZSBwYWNrYWdlIG5hbWUgLSBlc2J1aWxkIHdpbGwgcmVzb2x2ZSB2aWEgcGFja2FnZS5qc29uIGV4cG9ydHNcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgJyR7aW1wb3J0UGF0aH0nO2A7XG4gICAgICB9XG5cbiAgICAgIC8vIExvY2FsIGFwcCBmaWxlIC0gdXNlIHJlbGF0aXZlIHBhdGhcbiAgICAgIC8vIE5vcm1hbGl6ZSBib3RoIHBhdGhzIHRvIGZvcndhcmQgc2xhc2hlcyBiZWZvcmUgY2FsbGluZyByZWxhdGl2ZSgpXG4gICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIG9uIFdpbmRvd3Mgd2hlcmUgcmVsYXRpdmUoKSBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2l0aCBtaXhlZCBwYXRoIGZvcm1hdHNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gdGhpcy5jb25maWcud29ya2luZ0Rpci5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIHBhdGggZnJvbSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgZmlsZVxuICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKG5vcm1hbGl6ZWRXb3JraW5nRGlyLCBub3JtYWxpemVkRmlsZSkucmVwbGFjZShcbiAgICAgICAgL1xcXFwvZyxcbiAgICAgICAgJy8nXG4gICAgICApO1xuICAgICAgLy8gRW5zdXJlIHJlbGF0aXZlIHBhdGhzIHN0YXJ0IHdpdGggLi8gc28gZXNidWlsZCByZXNvbHZlcyB0aGVtIGNvcnJlY3RseS5cbiAgICAgIC8vIFBhdGhzIGxpa2UgXCIub3V0cHV0Ly4uLlwiIGFyZSBub3QgdmFsaWQgcmVsYXRpdmUgc3BlY2lmaWVycyBhbmQgbXVzdFxuICAgICAgLy8gYmVjb21lIFwiLi8ub3V0cHV0Ly4uLlwiLlxuICAgICAgaWYgKCFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi8nKSAmJiAhcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYGltcG9ydCAnJHtyZWxhdGl2ZVBhdGh9JztgO1xuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSB2aXJ0dWFsIGVudHJ5IHRoYXQgaW1wb3J0cyBhbGwgZmlsZXMuIEFsbCBzdGVwIGRlZmluaXRpb25zXG4gICAgLy8gd2lsbCBnZXQgcmVnaXN0ZXJlZCB0aGFua3MgdG8gdGhlIHN3YyB0cmFuc2Zvcm0uXG4gICAgLy9cbiAgICAvLyBEZWR1cGUgaW1wb3J0cyBieSBjYW5vbmljYWwgbW9kdWxlIGlkZW50aXR5IHNvIHdlIG5ldmVyIGVtaXQgdHdvXG4gICAgLy8gaW1wb3J0IGxpbmVzIHRoYXQgcmVzb2x2ZSB0byB0aGUgc2FtZSBwaHlzaWNhbCBtb2R1bGUuIFByZS1zZWVkIHRoZVxuICAgIC8vIHNldCB3aXRoIHRoZSBidWlsdC1pbiBzdGVwcyBpbXBvcnQgc28gYSB3b3Jrc3BhY2Ugc3RlcCBmaWxlIGF0XG4gICAgLy8gYHBhY2thZ2VzL3dvcmtmbG93L3NyYy9pbnRlcm5hbC9idWlsdGlucy50c2AgZG9lc24ndCBlbWl0IGEgc2Vjb25kLFxuICAgIC8vIHJlbGF0aXZlLXBhdGggY29tcGV0aW5nIGltcG9ydCDigJQgZXNidWlsZCB3b3VsZCBvdGhlcndpc2UgdHJhbnNmb3JtXG4gICAgLy8gYm90aCBjb3BpZXMgYW5kIHRoZSBzd2MgcGx1Z2luIHdvdWxkIGdlbmVyYXRlIGR1cGxpY2F0ZSBzdGVwIElEcy5cbiAgICBjb25zdCBlbWl0dGVkSW1wb3J0SWRlbnRpdGllcyA9IG5ldyBTZXQ8c3RyaW5nPihbYnVpbHRJblN0ZXBzXSk7XG4gICAgY29uc3QgYnVpbGRJbXBvcnRzID0gKGZpbGVzOiBzdHJpbmdbXSk6IHN0cmluZyA9PlxuICAgICAgZmlsZXNcbiAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkZW50aXR5ID0gbW9kdWxlSWRlbnRpdHlLZXkoZmlsZSwgdGhpcy5tb2R1bGVTcGVjaWZpZXJSb290KTtcbiAgICAgICAgICBpZiAoZW1pdHRlZEltcG9ydElkZW50aXRpZXMuaGFzKGlkZW50aXR5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGVtaXR0ZWRJbXBvcnRJZGVudGl0aWVzLmFkZChpZGVudGl0eSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoY3JlYXRlSW1wb3J0KVxuICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBzdGVwSW1wb3J0cyA9IGJ1aWxkSW1wb3J0cyhzdGVwRmlsZXMpO1xuXG4gICAgLy8gSW5jbHVkZSBzZXJkZS1vbmx5IGZpbGVzIGZvciBjbGFzcyByZWdpc3RyYXRpb24gc2lkZSBlZmZlY3RzXG4gICAgY29uc3Qgc2VyZGVJbXBvcnRzID0gYnVpbGRJbXBvcnRzKHNlcmRlT25seUZpbGVzKTtcblxuICAgIGNvbnN0IGVudHJ5Q29udGVudCA9IGBcbiAgICAvLyBCdWlsdCBpbiBzdGVwc1xuICAgIGltcG9ydCAnJHtidWlsdEluU3RlcHN9JztcbiAgICAvLyBVc2VyIHN0ZXBzXG4gICAgJHtzdGVwSW1wb3J0c31cbiAgICAvLyBTZXJkZSBmaWxlcyBmb3IgY3Jvc3MtY29udGV4dCBjbGFzcyByZWdpc3RyYXRpb25cbiAgICAke3NlcmRlSW1wb3J0c31cbiAgICAvLyBTZW50aW5lbCBleHBvcnQgc28gYnVuZGxlcnMgKHJvbGx1cCkgZG9uJ3QgdHJlZS1zaGFrZSB0aGlzIG1vZHVsZVxuICAgIC8vIHdoZW4gaXQncyBpbXBvcnRlZCBhcyBhIHNpZGUtZWZmZWN0LW9ubHkgZGVwZW5kZW5jeS5cbiAgICBleHBvcnQgY29uc3QgX19zdGVwc19yZWdpc3RlcmVkID0gdHJ1ZTtgO1xuXG4gICAgLy8gQnVuZGxlIHdpdGggZXNidWlsZCBhbmQgb3VyIGN1c3RvbSBTV0MgcGx1Z2luXG4gICAgY29uc3QgZW50cmllc1RvQnVuZGxlID0gZXh0ZXJuYWxpemVOb25TdGVwc1xuICAgICAgPyBbXG4gICAgICAgICAgLi4uc3RlcEZpbGVzLFxuICAgICAgICAgIC4uLnNlcmRlRmlsZXMsXG4gICAgICAgICAgLi4uKHJlc29sdmVkQnVpbHRJblN0ZXBzID8gW3Jlc29sdmVkQnVpbHRJblN0ZXBzXSA6IFtdKSxcbiAgICAgICAgXVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZEVudHJpZXNUb0J1bmRsZSA9IGVudHJpZXNUb0J1bmRsZVxuICAgICAgPyBhd2FpdCB3aXRoUmVhbHBhdGhzKGVudHJpZXNUb0J1bmRsZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcyA9IGF3YWl0IHdpdGhSZWFscGF0aHMoW1xuICAgICAgLi4uc3RlcEZpbGVzLFxuICAgICAgLi4uc2VyZGVPbmx5RmlsZXMsXG4gICAgICAuLi4ocmVzb2x2ZWRCdWlsdEluU3RlcHMgPyBbcmVzb2x2ZWRCdWlsdEluU3RlcHNdIDogW10pLFxuICAgIF0pO1xuICAgIGNvbnN0IGVzYnVpbGRUc2NvbmZpZ09wdGlvbnMgPVxuICAgICAgYXdhaXQgZ2V0RXNidWlsZFRzY29uZmlnT3B0aW9ucyh0c2NvbmZpZ1BhdGgpO1xuICAgIGNvbnN0IHsgYmFubmVyOiBpbXBvcnRNZXRhQmFubmVyLCBkZWZpbmU6IGltcG9ydE1ldGFEZWZpbmUgfSA9XG4gICAgICB0aGlzLmdldENqc0ltcG9ydE1ldGFQb2x5ZmlsbChmb3JtYXQpO1xuICAgIGNvbnN0IGVzbVJlcXVpcmVCYW5uZXIgPSBza2lwRXNtUmVxdWlyZUJhbm5lclxuICAgICAgPyAnJ1xuICAgICAgOiB0aGlzLmdldEVzbVJlcXVpcmVCYW5uZXIoZm9ybWF0KTtcblxuICAgIGNvbnN0IGVzYnVpbGRDdHggPSBhd2FpdCBlc2J1aWxkLmNvbnRleHQoe1xuICAgICAgYmFubmVyOiB7XG4gICAgICAgIGpzOiBgLy8gYmlvbWUtaWdub3JlLWFsbCBsaW50OiBnZW5lcmF0ZWQgZmlsZVxcbi8qIGVzbGludC1kaXNhYmxlICovXFxuJHtpbXBvcnRNZXRhQmFubmVyfSR7ZXNtUmVxdWlyZUJhbm5lcn1gLFxuICAgICAgfSxcbiAgICAgIHN0ZGluOiB7XG4gICAgICAgIGNvbnRlbnRzOiBlbnRyeUNvbnRlbnQsXG4gICAgICAgIHJlc29sdmVEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgIHNvdXJjZWZpbGU6ICd2aXJ0dWFsLWVudHJ5LmpzJyxcbiAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgfSxcbiAgICAgIG91dGZpbGUsXG4gICAgICBhYnNXb3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgZm9ybWF0LFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIGNvbmRpdGlvbnM6IFsnbm9kZSddLFxuICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgIHdyaXRlOiB0cnVlLFxuICAgICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgICBrZWVwTmFtZXM6IHRydWUsXG4gICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAganN4OiAncHJlc2VydmUnLFxuICAgICAgbG9nTGV2ZWw6ICdlcnJvcicsXG4gICAgICAvLyBVc2UgdHNjb25maWcgZm9yIHBhdGggYWxpYXMgcmVzb2x1dGlvbi5cbiAgICAgIC8vIEZvciBzeW1saW5rZWQgY29uZmlncyB0aGlzIHVzZXMgdHNjb25maWdSYXcgdG8gcHJlc2VydmUgY3dkLXJlbGF0aXZlIGFsaWFzZXMuXG4gICAgICAuLi5lc2J1aWxkVHNjb25maWdPcHRpb25zLFxuICAgICAgZGVmaW5lOiBpbXBvcnRNZXRhRGVmaW5lLFxuICAgICAgcmVzb2x2ZUV4dGVuc2lvbnM6IFtcbiAgICAgICAgJy50cycsXG4gICAgICAgICcudHN4JyxcbiAgICAgICAgJy5tdHMnLFxuICAgICAgICAnLmN0cycsXG4gICAgICAgICcuanMnLFxuICAgICAgICAnLmpzeCcsXG4gICAgICAgICcubWpzJyxcbiAgICAgICAgJy5janMnLFxuICAgICAgXSxcbiAgICAgIC8vIFNvdXJjZSBtYXBzIGZvciBiZXR0ZXIgc3RhY2sgdHJhY2VzIGluIHN0ZXAgZXhlY3V0aW9uLiBTdGVwcyBleGVjdXRlXG4gICAgICAvLyBpbiBOb2RlLmpzIGNvbnRleHQgYW5kIGlubGluZSBzb3VyY2VtYXBzIGdpdmUgbWVhbmluZ2Z1bCBzdGFjayB0cmFjZXNcbiAgICAgIC8vIHdpdGggcHJvcGVyIGZpbGUgbmFtZXMgYW5kIGxpbmUgbnVtYmVycyB3aGVuIGVycm9ycyBvY2N1ciBpbiBkZWVwbHlcbiAgICAgIC8vIG5lc3RlZCBmdW5jdGlvbiBjYWxscyBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMuIERlZmF1bHRzIHRvIGlubGluZSBpblxuICAgICAgLy8gZGV2ZWxvcG1lbnQgYW5kIG9mZiBpbiBwcm9kdWN0aW9uIChzZWUgYGRlZmF1bHRTb3VyY2VtYXBNb2RlYCkgdG8ga2VlcFxuICAgICAgLy8gcHJvZHVjdGlvbiBmdW5jdGlvbiBidW5kbGVzIHNtYWxsOyBvdmVycmlkZSB3aXRoIHRoZSBgc291cmNlbWFwYFxuICAgICAgLy8gY29uZmlnIG9wdGlvbiBvciB0aGUgYFdPUktGTE9XX1NPVVJDRU1BUGAgZW52IHZhci5cbiAgICAgIHNvdXJjZW1hcDogdGhpcy5yZXNvbHZlU291cmNlbWFwKHRoaXMuZGVmYXVsdFNvdXJjZW1hcE1vZGUpLFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICAvLyBIYW5kbGUgcHNldWRvLXBhY2thZ2VzIGxpa2UgJ3NlcnZlci1vbmx5JyBhbmQgJ2NsaWVudC1vbmx5JyBieSBwcm92aWRpbmdcbiAgICAgICAgLy8gZW1wdHkgbW9kdWxlcy4gTXVzdCBydW4gZmlyc3QgdG8gaW50ZXJjZXB0IHRoZXNlIGJlZm9yZSBvdGhlciByZXNvbHV0aW9uLlxuICAgICAgICBjcmVhdGVQc2V1ZG9QYWNrYWdlUGx1Z2luKCksXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIGVudHJpZXNUb0J1bmRsZTogbm9ybWFsaXplZEVudHJpZXNUb0J1bmRsZSxcbiAgICAgICAgICBvdXRkaXI6IG91dGZpbGUgPyBkaXJuYW1lKG91dGZpbGUpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByb2plY3RSb290OiB0aGlzLnRyYW5zZm9ybVByb2plY3RSb290LFxuICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3Q6IHRoaXMubW9kdWxlU3BlY2lmaWVyUm9vdCxcbiAgICAgICAgICB3b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXMsXG4gICAgICAgICAgcmV3cml0ZVRzRXh0ZW5zaW9ucyxcbiAgICAgICAgICBzaWRlRWZmZWN0RW50cmllczogbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICAvLyBQbHVnaW4gc2hvdWxkIGNhdGNoIG1vc3QgdGhpbmdzLCBidXQgdGhpcyBsZXRzIHVzZXJzIGhhcmQgb3ZlcnJpZGVcbiAgICAgIC8vIGlmIHRoZSBwbHVnaW4gbWlzc2VzIGFueXRoaW5nIHRoYXQgc2hvdWxkIGJlIGV4dGVybmFsaXplZFxuICAgICAgZXh0ZXJuYWw6IFsnYnVuJywgJ2J1bjoqJywgLi4uKHRoaXMuY29uZmlnLmV4dGVybmFsUGFja2FnZXMgfHwgW10pXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0ZXBzUmVzdWx0ID0gYXdhaXQgZXNidWlsZEN0eC5yZWJ1aWxkKCk7XG5cbiAgICB0aGlzLmxvZ0VzYnVpbGRNZXNzYWdlcyhzdGVwc1Jlc3VsdCwgJ3N0ZXBzIGJ1bmRsZSBjcmVhdGlvbicpO1xuICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKFxuICAgICAgJ0NyZWF0ZWQgc3RlcHMgYnVuZGxlJyxcbiAgICAgIGAke0RhdGUubm93KCkgLSBzdGVwc0J1bmRsZVN0YXJ0fW1zYFxuICAgICk7XG5cbiAgICAvLyBIYW5kbGUgd29ya2Zsb3ctb25seSBmaWxlcyB0aGF0IG1heSBoYXZlIGJlZW4gdHJlZS1zaGFrZW4gZnJvbSB0aGUgYnVuZGxlLlxuICAgIC8vIFRoZXNlIGZpbGVzIGhhdmUgbm8gc3RlcHMsIHNvIGVzYnVpbGQgcmVtb3ZlcyB0aGVtLCBidXQgd2Ugc3RpbGwgbmVlZCB0aGVpclxuICAgIC8vIHdvcmtmbG93IG1ldGFkYXRhIGZvciB0aGUgbWFuaWZlc3QuIFRyYW5zZm9ybSB0aGVtIHNlcGFyYXRlbHkuXG4gICAgY29uc3Qgd29ya2Zsb3dPbmx5RmlsZXMgPSB3b3JrZmxvd0ZpbGVzLmZpbHRlcihcbiAgICAgIChmKSA9PiAhc3RlcEZpbGVzLmluY2x1ZGVzKGYpXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHdvcmtmbG93T25seUZpbGVzLm1hcChhc3luYyAod29ya2Zsb3dGaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUod29ya2Zsb3dGaWxlLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlRmlsZXBhdGggPSB0aGlzLmdldFJlbGF0aXZlRmlsZXBhdGgod29ya2Zsb3dGaWxlKTtcbiAgICAgICAgICBjb25zdCB7IHdvcmtmbG93TWFuaWZlc3Q6IGZpbGVNYW5pZmVzdCB9ID0gYXdhaXQgYXBwbHlTd2NUcmFuc2Zvcm0oXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgJ3dvcmtmbG93JyxcbiAgICAgICAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtUHJvamVjdFJvb3QsXG4gICAgICAgICAgICB0aGlzLm1vZHVsZVNwZWNpZmllclJvb3RcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmaWxlTWFuaWZlc3Qud29ya2Zsb3dzKSB7XG4gICAgICAgICAgICB3b3JrZmxvd01hbmlmZXN0LndvcmtmbG93cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3Qud29ya2Zsb3dzIHx8IHt9LFxuICAgICAgICAgICAgICBmaWxlTWFuaWZlc3Qud29ya2Zsb3dzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsZU1hbmlmZXN0LmNsYXNzZXMpIHtcbiAgICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3QuY2xhc3NlcyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3QuY2xhc3NlcyB8fCB7fSxcbiAgICAgICAgICAgICAgZmlsZU1hbmlmZXN0LmNsYXNzZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIExvZyB3YXJuaW5nIGJ1dCBjb250aW51ZSAtIGRvbid0IGZhaWwgYnVpbGQgZm9yIHdvcmtmbG93LW9ubHkgZmlsZSBpc3N1ZXNcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgV2FybmluZzogRmFpbGVkIHRvIGV4dHJhY3Qgd29ya2Zsb3cgbWV0YWRhdGEgZnJvbSAke3dvcmtmbG93RmlsZX06YCxcbiAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3djSWdub3JlZCgpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICByZXR1cm4geyBjb250ZXh0OiBlc2J1aWxkQ3R4LCBtYW5pZmVzdDogd29ya2Zsb3dNYW5pZmVzdCB9O1xuICAgIH1cbiAgICBhd2FpdCBlc2J1aWxkQ3R4LmRpc3Bvc2UoKTtcbiAgICByZXR1cm4geyBjb250ZXh0OiB1bmRlZmluZWQsIG1hbmlmZXN0OiB3b3JrZmxvd01hbmlmZXN0IH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGJ1bmRsZSBmb3Igd29ya2Zsb3cgb3JjaGVzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAqIFdvcmtmbG93cyBydW4gaW4gYSBzYW5kYm94ZWQgVk0gYW5kIGNvb3JkaW5hdGUgc3RlcCBleGVjdXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBidW5kbGVGaW5hbE91dHB1dCAtIElmIGZhbHNlLCBza2lwcyB0aGUgZmluYWwgYnVuZGxpbmcgc3RlcCAodXNlZCBieSBOZXh0LmpzKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVdvcmtmbG93c0J1bmRsZSh7XG4gICAgaW5wdXRGaWxlcyxcbiAgICBmb3JtYXQgPSAnZXNtJyxcbiAgICBvdXRmaWxlLFxuICAgIGJ1bmRsZUZpbmFsT3V0cHV0ID0gdHJ1ZSxcbiAgICBrZWVwSW50ZXJpbUJ1bmRsZUNvbnRleHQgPSB0aGlzLmNvbmZpZy53YXRjaCxcbiAgICB0c2NvbmZpZ1BhdGgsXG4gICAgZGlzY292ZXJlZEVudHJpZXMsXG4gIH06IHtcbiAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gICAgb3V0ZmlsZTogc3RyaW5nO1xuICAgIGZvcm1hdD86ICdjanMnIHwgJ2VzbSc7XG4gICAgYnVuZGxlRmluYWxPdXRwdXQ/OiBib29sZWFuO1xuICAgIGtlZXBJbnRlcmltQnVuZGxlQ29udGV4dD86IGJvb2xlYW47XG4gICAgZGlzY292ZXJlZEVudHJpZXM/OiBEaXNjb3ZlcmVkRW50cmllcztcbiAgfSk6IFByb21pc2U8e1xuICAgIG1hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0O1xuICAgIGludGVyaW1CdW5kbGVDdHg/OiBlc2J1aWxkLkJ1aWxkQ29udGV4dDtcbiAgICBidW5kbGVGaW5hbD86IChpbnRlcmltQnVuZGxlUmVzdWx0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gICAgLyoqIFRoZSByYXcgd29ya2Zsb3cgVk0gY29kZSAoYmVmb3JlIHdyYXBwaW5nIHdpdGggZW50cnlwb2ludCkgKi9cbiAgICBpbnRlcmltQnVuZGxlVGV4dD86IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IGRpc2NvdmVyZWQgPVxuICAgICAgZGlzY292ZXJlZEVudHJpZXMgPz9cbiAgICAgIChhd2FpdCB0aGlzLmRpc2NvdmVyRW50cmllcyhpbnB1dEZpbGVzLCBkaXJuYW1lKG91dGZpbGUpLCB0c2NvbmZpZ1BhdGgpKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGVzID0gWy4uLmRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93c10uc29ydCgpO1xuICAgIGNvbnN0IHNlcmRlRmlsZXMgPSBbLi4uZGlzY292ZXJlZC5kaXNjb3ZlcmVkU2VyZGVGaWxlc10uc29ydCgpO1xuXG4gICAgLy8gSW5jbHVkZSBzZXJkZSBmaWxlcyB0aGF0IGFyZW4ndCBhbHJlYWR5IHdvcmtmbG93IGZpbGVzIGZvciBjcm9zcy1jb250ZXh0IGNsYXNzIHJlZ2lzdHJhdGlvbi5cbiAgICAvLyBDbGFzc2VzIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgd29ya2Zsb3cgYnVuZGxlIHNvIHRoZXkgY2FuIGJlIGRlc2VyaWFsaXplZFxuICAgIC8vIHdoZW4gcmVjZWl2aW5nIGRhdGEgZnJvbSBzdGVwcyBvciB3aGVuIHNlcmlhbGl6aW5nIGRhdGEgdG8gc2VuZCB0byBzdGVwcy5cbiAgICBjb25zdCB3b3JrZmxvd0ZpbGVzU2V0ID0gbmV3IFNldCh3b3JrZmxvd0ZpbGVzKTtcbiAgICBjb25zdCBzZXJkZU9ubHlGaWxlcyA9IHNlcmRlRmlsZXMuZmlsdGVyKChmKSA9PiAhd29ya2Zsb3dGaWxlc1NldC5oYXMoZikpO1xuXG4gICAgLy8gbG9nIHRoZSB3b3JrZmxvdyBmaWxlcyBmb3IgZGVidWdnaW5nXG4gICAgYXdhaXQgdGhpcy53cml0ZURlYnVnRmlsZShvdXRmaWxlLCB7IHdvcmtmbG93RmlsZXMsIHNlcmRlT25seUZpbGVzIH0pO1xuXG4gICAgLy8gSGVscGVyIHRvIGNyZWF0ZSBpbXBvcnQgc3RhdGVtZW50IGZyb20gZmlsZSBwYXRoXG4gICAgLy8gRm9yIHBhY2thZ2VzLCB1c2VzIHRoZSBwYWNrYWdlIG5hbWUgc28gZXNidWlsZCB3aWxsIHJlc29sdmUgdGhyb3VnaFxuICAgIC8vIHBhY2thZ2UuanNvbiBleHBvcnRzIHdpdGggY29uZGl0aW9uczogWyd3b3JrZmxvdyddXG4gICAgY29uc3QgY3JlYXRlSW1wb3J0ID0gKGZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBpbXBvcnRQYXRoLCBpc1BhY2thZ2UgfSA9IGdldEltcG9ydFBhdGgoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHRoaXMuY29uZmlnLndvcmtpbmdEaXJcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc1BhY2thZ2UpIHtcbiAgICAgICAgLy8gVXNlIHBhY2thZ2UgbmFtZSAtIGVzYnVpbGQgd2lsbCByZXNvbHZlIHZpYSBwYWNrYWdlLmpzb24gZXhwb3J0c1xuICAgICAgICAvLyBhbmQgYXBwbHkgdGhlICd3b3JrZmxvdycgY29uZGl0aW9uXG4gICAgICAgIHJldHVybiBgaW1wb3J0ICcke2ltcG9ydFBhdGh9JztgO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2NhbCBhcHAgZmlsZSAtIHVzZSByZWxhdGl2ZSBwYXRoXG4gICAgICAvLyBOb3JtYWxpemUgYm90aCBwYXRocyB0byBmb3J3YXJkIHNsYXNoZXMgYmVmb3JlIGNhbGxpbmcgcmVsYXRpdmUoKVxuICAgICAgLy8gVGhpcyBpcyBjcml0aWNhbCBvbiBXaW5kb3dzIHdoZXJlIHJlbGF0aXZlKCkgY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzIHdpdGggbWl4ZWQgcGF0aCBmb3JtYXRzXG4gICAgICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHRoaXMuY29uZmlnLndvcmtpbmdEaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgIC8vIENhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoIGZyb20gd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGZpbGVcbiAgICAgIGxldCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShub3JtYWxpemVkV29ya2luZ0Rpciwgbm9ybWFsaXplZEZpbGUpLnJlcGxhY2UoXG4gICAgICAgIC9cXFxcL2csXG4gICAgICAgICcvJ1xuICAgICAgKTtcbiAgICAgIC8vIEVuc3VyZSByZWxhdGl2ZSBwYXRocyBzdGFydCB3aXRoIC4vIHNvIGVzYnVpbGQgcmVzb2x2ZXMgdGhlbSBjb3JyZWN0bHkuXG4gICAgICAvLyBQYXRocyBsaWtlIFwiLm91dHB1dC8uLi5cIiBhcmUgbm90IHZhbGlkIHJlbGF0aXZlIHNwZWNpZmllcnMgYW5kIG11c3RcbiAgICAgIC8vIGJlY29tZSBcIi4vLm91dHB1dC8uLi5cIi5cbiAgICAgIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4vJykgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICByZWxhdGl2ZVBhdGggPSBgLi8ke3JlbGF0aXZlUGF0aH1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBpbXBvcnQgJyR7cmVsYXRpdmVQYXRofSc7YDtcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGEgdmlydHVhbCBlbnRyeSB0aGF0IGltcG9ydHMgYWxsIHdvcmtmbG93IGZpbGVzLiBEZWR1cGUgYnlcbiAgICAvLyBjYW5vbmljYWwgbW9kdWxlIGlkZW50aXR5IHNvIHNvdXJjZS9kaXN0IGNvcGllcyBvZiB0aGUgc2FtZSB3b3Jrc3BhY2VcbiAgICAvLyBwYWNrYWdlIGV4cG9ydCBkb24ndCBib3RoIGdldCBpbXBvcnRlZCAod2hpY2ggd291bGQgbWFrZSB0aGUgc3djXG4gICAgLy8gcGx1Z2luIGdlbmVyYXRlIGR1cGxpY2F0ZSB3b3JrZmxvdyBJRHMpLlxuICAgIGNvbnN0IGVtaXR0ZWRJbXBvcnRJZGVudGl0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgYnVpbGRJbXBvcnRzID0gKGZpbGVzOiBzdHJpbmdbXSk6IHN0cmluZyA9PlxuICAgICAgZmlsZXNcbiAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkZW50aXR5ID0gbW9kdWxlSWRlbnRpdHlLZXkoZmlsZSwgdGhpcy5tb2R1bGVTcGVjaWZpZXJSb290KTtcbiAgICAgICAgICBpZiAoZW1pdHRlZEltcG9ydElkZW50aXRpZXMuaGFzKGlkZW50aXR5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGVtaXR0ZWRJbXBvcnRJZGVudGl0aWVzLmFkZChpZGVudGl0eSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoY3JlYXRlSW1wb3J0KVxuICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAvLyBUaGUgU1dDIHBsdWdpbiBpbiB3b3JrZmxvdyBtb2RlIGVtaXRzIGBnbG9iYWxUaGlzLl9fcHJpdmF0ZV93b3JrZmxvd3Muc2V0KHdvcmtmbG93SWQsIGZuKWBcbiAgICAvLyBjYWxscyBkaXJlY3RseSwgc28gd2UganVzdCBuZWVkIHRvIGltcG9ydCB0aGUgZmlsZXMgKE1hcCBpcyBpbml0aWFsaXplZCB2aWEgYmFubmVyKVxuICAgIGNvbnN0IHdvcmtmbG93SW1wb3J0cyA9IGJ1aWxkSW1wb3J0cyh3b3JrZmxvd0ZpbGVzKTtcblxuICAgIC8vIEluY2x1ZGUgc2VyZGUtb25seSBmaWxlcyBmb3IgY2xhc3MgcmVnaXN0cmF0aW9uIHNpZGUgZWZmZWN0c1xuICAgIGNvbnN0IHNlcmRlSW1wb3J0cyA9IGJ1aWxkSW1wb3J0cyhzZXJkZU9ubHlGaWxlcyk7XG5cbiAgICBjb25zdCBpbXBvcnRzID0gc2VyZGVJbXBvcnRzXG4gICAgICA/IGAke3dvcmtmbG93SW1wb3J0c31cXG4vLyBTZXJkZSBmaWxlcyBmb3IgY3Jvc3MtY29udGV4dCBjbGFzcyByZWdpc3RyYXRpb25cXG4ke3NlcmRlSW1wb3J0c31gXG4gICAgICA6IHdvcmtmbG93SW1wb3J0cztcblxuICAgIGNvbnN0IGJ1bmRsZVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgd29ya2Zsb3dNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdCA9IHt9O1xuICAgIGNvbnN0IGVzYnVpbGRUc2NvbmZpZ09wdGlvbnMgPVxuICAgICAgYXdhaXQgZ2V0RXNidWlsZFRzY29uZmlnT3B0aW9ucyh0c2NvbmZpZ1BhdGgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3JrZmxvd1NpZGVFZmZlY3RFbnRyaWVzID0gYXdhaXQgd2l0aFJlYWxwYXRocyhbXG4gICAgICAuLi53b3JrZmxvd0ZpbGVzLFxuICAgICAgLi4uc2VyZGVPbmx5RmlsZXMsXG4gICAgXSk7XG5cbiAgICAvLyBCdW5kbGUgd2l0aCBlc2J1aWxkIGFuZCBvdXIgY3VzdG9tIFNXQyBwbHVnaW4gaW4gd29ya2Zsb3cgbW9kZS5cbiAgICAvLyB0aGlzIGJ1bmRsZSB3aWxsIGJlIHJ1biBpbnNpZGUgYSB2bSBpc29sYXRlXG4gICAgY29uc3QgaW50ZXJpbUJ1bmRsZUN0eCA9IGF3YWl0IGVzYnVpbGQuY29udGV4dCh7XG4gICAgICBzdGRpbjoge1xuICAgICAgICBjb250ZW50czogaW1wb3J0cyxcbiAgICAgICAgcmVzb2x2ZURpcjogdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgc291cmNlZmlsZTogJ3ZpcnR1YWwtZW50cnkuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgIGZvcm1hdDogJ2NqcycsIC8vIFJ1bnMgaW5zaWRlIHRoZSBWTSB3aGljaCBleHBlY3RzIGNqc1xuICAgICAgcGxhdGZvcm06ICduZXV0cmFsJywgLy8gVGhlIHBsYXRmb3JtIGlzIG5laXRoZXIgbm9kZSBub3IgYnJvd3NlclxuICAgICAgbWFpbkZpZWxkczogWydtb2R1bGUnLCAnbWFpbiddLCAvLyBUbyBzdXBwb3J0IG5wbSBzdHlsZSBpbXBvcnRzXG4gICAgICBjb25kaXRpb25zOiBbJ3dvcmtmbG93J10sIC8vIEFsbG93IHBhY2thZ2VzIHRvIGV4cG9ydCAnd29ya2Zsb3cnIGNvbXBsaWFudCB2ZXJzaW9uc1xuICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgIHdyaXRlOiBmYWxzZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAga2VlcE5hbWVzOiB0cnVlLFxuICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIHdvcmtmbG93IHJlZ2lzdHJ5IGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgYnVuZGxlXG4gICAgICAvLyBUaGlzIG11c3QgYmUgaW4gYmFubmVyIChub3QgdGhlIHZpcnR1YWwgZW50cnkpIGJlY2F1c2UgZXNidWlsZCdzIGJ1bmRsaW5nXG4gICAgICAvLyBjYW4gcmVvcmRlciBjb2RlLCBhbmQgdGhlIC5zZXQoKSBjYWxscyBuZWVkIHRoZSBNYXAgdG8gZXhpc3QgZmlyc3RcbiAgICAgIGJhbm5lcjoge1xuICAgICAgICBqczogJ2dsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cyA9IG5ldyBNYXAoKTsnLFxuICAgICAgfSxcbiAgICAgIC8vIFNvdXJjZSBtYXBzIGZvciBiZXR0ZXIgc3RhY2sgdHJhY2VzIGluIHdvcmtmbG93IFZNIGV4ZWN1dGlvbi4gVGhpc1xuICAgICAgLy8gaW50ZXJtZWRpYXRlIGJ1bmRsZSBpcyBleGVjdXRlZCB2aWEgcnVuSW5Db250ZXh0KCkgaW4gYSBWTSwgc28gaW5saW5lXG4gICAgICAvLyBzb3VyY2UgbWFwcyBnaXZlIG1lYW5pbmdmdWwgc3RhY2sgdHJhY2VzIGluc3RlYWQgb2ZcbiAgICAgIC8vIFwiZXZhbG1hY2hpbmUuPGFub255bW91cz5cIi4gRGVmYXVsdHMgdG8gaW5saW5lIGluIGRldmVsb3BtZW50IGFuZCBvZmYgaW5cbiAgICAgIC8vIHByb2R1Y3Rpb24gKHNlZSBgZGVmYXVsdFNvdXJjZW1hcE1vZGVgKSB0byBrZWVwIHByb2R1Y3Rpb24gZnVuY3Rpb25cbiAgICAgIC8vIGJ1bmRsZXMgc21hbGw7IG92ZXJyaWRlIHdpdGggdGhlIGBzb3VyY2VtYXBgIGNvbmZpZyBvcHRpb24gb3IgdGhlXG4gICAgICAvLyBgV09SS0ZMT1dfU09VUkNFTUFQYCBlbnYgdmFyLiBUaGUgcnVudGltZSByZW1hcHMgc3RhY2tzIG9ubHkgd2hlbiBhXG4gICAgICAvLyBtYXAgaXMgcHJlc2VudCwgc28gZGlzYWJsaW5nIG1hcHMgZGVncmFkZXMgZ3JhY2VmdWxseS5cbiAgICAgIHNvdXJjZW1hcDogdGhpcy5yZXNvbHZlU291cmNlbWFwKHRoaXMuZGVmYXVsdFNvdXJjZW1hcE1vZGUpLFxuICAgICAgLy8gVXNlIHRzY29uZmlnIGZvciBwYXRoIGFsaWFzIHJlc29sdXRpb24uXG4gICAgICAvLyBGb3Igc3ltbGlua2VkIGNvbmZpZ3MgdGhpcyB1c2VzIHRzY29uZmlnUmF3IHRvIHByZXNlcnZlIGN3ZC1yZWxhdGl2ZSBhbGlhc2VzLlxuICAgICAgLi4uZXNidWlsZFRzY29uZmlnT3B0aW9ucyxcbiAgICAgIHJlc29sdmVFeHRlbnNpb25zOiBbXG4gICAgICAgICcudHMnLFxuICAgICAgICAnLnRzeCcsXG4gICAgICAgICcubXRzJyxcbiAgICAgICAgJy5jdHMnLFxuICAgICAgICAnLmpzJyxcbiAgICAgICAgJy5qc3gnLFxuICAgICAgICAnLm1qcycsXG4gICAgICAgICcuY2pzJyxcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIC8vIEhhbmRsZSBwc2V1ZG8tcGFja2FnZXMgbGlrZSAnc2VydmVyLW9ubHknIGFuZCAnY2xpZW50LW9ubHknIGJ5IHByb3ZpZGluZ1xuICAgICAgICAvLyBlbXB0eSBtb2R1bGVzLiBNdXN0IHJ1biBmaXJzdCB0byBpbnRlcmNlcHQgdGhlc2UgYmVmb3JlIG90aGVyIHJlc29sdXRpb24uXG4gICAgICAgIGNyZWF0ZVBzZXVkb1BhY2thZ2VQbHVnaW4oKSxcbiAgICAgICAgY3JlYXRlU3djUGx1Z2luKHtcbiAgICAgICAgICBtb2RlOiAnd29ya2Zsb3cnLFxuICAgICAgICAgIHByb2plY3RSb290OiB0aGlzLnRyYW5zZm9ybVByb2plY3RSb290LFxuICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3Q6IHRoaXMubW9kdWxlU3BlY2lmaWVyUm9vdCxcbiAgICAgICAgICB3b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgIHNpZGVFZmZlY3RFbnRyaWVzOiBub3JtYWxpemVkV29ya2Zsb3dTaWRlRWZmZWN0RW50cmllcyxcbiAgICAgICAgfSksXG4gICAgICAgIC8vIFRoaXMgcGx1Z2luIG11c3QgcnVuIGFmdGVyIHRoZSBzd2MgcGx1Z2luIHRvIGVuc3VyZSBkZWFkIGNvZGUgZWxpbWluYXRpb25cbiAgICAgICAgLy8gaGFwcGVucyBmaXJzdCwgcHJldmVudGluZyBmYWxzZSBwb3NpdGl2ZXMgb24gTm9kZS5qcyBpbXBvcnRzIGluIHVudXNlZCBjb2RlIHBhdGhzXG4gICAgICAgIGNyZWF0ZU5vZGVNb2R1bGVFcnJvclBsdWdpbigpLFxuICAgICAgXSxcbiAgICAgIC8vIE5PVEU6IFdlIGludGVudGlvbmFsbHkgZG8gTk9UIHVzZSB0aGUgZXh0ZXJuYWwgb3B0aW9uIGhlcmUgZm9yIHdvcmtmbG93IGJ1bmRsZXMuXG4gICAgICAvLyBXaGVuIHBhY2thZ2VzIGFyZSBtYXJrZWQgZXh0ZXJuYWwgd2l0aCBmb3JtYXQ6ICdjanMnLCBlc2J1aWxkIGdlbmVyYXRlcyByZXF1aXJlKCkgY2FsbHMuXG4gICAgICAvLyBIb3dldmVyLCB0aGUgd29ya2Zsb3cgVk0gKHZtLnJ1bkluQ29udGV4dCkgZG9lcyBub3QgaGF2ZSByZXF1aXJlKCkgZGVmaW5lZCAtIGl0IG9ubHlcbiAgICAgIC8vIHByb3ZpZGVzIG1vZHVsZS5leHBvcnRzIGFuZCBleHBvcnRzLiBFeHRlcm5hbCBwYWNrYWdlcyB3b3VsZCBmYWlsIGF0IHJ1bnRpbWUgd2l0aDpcbiAgICAgIC8vICAgUmVmZXJlbmNlRXJyb3I6IHJlcXVpcmUgaXMgbm90IGRlZmluZWRcbiAgICAgIC8vIEluc3RlYWQsIHdlIGJ1bmRsZSBldmVyeXRoaW5nIGFuZCByZWx5IG9uOlxuICAgICAgLy8gLSBjcmVhdGVQc2V1ZG9QYWNrYWdlUGx1Z2luKCkgdG8gaGFuZGxlIHNlcnZlci1vbmx5L2NsaWVudC1vbmx5IHdpdGggZW1wdHkgbW9kdWxlc1xuICAgICAgLy8gLSBjcmVhdGVOb2RlTW9kdWxlRXJyb3JQbHVnaW4oKSB0byBjYXRjaCBOb2RlLmpzIGJ1aWx0aW4gaW1wb3J0cyBhdCBidWlsZCB0aW1lXG4gICAgfSk7XG4gICAgbGV0IHNob3VsZERpc3Bvc2VJbnRlcmltQnVuZGxlQ3R4ID0gIWtlZXBJbnRlcmltQnVuZGxlQ29udGV4dDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW50ZXJpbUJ1bmRsZSA9IGF3YWl0IGludGVyaW1CdW5kbGVDdHgucmVidWlsZCgpO1xuXG4gICAgICB0aGlzLmxvZ0VzYnVpbGRNZXNzYWdlcyhcbiAgICAgICAgaW50ZXJpbUJ1bmRsZSxcbiAgICAgICAgJ2ludGVybWVkaWF0ZSB3b3JrZmxvdyBidW5kbGUnLFxuICAgICAgICB0cnVlLFxuICAgICAgICB7XG4gICAgICAgICAgc3VwcHJlc3NXYXJuaW5nczogdGhpcy5jb25maWcuc3VwcHJlc3NDcmVhdGVXb3JrZmxvd3NCdW5kbGVXYXJuaW5ncyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nQ3JlYXRlV29ya2Zsb3dzQnVuZGxlSW5mbyhcbiAgICAgICAgJ0NyZWF0ZWQgaW50ZXJtZWRpYXRlIHdvcmtmbG93IGJ1bmRsZScsXG4gICAgICAgIGAke0RhdGUubm93KCkgLSBidW5kbGVTdGFydFRpbWV9bXNgXG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcud29ya2Zsb3dNYW5pZmVzdFBhdGgpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShcbiAgICAgICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgIHRoaXMuY29uZmlnLndvcmtmbG93TWFuaWZlc3RQYXRoXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwcmVmaXggPSAnJztcblxuICAgICAgICBpZiAocmVzb2x2ZWRQYXRoLmVuZHNXaXRoKCcuY2pzJykpIHtcbiAgICAgICAgICBwcmVmaXggPSAnbW9kdWxlLmV4cG9ydHMgPSAnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHJlc29sdmVkUGF0aC5lbmRzV2l0aCgnLmpzJykgfHxcbiAgICAgICAgICByZXNvbHZlZFBhdGguZW5kc1dpdGgoJy5tanMnKVxuICAgICAgICApIHtcbiAgICAgICAgICBwcmVmaXggPSAnZXhwb3J0IGRlZmF1bHQgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocmVzb2x2ZWRQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgICAgICByZXNvbHZlZFBhdGgsXG4gICAgICAgICAgcHJlZml4ICsgSlNPTi5zdHJpbmdpZnkod29ya2Zsb3dNYW5pZmVzdCwgbnVsbCwgMilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVTd2NJZ25vcmVkKCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWludGVyaW1CdW5kbGUub3V0cHV0RmlsZXMgfHxcbiAgICAgICAgaW50ZXJpbUJ1bmRsZS5vdXRwdXRGaWxlcy5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dCdWlsZEVycm9yKCdObyBvdXRwdXQgZmlsZXMgZ2VuZXJhdGVkIGZyb20gZXNidWlsZCcsIHtcbiAgICAgICAgICBoaW50OiAnVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIG1pc2NvbmZpZ3VyZWQgZW50cnkgcG9pbnQgb3IgYW4gZW1wdHkgd29ya2Zsb3cgZGlyZWN0b3J5LiBDaGVjayB0aGF0IHlvdXIgd29ya2Zsb3cgZmlsZXMgY29udGFpbiBhIGBcInVzZSB3b3JrZmxvd1wiYCBvciBgXCJ1c2Ugc3RlcFwiYCBkaXJlY3RpdmUuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcmRlIGNvbXBsaWFuY2Ugd2FybmluZ3M6IGNoZWNrIGlmIHdvcmtmbG93IGJ1bmRsZSBoYXMgTm9kZS5qcyBpbXBvcnRzXG4gICAgICAvLyBhbG9uZ3NpZGUgc2VyZGUtcmVnaXN0ZXJlZCBjbGFzc2VzICh0aGVzZSB3aWxsIGZhaWwgYXQgcnVudGltZSBpbiB0aGUgc2FuZGJveClcbiAgICAgIGlmIChcbiAgICAgICAgd29ya2Zsb3dNYW5pZmVzdC5jbGFzc2VzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKHdvcmtmbG93TWFuaWZlc3QuY2xhc3NlcykubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHsgYW5hbHl6ZVNlcmRlQ29tcGxpYW5jZSB9ID0gYXdhaXQgaW1wb3J0KCcuL3NlcmRlLWNoZWNrZXIuanMnKTtcbiAgICAgICAgY29uc3QgYnVuZGxlVGV4dCA9IGludGVyaW1CdW5kbGUub3V0cHV0RmlsZXNbMF0udGV4dDtcbiAgICAgICAgY29uc3Qgc2VyZGVSZXN1bHQgPSBhbmFseXplU2VyZGVDb21wbGlhbmNlKHtcbiAgICAgICAgICBzb3VyY2VDb2RlOiAnJyxcbiAgICAgICAgICB3b3JrZmxvd0NvZGU6IGJ1bmRsZVRleHQsXG4gICAgICAgICAgbWFuaWZlc3Q6IHdvcmtmbG93TWFuaWZlc3QsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBEZS1kdXBlIHdhcm5pbmdzOiBncm91cCBpZGVudGljYWwgaXNzdWVzIGFjcm9zcyBjbGFzc2VzXG4gICAgICAgIGNvbnN0IGlzc3Vlc1RvQ2xhc3NlcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBjbHMgb2Ygc2VyZGVSZXN1bHQuY2xhc3Nlcykge1xuICAgICAgICAgIGlmICghY2xzLmNvbXBsaWFudCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBjbHMuaXNzdWVzKSB7XG4gICAgICAgICAgICAgIGxldCBhZmZlY3RlZENsYXNzZXMgPSBpc3N1ZXNUb0NsYXNzZXMuZ2V0KGlzc3VlKTtcbiAgICAgICAgICAgICAgaWYgKCFhZmZlY3RlZENsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICBhZmZlY3RlZENsYXNzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICBpc3N1ZXNUb0NsYXNzZXMuc2V0KGlzc3VlLCBhZmZlY3RlZENsYXNzZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFmZmVjdGVkQ2xhc3Nlcy5hZGQoY2xzLmNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2lzc3VlLCBhZmZlY3RlZENsYXNzZXNdIG9mIGlzc3Vlc1RvQ2xhc3Nlcykge1xuICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbLi4uYWZmZWN0ZWRDbGFzc2VzXTtcbiAgICAgICAgICBjb25zdCBjbGFzc0xhYmVsID1cbiAgICAgICAgICAgIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgID8gYGNsYXNzIFwiJHtjbGFzc05hbWVzWzBdfVwiYFxuICAgICAgICAgICAgICA6IGBjbGFzc2VzICR7Y2xhc3NOYW1lcy5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9YDtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coYOKaoCBTZXJkZSB3YXJuaW5nIGZvciAke2NsYXNzTGFiZWx9OiBgKSArIGlzc3VlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3b3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSA9XG4gICAgICAgIGNyZWF0ZVdvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlKCk7XG5cbiAgICAgIGNvbnN0IGJ1bmRsZUZpbmFsID0gYXN5bmMgKGludGVyaW1CdW5kbGU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB3b3JrZmxvd0J1bmRsZUNvZGUgPSBpbnRlcmltQnVuZGxlO1xuXG4gICAgICAgIGNvbnN0IHdvcmtmbG93RnVuY3Rpb25Db2RlID0gYC8vIGJpb21lLWlnbm9yZS1hbGwgbGludDogZ2VuZXJhdGVkIGZpbGVcbi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyB3b3JrZmxvd0VudHJ5cG9pbnQgfSBmcm9tICd3b3JrZmxvdy9ydW50aW1lJztcblxuY29uc3Qgd29ya2Zsb3dDb2RlID0gXFxgJHt3b3JrZmxvd0J1bmRsZUNvZGUucmVwbGFjZSgvW1xcXFxgJF0vZywgJ1xcXFwkJicpfVxcYDtcblxuZXhwb3J0IGNvbnN0IFBPU1QgPSB3b3JrZmxvd0VudHJ5cG9pbnQod29ya2Zsb3dDb2RlJHt3b3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZX0pO2A7XG5cbiAgICAgICAgLy8gd2Ugc2tpcCB0aGUgZmluYWwgYnVuZGxpbmcgc3RlcCBmb3IgTmV4dC5qcyBzbyBpdCBjYW4gYnVuZGxlIGl0c2VsZlxuICAgICAgICBpZiAoIWJ1bmRsZUZpbmFsT3V0cHV0KSB7XG4gICAgICAgICAgaWYgKCFvdXRmaWxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFyaWFudDogbWlzc2luZyBvdXRmaWxlIGZvciB3b3JrZmxvdyBidW5kbGVgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRW5zdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgICAgIGNvbnN0IG91dHB1dERpciA9IGRpcm5hbWUob3V0ZmlsZSk7XG4gICAgICAgICAgYXdhaXQgbWtkaXIob3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICAgIC8vIEF0b21pYyB3cml0ZTogd3JpdGUgdG8gdGVtcCBmaWxlIHRoZW4gcmVuYW1lIHRvIHByZXZlbnRcbiAgICAgICAgICAvLyBmaWxlIHdhdGNoZXJzIGZyb20gcmVhZGluZyBwYXJ0aWFsIGZpbGUgZHVyaW5nIHdyaXRlXG4gICAgICAgICAgY29uc3QgdGVtcFBhdGggPSBgJHtvdXRmaWxlfS4ke3JhbmRvbVVVSUQoKX0udG1wYDtcbiAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGVtcFBhdGgsIHdvcmtmbG93RnVuY3Rpb25Db2RlKTtcbiAgICAgICAgICBhd2FpdCByZW5hbWUodGVtcFBhdGgsIG91dGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1bmRsZVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gTm93IGJ1bmRsZSB0aGlzIHNvIHdlIGNhbiByZXNvbHZlIHRoZSBAd29ya2Zsb3cvY29yZSBkZXBlbmRlbmN5XG4gICAgICAgIC8vIHdlIGNvdWxkIHJlbW92ZSB0aGlzIGlmIHdlIGRvIG5mdCB0cmFjaW5nIG9yIHNpbWlsYXIgaW5zdGVhZFxuICAgICAgICBjb25zdCBmaW5hbEVzbVJlcXVpcmVCYW5uZXIgPSB0aGlzLmdldEVzbVJlcXVpcmVCYW5uZXIoZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZmluYWxXb3JrZmxvd1Jlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgICAgIGJhbm5lcjoge1xuICAgICAgICAgICAganM6IGAvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXFxuLyogZXNsaW50LWRpc2FibGUgKi9cXG4ke2ZpbmFsRXNtUmVxdWlyZUJhbm5lcn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RkaW46IHtcbiAgICAgICAgICAgIGNvbnRlbnRzOiB3b3JrZmxvd0Z1bmN0aW9uQ29kZSxcbiAgICAgICAgICAgIHJlc29sdmVEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgICAgICBzb3VyY2VmaWxlOiAndmlydHVhbC1lbnRyeS5qcycsXG4gICAgICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRmaWxlLFxuICAgICAgICAgIC8vIFNvdXJjZSBtYXBzIGZvciB0aGUgZmluYWwgd29ya2Zsb3cgYnVuZGxlIHdyYXBwZXIgKG5vdCBpbXBvcnRhbnQgc2luY2UgdGhpcyBjb2RlXG4gICAgICAgICAgLy8gZG9lc24ndCBydW4gaW4gdGhlIFZNIC0gb25seSB0aGUgaW50ZXJtZWRpYXRlIGJ1bmRsZSBzb3VyY2VtYXAgaXMgcmVsZXZhbnQpXG4gICAgICAgICAgc291cmNlbWFwOiB0aGlzLnJlc29sdmVTb3VyY2VtYXAoRU1JVF9TT1VSQ0VNQVBTX0ZPUl9ERUJVR0dJTkcpLFxuICAgICAgICAgIGFic1dvcmtpbmdEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgICAgd3JpdGU6IHRydWUsXG4gICAgICAgICAga2VlcE5hbWVzOiB0cnVlLFxuICAgICAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAgICAgZXh0ZXJuYWw6IFsnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHknXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sb2dFc2J1aWxkTWVzc2FnZXMoXG4gICAgICAgICAgZmluYWxXb3JrZmxvd1Jlc3VsdCxcbiAgICAgICAgICAnZmluYWwgd29ya2Zsb3cgYnVuZGxlJyxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN1cHByZXNzV2FybmluZ3M6IHRoaXMuY29uZmlnLnN1cHByZXNzQ3JlYXRlV29ya2Zsb3dzQnVuZGxlV2FybmluZ3MsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ0NyZWF0ZVdvcmtmbG93c0J1bmRsZUluZm8oXG4gICAgICAgICAgJ0NyZWF0ZWQgZmluYWwgd29ya2Zsb3cgYnVuZGxlJyxcbiAgICAgICAgICBgJHtEYXRlLm5vdygpIC0gYnVuZGxlU3RhcnRUaW1lfW1zYFxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGludGVyaW1CdW5kbGVUZXh0ID0gaW50ZXJpbUJ1bmRsZS5vdXRwdXRGaWxlc1swXS50ZXh0O1xuICAgICAgYXdhaXQgYnVuZGxlRmluYWwoaW50ZXJpbUJ1bmRsZVRleHQpO1xuXG4gICAgICBpZiAoa2VlcEludGVyaW1CdW5kbGVDb250ZXh0KSB7XG4gICAgICAgIHNob3VsZERpc3Bvc2VJbnRlcmltQnVuZGxlQ3R4ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWFuaWZlc3Q6IHdvcmtmbG93TWFuaWZlc3QsXG4gICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICBidW5kbGVGaW5hbCxcbiAgICAgICAgICBpbnRlcmltQnVuZGxlVGV4dCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG1hbmlmZXN0OiB3b3JrZmxvd01hbmlmZXN0LCBpbnRlcmltQnVuZGxlVGV4dCB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzaG91bGREaXNwb3NlSW50ZXJpbUJ1bmRsZUN0eCA9IHRydWU7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHNob3VsZERpc3Bvc2VJbnRlcmltQnVuZGxlQ3R4KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaW50ZXJpbUJ1bmRsZUN0eC5kaXNwb3NlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGRpc3Bvc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdXYXJuaW5nOiBGYWlsZWQgdG8gZGlzcG9zZSB3b3JrZmxvdyBidW5kbGUgY29udGV4dCcsXG4gICAgICAgICAgICBkaXNwb3NlRXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFYyOiBDcmVhdGVzIGEgY29tYmluZWQgYnVuZGxlIHRoYXQgaW5jbHVkZXMgYm90aCBzdGVwIHJlZ2lzdHJhdGlvbnMgYW5kXG4gICAqIHdvcmtmbG93IG9yY2hlc3RyYXRpb24gaW4gYSBzaW5nbGUgcm91dGUuIFRoZSBjb21iaW5lZCBlbnRyeXBvaW50IGV4ZWN1dGVzXG4gICAqIHN0ZXBzIGlubGluZSB3aGVuIHBvc3NpYmxlLCByZWR1Y2luZyBmdW5jdGlvbiBpbnZvY2F0aW9ucyBhbmQgcXVldWUgb3ZlcmhlYWQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHJldXNlcyBjcmVhdGVTdGVwc0J1bmRsZSAoZm9yIHN0ZXAgcmVnaXN0cmF0aW9ucykgYW5kXG4gICAqIGNyZWF0ZVdvcmtmbG93c0J1bmRsZSAoZm9yIHdvcmtmbG93IFZNIGNvZGUpLCB0aGVuIGNvbWJpbmVzIHRoZW0gaW50b1xuICAgKiBhIHNpbmdsZSByb3V0ZSBmaWxlIHVzaW5nIHdvcmtmbG93RW50cnlwb2ludCgpLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICBpbnB1dEZpbGVzLFxuICAgIHN0ZXBzT3V0ZmlsZSxcbiAgICBmbG93T3V0ZmlsZSxcbiAgICBmb3JtYXQgPSAnZXNtJyxcbiAgICBidW5kbGVGaW5hbE91dHB1dCA9IHRydWUsXG4gICAgdHNjb25maWdQYXRoLFxuICAgIGV4dGVybmFsaXplTm9uU3RlcHMsXG4gICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcyxcbiAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgfToge1xuICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICAgIC8qKiBPdXRwdXQgcGF0aCBmb3IgdGhlIHN0ZXAgcmVnaXN0cmF0aW9ucyBidW5kbGUgKHNpZGUgZWZmZWN0cyBvbmx5KSAqL1xuICAgIHN0ZXBzT3V0ZmlsZTogc3RyaW5nO1xuICAgIC8qKiBPdXRwdXQgcGF0aCBmb3IgdGhlIGNvbWJpbmVkIHJvdXRlIGZpbGUgKi9cbiAgICBmbG93T3V0ZmlsZTogc3RyaW5nO1xuICAgIGZvcm1hdD86ICdjanMnIHwgJ2VzbSc7XG4gICAgYnVuZGxlRmluYWxPdXRwdXQ/OiBib29sZWFuO1xuICAgIHRzY29uZmlnUGF0aD86IHN0cmluZztcbiAgICBleHRlcm5hbGl6ZU5vblN0ZXBzPzogYm9vbGVhbjtcbiAgICBidW5kbGVUcmFuc2l0aXZlTG9jYWxTdGVwRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcbiAgICBkaXNjb3ZlcmVkRW50cmllcz86IERpc2NvdmVyZWRFbnRyaWVzO1xuICB9KTogUHJvbWlzZTx7XG4gICAgbWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3Q7XG4gICAgc3RlcHNDb250ZXh0PzogZXNidWlsZC5CdWlsZENvbnRleHQ7XG4gICAgaW50ZXJpbUJ1bmRsZUN0eD86IGVzYnVpbGQuQnVpbGRDb250ZXh0O1xuICAgIGJ1bmRsZUZpbmFsPzogKGludGVyaW1CdW5kbGVSZXN1bHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgfT4ge1xuICAgIC8vIDEuIEJ1aWxkIHN0ZXAgcmVnaXN0cmF0aW9ucyBidW5kbGUgKHVzZWQgYXMgc2VwYXJhdGUgZmlsZSBmb3JcbiAgICAvLyBidW5kbGVGaW5hbE91dHB1dDogZmFsc2UsIG9yIHJlYWQgYmFjayBmb3IgaW5saW5lIGNvbnRlbnQgd2hlbiB0cnVlKVxuICAgIGNvbnN0IHsgY29udGV4dDogc3RlcHNDb250ZXh0LCBtYW5pZmVzdDogc3RlcHNNYW5pZmVzdCB9ID1cbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU3RlcHNCdW5kbGUoe1xuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICBvdXRmaWxlOiBzdGVwc091dGZpbGUsXG4gICAgICAgIC8vIFdoZW4gYnVuZGxlRmluYWxPdXRwdXQgaXMgdHJ1ZSwgdXNlIEVTTSBmb3IgdGhlIHN0ZXBzIGJ1bmRsZVxuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHRoZSBmaW5hbCBvdXRwdXQgZm9ybWF0LiBUaGUgZmluYWwgZXNidWlsZCBwYXNzXG4gICAgICAgIC8vIGNvbnZlcnRzIGV2ZXJ5dGhpbmcgdG8gdGhlIHRhcmdldCBmb3JtYXQuIFVzaW5nIENKUyBoZXJlIGNhdXNlc1xuICAgICAgICAvLyBhIG1vZHVsZS5leHBvcnRzIGNvbGxpc2lvbjogdGhlIHN0ZXBzIGJ1bmRsZSdzIHRvcC1sZXZlbFxuICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBvdmVyd3JpdGVzIHRoZSBjb21iaW5lZCByb3V0ZSdzIG1vZHVsZS5leHBvcnRzXG4gICAgICAgIC8vIHdoZW4gZXNidWlsZCBpbmxpbmVzIHRoZSBzdGVwcyB3aXRob3V0IGEgX19jb21tb25KUyB3cmFwcGVyLlxuICAgICAgICBmb3JtYXQ6IGJ1bmRsZUZpbmFsT3V0cHV0ID8gJ2VzbScgOiBmb3JtYXQsXG4gICAgICAgIGV4dGVybmFsaXplTm9uU3RlcHMsXG4gICAgICAgIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXMsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgIC8vIFNraXAgdGhlIGNyZWF0ZVJlcXVpcmUgYmFubmVyIGhlcmUg4oCUIHdoZW4gYnVuZGxlRmluYWxPdXRwdXQgaXMgdHJ1ZVxuICAgICAgICAvLyB0aGUgb3V0ZXIgZXNidWlsZCBwYXNzIHdpbGwgaW5saW5lIHRoaXMgYnVuZGxlIGFuZCBhZGQgaXRzIG93blxuICAgICAgICAvLyBiYW5uZXIuIEVtaXR0aW5nIGl0IHR3aWNlIGRlY2xhcmVzIF9fY3JlYXRlUmVxdWlyZSB0d2ljZS5cbiAgICAgICAgc2tpcEVzbVJlcXVpcmVCYW5uZXI6IGJ1bmRsZUZpbmFsT3V0cHV0LFxuICAgICAgfSk7XG5cbiAgICAvLyAyLiBCdWlsZCB3b3JrZmxvdyBWTSBjb2RlXG4gICAgY29uc3QgdGVtcFdvcmtmbG93T3V0ZmlsZSA9IGAke2Zsb3dPdXRmaWxlfS5fX3dmX3RtcC5qc2A7XG4gICAgY29uc3Qgd29ya2Zsb3dzUmVzdWx0ID0gYXdhaXQgdGhpcy5jcmVhdGVXb3JrZmxvd3NCdW5kbGUoe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIG91dGZpbGU6IHRlbXBXb3JrZmxvd091dGZpbGUsXG4gICAgICBmb3JtYXQsXG4gICAgICBidW5kbGVGaW5hbE91dHB1dDogZmFsc2UsXG4gICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHdvcmtmbG93Vk1Db2RlID0gd29ya2Zsb3dzUmVzdWx0LmludGVyaW1CdW5kbGVUZXh0O1xuICAgIGlmICghd29ya2Zsb3dWTUNvZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlV29ya2Zsb3dzQnVuZGxlIGRpZCBub3QgcmV0dXJuIGludGVyaW1CdW5kbGVUZXh0Jyk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgdGhlIHdyYXBwZXIgZmlsZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHVubGluayB9ID0gYXdhaXQgaW1wb3J0KCdub2RlOmZzL3Byb21pc2VzJyk7XG4gICAgICBhd2FpdCB1bmxpbmsodGVtcFdvcmtmbG93T3V0ZmlsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICB9XG5cbiAgICAvLyAzLiBHZW5lcmF0ZSBjb21iaW5lZCByb3V0ZSBmaWxlXG4gICAgY29uc3Qgc3RlcHNSZWxhdGl2ZVBhdGggPSAnLi8nICsgYmFzZW5hbWUoc3RlcHNPdXRmaWxlKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgY29uc3QgZXNjYXBlZFZNQ29kZSA9IHdvcmtmbG93Vk1Db2RlLnJlcGxhY2UoL1tcXFxcYCRdL2csICdcXFxcJCYnKTtcbiAgICBjb25zdCB3b3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSA9IGNyZWF0ZVdvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlKCk7XG5cbiAgICBjb25zdCBjb21iaW5lZEZ1bmN0aW9uQ29kZSA9IGAvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgX19zdGVwc19yZWdpc3RlcmVkIH0gZnJvbSAnJHtzdGVwc1JlbGF0aXZlUGF0aH0nO1xuaW1wb3J0IHsgd29ya2Zsb3dFbnRyeXBvaW50IH0gZnJvbSAnd29ya2Zsb3cvcnVudGltZSc7XG5cbi8vIFByZXZlbnQgcm9sbHVwIGZyb20gdHJlZS1zaGFraW5nIHRoZSBzdGVwcyBzaWRlLWVmZmVjdCBpbXBvcnRcbnZvaWQgX19zdGVwc19yZWdpc3RlcmVkO1xuXG5jb25zdCB3b3JrZmxvd0NvZGUgPSBcXGAke2VzY2FwZWRWTUNvZGV9XFxgO1xuXG5leHBvcnQgY29uc3QgUE9TVCA9IHdvcmtmbG93RW50cnlwb2ludCh3b3JrZmxvd0NvZGUke3dvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlfSk7YDtcblxuICAgIGlmICghYnVuZGxlRmluYWxPdXRwdXQpIHtcbiAgICAgIC8vIFdyaXRlIGRpcmVjdGx5IChOZXh0LmpzIHdpbGwgYnVuZGxlKVxuICAgICAgY29uc3QgdGVtcFBhdGggPSBgJHtmbG93T3V0ZmlsZX0uJHtyYW5kb21VVUlEKCl9LnRtcGA7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUodGVtcFBhdGgsIGNvbWJpbmVkRnVuY3Rpb25Db2RlKTtcbiAgICAgIGF3YWl0IHJlbmFtZSh0ZW1wUGF0aCwgZmxvd091dGZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCdW5kbGUgdGhlIGNvbWJpbmVkIGNvZGUgZm9yIHN0YW5kYWxvbmUgdXNlXG4gICAgICBjb25zdCBidW5kbGVTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgeyBiYW5uZXI6IGltcG9ydE1ldGFCYW5uZXIsIGRlZmluZTogaW1wb3J0TWV0YURlZmluZSB9ID1cbiAgICAgICAgdGhpcy5nZXRDanNJbXBvcnRNZXRhUG9seWZpbGwoZm9ybWF0KTtcbiAgICAgIC8vIEVTTSBiYW5uZXIgcHJvdmlkZXMgYHJlcXVpcmVgIHZpYSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkgc29cbiAgICAgIC8vIENKUyBkZXBlbmRlbmNpZXMgdGhhdCBjYWxsIHJlcXVpcmUoKSBmb3IgTm9kZS5qcyBidWlsdGlucyBrZWVwIHdvcmtpbmdcbiAgICAgIC8vIGluIHRoZSBFU00gb3V0cHV0IHByb2R1Y2VkIGJ5IGJ1bmRsZUZpbmFsT3V0cHV0OiB0cnVlLlxuICAgICAgY29uc3QgZmluYWxFc21SZXF1aXJlQmFubmVyID0gdGhpcy5nZXRFc21SZXF1aXJlQmFubmVyKGZvcm1hdCk7XG4gICAgICBjb25zdCBmaW5hbFJlc3VsdCA9IGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgICAgICBiYW5uZXI6IHtcbiAgICAgICAgICBqczogYC8vIGJpb21lLWlnbm9yZS1hbGwgbGludDogZ2VuZXJhdGVkIGZpbGVcXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xcbiR7aW1wb3J0TWV0YUJhbm5lcn0ke2ZpbmFsRXNtUmVxdWlyZUJhbm5lcn1gLFxuICAgICAgICB9LFxuICAgICAgICBzdGRpbjoge1xuICAgICAgICAgIGNvbnRlbnRzOiBjb21iaW5lZEZ1bmN0aW9uQ29kZSxcbiAgICAgICAgICByZXNvbHZlRGlyOiBkaXJuYW1lKGZsb3dPdXRmaWxlKSxcbiAgICAgICAgICBzb3VyY2VmaWxlOiAndmlydHVhbC1lbnRyeS5qcycsXG4gICAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgICB9LFxuICAgICAgICBvdXRmaWxlOiBmbG93T3V0ZmlsZSxcbiAgICAgICAgYWJzV29ya2luZ0RpcjogdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgYnVuZGxlOiB0cnVlLFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIHBsYXRmb3JtOiAnbm9kZScsXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIHdyaXRlOiB0cnVlLFxuICAgICAgICBrZWVwTmFtZXM6IHRydWUsXG4gICAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAgIGRlZmluZTogaW1wb3J0TWV0YURlZmluZSxcbiAgICAgICAgZXh0ZXJuYWw6IFsnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHknXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2dFc2J1aWxkTWVzc2FnZXMoZmluYWxSZXN1bHQsICdjb21iaW5lZCBidW5kbGUnLCB0cnVlKTtcbiAgICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKFxuICAgICAgICAnQ3JlYXRlZCBjb21iaW5lZCBidW5kbGUnLFxuICAgICAgICBgJHtEYXRlLm5vdygpIC0gYnVuZGxlU3RhcnRUaW1lfW1zYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBNZXJnZSBtYW5pZmVzdHNcbiAgICBjb25zdCBtYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdCA9IHtcbiAgICAgIC4uLnN0ZXBzTWFuaWZlc3QsXG4gICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgLi4uc3RlcHNNYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICAgIC4uLndvcmtmbG93c1Jlc3VsdC5tYW5pZmVzdC53b3JrZmxvd3MsXG4gICAgICB9LFxuICAgICAgY2xhc3Nlczoge1xuICAgICAgICAuLi5zdGVwc01hbmlmZXN0LmNsYXNzZXMsXG4gICAgICAgIC4uLndvcmtmbG93c1Jlc3VsdC5tYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGEgY3VzdG9tIGJ1bmRsZUZpbmFsIGZvciB3YXRjaCBtb2RlIHRoYXQgdXNlcyB3b3JrZmxvd0VudHJ5cG9pbnRcbiAgICBjb25zdCBjb21iaW5lZEJ1bmRsZUZpbmFsID0gYXN5bmMgKGludGVyaW1CdW5kbGVUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGVzY2FwZWQgPSBpbnRlcmltQnVuZGxlVGV4dC5yZXBsYWNlKC9bXFxcXGAkXS9nLCAnXFxcXCQmJyk7XG4gICAgICBjb25zdCB3b3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSA9XG4gICAgICAgIGNyZWF0ZVdvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlKCk7XG4gICAgICBjb25zdCBjb2RlID0gYC8vIGJpb21lLWlnbm9yZS1hbGwgbGludDogZ2VuZXJhdGVkIGZpbGVcbi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBfX3N0ZXBzX3JlZ2lzdGVyZWQgfSBmcm9tICcke3N0ZXBzUmVsYXRpdmVQYXRofSc7XG5pbXBvcnQgeyB3b3JrZmxvd0VudHJ5cG9pbnQgfSBmcm9tICd3b3JrZmxvdy9ydW50aW1lJztcblxudm9pZCBfX3N0ZXBzX3JlZ2lzdGVyZWQ7XG5cbmNvbnN0IHdvcmtmbG93Q29kZSA9IFxcYCR7ZXNjYXBlZH1cXGA7XG5cbmV4cG9ydCBjb25zdCBQT1NUID0gd29ya2Zsb3dFbnRyeXBvaW50KHdvcmtmbG93Q29kZSR7d29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGV9KTtgO1xuXG4gICAgICBjb25zdCBvdXRwdXREaXIgPSBkaXJuYW1lKGZsb3dPdXRmaWxlKTtcbiAgICAgIGF3YWl0IG1rZGlyKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zdCB0ZW1wUGF0aCA9IGAke2Zsb3dPdXRmaWxlfS4ke3JhbmRvbVVVSUQoKX0udG1wYDtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZSh0ZW1wUGF0aCwgY29kZSk7XG4gICAgICBhd2FpdCByZW5hbWUodGVtcFBhdGgsIGZsb3dPdXRmaWxlKTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgc3RlcHNDb250ZXh0LFxuICAgICAgICBpbnRlcmltQnVuZGxlQ3R4OiB3b3JrZmxvd3NSZXN1bHQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgYnVuZGxlRmluYWw6IGNvbWJpbmVkQnVuZGxlRmluYWwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IG1hbmlmZXN0IH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsaWVudCBsaWJyYXJ5IGJ1bmRsZSBmb3Igd29ya2Zsb3cgZXhlY3V0aW9uLlxuICAgKiBUaGUgY2xpZW50IGxpYnJhcnkgYWxsb3dzIGltcG9ydGluZyBhbmQgY2FsbGluZyB3b3JrZmxvd3MgZnJvbSBhcHBsaWNhdGlvbiBjb2RlLlxuICAgKiBPbmx5IGdlbmVyYXRlZCBpZiBjbGllbnRCdW5kbGVQYXRoIGlzIHNwZWNpZmllZCBpbiBjb25maWcuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlQ2xpZW50TGlicmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmNsaWVudEJ1bmRsZVBhdGgpIHtcbiAgICAgIC8vIFNpbGVudGx5IGV4aXQgc2luY2Ugbm8gY2xpZW50IGJ1bmRsZSB3YXMgcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnR2VuZXJhdGluZyBhIGNsaWVudCBsaWJyYXJ5IGF0JyxcbiAgICAgIHRoaXMuY29uZmlnLmNsaWVudEJ1bmRsZVBhdGhcbiAgICApO1xuICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKFxuICAgICAgJ05PVEU6IFRoZSByZWNvbW1lbmRlZCB3YXkgdG8gdXNlIHdvcmtmbG93IHdpdGggYSBmcmFtZXdvcmsgbGlrZSBOZXh0SlMgaXMgdXNpbmcgdGhlIGxvYWRlci9wbHVnaW4gd2l0aCB3ZWJwYWNrL3R1cmJvYnBhY2svcm9sbHVwJ1xuICAgICk7XG5cbiAgICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgZGlyZWN0b3J5IGZvciB0aGUgY2xpZW50IGJ1bmRsZVxuICAgIGNvbnN0IG91dHB1dERpciA9IGRpcm5hbWUodGhpcy5jb25maWcuY2xpZW50QnVuZGxlUGF0aCk7XG4gICAgYXdhaXQgbWtkaXIob3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcblxuICAgIC8vIERpc2NvdmVyIHNlcmRlIGZpbGVzIGZyb20gdGhlIGlucHV0IGZpbGVzJyBkZXBlbmRlbmN5IHRyZWUgZm9yIGNyb3NzLWNvbnRleHQgY2xhc3MgcmVnaXN0cmF0aW9uLlxuICAgIC8vIENsYXNzZXMgbmVlZCB0byBiZSByZWdpc3RlcmVkIGluIHRoZSBjbGllbnQgYnVuZGxlIHNvIHRoZXkgY2FuIGJlIHNlcmlhbGl6ZWRcbiAgICAvLyB3aGVuIHBhc3NpbmcgZGF0YSB0byB3b3JrZmxvd3MgdmlhIHN0YXJ0KCkgYW5kIGRlc2VyaWFsaXplZCB3aGVuIHJlY2VpdmluZyB3b3JrZmxvdyByZXN1bHRzLlxuICAgIGNvbnN0IHsgZGlzY292ZXJlZFNlcmRlRmlsZXMgfSA9IGF3YWl0IHRoaXMuZGlzY292ZXJFbnRyaWVzKFxuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIG91dHB1dERpclxuICAgICk7XG5cbiAgICAvLyBJZGVudGlmeSBzZXJkZSBmaWxlcyB0aGF0IGFyZW4ndCBpbiB0aGUgaW5wdXRGaWxlcyAoZGVkdXBsaWNhdGVkKVxuICAgIGNvbnN0IGlucHV0RmlsZXNOb3JtYWxpemVkID0gbmV3IFNldChcbiAgICAgIGlucHV0RmlsZXMubWFwKChmKSA9PiBmLnJlcGxhY2UoL1xcXFwvZywgJy8nKSlcbiAgICApO1xuICAgIGNvbnN0IHNlcmRlT25seUZpbGVzID0gWy4uLmRpc2NvdmVyZWRTZXJkZUZpbGVzXS5maWx0ZXIoXG4gICAgICAoZikgPT4gIWlucHV0RmlsZXNOb3JtYWxpemVkLmhhcyhmKVxuICAgICk7XG5cbiAgICAvLyBSZS1leHBvcnRzIGZvciBpbnB1dCBmaWxlcyAodXNlcidzIHdvcmtmbG93L3N0ZXAgZGVmaW5pdGlvbnMpLlxuICAgIC8vIFRoZXNlIG11c3QgdXNlIHZhbGlkIHJlbGF0aXZlIHNwZWNpZmllcnMgYmVjYXVzZSBzb21lIGZyYW1ld29ya3MgcGFzc1xuICAgIC8vIGdlbmVyYXRlZCBmaWxlcyBsaWtlIFwiLm91dHB1dC9zZXJ2ZXIvaW5kZXgubWpzXCIgYXMgaW5wdXQgZmlsZXMuXG4gICAgY29uc3QgcmVleHBvcnRzID0gaW5wdXRGaWxlc1xuICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHRoaXMuY29uZmlnLndvcmtpbmdEaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBsZXQgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUobm9ybWFsaXplZFdvcmtpbmdEaXIsIGZpbGUpLnJlcGxhY2UoXG4gICAgICAgICAgL1xcXFwvZyxcbiAgICAgICAgICAnLydcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi8nKSAmJiAhcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgICAgcmVsYXRpdmVQYXRoID0gYC4vJHtyZWxhdGl2ZVBhdGh9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYGV4cG9ydCAqIGZyb20gJyR7cmVsYXRpdmVQYXRofSc7YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignXFxuJyk7XG5cbiAgICAvLyBTaWRlLWVmZmVjdCBpbXBvcnRzIGZvciBzZXJkZSBmaWxlcyBub3QgaW4gaW5wdXRGaWxlcyAoZm9yIGNsYXNzIHJlZ2lzdHJhdGlvbilcbiAgICBjb25zdCBzZXJkZUltcG9ydHMgPSBzZXJkZU9ubHlGaWxlc1xuICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHRoaXMuY29uZmlnLndvcmtpbmdEaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBsZXQgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUobm9ybWFsaXplZFdvcmtpbmdEaXIsIGZpbGUpLnJlcGxhY2UoXG4gICAgICAgICAgL1xcXFwvZyxcbiAgICAgICAgICAnLydcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi8nKSAmJiAhcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgICAgcmVsYXRpdmVQYXRoID0gYC4vJHtyZWxhdGl2ZVBhdGh9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYGltcG9ydCAnJHtyZWxhdGl2ZVBhdGh9JztgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIC8vIENvbWJpbmU6IHNlcmRlIGltcG9ydHMgKGZvciByZWdpc3RyYXRpb24gc2lkZSBlZmZlY3RzKSArIHJlLWV4cG9ydHNcbiAgICBjb25zdCBlbnRyeUNvbnRlbnQgPSBzZXJkZUltcG9ydHNcbiAgICAgID8gYC8vIFNlcmRlIGZpbGVzIGZvciBjcm9zcy1jb250ZXh0IGNsYXNzIHJlZ2lzdHJhdGlvblxcbiR7c2VyZGVJbXBvcnRzfVxcbiR7cmVleHBvcnRzfWBcbiAgICAgIDogcmVleHBvcnRzO1xuXG4gICAgLy8gQnVuZGxlIHdpdGggZXNidWlsZCBhbmQgb3VyIGN1c3RvbSBTV0MgcGx1Z2luXG4gICAgY29uc3Qgbm9ybWFsaXplZENsaWVudFNpZGVFZmZlY3RFbnRyaWVzID0gYXdhaXQgd2l0aFJlYWxwYXRocyhbXG4gICAgICAuLi5pbnB1dEZpbGVzLFxuICAgICAgLi4uc2VyZGVPbmx5RmlsZXMsXG4gICAgXSk7XG4gICAgY29uc3QgY2xpZW50UmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBiYW5uZXI6IHtcbiAgICAgICAganM6ICcvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXFxuLyogZXNsaW50LWRpc2FibGUgKi9cXG4nLFxuICAgICAgfSxcbiAgICAgIHN0ZGluOiB7XG4gICAgICAgIGNvbnRlbnRzOiBlbnRyeUNvbnRlbnQsXG4gICAgICAgIHJlc29sdmVEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgIHNvdXJjZWZpbGU6ICd2aXJ0dWFsLWVudHJ5LmpzJyxcbiAgICAgICAgbG9hZGVyOiAnanMnLFxuICAgICAgfSxcbiAgICAgIG91dGZpbGU6IHRoaXMuY29uZmlnLmNsaWVudEJ1bmRsZVBhdGgsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIGpzeDogJ3ByZXNlcnZlJyxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICB3cml0ZTogdHJ1ZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgZXh0ZXJuYWw6IFsnQHdvcmtmbG93L2NvcmUnXSxcbiAgICAgIHJlc29sdmVFeHRlbnNpb25zOiBbXG4gICAgICAgICcudHMnLFxuICAgICAgICAnLnRzeCcsXG4gICAgICAgICcubXRzJyxcbiAgICAgICAgJy5jdHMnLFxuICAgICAgICAnLmpzJyxcbiAgICAgICAgJy5qc3gnLFxuICAgICAgICAnLm1qcycsXG4gICAgICAgICcuY2pzJyxcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIGNyZWF0ZVN3Y1BsdWdpbih7XG4gICAgICAgICAgbW9kZTogJ3N0ZXAnLFxuICAgICAgICAgIHByb2plY3RSb290OiB0aGlzLnRyYW5zZm9ybVByb2plY3RSb290LFxuICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3Q6IHRoaXMubW9kdWxlU3BlY2lmaWVyUm9vdCxcbiAgICAgICAgICBzaWRlRWZmZWN0RW50cmllczogbm9ybWFsaXplZENsaWVudFNpZGVFZmZlY3RFbnRyaWVzLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvZ0VzYnVpbGRNZXNzYWdlcyhjbGllbnRSZXN1bHQsICdjbGllbnQgbGlicmFyeSBidW5kbGUnKTtcblxuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3djSWdub3JlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rIGhhbmRsZXIgYnVuZGxlIGZvciByZXN1bWluZyB3b3JrZmxvd3MgdmlhIEhUVFAgY2FsbGJhY2tzLlxuICAgKlxuICAgKiBAcGFyYW0gYnVuZGxlIC0gSWYgdHJ1ZSwgYnVuZGxlcyBkZXBlbmRlbmNpZXMgKG5lZWRlZCBmb3IgQnVpbGQgT3V0cHV0IEFQSSlcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICBvdXRmaWxlLFxuICAgIGJ1bmRsZSA9IGZhbHNlLFxuICB9OiB7XG4gICAgb3V0ZmlsZTogc3RyaW5nO1xuICAgIGJ1bmRsZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZ0NyZWF0ZVdlYmhvb2tCdW5kbGVJbmZvKCdDcmVhdGluZyB3ZWJob29rIHJvdXRlJyk7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXRmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBzdGF0aWMgcm91dGUgdGhhdCBjYWxscyByZXN1bWVXZWJob29rXG4gICAgLy8gVGhpcyByb3V0ZSB3b3JrcyBmb3IgYm90aCBOZXh0LmpzIGFuZCBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSVxuICAgIC8vIEJ1bmRsZWQgQnVpbGQgT3V0cHV0IEFQSSB3ZWJob29rIGZ1bmN0aW9ucyBuZWVkIHdvcmxkLnRzIHN0YXRpY2FsbHlcbiAgICAvLyBwcmVzZW50IHNvIGdldFdvcmxkTGF6eSgpIGNhbiB1c2UgdGhlIGdsb2JhbCBnZXRXb3JsZCByZWdpc3RyYXRpb25cbiAgICAvLyBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byBhIG1pc3Npbmcgc2libGluZyBpbXBvcnQoXCIuL3dvcmxkLmpzXCIpLlxuICAgIGNvbnN0IHJvdXRlQ29udGVudCA9IGAke2J1bmRsZSA/IFwiaW1wb3J0ICd3b3JrZmxvdy9ydW50aW1lJztcXG5cIiA6ICcnfWltcG9ydCB7IHJlc3VtZVdlYmhvb2sgfSBmcm9tICd3b3JrZmxvdy9hcGknO1xuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVyKHJlcXVlc3QpIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gIC8vIEV4dHJhY3QgdG9rZW4gZnJvbSBwYXRobmFtZTogLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2sve3Rva2VufVxuICBjb25zdCBwYXRoUGFydHMgPSB1cmwucGF0aG5hbWUuc3BsaXQoJy8nKTtcbiAgY29uc3QgdG9rZW4gPSBkZWNvZGVVUklDb21wb25lbnQocGF0aFBhcnRzW3BhdGhQYXJ0cy5sZW5ndGggLSAxXSk7XG5cbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ01pc3NpbmcgdG9rZW4nLCB7IHN0YXR1czogNDAwIH0pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlc3VtZVdlYmhvb2sodG9rZW4sIHJlcXVlc3QpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBUT0RPOiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW52YWxpZCB0b2tlbiBhbmQgb3RoZXIgZXJyb3JzXG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJlc3VtZVdlYmhvb2snLCBlcnJvcik7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDA0IH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBHRVQgPSBoYW5kbGVyO1xuZXhwb3J0IGNvbnN0IFBPU1QgPSBoYW5kbGVyO1xuZXhwb3J0IGNvbnN0IFBVVCA9IGhhbmRsZXI7XG5leHBvcnQgY29uc3QgUEFUQ0ggPSBoYW5kbGVyO1xuZXhwb3J0IGNvbnN0IERFTEVURSA9IGhhbmRsZXI7XG5leHBvcnQgY29uc3QgSEVBRCA9IGhhbmRsZXI7XG5leHBvcnQgY29uc3QgT1BUSU9OUyA9IGhhbmRsZXI7YDtcblxuICAgIGlmICghYnVuZGxlKSB7XG4gICAgICAvLyBGb3IgTmV4dC5qcywganVzdCB3cml0ZSB0aGUgdW5idW5kbGVkIGZpbGVcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShvdXRmaWxlLCByb3V0ZUNvbnRlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvciBCdWlsZCBPdXRwdXQgQVBJLCBidW5kbGUgd2l0aCBlc2J1aWxkIHRvIHJlc29sdmUgaW1wb3J0c1xuXG4gICAgY29uc3Qgd2ViaG9va0VzbVJlcXVpcmVCYW5uZXIgPSB0aGlzLmdldEVzbVJlcXVpcmVCYW5uZXIoJ2VzbScpO1xuICAgIGNvbnN0IHdlYmhvb2tCdW5kbGVTdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXNidWlsZC5idWlsZCh7XG4gICAgICBiYW5uZXI6IHtcbiAgICAgICAganM6IGAvLyBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZCBmaWxlXFxuLyogZXNsaW50LWRpc2FibGUgKi9cXG4ke3dlYmhvb2tFc21SZXF1aXJlQmFubmVyfWAsXG4gICAgICB9LFxuICAgICAgc3RkaW46IHtcbiAgICAgICAgY29udGVudHM6IHJvdXRlQ29udGVudCxcbiAgICAgICAgcmVzb2x2ZURpcjogdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgc291cmNlZmlsZTogJ3dlYmhvb2stcm91dGUuanMnLFxuICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICB9LFxuICAgICAgb3V0ZmlsZSxcbiAgICAgIGFic1dvcmtpbmdEaXI6IHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICBqc3g6ICdwcmVzZXJ2ZScsXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIGNvbmRpdGlvbnM6IFsnaW1wb3J0JywgJ21vZHVsZScsICdub2RlJywgJ2RlZmF1bHQnXSxcbiAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICB3cml0ZTogdHJ1ZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAga2VlcE5hbWVzOiB0cnVlLFxuICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgIHJlc29sdmVFeHRlbnNpb25zOiBbXG4gICAgICAgICcudHMnLFxuICAgICAgICAnLnRzeCcsXG4gICAgICAgICcubXRzJyxcbiAgICAgICAgJy5jdHMnLFxuICAgICAgICAnLmpzJyxcbiAgICAgICAgJy5qc3gnLFxuICAgICAgICAnLm1qcycsXG4gICAgICAgICcuY2pzJyxcbiAgICAgIF0sXG4gICAgICBzb3VyY2VtYXA6IHRoaXMucmVzb2x2ZVNvdXJjZW1hcChFTUlUX1NPVVJDRU1BUFNfRk9SX0RFQlVHR0lORyksXG4gICAgICBtYWluRmllbGRzOiBbJ21vZHVsZScsICdtYWluJ10sXG4gICAgICAvLyBEb24ndCBleHRlcm5hbGl6ZSBhbnl0aGluZyAtIGJ1bmRsZSBldmVyeXRoaW5nIGluY2x1ZGluZyB3b3JrZmxvdyBwYWNrYWdlc1xuICAgICAgZXh0ZXJuYWw6IFtdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2dFc2J1aWxkTWVzc2FnZXMocmVzdWx0LCAnd2ViaG9vayBidW5kbGUgY3JlYXRpb24nKTtcbiAgICB0aGlzLmxvZ0NyZWF0ZVdlYmhvb2tCdW5kbGVJbmZvKFxuICAgICAgJ0NyZWF0ZWQgd2ViaG9vayBidW5kbGUnLFxuICAgICAgYCR7RGF0ZS5ub3coKSAtIHdlYmhvb2tCdW5kbGVTdGFydH1tc2BcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwYWNrYWdlLmpzb24gZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbW9kdWxlIHR5cGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlUGFja2FnZUpzb24oXG4gICAgZGlyOiBzdHJpbmcsXG4gICAgdHlwZTogJ2NvbW1vbmpzJyB8ICdtb2R1bGUnXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0geyB0eXBlIH07XG4gICAgYXdhaXQgd3JpdGVGaWxlKFxuICAgICAgam9pbihkaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uLCBudWxsLCAyKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIC52Yy1jb25maWcuanNvbiBmaWxlIGZvciBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBmdW5jdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlVmNDb25maWcoXG4gICAgZGlyOiBzdHJpbmcsXG4gICAgY29uZmlnOiB7XG4gICAgICBydW50aW1lPzogc3RyaW5nO1xuICAgICAgaGFuZGxlcj86IHN0cmluZztcbiAgICAgIGxhdW5jaGVyVHlwZT86IHN0cmluZztcbiAgICAgIGFyY2hpdGVjdHVyZT86IHN0cmluZztcbiAgICAgIHNob3VsZEFkZEhlbHBlcnM/OiBib29sZWFuO1xuICAgICAgc2hvdWxkQWRkU291cmNlbWFwU3VwcG9ydD86IGJvb2xlYW47XG4gICAgICBtYXhEdXJhdGlvbj86IG51bWJlciB8ICdtYXgnO1xuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM/OiBBcnJheTx7XG4gICAgICAgIHR5cGU6ICdxdWV1ZS92MmJldGEnO1xuICAgICAgICB0b3BpYzogc3RyaW5nO1xuICAgICAgICBjb25zdW1lcjogc3RyaW5nO1xuICAgICAgICBtYXhEZWxpdmVyaWVzPzogbnVtYmVyO1xuICAgICAgICByZXRyeUFmdGVyU2Vjb25kcz86IG51bWJlcjtcbiAgICAgICAgaW5pdGlhbERlbGF5U2Vjb25kcz86IG51bWJlcjtcbiAgICAgIH0+O1xuICAgIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmNDb25maWcgPSB7XG4gICAgICBydW50aW1lOiBjb25maWcucnVudGltZSA/PyAnbm9kZWpzMjIueCcsXG4gICAgICBoYW5kbGVyOiBjb25maWcuaGFuZGxlciA/PyAnaW5kZXgubWpzJyxcbiAgICAgIGxhdW5jaGVyVHlwZTogY29uZmlnLmxhdW5jaGVyVHlwZSA/PyAnTm9kZWpzJyxcbiAgICAgIGFyY2hpdGVjdHVyZTogY29uZmlnLmFyY2hpdGVjdHVyZSA/PyAnYXJtNjQnLFxuICAgICAgc2hvdWxkQWRkSGVscGVyczogY29uZmlnLnNob3VsZEFkZEhlbHBlcnMgPz8gdHJ1ZSxcbiAgICAgIC4uLihjb25maWcubWF4RHVyYXRpb24gIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIG1heER1cmF0aW9uOiBjb25maWcubWF4RHVyYXRpb24sXG4gICAgICB9KSxcbiAgICAgIC4uLihjb25maWcuc2hvdWxkQWRkU291cmNlbWFwU3VwcG9ydCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgc2hvdWxkQWRkU291cmNlbWFwU3VwcG9ydDogY29uZmlnLnNob3VsZEFkZFNvdXJjZW1hcFN1cHBvcnQsXG4gICAgICB9KSxcbiAgICAgIC4uLihjb25maWcuZXhwZXJpbWVudGFsVHJpZ2dlcnMgJiYge1xuICAgICAgICBleHBlcmltZW50YWxUcmlnZ2VyczogY29uZmlnLmV4cGVyaW1lbnRhbFRyaWdnZXJzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIGpvaW4oZGlyLCAnLnZjLWNvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh2Y0NvbmZpZywgbnVsbCwgMilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBkaXJlY3RvcnkgZm9yIGEgZmlsZSBwYXRoIGV4aXN0cywgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGVuc3VyZURpcmVjdG9yeShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGVuc3VyZVN3Y0lnbm9yZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVQcm9qZWN0U3djR2l0aWdub3JlRW50cnkoKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVN3Y0RpcmVjdG9yeUdpdGlnbm9yZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVQcm9qZWN0U3djR2l0aWdub3JlRW50cnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZ2l0aWdub3JlUGF0aCA9IGpvaW4odGhpcy5jb25maWcud29ya2luZ0RpciwgJy5naXRpZ25vcmUnKTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgY29udGVudCA9ICcnO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGdpdGlnbm9yZVBhdGgsICd1dGYtOCcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc1N3Y0VudHJ5ID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pLnNvbWUoKGxpbmUpID0+IHtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRyaW1tZWQgPT09ICcuc3djJyB8fFxuICAgICAgICAgIHRyaW1tZWQgPT09ICcuc3djLycgfHxcbiAgICAgICAgICB0cmltbWVkID09PSAnLy5zd2MnIHx8XG4gICAgICAgICAgdHJpbW1lZCA9PT0gJy8uc3djLydcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaGFzU3djRW50cnkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPVxuICAgICAgICBjb250ZW50Lmxlbmd0aCA+IDAgJiYgIWNvbnRlbnQuZW5kc1dpdGgoJ1xcbicpID8gJ1xcbicgOiAnJztcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShnaXRpZ25vcmVQYXRoLCBgJHtjb250ZW50fSR7c2VwYXJhdG9yfS8uc3djXFxuYCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBXZSdyZSBpbnRlbnRpb25hbGx5IHNpbGVudGx5IGlnbm9yaW5nIHRoaXMgZXJyb3IgLSB1cGRhdGluZyAuZ2l0aWdub3JlIGlzbid0IGNyaXRpY2FsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVTd2NEaXJlY3RvcnlHaXRpZ25vcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgICAgam9pbih0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnLnN3YycsICcuZ2l0aWdub3JlJyksXG4gICAgICAgICcqXFxuJ1xuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFdlJ3JlIGludGVudGlvbmFsbHkgc2lsZW50bHkgaWdub3JpbmcgdGhpcyBlcnJvciAtIGNyZWF0aW5nIC5naXRpZ25vcmUgaXNuJ3QgY3JpdGljYWxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbWFuaWZlc3Qgc2hvdWxkIGJlIGV4cG9zZWQgYXMgYSBwdWJsaWMgSFRUUCByb3V0ZS5cbiAgICogQ29udHJvbGxlZCBieSB0aGUgYFdPUktGTE9XX1BVQkxJQ19NQU5JRkVTVGAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNob3VsZEV4cG9zZVB1YmxpY01hbmlmZXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5XT1JLRkxPV19QVUJMSUNfTUFOSUZFU1QgPT09ICcxJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgd29ya2Zsb3cgbWFuaWZlc3QgZGlhZ25vc3RpY3MgcGF0aCwgd2hlbiB0aGlzIGJ1aWxkZXIgc2hvdWxkXG4gICAqIGVtaXQgb25lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldERpYWdub3N0aWNzTWFuaWZlc3RQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmRpYWdub3N0aWNzRGlyKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShcbiAgICAgICAgdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgdGhpcy5jb25maWcuZGlhZ25vc3RpY3NEaXIsXG4gICAgICAgICd3b3JrZmxvd3MtbWFuaWZlc3QuanNvbidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmJ1aWxkVGFyZ2V0ID09PSAndmVyY2VsLWJ1aWxkLW91dHB1dC1hcGknKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlUGF0aChcbiAgICAgICAgJy52ZXJjZWwvb3V0cHV0L2RpYWdub3N0aWNzL3dvcmtmbG93cy1tYW5pZmVzdC5qc29uJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGlzIGEgZGV2ZWxvcG1lbnQvd2F0Y2ggYnVpbGQgKGUuZy4gYG5leHQgZGV2YCwgYG5pdHJvIGRldmAsXG4gICAqIG9yIGEgVml0ZS1iYXNlZCBkZXYgc2VydmVyIGZvciBhc3Ryby9zdmVsdGVraXQvdml0ZSkuIGBjb25maWcud2F0Y2hgIGlzXG4gICAqIHBsdW1iZWQgYnkgdGhlIGJ1aWxkZXJzIHRoYXQgb3duIGEgZGV2IHNlcnZlciAobmV4dCwgbml0cm8sIG5lc3QpOyB0aGVcbiAgICogVml0ZS1iYXNlZCBpbnRlZ3JhdGlvbnMgZG9uJ3Qgc2V0IGl0IGJ1dCBydW4gd2l0aFxuICAgKiBgTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdgLiBXaGVuIG5laXRoZXIgc2lnbmFsIGlzIHByZXNlbnQgd2UgdHJlYXQgdGhlXG4gICAqIGJ1aWxkIGFzIHByb2R1Y3Rpb24sIHNvIENMSS9WZXJjZWwgcHJvZHVjdGlvbiBidWlsZHMgZGVmYXVsdCB0byBvZmYuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzRGV2ZWxvcG1lbnRCdWlsZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcud2F0Y2ggPT09IHRydWUgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBzb3VyY2UgbWFwIG1vZGUgZm9yIHRoZSBzdGFjay1yZWxldmFudCBidW5kbGVzIChzdGVwcyArIHRoZVxuICAgKiBpbnRlcm1lZGlhdGUgd29ya2Zsb3cgVk0gYnVuZGxlKTogaW5saW5lIHNvdXJjZSBtYXBzIGluIGRldmVsb3BtZW50IHNvXG4gICAqIHN0YWNrIHRyYWNlcyBwb2ludCBhdCBzb3VyY2UgZmlsZXMsIGFuZCBvZmYgaW4gcHJvZHVjdGlvbiBzbyBmdW5jdGlvblxuICAgKiBidW5kbGVzIHN0YXkgc21hbGwgKGhlbHBzIHN0YXkgdW5kZXIgdGhlIFZlcmNlbCAyNTBNQiBmdW5jdGlvbiBsaW1pdCkgYW5kXG4gICAqIHNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0uIFRoZSBgc291cmNlbWFwYCBjb25maWcgb3B0aW9uXG4gICAqIGFuZCBgV09SS0ZMT1dfU09VUkNFTUFQYCBlbnYgdmFyIG92ZXJyaWRlIHRoaXMgaW4gZWl0aGVyIGVudmlyb25tZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBkZWZhdWx0U291cmNlbWFwTW9kZSgpOiBTb3VyY2VtYXBNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5pc0RldmVsb3BtZW50QnVpbGQgPyAnaW5saW5lJyA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBzb3VyY2UgbWFwIG1vZGUgZm9yIGEgZ2l2ZW4gY2FsbCBzaXRlLiBQcmVjZWRlbmNlOlxuICAgKiBleHBsaWNpdCBgc291cmNlbWFwYCBjb25maWcgPiBgV09SS0ZMT1dfU09VUkNFTUFQYCBlbnYgdmFyID4gdGhlIGNhbGxcbiAgICogc2l0ZSdzIGRlZmF1bHQuIFJldHVybmVkIHZhbHVlIGlzIHBhc3NlZCBkaXJlY3RseSB0byBlc2J1aWxkJ3NcbiAgICogYHNvdXJjZW1hcGAgb3B0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVTb3VyY2VtYXAoZGVmYXVsdE1vZGU6IFNvdXJjZW1hcE1vZGUpOiBTb3VyY2VtYXBNb2RlIHtcbiAgICBpZiAodGhpcy5jb25maWcuc291cmNlbWFwICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmNvbmZpZy5zb3VyY2VtYXA7XG4gICAgY29uc3QgZW52TW9kZSA9IHBhcnNlU291cmNlbWFwRW52KHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCk7XG4gICAgaWYgKGVudk1vZGUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGVudk1vZGU7XG4gICAgcmV0dXJuIGRlZmF1bHRNb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlc29sdmVkIHNvdXJjZSBtYXAgbW9kZSBlbWl0cyBhbnkgc291cmNlIG1hcHMgYXQgYWxsLlxuICAgKiBVc2VkIGJ5IGNvbnN1bWVycyBsaWtlIHRoZSBWZXJjZWwgYnVpbGRlciB0byBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlXG4gICAqIHRoZSBzb3VyY2UtbWFwLXN1cHBvcnQgcnVudGltZSBzaGltIGluIGdlbmVyYXRlZCBmdW5jdGlvbnMuIFVzZXMgdGhlIHNhbWVcbiAgICogZW52aXJvbm1lbnQtYXdhcmUgZGVmYXVsdCAoYGRlZmF1bHRTb3VyY2VtYXBNb2RlYCkgYXMgdGhlIHN0ZXAvd29ya2Zsb3dcbiAgICogYnVuZGxlcywgc28gYSBwcm9kdWN0aW9uIGJ1aWxkIHdpdGggbm8gb3ZlcnJpZGUgb21pdHMgdGhlIHNoaW0uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNvdXJjZW1hcHNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTb3VyY2VtYXAodGhpcy5kZWZhdWx0U291cmNlbWFwTW9kZSkgIT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtYW5pZmVzdCBKU09OIGZpbGUgY29udGFpbmluZyBzdGVwL3dvcmtmbG93L2NsYXNzIG1ldGFkYXRhXG4gICAqIGFuZCBncmFwaCBkYXRhIGZvciB2aXN1YWxpemF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbWFuaWZlc3QgSlNPTiBzdHJpbmcsIG9yIHVuZGVmaW5lZCBpZiBtYW5pZmVzdCBjcmVhdGlvbiBmYWlsZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTWFuaWZlc3Qoe1xuICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICBtYW5pZmVzdERpcixcbiAgICBtYW5pZmVzdCxcbiAgfToge1xuICAgIHdvcmtmbG93QnVuZGxlUGF0aDogc3RyaW5nO1xuICAgIG1hbmlmZXN0RGlyOiBzdHJpbmc7XG4gICAgbWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3Q7XG4gIH0pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGJ1aWxkU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMubG9nQ3JlYXRlTWFuaWZlc3RJbmZvKCdDcmVhdGluZyBtYW5pZmVzdC4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93R3JhcGhzID0gYXdhaXQgZXh0cmFjdFdvcmtmbG93R3JhcGhzKHdvcmtmbG93QnVuZGxlUGF0aCk7XG5cbiAgICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5jb252ZXJ0U3RlcHNNYW5pZmVzdChtYW5pZmVzdC5zdGVwcyk7XG4gICAgICBjb25zdCB3b3JrZmxvd3MgPSB0aGlzLmNvbnZlcnRXb3JrZmxvd3NNYW5pZmVzdChcbiAgICAgICAgbWFuaWZlc3Qud29ya2Zsb3dzLFxuICAgICAgICB3b3JrZmxvd0dyYXBoc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLmNvbnZlcnRDbGFzc2VzTWFuaWZlc3QobWFuaWZlc3QuY2xhc3Nlcyk7XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IHsgdmVyc2lvbjogJzEuMC4wJywgc3RlcHMsIHdvcmtmbG93cywgY2xhc3NlcyB9O1xuICAgICAgY29uc3QgbWFuaWZlc3RKc29uID0gSlNPTi5zdHJpbmdpZnkob3V0cHV0LCBudWxsLCAyKTtcblxuICAgICAgYXdhaXQgbWtkaXIobWFuaWZlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4obWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJyksIG1hbmlmZXN0SnNvbik7XG5cbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoID0gdGhpcy5nZXREaWFnbm9zdGljc01hbmlmZXN0UGF0aCgpO1xuICAgICAgaWYgKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyZWN0b3J5KGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoLCBtYW5pZmVzdEpzb24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGVwQ291bnQgPSBPYmplY3QudmFsdWVzKHN0ZXBzKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHMpID0+IGFjYyArIE9iamVjdC5rZXlzKHMpLmxlbmd0aCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdvcmtmbG93Q291bnQgPSBPYmplY3QudmFsdWVzKHdvcmtmbG93cykucmVkdWNlKFxuICAgICAgICAoYWNjLCB3KSA9PiBhY2MgKyBPYmplY3Qua2V5cyh3KS5sZW5ndGgsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb25zdCBjbGFzc0NvdW50ID0gT2JqZWN0LnZhbHVlcyhjbGFzc2VzKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGMpID0+IGFjYyArIE9iamVjdC5rZXlzKGMpLmxlbmd0aCxcbiAgICAgICAgMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5sb2dDcmVhdGVNYW5pZmVzdEluZm8oXG4gICAgICAgIGBDcmVhdGVkIG1hbmlmZXN0IHdpdGggJHtzdGVwQ291bnR9ICR7cGx1cmFsaXplKCdzdGVwJywgJ3N0ZXBzJywgc3RlcENvdW50KX0sICR7d29ya2Zsb3dDb3VudH0gJHtwbHVyYWxpemUoJ3dvcmtmbG93JywgJ3dvcmtmbG93cycsIHdvcmtmbG93Q291bnQpfSwgYW5kICR7Y2xhc3NDb3VudH0gJHtwbHVyYWxpemUoJ2NsYXNzJywgJ2NsYXNzZXMnLCBjbGFzc0NvdW50KX1gLFxuICAgICAgICBgJHtEYXRlLm5vdygpIC0gYnVpbGRTdGFydH1tc2BcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBtYW5pZmVzdEpzb247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbWFuaWZlc3Q6JyxcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRTdGVwc01hbmlmZXN0KFxuICAgIHN0ZXBzOiBXb3JrZmxvd01hbmlmZXN0WydzdGVwcyddXG4gICk6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4+ID0ge307XG4gICAgaWYgKCFzdGVwcykgcmV0dXJuIHJlc3VsdDtcblxuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBlbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhzdGVwcykpIHtcbiAgICAgIHJlc3VsdFtmaWxlUGF0aF0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICAgIHJlc3VsdFtmaWxlUGF0aF1bbmFtZV0gPSB7IHN0ZXBJZDogZGF0YS5zdGVwSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFdvcmtmbG93c01hbmlmZXN0KFxuICAgIHdvcmtmbG93czogV29ya2Zsb3dNYW5pZmVzdFsnd29ya2Zsb3dzJ10sXG4gICAgZ3JhcGhzOiBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICBSZWNvcmQ8c3RyaW5nLCB7IGdyYXBoOiB7IG5vZGVzOiBhbnlbXTsgZWRnZXM6IGFueVtdIH0gfT5cbiAgICA+XG4gICk6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgeyB3b3JrZmxvd0lkOiBzdHJpbmc7IGdyYXBoOiB7IG5vZGVzOiBhbnlbXTsgZWRnZXM6IGFueVtdIH0gfVxuICAgID5cbiAgPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgeyB3b3JrZmxvd0lkOiBzdHJpbmc7IGdyYXBoOiB7IG5vZGVzOiBhbnlbXTsgZWRnZXM6IGFueVtdIH0gfVxuICAgICAgPlxuICAgID4gPSB7fTtcbiAgICBpZiAoIXdvcmtmbG93cykgcmV0dXJuIHJlc3VsdDtcblxuICAgIC8vIEJ1aWxkIGEgbm9ybWFsaXplZCBsb29rdXAgZm9yIGdyYXBocyBzaW5jZSB0aGUgZ3JhcGggZXh0cmFjdG9yIHVzZXNcbiAgICAvLyBwYXRocyBmcm9tIHdvcmtmbG93SWQgKGUuZy4gXCIuL3dvcmtmbG93cy9oZWxsby1hZ2VudFwiKSB3aGlsZSB0aGVcbiAgICAvLyBtYW5pZmVzdCB1c2VzIHNvdXJjZSBmaWxlIHBhdGhzIChlLmcuIFwid29ya2Zsb3dzL2hlbGxvLWFnZW50LnRzXCIpLlxuICAgIC8vIE5vcm1hbGl6ZSBieSBzdHJpcHBpbmcgbGVhZGluZyBcIi4vXCIgYW5kIGZpbGUgZXh0ZW5zaW9ucy5cbiAgICBjb25zdCBub3JtYWxpemVkR3JhcGhzID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIFJlY29yZDxzdHJpbmcsIHsgZ3JhcGg6IHsgbm9kZXM6IGFueVtdOyBlZGdlczogYW55W10gfSB9PlxuICAgID4oKTtcbiAgICBmb3IgKGNvbnN0IFtncmFwaFBhdGgsIGdyYXBoRW50cmllc10gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGhzKSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGdyYXBoUGF0aFxuICAgICAgICAucmVwbGFjZSgvXlxcLlxcLy8sICcnKVxuICAgICAgICAucmVwbGFjZSgvXFwuW14vLl0rJC8sICcnKTtcbiAgICAgIG5vcm1hbGl6ZWRHcmFwaHMuc2V0KG5vcm1hbGl6ZWQsIGdyYXBoRW50cmllcyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKHdvcmtmbG93cykpIHtcbiAgICAgIHJlc3VsdFtmaWxlUGF0aF0gPSB7fTtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgbWFuaWZlc3QgZmlsZSBwYXRoIGZvciBsb29rdXBcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlUGF0aCA9IGZpbGVQYXRoXG4gICAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpO1xuXG4gICAgICBjb25zdCBncmFwaEVudHJpZXMgPVxuICAgICAgICBncmFwaHNbZmlsZVBhdGhdIHx8IG5vcm1hbGl6ZWRHcmFwaHMuZ2V0KG5vcm1hbGl6ZWRGaWxlUGF0aCk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICAgIHJlc3VsdFtmaWxlUGF0aF1bbmFtZV0gPSB7XG4gICAgICAgICAgd29ya2Zsb3dJZDogZGF0YS53b3JrZmxvd0lkLFxuICAgICAgICAgIGdyYXBoOiBncmFwaEVudHJpZXM/LltuYW1lXT8uZ3JhcGggfHwgeyBub2RlczogW10sIGVkZ2VzOiBbXSB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0Q2xhc3Nlc01hbmlmZXN0KFxuICAgIGNsYXNzZXM6IFdvcmtmbG93TWFuaWZlc3RbJ2NsYXNzZXMnXVxuICApOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGNsYXNzSWQ6IHN0cmluZyB9Pj4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgeyBjbGFzc0lkOiBzdHJpbmcgfT4+ID0ge307XG4gICAgaWYgKCFjbGFzc2VzKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzZXMpKSB7XG4gICAgICByZXN1bHRbZmlsZVBhdGhdID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBkYXRhXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkge1xuICAgICAgICByZXN1bHRbZmlsZVBhdGhdW25hbWVdID0geyBjbGFzc0lkOiBkYXRhLmNsYXNzSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
@@ -14,8 +14,14 @@ class TestBuilder extends BaseBuilder {
14
14
  get publicSourcemapsEnabled() {
15
15
  return this.sourcemapsEnabled;
16
16
  }
17
+ get publicDefaultSourcemapMode() {
18
+ return this.defaultSourcemapMode;
19
+ }
20
+ get publicIsDevelopmentBuild() {
21
+ return this.isDevelopmentBuild;
22
+ }
17
23
  }
18
- function createBuilder(sourcemap) {
24
+ function createBuilder(sourcemap, watch) {
19
25
  const config = {
20
26
  buildTarget: 'standalone',
21
27
  workingDir: '/tmp/workflow-test',
@@ -24,6 +30,7 @@ function createBuilder(sourcemap) {
24
30
  workflowsBundlePath: '',
25
31
  webhookBundlePath: '',
26
32
  sourcemap,
33
+ watch,
27
34
  };
28
35
  return new TestBuilder(config);
29
36
  }
@@ -88,12 +95,62 @@ describe('resolveSourcemap', () => {
88
95
  }
89
96
  });
90
97
  });
98
+ describe('defaultSourcemapMode / isDevelopmentBuild', () => {
99
+ const originalNodeEnv = process.env.NODE_ENV;
100
+ const originalSourcemapEnv = process.env.WORKFLOW_SOURCEMAP;
101
+ beforeEach(() => {
102
+ delete process.env.WORKFLOW_SOURCEMAP;
103
+ });
104
+ afterEach(() => {
105
+ if (originalNodeEnv === undefined) {
106
+ delete process.env.NODE_ENV;
107
+ }
108
+ else {
109
+ process.env.NODE_ENV = originalNodeEnv;
110
+ }
111
+ if (originalSourcemapEnv === undefined) {
112
+ delete process.env.WORKFLOW_SOURCEMAP;
113
+ }
114
+ else {
115
+ process.env.WORKFLOW_SOURCEMAP = originalSourcemapEnv;
116
+ }
117
+ });
118
+ it('defaults to off in production (no watch, NODE_ENV not development)', () => {
119
+ process.env.NODE_ENV = 'production';
120
+ const builder = createBuilder();
121
+ expect(builder.publicIsDevelopmentBuild).toBe(false);
122
+ expect(builder.publicDefaultSourcemapMode).toBe(false);
123
+ });
124
+ it('defaults to inline when config.watch is true', () => {
125
+ // Even with a production NODE_ENV, an active watch/dev server opts in.
126
+ process.env.NODE_ENV = 'production';
127
+ const builder = createBuilder(undefined, true);
128
+ expect(builder.publicIsDevelopmentBuild).toBe(true);
129
+ expect(builder.publicDefaultSourcemapMode).toBe('inline');
130
+ });
131
+ it('defaults to inline when NODE_ENV is development', () => {
132
+ process.env.NODE_ENV = 'development';
133
+ const builder = createBuilder();
134
+ expect(builder.publicIsDevelopmentBuild).toBe(true);
135
+ expect(builder.publicDefaultSourcemapMode).toBe('inline');
136
+ });
137
+ });
91
138
  describe('sourcemapsEnabled', () => {
139
+ const originalNodeEnv = process.env.NODE_ENV;
92
140
  const originalEnv = process.env.WORKFLOW_SOURCEMAP;
93
141
  beforeEach(() => {
94
142
  delete process.env.WORKFLOW_SOURCEMAP;
143
+ // Pin to production so the environment-aware default is deterministic;
144
+ // individual tests opt into dev via watch/NODE_ENV as needed.
145
+ process.env.NODE_ENV = 'production';
95
146
  });
96
147
  afterEach(() => {
148
+ if (originalNodeEnv === undefined) {
149
+ delete process.env.NODE_ENV;
150
+ }
151
+ else {
152
+ process.env.NODE_ENV = originalNodeEnv;
153
+ }
97
154
  if (originalEnv === undefined) {
98
155
  delete process.env.WORKFLOW_SOURCEMAP;
99
156
  }
@@ -101,7 +158,14 @@ describe('sourcemapsEnabled', () => {
101
158
  process.env.WORKFLOW_SOURCEMAP = originalEnv;
102
159
  }
103
160
  });
104
- it('is true by default', () => {
161
+ it('is false by default in production', () => {
162
+ expect(createBuilder().publicSourcemapsEnabled).toBe(false);
163
+ });
164
+ it('is true by default in development (watch)', () => {
165
+ expect(createBuilder(undefined, true).publicSourcemapsEnabled).toBe(true);
166
+ });
167
+ it('is true by default in development (NODE_ENV)', () => {
168
+ process.env.NODE_ENV = 'development';
105
169
  expect(createBuilder().publicSourcemapsEnabled).toBe(true);
106
170
  });
107
171
  it('is false when config sourcemap is false', () => {
@@ -118,9 +182,13 @@ describe('sourcemapsEnabled', () => {
118
182
  expect(createBuilder(mode).publicSourcemapsEnabled).toBe(true);
119
183
  }
120
184
  });
185
+ it('is true in production when WORKFLOW_SOURCEMAP env opts in', () => {
186
+ process.env.WORKFLOW_SOURCEMAP = 'inline';
187
+ expect(createBuilder().publicSourcemapsEnabled).toBe(true);
188
+ });
121
189
  it('is false when WORKFLOW_SOURCEMAP env is false', () => {
122
190
  process.env.WORKFLOW_SOURCEMAP = 'false';
123
191
  expect(createBuilder().publicSourcemapsEnabled).toBe(false);
124
192
  });
125
193
  });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1zb3VyY2VtYXAudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXNvbHZlLXNvdXJjZW1hcC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRDs7O0dBR0c7QUFDSCxNQUFNLFdBQVksU0FBUSxXQUFXO0lBQ25DLEtBQUssQ0FBQyxLQUFLO1FBQ1QsUUFBUTtJQUNWLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxXQUEwQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQsU0FBUyxhQUFhLENBQUMsU0FBeUI7SUFDOUMsTUFBTSxNQUFNLEdBQXFCO1FBQy9CLFdBQVcsRUFBRSxZQUFZO1FBQ3pCLFVBQVUsRUFBRSxvQkFBb0I7UUFDaEMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1gsZUFBZSxFQUFFLEVBQUU7UUFDbkIsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLFNBQVM7S0FDVixDQUFDO0lBQ0YsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0lBRW5ELFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENB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QUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztRQUN6QyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZW1hcE1vZGUsIFN0YW5kYWxvbmVDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBNaW5pbWFsIHN1YmNsYXNzIHRoYXQgZXhwb3NlcyB0aGUgcHJvdGVjdGVkIGByZXNvbHZlU291cmNlbWFwKClgIGFuZFxuICogYHNvdXJjZW1hcHNFbmFibGVkYCBtZW1iZXJzIGZvciB0ZXN0aW5nLlxuICovXG5jbGFzcyBUZXN0QnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyIHtcbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gbm8tb3BcbiAgfVxuXG4gIHB1YmxpYyBjYWxsUmVzb2x2ZVNvdXJjZW1hcChkZWZhdWx0TW9kZTogU291cmNlbWFwTW9kZSk6IFNvdXJjZW1hcE1vZGUge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTb3VyY2VtYXAoZGVmYXVsdE1vZGUpO1xuICB9XG5cbiAgcHVibGljIGdldCBwdWJsaWNTb3VyY2VtYXBzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VtYXBzRW5hYmxlZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWlsZGVyKHNvdXJjZW1hcD86IFNvdXJjZW1hcE1vZGUpOiBUZXN0QnVpbGRlciB7XG4gIGNvbnN0IGNvbmZpZzogU3RhbmRhbG9uZUNvbmZpZyA9IHtcbiAgICBidWlsZFRhcmdldDogJ3N0YW5kYWxvbmUnLFxuICAgIHdvcmtpbmdEaXI6ICcvdG1wL3dvcmtmbG93LXRlc3QnLFxuICAgIGRpcnM6IFsnLiddLFxuICAgIHN0ZXBzQnVuZGxlUGF0aDogJycsXG4gICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogJycsXG4gICAgd2ViaG9va0J1bmRsZVBhdGg6ICcnLFxuICAgIHNvdXJjZW1hcCxcbiAgfTtcbiAgcmV0dXJuIG5ldyBUZXN0QnVpbGRlcihjb25maWcpO1xufVxuXG5kZXNjcmliZSgncmVzb2x2ZVNvdXJjZW1hcCcsICgpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxFbnYgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVA7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUDtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBpZiAob3JpZ2luYWxFbnYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gb3JpZ2luYWxFbnY7XG4gICAgfVxuICB9KTtcblxuICBpdCgncmV0dXJucyB0aGUgZGVmYXVsdCB3aGVuIG5vIGNvbmZpZyBvciBlbnYgdmFyIGlzIHNldCcsICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcigpO1xuICAgIGV4cGVjdChidWlsZGVyLmNhbGxSZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSkudG9CZSgnaW5saW5lJyk7XG4gICAgZXhwZWN0KGJ1aWxkZXIuY2FsbFJlc29sdmVTb3VyY2VtYXAoZmFsc2UpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QoYnVpbGRlci5jYWxsUmVzb2x2ZVNvdXJjZW1hcCh0cnVlKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3ByZWZlcnMgZXhwbGljaXQgY29uZmlnIG92ZXIgdGhlIGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoZmFsc2UpLmNhbGxSZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoJ2V4dGVybmFsJykuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKFxuICAgICAgJ2V4dGVybmFsJ1xuICAgICk7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoJ2xpbmtlZCcpLmNhbGxSZXNvbHZlU291cmNlbWFwKGZhbHNlKSkudG9CZSgnbGlua2VkJyk7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIodHJ1ZSkuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgncHJlZmVycyBleHBsaWNpdCBjb25maWcgb3ZlciBlbnZpcm9ubWVudCB2YXJpYWJsZScsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVAgPSAnaW5saW5lJztcbiAgICBleHBlY3QoY3JlYXRlQnVpbGRlcihmYWxzZSkuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QoY3JlYXRlQnVpbGRlcignZXh0ZXJuYWwnKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJykpLnRvQmUoXG4gICAgICAnZXh0ZXJuYWwnXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWcgaXMgbm90IHNldCcsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVAgPSAnZmFsc2UnO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKGZhbHNlKTtcblxuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9ICd0cnVlJztcbiAgICBleHBlY3QoY3JlYXRlQnVpbGRlcigpLmNhbGxSZXNvbHZlU291cmNlbWFwKGZhbHNlKSkudG9CZSh0cnVlKTtcblxuICAgIGZvciAoY29uc3QgbW9kZSBvZiBbJ2lubGluZScsICdsaW5rZWQnLCAnZXh0ZXJuYWwnLCAnYm90aCddIGFzIGNvbnN0KSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVAgPSBtb2RlO1xuICAgICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJykpLnRvQmUobW9kZSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnYWNjZXB0cyBcIjBcIiAvIFwiMVwiIGFzIGVudmlyb25tZW50IHZhcmlhYmxlIGFsaWFzZXMgZm9yIGZhbHNlIC8gdHJ1ZScsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVAgPSAnMCc7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJykpLnRvQmUoZmFsc2UpO1xuXG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gJzEnO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkuY2FsbFJlc29sdmVTb3VyY2VtYXAoZmFsc2UpKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnZmFsbHMgYmFjayB0byBkZWZhdWx0IHdoZW4gZW52IHZhciBpcyBlbXB0eSBvciB1bnJlY29nbml6ZWQnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gJyc7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJykpLnRvQmUoJ2lubGluZScpO1xuXG4gICAgLy8gU3VwcHJlc3MgdGhlIGV4cGVjdGVkIHdhcm5pbmdcbiAgICBjb25zdCBvcmlnaW5hbFdhcm4gPSBjb25zb2xlLndhcm47XG4gICAgY29uc29sZS53YXJuID0gKCkgPT4ge307XG4gICAgdHJ5IHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9ICdub25zZW5zZSc7XG4gICAgICBleHBlY3QoY3JlYXRlQnVpbGRlcigpLmNhbGxSZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSkudG9CZSgnaW5saW5lJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnNvbGUud2FybiA9IG9yaWdpbmFsV2FybjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdzb3VyY2VtYXBzRW5hYmxlZCcsICgpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxFbnYgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVA7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUDtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBpZiAob3JpZ2luYWxFbnYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gb3JpZ2luYWxFbnY7XG4gICAgfVxuICB9KTtcblxuICBpdCgnaXMgdHJ1ZSBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkucHVibGljU291cmNlbWFwc0VuYWJsZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBmYWxzZSB3aGVuIGNvbmZpZyBzb3VyY2VtYXAgaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoZmFsc2UpLnB1YmxpY1NvdXJjZW1hcHNFbmFibGVkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzIHRydWUgZm9yIGFueSBub24tZmFsc2UgY29uZmlnIHZhbHVlJywgKCkgPT4ge1xuICAgIGZvciAoY29uc3QgbW9kZSBvZiBbXG4gICAgICB0cnVlLFxuICAgICAgJ2lubGluZScsXG4gICAgICAnbGlua2VkJyxcbiAgICAgICdleHRlcm5hbCcsXG4gICAgICAnYm90aCcsXG4gICAgXSBhcyBjb25zdCkge1xuICAgICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIobW9kZSkucHVibGljU291cmNlbWFwc0VuYWJsZWQpLnRvQmUodHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnaXMgZmFsc2Ugd2hlbiBXT1JLRkxPV19TT1VSQ0VNQVAgZW52IGlzIGZhbHNlJywgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9ICdmYWxzZSc7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoKS5wdWJsaWNTb3VyY2VtYXBzRW5hYmxlZCkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXX0=
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1zb3VyY2VtYXAudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXNvbHZlLXNvdXJjZW1hcC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRDs7O0dBR0c7QUFDSCxNQUFNLFdBQVksU0FBUSxXQUFXO0lBQ25DLEtBQUssQ0FBQyxLQUFLO1FBQ1QsUUFBUTtJQUNWLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxXQUEwQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsMEJBQTBCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLHdCQUF3QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFFRCxTQUFTLGFBQWEsQ0FDcEIsU0FBeUIsRUFDekIsS0FBZTtJQUVmLE1BQU0sTUFBTSxHQUFxQjtRQUMvQixXQUFXLEVBQUUsWUFBWTtRQUN6QixVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNYLGVBQWUsRUFBRSxFQUFFO1FBQ25CLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsaUJBQWlCLEVBQUUsRUFBRTtRQUNyQixTQUFTO1FBQ1QsS0FBSztLQUNOLENBQUM7SUFDRixPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxRQUFRLENB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eHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IEJhc2VCdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VtYXBNb2RlLCBTdGFuZGFsb25lQ29uZmlnIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogTWluaW1hbCBzdWJjbGFzcyB0aGF0IGV4cG9zZXMgdGhlIHByb3RlY3RlZCBgcmVzb2x2ZVNvdXJjZW1hcCgpYCBhbmRcbiAqIGBzb3VyY2VtYXBzRW5hYmxlZGAgbWVtYmVycyBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgVGVzdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlciB7XG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG5vLW9wXG4gIH1cblxuICBwdWJsaWMgY2FsbFJlc29sdmVTb3VyY2VtYXAoZGVmYXVsdE1vZGU6IFNvdXJjZW1hcE1vZGUpOiBTb3VyY2VtYXBNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU291cmNlbWFwKGRlZmF1bHRNb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHVibGljU291cmNlbWFwc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlbWFwc0VuYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHB1YmxpY0RlZmF1bHRTb3VyY2VtYXBNb2RlKCk6IFNvdXJjZW1hcE1vZGUge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRTb3VyY2VtYXBNb2RlO1xuICB9XG5cbiAgcHVibGljIGdldCBwdWJsaWNJc0RldmVsb3BtZW50QnVpbGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXZlbG9wbWVudEJ1aWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1aWxkZXIoXG4gIHNvdXJjZW1hcD86IFNvdXJjZW1hcE1vZGUsXG4gIHdhdGNoPzogYm9vbGVhblxuKTogVGVzdEJ1aWxkZXIge1xuICBjb25zdCBjb25maWc6IFN0YW5kYWxvbmVDb25maWcgPSB7XG4gICAgYnVpbGRUYXJnZXQ6ICdzdGFuZGFsb25lJyxcbiAgICB3b3JraW5nRGlyOiAnL3RtcC93b3JrZmxvdy10ZXN0JyxcbiAgICBkaXJzOiBbJy4nXSxcbiAgICBzdGVwc0J1bmRsZVBhdGg6ICcnLFxuICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6ICcnLFxuICAgIHdlYmhvb2tCdW5kbGVQYXRoOiAnJyxcbiAgICBzb3VyY2VtYXAsXG4gICAgd2F0Y2gsXG4gIH07XG4gIHJldHVybiBuZXcgVGVzdEJ1aWxkZXIoY29uZmlnKTtcbn1cblxuZGVzY3JpYmUoJ3Jlc29sdmVTb3VyY2VtYXAnLCAoKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsRW52ID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVA7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgaWYgKG9yaWdpbmFsRW52ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9IG9yaWdpbmFsRW52O1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgdGhlIGRlZmF1bHQgd2hlbiBubyBjb25maWcgb3IgZW52IHZhciBpcyBzZXQnLCAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIoKTtcbiAgICBleHBlY3QoYnVpbGRlci5jYWxsUmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJykpLnRvQmUoJ2lubGluZScpO1xuICAgIGV4cGVjdChidWlsZGVyLmNhbGxSZXNvbHZlU291cmNlbWFwKGZhbHNlKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGJ1aWxkZXIuY2FsbFJlc29sdmVTb3VyY2VtYXAodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdwcmVmZXJzIGV4cGxpY2l0IGNvbmZpZyBvdmVyIHRoZSBkZWZhdWx0JywgKCkgPT4ge1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKGZhbHNlKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJykpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCdleHRlcm5hbCcpLmNhbGxSZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSkudG9CZShcbiAgICAgICdleHRlcm5hbCdcbiAgICApO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCdsaW5rZWQnKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcChmYWxzZSkpLnRvQmUoJ2xpbmtlZCcpO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKHRydWUpLmNhbGxSZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3ByZWZlcnMgZXhwbGljaXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgdmFyaWFibGUnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gJ2lubGluZSc7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoZmFsc2UpLmNhbGxSZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoJ2V4dGVybmFsJykuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKFxuICAgICAgJ2V4dGVybmFsJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlnIGlzIG5vdCBzZXQnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gJ2ZhbHNlJztcbiAgICBleHBlY3QoY3JlYXRlQnVpbGRlcigpLmNhbGxSZXNvbHZlU291cmNlbWFwKCdpbmxpbmUnKSkudG9CZShmYWxzZSk7XG5cbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVAgPSAndHJ1ZSc7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcChmYWxzZSkpLnRvQmUodHJ1ZSk7XG5cbiAgICBmb3IgKGNvbnN0IG1vZGUgb2YgWydpbmxpbmUnLCAnbGlua2VkJywgJ2V4dGVybmFsJywgJ2JvdGgnXSBhcyBjb25zdCkge1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gbW9kZTtcbiAgICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKG1vZGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2FjY2VwdHMgXCIwXCIgLyBcIjFcIiBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbGlhc2VzIGZvciBmYWxzZSAvIHRydWUnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gJzAnO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKGZhbHNlKTtcblxuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9ICcxJztcbiAgICBleHBlY3QoY3JlYXRlQnVpbGRlcigpLmNhbGxSZXNvbHZlU291cmNlbWFwKGZhbHNlKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2ZhbGxzIGJhY2sgdG8gZGVmYXVsdCB3aGVuIGVudiB2YXIgaXMgZW1wdHkgb3IgdW5yZWNvZ25pemVkJywgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9ICcnO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkuY2FsbFJlc29sdmVTb3VyY2VtYXAoJ2lubGluZScpKS50b0JlKCdpbmxpbmUnKTtcblxuICAgIC8vIFN1cHByZXNzIHRoZSBleHBlY3RlZCB3YXJuaW5nXG4gICAgY29uc3Qgb3JpZ2luYWxXYXJuID0gY29uc29sZS53YXJuO1xuICAgIGNvbnNvbGUud2FybiA9ICgpID0+IHt9O1xuICAgIHRyeSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVAgPSAnbm9uc2Vuc2UnO1xuICAgICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoKS5jYWxsUmVzb2x2ZVNvdXJjZW1hcCgnaW5saW5lJykpLnRvQmUoJ2lubGluZScpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zb2xlLndhcm4gPSBvcmlnaW5hbFdhcm47XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVmYXVsdFNvdXJjZW1hcE1vZGUgLyBpc0RldmVsb3BtZW50QnVpbGQnLCAoKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsTm9kZUVudiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WO1xuICBjb25zdCBvcmlnaW5hbFNvdXJjZW1hcEVudiA9IHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGlmIChvcmlnaW5hbE5vZGVFbnYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52Lk5PREVfRU5WO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9IG9yaWdpbmFsTm9kZUVudjtcbiAgICB9XG4gICAgaWYgKG9yaWdpbmFsU291cmNlbWFwRW52ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9IG9yaWdpbmFsU291cmNlbWFwRW52O1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2RlZmF1bHRzIHRvIG9mZiBpbiBwcm9kdWN0aW9uIChubyB3YXRjaCwgTk9ERV9FTlYgbm90IGRldmVsb3BtZW50KScsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9ICdwcm9kdWN0aW9uJztcbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcigpO1xuICAgIGV4cGVjdChidWlsZGVyLnB1YmxpY0lzRGV2ZWxvcG1lbnRCdWlsZCkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KGJ1aWxkZXIucHVibGljRGVmYXVsdFNvdXJjZW1hcE1vZGUpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnZGVmYXVsdHMgdG8gaW5saW5lIHdoZW4gY29uZmlnLndhdGNoIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgLy8gRXZlbiB3aXRoIGEgcHJvZHVjdGlvbiBOT0RFX0VOViwgYW4gYWN0aXZlIHdhdGNoL2RldiBzZXJ2ZXIgb3B0cyBpbi5cbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9ICdwcm9kdWN0aW9uJztcbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih1bmRlZmluZWQsIHRydWUpO1xuICAgIGV4cGVjdChidWlsZGVyLnB1YmxpY0lzRGV2ZWxvcG1lbnRCdWlsZCkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYnVpbGRlci5wdWJsaWNEZWZhdWx0U291cmNlbWFwTW9kZSkudG9CZSgnaW5saW5lJyk7XG4gIH0pO1xuXG4gIGl0KCdkZWZhdWx0cyB0byBpbmxpbmUgd2hlbiBOT0RFX0VOViBpcyBkZXZlbG9wbWVudCcsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9ICdkZXZlbG9wbWVudCc7XG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIoKTtcbiAgICBleHBlY3QoYnVpbGRlci5wdWJsaWNJc0RldmVsb3BtZW50QnVpbGQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGJ1aWxkZXIucHVibGljRGVmYXVsdFNvdXJjZW1hcE1vZGUpLnRvQmUoJ2lubGluZScpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc291cmNlbWFwc0VuYWJsZWQnLCAoKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsTm9kZUVudiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WO1xuICBjb25zdCBvcmlnaW5hbEVudiA9IHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQO1xuICAgIC8vIFBpbiB0byBwcm9kdWN0aW9uIHNvIHRoZSBlbnZpcm9ubWVudC1hd2FyZSBkZWZhdWx0IGlzIGRldGVybWluaXN0aWM7XG4gICAgLy8gaW5kaXZpZHVhbCB0ZXN0cyBvcHQgaW50byBkZXYgdmlhIHdhdGNoL05PREVfRU5WIGFzIG5lZWRlZC5cbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9ICdwcm9kdWN0aW9uJztcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBpZiAob3JpZ2luYWxOb2RlRW52ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5OT0RFX0VOVjtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPSBvcmlnaW5hbE5vZGVFbnY7XG4gICAgfVxuICAgIGlmIChvcmlnaW5hbEVudiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT1VSQ0VNQVAgPSBvcmlnaW5hbEVudjtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdpcyBmYWxzZSBieSBkZWZhdWx0IGluIHByb2R1Y3Rpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoKS5wdWJsaWNTb3VyY2VtYXBzRW5hYmxlZCkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyB0cnVlIGJ5IGRlZmF1bHQgaW4gZGV2ZWxvcG1lbnQgKHdhdGNoKScsICgpID0+IHtcbiAgICBleHBlY3QoY3JlYXRlQnVpbGRlcih1bmRlZmluZWQsIHRydWUpLnB1YmxpY1NvdXJjZW1hcHNFbmFibGVkKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnaXMgdHJ1ZSBieSBkZWZhdWx0IGluIGRldmVsb3BtZW50IChOT0RFX0VOViknLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPSAnZGV2ZWxvcG1lbnQnO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkucHVibGljU291cmNlbWFwc0VuYWJsZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBmYWxzZSB3aGVuIGNvbmZpZyBzb3VyY2VtYXAgaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIoZmFsc2UpLnB1YmxpY1NvdXJjZW1hcHNFbmFibGVkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzIHRydWUgZm9yIGFueSBub24tZmFsc2UgY29uZmlnIHZhbHVlJywgKCkgPT4ge1xuICAgIGZvciAoY29uc3QgbW9kZSBvZiBbXG4gICAgICB0cnVlLFxuICAgICAgJ2lubGluZScsXG4gICAgICAnbGlua2VkJyxcbiAgICAgICdleHRlcm5hbCcsXG4gICAgICAnYm90aCcsXG4gICAgXSBhcyBjb25zdCkge1xuICAgICAgZXhwZWN0KGNyZWF0ZUJ1aWxkZXIobW9kZSkucHVibGljU291cmNlbWFwc0VuYWJsZWQpLnRvQmUodHJ1ZSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnaXMgdHJ1ZSBpbiBwcm9kdWN0aW9uIHdoZW4gV09SS0ZMT1dfU09VUkNFTUFQIGVudiBvcHRzIGluJywgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPVVJDRU1BUCA9ICdpbmxpbmUnO1xuICAgIGV4cGVjdChjcmVhdGVCdWlsZGVyKCkucHVibGljU291cmNlbWFwc0VuYWJsZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBmYWxzZSB3aGVuIFdPUktGTE9XX1NPVVJDRU1BUCBlbnYgaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09VUkNFTUFQID0gJ2ZhbHNlJztcbiAgICBleHBlY3QoY3JlYXRlQnVpbGRlcigpLnB1YmxpY1NvdXJjZW1hcHNFbmFibGVkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/builders",
3
- "version": "5.0.0-beta.19",
3
+ "version": "5.0.0-beta.20",
4
4
  "description": "Shared builder infrastructure for Workflow SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "find-up": "7.0.0",
41
41
  "json5": "2.2.3",
42
42
  "tinyglobby": "0.2.17",
43
- "@workflow/core": "5.0.0-beta.19",
43
+ "@workflow/core": "5.0.0-beta.20",
44
44
  "@workflow/errors": "5.0.0-beta.8",
45
45
  "@workflow/utils": "5.0.0-beta.4",
46
46
  "@workflow/swc-plugin": "5.0.0-beta.5"