@aws-cdk/toolkit-lib 1.19.1 → 1.19.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/bootstrap/private/helpers.js +2 -2
  4. package/lib/actions/diff/private/helpers.js +6 -6
  5. package/lib/actions/refactor/private/mapping-helpers.js +3 -3
  6. package/lib/api/aws-auth/awscli-compatible.js +2 -2
  7. package/lib/api/aws-auth/base-credentials.js +2 -2
  8. package/lib/api/aws-auth/credential-plugins.js +3 -3
  9. package/lib/api/aws-auth/sdk-provider.js +6 -6
  10. package/lib/api/aws-auth/sdk.js +3 -3
  11. package/lib/api/bootstrap/bootstrap-environment.js +12 -12
  12. package/lib/api/cloud-assembly/context-store.js +2 -2
  13. package/lib/api/cloud-assembly/private/context-aware-source.js +2 -2
  14. package/lib/api/cloud-assembly/private/exec.d.ts +3 -0
  15. package/lib/api/cloud-assembly/private/exec.js +38 -5
  16. package/lib/api/cloud-assembly/private/helpers.js +2 -2
  17. package/lib/api/cloud-assembly/private/prepare-source.js +2 -2
  18. package/lib/api/cloud-assembly/private/stack-assembly.js +6 -6
  19. package/lib/api/cloud-assembly/source-builder.js +2 -2
  20. package/lib/api/cloud-assembly/stack-collection.js +8 -4
  21. package/lib/api/cloudformation/evaluate-cloudformation-template.js +2 -2
  22. package/lib/api/cloudformation/stack-helpers.js +2 -2
  23. package/lib/api/cloudformation/template-body-parameter.js +3 -3
  24. package/lib/api/context.js +2 -2
  25. package/lib/api/deployments/asset-publishing.js +3 -3
  26. package/lib/api/deployments/assets.js +5 -5
  27. package/lib/api/deployments/cfn-api.js +9 -9
  28. package/lib/api/deployments/checks.js +5 -5
  29. package/lib/api/deployments/deploy-stack.js +7 -7
  30. package/lib/api/deployments/deployment-result.js +2 -2
  31. package/lib/api/deployments/deployments.js +12 -12
  32. package/lib/api/drift/drift.js +3 -3
  33. package/lib/api/environment/environment-access.js +5 -5
  34. package/lib/api/environment/environment-resources.js +8 -8
  35. package/lib/api/garbage-collection/garbage-collector.js +7 -7
  36. package/lib/api/garbage-collection/progress-printer.js +2 -2
  37. package/lib/api/garbage-collection/stack-refresh.js +3 -3
  38. package/lib/api/hotswap/appsync-mapping-templates.js +2 -2
  39. package/lib/api/hotswap/bedrock-agentcore-runtimes.js +6 -6
  40. package/lib/api/hotswap/common.js +4 -4
  41. package/lib/api/hotswap/hotswap-deployments.js +2 -2
  42. package/lib/api/hotswap/lambda-functions.js +2 -2
  43. package/lib/api/notices/cached-data-source.js +2 -2
  44. package/lib/api/notices/web-data-source.js +9 -9
  45. package/lib/api/plugin/plugin.js +5 -5
  46. package/lib/api/refactoring/context.js +4 -4
  47. package/lib/api/refactoring/graph.js +3 -3
  48. package/lib/api/refactoring/index.js +5 -5
  49. package/lib/api/refactoring/stack-definitions.js +2 -2
  50. package/lib/api/resource-import/importer.js +2 -2
  51. package/lib/api/rwlock.js +3 -3
  52. package/lib/api/settings.js +3 -3
  53. package/lib/api/stack-events/stack-activity-monitor.d.ts +41 -4
  54. package/lib/api/stack-events/stack-activity-monitor.js +99 -9
  55. package/lib/api/stack-events/stack-event-poller.d.ts +5 -2
  56. package/lib/api/stack-events/stack-event-poller.js +7 -5
  57. package/lib/api/toolkit-info.js +9 -9
  58. package/lib/api/work-graph/work-graph-builder.js +3 -3
  59. package/lib/api/work-graph/work-graph.js +4 -4
  60. package/lib/context-providers/ami.js +2 -2
  61. package/lib/context-providers/cc-api-provider.js +9 -9
  62. package/lib/context-providers/hosted-zones.js +4 -4
  63. package/lib/context-providers/index.js +3 -3
  64. package/lib/context-providers/keys.js +3 -3
  65. package/lib/context-providers/load-balancers.js +10 -10
  66. package/lib/context-providers/security-groups.js +5 -5
  67. package/lib/context-providers/ssm-parameters.js +3 -3
  68. package/lib/context-providers/vpcs.js +7 -7
  69. package/lib/index_bg.wasm +0 -0
  70. package/lib/private/activity-printer/base.js +5 -5
  71. package/lib/private/activity-printer/current.js +2 -2
  72. package/lib/toolkit/toolkit-error.d.ts +31 -5
  73. package/lib/toolkit/toolkit-error.js +54 -14
  74. package/lib/toolkit/toolkit.js +21 -16
  75. package/lib/util/cloudformation.d.ts +18 -1
  76. package/lib/util/cloudformation.js +29 -3
  77. package/lib/util/directories.js +2 -2
  78. package/lib/util/objects.js +3 -3
  79. package/lib/util/version-range.js +5 -5
  80. package/package.json +11 -11
@@ -36,16 +36,16 @@ class Bootstrapper {
36
36
  async legacyBootstrap(environment, sdkProvider, options = {}) {
37
37
  const params = options.parameters ?? {};
38
38
  if (params.trustedAccounts?.length) {
39
- throw new toolkit_error_1.ToolkitError('--trust can only be passed for the modern bootstrap experience.');
39
+ throw new toolkit_error_1.ToolkitError('TrustRequiresModernBootstrap', '--trust can only be passed for the modern bootstrap experience.');
40
40
  }
41
41
  if (params.cloudFormationExecutionPolicies?.length) {
42
- throw new toolkit_error_1.ToolkitError('--cloudformation-execution-policies can only be passed for the modern bootstrap experience.');
42
+ throw new toolkit_error_1.ToolkitError('ExecutionPoliciesRequiresModernBootstrap', '--cloudformation-execution-policies can only be passed for the modern bootstrap experience.');
43
43
  }
44
44
  if (params.createCustomerMasterKey !== undefined) {
45
- throw new toolkit_error_1.ToolkitError('--bootstrap-customer-key can only be passed for the modern bootstrap experience.');
45
+ throw new toolkit_error_1.ToolkitError('CustomerKeyRequiresModernBootstrap', '--bootstrap-customer-key can only be passed for the modern bootstrap experience.');
46
46
  }
47
47
  if (params.qualifier) {
48
- throw new toolkit_error_1.ToolkitError('--qualifier can only be passed for the modern bootstrap experience.');
48
+ throw new toolkit_error_1.ToolkitError('QualifierRequiresModernBootstrap', '--qualifier can only be passed for the modern bootstrap experience.');
49
49
  }
50
50
  const toolkitStackName = options.toolkitStackName ?? toolkit_info_1.DEFAULT_TOOLKIT_STACK_NAME;
51
51
  const current = await deploy_bootstrap_1.BootstrapStack.lookup(sdkProvider, environment, toolkitStackName, this.ioHelper);
@@ -65,7 +65,7 @@ class Bootstrapper {
65
65
  const current = await deploy_bootstrap_1.BootstrapStack.lookup(sdkProvider, environment, toolkitStackName, this.ioHelper);
66
66
  const partition = await current.partition();
67
67
  if (params.createCustomerMasterKey !== undefined && params.kmsKeyId) {
68
- throw new toolkit_error_1.ToolkitError("You cannot pass '--bootstrap-kms-key-id' and '--bootstrap-customer-key' together. Specify one or the other");
68
+ throw new toolkit_error_1.ToolkitError('ConflictingKmsKeyOptions', "You cannot pass '--bootstrap-kms-key-id' and '--bootstrap-customer-key' together. Specify one or the other");
69
69
  }
70
70
  // If people re-bootstrap, existing parameter values are reused so that people don't accidentally change the configuration
71
71
  // on their bootstrap stack (this happens automatically in deployStack). However, to do proper validation on the
@@ -81,7 +81,7 @@ class Bootstrapper {
81
81
  ]);
82
82
  const invalid = intersection(allTrusted, new Set(params.untrustedAccounts));
83
83
  if (invalid.size > 0) {
84
- throw new toolkit_error_1.ToolkitError(`Accounts cannot be both trusted and untrusted. Found: ${[...invalid].join(',')}`);
84
+ throw new toolkit_error_1.ToolkitError('AccountBothTrustedAndUntrusted', `Accounts cannot be both trusted and untrusted. Found: ${[...invalid].join(',')}`);
85
85
  }
86
86
  const removeUntrusted = (accounts) => accounts.filter(acc => !params.untrustedAccounts?.map(String).includes(String(acc)));
87
87
  const trustedAccounts = removeUntrusted(params.trustedAccounts ?? splitCfnArray(current.parameters.TrustedAccounts));
@@ -107,7 +107,7 @@ class Bootstrapper {
107
107
  await this.ioHelper.defaults.warn(`Using default execution policy of '${implicitPolicy}'. Pass '--cloudformation-execution-policies' to customize.`);
108
108
  }
109
109
  else if (cloudFormationExecutionPolicies.length === 0) {
110
- throw new toolkit_error_1.ToolkitError(`Please pass \'--cloudformation-execution-policies\' when using \'--trust\' to specify deployment permissions. Try a managed policy of the form \'arn:${partition}:iam::aws:policy/<PolicyName>\'.`);
110
+ throw new toolkit_error_1.ToolkitError('MissingExecutionPoliciesForTrust', `Please pass \'--cloudformation-execution-policies\' when using \'--trust\' to specify deployment permissions. Try a managed policy of the form \'arn:${partition}:iam::aws:policy/<PolicyName>\'.`);
111
111
  }
112
112
  else {
113
113
  // Remind people what the current settings are
@@ -174,7 +174,7 @@ class Bootstrapper {
174
174
  // parameters yet will fail to deploy.
175
175
  if (params.denyExternalId !== undefined) {
176
176
  if (!templateParameters.includes('DenyExternalId')) {
177
- throw new toolkit_error_1.ToolkitError('The selected bootstrap template does not accept the DenyExternalId parameter');
177
+ throw new toolkit_error_1.ToolkitError('DenyExternalIdNotSupported', 'The selected bootstrap template does not accept the DenyExternalId parameter');
178
178
  }
179
179
  bootstrapTemplateParameters.DenyExternalId = `${params.denyExternalId}`;
180
180
  }
@@ -192,7 +192,7 @@ class Bootstrapper {
192
192
  const arn = await this.getExamplePermissionsBoundary(params.qualifier ?? 'hnb659fds', partition, environment.account, sdk);
193
193
  const policyName = arn.split('/').pop();
194
194
  if (!policyName) {
195
- throw new toolkit_error_1.ToolkitError('Could not retrieve the example permission boundary!');
195
+ throw new toolkit_error_1.ToolkitError('PermissionBoundaryRetrievalFailed', 'Could not retrieve the example permission boundary!');
196
196
  }
197
197
  return Promise.resolve(policyName);
198
198
  }
@@ -268,7 +268,7 @@ class Bootstrapper {
268
268
  return createPolicyResponse.Policy.Arn;
269
269
  }
270
270
  else {
271
- throw new toolkit_error_1.ToolkitError(`Could not retrieve the example permission boundary ${arn}!`);
271
+ throw new toolkit_error_1.ToolkitError('PermissionBoundaryCreateFailed', `Could not retrieve the example permission boundary ${arn}!`);
272
272
  }
273
273
  }
274
274
  validatePolicyName(permissionsBoundary) {
@@ -278,7 +278,7 @@ class Bootstrapper {
278
278
  const regexp = /[\w+\/=,.@-]+/;
279
279
  const matches = regexp.exec(permissionsBoundary);
280
280
  if (!(matches && matches.length === 1 && matches[0] === permissionsBoundary)) {
281
- throw new toolkit_error_1.ToolkitError(`The permissions boundary name ${permissionsBoundary} does not match the IAM conventions.`);
281
+ throw new toolkit_error_1.ToolkitError('InvalidPermissionBoundaryName', `The permissions boundary name ${permissionsBoundary} does not match the IAM conventions.`);
282
282
  }
283
283
  }
284
284
  async customBootstrap(environment, sdkProvider, options = {}) {
@@ -337,4 +337,4 @@ function splitCfnArray(xs) {
337
337
  function intersection(xs, ys) {
338
338
  return new Set(Array.from(xs).filter(x => ys.has(x)));
339
339
  }
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUc3Qix5REFBa0Y7QUFDbEYsdURBQTREO0FBQzVELCtEQUEyRDtBQUMzRCxxQ0FBMkY7QUFJM0Ysc0NBQWlDO0FBQ2pDLGtEQUE2RDtBQUk3RCxNQUFhLFlBQVk7SUFJSjtJQUhGLFFBQVEsQ0FBVztJQUVwQyxZQUNtQixTQUEwQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFDaEUsUUFBa0I7UUFERCxXQUFNLEdBQU4sTUFBTSxDQUF5QztRQUdoRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU0sb0JBQW9CLENBQ3pCLFdBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQUU7UUFFekMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRSxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakUsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFhO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxRQUFRLEVBQUUsSUFB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QUFFOUM7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUI7O0dBRUc7QUFDSCxNQUFNLGtDQUFrQyxHQUFHLG9DQUFvQyxDQUFDO0FBRWhGOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxFQUFzQjtJQUMzQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUksRUFBVSxFQUFFLEVBQVU7SUFDN0MsT0FBTyxJQUFJLEdBQUcsQ0FBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUgeyBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMsIEJvb3RzdHJhcHBpbmdQYXJhbWV0ZXJzIH0gZnJvbSAnLi9ib290c3RyYXAtcHJvcHMnO1xuaW1wb3J0IHsgQm9vdHN0cmFwU3RhY2ssIGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUgfSBmcm9tICcuL2RlcGxveS1ib290c3RyYXAnO1xuaW1wb3J0IHsgbGVnYWN5Qm9vdHN0cmFwVGVtcGxhdGUgfSBmcm9tICcuL2xlZ2FjeS10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgYnVuZGxlZFBhY2thZ2VSb290RGlyLCBsb2FkU3RydWN0dXJlZEZpbGUsIHNlcmlhbGl6ZVN0cnVjdHVyZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREssIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2RlcGxveW1lbnRzJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuaW1wb3J0IHsgREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUUgfSBmcm9tICcuLi90b29sa2l0LWluZm8nO1xuXG5leHBvcnQgdHlwZSBCb290c3RyYXBTb3VyY2UgPSB7IHNvdXJjZTogJ2xlZ2FjeScgfSB8IHsgc291cmNlOiAnZGVmYXVsdCcgfSB8IHsgc291cmNlOiAnY3VzdG9tJzsgdGVtcGxhdGVGaWxlOiBzdHJpbmcgfTtcblxuZXhwb3J0IGNsYXNzIEJvb3RzdHJhcHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc291cmNlOiBCb290c3RyYXBTb3VyY2UgPSB7IHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gICAgaW9IZWxwZXI6IElvSGVscGVyLFxuICApIHtcbiAgICB0aGlzLmlvSGVscGVyID0gaW9IZWxwZXI7XG4gIH1cblxuICBwdWJsaWMgYm9vdHN0cmFwRW52aXJvbm1lbnQoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc291cmNlLnNvdXJjZSkge1xuICAgICAgY2FzZSAnbGVnYWN5JzpcbiAgICAgICAgcmV0dXJuIHRoaXMubGVnYWN5Qm9vdHN0cmFwKGVudmlyb25tZW50LCBzZGtQcm92aWRlciwgb3B0aW9ucyk7XG4gICAgICBjYXNlICdkZWZhdWx0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZXJuQm9vdHN0cmFwKGVudmlyb25tZW50LCBzZGtQcm92aWRlciwgb3B0aW9ucyk7XG4gICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21Cb290c3RyYXAoZW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2hvd1RlbXBsYXRlKGpzb246IGJvb2xlYW4pIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMubG9hZFRlbXBsYXRlKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7c2VyaWFsaXplU3RydWN0dXJlKHRlbXBsYXRlLCBqc29uKX1cXG5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3kgbGVnYWN5IGJvb3RzdHJhcCBzdGFja1xuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsZWdhY3lCb290c3RyYXAoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zLnBhcmFtZXRlcnMgPz8ge307XG5cbiAgICBpZiAocGFyYW1zLnRydXN0ZWRBY2NvdW50cz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCctLXRydXN0IGNhbiBvbmx5IGJlIHBhc3NlZCBmb3IgdGhlIG1vZGVybiBib290c3RyYXAgZXhwZXJpZW5jZS4nKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzIGNhbiBvbmx5IGJlIHBhc3NlZCBmb3IgdGhlIG1vZGVybiBib290c3RyYXAgZXhwZXJpZW5jZS4nKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jcmVhdGVDdXN0b21lck1hc3RlcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCctLWJvb3RzdHJhcC1jdXN0b21lci1rZXkgY2FuIG9ubHkgYmUgcGFzc2VkIGZvciB0aGUgbW9kZXJuIGJvb3RzdHJhcCBleHBlcmllbmNlLicpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnF1YWxpZmllcikge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignLS1xdWFsaWZpZXIgY2FuIG9ubHkgYmUgcGFzc2VkIGZvciB0aGUgbW9kZXJuIGJvb3RzdHJhcCBleHBlcmllbmNlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvb2xraXRTdGFja05hbWUgPSBvcHRpb25zLnRvb2xraXRTdGFja05hbWUgPz8gREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUU7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IEJvb3RzdHJhcFN0YWNrLmxvb2t1cChzZGtQcm92aWRlciwgZW52aXJvbm1lbnQsIHRvb2xraXRTdGFja05hbWUsIHRoaXMuaW9IZWxwZXIpO1xuICAgIHJldHVybiBjdXJyZW50LnVwZGF0ZShcbiAgICAgIGF3YWl0IHRoaXMubG9hZFRlbXBsYXRlKHBhcmFtcyksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBvcHRpb25zLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/PyBjdXJyZW50LnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBsb3kgQ0kvQ0QtcmVhZHkgYm9vdHN0cmFwIHN0YWNrIGZyb20gdGVtcGxhdGVcbiAgICpcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbW9kZXJuQm9vdHN0cmFwKFxuICAgIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbiAgICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4gICAgb3B0aW9uczogQm9vdHN0cmFwRW52aXJvbm1lbnRPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8U3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgY29uc3QgcGFyYW1zID0gb3B0aW9ucy5wYXJhbWV0ZXJzID8/IHt9O1xuXG4gICAgY29uc3QgYm9vdHN0cmFwVGVtcGxhdGUgPSBhd2FpdCB0aGlzLmxvYWRUZW1wbGF0ZSgpO1xuXG4gICAgY29uc3QgdG9vbGtpdFN0YWNrTmFtZSA9IG9wdGlvbnMudG9vbGtpdFN0YWNrTmFtZSA/PyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgQm9vdHN0cmFwU3RhY2subG9va3VwKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCwgdG9vbGtpdFN0YWNrTmFtZSwgdGhpcy5pb0hlbHBlcik7XG4gICAgY29uc3QgcGFydGl0aW9uID0gYXdhaXQgY3VycmVudC5wYXJ0aXRpb24oKTtcblxuICAgIGlmIChwYXJhbXMuY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXkgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXMua21zS2V5SWQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgIFwiWW91IGNhbm5vdCBwYXNzICctLWJvb3RzdHJhcC1rbXMta2V5LWlkJyBhbmQgJy0tYm9vdHN0cmFwLWN1c3RvbWVyLWtleScgdG9nZXRoZXIuIFNwZWNpZnkgb25lIG9yIHRoZSBvdGhlclwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJZiBwZW9wbGUgcmUtYm9vdHN0cmFwLCBleGlzdGluZyBwYXJhbWV0ZXIgdmFsdWVzIGFyZSByZXVzZWQgc28gdGhhdCBwZW9wbGUgZG9uJ3QgYWNjaWRlbnRhbGx5IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvblxuICAgIC8vIG9uIHRoZWlyIGJvb3RzdHJhcCBzdGFjayAodGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaW4gZGVwbG95U3RhY2spLiBIb3dldmVyLCB0byBkbyBwcm9wZXIgdmFsaWRhdGlvbiBvbiB0aGVcbiAgICAvLyBjb21iaW5lZCBhcmd1bWVudHMgKHN1Y2ggdGhhdCBpZiAtLXRydXN0IGhhcyBiZWVuIGdpdmVuLCAtLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llcyBpcyBuZWNlc3NhcnkgYXMgd2VsbClcbiAgICAvLyB3ZSBuZWVkIHRvIHRha2UgdGhpcyBwYXJhbWV0ZXIgcmV1c2UgaW50byBhY2NvdW50LlxuICAgIC8vXG4gICAgLy8gSWRlYWxseSB3ZSdkIGRvIHRoaXMgaW5zaWRlIHRoZSB0ZW1wbGF0ZSwgYnV0IHRoZSBgUnVsZXNgIHNlY3Rpb24gb2YgQ0ZOXG4gICAgLy8gdGVtcGxhdGVzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIGV4cHJlc3MgdGhlIGNvbmRpdGlvbnMgdGhhdCB3ZSBuZWVkXG4gICAgLy8gKGNhbid0IHVzZSBGbjo6Sm9pbiBvciByZWZlcmVuY2UgQ29uZGl0aW9ucykgc28gd2UgZG8gaXQgaGVyZSBpbnN0ZWFkLlxuICAgIGNvbnN0IGFsbFRydXN0ZWQgPSBuZXcgU2V0KFtcbiAgICAgIC4uLnBhcmFtcy50cnVzdGVkQWNjb3VudHMgPz8gW10sXG4gICAgICAuLi5wYXJhbXMudHJ1c3RlZEFjY291bnRzRm9yTG9va3VwID8/IFtdLFxuICAgIF0pO1xuICAgIGNvbnN0IGludmFsaWQgPSBpbnRlcnNlY3Rpb24oYWxsVHJ1c3RlZCwgbmV3IFNldChwYXJhbXMudW50cnVzdGVkQWNjb3VudHMpKTtcbiAgICBpZiAoaW52YWxpZC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgQWNjb3VudHMgY2Fubm90IGJlIGJvdGggdHJ1c3RlZCBhbmQgdW50cnVzdGVkLiBGb3VuZDogJHtbLi4uaW52YWxpZF0uam9pbignLCcpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbW92ZVVudHJ1c3RlZCA9IChhY2NvdW50czogc3RyaW5nW10pID0+XG4gICAgICBhY2NvdW50cy5maWx0ZXIoYWNjID0+ICFwYXJhbXMudW50cnVzdGVkQWNjb3VudHM/Lm1hcChTdHJpbmcpLmluY2x1ZGVzKFN0cmluZyhhY2MpKSk7XG5cbiAgICBjb25zdCB0cnVzdGVkQWNjb3VudHMgPSByZW1vdmVVbnRydXN0ZWQocGFyYW1zLnRydXN0ZWRBY2NvdW50cyA/PyBzcGxpdENmbkFycmF5KGN1cnJlbnQucGFyYW1ldGVycy5UcnVzdGVkQWNjb3VudHMpKTtcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmluZm8oXG4gICAgICBgVHJ1c3RlZCBhY2NvdW50cyBmb3IgZGVwbG95bWVudDogJHt0cnVzdGVkQWNjb3VudHMubGVuZ3RoID4gMCA/IHRydXN0ZWRBY2NvdW50cy5qb2luKCcsICcpIDogJyhub25lKSd9YCxcbiAgICApO1xuXG4gICAgY29uc3QgdHJ1c3RlZEFjY291bnRzRm9yTG9va3VwID0gcmVtb3ZlVW50cnVzdGVkKFxuICAgICAgcGFyYW1zLnRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cCA/PyBzcGxpdENmbkFycmF5KGN1cnJlbnQucGFyYW1ldGVycy5UcnVzdGVkQWNjb3VudHNGb3JMb29rdXApLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKFxuICAgICAgYFRydXN0ZWQgYWNjb3VudHMgZm9yIGxvb2t1cDogJHt0cnVzdGVkQWNjb3VudHNGb3JMb29rdXAubGVuZ3RoID4gMCA/IHRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cC5qb2luKCcsICcpIDogJyhub25lKSd9YCxcbiAgICApO1xuXG4gICAgY29uc3QgY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcyA9XG4gICAgICBwYXJhbXMuY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcyA/PyBzcGxpdENmbkFycmF5KGN1cnJlbnQucGFyYW1ldGVycy5DbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzKTtcbiAgICBpZiAodHJ1c3RlZEFjY291bnRzLmxlbmd0aCA9PT0gMCAmJiBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRm9yIHNlbGYtdHJ1c3QgaXQncyBva2F5IHRvIGRlZmF1bHQgdG8gQWRtaW5pc3RyYXRvckFjY2VzcywgYW5kIGl0IGltcHJvdmVzIHRoZSB1c2FiaWxpdHkgb2YgYm9vdHN0cmFwcGluZyBhIGxvdC5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSBtYWtlIHRoZSBpbXBsaWNpdGx5IHBvbGljeSBhIHBoeXNpY2FsIHBhcmFtZXRlci4gVGhlIHRlbXBsYXRlIHdpbGwgaW5mZXIgaXQgaW5zdGVhZCxcbiAgICAgIC8vIHdlIHNpbXBseSBkbyB0aGUgVUkgYWR2ZXJ0aXNpbmcgdGhhdCBiZWhhdmlvciBoZXJlLlxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIERJRCBtYWtlIGl0IGFuIGV4cGxpY2l0IHBhcmFtZXRlciwgd2Ugd291bGRuJ3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gd2hldGhlclxuICAgICAgLy8gd2UgaW5mZXJyZWQgaXQgb3Igd2hldGhlciB0aGUgdXNlciB0b2xkIHVzLCBhbmQgdGhlIHNlcXVlbmNlOlxuICAgICAgLy9cbiAgICAgIC8vICQgY2RrIGJvb3RzdHJhcFxuICAgICAgLy8gJCBjZGsgYm9vdHN0cmFwIC0tdHJ1c3QgMTIzNFxuICAgICAgLy9cbiAgICAgIC8vIFdvdWxkIGxlYXZlIEFkbWluaXN0cmF0b3JBY2Nlc3MgcG9saWNpZXMgd2l0aCBhIHRydXN0IHJlbGF0aW9uc2hpcCwgd2l0aG91dCB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgICAvLyBhcHByb3ZpbmcgdGhlIHRydXN0IHBvbGljeS5cbiAgICAgIGNvbnN0IGltcGxpY2l0UG9saWN5ID0gYGFybjoke3BhcnRpdGlvbn06aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3NgO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKFxuICAgICAgICBgVXNpbmcgZGVmYXVsdCBleGVjdXRpb24gcG9saWN5IG9mICcke2ltcGxpY2l0UG9saWN5fScuIFBhc3MgJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzJyB0byBjdXN0b21pemUuYCxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgYFBsZWFzZSBwYXNzIFxcJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzXFwnIHdoZW4gdXNpbmcgXFwnLS10cnVzdFxcJyB0byBzcGVjaWZ5IGRlcGxveW1lbnQgcGVybWlzc2lvbnMuIFRyeSBhIG1hbmFnZWQgcG9saWN5IG9mIHRoZSBmb3JtIFxcJ2Fybjoke3BhcnRpdGlvbn06aWFtOjphd3M6cG9saWN5LzxQb2xpY3lOYW1lPlxcJy5gLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtaW5kIHBlb3BsZSB3aGF0IHRoZSBjdXJyZW50IHNldHRpbmdzIGFyZVxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKGBFeGVjdXRpb24gcG9saWNpZXM6ICR7Y2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vICogSWYgYW4gQVJOIGlzIGdpdmVuLCB0aGF0IEFSTi4gT3RoZXJ3aXNlOlxuICAgIC8vICAgKiAnLScgaWYgY3VzdG9tZXJLZXkgPSBmYWxzZVxuICAgIC8vICAgKiAnJyBpZiBjdXN0b21lcktleSA9IHRydWVcbiAgICAvLyAgICogaWYgY3VzdG9tZXJLZXkgaXMgYWxzbyBub3QgZ2l2ZW5cbiAgICAvLyAgICAgKiB1bmRlZmluZWQgaWYgd2UgYWxyZWFkeSBoYWQgYSB2YWx1ZSBpbiBwbGFjZSAocmV1c2luZyB3aGF0IHdlIGhhZClcbiAgICAvLyAgICAgKiAnLScgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSdyZSBkZXBsb3lpbmcgdGhpcyBzdGFjayAob3IgdXBncmFkaW5nIGZyb20gb2xkIHRvIG5ldyBib290c3RyYXApXG4gICAgY29uc3QgY3VycmVudEttc0tleUlkID0gY3VycmVudC5wYXJhbWV0ZXJzLkZpbGVBc3NldHNCdWNrZXRLbXNLZXlJZDtcbiAgICBjb25zdCBrbXNLZXlJZCA9XG4gICAgICBwYXJhbXMua21zS2V5SWQgPz9cbiAgICAgIChwYXJhbXMuY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXkgPT09IHRydWVcbiAgICAgICAgPyBDUkVBVEVfTkVXX0tFWVxuICAgICAgICA6IHBhcmFtcy5jcmVhdGVDdXN0b21lck1hc3RlcktleSA9PT0gZmFsc2UgfHwgY3VycmVudEttc0tleUlkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IFVTRV9BV1NfTUFOQUdFRF9LRVlcbiAgICAgICAgICA6IHVuZGVmaW5lZCk7XG5cbiAgICAvKiBBIHBlcm1pc3Npb25zIGJvdW5kYXJ5IGNhbiBiZSBwcm92aWRlZCB2aWE6XG4gICAgICogICAgLSB0aGUgZmxhZyBpbmRpY2F0aW5nIHRoZSBleGFtcGxlIG9uZSBzaG91bGQgYmUgdXNlZFxuICAgICAqICAgIC0gdGhlIG5hbWUgaW5kaWNhdGluZyB0aGUgY3VzdG9tIHBlcm1pc3Npb25zIGJvdW5kYXJ5IHRvIGJlIHVzZWRcbiAgICAgKiBSZS1ib290c3RyYXBwaW5nIHdpbGwgTk9UIGJlIGJsb2NrZWQgYnkgZWl0aGVyIHRpZ2h0ZW5pbmcgb3IgcmVsYXhpbmcgdGhlIHBlcm1pc3Npb25zJyBib3VuZGFyeS5cbiAgICAgKi9cblxuICAgIC8vIElucHV0UGVybWlzc2lvbnNCb3VuZGFyeSBpcyBhbiBgYW55YCB0eXBlIGFuZCBpZiBpdCBpcyBub3QgZGVmaW5lZCBpdFxuICAgIC8vIGFwcGVhcnMgYXMgYW4gZW1wdHkgc3RyaW5nICcnLiBXZSBuZWVkIHRvIGZvcmNlIGl0IHRvIGV2YWx1YXRlIGFuIGVtcHR5IHN0cmluZ1xuICAgIC8vIGFzIHVuZGVmaW5lZFxuICAgIGNvbnN0IGN1cnJlbnRQZXJtaXNzaW9uc0JvdW5kYXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBjdXJyZW50LnBhcmFtZXRlcnMuSW5wdXRQZXJtaXNzaW9uc0JvdW5kYXJ5IHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpbnB1dFBvbGljeU5hbWUgPSBwYXJhbXMuZXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnlcbiAgICAgID8gQ0RLX0JPT1RTVFJBUF9QRVJNSVNTSU9OU19CT1VOREFSWVxuICAgICAgOiBwYXJhbXMuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeTtcbiAgICBsZXQgcG9saWN5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChpbnB1dFBvbGljeU5hbWUpIHtcbiAgICAgIC8vIElmIHRoZSBleGFtcGxlIHBvbGljeSBpcyBub3QgYWxyZWFkeSBpbiBwbGFjZSwgaXQgbXVzdCBiZSBjcmVhdGVkLlxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KGVudmlyb25tZW50LCBNb2RlLkZvcldyaXRpbmcpKS5zZGs7XG4gICAgICBwb2xpY3lOYW1lID0gYXdhaXQgdGhpcy5nZXRQb2xpY3lOYW1lKGVudmlyb25tZW50LCBzZGssIGlucHV0UG9saWN5TmFtZSwgcGFydGl0aW9uLCBwYXJhbXMpO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFBlcm1pc3Npb25zQm91bmRhcnkgIT09IHBvbGljeU5hbWUpIHtcbiAgICAgIGlmICghY3VycmVudFBlcm1pc3Npb25zQm91bmRhcnkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKFxuICAgICAgICAgIGBBZGRpbmcgbmV3IHBlcm1pc3Npb25zIGJvdW5kYXJ5ICR7cG9saWN5TmFtZX1gLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghcG9saWN5TmFtZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgYFJlbW92aW5nIGV4aXN0aW5nIHBlcm1pc3Npb25zIGJvdW5kYXJ5ICR7Y3VycmVudFBlcm1pc3Npb25zQm91bmRhcnl9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgICBgQ2hhbmdpbmcgcGVybWlzc2lvbnMgYm91bmRhcnkgZnJvbSAke2N1cnJlbnRQZXJtaXNzaW9uc0JvdW5kYXJ5fSB0byAke3BvbGljeU5hbWV9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBib290c3RyYXBUZW1wbGF0ZVBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7XG4gICAgICBGaWxlQXNzZXRzQnVja2V0TmFtZTogcGFyYW1zLmJ1Y2tldE5hbWUsXG4gICAgICBGaWxlQXNzZXRzQnVja2V0S21zS2V5SWQ6IGttc0tleUlkLFxuICAgICAgLy8gRW1wdHkgYXJyYXkgYmVjb21lcyBlbXB0eSBzdHJpbmdcbiAgICAgIFRydXN0ZWRBY2NvdW50czogdHJ1c3RlZEFjY291bnRzLmpvaW4oJywnKSxcbiAgICAgIFRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cDogdHJ1c3RlZEFjY291bnRzRm9yTG9va3VwLmpvaW4oJywnKSxcbiAgICAgIENsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXM6IGNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMuam9pbignLCcpLFxuICAgICAgUXVhbGlmaWVyOiBwYXJhbXMucXVhbGlmaWVyLFxuICAgICAgUHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uOlxuICAgICAgICBwYXJhbXMucHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uIHx8IHBhcmFtcy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgOiAnZmFsc2UnLFxuICAgICAgSW5wdXRQZXJtaXNzaW9uc0JvdW5kYXJ5OiBwb2xpY3lOYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB0ZW1wbGF0ZVBhcmFtZXRlcnMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlUGFyYW1ldGVycygpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWxseSBzZXQgdGhlc2UgcGFyYW1ldGVyczogb25seSBzZXQgdGhlc2UgcGFyYW1ldGVycyBpZiB0aGV5IGFyZSBhY2NlcHRlZCBieSB0aGUgdGVtcGxhdGUuXG4gICAgLy8gSWYgd2UgcGFzcyB0aGVtIHVuY29uZGl0aW9uYWxseSwgb2xkZXIgY3VzdG9taXplZCB0ZW1wbGF0ZXMgdGhhdCBkb24ndCBrbm93IGFib3V0IHRoZXNlXG4gICAgLy8gcGFyYW1ldGVycyB5ZXQgd2lsbCBmYWlsIHRvIGRlcGxveS5cbiAgICBpZiAocGFyYW1zLmRlbnlFeHRlcm5hbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghdGVtcGxhdGVQYXJhbWV0ZXJzLmluY2x1ZGVzKCdEZW55RXh0ZXJuYWxJZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1RoZSBzZWxlY3RlZCBib290c3RyYXAgdGVtcGxhdGUgZG9lcyBub3QgYWNjZXB0IHRoZSBEZW55RXh0ZXJuYWxJZCBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICAgIGJvb3RzdHJhcFRlbXBsYXRlUGFyYW1ldGVycy5EZW55RXh0ZXJuYWxJZCA9IGAke3BhcmFtcy5kZW55RXh0ZXJuYWxJZH1gO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50LnVwZGF0ZShib290c3RyYXBUZW1wbGF0ZSwgYm9vdHN0cmFwVGVtcGxhdGVQYXJhbWV0ZXJzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBvcHRpb25zLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/PyBjdXJyZW50LnRlcm1pbmF0aW9uUHJvdGVjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UG9saWN5TmFtZShcbiAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gICAgc2RrOiBTREssXG4gICAgcGVybWlzc2lvbnNCb3VuZGFyeTogc3RyaW5nLFxuICAgIHBhcnRpdGlvbjogc3RyaW5nLFxuICAgIHBhcmFtczogQm9vdHN0cmFwcGluZ1BhcmFtZXRlcnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHBlcm1pc3Npb25zQm91bmRhcnkgIT09IENES19CT09UU1RSQVBfUEVSTUlTU0lPTlNfQk9VTkRBUlkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVQb2xpY3lOYW1lKHBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG4gICAgLy8gaWYgbm8gUXVhbGlmaWVyIGlzIHN1cHBsaWVkLCByZXNvcnQgdG8gdGhlIGRlZmF1bHQgb25lXG4gICAgY29uc3QgYXJuID0gYXdhaXQgdGhpcy5nZXRFeGFtcGxlUGVybWlzc2lvbnNCb3VuZGFyeShcbiAgICAgIHBhcmFtcy5xdWFsaWZpZXIgPz8gJ2huYjY1OWZkcycsXG4gICAgICBwYXJ0aXRpb24sXG4gICAgICBlbnZpcm9ubWVudC5hY2NvdW50LFxuICAgICAgc2RrLFxuICAgICk7XG4gICAgY29uc3QgcG9saWN5TmFtZSA9IGFybi5zcGxpdCgnLycpLnBvcCgpO1xuICAgIGlmICghcG9saWN5TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQ291bGQgbm90IHJldHJpZXZlIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gYm91bmRhcnkhJyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9saWN5TmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEV4YW1wbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KFxuICAgIHF1YWxpZmllcjogc3RyaW5nLFxuICAgIHBhcnRpdGlvbjogc3RyaW5nLFxuICAgIGFjY291bnQ6IHN0cmluZyxcbiAgICBzZGs6IFNESyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpYW0gPSBzZGsuaWFtKCk7XG5cbiAgICBsZXQgcG9saWN5TmFtZSA9IGBjZGstJHtxdWFsaWZpZXJ9LXBlcm1pc3Npb25zLWJvdW5kYXJ5YDtcbiAgICBjb25zdCBhcm4gPSBgYXJuOiR7cGFydGl0aW9ufTppYW06OiR7YWNjb3VudH06cG9saWN5LyR7cG9saWN5TmFtZX1gO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBnZXRQb2xpY3lSZXNwID0gYXdhaXQgaWFtLmdldFBvbGljeSh7IFBvbGljeUFybjogYXJuIH0pO1xuICAgICAgaWYgKGdldFBvbGljeVJlc3AuUG9saWN5KSB7XG4gICAgICAgIHJldHVybiBhcm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldFBvbGljeS5odG1sI0FQSV9HZXRQb2xpY3lfRXJyb3JzXG4gICAgICBpZiAoZS5uYW1lID09PSAnTm9TdWNoRW50aXR5Jykge1xuICAgICAgICAvLyBub29wLCBwcm9jZWVkIHdpdGggY3JlYXRpbmcgdGhlIHBvbGljeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwb2xpY3lEb2MgPSB7XG4gICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIEFjdGlvbjogWycqJ10sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgU2lkOiAnRXhwbGljaXRBbGxvd0FsbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBDb25kaXRpb246IHtcbiAgICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgICAnaWFtOlBlcm1pc3Npb25zQm91bmRhcnknOiBgYXJuOiR7cGFydGl0aW9ufTppYW06OiR7YWNjb3VudH06cG9saWN5L2Nkay0ke3F1YWxpZmllcn0tcGVybWlzc2lvbnMtYm91bmRhcnlgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgJ2lhbTpDcmVhdGVVc2VyJyxcbiAgICAgICAgICAgICdpYW06Q3JlYXRlUm9sZScsXG4gICAgICAgICAgICAnaWFtOlB1dFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5JyxcbiAgICAgICAgICAgICdpYW06UHV0VXNlclBlcm1pc3Npb25zQm91bmRhcnknLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgU2lkOiAnRGVueUFjY2Vzc0lmUmVxdWlyZWRQZXJtQm91bmRhcnlJc05vdEJlaW5nQXBwbGllZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICdpYW06Q3JlYXRlUG9saWN5VmVyc2lvbicsXG4gICAgICAgICAgICAnaWFtOkRlbGV0ZVBvbGljeScsXG4gICAgICAgICAgICAnaWFtOkRlbGV0ZVBvbGljeVZlcnNpb24nLFxuICAgICAgICAgICAgJ2lhbTpTZXREZWZhdWx0UG9saWN5VmVyc2lvbicsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBSZXNvdXJjZTogYGFybjoke3BhcnRpdGlvbn06aWFtOjoke2FjY291bnR9OnBvbGljeS9jZGstJHtxdWFsaWZpZXJ9LXBlcm1pc3Npb25zLWJvdW5kYXJ5YCxcbiAgICAgICAgICBFZmZlY3Q6ICdEZW55JyxcbiAgICAgICAgICBTaWQ6ICdEZW55UGVybUJvdW5kYXJ5SUFNUG9saWN5QWx0ZXJhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFsnaWFtOkRlbGV0ZVVzZXJQZXJtaXNzaW9uc0JvdW5kYXJ5JywgJ2lhbTpEZWxldGVSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSddLFxuICAgICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgICAgRWZmZWN0OiAnRGVueScsXG4gICAgICAgICAgU2lkOiAnRGVueVJlbW92YWxPZlBlcm1Cb3VuZGFyeUZyb21BbnlVc2VyT3JSb2xlJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgUG9saWN5TmFtZTogcG9saWN5TmFtZSxcbiAgICAgIFBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeShwb2xpY3lEb2MpLFxuICAgIH07XG4gICAgY29uc3QgY3JlYXRlUG9saWN5UmVzcG9uc2UgPSBhd2FpdCBpYW0uY3JlYXRlUG9saWN5KHJlcXVlc3QpO1xuICAgIGlmIChjcmVhdGVQb2xpY3lSZXNwb25zZS5Qb2xpY3k/LkFybikge1xuICAgICAgcmV0dXJuIGNyZWF0ZVBvbGljeVJlc3BvbnNlLlBvbGljeS5Bcm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYENvdWxkIG5vdCByZXRyaWV2ZSB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGJvdW5kYXJ5ICR7YXJufSFgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUG9saWN5TmFtZShwZXJtaXNzaW9uc0JvdW5kYXJ5OiBzdHJpbmcpIHtcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVBvbGljeS5odG1sXG4gICAgLy8gQWRkZWQgc3VwcG9ydCBmb3IgcG9saWN5IG5hbWVzIHdpdGggYSBwYXRoXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMjYzMjBcbiAgICBjb25zdCByZWdleHA6IFJlZ0V4cCA9IC9bXFx3K1xcLz0sLkAtXSsvO1xuICAgIGNvbnN0IG1hdGNoZXMgPSByZWdleHAuZXhlYyhwZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICBpZiAoIShtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAxICYmIG1hdGNoZXNbMF0gPT09IHBlcm1pc3Npb25zQm91bmRhcnkpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBUaGUgcGVybWlzc2lvbnMgYm91bmRhcnkgbmFtZSAke3Blcm1pc3Npb25zQm91bmRhcnl9IGRvZXMgbm90IG1hdGNoIHRoZSBJQU0gY29udmVudGlvbnMuYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjdXN0b21Cb290c3RyYXAoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICAvLyBMb29rIGF0IHRoZSB0ZW1wbGF0ZSwgZGVjaWRlIHdoZXRoZXIgaXQncyBtb3N0IGxpa2VseSBhIGxlZ2FjeSBvciBtb2Rlcm4gYm9vdHN0cmFwXG4gICAgLy8gdGVtcGxhdGUsIGFuZCB1c2UgdGhlIHJpZ2h0IGJvb3RzdHJhcHBlciBmb3IgdGhhdC5cbiAgICBjb25zdCB2ZXJzaW9uID0gYm9vdHN0cmFwVmVyc2lvbkZyb21UZW1wbGF0ZShhd2FpdCB0aGlzLmxvYWRUZW1wbGF0ZSgpKTtcbiAgICBpZiAodmVyc2lvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVnYWN5Qm9vdHN0cmFwKGVudmlyb25tZW50LCBzZGtQcm92aWRlciwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVybkJvb3RzdHJhcChlbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNldCBvZiBwYXJhbWV0ZXIgbmFtZXMgYWNjZXB0ZWQgYnkgdGhlIGN1cnJlbnQgYm9vdHN0cmFwcGluZyB0ZW1wbGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB0ZW1wbGF0ZVBhcmFtZXRlcnMobGVnYWN5UGFyYW1zOiBCb290c3RyYXBwaW5nUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy5sb2FkVGVtcGxhdGUobGVnYWN5UGFyYW1zKTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0ZW1wbGF0ZS5QYXJhbWV0ZXJzID8/IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFRlbXBsYXRlKGxlZ2FjeVBhcmFtczogQm9vdHN0cmFwcGluZ1BhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoICh0aGlzLnNvdXJjZS5zb3VyY2UpIHtcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIHJldHVybiBsb2FkU3RydWN0dXJlZEZpbGUodGhpcy5zb3VyY2UudGVtcGxhdGVGaWxlKTtcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICByZXR1cm4gbG9hZFN0cnVjdHVyZWRGaWxlKHBhdGguam9pbihidW5kbGVkUGFja2FnZVJvb3REaXIoX19kaXJuYW1lKSwgJ2xpYicsICdhcGknLCAnYm9vdHN0cmFwJywgJ2Jvb3RzdHJhcC10ZW1wbGF0ZS55YW1sJykpO1xuICAgICAgY2FzZSAnbGVnYWN5JzpcbiAgICAgICAgcmV0dXJuIGxlZ2FjeUJvb3RzdHJhcFRlbXBsYXRlKGxlZ2FjeVBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWFnaWMgcGFyYW1ldGVyIHZhbHVlIHRoYXQgd2lsbCBjYXVzZSB0aGUgYm9vdHN0cmFwLXRlbXBsYXRlLnltbCB0byBOT1QgY3JlYXRlIGEgQ01LIGJ1dCB1c2UgdGhlIGRlZmF1bHQga2V5XG4gKi9cbmNvbnN0IFVTRV9BV1NfTUFOQUdFRF9LRVkgPSAnQVdTX01BTkFHRURfS0VZJztcblxuLyoqXG4gKiBNYWdpYyBwYXJhbWV0ZXIgdmFsdWUgdGhhdCB3aWxsIGNhdXNlIHRoZSBib290c3RyYXAtdGVtcGxhdGUueW1sIHRvIGNyZWF0ZSBhIENNS1xuICovXG5jb25zdCBDUkVBVEVfTkVXX0tFWSA9ICcnO1xuLyoqXG4gKiBQYXJhbWV0ZXIgdmFsdWUgaW5kaWNhdGluZyB0aGUgdXNlIG9mIHRoZSBkZWZhdWx0LCBDREsgcHJvdmlkZWQgcGVybWlzc2lvbnMgYm91bmRhcnkgZm9yIGJvb3RzdHJhcC10ZW1wbGF0ZS55bWxcbiAqL1xuY29uc3QgQ0RLX0JPT1RTVFJBUF9QRVJNSVNTSU9OU19CT1VOREFSWSA9ICdDREtfQk9PVFNUUkFQX1BFUk1JU1NJT05TX0JPVU5EQVJZJztcblxuLyoqXG4gKiBTcGxpdCBhbiBhcnJheS1saWtlIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlciBvbiAsXG4gKlxuICogQW4gZW1wdHkgc3RyaW5nIGlzIHRoZSBlbXB0eSBhcnJheSAoaW5zdGVhZCBvZiBgWycnXWApLlxuICovXG5mdW5jdGlvbiBzcGxpdENmbkFycmF5KHhzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIGlmICh4cyA9PT0gJycgfHwgeHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4geHMuc3BsaXQoJywnKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0aW9uPEE+KHhzOiBTZXQ8QT4sIHlzOiBTZXQ8QT4pOiBTZXQ8QT4ge1xuICByZXR1cm4gbmV3IFNldDxBPihBcnJheS5mcm9tKHhzKS5maWx0ZXIoeCA9PiB5cy5oYXMoeCkpKTtcbn1cbiJdfQ==
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUc3Qix5REFBa0Y7QUFDbEYsdURBQTREO0FBQzVELCtEQUEyRDtBQUMzRCxxQ0FBMkY7QUFJM0Ysc0NBQWlDO0FBQ2pDLGtEQUE2RDtBQUk3RCxNQUFhLFlBQVk7SUFJSjtJQUhGLFFBQVEsQ0FBVztJQUVwQyxZQUNtQixTQUEwQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFDaEUsUUFBa0I7UUFERCxXQUFNLEdBQU4sTUFBTSxDQUF5QztRQUdoRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU0sb0JBQW9CLENBQ3pCLFdBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQUU7UUFFekMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRSxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakUsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFhO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsZUFBZSxDQUMzQixXQUE4QixFQUM5QixXQUF3QixFQUN4QixVQUF1QyxFQUFFO1FBRXpDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBRXhDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksNEJBQVksQ0FBQyw4QkFBOEIsRUFBRSxpRUFBaUUsQ0FBQyxDQUFDO1FBQzVILENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNuRCxNQUFNLElBQUksNEJBQVksQ0FBQywwQ0FBMEMsRUFBRSw2RkFBNkYsQ0FBQyxDQUFDO1FBQ3BLLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksNEJBQVksQ0FBQyxvQ0FBb0MsRUFBRSxrRkFBa0YsQ0FBQyxDQUFDO1FBQ25KLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksNEJBQVksQ0FBQyxrQ0FBa0MsRUFBRSxxRUFBcUUsQ0FBQyxDQUFDO1FBQ3BJLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSx5Q0FBMEIsQ0FBQztRQUNoRixNQUFNLE9BQU8sR0FBRyxNQUFNLGlDQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDbkIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUMvQixFQUFFLEVBQ0Y7WUFDRSxHQUFHLE9BQU87WUFDVixxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCLElBQUksT0FBTyxDQUFDLHFCQUFxQjtTQUN0RixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGVBQWUsQ0FDM0IsV0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIsVUFBdUMsRUFBRTtRQUV6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUV4QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLHlDQUEwQixDQUFDO1FBQ2hGLE1BQU0sT0FBTyxHQUFHLE1BQU0saUNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkcsTUFBTSxTQUFTLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFNUMsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRSxNQUFNLElBQUksNEJBQVksQ0FDcEIsMEJBQTBCLEVBQzFCLDRHQUE0RyxDQUM3RyxDQUFDO1FBQ0osQ0FBQztRQUVELDBIQUEwSDtRQUMxSCxnSEFBZ0g7UUFDaEgscUhBQXFIO1FBQ3JILHFEQUFxRDtRQUNyRCxFQUFFO1FBQ0YsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDekIsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLEVBQUU7WUFDL0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLElBQUksRUFBRTtTQUN6QyxDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSw0QkFBWSxDQUFDLGdDQUFnQyxFQUFFLHlEQUF5RCxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5SSxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FDN0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RixNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3JILE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUMvQixvQ0FBb0MsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUN6RyxDQUFDO1FBRUYsTUFBTSx3QkFBd0IsR0FBRyxlQUFlLENBQzlDLE1BQU0sQ0FBQyx3QkFBd0IsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUM5RixDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQy9CLGdDQUFnQyx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUN2SCxDQUFDO1FBRUYsTUFBTSwrQkFBK0IsR0FDbkMsTUFBTSxDQUFDLCtCQUErQixJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDOUcsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSwrQkFBK0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakYsb0hBQW9IO1lBQ3BILEVBQUU7WUFDRix5R0FBeUc7WUFDekcsc0RBQXNEO1lBQ3RELEVBQUU7WUFDRixzR0FBc0c7WUFDdEcsZ0VBQWdFO1lBQ2hFLEVBQUU7WUFDRixrQkFBa0I7WUFDbEIsK0JBQStCO1lBQy9CLEVBQUU7WUFDRixrR0FBa0c7WUFDbEcsOEJBQThCO1lBQzlCLE1BQU0sY0FBYyxHQUFHLE9BQU8sU0FBUyxzQ0FBc0MsQ0FBQztZQUM5RSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDL0Isc0NBQXNDLGNBQWMsNkRBQTZELENBQ2xILENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSwrQkFBK0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLDRCQUFZLENBQ3BCLGtDQUFrQyxFQUNsQyx3SkFBd0osU0FBUyxrQ0FBa0MsQ0FDcE0sQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sOENBQThDO1lBQzlDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHVCQUF1QiwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFFRCw2Q0FBNkM7UUFDN0MsaUNBQWlDO1FBQ2pDLCtCQUErQjtRQUMvQix1Q0FBdUM7UUFDdkMsMkVBQTJFO1FBQzNFLDBHQUEwRztRQUMxRyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUNaLE1BQU0sQ0FBQyxRQUFRO1lBQ2YsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEtBQUssSUFBSTtnQkFDdEMsQ0FBQyxDQUFDLGNBQWM7Z0JBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEtBQUssS0FBSyxJQUFJLGVBQWUsS0FBSyxTQUFTO29CQUN6RSxDQUFDLENBQUMsbUJBQW1CO29CQUNyQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkI7Ozs7V0FJRztRQUVILHdFQUF3RTtRQUN4RSxpRkFBaUY7UUFDakYsZUFBZTtRQUNmLE1BQU0sMEJBQTBCLEdBQXVCLE9BQU8sQ0FBQyxVQUFVLENBQUMsd0JBQXdCLElBQUksU0FBUyxDQUFDO1FBQ2hILE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQywwQkFBMEI7WUFDdkQsQ0FBQyxDQUFDLGtDQUFrQztZQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDO1FBQ3JDLElBQUksVUFBOEIsQ0FBQztRQUNuQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLHFFQUFxRTtZQUNyRSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsYUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ2pGLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFDRCxJQUFJLDBCQUEwQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDL0IsbUNBQW1DLFVBQVUsRUFBRSxDQUNoRCxDQUFDO1lBQ0osQ0FBQztpQkFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUMvQiwwQ0FBMEMsMEJBQTBCLEVBQUUsQ0FDdkUsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDL0Isc0NBQXNDLDBCQUEwQixPQUFPLFVBQVUsRUFBRSxDQUNwRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLDJCQUEyQixHQUF1QztZQUN0RSxvQkFBb0IsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUN2Qyx3QkFBd0IsRUFBRSxRQUFRO1lBQ2xDLG1DQUFtQztZQUNuQyxlQUFlLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDMUMsd0JBQXdCLEVBQUUsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUM1RCwrQkFBK0IsRUFBRSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQzFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQiw4QkFBOEIsRUFDNUIsTUFBTSxDQUFDLDhCQUE4QixJQUFJLE1BQU0sQ0FBQyw4QkFBOEIsS0FBSyxTQUFTO2dCQUMxRixDQUFDLENBQUMsTUFBTTtnQkFDUixDQUFDLENBQUMsT0FBTztZQUNiLHdCQUF3QixFQUFFLFVBQVU7U0FDckMsQ0FBQztRQUVGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUzRCxzR0FBc0c7UUFDdEcsMEZBQTBGO1FBQzFGLHNDQUFzQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSw0QkFBWSxDQUFDLDRCQUE0QixFQUFFLDhFQUE4RSxDQUFDLENBQUM7WUFDdkksQ0FBQztZQUNELDJCQUEyQixDQUFDLGNBQWMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDJCQUEyQixFQUFFO1lBQ3BFLEdBQUcsT0FBTztZQUNWLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxPQUFPLENBQUMscUJBQXFCO1NBQ3RGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUN6QixXQUE4QixFQUM5QixHQUFRLEVBQ1IsbUJBQTJCLEVBQzNCLFNBQWlCLEVBQ2pCLE1BQStCO1FBRS9CLElBQUksbUJBQW1CLEtBQUssa0NBQWtDLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QseURBQXlEO1FBQ3pELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixDQUNsRCxNQUFNLENBQUMsU0FBUyxJQUFJLFdBQVcsRUFDL0IsU0FBUyxFQUNULFdBQVcsQ0FBQyxPQUFPLEVBQ25CLEdBQUcsQ0FDSixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLDRCQUFZLENBQUMsbUNBQW1DLEVBQUUscURBQXFELENBQUMsQ0FBQztRQUNySCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxLQUFLLENBQUMsNkJBQTZCLENBQ3pDLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixHQUFRO1FBRVIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXRCLElBQUksVUFBVSxHQUFHLE9BQU8sU0FBUyx1QkFBdUIsQ0FBQztRQUN6RCxNQUFNLEdBQUcsR0FBRyxPQUFPLFNBQVMsU0FBUyxPQUFPLFdBQVcsVUFBVSxFQUFFLENBQUM7UUFFcEUsSUFBSSxDQUFDO1lBQ0gsSUFBSSxhQUFhLEdBQUcsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUQsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLDhGQUE4RjtZQUM5RixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQzlCLHlDQUF5QztZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHO1lBQ2hCLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQ2IsUUFBUSxFQUFFLEdBQUc7b0JBQ2IsTUFBTSxFQUFFLE9BQU87b0JBQ2YsR0FBRyxFQUFFLGtCQUFrQjtpQkFDeEI7Z0JBQ0Q7b0JBQ0UsU0FBUyxFQUFFO3dCQUNULFlBQVksRUFBRTs0QkFDWix5QkFBeUIsRUFBRSxPQUFPLFNBQVMsU0FBUyxPQUFPLGVBQWUsU0FBUyx1QkFBdUI7eUJBQzNHO3FCQUNGO29CQUNELE1BQU0sRUFBRTt3QkFDTixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZ0NBQWdDO3dCQUNoQyxnQ0FBZ0M7cUJBQ2pDO29CQUNELFFBQVEsRUFBRSxHQUFHO29CQUNiLE1BQU0sRUFBRSxPQUFPO29CQUNmLEdBQUcsRUFBRSxtREFBbUQ7aUJBQ3pEO2dCQUNEO29CQUNFLE1BQU0sRUFBRTt3QkFDTix5QkFBeUI7d0JBQ3pCLGtCQUFrQjt3QkFDbEIseUJBQXlCO3dCQUN6Qiw2QkFBNkI7cUJBQzlCO29CQUNELFFBQVEsRUFBRSxPQUFPLFNBQVMsU0FBUyxPQUFPLGVBQWUsU0FBUyx1QkFBdUI7b0JBQ3pGLE1BQU0sRUFBRSxNQUFNO29CQUNkLEdBQUcsRUFBRSxxQ0FBcUM7aUJBQzNDO2dCQUNEO29CQUNFLE1BQU0sRUFBRSxDQUFDLG1DQUFtQyxFQUFFLG1DQUFtQyxDQUFDO29CQUNsRixRQUFRLEVBQUUsR0FBRztvQkFDYixNQUFNLEVBQUUsTUFBTTtvQkFDZCxHQUFHLEVBQUUsNENBQTRDO2lCQUNsRDthQUNGO1NBQ0YsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHO1lBQ2QsVUFBVSxFQUFFLFVBQVU7WUFDdEIsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQzFDLENBQUM7UUFDRixNQUFNLG9CQUFvQixHQUFHLE1BQU0sR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQyxPQUFPLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksNEJBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxzREFBc0QsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN6SCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLG1CQUEyQjtRQUNwRCw0RUFBNEU7UUFDNUUsNkNBQTZDO1FBQzdDLGtEQUFrRDtRQUNsRCxNQUFNLE1BQU0sR0FBVyxlQUFlLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQzdFLE1BQU0sSUFBSSw0QkFBWSxDQUFDLCtCQUErQixFQUFFLGlDQUFpQyxtQkFBbUIsc0NBQXNDLENBQUMsQ0FBQztRQUN0SixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlLENBQzNCLFdBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQUU7UUFFekMscUZBQXFGO1FBQ3JGLHFEQUFxRDtRQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFBLCtDQUE0QixFQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGtCQUFrQixDQUFDLGVBQXdDLEVBQUU7UUFDekUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLGVBQXdDLEVBQUU7UUFDbkUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUEseUJBQWtCLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0RCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFBLHlCQUFrQixFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSw0QkFBcUIsRUFBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7WUFDL0gsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBQSx5Q0FBdUIsRUFBQyxZQUFZLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbFlELG9DQWtZQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQjs7R0FFRztBQUNILE1BQU0sa0NBQWtDLEdBQUcsb0NBQW9DLENBQUM7QUFFaEY7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEVBQXNCO0lBQzNDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbEMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBSSxFQUFVLEVBQUUsRUFBVTtJQUM3QyxPQUFPLElBQUksR0FBRyxDQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgdHlwZSB7IEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucywgQm9vdHN0cmFwcGluZ1BhcmFtZXRlcnMgfSBmcm9tICcuL2Jvb3RzdHJhcC1wcm9wcyc7XG5pbXBvcnQgeyBCb290c3RyYXBTdGFjaywgYm9vdHN0cmFwVmVyc2lvbkZyb21UZW1wbGF0ZSB9IGZyb20gJy4vZGVwbG95LWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBsZWdhY3lCb290c3RyYXBUZW1wbGF0ZSB9IGZyb20gJy4vbGVnYWN5LXRlbXBsYXRlJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBidW5kbGVkUGFja2FnZVJvb3REaXIsIGxvYWRTdHJ1Y3R1cmVkRmlsZSwgc2VyaWFsaXplU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNESywgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgU3VjY2Vzc2Z1bERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vZGVwbG95bWVudHMnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL3BsdWdpbic7XG5pbXBvcnQgeyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRSB9IGZyb20gJy4uL3Rvb2xraXQtaW5mbyc7XG5cbmV4cG9ydCB0eXBlIEJvb3RzdHJhcFNvdXJjZSA9IHsgc291cmNlOiAnbGVnYWN5JyB9IHwgeyBzb3VyY2U6ICdkZWZhdWx0JyB9IHwgeyBzb3VyY2U6ICdjdXN0b20nOyB0ZW1wbGF0ZUZpbGU6IHN0cmluZyB9O1xuXG5leHBvcnQgY2xhc3MgQm9vdHN0cmFwcGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2U6IEJvb3RzdHJhcFNvdXJjZSA9IHsgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICkge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgfVxuXG4gIHB1YmxpYyBib290c3RyYXBFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gICAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICAgIG9wdGlvbnM6IEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIHN3aXRjaCAodGhpcy5zb3VyY2Uuc291cmNlKSB7XG4gICAgICBjYXNlICdsZWdhY3knOlxuICAgICAgICByZXR1cm4gdGhpcy5sZWdhY3lCb290c3RyYXAoZW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICByZXR1cm4gdGhpcy5tb2Rlcm5Cb290c3RyYXAoZW52aXJvbm1lbnQsIHNka1Byb3ZpZGVyLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUJvb3RzdHJhcChlbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaG93VGVtcGxhdGUoanNvbjogYm9vbGVhbikge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy5sb2FkVGVtcGxhdGUoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtzZXJpYWxpemVTdHJ1Y3R1cmUodGVtcGxhdGUsIGpzb24pfVxcbmApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveSBsZWdhY3kgYm9vdHN0cmFwIHN0YWNrXG4gICAqXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxlZ2FjeUJvb3RzdHJhcChcbiAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gICAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICAgIG9wdGlvbnM6IEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG9wdGlvbnMucGFyYW1ldGVycyA/PyB7fTtcblxuICAgIGlmIChwYXJhbXMudHJ1c3RlZEFjY291bnRzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1RydXN0UmVxdWlyZXNNb2Rlcm5Cb290c3RyYXAnLCAnLS10cnVzdCBjYW4gb25seSBiZSBwYXNzZWQgZm9yIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIGV4cGVyaWVuY2UuJyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdFeGVjdXRpb25Qb2xpY2llc1JlcXVpcmVzTW9kZXJuQm9vdHN0cmFwJywgJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzIGNhbiBvbmx5IGJlIHBhc3NlZCBmb3IgdGhlIG1vZGVybiBib290c3RyYXAgZXhwZXJpZW5jZS4nKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jcmVhdGVDdXN0b21lck1hc3RlcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDdXN0b21lcktleVJlcXVpcmVzTW9kZXJuQm9vdHN0cmFwJywgJy0tYm9vdHN0cmFwLWN1c3RvbWVyLWtleSBjYW4gb25seSBiZSBwYXNzZWQgZm9yIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIGV4cGVyaWVuY2UuJyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMucXVhbGlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdRdWFsaWZpZXJSZXF1aXJlc01vZGVybkJvb3RzdHJhcCcsICctLXF1YWxpZmllciBjYW4gb25seSBiZSBwYXNzZWQgZm9yIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIGV4cGVyaWVuY2UuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbGtpdFN0YWNrTmFtZSA9IG9wdGlvbnMudG9vbGtpdFN0YWNrTmFtZSA/PyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgQm9vdHN0cmFwU3RhY2subG9va3VwKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCwgdG9vbGtpdFN0YWNrTmFtZSwgdGhpcy5pb0hlbHBlcik7XG4gICAgcmV0dXJuIGN1cnJlbnQudXBkYXRlKFxuICAgICAgYXdhaXQgdGhpcy5sb2FkVGVtcGxhdGUocGFyYW1zKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB0ZXJtaW5hdGlvblByb3RlY3Rpb246IG9wdGlvbnMudGVybWluYXRpb25Qcm90ZWN0aW9uID8/IGN1cnJlbnQudGVybWluYXRpb25Qcm90ZWN0aW9uLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveSBDSS9DRC1yZWFkeSBib290c3RyYXAgc3RhY2sgZnJvbSB0ZW1wbGF0ZVxuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBtb2Rlcm5Cb290c3RyYXAoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zLnBhcmFtZXRlcnMgPz8ge307XG5cbiAgICBjb25zdCBib290c3RyYXBUZW1wbGF0ZSA9IGF3YWl0IHRoaXMubG9hZFRlbXBsYXRlKCk7XG5cbiAgICBjb25zdCB0b29sa2l0U3RhY2tOYW1lID0gb3B0aW9ucy50b29sa2l0U3RhY2tOYW1lID8/IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBCb290c3RyYXBTdGFjay5sb29rdXAoc2RrUHJvdmlkZXIsIGVudmlyb25tZW50LCB0b29sa2l0U3RhY2tOYW1lLCB0aGlzLmlvSGVscGVyKTtcbiAgICBjb25zdCBwYXJ0aXRpb24gPSBhd2FpdCBjdXJyZW50LnBhcnRpdGlvbigpO1xuXG4gICAgaWYgKHBhcmFtcy5jcmVhdGVDdXN0b21lck1hc3RlcktleSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcy5rbXNLZXlJZCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgJ0NvbmZsaWN0aW5nS21zS2V5T3B0aW9ucycsXG4gICAgICAgIFwiWW91IGNhbm5vdCBwYXNzICctLWJvb3RzdHJhcC1rbXMta2V5LWlkJyBhbmQgJy0tYm9vdHN0cmFwLWN1c3RvbWVyLWtleScgdG9nZXRoZXIuIFNwZWNpZnkgb25lIG9yIHRoZSBvdGhlclwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJZiBwZW9wbGUgcmUtYm9vdHN0cmFwLCBleGlzdGluZyBwYXJhbWV0ZXIgdmFsdWVzIGFyZSByZXVzZWQgc28gdGhhdCBwZW9wbGUgZG9uJ3QgYWNjaWRlbnRhbGx5IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvblxuICAgIC8vIG9uIHRoZWlyIGJvb3RzdHJhcCBzdGFjayAodGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaW4gZGVwbG95U3RhY2spLiBIb3dldmVyLCB0byBkbyBwcm9wZXIgdmFsaWRhdGlvbiBvbiB0aGVcbiAgICAvLyBjb21iaW5lZCBhcmd1bWVudHMgKHN1Y2ggdGhhdCBpZiAtLXRydXN0IGhhcyBiZWVuIGdpdmVuLCAtLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llcyBpcyBuZWNlc3NhcnkgYXMgd2VsbClcbiAgICAvLyB3ZSBuZWVkIHRvIHRha2UgdGhpcyBwYXJhbWV0ZXIgcmV1c2UgaW50byBhY2NvdW50LlxuICAgIC8vXG4gICAgLy8gSWRlYWxseSB3ZSdkIGRvIHRoaXMgaW5zaWRlIHRoZSB0ZW1wbGF0ZSwgYnV0IHRoZSBgUnVsZXNgIHNlY3Rpb24gb2YgQ0ZOXG4gICAgLy8gdGVtcGxhdGVzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIGV4cHJlc3MgdGhlIGNvbmRpdGlvbnMgdGhhdCB3ZSBuZWVkXG4gICAgLy8gKGNhbid0IHVzZSBGbjo6Sm9pbiBvciByZWZlcmVuY2UgQ29uZGl0aW9ucykgc28gd2UgZG8gaXQgaGVyZSBpbnN0ZWFkLlxuICAgIGNvbnN0IGFsbFRydXN0ZWQgPSBuZXcgU2V0KFtcbiAgICAgIC4uLnBhcmFtcy50cnVzdGVkQWNjb3VudHMgPz8gW10sXG4gICAgICAuLi5wYXJhbXMudHJ1c3RlZEFjY291bnRzRm9yTG9va3VwID8/IFtdLFxuICAgIF0pO1xuICAgIGNvbnN0IGludmFsaWQgPSBpbnRlcnNlY3Rpb24oYWxsVHJ1c3RlZCwgbmV3IFNldChwYXJhbXMudW50cnVzdGVkQWNjb3VudHMpKTtcbiAgICBpZiAoaW52YWxpZC5zaXplID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQWNjb3VudEJvdGhUcnVzdGVkQW5kVW50cnVzdGVkJywgYEFjY291bnRzIGNhbm5vdCBiZSBib3RoIHRydXN0ZWQgYW5kIHVudHJ1c3RlZC4gRm91bmQ6ICR7Wy4uLmludmFsaWRdLmpvaW4oJywnKX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVVbnRydXN0ZWQgPSAoYWNjb3VudHM6IHN0cmluZ1tdKSA9PlxuICAgICAgYWNjb3VudHMuZmlsdGVyKGFjYyA9PiAhcGFyYW1zLnVudHJ1c3RlZEFjY291bnRzPy5tYXAoU3RyaW5nKS5pbmNsdWRlcyhTdHJpbmcoYWNjKSkpO1xuXG4gICAgY29uc3QgdHJ1c3RlZEFjY291bnRzID0gcmVtb3ZlVW50cnVzdGVkKHBhcmFtcy50cnVzdGVkQWNjb3VudHMgPz8gc3BsaXRDZm5BcnJheShjdXJyZW50LnBhcmFtZXRlcnMuVHJ1c3RlZEFjY291bnRzKSk7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5pbmZvKFxuICAgICAgYFRydXN0ZWQgYWNjb3VudHMgZm9yIGRlcGxveW1lbnQ6ICR7dHJ1c3RlZEFjY291bnRzLmxlbmd0aCA+IDAgPyB0cnVzdGVkQWNjb3VudHMuam9pbignLCAnKSA6ICcobm9uZSknfWAsXG4gICAgKTtcblxuICAgIGNvbnN0IHRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cCA9IHJlbW92ZVVudHJ1c3RlZChcbiAgICAgIHBhcmFtcy50cnVzdGVkQWNjb3VudHNGb3JMb29rdXAgPz8gc3BsaXRDZm5BcnJheShjdXJyZW50LnBhcmFtZXRlcnMuVHJ1c3RlZEFjY291bnRzRm9yTG9va3VwKSxcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhcbiAgICAgIGBUcnVzdGVkIGFjY291bnRzIGZvciBsb29rdXA6ICR7dHJ1c3RlZEFjY291bnRzRm9yTG9va3VwLmxlbmd0aCA+IDAgPyB0cnVzdGVkQWNjb3VudHNGb3JMb29rdXAuam9pbignLCAnKSA6ICcobm9uZSknfWAsXG4gICAgKTtcblxuICAgIGNvbnN0IGNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMgPVxuICAgICAgcGFyYW1zLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMgPz8gc3BsaXRDZm5BcnJheShjdXJyZW50LnBhcmFtZXRlcnMuQ2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcyk7XG4gICAgaWYgKHRydXN0ZWRBY2NvdW50cy5sZW5ndGggPT09IDAgJiYgY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEZvciBzZWxmLXRydXN0IGl0J3Mgb2theSB0byBkZWZhdWx0IHRvIEFkbWluaXN0cmF0b3JBY2Nlc3MsIGFuZCBpdCBpbXByb3ZlcyB0aGUgdXNhYmlsaXR5IG9mIGJvb3RzdHJhcHBpbmcgYSBsb3QuXG4gICAgICAvL1xuICAgICAgLy8gV2UgZG9uJ3QgYWN0dWFsbHkgbWFrZSB0aGUgaW1wbGljaXRseSBwb2xpY3kgYSBwaHlzaWNhbCBwYXJhbWV0ZXIuIFRoZSB0ZW1wbGF0ZSB3aWxsIGluZmVyIGl0IGluc3RlYWQsXG4gICAgICAvLyB3ZSBzaW1wbHkgZG8gdGhlIFVJIGFkdmVydGlzaW5nIHRoYXQgYmVoYXZpb3IgaGVyZS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBESUQgbWFrZSBpdCBhbiBleHBsaWNpdCBwYXJhbWV0ZXIsIHdlIHdvdWxkbid0IGJlIGFibGUgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdoZXRoZXJcbiAgICAgIC8vIHdlIGluZmVycmVkIGl0IG9yIHdoZXRoZXIgdGhlIHVzZXIgdG9sZCB1cywgYW5kIHRoZSBzZXF1ZW5jZTpcbiAgICAgIC8vXG4gICAgICAvLyAkIGNkayBib290c3RyYXBcbiAgICAgIC8vICQgY2RrIGJvb3RzdHJhcCAtLXRydXN0IDEyMzRcbiAgICAgIC8vXG4gICAgICAvLyBXb3VsZCBsZWF2ZSBBZG1pbmlzdHJhdG9yQWNjZXNzIHBvbGljaWVzIHdpdGggYSB0cnVzdCByZWxhdGlvbnNoaXAsIHdpdGhvdXQgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgLy8gYXBwcm92aW5nIHRoZSB0cnVzdCBwb2xpY3kuXG4gICAgICBjb25zdCBpbXBsaWNpdFBvbGljeSA9IGBhcm46JHtwYXJ0aXRpb259OmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzYDtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgYFVzaW5nIGRlZmF1bHQgZXhlY3V0aW9uIHBvbGljeSBvZiAnJHtpbXBsaWNpdFBvbGljeX0nLiBQYXNzICctLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llcycgdG8gY3VzdG9taXplLmAsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICdNaXNzaW5nRXhlY3V0aW9uUG9saWNpZXNGb3JUcnVzdCcsXG4gICAgICAgIGBQbGVhc2UgcGFzcyBcXCctLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llc1xcJyB3aGVuIHVzaW5nIFxcJy0tdHJ1c3RcXCcgdG8gc3BlY2lmeSBkZXBsb3ltZW50IHBlcm1pc3Npb25zLiBUcnkgYSBtYW5hZ2VkIHBvbGljeSBvZiB0aGUgZm9ybSBcXCdhcm46JHtwYXJ0aXRpb259OmlhbTo6YXdzOnBvbGljeS88UG9saWN5TmFtZT5cXCcuYCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWluZCBwZW9wbGUgd2hhdCB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmVcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuaW5mbyhgRXhlY3V0aW9uIHBvbGljaWVzOiAke2Nsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyAqIElmIGFuIEFSTiBpcyBnaXZlbiwgdGhhdCBBUk4uIE90aGVyd2lzZTpcbiAgICAvLyAgICogJy0nIGlmIGN1c3RvbWVyS2V5ID0gZmFsc2VcbiAgICAvLyAgICogJycgaWYgY3VzdG9tZXJLZXkgPSB0cnVlXG4gICAgLy8gICAqIGlmIGN1c3RvbWVyS2V5IGlzIGFsc28gbm90IGdpdmVuXG4gICAgLy8gICAgICogdW5kZWZpbmVkIGlmIHdlIGFscmVhZHkgaGFkIGEgdmFsdWUgaW4gcGxhY2UgKHJldXNpbmcgd2hhdCB3ZSBoYWQpXG4gICAgLy8gICAgICogJy0nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UncmUgZGVwbG95aW5nIHRoaXMgc3RhY2sgKG9yIHVwZ3JhZGluZyBmcm9tIG9sZCB0byBuZXcgYm9vdHN0cmFwKVxuICAgIGNvbnN0IGN1cnJlbnRLbXNLZXlJZCA9IGN1cnJlbnQucGFyYW1ldGVycy5GaWxlQXNzZXRzQnVja2V0S21zS2V5SWQ7XG4gICAgY29uc3Qga21zS2V5SWQgPVxuICAgICAgcGFyYW1zLmttc0tleUlkID8/XG4gICAgICAocGFyYW1zLmNyZWF0ZUN1c3RvbWVyTWFzdGVyS2V5ID09PSB0cnVlXG4gICAgICAgID8gQ1JFQVRFX05FV19LRVlcbiAgICAgICAgOiBwYXJhbXMuY3JlYXRlQ3VzdG9tZXJNYXN0ZXJLZXkgPT09IGZhbHNlIHx8IGN1cnJlbnRLbXNLZXlJZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBVU0VfQVdTX01BTkFHRURfS0VZXG4gICAgICAgICAgOiB1bmRlZmluZWQpO1xuXG4gICAgLyogQSBwZXJtaXNzaW9ucyBib3VuZGFyeSBjYW4gYmUgcHJvdmlkZWQgdmlhOlxuICAgICAqICAgIC0gdGhlIGZsYWcgaW5kaWNhdGluZyB0aGUgZXhhbXBsZSBvbmUgc2hvdWxkIGJlIHVzZWRcbiAgICAgKiAgICAtIHRoZSBuYW1lIGluZGljYXRpbmcgdGhlIGN1c3RvbSBwZXJtaXNzaW9ucyBib3VuZGFyeSB0byBiZSB1c2VkXG4gICAgICogUmUtYm9vdHN0cmFwcGluZyB3aWxsIE5PVCBiZSBibG9ja2VkIGJ5IGVpdGhlciB0aWdodGVuaW5nIG9yIHJlbGF4aW5nIHRoZSBwZXJtaXNzaW9ucycgYm91bmRhcnkuXG4gICAgICovXG5cbiAgICAvLyBJbnB1dFBlcm1pc3Npb25zQm91bmRhcnkgaXMgYW4gYGFueWAgdHlwZSBhbmQgaWYgaXQgaXMgbm90IGRlZmluZWQgaXRcbiAgICAvLyBhcHBlYXJzIGFzIGFuIGVtcHR5IHN0cmluZyAnJy4gV2UgbmVlZCB0byBmb3JjZSBpdCB0byBldmFsdWF0ZSBhbiBlbXB0eSBzdHJpbmdcbiAgICAvLyBhcyB1bmRlZmluZWRcbiAgICBjb25zdCBjdXJyZW50UGVybWlzc2lvbnNCb3VuZGFyeTogc3RyaW5nIHwgdW5kZWZpbmVkID0gY3VycmVudC5wYXJhbWV0ZXJzLklucHV0UGVybWlzc2lvbnNCb3VuZGFyeSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgaW5wdXRQb2xpY3lOYW1lID0gcGFyYW1zLmV4YW1wbGVQZXJtaXNzaW9uc0JvdW5kYXJ5XG4gICAgICA/IENES19CT09UU1RSQVBfUEVSTUlTU0lPTlNfQk9VTkRBUllcbiAgICAgIDogcGFyYW1zLmN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk7XG4gICAgbGV0IHBvbGljeU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaW5wdXRQb2xpY3lOYW1lKSB7XG4gICAgICAvLyBJZiB0aGUgZXhhbXBsZSBwb2xpY3kgaXMgbm90IGFscmVhZHkgaW4gcGxhY2UsIGl0IG11c3QgYmUgY3JlYXRlZC5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudCwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuICAgICAgcG9saWN5TmFtZSA9IGF3YWl0IHRoaXMuZ2V0UG9saWN5TmFtZShlbnZpcm9ubWVudCwgc2RrLCBpbnB1dFBvbGljeU5hbWUsIHBhcnRpdGlvbiwgcGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRQZXJtaXNzaW9uc0JvdW5kYXJ5ICE9PSBwb2xpY3lOYW1lKSB7XG4gICAgICBpZiAoIWN1cnJlbnRQZXJtaXNzaW9uc0JvdW5kYXJ5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMud2FybihcbiAgICAgICAgICBgQWRkaW5nIG5ldyBwZXJtaXNzaW9ucyBib3VuZGFyeSAke3BvbGljeU5hbWV9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXBvbGljeU5hbWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuKFxuICAgICAgICAgIGBSZW1vdmluZyBleGlzdGluZyBwZXJtaXNzaW9ucyBib3VuZGFyeSAke2N1cnJlbnRQZXJtaXNzaW9uc0JvdW5kYXJ5fWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm4oXG4gICAgICAgICAgYENoYW5naW5nIHBlcm1pc3Npb25zIGJvdW5kYXJ5IGZyb20gJHtjdXJyZW50UGVybWlzc2lvbnNCb3VuZGFyeX0gdG8gJHtwb2xpY3lOYW1lfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYm9vdHN0cmFwVGVtcGxhdGVQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0ge1xuICAgICAgRmlsZUFzc2V0c0J1Y2tldE5hbWU6IHBhcmFtcy5idWNrZXROYW1lLFxuICAgICAgRmlsZUFzc2V0c0J1Y2tldEttc0tleUlkOiBrbXNLZXlJZCxcbiAgICAgIC8vIEVtcHR5IGFycmF5IGJlY29tZXMgZW1wdHkgc3RyaW5nXG4gICAgICBUcnVzdGVkQWNjb3VudHM6IHRydXN0ZWRBY2NvdW50cy5qb2luKCcsJyksXG4gICAgICBUcnVzdGVkQWNjb3VudHNGb3JMb29rdXA6IHRydXN0ZWRBY2NvdW50c0Zvckxvb2t1cC5qb2luKCcsJyksXG4gICAgICBDbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBjbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLmpvaW4oJywnKSxcbiAgICAgIFF1YWxpZmllcjogcGFyYW1zLnF1YWxpZmllcixcbiAgICAgIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjpcbiAgICAgICAgcGFyYW1zLnB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbiB8fCBwYXJhbXMucHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgIDogJ2ZhbHNlJyxcbiAgICAgIElucHV0UGVybWlzc2lvbnNCb3VuZGFyeTogcG9saWN5TmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGVtcGxhdGVQYXJhbWV0ZXJzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZVBhcmFtZXRlcnMoKTtcblxuICAgIC8vIENvbmRpdGlvbmFsbHkgc2V0IHRoZXNlIHBhcmFtZXRlcnM6IG9ubHkgc2V0IHRoZXNlIHBhcmFtZXRlcnMgaWYgdGhleSBhcmUgYWNjZXB0ZWQgYnkgdGhlIHRlbXBsYXRlLlxuICAgIC8vIElmIHdlIHBhc3MgdGhlbSB1bmNvbmRpdGlvbmFsbHksIG9sZGVyIGN1c3RvbWl6ZWQgdGVtcGxhdGVzIHRoYXQgZG9uJ3Qga25vdyBhYm91dCB0aGVzZVxuICAgIC8vIHBhcmFtZXRlcnMgeWV0IHdpbGwgZmFpbCB0byBkZXBsb3kuXG4gICAgaWYgKHBhcmFtcy5kZW55RXh0ZXJuYWxJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXRlbXBsYXRlUGFyYW1ldGVycy5pbmNsdWRlcygnRGVueUV4dGVybmFsSWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdEZW55RXh0ZXJuYWxJZE5vdFN1cHBvcnRlZCcsICdUaGUgc2VsZWN0ZWQgYm9vdHN0cmFwIHRlbXBsYXRlIGRvZXMgbm90IGFjY2VwdCB0aGUgRGVueUV4dGVybmFsSWQgcGFyYW1ldGVyJyk7XG4gICAgICB9XG4gICAgICBib290c3RyYXBUZW1wbGF0ZVBhcmFtZXRlcnMuRGVueUV4dGVybmFsSWQgPSBgJHtwYXJhbXMuZGVueUV4dGVybmFsSWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudC51cGRhdGUoYm9vdHN0cmFwVGVtcGxhdGUsIGJvb3RzdHJhcFRlbXBsYXRlUGFyYW1ldGVycywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbjogb3B0aW9ucy50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gY3VycmVudC50ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFBvbGljeU5hbWUoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNkazogU0RLLFxuICAgIHBlcm1pc3Npb25zQm91bmRhcnk6IHN0cmluZyxcbiAgICBwYXJ0aXRpb246IHN0cmluZyxcbiAgICBwYXJhbXM6IEJvb3RzdHJhcHBpbmdQYXJhbWV0ZXJzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmIChwZXJtaXNzaW9uc0JvdW5kYXJ5ICE9PSBDREtfQk9PVFNUUkFQX1BFUk1JU1NJT05TX0JPVU5EQVJZKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUG9saWN5TmFtZShwZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuICAgIC8vIGlmIG5vIFF1YWxpZmllciBpcyBzdXBwbGllZCwgcmVzb3J0IHRvIHRoZSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGFybiA9IGF3YWl0IHRoaXMuZ2V0RXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnkoXG4gICAgICBwYXJhbXMucXVhbGlmaWVyID8/ICdobmI2NTlmZHMnLFxuICAgICAgcGFydGl0aW9uLFxuICAgICAgZW52aXJvbm1lbnQuYWNjb3VudCxcbiAgICAgIHNkayxcbiAgICApO1xuICAgIGNvbnN0IHBvbGljeU5hbWUgPSBhcm4uc3BsaXQoJy8nKS5wb3AoKTtcbiAgICBpZiAoIXBvbGljeU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1Blcm1pc3Npb25Cb3VuZGFyeVJldHJpZXZhbEZhaWxlZCcsICdDb3VsZCBub3QgcmV0cmlldmUgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBib3VuZGFyeSEnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2xpY3lOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnkoXG4gICAgcXVhbGlmaWVyOiBzdHJpbmcsXG4gICAgcGFydGl0aW9uOiBzdHJpbmcsXG4gICAgYWNjb3VudDogc3RyaW5nLFxuICAgIHNkazogU0RLLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGlhbSA9IHNkay5pYW0oKTtcblxuICAgIGxldCBwb2xpY3lOYW1lID0gYGNkay0ke3F1YWxpZmllcn0tcGVybWlzc2lvbnMtYm91bmRhcnlgO1xuICAgIGNvbnN0IGFybiA9IGBhcm46JHtwYXJ0aXRpb259OmlhbTo6JHthY2NvdW50fTpwb2xpY3kvJHtwb2xpY3lOYW1lfWA7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGdldFBvbGljeVJlc3AgPSBhd2FpdCBpYW0uZ2V0UG9saWN5KHsgUG9saWN5QXJuOiBhcm4gfSk7XG4gICAgICBpZiAoZ2V0UG9saWN5UmVzcC5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIGFybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfR2V0UG9saWN5Lmh0bWwjQVBJX0dldFBvbGljeV9FcnJvcnNcbiAgICAgIGlmIChlLm5hbWUgPT09ICdOb1N1Y2hFbnRpdHknKSB7XG4gICAgICAgIC8vIG5vb3AsIHByb2NlZWQgd2l0aCBjcmVhdGluZyB0aGUgcG9saWN5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvbGljeURvYyA9IHtcbiAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBbJyonXSxcbiAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBTaWQ6ICdFeHBsaWNpdEFsbG93QWxsJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIENvbmRpdGlvbjoge1xuICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAgICdpYW06UGVybWlzc2lvbnNCb3VuZGFyeSc6IGBhcm46JHtwYXJ0aXRpb259OmlhbTo6JHthY2NvdW50fTpwb2xpY3kvY2RrLSR7cXVhbGlmaWVyfS1wZXJtaXNzaW9ucy1ib3VuZGFyeWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAnaWFtOkNyZWF0ZVVzZXInLFxuICAgICAgICAgICAgJ2lhbTpDcmVhdGVSb2xlJyxcbiAgICAgICAgICAgICdpYW06UHV0Um9sZVBlcm1pc3Npb25zQm91bmRhcnknLFxuICAgICAgICAgICAgJ2lhbTpQdXRVc2VyUGVybWlzc2lvbnNCb3VuZGFyeScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBSZXNvdXJjZTogJyonLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBTaWQ6ICdEZW55QWNjZXNzSWZSZXF1aXJlZFBlcm1Cb3VuZGFyeUlzTm90QmVpbmdBcHBsaWVkJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgJ2lhbTpDcmVhdGVQb2xpY3lWZXJzaW9uJyxcbiAgICAgICAgICAgICdpYW06RGVsZXRlUG9saWN5JyxcbiAgICAgICAgICAgICdpYW06RGVsZXRlUG9saWN5VmVyc2lvbicsXG4gICAgICAgICAgICAnaWFtOlNldERlZmF1bHRQb2xpY3lWZXJzaW9uJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFJlc291cmNlOiBgYXJuOiR7cGFydGl0aW9ufTppYW06OiR7YWNjb3VudH06cG9saWN5L2Nkay0ke3F1YWxpZmllcn0tcGVybWlzc2lvbnMtYm91bmRhcnlgLFxuICAgICAgICAgIEVmZmVjdDogJ0RlbnknLFxuICAgICAgICAgIFNpZDogJ0RlbnlQZXJtQm91bmRhcnlJQU1Qb2xpY3lBbHRlcmF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIEFjdGlvbjogWydpYW06RGVsZXRlVXNlclBlcm1pc3Npb25zQm91bmRhcnknLCAnaWFtOkRlbGV0ZVJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5J10sXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgICBFZmZlY3Q6ICdEZW55JyxcbiAgICAgICAgICBTaWQ6ICdEZW55UmVtb3ZhbE9mUGVybUJvdW5kYXJ5RnJvbUFueVVzZXJPclJvbGUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBQb2xpY3lOYW1lOiBwb2xpY3lOYW1lLFxuICAgICAgUG9saWN5RG9jdW1lbnQ6IEpTT04uc3RyaW5naWZ5KHBvbGljeURvYyksXG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVQb2xpY3lSZXNwb25zZSA9IGF3YWl0IGlhbS5jcmVhdGVQb2xpY3kocmVxdWVzdCk7XG4gICAgaWYgKGNyZWF0ZVBvbGljeVJlc3BvbnNlLlBvbGljeT8uQXJuKSB7XG4gICAgICByZXR1cm4gY3JlYXRlUG9saWN5UmVzcG9uc2UuUG9saWN5LkFybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignUGVybWlzc2lvbkJvdW5kYXJ5Q3JlYXRlRmFpbGVkJywgYENvdWxkIG5vdCByZXRyaWV2ZSB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGJvdW5kYXJ5ICR7YXJufSFgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUG9saWN5TmFtZShwZXJtaXNzaW9uc0JvdW5kYXJ5OiBzdHJpbmcpIHtcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVBvbGljeS5odG1sXG4gICAgLy8gQWRkZWQgc3VwcG9ydCBmb3IgcG9saWN5IG5hbWVzIHdpdGggYSBwYXRoXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMjYzMjBcbiAgICBjb25zdCByZWdleHA6IFJlZ0V4cCA9IC9bXFx3K1xcLz0sLkAtXSsvO1xuICAgIGNvbnN0IG1hdGNoZXMgPSByZWdleHAuZXhlYyhwZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICBpZiAoIShtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAxICYmIG1hdGNoZXNbMF0gPT09IHBlcm1pc3Npb25zQm91bmRhcnkpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbnZhbGlkUGVybWlzc2lvbkJvdW5kYXJ5TmFtZScsIGBUaGUgcGVybWlzc2lvbnMgYm91bmRhcnkgbmFtZSAke3Blcm1pc3Npb25zQm91bmRhcnl9IGRvZXMgbm90IG1hdGNoIHRoZSBJQU0gY29udmVudGlvbnMuYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjdXN0b21Cb290c3RyYXAoXG4gICAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICAgIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgICBvcHRpb25zOiBCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxTdWNjZXNzZnVsRGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICAvLyBMb29rIGF0IHRoZSB0ZW1wbGF0ZSwgZGVjaWRlIHdoZXRoZXIgaXQncyBtb3N0IGxpa2VseSBhIGxlZ2FjeSBvciBtb2Rlcm4gYm9vdHN0cmFwXG4gICAgLy8gdGVtcGxhdGUsIGFuZCB1c2UgdGhlIHJpZ2h0IGJvb3RzdHJhcHBlciBmb3IgdGhhdC5cbiAgICBjb25zdCB2ZXJzaW9uID0gYm9vdHN0cmFwVmVyc2lvbkZyb21UZW1wbGF0ZShhd2FpdCB0aGlzLmxvYWRUZW1wbGF0ZSgpKTtcbiAgICBpZiAodmVyc2lvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVnYWN5Qm9vdHN0cmFwKGVudmlyb25tZW50LCBzZGtQcm92aWRlciwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVybkJvb3RzdHJhcChlbnZpcm9ubWVudCwgc2RrUHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNldCBvZiBwYXJhbWV0ZXIgbmFtZXMgYWNjZXB0ZWQgYnkgdGhlIGN1cnJlbnQgYm9vdHN0cmFwcGluZyB0ZW1wbGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB0ZW1wbGF0ZVBhcmFtZXRlcnMobGVnYWN5UGFyYW1zOiBCb290c3RyYXBwaW5nUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy5sb2FkVGVtcGxhdGUobGVnYWN5UGFyYW1zKTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0ZW1wbGF0ZS5QYXJhbWV0ZXJzID8/IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFRlbXBsYXRlKGxlZ2FjeVBhcmFtczogQm9vdHN0cmFwcGluZ1BhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoICh0aGlzLnNvdXJjZS5zb3VyY2UpIHtcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIHJldHVybiBsb2FkU3RydWN0dXJlZEZpbGUodGhpcy5zb3VyY2UudGVtcGxhdGVGaWxlKTtcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICByZXR1cm4gbG9hZFN0cnVjdHVyZWRGaWxlKHBhdGguam9pbihidW5kbGVkUGFja2FnZVJvb3REaXIoX19kaXJuYW1lKSwgJ2xpYicsICdhcGknLCAnYm9vdHN0cmFwJywgJ2Jvb3RzdHJhcC10ZW1wbGF0ZS55YW1sJykpO1xuICAgICAgY2FzZSAnbGVnYWN5JzpcbiAgICAgICAgcmV0dXJuIGxlZ2FjeUJvb3RzdHJhcFRlbXBsYXRlKGxlZ2FjeVBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWFnaWMgcGFyYW1ldGVyIHZhbHVlIHRoYXQgd2lsbCBjYXVzZSB0aGUgYm9vdHN0cmFwLXRlbXBsYXRlLnltbCB0byBOT1QgY3JlYXRlIGEgQ01LIGJ1dCB1c2UgdGhlIGRlZmF1bHQga2V5XG4gKi9cbmNvbnN0IFVTRV9BV1NfTUFOQUdFRF9LRVkgPSAnQVdTX01BTkFHRURfS0VZJztcblxuLyoqXG4gKiBNYWdpYyBwYXJhbWV0ZXIgdmFsdWUgdGhhdCB3aWxsIGNhdXNlIHRoZSBib290c3RyYXAtdGVtcGxhdGUueW1sIHRvIGNyZWF0ZSBhIENNS1xuICovXG5jb25zdCBDUkVBVEVfTkVXX0tFWSA9ICcnO1xuLyoqXG4gKiBQYXJhbWV0ZXIgdmFsdWUgaW5kaWNhdGluZyB0aGUgdXNlIG9mIHRoZSBkZWZhdWx0LCBDREsgcHJvdmlkZWQgcGVybWlzc2lvbnMgYm91bmRhcnkgZm9yIGJvb3RzdHJhcC10ZW1wbGF0ZS55bWxcbiAqL1xuY29uc3QgQ0RLX0JPT1RTVFJBUF9QRVJNSVNTSU9OU19CT1VOREFSWSA9ICdDREtfQk9PVFNUUkFQX1BFUk1JU1NJT05TX0JPVU5EQVJZJztcblxuLyoqXG4gKiBTcGxpdCBhbiBhcnJheS1saWtlIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlciBvbiAsXG4gKlxuICogQW4gZW1wdHkgc3RyaW5nIGlzIHRoZSBlbXB0eSBhcnJheSAoaW5zdGVhZCBvZiBgWycnXWApLlxuICovXG5mdW5jdGlvbiBzcGxpdENmbkFycmF5KHhzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIGlmICh4cyA9PT0gJycgfHwgeHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4geHMuc3BsaXQoJywnKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0aW9uPEE+KHhzOiBTZXQ8QT4sIHlzOiBTZXQ8QT4pOiBTZXQ8QT4ge1xuICByZXR1cm4gbmV3IFNldDxBPihBcnJheS5mcm9tKHhzKS5maWx0ZXIoeCA9PiB5cy5oYXMoeCkpKTtcbn1cbiJdfQ==
@@ -101,7 +101,7 @@ class FileContext {
101
101
  }
102
102
  }
103
103
  if (!this._cache || typeof this._cache !== 'object') {
104
- throw new toolkit_error_1.ToolkitError(`${this.fileName} must contain an object, got: ${JSON.stringify(this._cache)}`);
104
+ throw new toolkit_error_1.ToolkitError('InvalidContextFile', `${this.fileName} must contain an object, got: ${JSON.stringify(this._cache)}`);
105
105
  }
106
106
  return this._cache;
107
107
  }
@@ -157,4 +157,4 @@ async function settingsFromFile(filename) {
157
157
  throw e;
158
158
  }
159
159
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMktBLGdEQUdDO0FBOUtELDJCQUFvQztBQUNwQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtEQUEyRDtBQUUzRCx3Q0FBcUM7QUFDckMsMENBQThEO0FBMEI5RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLGtCQUFrQjtJQU1zQjtJQUwzQyxRQUFRLENBQVc7SUFDbkIsaUJBQWlCLENBQVM7SUFDMUIsa0JBQWtCLENBQVM7SUFDM0IsY0FBYyxDQUFTO0lBRS9CLFlBQVksWUFBb0IsRUFBbUIsa0JBQTRDO1FBQTVDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBMEI7UUFDN0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFnQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENB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LElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sYUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5RCxPQUFPLElBQUksbUJBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLG1CQUFRLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRCYWcgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IFNldHRpbmdzLCBUUkFOU0lFTlRfQ09OVEVYVF9LRVkgfSBmcm9tICcuLi9zZXR0aW5ncyc7XG5cbi8qKlxuICogQSBzdG9yYWdlIHBsYWNlIGZvciBjb250ZXh0IHVzZWQgaW4gc3ludGhlc2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRleHRTdG9yZSB7XG4gIC8qKlxuICAgKiBSZWFkIHRoZSBjb250ZXh0IGZyb20gdGhlIGNvbnRleHQgc3RvcmUsIHBsdXMgYWxsIHVwZGF0ZXMgd2UgaGF2ZSBtYWRlIHNvIGZhci5cbiAgICovXG4gIHJlYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIENvbW1pdCB0aGUgZ2l2ZW4gdXBkYXRlcyB0byB0aGUgY29udGV4dCBzdG9yZVxuICAgKlxuICAgKiBgdW5kZWZpbmVkYCBpcyB1c2VkIGFzIGEgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUga2V5IG5lZWRzIHRvIGJlIHJlbW92ZWQuXG4gICAqXG4gICAqIElmIGEgY29udGV4dCB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBpcyBhIHN1cGVyc2V0IG9mIGB7IFtUUkFOU0lFTlRfQ09OVEVYVF9LRVldOiB0cnVlIH1gXG4gICAqIGl0ICpzaG91bGQqIGJlIHJldHVybmVkIGJ5IHN1YnNlcXVlbnQgYHJlYWQoKWAgb3BlcmF0aW9ucyBvbiB0aGlzIG9iamVjdCxcbiAgICogYnV0IGl0ICpzaG91bGQgbm90KiBiZSBwZXJzaXN0ZWQgdG8gcGVybWFuZW50IHN0b3JhZ2UuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBgcGVyc2lzdGFibGVDb250ZXh0KClgIGZ1bmN0aW9uIHRvIGZpbHRlciBhIGNvbnRleHQgZGljdGlvbmFyeVxuICAgKiBkb3duIHRvIHJlbW92ZSBhbGwgdmFsdWVzIHRoYXQgc2hvdWxkbid0IGJlIHBlcnNpc3RlZC5cbiAgICovXG4gIHVwZGF0ZSh1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSBjb250ZXh0IHN0b3JlIGFzIHVzZWQgYnkgYSBDREsgYXBwLlxuICpcbiAqIFdpbGwgc291cmNlIGNvbnRleHQgZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcbiAqXG4gKiAtIEFueSBjb250ZXh0IHZhbHVlcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIChleHBlY3RlZFxuICogICB0byBjb21lIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdHJlYXRlZCBhcyBlcGhlbWVyYWwpLlxuICogLSBUaGUgYGNvbnRleHRgIGtleSBpbiBgPGFwcERpcmVjdG9yeT4vY2RrLmpzb25gLlxuICogLSBgPGFwcERpcmVjdG9yeT4vY2RrLmNvbnRleHQuanNvbmAuXG4gKiAtIFRoZSBgY29udGV4dGAga2V5IGluIGB+Ly5jZGsuanNvbmAuXG4gKlxuICogVXBkYXRlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gYDxhcHBEaXJlY3Rvcnk+L2Nkay5jb250ZXh0Lmpzb25gLlxuICovXG5leHBvcnQgY2xhc3MgQ2RrQXBwTXVsdGlDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHRTdG9yZSB7XG4gIHByaXZhdGUgX2NvbnRleHQ/OiBDb250ZXh0O1xuICBwcml2YXRlIGNvbmZpZ0NvbnRleHRGaWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcHJvamVjdENvbnRleHRGaWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgdXNlckNvbmZpZ0ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihhcHBEaXJlY3Rvcnk6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kbGluZUNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIHRoaXMuY29uZmlnQ29udGV4dEZpbGUgPSBwYXRoLmpvaW4oYXBwRGlyZWN0b3J5LCAnY2RrLmpzb24nKTtcbiAgICB0aGlzLnByb2plY3RDb250ZXh0RmlsZSA9IHBhdGguam9pbihhcHBEaXJlY3RvcnksICdjZGsuY29udGV4dC5qc29uJyk7XG4gICAgdGhpcy51c2VyQ29uZmlnRmlsZSA9IHBhdGguam9pbihvcy5ob21lZGlyKCkgPz8gJy90bXAnLCAnLmNkay5qc29uJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZCgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuYXN5bmNJbml0aWFsaXplKCk7XG4gICAgcmV0dXJuIGNvbnRleHQuYWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmFzeW5jSW5pdGlhbGl6ZSgpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZXMpKSB7XG4gICAgICBjb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBhd2FpdCBjb250ZXh0LnNhdmUodGhpcy5wcm9qZWN0Q29udGV4dEZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGBDb250ZXh0YCBvYmplY3RcbiAgICpcbiAgICogVGhpcyBjb2RlIGFsbCBleGlzdHMgdG8gcmV1c2UgY29kZSB0aGF0J3MgYWxyZWFkeSB0aGVyZSwgdG8gbWluaW1pemVcbiAgICogdGhlIGNoYW5jZXMgb2YgdGhlIG5ldyBjb2RlIGJlaGF2aW5nIHN1YnRseSBkaWZmZXJlbnRseSB0aGFuIHRoZVxuICAgKiBvbGQgY29kZS5cbiAgICpcbiAgICogSXQgbWlnaHQgYmUgbW9zdCBvZiB0aGlzIGlzIHVubmVjZXNzYXJ5IG5vdy4uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhc3luY0luaXRpYWxpemUoKTogUHJvbWlzZTxDb250ZXh0PiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHRTb3VyY2VzOiBDb250ZXh0QmFnW10gPSBbXG4gICAgICB7IGJhZzogbmV3IFNldHRpbmdzKHRoaXMuY29tbWFuZGxpbmVDb250ZXh0LCB0cnVlKSB9LFxuICAgICAge1xuICAgICAgICBmaWxlTmFtZTogdGhpcy5jb25maWdDb250ZXh0RmlsZSxcbiAgICAgICAgYmFnOiAoYXdhaXQgc2V0dGluZ3NGcm9tRmlsZSh0aGlzLmNvbmZpZ0NvbnRleHRGaWxlKSkuc3ViU2V0dGluZ3MoWydjb250ZXh0J10pLm1ha2VSZWFkT25seSgpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMucHJvamVjdENvbnRleHRGaWxlLFxuICAgICAgICBiYWc6IGF3YWl0IHNldHRpbmdzRnJvbUZpbGUodGhpcy5wcm9qZWN0Q29udGV4dEZpbGUpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMudXNlckNvbmZpZ0ZpbGUsXG4gICAgICAgIGJhZzogKGF3YWl0IHNldHRpbmdzRnJvbUZpbGUodGhpcy51c2VyQ29uZmlnRmlsZSkpLnN1YlNldHRpbmdzKFsnY29udGV4dCddKS5tYWtlUmVhZE9ubHkoKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHRoaXMuX2NvbnRleHQgPSBuZXcgQ29udGV4dCguLi5jb250ZXh0U291cmNlcyk7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gIH1cbn1cblxuLyoqXG4gKiBPbi1kaXNrIGNvbnRleHQgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHRTdG9yZSB7XG4gIHByaXZhdGUgX2NhY2hlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZCgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuZmlsZU5hbWUsICd1dGYtOCcpKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHRoaXMuX2NhY2hlID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2NhY2hlIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYCR7dGhpcy5maWxlTmFtZX0gbXVzdCBjb250YWluIGFuIG9iamVjdCwgZ290OiAke0pTT04uc3RyaW5naWZ5KHRoaXMuX2NhY2hlKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2NhY2hlID0ge1xuICAgICAgLi4uYXdhaXQgdGhpcy5yZWFkKCksXG4gICAgICAuLi51cGRhdGVzLFxuICAgIH07XG5cbiAgICBjb25zdCBwZXJzaXN0YWJsZSA9IHBlcnNpc3RhYmxlQ29udGV4dCh0aGlzLl9jYWNoZSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuZmlsZU5hbWUsIEpTT04uc3RyaW5naWZ5KHBlcnNpc3RhYmxlLCB1bmRlZmluZWQsIDIpLCAndXRmLTgnKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGluLW1lbW9yeSBjb250ZXh0IHN0b3JlXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHRTdG9yZSB7XG4gIHByaXZhdGUgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihpbml0aWFsQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgdGhpcy5jb250ZXh0ID0geyAuLi5pbml0aWFsQ29udGV4dCB9O1xuICB9XG5cbiAgcHVibGljIHJlYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUodXBkYXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICAuLi51cGRhdGVzLFxuICAgIH07XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGaWx0ZXIgdGhlIGdpdmVuIGNvbnRleHQsIGxlYXZpbmcgb25seSBlbnRyaWVzIHRoYXQgc2hvdWxkIGJlIHBlcnNpc3RlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVyc2lzdGFibGVDb250ZXh0KGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGNvbnRleHQpXG4gICAgLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gIWlzVHJhbnNpZW50VmFsdWUodmFsdWUpKSk7XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50VmFsdWUoeDogdW5rbm93bikge1xuICByZXR1cm4geCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgKHggYXMgYW55KVtUUkFOU0lFTlRfQ09OVEVYVF9LRVldO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR0aW5nc0Zyb21GaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFNldHRpbmdzPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoZmlsZW5hbWUsICd1dGYtOCcpKTtcbiAgICByZXR1cm4gbmV3IFNldHRpbmdzKGRhdGEpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIG5ldyBTZXR0aW5ncygpO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG4iXX0=
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMktBLGdEQUdDO0FBOUtELDJCQUFvQztBQUNwQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtEQUEyRDtBQUUzRCx3Q0FBcUM7QUFDckMsMENBQThEO0FBMEI5RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLGtCQUFrQjtJQU1zQjtJQUwzQyxRQUFRLENBQVc7SUFDbkIsaUJBQWlCLENBQVM7SUFDMUIsa0JBQWtCLENBQVM7SUFDM0IsY0FBYyxDQUFTO0lBRS9CLFlBQVksWUFBb0IsRUFBbUIsa0JBQTRDO1FBQTVDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBMEI7UUFDN0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFnQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENB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QUM7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sYUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5RCxPQUFPLElBQUksbUJBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLG1CQUFRLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRCYWcgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IFNldHRpbmdzLCBUUkFOU0lFTlRfQ09OVEVYVF9LRVkgfSBmcm9tICcuLi9zZXR0aW5ncyc7XG5cbi8qKlxuICogQSBzdG9yYWdlIHBsYWNlIGZvciBjb250ZXh0IHVzZWQgaW4gc3ludGhlc2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRleHRTdG9yZSB7XG4gIC8qKlxuICAgKiBSZWFkIHRoZSBjb250ZXh0IGZyb20gdGhlIGNvbnRleHQgc3RvcmUsIHBsdXMgYWxsIHVwZGF0ZXMgd2UgaGF2ZSBtYWRlIHNvIGZhci5cbiAgICovXG4gIHJlYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIENvbW1pdCB0aGUgZ2l2ZW4gdXBkYXRlcyB0byB0aGUgY29udGV4dCBzdG9yZVxuICAgKlxuICAgKiBgdW5kZWZpbmVkYCBpcyB1c2VkIGFzIGEgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUga2V5IG5lZWRzIHRvIGJlIHJlbW92ZWQuXG4gICAqXG4gICAqIElmIGEgY29udGV4dCB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBpcyBhIHN1cGVyc2V0IG9mIGB7IFtUUkFOU0lFTlRfQ09OVEVYVF9LRVldOiB0cnVlIH1gXG4gICAqIGl0ICpzaG91bGQqIGJlIHJldHVybmVkIGJ5IHN1YnNlcXVlbnQgYHJlYWQoKWAgb3BlcmF0aW9ucyBvbiB0aGlzIG9iamVjdCxcbiAgICogYnV0IGl0ICpzaG91bGQgbm90KiBiZSBwZXJzaXN0ZWQgdG8gcGVybWFuZW50IHN0b3JhZ2UuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBgcGVyc2lzdGFibGVDb250ZXh0KClgIGZ1bmN0aW9uIHRvIGZpbHRlciBhIGNvbnRleHQgZGljdGlvbmFyeVxuICAgKiBkb3duIHRvIHJlbW92ZSBhbGwgdmFsdWVzIHRoYXQgc2hvdWxkbid0IGJlIHBlcnNpc3RlZC5cbiAgICovXG4gIHVwZGF0ZSh1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSBjb250ZXh0IHN0b3JlIGFzIHVzZWQgYnkgYSBDREsgYXBwLlxuICpcbiAqIFdpbGwgc291cmNlIGNvbnRleHQgZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcbiAqXG4gKiAtIEFueSBjb250ZXh0IHZhbHVlcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIChleHBlY3RlZFxuICogICB0byBjb21lIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdHJlYXRlZCBhcyBlcGhlbWVyYWwpLlxuICogLSBUaGUgYGNvbnRleHRgIGtleSBpbiBgPGFwcERpcmVjdG9yeT4vY2RrLmpzb25gLlxuICogLSBgPGFwcERpcmVjdG9yeT4vY2RrLmNvbnRleHQuanNvbmAuXG4gKiAtIFRoZSBgY29udGV4dGAga2V5IGluIGB+Ly5jZGsuanNvbmAuXG4gKlxuICogVXBkYXRlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gYDxhcHBEaXJlY3Rvcnk+L2Nkay5jb250ZXh0Lmpzb25gLlxuICovXG5leHBvcnQgY2xhc3MgQ2RrQXBwTXVsdGlDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHRTdG9yZSB7XG4gIHByaXZhdGUgX2NvbnRleHQ/OiBDb250ZXh0O1xuICBwcml2YXRlIGNvbmZpZ0NvbnRleHRGaWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgcHJvamVjdENvbnRleHRGaWxlOiBzdHJpbmc7XG4gIHByaXZhdGUgdXNlckNvbmZpZ0ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihhcHBEaXJlY3Rvcnk6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kbGluZUNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIHRoaXMuY29uZmlnQ29udGV4dEZpbGUgPSBwYXRoLmpvaW4oYXBwRGlyZWN0b3J5LCAnY2RrLmpzb24nKTtcbiAgICB0aGlzLnByb2plY3RDb250ZXh0RmlsZSA9IHBhdGguam9pbihhcHBEaXJlY3RvcnksICdjZGsuY29udGV4dC5qc29uJyk7XG4gICAgdGhpcy51c2VyQ29uZmlnRmlsZSA9IHBhdGguam9pbihvcy5ob21lZGlyKCkgPz8gJy90bXAnLCAnLmNkay5qc29uJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZCgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuYXN5bmNJbml0aWFsaXplKCk7XG4gICAgcmV0dXJuIGNvbnRleHQuYWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmFzeW5jSW5pdGlhbGl6ZSgpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHVwZGF0ZXMpKSB7XG4gICAgICBjb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBhd2FpdCBjb250ZXh0LnNhdmUodGhpcy5wcm9qZWN0Q29udGV4dEZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGBDb250ZXh0YCBvYmplY3RcbiAgICpcbiAgICogVGhpcyBjb2RlIGFsbCBleGlzdHMgdG8gcmV1c2UgY29kZSB0aGF0J3MgYWxyZWFkeSB0aGVyZSwgdG8gbWluaW1pemVcbiAgICogdGhlIGNoYW5jZXMgb2YgdGhlIG5ldyBjb2RlIGJlaGF2aW5nIHN1YnRseSBkaWZmZXJlbnRseSB0aGFuIHRoZVxuICAgKiBvbGQgY29kZS5cbiAgICpcbiAgICogSXQgbWlnaHQgYmUgbW9zdCBvZiB0aGlzIGlzIHVubmVjZXNzYXJ5IG5vdy4uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhc3luY0luaXRpYWxpemUoKTogUHJvbWlzZTxDb250ZXh0PiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHRTb3VyY2VzOiBDb250ZXh0QmFnW10gPSBbXG4gICAgICB7IGJhZzogbmV3IFNldHRpbmdzKHRoaXMuY29tbWFuZGxpbmVDb250ZXh0LCB0cnVlKSB9LFxuICAgICAge1xuICAgICAgICBmaWxlTmFtZTogdGhpcy5jb25maWdDb250ZXh0RmlsZSxcbiAgICAgICAgYmFnOiAoYXdhaXQgc2V0dGluZ3NGcm9tRmlsZSh0aGlzLmNvbmZpZ0NvbnRleHRGaWxlKSkuc3ViU2V0dGluZ3MoWydjb250ZXh0J10pLm1ha2VSZWFkT25seSgpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMucHJvamVjdENvbnRleHRGaWxlLFxuICAgICAgICBiYWc6IGF3YWl0IHNldHRpbmdzRnJvbUZpbGUodGhpcy5wcm9qZWN0Q29udGV4dEZpbGUpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMudXNlckNvbmZpZ0ZpbGUsXG4gICAgICAgIGJhZzogKGF3YWl0IHNldHRpbmdzRnJvbUZpbGUodGhpcy51c2VyQ29uZmlnRmlsZSkpLnN1YlNldHRpbmdzKFsnY29udGV4dCddKS5tYWtlUmVhZE9ubHkoKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHRoaXMuX2NvbnRleHQgPSBuZXcgQ29udGV4dCguLi5jb250ZXh0U291cmNlcyk7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gIH1cbn1cblxuLyoqXG4gKiBPbi1kaXNrIGNvbnRleHQgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVDb250ZXh0IGltcGxlbWVudHMgSUNvbnRleHRTdG9yZSB7XG4gIHByaXZhdGUgX2NhY2hlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZCgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuZmlsZU5hbWUsICd1dGYtOCcpKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoZS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHRoaXMuX2NhY2hlID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2NhY2hlIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ludmFsaWRDb250ZXh0RmlsZScsIGAke3RoaXMuZmlsZU5hbWV9IG11c3QgY29udGFpbiBhbiBvYmplY3QsIGdvdDogJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9jYWNoZSl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWNoZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGUodXBkYXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jYWNoZSA9IHtcbiAgICAgIC4uLmF3YWl0IHRoaXMucmVhZCgpLFxuICAgICAgLi4udXBkYXRlcyxcbiAgICB9O1xuXG4gICAgY29uc3QgcGVyc2lzdGFibGUgPSBwZXJzaXN0YWJsZUNvbnRleHQodGhpcy5fY2FjaGUpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmZpbGVOYW1lLCBKU09OLnN0cmluZ2lmeShwZXJzaXN0YWJsZSwgdW5kZWZpbmVkLCAyKSwgJ3V0Zi04Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBpbi1tZW1vcnkgY29udGV4dCBzdG9yZVxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5Q29udGV4dCBpbXBsZW1lbnRzIElDb250ZXh0U3RvcmUge1xuICBwcml2YXRlIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIHRoaXMuY29udGV4dCA9IHsgLi4uaW5pdGlhbENvbnRleHQgfTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29udGV4dCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgLi4udXBkYXRlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG59XG5cbi8qKlxuICogRmlsdGVyIHRoZSBnaXZlbiBjb250ZXh0LCBsZWF2aW5nIG9ubHkgZW50cmllcyB0aGF0IHNob3VsZCBiZSBwZXJzaXN0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcnNpc3RhYmxlQ29udGV4dChjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhjb250ZXh0KVxuICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICFpc1RyYW5zaWVudFZhbHVlKHZhbHVlKSkpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudFZhbHVlKHg6IHVua25vd24pIHtcbiAgcmV0dXJuIHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmICh4IGFzIGFueSlbVFJBTlNJRU5UX0NPTlRFWFRfS0VZXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dGluZ3NGcm9tRmlsZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxTZXR0aW5ncz4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCAndXRmLTgnKSk7XG4gICAgcmV0dXJuIG5ldyBTZXR0aW5ncyhkYXRhKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgaWYgKGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuIl19
@@ -52,7 +52,7 @@ class ContextAwareCloudAssemblySource {
52
52
  const missingKeysSet = (0, helpers_1.missingContextKeys)(assembly.manifest.missing);
53
53
  const missingKeys = Array.from(missingKeysSet);
54
54
  if (!this.canLookup) {
55
- throw new toolkit_error_1.ToolkitError('Context lookups have been disabled. '
55
+ throw new toolkit_error_1.ToolkitError('ContextLookupsDisabled', 'Context lookups have been disabled. '
56
56
  + 'Make sure all necessary context is already in \'cdk.context.json\' by running \'cdk synth\' on a machine with sufficient AWS credentials and committing the result. '
57
57
  + `Missing context keys: '${missingKeys.join(', ')}'`);
58
58
  }
@@ -80,4 +80,4 @@ class ContextAwareCloudAssemblySource {
80
80
  }
81
81
  }
82
82
  exports.ContextAwareCloudAssemblySource = ContextAwareCloudAssemblySource;
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1hd2FyZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb250ZXh0LWF3YXJlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBK0Q7QUFFL0Qsa0VBQThEO0FBRTlELDhDQUFzQztBQUd0Qyx1Q0FBK0M7QUFDL0MsNkNBQStDO0FBd0IvQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQWEsK0JBQStCO0lBS2I7SUFBK0M7SUFKcEUsU0FBUyxDQUFVO0lBQ25CLE9BQU8sQ0FBZ0I7SUFDdkIsUUFBUSxDQUFXO0lBRTNCLFlBQTZCLE1BQTRCLEVBQW1CLEtBQXFDO1FBQXBGLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQW1CLFVBQUssR0FBTCxLQUFLLENBQWdDO1FBQy9HLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsc0dBQXNHO1FBQ3RHLGdGQUFnRjtRQUNoRixtRkFBbUY7UUFDbkYsOEVBQThFO1FBQzlFLElBQUkscUJBQThDLENBQUM7UUFDbkQsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVoRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1lBQzNDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxNQUFNLGNBQWMsR0FBRyxJQUFBLDRCQUFrQixFQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBRS9DLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSw0QkFBWSxDQUNwQixzQ0FBc0M7MEJBQ3BDLHNLQUFzSzswQkFDdEssMEJBQTBCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2dCQUVELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxxQkFBcUIsSUFBSSxJQUFBLGdCQUFTLEVBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztvQkFDOUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsSixTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixDQUFDO2dCQUVELHFCQUFxQixHQUFHLGNBQWMsQ0FBQztnQkFFdkMsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsa0RBQWtELEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzNILE1BQU0sY0FBYyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsb0JBQW9CLENBQ2hFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO29CQUVGLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRTt3QkFDakYsT0FBTyxFQUFFLGNBQWM7cUJBQ3hCLENBQUMsQ0FBQyxDQUFDO29CQUNKLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBRTFDLDJFQUEyRTtvQkFDM0Usc0NBQXNDO29CQUN0QyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDNUIsU0FBUztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuRUQsMEVBbUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29udGV4dHByb3ZpZGVycyBmcm9tICcuLi8uLi8uLi9jb250ZXh0LXByb3ZpZGVycyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xraXRTZXJ2aWNlcyB9IGZyb20gJy4uLy4uLy4uL3Rvb2xraXQvcHJpdmF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgSU8gfSBmcm9tICcuLi8uLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSUNvbnRleHRTdG9yZSB9IGZyb20gJy4uL2NvbnRleHQtc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRBc3NlbWJseVNvdXJjZSwgSVJlYWRhYmxlQ2xvdWRBc3NlbWJseSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG1pc3NpbmdDb250ZXh0S2V5cyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBlcXVhbFNldHMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3NldHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlQcm9wcyB7XG4gIC8qKlxuICAgKiBBV1Mgb2JqZWN0ICh1c2VkIGJ5IGNvbnRleHRwcm92aWRlcilcbiAgICogQGRlcHJlY2F0ZWQgY29udGV4dCBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIHRvb2xraXQgaXRzZWxmXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlczogVG9vbGtpdFNlcnZpY2VzO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbiB0byByZWFkIGFuZCB3cml0ZSBjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0U3RvcmU6IElDb250ZXh0U3RvcmU7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBjb250ZXh0IGxvb2t1cHMuXG4gICAqXG4gICAqIFByb2R1Y2luZyBhIGBjeGFwaS5DbG91ZEFzc2VtYmx5YCB3aWxsIGZhaWwgaWYgdGhpcyBpcyBkaXNhYmxlZCBhbmQgY29udGV4dCBsb29rdXBzIG5lZWQgdG8gYmUgcGVyZm9ybWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIENsb3VkQXNzZW1ibHlTb3VyY2UgdGhhdCB3cmFwcyBhbm90aGVyIENsb3VkQXNzZW1ibHlTb3VyY2UgYW5kIHJ1bnMgYSBsb29rdXAgbG9vcCBvbiBpdFxuICpcbiAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgdW5kZXJseWluZyBDbG91ZEFzc2VtYmx5U291cmNlIHByb2R1Y2VzIGEgbWFuaWZlc3RcbiAqIHdpdGggcHJvdmlkZXIgcXVlcmllcyBpbiBpdCwgdGhlIGBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5U291cmNlYCB3aWxsXG4gKiBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgY29udGV4dCBsb29rdXBzIGFuZCBpbnZva2UgdGhlIHVuZGVybHlpbmdcbiAqIGBDbG91ZEFzc2VtYmx5U291cmNlYCBhZ2FpbiB3aXRoIHRoZXcgbWlzc2luZyBjb250ZXh0IGluZm9ybWF0aW9uLlxuICpcbiAqIFRoaXMgaXMgb25seSB1c2VmdWwgaWYgdGhlIHVuZGVybHlpbmcgYENsb3VkQXNzZW1ibHlTb3VyY2VgIGNhbiByZXNwb25kIHRvXG4gKiB0aGlzIG5ldyBjb250ZXh0IGluZm9ybWF0aW9uIChpdCBtdXN0IGJlIGEgQ0RLIGFwcCBzb3VyY2UpOyBpZiBpdCBpcyBqdXN0IGFcbiAqIHN0YXRpYyBkaXJlY3RvcnksIHRoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBhc3NlbWJseSB3b24ndCBjaGFuZ2UgaW4gcmVzcG9uc2VcbiAqIHRvIGNvbnRleHQuXG4gKlxuICogVGhlIGNvbnRleHQgaXMgcGFzc2VkIGJldHdlZW4gYENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlTb3VyY2VgIGFuZCB0aGUgd3JhcHBlZFxuICogY2xvdWQgYXNzZW1ibHkgc291cmNlIHZpYSBhIGNvbnRleCBmaWxlIG9uIGRpc2ssIHNvIHRoZSB3cmFwcGVkIGFzc2VtYmx5IHNvdXJjZVxuICogc2hvdWxkIHJlLXJlYWQgdGhlIGNvbnRleHQgZmlsZSBvbiBldmVyeSBpbnZvY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVNvdXJjZSBpbXBsZW1lbnRzIElDbG91ZEFzc2VtYmx5U291cmNlIHtcbiAgcHJpdmF0ZSBjYW5Mb29rdXA6IGJvb2xlYW47XG4gIHByaXZhdGUgY29udGV4dDogSUNvbnRleHRTdG9yZTtcbiAgcHJpdmF0ZSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzb3VyY2U6IElDbG91ZEFzc2VtYmx5U291cmNlLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5UHJvcHMpIHtcbiAgICB0aGlzLmNhbkxvb2t1cCA9IHByb3BzLmxvb2t1cHMgPz8gdHJ1ZTtcbiAgICB0aGlzLmNvbnRleHQgPSBwcm9wcy5jb250ZXh0U3RvcmU7XG4gICAgdGhpcy5pb0hlbHBlciA9IHByb3BzLnNlcnZpY2VzLmlvSGVscGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2R1Y2UgYSBDbG91ZCBBc3NlbWJseSwgaS5lLiBhIHNldCBvZiBzdGFja3NcbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcm9kdWNlKCk6IFByb21pc2U8SVJlYWRhYmxlQ2xvdWRBc3NlbWJseT4ge1xuICAgIC8vIFdlIG1heSBuZWVkIHRvIHJ1biB0aGUgY2xvdWQgYXNzZW1ibHkgc291cmNlIG11bHRpcGxlIHRpbWVzIGluIG9yZGVyIHRvIHNhdGlzZnkgYWxsIG1pc3NpbmcgY29udGV4dFxuICAgIC8vIChXaGVuIHRoZSBzb3VyY2UgcHJvZHVjZXIgcnVucywgaXQgd2lsbCB0ZWxsIHVzIGFib3V0IGNvbnRleHQgaXQgd2FudHMgdG8gdXNlXG4gICAgLy8gYnV0IGl0IG1pc3NpbmcuIFdlJ2xsIHRoZW4gbG9vayB1cCB0aGUgY29udGV4dCBhbmQgcnVuIHRoZSBleGVjdXRhYmxlIGFnYWluLCBhbmRcbiAgICAvLyBhZ2FpbiwgdW50aWwgaXQgZG9lc24ndCBjb21wbGFpbiBhbnltb3JlIG9yIHdlJ3ZlIHN0b3BwZWQgbWFraW5nIHByb2dyZXNzKS5cbiAgICBsZXQgcHJldmlvdXNseU1pc3NpbmdLZXlzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmVhZGFibGVBc20gPSBhd2FpdCB0aGlzLnNvdXJjZS5wcm9kdWNlKCk7XG5cbiAgICAgIGNvbnN0IGFzc2VtYmx5ID0gcmVhZGFibGVBc20uY2xvdWRBc3NlbWJseTtcbiAgICAgIGlmIChhc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nICYmIGFzc2VtYmx5Lm1hbmlmZXN0Lm1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBtaXNzaW5nS2V5c1NldCA9IG1pc3NpbmdDb250ZXh0S2V5cyhhc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nKTtcbiAgICAgICAgY29uc3QgbWlzc2luZ0tleXMgPSBBcnJheS5mcm9tKG1pc3NpbmdLZXlzU2V0KTtcblxuICAgICAgICBpZiAoIXRoaXMuY2FuTG9va3VwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgICAgICdDb250ZXh0IGxvb2t1cHMgaGF2ZSBiZWVuIGRpc2FibGVkLiAnXG4gICAgICAgICAgICArICdNYWtlIHN1cmUgYWxsIG5lY2Vzc2FyeSBjb250ZXh0IGlzIGFscmVhZHkgaW4gXFwnY2RrLmNvbnRleHQuanNvblxcJyBieSBydW5uaW5nIFxcJ2NkayBzeW50aFxcJyBvbiBhIG1hY2hpbmUgd2l0aCBzdWZmaWNpZW50IEFXUyBjcmVkZW50aWFscyBhbmQgY29tbWl0dGluZyB0aGUgcmVzdWx0LiAnXG4gICAgICAgICAgICArIGBNaXNzaW5nIGNvbnRleHQga2V5czogJyR7bWlzc2luZ0tleXMuam9pbignLCAnKX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHJ5TG9va3VwID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByZXZpb3VzbHlNaXNzaW5nS2V5cyAmJiBlcXVhbFNldHMobWlzc2luZ0tleXNTZXQsIHByZXZpb3VzbHlNaXNzaW5nS2V5cykpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTAyNDAubXNnKCdOb3QgbWFraW5nIHByb2dyZXNzIHRyeWluZyB0byByZXNvbHZlIGVudmlyb25tZW50YWwgY29udGV4dC4gR2l2aW5nIHVwLicsIHsgbWlzc2luZ0tleXMgfSkpO1xuICAgICAgICAgIHRyeUxvb2t1cCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNseU1pc3NpbmdLZXlzID0gbWlzc2luZ0tleXNTZXQ7XG5cbiAgICAgICAgaWYgKHRyeUxvb2t1cCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMDI0MS5tc2coJ1NvbWUgY29udGV4dCBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nLiBGZXRjaGluZy4uLicsIHsgbWlzc2luZ0tleXMgfSkpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHRVcGRhdGVzID0gYXdhaXQgY29udGV4dHByb3ZpZGVycy5wcm92aWRlQ29udGV4dFZhbHVlcyhcbiAgICAgICAgICAgIGFzc2VtYmx5Lm1hbmlmZXN0Lm1pc3NpbmcsXG4gICAgICAgICAgICB0aGlzLnByb3BzLnNlcnZpY2VzLnNka1Byb3ZpZGVyLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXJ2aWNlcy5wbHVnaW5Ib3N0LFxuICAgICAgICAgICAgdGhpcy5pb0hlbHBlcixcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0kwMDQyLm1zZygnV3JpdGluZyBjb250ZXh0IHVwZGF0ZXMuLi4nLCB7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0VXBkYXRlcyxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb250ZXh0LnVwZGF0ZShjb250ZXh0VXBkYXRlcyk7XG5cbiAgICAgICAgICAvLyBFeGVjdXRlIGFnYWluLiBVbmxvY2sgdGhlIGFzc2VtYmx5IGhlcmUgc28gdGhhdCB0aGUgcHJvZHVjZXIgY2FuIGFjcXVpcmVcbiAgICAgICAgICAvLyBhIHJlYWQgbG9jayBvbiB0aGUgZGlyZWN0b3J5IGFnYWluLlxuICAgICAgICAgIGF3YWl0IHJlYWRhYmxlQXNtLl91bmxvY2soKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVhZGFibGVBc207XG4gICAgfVxuICB9XG59XG4iXX0=
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1hd2FyZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb250ZXh0LWF3YXJlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBK0Q7QUFFL0Qsa0VBQThEO0FBRTlELDhDQUFzQztBQUd0Qyx1Q0FBK0M7QUFDL0MsNkNBQStDO0FBd0IvQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQWEsK0JBQStCO0lBS2I7SUFBK0M7SUFKcEUsU0FBUyxDQUFVO0lBQ25CLE9BQU8sQ0FBZ0I7SUFDdkIsUUFBUSxDQUFXO0lBRTNCLFlBQTZCLE1BQTRCLEVBQW1CLEtBQXFDO1FBQXBGLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQW1CLFVBQUssR0FBTCxLQUFLLENBQWdDO1FBQy9HLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsc0dBQXNHO1FBQ3RHLGdGQUFnRjtRQUNoRixtRkFBbUY7UUFDbkYsOEVBQThFO1FBQzlFLElBQUkscUJBQThDLENBQUM7UUFDbkQsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVoRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1lBQzNDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxNQUFNLGNBQWMsR0FBRyxJQUFBLDRCQUFrQixFQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBRS9DLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSw0QkFBWSxDQUNwQix3QkFBd0IsRUFDeEIsc0NBQXNDOzBCQUNwQyxzS0FBc0s7MEJBQ3RLLDBCQUEwQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0QsQ0FBQztnQkFFRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUkscUJBQXFCLElBQUksSUFBQSxnQkFBUyxFQUFDLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyx5RUFBeUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbEosU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDcEIsQ0FBQztnQkFFRCxxQkFBcUIsR0FBRyxjQUFjLENBQUM7Z0JBRXZDLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMzSCxNQUFNLGNBQWMsR0FBRyxNQUFNLGdCQUFnQixDQUFDLG9CQUFvQixDQUNoRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQzlCLElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztvQkFFRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUU7d0JBQ2pGLE9BQU8sRUFBRSxjQUFjO3FCQUN4QixDQUFDLENBQUMsQ0FBQztvQkFDSixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUUxQywyRUFBMkU7b0JBQzNFLHNDQUFzQztvQkFDdEMsTUFBTSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzVCLFNBQVM7Z0JBQ1gsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBcEVELDBFQW9FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnRleHRwcm92aWRlcnMgZnJvbSAnLi4vLi4vLi4vY29udGV4dC1wcm92aWRlcnMnO1xuaW1wb3J0IHR5cGUgeyBUb29sa2l0U2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi90b29sa2l0L3ByaXZhdGUnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9pby9wcml2YXRlJztcbmltcG9ydCB7IElPIH0gZnJvbSAnLi4vLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0U3RvcmUgfSBmcm9tICcuLi9jb250ZXh0LXN0b3JlJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQXNzZW1ibHlTb3VyY2UsIElSZWFkYWJsZUNsb3VkQXNzZW1ibHkgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBtaXNzaW5nQ29udGV4dEtleXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZXF1YWxTZXRzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9zZXRzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5UHJvcHMge1xuICAvKipcbiAgICogQVdTIG9iamVjdCAodXNlZCBieSBjb250ZXh0cHJvdmlkZXIpXG4gICAqIEBkZXByZWNhdGVkIGNvbnRleHQgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSB0b29sa2l0IGl0c2VsZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZXM6IFRvb2xraXRTZXJ2aWNlcztcblxuICAvKipcbiAgICogTG9jYXRpb24gdG8gcmVhZCBhbmQgd3JpdGUgY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dFN0b3JlOiBJQ29udGV4dFN0b3JlO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgY29udGV4dCBsb29rdXBzLlxuICAgKlxuICAgKiBQcm9kdWNpbmcgYSBgY3hhcGkuQ2xvdWRBc3NlbWJseWAgd2lsbCBmYWlsIGlmIHRoaXMgaXMgZGlzYWJsZWQgYW5kIGNvbnRleHQgbG9va3VwcyBuZWVkIHRvIGJlIHBlcmZvcm1lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3Vwcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBDbG91ZEFzc2VtYmx5U291cmNlIHRoYXQgd3JhcHMgYW5vdGhlciBDbG91ZEFzc2VtYmx5U291cmNlIGFuZCBydW5zIGEgbG9va3VwIGxvb3Agb24gaXRcbiAqXG4gKiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHVuZGVybHlpbmcgQ2xvdWRBc3NlbWJseVNvdXJjZSBwcm9kdWNlcyBhIG1hbmlmZXN0XG4gKiB3aXRoIHByb3ZpZGVyIHF1ZXJpZXMgaW4gaXQsIHRoZSBgQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVNvdXJjZWAgd2lsbFxuICogcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgbG9va3VwcyBhbmQgaW52b2tlIHRoZSB1bmRlcmx5aW5nXG4gKiBgQ2xvdWRBc3NlbWJseVNvdXJjZWAgYWdhaW4gd2l0aCB0aGV3IG1pc3NpbmcgY29udGV4dCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUaGlzIGlzIG9ubHkgdXNlZnVsIGlmIHRoZSB1bmRlcmx5aW5nIGBDbG91ZEFzc2VtYmx5U291cmNlYCBjYW4gcmVzcG9uZCB0b1xuICogdGhpcyBuZXcgY29udGV4dCBpbmZvcm1hdGlvbiAoaXQgbXVzdCBiZSBhIENESyBhcHAgc291cmNlKTsgaWYgaXQgaXMganVzdCBhXG4gKiBzdGF0aWMgZGlyZWN0b3J5LCB0aGVuIHRoZSBjb250ZW50cyBvZiB0aGUgYXNzZW1ibHkgd29uJ3QgY2hhbmdlIGluIHJlc3BvbnNlXG4gKiB0byBjb250ZXh0LlxuICpcbiAqIFRoZSBjb250ZXh0IGlzIHBhc3NlZCBiZXR3ZWVuIGBDb250ZXh0QXdhcmVDbG91ZEFzc2VtYmx5U291cmNlYCBhbmQgdGhlIHdyYXBwZWRcbiAqIGNsb3VkIGFzc2VtYmx5IHNvdXJjZSB2aWEgYSBjb250ZXggZmlsZSBvbiBkaXNrLCBzbyB0aGUgd3JhcHBlZCBhc3NlbWJseSBzb3VyY2VcbiAqIHNob3VsZCByZS1yZWFkIHRoZSBjb250ZXh0IGZpbGUgb24gZXZlcnkgaW52b2NhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRleHRBd2FyZUNsb3VkQXNzZW1ibHlTb3VyY2UgaW1wbGVtZW50cyBJQ2xvdWRBc3NlbWJseVNvdXJjZSB7XG4gIHByaXZhdGUgY2FuTG9va3VwOiBib29sZWFuO1xuICBwcml2YXRlIGNvbnRleHQ6IElDb250ZXh0U3RvcmU7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc291cmNlOiBJQ2xvdWRBc3NlbWJseVNvdXJjZSwgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQ29udGV4dEF3YXJlQ2xvdWRBc3NlbWJseVByb3BzKSB7XG4gICAgdGhpcy5jYW5Mb29rdXAgPSBwcm9wcy5sb29rdXBzID8/IHRydWU7XG4gICAgdGhpcy5jb250ZXh0ID0gcHJvcHMuY29udGV4dFN0b3JlO1xuICAgIHRoaXMuaW9IZWxwZXIgPSBwcm9wcy5zZXJ2aWNlcy5pb0hlbHBlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9kdWNlIGEgQ2xvdWQgQXNzZW1ibHksIGkuZS4gYSBzZXQgb2Ygc3RhY2tzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJvZHVjZSgpOiBQcm9taXNlPElSZWFkYWJsZUNsb3VkQXNzZW1ibHk+IHtcbiAgICAvLyBXZSBtYXkgbmVlZCB0byBydW4gdGhlIGNsb3VkIGFzc2VtYmx5IHNvdXJjZSBtdWx0aXBsZSB0aW1lcyBpbiBvcmRlciB0byBzYXRpc2Z5IGFsbCBtaXNzaW5nIGNvbnRleHRcbiAgICAvLyAoV2hlbiB0aGUgc291cmNlIHByb2R1Y2VyIHJ1bnMsIGl0IHdpbGwgdGVsbCB1cyBhYm91dCBjb250ZXh0IGl0IHdhbnRzIHRvIHVzZVxuICAgIC8vIGJ1dCBpdCBtaXNzaW5nLiBXZSdsbCB0aGVuIGxvb2sgdXAgdGhlIGNvbnRleHQgYW5kIHJ1biB0aGUgZXhlY3V0YWJsZSBhZ2FpbiwgYW5kXG4gICAgLy8gYWdhaW4sIHVudGlsIGl0IGRvZXNuJ3QgY29tcGxhaW4gYW55bW9yZSBvciB3ZSd2ZSBzdG9wcGVkIG1ha2luZyBwcm9ncmVzcykuXG4gICAgbGV0IHByZXZpb3VzbHlNaXNzaW5nS2V5czogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlYWRhYmxlQXNtID0gYXdhaXQgdGhpcy5zb3VyY2UucHJvZHVjZSgpO1xuXG4gICAgICBjb25zdCBhc3NlbWJseSA9IHJlYWRhYmxlQXNtLmNsb3VkQXNzZW1ibHk7XG4gICAgICBpZiAoYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyAmJiBhc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbWlzc2luZ0tleXNTZXQgPSBtaXNzaW5nQ29udGV4dEtleXMoYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyk7XG4gICAgICAgIGNvbnN0IG1pc3NpbmdLZXlzID0gQXJyYXkuZnJvbShtaXNzaW5nS2V5c1NldCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkxvb2t1cCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICAgICAnQ29udGV4dExvb2t1cHNEaXNhYmxlZCcsXG4gICAgICAgICAgICAnQ29udGV4dCBsb29rdXBzIGhhdmUgYmVlbiBkaXNhYmxlZC4gJ1xuICAgICAgICAgICAgKyAnTWFrZSBzdXJlIGFsbCBuZWNlc3NhcnkgY29udGV4dCBpcyBhbHJlYWR5IGluIFxcJ2Nkay5jb250ZXh0Lmpzb25cXCcgYnkgcnVubmluZyBcXCdjZGsgc3ludGhcXCcgb24gYSBtYWNoaW5lIHdpdGggc3VmZmljaWVudCBBV1MgY3JlZGVudGlhbHMgYW5kIGNvbW1pdHRpbmcgdGhlIHJlc3VsdC4gJ1xuICAgICAgICAgICAgKyBgTWlzc2luZyBjb250ZXh0IGtleXM6ICcke21pc3NpbmdLZXlzLmpvaW4oJywgJyl9J2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRyeUxvb2t1cCA9IHRydWU7XG4gICAgICAgIGlmIChwcmV2aW91c2x5TWlzc2luZ0tleXMgJiYgZXF1YWxTZXRzKG1pc3NpbmdLZXlzU2V0LCBwcmV2aW91c2x5TWlzc2luZ0tleXMpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0kwMjQwLm1zZygnTm90IG1ha2luZyBwcm9ncmVzcyB0cnlpbmcgdG8gcmVzb2x2ZSBlbnZpcm9ubWVudGFsIGNvbnRleHQuIEdpdmluZyB1cC4nLCB7IG1pc3NpbmdLZXlzIH0pKTtcbiAgICAgICAgICB0cnlMb29rdXAgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzbHlNaXNzaW5nS2V5cyA9IG1pc3NpbmdLZXlzU2V0O1xuXG4gICAgICAgIGlmICh0cnlMb29rdXApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfQVNTRU1CTFlfSTAyNDEubXNnKCdTb21lIGNvbnRleHQgaW5mb3JtYXRpb24gaXMgbWlzc2luZy4gRmV0Y2hpbmcuLi4nLCB7IG1pc3NpbmdLZXlzIH0pKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0VXBkYXRlcyA9IGF3YWl0IGNvbnRleHRwcm92aWRlcnMucHJvdmlkZUNvbnRleHRWYWx1ZXMoXG4gICAgICAgICAgICBhc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nLFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXJ2aWNlcy5zZGtQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMucHJvcHMuc2VydmljZXMucGx1Z2luSG9zdCxcbiAgICAgICAgICAgIHRoaXMuaW9IZWxwZXIsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMDA0Mi5tc2coJ1dyaXRpbmcgY29udGV4dCB1cGRhdGVzLi4uJywge1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dFVwZGF0ZXMsXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29udGV4dC51cGRhdGUoY29udGV4dFVwZGF0ZXMpO1xuXG4gICAgICAgICAgLy8gRXhlY3V0ZSBhZ2Fpbi4gVW5sb2NrIHRoZSBhc3NlbWJseSBoZXJlIHNvIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBhY3F1aXJlXG4gICAgICAgICAgLy8gYSByZWFkIGxvY2sgb24gdGhlIGRpcmVjdG9yeSBhZ2Fpbi5cbiAgICAgICAgICBhd2FpdCByZWFkYWJsZUFzbS5fdW5sb2NrKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWRhYmxlQXNtO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -5,9 +5,12 @@ interface ExecOptions {
5
5
  [key: string]: string | undefined;
6
6
  };
7
7
  cwd?: string;
8
+ errorCodeFile?: string;
8
9
  }
9
10
  /**
10
11
  * Execute a command line in a child process
12
+ *
13
+ * Based on the errors it throws, this assumes the process it is executing is a CDK app.
11
14
  */
12
15
  export declare function execInChildProcess(commandAndArgs: string, options?: ExecOptions): Promise<void>;
13
16
  export {};
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.execInChildProcess = execInChildProcess;
4
- const child_process = require("node:child_process");
4
+ const child_process = require("child_process");
5
+ const fs_1 = require("fs");
5
6
  // eslint-disable-next-line @typescript-eslint/no-require-imports
6
7
  const split = require("split2");
7
8
  const toolkit_error_1 = require("../../../toolkit/toolkit-error");
8
9
  /**
9
10
  * Execute a command line in a child process
11
+ *
12
+ * Based on the errors it throws, this assumes the process it is executing is a CDK app.
10
13
  */
11
14
  async function execInChildProcess(commandAndArgs, options = {}) {
12
15
  return new Promise((ok, fail) => {
@@ -49,20 +52,50 @@ async function execInChildProcess(commandAndArgs, options = {}) {
49
52
  stderr.push(line);
50
53
  return eventPublisher('data_stderr', line);
51
54
  });
52
- proc.on('error', fail);
55
+ proc.on('error', (e) => {
56
+ fail(toolkit_error_1.AssemblyError.withCause(`Failed to execute CDK app: ${commandAndArgs}`, e));
57
+ });
53
58
  proc.on('exit', code => {
54
59
  if (code === 0) {
55
60
  return ok();
56
61
  }
57
62
  else {
63
+ const stdErrString = stderr.join('\n');
58
64
  let cause;
59
65
  if (stderr.length) {
60
- cause = new Error(stderr.join('\n'));
66
+ cause = new Error(stdErrString);
61
67
  cause.name = 'ExecutionError';
62
68
  }
63
- return fail(toolkit_error_1.AssemblyError.withCause(`${commandAndArgs}: Subprocess exited with error ${code}`, cause));
69
+ let error = toolkit_error_1.AssemblyError.withCause(`${commandAndArgs}: Subprocess exited with error ${code}`, cause);
70
+ // Search for an error code, and throw that if we have it
71
+ if (options.errorCodeFile) {
72
+ const contents = tryReadFile(options.errorCodeFile);
73
+ if (contents) {
74
+ const errorInStdErr = contents
75
+ .split('\n')
76
+ .find(c => stdErrString.includes(`${SYNTH_ERROR_CODE_MARKERS[0]}${c}${SYNTH_ERROR_CODE_MARKERS[1]}`));
77
+ if (errorInStdErr) {
78
+ // Attach the synth error code. We don't need to change the message; the underlying error will already have been
79
+ // printed to stderr.
80
+ error.attachSynthesisErrorCode(errorInStdErr);
81
+ }
82
+ }
83
+ }
84
+ return fail(error);
64
85
  }
65
86
  });
66
87
  });
67
88
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4ZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsZ0RBNkRDO0FBN0VELG9EQUFvRDtBQUNwRCxpRUFBaUU7QUFDakUsZ0NBQWlDO0FBQ2pDLGtFQUErRDtBQVUvRDs7R0FFRztBQUNJLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxjQUFzQixFQUFFLFVBQXVCLEVBQUU7SUFDeEYsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNwQyw4Q0FBOEM7UUFDOUMsRUFBRTtRQUNGLG9FQUFvRTtRQUNwRSx3RUFBd0U7UUFDeEUsMERBQTBEO1FBQzFELEVBQUU7UUFDRiwwRkFBMEY7UUFDMUYsc0ZBQXNGO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQy9DLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2hCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUVoQiwwRkFBMEY7WUFDMUYsMkZBQTJGO1lBQzNGLGlEQUFpRDtZQUNqRCx1RkFBdUY7WUFDdkYsNENBQTRDO1lBQzVDLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQW1CLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvRSxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssYUFBYTtvQkFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNCLE9BQU87Z0JBQ1QsS0FBSyxhQUFhO29CQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsT0FBTztnQkFDVCxLQUFLLE1BQU0sQ0FBQztnQkFDWixLQUFLLE9BQU87b0JBQ1YsT0FBTztZQUNYLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFFbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixPQUFPLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDZixPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksS0FBd0IsQ0FBQztnQkFDN0IsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xCLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLEtBQUssQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsNkJBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxjQUFjLGtDQUFrQyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pHLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5pbXBvcnQgc3BsaXQgPSByZXF1aXJlKCdzcGxpdDInKTtcbmltcG9ydCB7IEFzc2VtYmx5RXJyb3IgfSBmcm9tICcuLi8uLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG50eXBlIEV2ZW50UHVibGlzaGVyID0gKGV2ZW50OiAnb3BlbicgfCAnZGF0YV9zdGRvdXQnIHwgJ2RhdGFfc3RkZXJyJyB8ICdjbG9zZScsIGxpbmU6IHN0cmluZykgPT4gdm9pZDtcblxuaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgZXZlbnRQdWJsaXNoZXI/OiBFdmVudFB1Ymxpc2hlcjtcbiAgZW52PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbiAgY3dkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgYSBjb21tYW5kIGxpbmUgaW4gYSBjaGlsZCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjSW5DaGlsZFByb2Nlc3MoY29tbWFuZEFuZEFyZ3M6IHN0cmluZywgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKG9rLCBmYWlsKSA9PiB7XG4gICAgLy8gV2UgdXNlIGEgc2xpZ2h0bHkgbG93ZXItbGV2ZWwgaW50ZXJmYWNlIHRvOlxuICAgIC8vXG4gICAgLy8gLSBQYXNzIGFyZ3VtZW50cyBpbiBhbiBhcnJheSBpbnN0ZWFkIG9mIGEgc3RyaW5nLCB0byBnZXQgYXJvdW5kIGFcbiAgICAvLyAgIG51bWJlciBvZiBxdW90aW5nIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBpbnRlcm1lZGlhdGUgc2hlbGwgbGF5ZXJcbiAgICAvLyAgICh3aGljaCB3b3VsZCBiZSBkaWZmZXJlbnQgYmV0d2VlbiBMaW51eCBhbmQgV2luZG93cykuXG4gICAgLy9cbiAgICAvLyAtIFdlIGhhdmUgdG8gY2FwdHVyZSBhbnkgb3V0cHV0IHRvIHN0ZG91dCBhbmQgc3RkZXJyIHNwIHdlIGNhbiBwYXNzIGl0IG9uIHRvIHRoZSBJb0hvc3RcbiAgICAvLyAgIFRvIGVuc3VyZSBtZXNzYWdlcyBnZXQgdG8gdGhlIHVzZXIgZmFzdCwgd2Ugd2lsbCBlbWl0IGV2ZXJ5IGZ1bGwgbGluZSB3ZSByZWNlaXZlLlxuICAgIGNvbnN0IHByb2MgPSBjaGlsZF9wcm9jZXNzLnNwYXduKGNvbW1hbmRBbmRBcmdzLCB7XG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgICBkZXRhY2hlZDogZmFsc2UsXG4gICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgZW52OiBvcHRpb25zLmVudixcblxuICAgICAgLy8gV2UgYXJlIHVzaW5nICdzaGVsbDogdHJ1ZScgb24gcHVycHJvc2UuIFRyYWRpdGlvbmFsbHkgd2UgaGF2ZSBhbGxvd2VkIHNoZWxsIGZlYXR1cmVzIGluXG4gICAgICAvLyB0aGlzIHN0cmluZywgc28gd2UgaGF2ZSB0byBjb250aW51ZSB0byBkbyBzbyBpbnRvIHRoZSBmdXR1cmUuIE9uIFdpbmRvd3MsIHRoaXMgaXMgc2ltcGx5XG4gICAgICAvLyBuZWNlc3NhcnkgdG8gcnVuIC5iYXQgYW5kIC5jbWQgZmlsZXMgcHJvcGVybHkuXG4gICAgICAvLyBDb2RlIHNjYW5uaW5nIHRvb2xzIHdpbGwgZmxhZyB0aGlzIGFzIGEgcmlzay4gVGhlIGlucHV0IGNvbWVzIGZyb20gYSB0cnVzdGVkIHNvdXJjZSxcbiAgICAgIC8vIHNvIGl0IGRvZXMgbm90IHJlcHJlc2VudCBhIHNlY3VyaXR5IHJpc2suXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlciA9IG9wdGlvbnMuZXZlbnRQdWJsaXNoZXIgPz8gKCh0eXBlLCBsaW5lKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnZGF0YV9zdGRvdXQnOlxuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGxpbmUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnZGF0YV9zdGRlcnInOlxuICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGxpbmUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAnb3Blbic6XG4gICAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGRlcnIgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgcHJvYy5zdGRvdXQucGlwZShzcGxpdCgpKS5vbignZGF0YScsIChsaW5lKSA9PiBldmVudFB1Ymxpc2hlcignZGF0YV9zdGRvdXQnLCBsaW5lKSk7XG4gICAgcHJvYy5zdGRlcnIucGlwZShzcGxpdCgpKS5vbignZGF0YScsIChsaW5lKSA9PiB7XG4gICAgICBzdGRlcnIucHVzaChsaW5lKTtcbiAgICAgIHJldHVybiBldmVudFB1Ymxpc2hlcignZGF0YV9zdGRlcnInLCBsaW5lKTtcbiAgICB9KTtcblxuICAgIHByb2Mub24oJ2Vycm9yJywgZmFpbCk7XG5cbiAgICBwcm9jLm9uKCdleGl0JywgY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gb2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjYXVzZTogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdGRlcnIubGVuZ3RoKSB7XG4gICAgICAgICAgY2F1c2UgPSBuZXcgRXJyb3Ioc3RkZXJyLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgICBjYXVzZS5uYW1lID0gJ0V4ZWN1dGlvbkVycm9yJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbChBc3NlbWJseUVycm9yLndpdGhDYXVzZShgJHtjb21tYW5kQW5kQXJnc306IFN1YnByb2Nlc3MgZXhpdGVkIHdpdGggZXJyb3IgJHtjb2RlfWAsIGNhdXNlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
89
+ const SYNTH_ERROR_CODE_MARKERS = ['«', '»'];
90
+ function tryReadFile(name) {
91
+ try {
92
+ return (0, fs_1.readFileSync)(name, 'utf-8');
93
+ }
94
+ catch (e) {
95
+ if (e.code === 'ENOENT') {
96
+ return undefined;
97
+ }
98
+ throw e;
99
+ }
100
+ }
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4ZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvQkEsZ0RBb0ZDO0FBeEdELCtDQUErQztBQUMvQywyQkFBa0M7QUFDbEMsaUVBQWlFO0FBQ2pFLGdDQUFpQztBQUNqQyxrRUFBK0Q7QUFXL0Q7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxjQUFzQixFQUFFLFVBQXVCLEVBQUU7SUFDeEYsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNwQyw4Q0FBOEM7UUFDOUMsRUFBRTtRQUNGLG9FQUFvRTtRQUNwRSx3RUFBd0U7UUFDeEUsMERBQTBEO1FBQzFELEVBQUU7UUFDRiwwRkFBMEY7UUFDMUYsc0ZBQXNGO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQy9DLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2hCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUVoQiwwRkFBMEY7WUFDMUYsMkZBQTJGO1lBQzNGLGlEQUFpRDtZQUNqRCx1RkFBdUY7WUFDdkYsNENBQTRDO1lBQzVDLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQW1CLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvRSxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssYUFBYTtvQkFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNCLE9BQU87Z0JBQ1QsS0FBSyxhQUFhO29CQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLEtB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QUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuaW1wb3J0IHNwbGl0ID0gcmVxdWlyZSgnc3BsaXQyJyk7XG5pbXBvcnQgeyBBc3NlbWJseUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcblxudHlwZSBFdmVudFB1Ymxpc2hlciA9IChldmVudDogJ29wZW4nIHwgJ2RhdGFfc3Rkb3V0JyB8ICdkYXRhX3N0ZGVycicgfCAnY2xvc2UnLCBsaW5lOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIGV2ZW50UHVibGlzaGVyPzogRXZlbnRQdWJsaXNoZXI7XG4gIGVudj86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gIGN3ZD86IHN0cmluZztcbiAgZXJyb3JDb2RlRmlsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFeGVjdXRlIGEgY29tbWFuZCBsaW5lIGluIGEgY2hpbGQgcHJvY2Vzc1xuICpcbiAqIEJhc2VkIG9uIHRoZSBlcnJvcnMgaXQgdGhyb3dzLCB0aGlzIGFzc3VtZXMgdGhlIHByb2Nlc3MgaXQgaXMgZXhlY3V0aW5nIGlzIGEgQ0RLIGFwcC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWNJbkNoaWxkUHJvY2Vzcyhjb21tYW5kQW5kQXJnczogc3RyaW5nLCBvcHRpb25zOiBFeGVjT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigob2ssIGZhaWwpID0+IHtcbiAgICAvLyBXZSB1c2UgYSBzbGlnaHRseSBsb3dlci1sZXZlbCBpbnRlcmZhY2UgdG86XG4gICAgLy9cbiAgICAvLyAtIFBhc3MgYXJndW1lbnRzIGluIGFuIGFycmF5IGluc3RlYWQgb2YgYSBzdHJpbmcsIHRvIGdldCBhcm91bmQgYVxuICAgIC8vICAgbnVtYmVyIG9mIHF1b3RpbmcgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlIGludGVybWVkaWF0ZSBzaGVsbCBsYXllclxuICAgIC8vICAgKHdoaWNoIHdvdWxkIGJlIGRpZmZlcmVudCBiZXR3ZWVuIExpbnV4IGFuZCBXaW5kb3dzKS5cbiAgICAvL1xuICAgIC8vIC0gV2UgaGF2ZSB0byBjYXB0dXJlIGFueSBvdXRwdXQgdG8gc3Rkb3V0IGFuZCBzdGRlcnIgc3Agd2UgY2FuIHBhc3MgaXQgb24gdG8gdGhlIElvSG9zdFxuICAgIC8vICAgVG8gZW5zdXJlIG1lc3NhZ2VzIGdldCB0byB0aGUgdXNlciBmYXN0LCB3ZSB3aWxsIGVtaXQgZXZlcnkgZnVsbCBsaW5lIHdlIHJlY2VpdmUuXG4gICAgY29uc3QgcHJvYyA9IGNoaWxkX3Byb2Nlc3Muc3Bhd24oY29tbWFuZEFuZEFyZ3MsIHtcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICAgIGRldGFjaGVkOiBmYWxzZSxcbiAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuXG4gICAgICAvLyBXZSBhcmUgdXNpbmcgJ3NoZWxsOiB0cnVlJyBvbiBwdXJwcm9zZS4gVHJhZGl0aW9uYWxseSB3ZSBoYXZlIGFsbG93ZWQgc2hlbGwgZmVhdHVyZXMgaW5cbiAgICAgIC8vIHRoaXMgc3RyaW5nLCBzbyB3ZSBoYXZlIHRvIGNvbnRpbnVlIHRvIGRvIHNvIGludG8gdGhlIGZ1dHVyZS4gT24gV2luZG93cywgdGhpcyBpcyBzaW1wbHlcbiAgICAgIC8vIG5lY2Vzc2FyeSB0byBydW4gLmJhdCBhbmQgLmNtZCBmaWxlcyBwcm9wZXJseS5cbiAgICAgIC8vIENvZGUgc2Nhbm5pbmcgdG9vbHMgd2lsbCBmbGFnIHRoaXMgYXMgYSByaXNrLiBUaGUgaW5wdXQgY29tZXMgZnJvbSBhIHRydXN0ZWQgc291cmNlLFxuICAgICAgLy8gc28gaXQgZG9lcyBub3QgcmVwcmVzZW50IGEgc2VjdXJpdHkgcmlzay5cbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyID0gb3B0aW9ucy5ldmVudFB1Ymxpc2hlciA/PyAoKHR5cGUsIGxpbmUpID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdkYXRhX3N0ZG91dCc6XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUobGluZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdkYXRhX3N0ZGVycic6XG4gICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUobGluZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlICdvcGVuJzpcbiAgICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHN0ZGVyciA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBwcm9jLnN0ZG91dC5waXBlKHNwbGl0KCkpLm9uKCdkYXRhJywgKGxpbmUpID0+IGV2ZW50UHVibGlzaGVyKCdkYXRhX3N0ZG91dCcsIGxpbmUpKTtcbiAgICBwcm9jLnN0ZGVyci5waXBlKHNwbGl0KCkpLm9uKCdkYXRhJywgKGxpbmUpID0+IHtcbiAgICAgIHN0ZGVyci5wdXNoKGxpbmUpO1xuICAgICAgcmV0dXJuIGV2ZW50UHVibGlzaGVyKCdkYXRhX3N0ZGVycicsIGxpbmUpO1xuICAgIH0pO1xuXG4gICAgcHJvYy5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgZmFpbChBc3NlbWJseUVycm9yLndpdGhDYXVzZShgRmFpbGVkIHRvIGV4ZWN1dGUgQ0RLIGFwcDogJHtjb21tYW5kQW5kQXJnc31gLCBlKSk7XG4gICAgfSk7XG5cbiAgICBwcm9jLm9uKCdleGl0JywgY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gb2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0ZEVyclN0cmluZyA9IHN0ZGVyci5qb2luKCdcXG4nKTtcblxuICAgICAgICBsZXQgY2F1c2U6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc3RkZXJyLmxlbmd0aCkge1xuICAgICAgICAgIGNhdXNlID0gbmV3IEVycm9yKHN0ZEVyclN0cmluZyk7XG4gICAgICAgICAgY2F1c2UubmFtZSA9ICdFeGVjdXRpb25FcnJvcic7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3IgPSBBc3NlbWJseUVycm9yLndpdGhDYXVzZShgJHtjb21tYW5kQW5kQXJnc306IFN1YnByb2Nlc3MgZXhpdGVkIHdpdGggZXJyb3IgJHtjb2RlfWAsIGNhdXNlKTtcblxuICAgICAgICAvLyBTZWFyY2ggZm9yIGFuIGVycm9yIGNvZGUsIGFuZCB0aHJvdyB0aGF0IGlmIHdlIGhhdmUgaXRcbiAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3JDb2RlRmlsZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gdHJ5UmVhZEZpbGUob3B0aW9ucy5lcnJvckNvZGVGaWxlKTtcbiAgICAgICAgICBpZiAoY29udGVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ySW5TdGRFcnIgPSBjb250ZW50c1xuICAgICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAgIC5maW5kKGMgPT4gc3RkRXJyU3RyaW5nLmluY2x1ZGVzKGAke1NZTlRIX0VSUk9SX0NPREVfTUFSS0VSU1swXX0ke2N9JHtTWU5USF9FUlJPUl9DT0RFX01BUktFUlNbMV19YCkpO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3JJblN0ZEVycikge1xuICAgICAgICAgICAgICAvLyBBdHRhY2ggdGhlIHN5bnRoIGVycm9yIGNvZGUuIFdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBtZXNzYWdlOyB0aGUgdW5kZXJseWluZyBlcnJvciB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuXG4gICAgICAgICAgICAgIC8vIHByaW50ZWQgdG8gc3RkZXJyLlxuICAgICAgICAgICAgICBlcnJvci5hdHRhY2hTeW50aGVzaXNFcnJvckNvZGUoZXJyb3JJblN0ZEVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgU1lOVEhfRVJST1JfQ09ERV9NQVJLRVJTID0gWyfCqycsICfCuyddO1xuXG5mdW5jdGlvbiB0cnlSZWFkRmlsZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiByZWFkRmlsZVN5bmMobmFtZSwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGlmIChlLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG4iXX0=
@@ -35,7 +35,7 @@ function detectSynthvarConflicts(obj) {
35
35
  },
36
36
  set(target, prop, value) {
37
37
  if (['CDK_CONTEXT', 'CDK_OUTDIR'].includes(String(prop))) {
38
- throw new toolkit_error_1.ToolkitError('process.env is temporarily immutable. Set \'clobberEnv: false\' if you want to run multiple \'fromAssemblyBuilder\' synths concurrently');
38
+ throw new toolkit_error_1.ToolkitError('EnvImmutableDuringSynth', 'process.env is temporarily immutable. Set \'clobberEnv: false\' if you want to run multiple \'fromAssemblyBuilder\' synths concurrently');
39
39
  }
40
40
  target[prop] = value;
41
41
  return true;
@@ -48,4 +48,4 @@ function detectSynthvarConflicts(obj) {
48
48
  function missingContextKeys(missing) {
49
49
  return new Set((missing || []).map((m) => m.key));
50
50
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxrREFhQztBQTJCRCxnREFFQztBQWxERCxrRUFBOEQ7QUFFOUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUEyQjtJQUM3RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBRTNCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsdUJBQXVCLENBQUM7UUFDcEMsR0FBRyxPQUFPLENBQUMsR0FBRztRQUNkLEdBQUcsR0FBRztLQUNQLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUFtQixHQUFNO0lBQ3ZELE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ3BCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSTtZQUNkLE9BQVEsTUFBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSw0QkFBWSxDQUFDLHlJQUF5SSxDQUFDLENBQUM7WUFDcEssQ0FBQztZQUNBLE1BQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBMEI7SUFDM0QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1pc3NpbmdDb250ZXh0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5cbi8qKlxuICogVGVtcG9yYXJpbHkgb3ZlcndyaXRlIHRoZSBgcHJvY2Vzcy5lbnZgIHdpdGggYSBuZXcgYGVudmBcbiAqXG4gKiBXZSBtYWtlIHRoZSBlbnZpcm9ubWVudCBpbW11dGFibGUgaW4gY2FzZSB0aGVyZSBhcmUgYWNjaWRlbnRhbFxuICogY29uY3VycmVudCBhY2Nlc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlbXBvcmFyaWx5V3JpdGVFbnYoZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGNvbnN0IG9sZEVudiA9IHByb2Nlc3MuZW52O1xuXG4gIHByb2Nlc3MuZW52ID0gZGV0ZWN0U3ludGh2YXJDb25mbGljdHMoe1xuICAgIC4uLnByb2Nlc3MuZW52LFxuICAgIC4uLmVudixcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmRpc3Bvc2VdKCkge1xuICAgICAgcHJvY2Vzcy5lbnYgPSBvbGRFbnY7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gZW52aXJvbm1lbnQtbGlrZSBvYmplY3QgdGhhdCB0aHJvd3MgaWYgY2VydGFpbiBrZXlzIGFyZSBzZXRcbiAqXG4gKiBXZSBvbmx5IHRocm93IG9uIHNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjYXRjaCB0aGUgY2FzZSBvZlxuICogY29uY3VycmVudCBzeW50aHMuIFdlIGNhbid0IGRvIGFsbCB2YXJpYWJsZXMgYmVjYXVzZSB0aGVyZSBhcmUgc29tZVxuICogcm91dGluZXMgc29tZXdoZXJlIHRoYXQgbW9kaWZ5IHRoaW5ncyBsaWtlIGBKU0lJX0RFUFJFQ0FURURgIGdsb2JhbGx5LlxuICovXG5mdW5jdGlvbiBkZXRlY3RTeW50aHZhckNvbmZsaWN0czxBIGV4dGVuZHMgb2JqZWN0PihvYmo6IEEpIHtcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgIGlmIChbJ0NES19DT05URVhUJywgJ0NES19PVVRESVInXS5pbmNsdWRlcyhTdHJpbmcocHJvcCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ3Byb2Nlc3MuZW52IGlzIHRlbXBvcmFyaWx5IGltbXV0YWJsZS4gU2V0IFxcJ2Nsb2JiZXJFbnY6IGZhbHNlXFwnIGlmIHlvdSB3YW50IHRvIHJ1biBtdWx0aXBsZSBcXCdmcm9tQXNzZW1ibHlCdWlsZGVyXFwnIHN5bnRocyBjb25jdXJyZW50bHknKTtcbiAgICAgIH1cbiAgICAgICh0YXJnZXQgYXMgYW55KVtwcm9wXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBrZXlzIG9mIG1pc3NpbmcgY29udGV4dCBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWlzc2luZ0NvbnRleHRLZXlzKG1pc3Npbmc/OiBNaXNzaW5nQ29udGV4dFtdKTogU2V0PHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFNldCgobWlzc2luZyB8fCBbXSkubWFwKChtKSA9PiBtLmtleSkpO1xufVxuIl19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxrREFhQztBQTJCRCxnREFFQztBQWxERCxrRUFBOEQ7QUFFOUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUEyQjtJQUM3RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBRTNCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsdUJBQXVCLENBQUM7UUFDcEMsR0FBRyxPQUFPLENBQUMsR0FBRztRQUNkLEdBQUcsR0FBRztLQUNQLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUFtQixHQUFNO0lBQ3ZELE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ3BCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSTtZQUNkLE9BQVEsTUFBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSw0QkFBWSxDQUFDLHlCQUF5QixFQUFFLHlJQUF5SSxDQUFDLENBQUM7WUFDL0wsQ0FBQztZQUNBLE1BQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBMEI7SUFDM0QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1pc3NpbmdDb250ZXh0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5cbi8qKlxuICogVGVtcG9yYXJpbHkgb3ZlcndyaXRlIHRoZSBgcHJvY2Vzcy5lbnZgIHdpdGggYSBuZXcgYGVudmBcbiAqXG4gKiBXZSBtYWtlIHRoZSBlbnZpcm9ubWVudCBpbW11dGFibGUgaW4gY2FzZSB0aGVyZSBhcmUgYWNjaWRlbnRhbFxuICogY29uY3VycmVudCBhY2Nlc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlbXBvcmFyaWx5V3JpdGVFbnYoZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGNvbnN0IG9sZEVudiA9IHByb2Nlc3MuZW52O1xuXG4gIHByb2Nlc3MuZW52ID0gZGV0ZWN0U3ludGh2YXJDb25mbGljdHMoe1xuICAgIC4uLnByb2Nlc3MuZW52LFxuICAgIC4uLmVudixcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmRpc3Bvc2VdKCkge1xuICAgICAgcHJvY2Vzcy5lbnYgPSBvbGRFbnY7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gZW52aXJvbm1lbnQtbGlrZSBvYmplY3QgdGhhdCB0aHJvd3MgaWYgY2VydGFpbiBrZXlzIGFyZSBzZXRcbiAqXG4gKiBXZSBvbmx5IHRocm93IG9uIHNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjYXRjaCB0aGUgY2FzZSBvZlxuICogY29uY3VycmVudCBzeW50aHMuIFdlIGNhbid0IGRvIGFsbCB2YXJpYWJsZXMgYmVjYXVzZSB0aGVyZSBhcmUgc29tZVxuICogcm91dGluZXMgc29tZXdoZXJlIHRoYXQgbW9kaWZ5IHRoaW5ncyBsaWtlIGBKU0lJX0RFUFJFQ0FURURgIGdsb2JhbGx5LlxuICovXG5mdW5jdGlvbiBkZXRlY3RTeW50aHZhckNvbmZsaWN0czxBIGV4dGVuZHMgb2JqZWN0PihvYmo6IEEpIHtcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgIGlmIChbJ0NES19DT05URVhUJywgJ0NES19PVVRESVInXS5pbmNsdWRlcyhTdHJpbmcocHJvcCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0VudkltbXV0YWJsZUR1cmluZ1N5bnRoJywgJ3Byb2Nlc3MuZW52IGlzIHRlbXBvcmFyaWx5IGltbXV0YWJsZS4gU2V0IFxcJ2Nsb2JiZXJFbnY6IGZhbHNlXFwnIGlmIHlvdSB3YW50IHRvIHJ1biBtdWx0aXBsZSBcXCdmcm9tQXNzZW1ibHlCdWlsZGVyXFwnIHN5bnRocyBjb25jdXJyZW50bHknKTtcbiAgICAgIH1cbiAgICAgICh0YXJnZXQgYXMgYW55KVtwcm9wXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBrZXlzIG9mIG1pc3NpbmcgY29udGV4dCBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWlzc2luZ0NvbnRleHRLZXlzKG1pc3Npbmc/OiBNaXNzaW5nQ29udGV4dFtdKTogU2V0PHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFNldCgobWlzc2luZyB8fCBbXSkubWFwKChtKSA9PiBtLmtleSkpO1xufVxuIl19