cdktn 0.26.0-pre.2 → 0.26.0-pre.21

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 (116) hide show
  1. package/.jsii +1200 -1116
  2. package/eslint.config.mjs +18 -7
  3. package/jest.config.js +0 -1
  4. package/lib/_tokens.d.ts +7 -0
  5. package/lib/_tokens.js +8 -2
  6. package/lib/annotations.js +1 -1
  7. package/lib/app.js +8 -4
  8. package/lib/aspect.js +1 -1
  9. package/lib/asset-hash.js +1 -1
  10. package/lib/asset-staging.js +1 -1
  11. package/lib/assets.js +4 -4
  12. package/lib/backends/azurerm-backend.d.ts +6 -0
  13. package/lib/backends/azurerm-backend.js +9 -5
  14. package/lib/backends/cloud-backend.js +4 -4
  15. package/lib/backends/consul-backend.d.ts +6 -0
  16. package/lib/backends/consul-backend.js +9 -5
  17. package/lib/backends/cos-backend.d.ts +6 -0
  18. package/lib/backends/cos-backend.js +9 -5
  19. package/lib/backends/gcs-backend.d.ts +6 -0
  20. package/lib/backends/gcs-backend.js +9 -5
  21. package/lib/backends/http-backend.d.ts +6 -0
  22. package/lib/backends/http-backend.js +9 -5
  23. package/lib/backends/local-backend.d.ts +6 -0
  24. package/lib/backends/local-backend.js +9 -5
  25. package/lib/backends/oss-backend.d.ts +6 -0
  26. package/lib/backends/oss-backend.js +9 -5
  27. package/lib/backends/pg-backend.d.ts +6 -0
  28. package/lib/backends/pg-backend.js +9 -5
  29. package/lib/backends/remote-backend.d.ts +12 -0
  30. package/lib/backends/remote-backend.js +17 -9
  31. package/lib/backends/s3-backend.d.ts +6 -0
  32. package/lib/backends/s3-backend.js +9 -5
  33. package/lib/backends/swift-backend.js +2 -2
  34. package/lib/complex-computed-list.d.ts +85 -0
  35. package/lib/complex-computed-list.js +112 -54
  36. package/lib/functions/helpers.d.ts +72 -0
  37. package/lib/functions/helpers.js +73 -14
  38. package/lib/functions/provider-function.js +1 -1
  39. package/lib/functions/terraform-functions.generated.d.ts +3 -0
  40. package/lib/functions/terraform-functions.generated.js +5 -3
  41. package/lib/hcl/quoted-string-key.d.ts +25 -0
  42. package/lib/hcl/quoted-string-key.js +42 -0
  43. package/lib/hcl/render.js +41 -7
  44. package/lib/ignore-strategy.js +1 -1
  45. package/lib/importable-resource.js +1 -1
  46. package/lib/manifest.d.ts +4 -0
  47. package/lib/manifest.js +6 -3
  48. package/lib/private/unique.js +11 -3
  49. package/lib/resource.js +1 -1
  50. package/lib/runtime.d.ts +6 -0
  51. package/lib/runtime.js +12 -3
  52. package/lib/synthesize/required-version.d.ts +32 -0
  53. package/lib/synthesize/required-version.js +205 -0
  54. package/lib/synthesize/synthesizer.d.ts +13 -0
  55. package/lib/synthesize/synthesizer.js +42 -8
  56. package/lib/terraform-asset.d.ts +4 -0
  57. package/lib/terraform-asset.js +6 -3
  58. package/lib/terraform-backend.d.ts +3 -0
  59. package/lib/terraform-backend.js +5 -3
  60. package/lib/terraform-conditions.js +1 -2
  61. package/lib/terraform-count.js +1 -1
  62. package/lib/terraform-data-resource.js +1 -1
  63. package/lib/terraform-data-source.d.ts +4 -0
  64. package/lib/terraform-data-source.js +8 -6
  65. package/lib/terraform-dependable.js +1 -1
  66. package/lib/terraform-dynamic-block.d.ts +4 -0
  67. package/lib/terraform-dynamic-block.js +5 -2
  68. package/lib/terraform-element.d.ts +4 -0
  69. package/lib/terraform-element.js +6 -3
  70. package/lib/terraform-ephemeral-resource.d.ts +4 -0
  71. package/lib/terraform-ephemeral-resource.js +8 -6
  72. package/lib/terraform-functions.d.ts +4 -0
  73. package/lib/terraform-functions.js +10 -5
  74. package/lib/terraform-hcl-module.d.ts +4 -0
  75. package/lib/terraform-hcl-module.js +6 -3
  76. package/lib/terraform-iterator.d.ts +19 -0
  77. package/lib/terraform-iterator.js +25 -11
  78. package/lib/terraform-local.d.ts +4 -0
  79. package/lib/terraform-local.js +6 -3
  80. package/lib/terraform-module.js +1 -1
  81. package/lib/terraform-operators.js +1 -1
  82. package/lib/terraform-output.d.ts +5 -0
  83. package/lib/terraform-output.js +23 -3
  84. package/lib/terraform-provider.d.ts +4 -0
  85. package/lib/terraform-provider.js +6 -3
  86. package/lib/terraform-provisioner.js +1 -1
  87. package/lib/terraform-remote-state.d.ts +3 -0
  88. package/lib/terraform-remote-state.js +5 -3
  89. package/lib/terraform-resource-targets.js +1 -1
  90. package/lib/terraform-resource.d.ts +5 -1
  91. package/lib/terraform-resource.js +16 -9
  92. package/lib/terraform-stack.d.ts +4 -0
  93. package/lib/terraform-stack.js +28 -9
  94. package/lib/terraform-variable.d.ts +7 -0
  95. package/lib/terraform-variable.js +16 -7
  96. package/lib/testing/adapters/jest.d.ts +3 -0
  97. package/lib/testing/adapters/jest.js +10 -1
  98. package/lib/testing/index.js +14 -4
  99. package/lib/testing/matchers.js +61 -19
  100. package/lib/tfExpression.d.ts +50 -0
  101. package/lib/tfExpression.js +114 -33
  102. package/lib/tokens/lazy.d.ts +4 -0
  103. package/lib/tokens/lazy.js +21 -8
  104. package/lib/tokens/private/dependency.js +2 -6
  105. package/lib/tokens/private/resolve.js +3 -3
  106. package/lib/tokens/private/stack-trace.d.ts +1 -1
  107. package/lib/tokens/private/stack-trace.js +1 -2
  108. package/lib/tokens/resolvable.js +2 -2
  109. package/lib/tokens/string-fragments.js +4 -4
  110. package/lib/tokens/token.js +2 -2
  111. package/lib/upgrade-id-aspect.js +1 -1
  112. package/lib/util.d.ts +0 -1
  113. package/lib/util.js +4 -4
  114. package/lib/validations/target-versions.d.ts +12 -0
  115. package/lib/validations/target-versions.js +40 -1
  116. package/package.json +112 -109
package/lib/hcl/render.js CHANGED
@@ -25,6 +25,7 @@ exports.renderAttributes = renderAttributes;
25
25
  * Copyright (c) HashiCorp, Inc.
26
26
  * SPDX-License-Identifier: MPL-2.0
27
27
  */
28
+ const quoted_string_key_1 = require("./quoted-string-key");
28
29
  const token_1 = require("../tokens/token");
29
30
  /**
30
31
  *
@@ -40,7 +41,16 @@ function escapeQuotes(str) {
40
41
  *
41
42
  */
42
43
  function wrapIdentifierInQuotesIfNeeded(key) {
43
- return /(^\d)|[^A-Za-z0-9_-]/.test(key) ? `"${key}"` : key;
44
+ if (!/(^\d)|[^A-Za-z0-9_-]/.test(key)) {
45
+ return key;
46
+ }
47
+ // A key containing `${` may be a resolved token reference rather than a
48
+ // literal string, so its `${...}` body is expression syntax, not text to
49
+ // escape. Leave it on the old (unescaped) path to avoid corrupting it.
50
+ if (key.includes("${")) {
51
+ return `"${key}"`;
52
+ }
53
+ return (0, quoted_string_key_1.quotedStringKey)(key, true);
44
54
  }
45
55
  /**
46
56
  *
@@ -404,7 +414,9 @@ function renderLocals(locals) {
404
414
  }
405
415
  return `locals {
406
416
  ${localNames
407
- .filter((name) => !!locals[name].value)
417
+ // Keep false, 0 and "". A null value is still left out: it has no HCL
418
+ // rendering here yet.
419
+ .filter((name) => locals[name].value !== undefined && locals[name].value !== null)
408
420
  .map((name) => {
409
421
  const value = renderFuzzyJsonExpression(locals[name].value);
410
422
  return `${name} = ${value}`;
@@ -501,6 +513,9 @@ function renderFuzzyJsonExpression(jsonExpression) {
501
513
  "]",
502
514
  ].join("\n");
503
515
  }
516
+ if (jsonExpression === null) {
517
+ return "null";
518
+ }
504
519
  if (typeof jsonExpression === "object") {
505
520
  return renderFuzzyJsonObject(jsonExpression);
506
521
  }
@@ -544,6 +559,22 @@ function renderSimpleAttributes(attributes) {
544
559
  .map(([name, value]) => ` ${name} = ${renderFuzzyJsonExpression(value)}`)
545
560
  .join("\n");
546
561
  }
562
+ /**
563
+ *
564
+ */
565
+ function renderLifecycle(lifecycle) {
566
+ return Object.entries(lifecycle)
567
+ .map(([name, value]) => {
568
+ // replace_triggered_by only accepts references, which can't be quoted
569
+ if (name === "replace_triggered_by" && Array.isArray(value)) {
570
+ return ` ${name} = [
571
+ ${value.map((reference) => `${reference},`).join("\n")}
572
+ ]`;
573
+ }
574
+ return ` ${name} = ${renderFuzzyJsonExpression(value)}`;
575
+ })
576
+ .join("\n");
577
+ }
547
578
  /**
548
579
  * Detects a resolved-but-emptied attribute descriptor: an object shaped like
549
580
  * what `AttributesEmitter#emitToHclTerraform` always emits for HCL synthesis
@@ -610,10 +641,8 @@ function renderAttributes(attributes) {
610
641
  return `${name} = null`;
611
642
  }
612
643
  else if (typeof v === "object" &&
613
- // eslint-disable-next-line no-prototype-builtins
614
- !v.hasOwnProperty("value") &&
615
- // eslint-disable-next-line no-prototype-builtins
616
- !v.hasOwnProperty("dynamic")) {
644
+ !Object.prototype.hasOwnProperty.call(v, "value") &&
645
+ !Object.prototype.hasOwnProperty.call(v, "dynamic")) {
617
646
  // An orphaned attribute descriptor (its 'value' resolved to
618
647
  // `undefined`) carries only internal metadata at this point - omit
619
648
  // the attribute entirely, exactly as if it had never been set,
@@ -622,6 +651,11 @@ function renderAttributes(attributes) {
622
651
  if (isOrphanedAttributeDescriptor(v)) {
623
652
  return undefined;
624
653
  }
654
+ if (name === "lifecycle") {
655
+ return `${name} {
656
+ ${renderLifecycle(v)}
657
+ }`;
658
+ }
625
659
  if (metaBlocks.includes(name)) {
626
660
  return `${name} {
627
661
  ${renderSimpleAttributes(v)}
@@ -697,4 +731,4 @@ ${name} = ${renderFuzzyJsonExpression(value)}
697
731
  .filter((v) => v !== undefined)
698
732
  .join("\n");
699
733
  }
700
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hjbC9yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvREEsNENBNkNDO0FBS0QsZ0NBZ0RDO0FBS0QsMENBU0M7QUFLRCw4QkFjQztBQUtELHdDQXNCQztBQUtELHdDQXFDQztBQUtELDRDQTJCQztBQUtELDBDQTJCQztBQUtELHdEQXlCQztBQUtELGtEQXFCQztBQUtELHdDQW1CQztBQUtELG9DQWdCQztBQUtELG9DQU9DO0FBS0Qsb0NBb0JDO0FBS0Qsd0NBT0M7QUFLRCxrQ0FRQztBQUtELG9DQVFDO0FBS0QsMENBMEJDO0FBS0Qsa0NBSUM7QUF5RUQsd0RBV0M7QUE0Q0QsNENBOEhDO0FBbHhCRDs7O0dBR0c7QUFDSCwyQ0FBK0M7QUFFL0M7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQy9CLG1EQUFtRDtJQUNuRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsOEJBQThCLENBQUMsR0FBVztJQUNqRCxPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzdELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDZixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJ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SSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDekIsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7U0FDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5pbXBvcnQgeyBUb2tlbml6YXRpb24gfSBmcm9tIFwiLi4vdG9rZW5zL3Rva2VuXCI7XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZXNjYXBlUXVvdGVzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBlc2NhcGUgaWYgd2UgaGF2ZSBhbiBleHByZXNzaW9uXG4gIGlmIChzdHIubWF0Y2goL1xcJFxcey8pKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICByZXR1cm4gc3RyLnJlcGxhY2UoLyg/PCFcXFxcKVwiL2csICdcXFxcXCInKTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiB3cmFwSWRlbnRpZmllckluUXVvdGVzSWZOZWVkZWQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyheXFxkKXxbXkEtWmEtejAtOV8tXS8udGVzdChrZXkpID8gYFwiJHtrZXl9XCJgIDoga2V5O1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gYFwiXCJgO1xuICB9XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlVuYWJsZSB0byBwcm9jZXNzIGF0dHJpYnV0ZSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gYSBzdHJpbmcsIGJ1dCBpc24ndFwiLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgvXFxyXFxufFtcXG5cXHJdLyk7XG5cbiAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBcIiR7ZXNjYXBlUXVvdGVzKHN0cil9XCJgO1xuXG4gIHJldHVybiBgPDxFT0ZcXG4ke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuRU9GYDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5Gb3JNZXRhZGF0YShibG9jazogYW55KTogYW55IHtcbiAgY29uc3QgcmVzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrLm1hcCgoaSkgPT4gY2xlYW5Gb3JNZXRhZGF0YShpKSk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmxvY2spO1xuXG4gIGlmIChrZXlzLmluY2x1ZGVzKFwidmFsdWVcIikpIHtcbiAgICByZXR1cm4gY2xlYW5Gb3JNZXRhZGF0YShibG9jay52YWx1ZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBibG9ja1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHJlc29sdmFibGUgd2UgZG9uJ3Qgd2FudCB0byByZWN1cnNlIGludG8gaXRcbiAgICAgIGlmIChUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgICByZXNba2V5XSA9IHt9O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmVzW2tleV0gPSBjbGVhbkZvck1ldGFkYXRhKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNba2V5XSkpIHtcbiAgICAgICAgcmVzW2tleV0gPSBbLi4ucmVzW2tleV0sIC4uLnZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgcmVzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxpc3QodjogYW55LCBuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgeyBpc0Jsb2NrLCBpc19ibG9jaywgdmFsdWUsIHN0b3JhZ2VfY2xhc3NfdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9ID0gdjtcbiAgY29uc3QgYmxvY2sgPSBpc0Jsb2NrIHx8IGlzX2Jsb2NrO1xuICBjb25zdCBjbGFzc1R5cGUgPSBzdG9yYWdlQ2xhc3NUeXBlIHx8IHN0b3JhZ2VfY2xhc3NfdHlwZTtcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIC8vIHRoaXMgY291bGQgYmUgYW4gZXhwcmVzc2lvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlXG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBpZiAobmFtZSkge1xuICAgIGlmIChibG9jaykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0ge2AgKyBgXFxuJHtyZW5kZXJBdHRyaWJ1dGVzKHZhbHVlKX1cXG59YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5tYXAoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSB7YCArIGBcXG4ke3JlbmRlckF0dHJpYnV0ZXModil9XFxufWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyTGlzdFZhbHVlKHZhbHVlLCBjbGFzc1R5cGUpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25hbWV9ID0gW1xuJHt2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCIsXFxuXCIpfVxuXWA7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gQSBsaXN0IHR5cGUgb2Ygb25seSBhIHNpbmdsZSBpdGVtXG4gICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgY2xhc3NUeXBlKTtcbiAgfVxuXG4gIGlmIChibG9jaykge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gYFtcbiR7dmFsdWUubWFwKCh2OiBhbnkpID0+IHJlbmRlckxpc3RWYWx1ZSh2LCBjbGFzc1R5cGUpKS5qb2luKFwiLFxcblwiKX1cbl1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJMaXN0VmFsdWUodmFsdWU6IGFueSwgc3RvcmFnZUNsYXNzVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwic3RyaW5nTGlzdFwiKSB7XG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwibnVtYmVyTGlzdFwiIHx8IHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwiYm9vbGVhbkxpc3RcIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlckJsb2NrKHZhbHVlLCBzdG9yYWdlQ2xhc3NUeXBlKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWFwKG1hcDogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBtYXAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyB0aGlzIGNvdWxkIGJlIGFuIGV4cHJlc3Npb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZVxuICAgIHJldHVybiBgXCIke2VzY2FwZVF1b3RlcyhtYXApfVwiYDtcbiAgfVxuICByZXR1cm4gYHtcbiR7T2JqZWN0LmVudHJpZXMobWFwKVxuICAubWFwKChbaywgdl0pID0+IHtcbiAgICBjb25zdCB3cmFwcGVkS2V5ID0gd3JhcElkZW50aWZpZXJJblF1b3Rlc0lmTmVlZGVkKGspO1xuXG4gICAgcmV0dXJuIGAke3dyYXBwZWRLZXl9ID0gJHtyZW5kZXJNYXBWYWx1ZSh2KX1gO1xuICB9KVxuICAuam9pbihcIlxcblwiKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNYXBWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiByZW5kZXJTdHJpbmcodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgXCJ1bmtub3duU3RvcmFnZUNsYXNzXCIpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlck1hcCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYCR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUmVzb3VyY2UocmVzb3VyY2U6IGFueSkge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSBPYmplY3Qua2V5cyhyZXNvdXJjZSlbMF07XG4gIGNvbnN0IHJlc291cmNlc1dpdGhUeXBlID0gcmVzb3VyY2VbcmVzb3VyY2VUeXBlXTtcbiAgY29uc3QgcmVzb3VyY2VOYW1lID0gT2JqZWN0LmtleXMocmVzb3VyY2VzV2l0aFR5cGUpWzBdO1xuICBjb25zdCByZXNvdXJjZUF0dHJpYnV0ZXMgPSByZXNvdXJjZXNXaXRoVHlwZVtyZXNvdXJjZU5hbWVdO1xuXG4gIGlmIChyZXNvdXJjZUF0dHJpYnV0ZXMuY29ubmVjdGlvbikge1xuICAgIHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uID0ge1xuICAgICAgdmFsdWU6IHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgeyBwcm92aXNpb25lciwgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcmVzb3VyY2VBdHRyaWJ1dGVzO1xuXG4gIGNvbnN0IGhjbCA9IFtgcmVzb3VyY2UgXCIke3Jlc291cmNlVHlwZX1cIiBcIiR7cmVzb3VyY2VOYW1lfVwiIHtgXTtcblxuICBjb25zdCBhdHRycyA9IHJlbmRlckF0dHJpYnV0ZXMob3RoZXJBdHRycyk7XG5cbiAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gIGlmIChwcm92aXNpb25lcikgaGNsLnB1c2gocmVuZGVyUHJvdmlzaW9uZXJCbG9jayhwcm92aXNpb25lcikpO1xuICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgaGNsLnB1c2goXCJ9XCIpO1xuXG4gIHJldHVybiB7XG4gICAgaGNsOiBoY2wuam9pbihcIlxcblwiKSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgW3Jlc291cmNlVHlwZV06IHtcbiAgICAgICAgICBbcmVzb3VyY2VOYW1lXToge1xuICAgICAgICAgICAgXCIvL1wiOiByZXNvdXJjZUF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueSkge1xuICBjb25zdCBkYXRhU291cmNlVHlwZSA9IE9iamVjdC5rZXlzKGRhdGFTb3VyY2UpWzBdO1xuICBjb25zdCBkYXRhU291cmNlc1dpdGhUeXBlID0gZGF0YVNvdXJjZVtkYXRhU291cmNlVHlwZV07XG4gIGNvbnN0IGRhdGFTb3VyY2VOYW1lID0gT2JqZWN0LmtleXMoZGF0YVNvdXJjZXNXaXRoVHlwZSlbMF07XG4gIGNvbnN0IGRhdGFTb3VyY2VBdHRyaWJ1dGVzID0gZGF0YVNvdXJjZXNXaXRoVHlwZVtkYXRhU291cmNlTmFtZV07XG5cbiAgY29uc3QgeyBkeW5hbWljLCAuLi5vdGhlckF0dHJzIH0gPSBkYXRhU291cmNlQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGRhdGEgXCIke2RhdGFTb3VyY2VUeXBlfVwiIFwiJHtkYXRhU291cmNlTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtkYXRhU291cmNlVHlwZV06IHtcbiAgICAgICAgICBbZGF0YVNvdXJjZU5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGRhdGFTb3VyY2VBdHRyaWJ1dGVzW1wiLy9cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXBoZW1lcmFsKGVwaGVtZXJhbDogYW55KSB7XG4gIGNvbnN0IGVwaGVtZXJhbFR5cGUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWwpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxzV2l0aFR5cGUgPSBlcGhlbWVyYWxbZXBoZW1lcmFsVHlwZV07XG4gIGNvbnN0IGVwaGVtZXJhbE5hbWUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWxzV2l0aFR5cGUpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxBdHRyaWJ1dGVzID0gZXBoZW1lcmFsc1dpdGhUeXBlW2VwaGVtZXJhbE5hbWVdO1xuXG4gIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gZXBoZW1lcmFsQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGVwaGVtZXJhbCBcIiR7ZXBoZW1lcmFsVHlwZX1cIiBcIiR7ZXBoZW1lcmFsTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBlcGhlbWVyYWw6IHtcbiAgICAgICAgW2VwaGVtZXJhbFR5cGVdOiB7XG4gICAgICAgICAgW2VwaGVtZXJhbE5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGVwaGVtZXJhbEF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm92aXNpb25lckJsb2NrKHByb3Zpc2lvbmVyczogYW55KSB7XG4gIHJldHVybiBwcm92aXNpb25lcnNcbiAgICAubWFwKChwcm92aXNpb25lcjogYW55KSA9PiB7XG4gICAgICBjb25zdCBwcm92aXNpb25lclR5cGUgPSBPYmplY3Qua2V5cyhwcm92aXNpb25lcilbMF07XG4gICAgICBjb25zdCBwcm92aXNpb25lckF0dHJzID0gcHJvdmlzaW9uZXJbcHJvdmlzaW9uZXJUeXBlXTtcblxuICAgICAgaWYgKHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbikge1xuICAgICAgICBwcm92aXNpb25lckF0dHJzLmNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbixcbiAgICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGR5bmFtaWMsIC4uLm90aGVyQXR0cnMgfSA9IHByb3Zpc2lvbmVyQXR0cnM7XG5cbiAgICAgIGNvbnN0IGhjbCA9IFtgcHJvdmlzaW9uZXIgXCIke3Byb3Zpc2lvbmVyVHlwZX1cIiB7YF07XG5cbiAgICAgIGNvbnN0IGF0dHJzID0gcmVuZGVyQXR0cmlidXRlcyhvdGhlckF0dHJzLnZhbHVlIHx8IG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG4gICAgICBoY2wucHVzaChcIn1cIik7XG5cbiAgICAgIHJldHVybiBoY2wuam9pbihcIlxcblwiKTtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEeW5hbWljQmxvY2tzKGR5bmFtaWM6IGFueSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZHluYW1pYykubWFwKFxuICAgIChbZHluYW1pY05hbWUsIGR5bmFtaWNBdHRyc106IFtzdHJpbmcsIGFueV0pID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IFtgZHluYW1pYyBcIiR7ZHluYW1pY05hbWV9XCIge2BdO1xuICAgICAgcmVzLnB1c2goXG4gICAgICAgIGBmb3JfZWFjaCA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihkeW5hbWljQXR0cnM/LmZvcl9lYWNoKX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChkeW5hbWljQXR0cnM/Lml0ZXJhdG9yKSB7XG4gICAgICAgIHJlcy5wdXNoKGBpdGVyYXRvciA9ICR7ZHluYW1pY0F0dHJzPy5pdGVyYXRvcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChkeW5hbWljQXR0cnM/LmxhYmVscykge1xuICAgICAgICByZXMucHVzaChgbGFiZWxzID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKGR5bmFtaWNBdHRycz8ubGFiZWxzKX1gKTtcbiAgICAgIH1cbiAgICAgIHJlcy5wdXNoKGBjb250ZW50IHtcbiAgJHtyZW5kZXJBdHRyaWJ1dGVzKGR5bmFtaWNBdHRycy5jb250ZW50KX1cbiAgfWApO1xuICAgICAgcmVzLnB1c2goYH1gKTtcblxuICAgICAgcmV0dXJuIHJlcy5qb2luKFwiXFxuXCIpO1xuICAgIH0sXG4gICk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByb3ZpZGVyKHByb3ZpZGVyOiBhbnkpIHtcbiAgY29uc3QgcHJvdmlkZXJOYW1lID0gT2JqZWN0LmtleXMocHJvdmlkZXIpWzBdO1xuICBjb25zdCBwcm92aWRlckF0dHJpYnV0ZXMgPSBwcm92aWRlcltwcm92aWRlck5hbWVdO1xuXG4gIHJldHVybiBwcm92aWRlckF0dHJpYnV0ZXNcbiAgICAubWFwKChwcm92aWRlckluc3RhbmNlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcHJvdmlkZXJJbnN0YW5jZTtcblxuICAgICAgY29uc3QgaGNsID0gW2Bwcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIHtgXTtcblxuICAgICAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgICAgIGhjbC5wdXNoKFwifVwiKTtcblxuICAgICAgcmV0dXJuIGhjbC5qb2luKFwiXFxuXCIpO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1vZHVsZShtb2R1bGU6IGFueSkge1xuICBjb25zdCBtb2R1bGVOYW1lID0gT2JqZWN0LmtleXMobW9kdWxlKVswXTtcbiAgY29uc3QgbW9kdWxlQXR0cmlidXRlcyA9IG1vZHVsZVttb2R1bGVOYW1lXTtcblxuICByZXR1cm4ge1xuICAgIGhjbDogYG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXMobW9kdWxlQXR0cmlidXRlcyl9XG59YCxcbiAgICBtZXRhZGF0YToge1xuICAgICAgbW9kdWxlOiB7XG4gICAgICAgIFttb2R1bGVOYW1lXToge1xuICAgICAgICAgIFwiLy9cIjogbW9kdWxlQXR0cmlidXRlc1tcIi8vXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJPdXRwdXQob3V0cHV0OiBhbnkpIHtcbiAgY29uc3Qgb3V0cHV0TmFtZSA9IE9iamVjdC5rZXlzKG91dHB1dClbMF07XG4gIGNvbnN0IG91dHB1dEF0dHJpYnV0ZXMgPSBvdXRwdXRbb3V0cHV0TmFtZV07XG5cbiAgcmV0dXJuIGBvdXRwdXQgXCIke291dHB1dE5hbWV9XCIge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKG91dHB1dEF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxvY2Fscyhsb2NhbHM6IGFueSkge1xuICBpZiAoIWxvY2Fscykge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QgbG9jYWxOYW1lcyA9IE9iamVjdC5rZXlzKGxvY2Fscyk7XG5cbiAgaWYgKGxvY2FsTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICByZXR1cm4gYGxvY2FscyB7XG4gICAgJHtsb2NhbE5hbWVzXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiAhIWxvY2Fsc1tuYW1lXS52YWx1ZSlcbiAgICAgIC5tYXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24obG9jYWxzW25hbWVdLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiXFxuXCIpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclZhcmlhYmxlKHZhcmlhYmxlOiBhbnkpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gT2JqZWN0LmtleXModmFyaWFibGUpWzBdO1xuICBjb25zdCB2YXJpYWJsZUF0dHJpYnV0ZXMgPSB2YXJpYWJsZVt2YXJpYWJsZU5hbWVdO1xuXG4gIHJldHVybiBgdmFyaWFibGUgXCIke3ZhcmlhYmxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModmFyaWFibGVBdHRyaWJ1dGVzKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNb3ZlZChtb3ZlOiBhbnkpIHtcbiAgY29uc3QgbW92ZWRCbG9ja3MgPSBtb3ZlLm1hcCgobW92ZUJsb2NrOiBhbnkpID0+IHtcbiAgICByZXR1cm4gYG1vdmVkIHtcbiR7cmVuZGVyQXR0cmlidXRlcyhtb3ZlQmxvY2spfVxufWA7XG4gIH0pO1xuXG4gIHJldHVybiBtb3ZlZEJsb2Nrcy5qb2luKFwiXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJJbXBvcnQoaW1wb3J0czogYW55KSB7XG4gIGNvbnN0IGltcG9ydEJsb2NrcyA9IGltcG9ydHMubWFwKChpbXBvcnRCbG9jazogYW55KSA9PiB7XG4gICAgcmV0dXJuIGBpbXBvcnQge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKGltcG9ydEJsb2NrKX1cbn1gO1xuICB9KTtcblxuICByZXR1cm4gaW1wb3J0QmxvY2tzLmpvaW4oXCJcXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRlcnJhZm9ybSh0ZXJyYWZvcm06IGFueSkge1xuICBjb25zdCBibG9ja0F0dHJpYnV0ZXMgPSBbXCJyZXF1aXJlZF9wcm92aWRlcnNcIiwgXCJiYWNrZW5kXCIsIFwiY2xvdWRcIl07XG4gIGNvbnN0IHJlcXVpcmVkUHJvdmlkZXJzID0gYHJlcXVpcmVkX3Byb3ZpZGVycyB7XG4ke3JlbmRlclNpbXBsZUF0dHJpYnV0ZXModGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyl9XG59YDtcblxuICBjb25zdCBiYWNrZW5kcyA9IE9iamVjdC5rZXlzKHRlcnJhZm9ybS5iYWNrZW5kIHx8IHt9KS5tYXAoKGJhY2tlbmROYW1lKSA9PiB7XG4gICAgcmV0dXJuIGBiYWNrZW5kIFwiJHtiYWNrZW5kTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmJhY2tlbmRbYmFja2VuZE5hbWVdKX1cbn1gO1xuICB9KTtcblxuICBjb25zdCBjbG91ZEJhY2tlbmQgPSB0ZXJyYWZvcm0uY2xvdWRcbiAgICA/IGBjbG91ZCB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmNsb3VkKX1cbn1gXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgb3RoZXJBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXModGVycmFmb3JtKS5maWx0ZXIoXG4gICAgKGtleSkgPT4gIWJsb2NrQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpLFxuICApO1xuICByZXR1cm4gYHRlcnJhZm9ybSB7XG4ke3JlcXVpcmVkUHJvdmlkZXJzfVxuJHtbLi4uYmFja2VuZHMsIGNsb3VkQmFja2VuZF0uam9pbihcIlxcblwiKX1cbiR7cmVuZGVyU2ltcGxlQXR0cmlidXRlcyhvdGhlckF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJsb2NrKGJsb2NrOiBhbnksIF9zdG9yYWdlQ2xhc3NUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHtcbiR7cmVuZGVyQXR0cmlidXRlcyhibG9jayl9XG59YDtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbk9iamVjdDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBcIntcIixcbiAgICAuLi5PYmplY3QuZW50cmllcyhqc29uT2JqZWN0KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWRLZXkgPSB3cmFwSWRlbnRpZmllckluUXVvdGVzSWZOZWVkZWQobmFtZSk7XG4gICAgICByZXR1cm4gYCR7d3JhcHBlZEtleX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfWA7XG4gICAgfSksXG4gICAgXCJ9XCIsXG4gIF0uam9pbihcIlxcblwiKTtcbn1cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gcmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihqc29uRXhwcmVzc2lvbjogYW55KTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoanNvbkV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiW1wiLFxuICAgICAgLi4uanNvbkV4cHJlc3Npb24ubWFwKCh2YWx1ZSkgPT4gYCR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2YWx1ZSl9LGApLFxuICAgICAgXCJdXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbkV4cHJlc3Npb24pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIGBcIlwiYDtcbiAgICB9XG5cbiAgICBpZiAoanNvbkV4cHJlc3Npb24uaW5jbHVkZXMoXCIke1wiKSkge1xuICAgICAgcmV0dXJuIGBcIiR7anNvbkV4cHJlc3Npb259XCJgO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUludChqc29uRXhwcmVzc2lvbiwgMTApLnRvU3RyaW5nKCkgPT09IGpzb25FeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICAgIHJldHVybiBqc29uRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYFwiJHtlc2NhcGVRdW90ZXMoanNvbkV4cHJlc3Npb24pfVwiYDtcbiAgfVxuXG4gIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJ0cnVlXCIgfHwganNvbkV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuICAgIHJldHVybiBqc29uRXhwcmVzc2lvbiBhcyBzdHJpbmc7XG4gIH1cblxuICBpZiAoanNvbkV4cHJlc3Npb24gPT09IFwibnVsbFwiKSB7XG4gICAgcmV0dXJuIGpzb25FeHByZXNzaW9uO1xuICB9XG5cbiAgcmV0dXJuIGAke2pzb25FeHByZXNzaW9ufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclNpbXBsZUF0dHJpYnV0ZXMoYXR0cmlidXRlczogYW55KTogc3RyaW5nIHtcbiAgaWYgKGF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpXG4gICAgLm1hcChcbiAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICBgICAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHZhbHVlIGFzIGFueSl9YCxcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG4vKipcbiAqIERldGVjdHMgYSByZXNvbHZlZC1idXQtZW1wdGllZCBhdHRyaWJ1dGUgZGVzY3JpcHRvcjogYW4gb2JqZWN0IHNoYXBlZCBsaWtlXG4gKiB3aGF0IGBBdHRyaWJ1dGVzRW1pdHRlciNlbWl0VG9IY2xUZXJyYWZvcm1gIGFsd2F5cyBlbWl0cyBmb3IgSENMIHN5bnRoZXNpc1xuICogLSBgeyB2YWx1ZSwgaXNCbG9jaywgdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9YCAtIHRoYXQgaGFzIGxvc3QgaXRzIGB2YWx1ZWBcbiAqIGtleS5cbiAqXG4gKiBUaGUgb25seSB3YXkgYSBkZXNjcmlwdG9yIGxvc2VzIGB2YWx1ZWAgaGVyZSBpcyB0aGF0IGl0IHJlc29sdmVkIHRvXG4gKiBgdW5kZWZpbmVkYDogYHJlc29sdmUoKWAgKHNlZSBgdG9rZW5zL3ByaXZhdGUvcmVzb2x2ZS50c2ApIGRlZXAtcmVzb2x2ZXNcbiAqIGV2ZXJ5IGtleSBvZiBhIHBsYWluIG9iamVjdCBhbmQgc2lsZW50bHkgZHJvcHMgYW55IGtleSB3aG9zZSByZXNvbHZlZFxuICogdmFsdWUgaXMgYHVuZGVmaW5lZGAsIGJ1dCBvbmx5IGB2YWx1ZWAgY2FuIGV2ZXIgZG8gdGhhdCAtIGBpc0Jsb2NrYCxcbiAqIGB0eXBlYCwgYW5kIGBzdG9yYWdlQ2xhc3NUeXBlYCBhcmUgZW1pdHRlZCBhcyBsaXRlcmFsIHN0cmluZ3MvYm9vbGVhbnMgYnlcbiAqIHRoZSBnZW5lcmF0b3IsIG5ldmVyIGFzIHRva2Vucy4gU28gYW4gb2JqZWN0IGNhcnJ5aW5nIGV4YWN0bHkgdGhpc1xuICogbWV0YWRhdGEgY29tYmluYXRpb24sIHdpdGggYHZhbHVlYCBhbmQgYGR5bmFtaWNgIGJvdGggYWJzZW50LCBpcyBhbHdheXNcbiAqIHRoZSBsZWZ0b3ZlciBzaGVsbCBvZiBhIGRlc2NyaXB0b3Igd2hvc2UgdmFsdWUgdmFuaXNoZWQsIG5ldmVyIGEgZ2VudWluZVxuICogdXNlci1zdXBwbGllZCBtYXAgKHRob3NlIGRvbid0IGhhcHBlbiB0byBhbHNvIGNhcnJ5IGBpc0Jsb2NrYCArXG4gKiBgc3RvcmFnZUNsYXNzVHlwZWApLlxuICpcbiAqIFRoaXMgaXMgaW50ZW50aW9uYWxseSBub3Qgc3BlY2lmaWMgdG8gd3JpdGUtb25seSBhdHRyaWJ1dGVzOiBhIHdyaXRlLW9ubHlcbiAqIGF0dHJpYnV0ZSB3cmFwcGVkIGJ5IGBtYXJrV3JpdGVPbmx5QXR0cmlidXRlKClgIGFyb3VuZCBhIGBMYXp5YC90b2tlblxuICogcHJvZHVjZXIgdGhhdCByZXNvbHZlcyB0byBgdW5kZWZpbmVkYCBpcyBzaW1wbHkgb25lIGV4YW1wbGUgKGl0IHN1cnZpdmVzXG4gKiB0aGUgZ2VuZXJhdGVkIFwicmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXCIgcHJlLWZpbHRlciBpblxuICogYHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKClgIGJlY2F1c2UgdGhhdCBmaWx0ZXIgb25seSBzZWVzIHRoZSBzdGlsbC1cbiAqIHVucmVzb2x2ZWQgdG9rZW4sIG5vdCB3aGF0IGl0IGxhdGVyIHJlc29sdmVzIHRvKSAtIGJ1dCBBTlkgYXR0cmlidXRlXG4gKiBkZXNjcmlwdG9yIHdob3NlIHRva2VuIHJlc29sdmVzIHRvIGB1bmRlZmluZWRgIGluIEhDTCBtb2RlIGhpdHMgdGhpcyBzYW1lXG4gKiBwYXRoIChzZWUgdGhlICMzMTMgSENMLWRlZmVjdHMgZmFtaWx5KS5cbiAqL1xuZnVuY3Rpb24gaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIiB8fCB2ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGhhc093biA9IChrZXk6IHN0cmluZykgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHYsIGtleSk7XG4gIHJldHVybiAoXG4gICAgIWhhc093bihcInZhbHVlXCIpICYmXG4gICAgIWhhc093bihcImR5bmFtaWNcIikgJiZcbiAgICBoYXNPd24oXCJpc0Jsb2NrXCIpICYmXG4gICAgaGFzT3duKFwidHlwZVwiKSAmJlxuICAgIGhhc093bihcInN0b3JhZ2VDbGFzc1R5cGVcIilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoYXR0cmlidXRlcyA9PT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcylcbiAgICAubWFwKChbbmFtZSwgdl0pID0+IHtcbiAgICAgIGlmIChuYW1lID09PSBcIi8vXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGFCbG9ja3MgPSBbXCJsaWZlY3ljbGVcIiwgXCJwcm92aXNpb25lclwiXTtcblxuICAgICAgLy9cbiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgc29tZSBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSB0eXBlIGluZm9ybWF0aW9uXG4gICAgICAvLyBqdXN0IHRyeSB0byBndWVzcyB0aGVtXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHYpfWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3Z9YDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odil9YDtcbiAgICAgIH0gZWxzZSBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSBudWxsYDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgIXYuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSAmJlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgICF2Lmhhc093blByb3BlcnR5KFwiZHluYW1pY1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEFuIG9ycGhhbmVkIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIChpdHMgJ3ZhbHVlJyByZXNvbHZlZCB0b1xuICAgICAgICAvLyBgdW5kZWZpbmVkYCkgY2FycmllcyBvbmx5IGludGVybmFsIG1ldGFkYXRhIGF0IHRoaXMgcG9pbnQgLSBvbWl0XG4gICAgICAgIC8vIHRoZSBhdHRyaWJ1dGUgZW50aXJlbHksIGV4YWN0bHkgYXMgaWYgaXQgaGFkIG5ldmVyIGJlZW4gc2V0LFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdGhhdCBtZXRhZGF0YSBpbnRvIHRoZSBIQ0wgb3V0cHV0IHZpYVxuICAgICAgICAvLyByZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKCkuIFNlZSBpc09ycGhhbmVkQXR0cmlidXRlRGVzY3JpcHRvcigpLlxuICAgICAgICBpZiAoaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodikpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhQmxvY2tzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IHtcbiR7cmVuZGVyU2ltcGxlQXR0cmlidXRlcyh2KX1cbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2KX1gO1xuICAgICAgfSBlbHNlIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVmZXJlbmNpbmcgYm90aCBpc0Jsb2NrIGFuZCBpc19ibG9jaywgYmVjYXVzZSBzb21ldGltZXMgd2UgcGFzcyB0aHJvdWdoIGEgc25ha2UgY2FzZSBmaWx0ZXJcbiAgICAgIC8vIHdpdGhpbiBhdHRyaWJ1dGVzLlxuICAgICAgY29uc3Qge1xuICAgICAgICBkeW5hbWljLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgaXNCbG9jayxcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZSxcbiAgICAgICAgaXNfYmxvY2ssXG4gICAgICAgIHN0b3JhZ2VfY2xhc3NfdHlwZSxcbiAgICAgIH0gPSB2IGFzIGFueTtcbiAgICAgIGNvbnN0IGJsb2NrID0gaXNCbG9jayB8fCBpc19ibG9jayB8fCBtZXRhQmxvY2tzLmluY2x1ZGVzKG5hbWUpO1xuICAgICAgY29uc3QgY2xhc3NUeXBlID0gc3RvcmFnZUNsYXNzVHlwZSB8fCBzdG9yYWdlX2NsYXNzX3R5cGU7XG5cbiAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgIHJldHVybiByZW5kZXJEeW5hbWljQmxvY2tzKHtcbiAgICAgICAgICBbbmFtZV06IGR5bmFtaWMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gU2hvcnQgY2lyY3VpdCB0eXBlIGNoZWNraW5nIGlmIHZhbHVlIGlzIGFuIGV4cHJlc3Npb25cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuaW5jbHVkZXMoXCIke1wiKSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlclN0cmluZyh2YWx1ZSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJsb2NrICYmIHR5cGUgIT09IFwibGlzdFwiICYmIHR5cGUgIT09IFwic2V0XCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9IHtcbiR7cmVuZGVyQXR0cmlidXRlcyh2YWx1ZSl9XG59YDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSBcImxpc3RcIiB8fCB0eXBlID09PSBcInNldFwiKSB7XG4gICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgIHJldHVybiByZW5kZXJMaXN0KHYsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyTGlzdCh2KX1gO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IFwibWFwXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJNYXAodmFsdWUpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInNpbXBsZVwiKSB7XG4gICAgICAgIGlmIChjbGFzc1R5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlclN0cmluZyh2YWx1ZSl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhc3NUeXBlID09PSBcIm51bWJlclwiIHx8IGNsYXNzVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3Qgc3VyZSB3aHkgd2UncmUgaGVyZSwgYnV0IHRoZXJlJ3MgZWl0aGVyIGEgYnVnIGluIHRoZSBwcm92aWRlclxuICAgICAgICAvLyBvciB3ZSBoYXZlIHNraXBwZWQgdGhlIGF0dHJpYnV0ZSB0byByZWR1Y2UgdGhlIHNpemUgb2Ygb3VyIHByb3ZpZGVyXG4gICAgICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBzaG91bGQgdHJ5IHRvIG5vdCBvdXRwdXQgW29iamVjdCBPYmplY3RdIGhlcmVcbiAgICAgICAgLy8gYW5kIHRyeSBhIGJlc3QgYXBwcm94aW1hdGlvbi4gVGhvdWdoLCBpdCB3b3VsZCBub3Qgd29yayBmb3JcbiAgICAgICAgLy8gYmxvY2tzXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICByZXR1cm4gYFxuIyBXYXJuaW5nOiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBpcyBvZiBhbiB1bmV4cGVjdGVkIHR5cGUuIEVpdGhlciB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSBwcm92aWRlclxuIyBvciBDREtUTiBoYXMgY2hvc2VuIHRvIHNraXAgZ2VuZXJhdGluZyBhIGRldGFpbGVkIHR5cGUgZm9yIHRoaXMgYmVjYXVzZSBpdCBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIHByb3ZpZGVyIGxpYnJhcnkgc2lnbmlmaWNhbnRseS4gXG4jIFBsZWFzZSBjaGVjayBpZiB0aGlzIHJlc291cmNlIGlzIGluY2x1ZGVkIGluIG91ciBza2lwIGxpc3Q6IFxuIyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvYmxvYi8xZmI4NTg4MDk1YTU1ZDQ3NWRjNGJlMjg4ODJlYzRmNDIwMDZlYzhkL3BhY2thZ2VzLyU0MGNka3RmL3Byb3ZpZGVyLWdlbmVyYXRvci9saWIvZ2V0L2dlbmVyYXRvci9za2lwcGVkLWF0dHJpYnV0ZXMudHNcbiMgYW5kIGlmIG5vdCwgcGxlYXNlIGNoZWNrIHdpdGggdGhlIHByb3ZpZGVyIGF1dGhvcnMgdG8gc2VlIGlmIHRoZSBwcm92aWRlciBzY2hlbWEgaXMgYWNjdXJhdGUuXG4jIFxuIyBXZSB1bmRlcnN0YW5kIHRoaXMgaXMgbm90IGlkZWFsLCBzbyB3ZSBzdWdnZXN0IHVzaW5nIEpTT04gc3ludGhlc2lzIGluc3RlYWQgb2YgSENMIHN5bnRoZXNpcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNhc2UuXG5cbiR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfVxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gXCJhbnlcIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInJlZmVyZW5jZVwiKSB7XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgIH0pXG4gICAgLmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuIl19
734
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hjbC9yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4REEsNENBNkNDO0FBS0QsZ0NBZ0RDO0FBS0QsMENBU0M7QUFLRCw4QkFjQztBQUtELHdDQXNCQztBQUtELHdDQXFDQztBQUtELDRDQTJCQztBQUtELDBDQTJCQztBQUtELHdEQXlCQztBQUtELGtEQXFCQztBQUtELHdDQW1CQztBQUtELG9DQWdCQztBQUtELG9DQU9DO0FBS0Qsb0NBeUJDO0FBS0Qsd0NBT0M7QUFLRCxrQ0FRQztBQUtELG9DQVFDO0FBS0QsMENBMEJDO0FBS0Qsa0NBSUM7QUE2RUQsd0RBV0M7QUE4REQsNENBaUlDO0FBMXpCRDs7O0dBR0c7QUFDSCwyREFBc0Q7QUFDdEQsMkNBQStDO0FBRS9DOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsR0FBVztJQUMvQixtREFBbUQ7SUFDbkQsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDhCQUE4QixDQUFDLEdBQVc7SUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBQ0QsT0FBTyxJQUFBLG1DQUFlLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxD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QUFDLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDekIsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7U0FDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5pbXBvcnQgeyBxdW90ZWRTdHJpbmdLZXkgfSBmcm9tIFwiLi9xdW90ZWQtc3RyaW5nLWtleVwiO1xuaW1wb3J0IHsgVG9rZW5pemF0aW9uIH0gZnJvbSBcIi4uL3Rva2Vucy90b2tlblwiO1xuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVF1b3RlcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIERvbid0IGF0dGVtcHQgdG8gZXNjYXBlIGlmIHdlIGhhdmUgYW4gZXhwcmVzc2lvblxuICBpZiAoc3RyLm1hdGNoKC9cXCRcXHsvKSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oPzwhXFxcXClcIi9nLCAnXFxcXFwiJyk7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gd3JhcElkZW50aWZpZXJJblF1b3Rlc0lmTmVlZGVkKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCEvKF5cXGQpfFteQS1aYS16MC05Xy1dLy50ZXN0KGtleSkpIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIC8vIEEga2V5IGNvbnRhaW5pbmcgYCR7YCBtYXkgYmUgYSByZXNvbHZlZCB0b2tlbiByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYVxuICAvLyBsaXRlcmFsIHN0cmluZywgc28gaXRzIGAkey4uLn1gIGJvZHkgaXMgZXhwcmVzc2lvbiBzeW50YXgsIG5vdCB0ZXh0IHRvXG4gIC8vIGVzY2FwZS4gTGVhdmUgaXQgb24gdGhlIG9sZCAodW5lc2NhcGVkKSBwYXRoIHRvIGF2b2lkIGNvcnJ1cHRpbmcgaXQuXG4gIGlmIChrZXkuaW5jbHVkZXMoXCIke1wiKSkge1xuICAgIHJldHVybiBgXCIke2tleX1cImA7XG4gIH1cbiAgcmV0dXJuIHF1b3RlZFN0cmluZ0tleShrZXksIHRydWUpO1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gYFwiXCJgO1xuICB9XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlVuYWJsZSB0byBwcm9jZXNzIGF0dHJpYnV0ZSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gYSBzdHJpbmcsIGJ1dCBpc24ndFwiLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgvXFxyXFxufFtcXG5cXHJdLyk7XG5cbiAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBcIiR7ZXNjYXBlUXVvdGVzKHN0cil9XCJgO1xuXG4gIHJldHVybiBgPDxFT0ZcXG4ke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuRU9GYDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5Gb3JNZXRhZGF0YShibG9jazogYW55KTogYW55IHtcbiAgY29uc3QgcmVzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrLm1hcCgoaSkgPT4gY2xlYW5Gb3JNZXRhZGF0YShpKSk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmxvY2spO1xuXG4gIGlmIChrZXlzLmluY2x1ZGVzKFwidmFsdWVcIikpIHtcbiAgICByZXR1cm4gY2xlYW5Gb3JNZXRhZGF0YShibG9jay52YWx1ZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBibG9ja1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHJlc29sdmFibGUgd2UgZG9uJ3Qgd2FudCB0byByZWN1cnNlIGludG8gaXRcbiAgICAgIGlmIChUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgICByZXNba2V5XSA9IHt9O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmVzW2tleV0gPSBjbGVhbkZvck1ldGFkYXRhKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNba2V5XSkpIHtcbiAgICAgICAgcmVzW2tleV0gPSBbLi4ucmVzW2tleV0sIC4uLnZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgcmVzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxpc3QodjogYW55LCBuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgeyBpc0Jsb2NrLCBpc19ibG9jaywgdmFsdWUsIHN0b3JhZ2VfY2xhc3NfdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9ID0gdjtcbiAgY29uc3QgYmxvY2sgPSBpc0Jsb2NrIHx8IGlzX2Jsb2NrO1xuICBjb25zdCBjbGFzc1R5cGUgPSBzdG9yYWdlQ2xhc3NUeXBlIHx8IHN0b3JhZ2VfY2xhc3NfdHlwZTtcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIC8vIHRoaXMgY291bGQgYmUgYW4gZXhwcmVzc2lvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlXG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBpZiAobmFtZSkge1xuICAgIGlmIChibG9jaykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0ge2AgKyBgXFxuJHtyZW5kZXJBdHRyaWJ1dGVzKHZhbHVlKX1cXG59YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5tYXAoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSB7YCArIGBcXG4ke3JlbmRlckF0dHJpYnV0ZXModil9XFxufWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyTGlzdFZhbHVlKHZhbHVlLCBjbGFzc1R5cGUpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25hbWV9ID0gW1xuJHt2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCIsXFxuXCIpfVxuXWA7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gQSBsaXN0IHR5cGUgb2Ygb25seSBhIHNpbmdsZSBpdGVtXG4gICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgY2xhc3NUeXBlKTtcbiAgfVxuXG4gIGlmIChibG9jaykge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gYFtcbiR7dmFsdWUubWFwKCh2OiBhbnkpID0+IHJlbmRlckxpc3RWYWx1ZSh2LCBjbGFzc1R5cGUpKS5qb2luKFwiLFxcblwiKX1cbl1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJMaXN0VmFsdWUodmFsdWU6IGFueSwgc3RvcmFnZUNsYXNzVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwic3RyaW5nTGlzdFwiKSB7XG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwibnVtYmVyTGlzdFwiIHx8IHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwiYm9vbGVhbkxpc3RcIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlckJsb2NrKHZhbHVlLCBzdG9yYWdlQ2xhc3NUeXBlKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWFwKG1hcDogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBtYXAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyB0aGlzIGNvdWxkIGJlIGFuIGV4cHJlc3Npb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZVxuICAgIHJldHVybiBgXCIke2VzY2FwZVF1b3RlcyhtYXApfVwiYDtcbiAgfVxuICByZXR1cm4gYHtcbiR7T2JqZWN0LmVudHJpZXMobWFwKVxuICAubWFwKChbaywgdl0pID0+IHtcbiAgICBjb25zdCB3cmFwcGVkS2V5ID0gd3JhcElkZW50aWZpZXJJblF1b3Rlc0lmTmVlZGVkKGspO1xuXG4gICAgcmV0dXJuIGAke3dyYXBwZWRLZXl9ID0gJHtyZW5kZXJNYXBWYWx1ZSh2KX1gO1xuICB9KVxuICAuam9pbihcIlxcblwiKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNYXBWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiByZW5kZXJTdHJpbmcodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgXCJ1bmtub3duU3RvcmFnZUNsYXNzXCIpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlck1hcCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYCR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUmVzb3VyY2UocmVzb3VyY2U6IGFueSkge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSBPYmplY3Qua2V5cyhyZXNvdXJjZSlbMF07XG4gIGNvbnN0IHJlc291cmNlc1dpdGhUeXBlID0gcmVzb3VyY2VbcmVzb3VyY2VUeXBlXTtcbiAgY29uc3QgcmVzb3VyY2VOYW1lID0gT2JqZWN0LmtleXMocmVzb3VyY2VzV2l0aFR5cGUpWzBdO1xuICBjb25zdCByZXNvdXJjZUF0dHJpYnV0ZXMgPSByZXNvdXJjZXNXaXRoVHlwZVtyZXNvdXJjZU5hbWVdO1xuXG4gIGlmIChyZXNvdXJjZUF0dHJpYnV0ZXMuY29ubmVjdGlvbikge1xuICAgIHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uID0ge1xuICAgICAgdmFsdWU6IHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgeyBwcm92aXNpb25lciwgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcmVzb3VyY2VBdHRyaWJ1dGVzO1xuXG4gIGNvbnN0IGhjbCA9IFtgcmVzb3VyY2UgXCIke3Jlc291cmNlVHlwZX1cIiBcIiR7cmVzb3VyY2VOYW1lfVwiIHtgXTtcblxuICBjb25zdCBhdHRycyA9IHJlbmRlckF0dHJpYnV0ZXMob3RoZXJBdHRycyk7XG5cbiAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gIGlmIChwcm92aXNpb25lcikgaGNsLnB1c2gocmVuZGVyUHJvdmlzaW9uZXJCbG9jayhwcm92aXNpb25lcikpO1xuICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgaGNsLnB1c2goXCJ9XCIpO1xuXG4gIHJldHVybiB7XG4gICAgaGNsOiBoY2wuam9pbihcIlxcblwiKSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgW3Jlc291cmNlVHlwZV06IHtcbiAgICAgICAgICBbcmVzb3VyY2VOYW1lXToge1xuICAgICAgICAgICAgXCIvL1wiOiByZXNvdXJjZUF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueSkge1xuICBjb25zdCBkYXRhU291cmNlVHlwZSA9IE9iamVjdC5rZXlzKGRhdGFTb3VyY2UpWzBdO1xuICBjb25zdCBkYXRhU291cmNlc1dpdGhUeXBlID0gZGF0YVNvdXJjZVtkYXRhU291cmNlVHlwZV07XG4gIGNvbnN0IGRhdGFTb3VyY2VOYW1lID0gT2JqZWN0LmtleXMoZGF0YVNvdXJjZXNXaXRoVHlwZSlbMF07XG4gIGNvbnN0IGRhdGFTb3VyY2VBdHRyaWJ1dGVzID0gZGF0YVNvdXJjZXNXaXRoVHlwZVtkYXRhU291cmNlTmFtZV07XG5cbiAgY29uc3QgeyBkeW5hbWljLCAuLi5vdGhlckF0dHJzIH0gPSBkYXRhU291cmNlQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGRhdGEgXCIke2RhdGFTb3VyY2VUeXBlfVwiIFwiJHtkYXRhU291cmNlTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtkYXRhU291cmNlVHlwZV06IHtcbiAgICAgICAgICBbZGF0YVNvdXJjZU5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGRhdGFTb3VyY2VBdHRyaWJ1dGVzW1wiLy9cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXBoZW1lcmFsKGVwaGVtZXJhbDogYW55KSB7XG4gIGNvbnN0IGVwaGVtZXJhbFR5cGUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWwpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxzV2l0aFR5cGUgPSBlcGhlbWVyYWxbZXBoZW1lcmFsVHlwZV07XG4gIGNvbnN0IGVwaGVtZXJhbE5hbWUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWxzV2l0aFR5cGUpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxBdHRyaWJ1dGVzID0gZXBoZW1lcmFsc1dpdGhUeXBlW2VwaGVtZXJhbE5hbWVdO1xuXG4gIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gZXBoZW1lcmFsQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGVwaGVtZXJhbCBcIiR7ZXBoZW1lcmFsVHlwZX1cIiBcIiR7ZXBoZW1lcmFsTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBlcGhlbWVyYWw6IHtcbiAgICAgICAgW2VwaGVtZXJhbFR5cGVdOiB7XG4gICAgICAgICAgW2VwaGVtZXJhbE5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGVwaGVtZXJhbEF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm92aXNpb25lckJsb2NrKHByb3Zpc2lvbmVyczogYW55KSB7XG4gIHJldHVybiBwcm92aXNpb25lcnNcbiAgICAubWFwKChwcm92aXNpb25lcjogYW55KSA9PiB7XG4gICAgICBjb25zdCBwcm92aXNpb25lclR5cGUgPSBPYmplY3Qua2V5cyhwcm92aXNpb25lcilbMF07XG4gICAgICBjb25zdCBwcm92aXNpb25lckF0dHJzID0gcHJvdmlzaW9uZXJbcHJvdmlzaW9uZXJUeXBlXTtcblxuICAgICAgaWYgKHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbikge1xuICAgICAgICBwcm92aXNpb25lckF0dHJzLmNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbixcbiAgICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGR5bmFtaWMsIC4uLm90aGVyQXR0cnMgfSA9IHByb3Zpc2lvbmVyQXR0cnM7XG5cbiAgICAgIGNvbnN0IGhjbCA9IFtgcHJvdmlzaW9uZXIgXCIke3Byb3Zpc2lvbmVyVHlwZX1cIiB7YF07XG5cbiAgICAgIGNvbnN0IGF0dHJzID0gcmVuZGVyQXR0cmlidXRlcyhvdGhlckF0dHJzLnZhbHVlIHx8IG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG4gICAgICBoY2wucHVzaChcIn1cIik7XG5cbiAgICAgIHJldHVybiBoY2wuam9pbihcIlxcblwiKTtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEeW5hbWljQmxvY2tzKGR5bmFtaWM6IGFueSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZHluYW1pYykubWFwKFxuICAgIChbZHluYW1pY05hbWUsIGR5bmFtaWNBdHRyc106IFtzdHJpbmcsIGFueV0pID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IFtgZHluYW1pYyBcIiR7ZHluYW1pY05hbWV9XCIge2BdO1xuICAgICAgcmVzLnB1c2goXG4gICAgICAgIGBmb3JfZWFjaCA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihkeW5hbWljQXR0cnM/LmZvcl9lYWNoKX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChkeW5hbWljQXR0cnM/Lml0ZXJhdG9yKSB7XG4gICAgICAgIHJlcy5wdXNoKGBpdGVyYXRvciA9ICR7ZHluYW1pY0F0dHJzPy5pdGVyYXRvcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChkeW5hbWljQXR0cnM/LmxhYmVscykge1xuICAgICAgICByZXMucHVzaChgbGFiZWxzID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKGR5bmFtaWNBdHRycz8ubGFiZWxzKX1gKTtcbiAgICAgIH1cbiAgICAgIHJlcy5wdXNoKGBjb250ZW50IHtcbiAgJHtyZW5kZXJBdHRyaWJ1dGVzKGR5bmFtaWNBdHRycy5jb250ZW50KX1cbiAgfWApO1xuICAgICAgcmVzLnB1c2goYH1gKTtcblxuICAgICAgcmV0dXJuIHJlcy5qb2luKFwiXFxuXCIpO1xuICAgIH0sXG4gICk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByb3ZpZGVyKHByb3ZpZGVyOiBhbnkpIHtcbiAgY29uc3QgcHJvdmlkZXJOYW1lID0gT2JqZWN0LmtleXMocHJvdmlkZXIpWzBdO1xuICBjb25zdCBwcm92aWRlckF0dHJpYnV0ZXMgPSBwcm92aWRlcltwcm92aWRlck5hbWVdO1xuXG4gIHJldHVybiBwcm92aWRlckF0dHJpYnV0ZXNcbiAgICAubWFwKChwcm92aWRlckluc3RhbmNlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcHJvdmlkZXJJbnN0YW5jZTtcblxuICAgICAgY29uc3QgaGNsID0gW2Bwcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIHtgXTtcblxuICAgICAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgICAgIGhjbC5wdXNoKFwifVwiKTtcblxuICAgICAgcmV0dXJuIGhjbC5qb2luKFwiXFxuXCIpO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1vZHVsZShtb2R1bGU6IGFueSkge1xuICBjb25zdCBtb2R1bGVOYW1lID0gT2JqZWN0LmtleXMobW9kdWxlKVswXTtcbiAgY29uc3QgbW9kdWxlQXR0cmlidXRlcyA9IG1vZHVsZVttb2R1bGVOYW1lXTtcblxuICByZXR1cm4ge1xuICAgIGhjbDogYG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXMobW9kdWxlQXR0cmlidXRlcyl9XG59YCxcbiAgICBtZXRhZGF0YToge1xuICAgICAgbW9kdWxlOiB7XG4gICAgICAgIFttb2R1bGVOYW1lXToge1xuICAgICAgICAgIFwiLy9cIjogbW9kdWxlQXR0cmlidXRlc1tcIi8vXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJPdXRwdXQob3V0cHV0OiBhbnkpIHtcbiAgY29uc3Qgb3V0cHV0TmFtZSA9IE9iamVjdC5rZXlzKG91dHB1dClbMF07XG4gIGNvbnN0IG91dHB1dEF0dHJpYnV0ZXMgPSBvdXRwdXRbb3V0cHV0TmFtZV07XG5cbiAgcmV0dXJuIGBvdXRwdXQgXCIke291dHB1dE5hbWV9XCIge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKG91dHB1dEF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxvY2Fscyhsb2NhbHM6IGFueSkge1xuICBpZiAoIWxvY2Fscykge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QgbG9jYWxOYW1lcyA9IE9iamVjdC5rZXlzKGxvY2Fscyk7XG5cbiAgaWYgKGxvY2FsTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICByZXR1cm4gYGxvY2FscyB7XG4gICAgJHtsb2NhbE5hbWVzXG4gICAgICAvLyBLZWVwIGZhbHNlLCAwIGFuZCBcIlwiLiBBIG51bGwgdmFsdWUgaXMgc3RpbGwgbGVmdCBvdXQ6IGl0IGhhcyBubyBIQ0xcbiAgICAgIC8vIHJlbmRlcmluZyBoZXJlIHlldC5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChuYW1lKSA9PlxuICAgICAgICAgIGxvY2Fsc1tuYW1lXS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGxvY2Fsc1tuYW1lXS52YWx1ZSAhPT0gbnVsbCxcbiAgICAgIClcbiAgICAgIC5tYXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24obG9jYWxzW25hbWVdLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiXFxuXCIpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclZhcmlhYmxlKHZhcmlhYmxlOiBhbnkpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gT2JqZWN0LmtleXModmFyaWFibGUpWzBdO1xuICBjb25zdCB2YXJpYWJsZUF0dHJpYnV0ZXMgPSB2YXJpYWJsZVt2YXJpYWJsZU5hbWVdO1xuXG4gIHJldHVybiBgdmFyaWFibGUgXCIke3ZhcmlhYmxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModmFyaWFibGVBdHRyaWJ1dGVzKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNb3ZlZChtb3ZlOiBhbnkpIHtcbiAgY29uc3QgbW92ZWRCbG9ja3MgPSBtb3ZlLm1hcCgobW92ZUJsb2NrOiBhbnkpID0+IHtcbiAgICByZXR1cm4gYG1vdmVkIHtcbiR7cmVuZGVyQXR0cmlidXRlcyhtb3ZlQmxvY2spfVxufWA7XG4gIH0pO1xuXG4gIHJldHVybiBtb3ZlZEJsb2Nrcy5qb2luKFwiXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJJbXBvcnQoaW1wb3J0czogYW55KSB7XG4gIGNvbnN0IGltcG9ydEJsb2NrcyA9IGltcG9ydHMubWFwKChpbXBvcnRCbG9jazogYW55KSA9PiB7XG4gICAgcmV0dXJuIGBpbXBvcnQge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKGltcG9ydEJsb2NrKX1cbn1gO1xuICB9KTtcblxuICByZXR1cm4gaW1wb3J0QmxvY2tzLmpvaW4oXCJcXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRlcnJhZm9ybSh0ZXJyYWZvcm06IGFueSkge1xuICBjb25zdCBibG9ja0F0dHJpYnV0ZXMgPSBbXCJyZXF1aXJlZF9wcm92aWRlcnNcIiwgXCJiYWNrZW5kXCIsIFwiY2xvdWRcIl07XG4gIGNvbnN0IHJlcXVpcmVkUHJvdmlkZXJzID0gYHJlcXVpcmVkX3Byb3ZpZGVycyB7XG4ke3JlbmRlclNpbXBsZUF0dHJpYnV0ZXModGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyl9XG59YDtcblxuICBjb25zdCBiYWNrZW5kcyA9IE9iamVjdC5rZXlzKHRlcnJhZm9ybS5iYWNrZW5kIHx8IHt9KS5tYXAoKGJhY2tlbmROYW1lKSA9PiB7XG4gICAgcmV0dXJuIGBiYWNrZW5kIFwiJHtiYWNrZW5kTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmJhY2tlbmRbYmFja2VuZE5hbWVdKX1cbn1gO1xuICB9KTtcblxuICBjb25zdCBjbG91ZEJhY2tlbmQgPSB0ZXJyYWZvcm0uY2xvdWRcbiAgICA/IGBjbG91ZCB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmNsb3VkKX1cbn1gXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgb3RoZXJBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXModGVycmFmb3JtKS5maWx0ZXIoXG4gICAgKGtleSkgPT4gIWJsb2NrQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpLFxuICApO1xuICByZXR1cm4gYHRlcnJhZm9ybSB7XG4ke3JlcXVpcmVkUHJvdmlkZXJzfVxuJHtbLi4uYmFja2VuZHMsIGNsb3VkQmFja2VuZF0uam9pbihcIlxcblwiKX1cbiR7cmVuZGVyU2ltcGxlQXR0cmlidXRlcyhvdGhlckF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJsb2NrKGJsb2NrOiBhbnksIF9zdG9yYWdlQ2xhc3NUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHtcbiR7cmVuZGVyQXR0cmlidXRlcyhibG9jayl9XG59YDtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbk9iamVjdDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBcIntcIixcbiAgICAuLi5PYmplY3QuZW50cmllcyhqc29uT2JqZWN0KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWRLZXkgPSB3cmFwSWRlbnRpZmllckluUXVvdGVzSWZOZWVkZWQobmFtZSk7XG4gICAgICByZXR1cm4gYCR7d3JhcHBlZEtleX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfWA7XG4gICAgfSksXG4gICAgXCJ9XCIsXG4gIF0uam9pbihcIlxcblwiKTtcbn1cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gcmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihqc29uRXhwcmVzc2lvbjogYW55KTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoanNvbkV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiW1wiLFxuICAgICAgLi4uanNvbkV4cHJlc3Npb24ubWFwKCh2YWx1ZSkgPT4gYCR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2YWx1ZSl9LGApLFxuICAgICAgXCJdXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgaWYgKGpzb25FeHByZXNzaW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwibnVsbFwiO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbkV4cHJlc3Npb24pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIGBcIlwiYDtcbiAgICB9XG5cbiAgICBpZiAoanNvbkV4cHJlc3Npb24uaW5jbHVkZXMoXCIke1wiKSkge1xuICAgICAgcmV0dXJuIGBcIiR7anNvbkV4cHJlc3Npb259XCJgO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUludChqc29uRXhwcmVzc2lvbiwgMTApLnRvU3RyaW5nKCkgPT09IGpzb25FeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICAgIHJldHVybiBqc29uRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYFwiJHtlc2NhcGVRdW90ZXMoanNvbkV4cHJlc3Npb24pfVwiYDtcbiAgfVxuXG4gIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJ0cnVlXCIgfHwganNvbkV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuICAgIHJldHVybiBqc29uRXhwcmVzc2lvbiBhcyBzdHJpbmc7XG4gIH1cblxuICBpZiAoanNvbkV4cHJlc3Npb24gPT09IFwibnVsbFwiKSB7XG4gICAgcmV0dXJuIGpzb25FeHByZXNzaW9uO1xuICB9XG5cbiAgcmV0dXJuIGAke2pzb25FeHByZXNzaW9ufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclNpbXBsZUF0dHJpYnV0ZXMoYXR0cmlidXRlczogYW55KTogc3RyaW5nIHtcbiAgaWYgKGF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpXG4gICAgLm1hcChcbiAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICBgICAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHZhbHVlIGFzIGFueSl9YCxcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gcmVuZGVyTGlmZWN5Y2xlKGxpZmVjeWNsZTogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGxpZmVjeWNsZSlcbiAgICAubWFwKChbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAvLyByZXBsYWNlX3RyaWdnZXJlZF9ieSBvbmx5IGFjY2VwdHMgcmVmZXJlbmNlcywgd2hpY2ggY2FuJ3QgYmUgcXVvdGVkXG4gICAgICBpZiAobmFtZSA9PT0gXCJyZXBsYWNlX3RyaWdnZXJlZF9ieVwiICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBgICAke25hbWV9ID0gW1xuJHt2YWx1ZS5tYXAoKHJlZmVyZW5jZSkgPT4gYCR7cmVmZXJlbmNlfSxgKS5qb2luKFwiXFxuXCIpfVxuXWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYCAgJHtuYW1lfSA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2YWx1ZSl9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG4vKipcbiAqIERldGVjdHMgYSByZXNvbHZlZC1idXQtZW1wdGllZCBhdHRyaWJ1dGUgZGVzY3JpcHRvcjogYW4gb2JqZWN0IHNoYXBlZCBsaWtlXG4gKiB3aGF0IGBBdHRyaWJ1dGVzRW1pdHRlciNlbWl0VG9IY2xUZXJyYWZvcm1gIGFsd2F5cyBlbWl0cyBmb3IgSENMIHN5bnRoZXNpc1xuICogLSBgeyB2YWx1ZSwgaXNCbG9jaywgdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9YCAtIHRoYXQgaGFzIGxvc3QgaXRzIGB2YWx1ZWBcbiAqIGtleS5cbiAqXG4gKiBUaGUgb25seSB3YXkgYSBkZXNjcmlwdG9yIGxvc2VzIGB2YWx1ZWAgaGVyZSBpcyB0aGF0IGl0IHJlc29sdmVkIHRvXG4gKiBgdW5kZWZpbmVkYDogYHJlc29sdmUoKWAgKHNlZSBgdG9rZW5zL3ByaXZhdGUvcmVzb2x2ZS50c2ApIGRlZXAtcmVzb2x2ZXNcbiAqIGV2ZXJ5IGtleSBvZiBhIHBsYWluIG9iamVjdCBhbmQgc2lsZW50bHkgZHJvcHMgYW55IGtleSB3aG9zZSByZXNvbHZlZFxuICogdmFsdWUgaXMgYHVuZGVmaW5lZGAsIGJ1dCBvbmx5IGB2YWx1ZWAgY2FuIGV2ZXIgZG8gdGhhdCAtIGBpc0Jsb2NrYCxcbiAqIGB0eXBlYCwgYW5kIGBzdG9yYWdlQ2xhc3NUeXBlYCBhcmUgZW1pdHRlZCBhcyBsaXRlcmFsIHN0cmluZ3MvYm9vbGVhbnMgYnlcbiAqIHRoZSBnZW5lcmF0b3IsIG5ldmVyIGFzIHRva2Vucy4gU28gYW4gb2JqZWN0IGNhcnJ5aW5nIGV4YWN0bHkgdGhpc1xuICogbWV0YWRhdGEgY29tYmluYXRpb24sIHdpdGggYHZhbHVlYCBhbmQgYGR5bmFtaWNgIGJvdGggYWJzZW50LCBpcyBhbHdheXNcbiAqIHRoZSBsZWZ0b3ZlciBzaGVsbCBvZiBhIGRlc2NyaXB0b3Igd2hvc2UgdmFsdWUgdmFuaXNoZWQsIG5ldmVyIGEgZ2VudWluZVxuICogdXNlci1zdXBwbGllZCBtYXAgKHRob3NlIGRvbid0IGhhcHBlbiB0byBhbHNvIGNhcnJ5IGBpc0Jsb2NrYCArXG4gKiBgc3RvcmFnZUNsYXNzVHlwZWApLlxuICpcbiAqIFRoaXMgaXMgaW50ZW50aW9uYWxseSBub3Qgc3BlY2lmaWMgdG8gd3JpdGUtb25seSBhdHRyaWJ1dGVzOiBhIHdyaXRlLW9ubHlcbiAqIGF0dHJpYnV0ZSB3cmFwcGVkIGJ5IGBtYXJrV3JpdGVPbmx5QXR0cmlidXRlKClgIGFyb3VuZCBhIGBMYXp5YC90b2tlblxuICogcHJvZHVjZXIgdGhhdCByZXNvbHZlcyB0byBgdW5kZWZpbmVkYCBpcyBzaW1wbHkgb25lIGV4YW1wbGUgKGl0IHN1cnZpdmVzXG4gKiB0aGUgZ2VuZXJhdGVkIFwicmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXCIgcHJlLWZpbHRlciBpblxuICogYHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKClgIGJlY2F1c2UgdGhhdCBmaWx0ZXIgb25seSBzZWVzIHRoZSBzdGlsbC1cbiAqIHVucmVzb2x2ZWQgdG9rZW4sIG5vdCB3aGF0IGl0IGxhdGVyIHJlc29sdmVzIHRvKSAtIGJ1dCBBTlkgYXR0cmlidXRlXG4gKiBkZXNjcmlwdG9yIHdob3NlIHRva2VuIHJlc29sdmVzIHRvIGB1bmRlZmluZWRgIGluIEhDTCBtb2RlIGhpdHMgdGhpcyBzYW1lXG4gKiBwYXRoIChzZWUgdGhlICMzMTMgSENMLWRlZmVjdHMgZmFtaWx5KS5cbiAqL1xuZnVuY3Rpb24gaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIiB8fCB2ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGhhc093biA9IChrZXk6IHN0cmluZykgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHYsIGtleSk7XG4gIHJldHVybiAoXG4gICAgIWhhc093bihcInZhbHVlXCIpICYmXG4gICAgIWhhc093bihcImR5bmFtaWNcIikgJiZcbiAgICBoYXNPd24oXCJpc0Jsb2NrXCIpICYmXG4gICAgaGFzT3duKFwidHlwZVwiKSAmJlxuICAgIGhhc093bihcInN0b3JhZ2VDbGFzc1R5cGVcIilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoYXR0cmlidXRlcyA9PT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcylcbiAgICAubWFwKChbbmFtZSwgdl0pID0+IHtcbiAgICAgIGlmIChuYW1lID09PSBcIi8vXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGFCbG9ja3MgPSBbXCJsaWZlY3ljbGVcIiwgXCJwcm92aXNpb25lclwiXTtcblxuICAgICAgLy9cbiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgc29tZSBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSB0eXBlIGluZm9ybWF0aW9uXG4gICAgICAvLyBqdXN0IHRyeSB0byBndWVzcyB0aGVtXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHYpfWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3Z9YDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odil9YDtcbiAgICAgIH0gZWxzZSBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSBudWxsYDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodiwgXCJ2YWx1ZVwiKSAmJlxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHYsIFwiZHluYW1pY1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEFuIG9ycGhhbmVkIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIChpdHMgJ3ZhbHVlJyByZXNvbHZlZCB0b1xuICAgICAgICAvLyBgdW5kZWZpbmVkYCkgY2FycmllcyBvbmx5IGludGVybmFsIG1ldGFkYXRhIGF0IHRoaXMgcG9pbnQgLSBvbWl0XG4gICAgICAgIC8vIHRoZSBhdHRyaWJ1dGUgZW50aXJlbHksIGV4YWN0bHkgYXMgaWYgaXQgaGFkIG5ldmVyIGJlZW4gc2V0LFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdGhhdCBtZXRhZGF0YSBpbnRvIHRoZSBIQ0wgb3V0cHV0IHZpYVxuICAgICAgICAvLyByZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKCkuIFNlZSBpc09ycGhhbmVkQXR0cmlidXRlRGVzY3JpcHRvcigpLlxuICAgICAgICBpZiAoaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodikpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSBcImxpZmVjeWNsZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IHtcbiR7cmVuZGVyTGlmZWN5Y2xlKHYpfVxufWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFCbG9ja3MuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0ge1xuJHtyZW5kZXJTaW1wbGVBdHRyaWJ1dGVzKHYpfVxufWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHYpfWA7XG4gICAgICB9IGVsc2UgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWZlcmVuY2luZyBib3RoIGlzQmxvY2sgYW5kIGlzX2Jsb2NrLCBiZWNhdXNlIHNvbWV0aW1lcyB3ZSBwYXNzIHRocm91Z2ggYSBzbmFrZSBjYXNlIGZpbHRlclxuICAgICAgLy8gd2l0aGluIGF0dHJpYnV0ZXMuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGR5bmFtaWMsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0eXBlLFxuICAgICAgICBpc0Jsb2NrLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlLFxuICAgICAgICBpc19ibG9jayxcbiAgICAgICAgc3RvcmFnZV9jbGFzc190eXBlLFxuICAgICAgfSA9IHYgYXMgYW55O1xuICAgICAgY29uc3QgYmxvY2sgPSBpc0Jsb2NrIHx8IGlzX2Jsb2NrIHx8IG1ldGFCbG9ja3MuaW5jbHVkZXMobmFtZSk7XG4gICAgICBjb25zdCBjbGFzc1R5cGUgPSBzdG9yYWdlQ2xhc3NUeXBlIHx8IHN0b3JhZ2VfY2xhc3NfdHlwZTtcblxuICAgICAgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlckR5bmFtaWNCbG9ja3Moe1xuICAgICAgICAgIFtuYW1lXTogZHluYW1pYy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBTaG9ydCBjaXJjdWl0IHR5cGUgY2hlY2tpbmcgaWYgdmFsdWUgaXMgYW4gZXhwcmVzc2lvblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5pbmNsdWRlcyhcIiR7XCIpKSB7XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyU3RyaW5nKHZhbHVlKX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmxvY2sgJiYgdHlwZSAhPT0gXCJsaXN0XCIgJiYgdHlwZSAhPT0gXCJzZXRcIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0ge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKHZhbHVlKX1cbn1gO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IFwibGlzdFwiIHx8IHR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbmRlckxpc3QodiwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJMaXN0KHYpfWA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gXCJtYXBcIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlck1hcCh2YWx1ZSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IFwic2ltcGxlXCIpIHtcbiAgICAgICAgaWYgKGNsYXNzVHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyU3RyaW5nKHZhbHVlKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGFzc1R5cGUgPT09IFwibnVtYmVyXCIgfHwgY2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7dmFsdWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdCBzdXJlIHdoeSB3ZSdyZSBoZXJlLCBidXQgdGhlcmUncyBlaXRoZXIgYSBidWcgaW4gdGhlIHByb3ZpZGVyXG4gICAgICAgIC8vIG9yIHdlIGhhdmUgc2tpcHBlZCB0aGUgYXR0cmlidXRlIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiBvdXIgcHJvdmlkZXJcbiAgICAgICAgLy8gSW4gZWl0aGVyIGNhc2UsIHdlIHNob3VsZCB0cnkgdG8gbm90IG91dHB1dCBbb2JqZWN0IE9iamVjdF0gaGVyZVxuICAgICAgICAvLyBhbmQgdHJ5IGEgYmVzdCBhcHByb3hpbWF0aW9uLiBUaG91Z2gsIGl0IHdvdWxkIG5vdCB3b3JrIGZvclxuICAgICAgICAvLyBibG9ja3NcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJldHVybiBgXG4jIFdhcm5pbmc6IFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIGlzIG9mIGFuIHVuZXhwZWN0ZWQgdHlwZS4gRWl0aGVyIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggdGhlIHByb3ZpZGVyXG4jIG9yIENES1ROIGhhcyBjaG9zZW4gdG8gc2tpcCBnZW5lcmF0aW5nIGEgZGV0YWlsZWQgdHlwZSBmb3IgdGhpcyBiZWNhdXNlIGl0IGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUgcHJvdmlkZXIgbGlicmFyeSBzaWduaWZpY2FudGx5LiBcbiMgUGxlYXNlIGNoZWNrIGlmIHRoaXMgcmVzb3VyY2UgaXMgaW5jbHVkZWQgaW4gb3VyIHNraXAgbGlzdDogXG4jIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iLzFmYjg1ODgwOTVhNTVkNDc1ZGM0YmUyODg4MmVjNGY0MjAwNmVjOGQvcGFja2FnZXMvJTQwY2RrdGYvcHJvdmlkZXItZ2VuZXJhdG9yL2xpYi9nZXQvZ2VuZXJhdG9yL3NraXBwZWQtYXR0cmlidXRlcy50c1xuIyBhbmQgaWYgbm90LCBwbGVhc2UgY2hlY2sgd2l0aCB0aGUgcHJvdmlkZXIgYXV0aG9ycyB0byBzZWUgaWYgdGhlIHByb3ZpZGVyIHNjaGVtYSBpcyBhY2N1cmF0ZS5cbiMgXG4jIFdlIHVuZGVyc3RhbmQgdGhpcyBpcyBub3QgaWRlYWwsIHNvIHdlIHN1Z2dlc3QgdXNpbmcgSlNPTiBzeW50aGVzaXMgaW5zdGVhZCBvZiBIQ0wgc3ludGhlc2lzIGZvciB0aGlzIHBhcnRpY3VsYXIgY2FzZS5cblxuJHtuYW1lfSA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2YWx1ZSl9XG5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcImFueVwiKSB7XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2YWx1ZSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IFwicmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3ZhbHVlfWA7XG4gICAgfSlcbiAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG4iXX0=
@@ -10,7 +10,7 @@ const fs_1 = require("./private/fs");
10
10
  * directories (with everything inside them).
11
11
  */
12
12
  class ExcludeIgnoreStrategy {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ExcludeIgnoreStrategy", version: "0.26.0-pre.2" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ExcludeIgnoreStrategy", version: "0.26.0-pre.21" };
14
14
  matcher;
15
15
  cacheKey;
16
16
  // Undefined (the interface default) prunes excluded directories, which is
@@ -9,7 +9,7 @@ const target_versions_1 = require("./validations/target-versions");
9
9
  */
10
10
  class ImportableResource extends terraform_element_1.TerraformElement {
11
11
  config;
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ImportableResource", version: "0.26.0-pre.2" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ImportableResource", version: "0.26.0-pre.21" };
13
13
  constructor(scope, name, config) {
14
14
  super(scope, name, config.terraformResourceType);
15
15
  this.config = config;
package/lib/manifest.d.ts CHANGED
@@ -19,6 +19,10 @@ export interface IManifest {
19
19
  readonly stacks: Record<StackManifest["name"], StackManifest>;
20
20
  readonly version: string;
21
21
  }
22
+ /**
23
+ * Describes the synthesized output of an app: the stacks, their output paths, annotations and dependencies.
24
+ * Written to manifest.json in the output directory.
25
+ */
22
26
  export declare class Manifest implements IManifest {
23
27
  readonly version: string;
24
28
  readonly outdir: string;
package/lib/manifest.js CHANGED
@@ -43,12 +43,15 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
43
43
  const path = __importStar(require("path"));
44
44
  const fs = __importStar(require("fs"));
45
45
  const safe_stable_stringify_1 = __importDefault(require("safe-stable-stringify"));
46
- // eslint-disable-next-line jsdoc/require-jsdoc
46
+ /**
47
+ * Describes the synthesized output of an app: the stacks, their output paths, annotations and dependencies.
48
+ * Written to manifest.json in the output directory.
49
+ */
47
50
  class Manifest {
48
51
  version;
49
52
  outdir;
50
53
  hclOutput;
51
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Manifest", version: "0.26.0-pre.2" };
54
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Manifest", version: "0.26.0-pre.21" };
52
55
  static fileName = "manifest.json";
53
56
  static stacksFolder = "stacks";
54
57
  static stackMetadataPath = "metadata.json";
@@ -96,4 +99,4 @@ class Manifest {
96
99
  }
97
100
  }
98
101
  exports.Manifest = Manifest;
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWFuaWZlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUd6QixrRkFBOEM7QUF3QjlDLCtDQUErQztBQUMvQyxNQUFhLFFBQVE7SUFTRDtJQUNBO0lBQ0E7O0lBVlgsTUFBTSxDQUFVLFFBQVEsR0FBRyxlQUFlLENBQUM7SUFDM0MsTUFBTSxDQUFVLFlBQVksR0FBRyxRQUFRLENBQUM7SUFDeEMsTUFBTSxDQUFVLGlCQUFpQixHQUFHLGVBQWUsQ0FBQztJQUUzQyxNQUFNLEdBQWlELEVBQUUsQ0FBQztJQUMxRCxhQUFhLENBQVM7SUFFdEMsWUFDa0IsT0FBZSxFQUNmLE1BQWMsRUFDZCxTQUFrQjtRQUZsQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFFbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUM1RCxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQXFCO1FBQ25DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUVyQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFrQjtZQUM5QixJQUFJO1lBQ0osYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ3hCLHVFQUF1RTtZQUN2RSxvRUFBb0U7WUFDcEUsb0VBQW9FO1lBQ3BFLHdDQUF3QztZQUN4QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ25DLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLElBQUksQ0FBQyxFQUFFLEVBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FDbkI7WUFDRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDaEMsUUFBUSxDQUFDLFlBQVksRUFDckIsSUFBSSxDQUFDLEVBQUUsRUFDUCxRQUFRLENBQUMsaUJBQWlCLENBQzNCO1lBQ0QsV0FBVyxFQUFFLEVBQUUsRUFBRSwrQ0FBK0M7WUFDaEUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFN0IsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLGFBQWE7UUFDbEIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFTSxXQUFXO1FBQ2hCLEVBQUUsQ0FBQyxhQUFhLENBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFDekMsSUFBQSwrQkFBUyxFQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFXLENBQ25ELENBQUM7SUFDSixDQUFDOztBQWpFSCw0QkFrRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCIuL3RlcnJhZm9ybS1zdGFja1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbk1ldGFkYXRhRW50cnlUeXBlIH0gZnJvbSBcIi4vYW5ub3RhdGlvbnNcIjtcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSBcInNhZmUtc3RhYmxlLXN0cmluZ2lmeVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQW5ub3RhdGlvbiB7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdFBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgbGV2ZWw6IEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZTtcbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuICByZWFkb25seSBzdGFja3RyYWNlPzogc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrTWFuaWZlc3Qge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdFBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgc3ludGhlc2l6ZWRTdGFja1BhdGg6IHN0cmluZztcbiAgLy8gT25seSB2YWxpZCBmb3IgSENMIHN5bnRoZXNpcywgZm9yIEpTT04gdGhlIG1ldGFkYXRhIGlzIHdpdGhpbiB0aGUgc3ludGhlc2l6ZWQgb3V0cHV0XG4gIHJlYWRvbmx5IHN0YWNrTWV0YWRhdGFQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcbiAgcmVhZG9ubHkgYW5ub3RhdGlvbnM6IFN0YWNrQW5ub3RhdGlvbltdO1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNYW5pZmVzdCB7XG4gIHJlYWRvbmx5IHN0YWNrczogUmVjb3JkPFN0YWNrTWFuaWZlc3RbXCJuYW1lXCJdLCBTdGFja01hbmlmZXN0PjtcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIE1hbmlmZXN0IGltcGxlbWVudHMgSU1hbmlmZXN0IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmaWxlTmFtZSA9IFwibWFuaWZlc3QuanNvblwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHN0YWNrc0ZvbGRlciA9IFwic3RhY2tzXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgc3RhY2tNZXRhZGF0YVBhdGggPSBcIm1ldGFkYXRhLmpzb25cIjtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tzOiBSZWNvcmQ8U3RhY2tNYW5pZmVzdFtcIm5hbWVcIl0sIFN0YWNrTWFuaWZlc3Q+ID0ge307XG4gIHB1YmxpYyByZWFkb25seSBzdGFja0ZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3V0ZGlyOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGhjbE91dHB1dDogYm9vbGVhbixcbiAgKSB7XG4gICAgY29uc3Qgc3RhY2tzUGF0aCA9IHBhdGguam9pbih0aGlzLm91dGRpciwgTWFuaWZlc3Quc3RhY2tzRm9sZGVyKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc3RhY2tzUGF0aCkpIGZzLm1rZGlyU3luYyhzdGFja3NQYXRoKTtcblxuICAgIHRoaXMuc3RhY2tGaWxlTmFtZSA9IGhjbE91dHB1dCA/IFwiY2RrLnRmXCIgOiBcImNkay50Zi5qc29uXCI7XG4gIH1cblxuICBwdWJsaWMgZm9yU3RhY2soc3RhY2s6IFRlcnJhZm9ybVN0YWNrKTogU3RhY2tNYW5pZmVzdCB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrLm5vZGU7XG4gICAgY29uc3QgbmFtZSA9IG5vZGUuaWQ7XG5cbiAgICBpZiAodGhpcy5zdGFja3NbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YWNrc1tuYW1lXTtcbiAgICB9XG5cbiAgICBjb25zdCBtYW5pZmVzdDogU3RhY2tNYW5pZmVzdCA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBjb25zdHJ1Y3RQYXRoOiBub2RlLnBhdGgsXG4gICAgICAvLyBUaGVzZSBhcmUgcmVjb3JkZWQgaW4gbWFuaWZlc3QuanNvbiBhbmQgYXJlIGFsd2F5cyBcIi9cIi1zZXBhcmF0ZWQsIHNvXG4gICAgICAvLyB0aGUgbWFuaWZlc3QgcmVhZHMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgaG9zdCBwbGF0Zm9ybS4gTm9kZVxuICAgICAgLy8gYWNjZXB0cyBmb3J3YXJkIHNsYXNoZXMgaW4gcGF0aHMgb24gV2luZG93cyB0b28sIHNvIGNvbnN1bWVycyBjYW5cbiAgICAgIC8vIHN0aWxsIGpvaW4gdGhlbSBvbnRvIG91dGRpciBkaXJlY3RseS5cbiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHBhdGgucG9zaXguam9pbihNYW5pZmVzdC5zdGFja3NGb2xkZXIsIG5vZGUuaWQpLFxuICAgICAgc3ludGhlc2l6ZWRTdGFja1BhdGg6IHBhdGgucG9zaXguam9pbihcbiAgICAgICAgTWFuaWZlc3Quc3RhY2tzRm9sZGVyLFxuICAgICAgICBub2RlLmlkLFxuICAgICAgICB0aGlzLnN0YWNrRmlsZU5hbWUsXG4gICAgICApLFxuICAgICAgc3RhY2tNZXRhZGF0YVBhdGg6IHBhdGgucG9zaXguam9pbihcbiAgICAgICAgTWFuaWZlc3Quc3RhY2tzRm9sZGVyLFxuICAgICAgICBub2RlLmlkLFxuICAgICAgICBNYW5pZmVzdC5zdGFja01ldGFkYXRhUGF0aCxcbiAgICAgICksXG4gICAgICBhbm5vdGF0aW9uczogW10sIC8vIHdpbGwgYmUgcmVwbGFjZWQgbGF0ZXIgd2hlbiBwcm9jZXNzZWQgaW4gQXBwXG4gICAgICBkZXBlbmRlbmNpZXM6IHN0YWNrLmRlcGVuZGVuY2llcy5tYXAoKGl0ZW0pID0+IGl0ZW0ubm9kZS5wYXRoKSxcbiAgICB9O1xuICAgIHRoaXMuc3RhY2tzW25hbWVdID0gbWFuaWZlc3Q7XG5cbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRNYW5pZmVzdCgpOiBJTWFuaWZlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgd3JpdGVUb0ZpbGUoKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbih0aGlzLm91dGRpciwgTWFuaWZlc3QuZmlsZU5hbWUpLFxuICAgICAgc3RyaW5naWZ5KHRoaXMuYnVpbGRNYW5pZmVzdCgpLCBudWxsLCAyKSBhcyBzdHJpbmcsXG4gICAgKTtcbiAgfVxufVxuIl19
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWFuaWZlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUd6QixrRkFBOEM7QUF3QjlDOzs7R0FHRztBQUNILE1BQWEsUUFBUTtJQVNEO0lBQ0E7SUFDQTs7SUFWWCxNQUFNLENBQVUsUUFBUSxHQUFHLGVBQWUsQ0FBQztJQUMzQyxNQUFNLENBQVUsWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUN4QyxNQUFNLENBQVUsaUJBQWlCLEdBQUcsZUFBZSxDQUFDO0lBRTNDLE1BQU0sR0FBaUQsRUFBRSxDQUFDO0lBQzFELGFBQWEsQ0FBUztJQUV0QyxZQUNrQixPQUFlLEVBQ2YsTUFBYyxFQUNkLFNBQWtCO1FBRmxCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUVsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0lBQzVELENBQUM7SUFFTSxRQUFRLENBQUMsS0FBcUI7UUFDbkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQWtCO1lBQzlCLElBQUk7WUFDSixhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDeEIsdUVBQXVFO1lBQ3ZFLG9FQUFvRTtZQUNwRSxvRUFBb0U7WUFDcEUsd0NBQXdDO1lBQ3hDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDbkMsUUFBUSxDQUFDLFlBQVksRUFDckIsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsYUFBYSxDQUNuQjtZQUNELGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNoQyxRQUFRLENBQUMsWUFBWSxFQUNyQixJQUFJLENBQUMsRUFBRSxFQUNQLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDM0I7WUFDRCxXQUFXLEVBQUUsRUFBRSxFQUFFLCtDQUErQztZQUNoRSxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQy9ELENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUU3QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVc7UUFDaEIsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUN6QyxJQUFBLCtCQUFTLEVBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQVcsQ0FDbkQsQ0FBQztJQUNKLENBQUM7O0FBakVILDRCQWtFQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXN0YWNrXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUgfSBmcm9tIFwiLi9hbm5vdGF0aW9uc1wiO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tIFwic2FmZS1zdGFibGUtc3RyaW5naWZ5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tBbm5vdGF0aW9uIHtcbiAgcmVhZG9ubHkgY29uc3RydWN0UGF0aDogc3RyaW5nO1xuICByZWFkb25seSBsZXZlbDogQW5ub3RhdGlvbk1ldGFkYXRhRW50cnlUeXBlO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWNrdHJhY2U/OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tNYW5pZmVzdCB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uc3RydWN0UGF0aDogc3RyaW5nO1xuICByZWFkb25seSBzeW50aGVzaXplZFN0YWNrUGF0aDogc3RyaW5nO1xuICAvLyBPbmx5IHZhbGlkIGZvciBIQ0wgc3ludGhlc2lzLCBmb3IgSlNPTiB0aGUgbWV0YWRhdGEgaXMgd2l0aGluIHRoZSBzeW50aGVzaXplZCBvdXRwdXRcbiAgcmVhZG9ubHkgc3RhY2tNZXRhZGF0YVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nO1xuICByZWFkb25seSBhbm5vdGF0aW9uczogU3RhY2tBbm5vdGF0aW9uW107XG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hbmlmZXN0IHtcbiAgcmVhZG9ubHkgc3RhY2tzOiBSZWNvcmQ8U3RhY2tNYW5pZmVzdFtcIm5hbWVcIl0sIFN0YWNrTWFuaWZlc3Q+O1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBzeW50aGVzaXplZCBvdXRwdXQgb2YgYW4gYXBwOiB0aGUgc3RhY2tzLCB0aGVpciBvdXRwdXQgcGF0aHMsIGFubm90YXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG4gKiBXcml0dGVuIHRvIG1hbmlmZXN0Lmpzb24gaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYW5pZmVzdCBpbXBsZW1lbnRzIElNYW5pZmVzdCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZmlsZU5hbWUgPSBcIm1hbmlmZXN0Lmpzb25cIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBzdGFja3NGb2xkZXIgPSBcInN0YWNrc1wiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHN0YWNrTWV0YWRhdGFQYXRoID0gXCJtZXRhZGF0YS5qc29uXCI7XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrczogUmVjb3JkPFN0YWNrTWFuaWZlc3RbXCJuYW1lXCJdLCBTdGFja01hbmlmZXN0PiA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tGaWxlTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IG91dGRpcjogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBoY2xPdXRwdXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIGNvbnN0IHN0YWNrc1BhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRkaXIsIE1hbmlmZXN0LnN0YWNrc0ZvbGRlcik7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHN0YWNrc1BhdGgpKSBmcy5ta2RpclN5bmMoc3RhY2tzUGF0aCk7XG5cbiAgICB0aGlzLnN0YWNrRmlsZU5hbWUgPSBoY2xPdXRwdXQgPyBcImNkay50ZlwiIDogXCJjZGsudGYuanNvblwiO1xuICB9XG5cbiAgcHVibGljIGZvclN0YWNrKHN0YWNrOiBUZXJyYWZvcm1TdGFjayk6IFN0YWNrTWFuaWZlc3Qge1xuICAgIGNvbnN0IG5vZGUgPSBzdGFjay5ub2RlO1xuICAgIGNvbnN0IG5hbWUgPSBub2RlLmlkO1xuXG4gICAgaWYgKHRoaXMuc3RhY2tzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFja3NbbmFtZV07XG4gICAgfVxuXG4gICAgY29uc3QgbWFuaWZlc3Q6IFN0YWNrTWFuaWZlc3QgPSB7XG4gICAgICBuYW1lLFxuICAgICAgY29uc3RydWN0UGF0aDogbm9kZS5wYXRoLFxuICAgICAgLy8gVGhlc2UgYXJlIHJlY29yZGVkIGluIG1hbmlmZXN0Lmpzb24gYW5kIGFyZSBhbHdheXMgXCIvXCItc2VwYXJhdGVkLCBzb1xuICAgICAgLy8gdGhlIG1hbmlmZXN0IHJlYWRzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGhlIGhvc3QgcGxhdGZvcm0uIE5vZGVcbiAgICAgIC8vIGFjY2VwdHMgZm9yd2FyZCBzbGFzaGVzIGluIHBhdGhzIG9uIFdpbmRvd3MgdG9vLCBzbyBjb25zdW1lcnMgY2FuXG4gICAgICAvLyBzdGlsbCBqb2luIHRoZW0gb250byBvdXRkaXIgZGlyZWN0bHkuXG4gICAgICB3b3JraW5nRGlyZWN0b3J5OiBwYXRoLnBvc2l4LmpvaW4oTWFuaWZlc3Quc3RhY2tzRm9sZGVyLCBub2RlLmlkKSxcbiAgICAgIHN5bnRoZXNpemVkU3RhY2tQYXRoOiBwYXRoLnBvc2l4LmpvaW4oXG4gICAgICAgIE1hbmlmZXN0LnN0YWNrc0ZvbGRlcixcbiAgICAgICAgbm9kZS5pZCxcbiAgICAgICAgdGhpcy5zdGFja0ZpbGVOYW1lLFxuICAgICAgKSxcbiAgICAgIHN0YWNrTWV0YWRhdGFQYXRoOiBwYXRoLnBvc2l4LmpvaW4oXG4gICAgICAgIE1hbmlmZXN0LnN0YWNrc0ZvbGRlcixcbiAgICAgICAgbm9kZS5pZCxcbiAgICAgICAgTWFuaWZlc3Quc3RhY2tNZXRhZGF0YVBhdGgsXG4gICAgICApLFxuICAgICAgYW5ub3RhdGlvbnM6IFtdLCAvLyB3aWxsIGJlIHJlcGxhY2VkIGxhdGVyIHdoZW4gcHJvY2Vzc2VkIGluIEFwcFxuICAgICAgZGVwZW5kZW5jaWVzOiBzdGFjay5kZXBlbmRlbmNpZXMubWFwKChpdGVtKSA9PiBpdGVtLm5vZGUucGF0aCksXG4gICAgfTtcbiAgICB0aGlzLnN0YWNrc1tuYW1lXSA9IG1hbmlmZXN0O1xuXG4gICAgcmV0dXJuIG1hbmlmZXN0O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkTWFuaWZlc3QoKTogSU1hbmlmZXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHdyaXRlVG9GaWxlKCkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4odGhpcy5vdXRkaXIsIE1hbmlmZXN0LmZpbGVOYW1lKSxcbiAgICAgIHN0cmluZ2lmeSh0aGlzLmJ1aWxkTWFuaWZlc3QoKSwgbnVsbCwgMikgYXMgc3RyaW5nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -105,11 +105,19 @@ function pathHash(path) {
105
105
  .digest("hex");
106
106
  return md5.slice(0, HASH_LEN).toUpperCase();
107
107
  }
108
- // eslint-disable-next-line jsdoc/require-jsdoc
108
+ /**
109
+ * Removes characters that are not allowed in a logical ID
110
+ * @param s String to clean
111
+ * @returns The string containing only alphanumerics, `_` and `-`
112
+ */
109
113
  function removeDisallowedCharacters(s) {
110
114
  return removeNonAlphanumericSep(s);
111
115
  }
112
- // eslint-disable-next-line jsdoc/require-jsdoc
116
+ /**
117
+ * Removes all characters except alphanumerics, `_` and `-`
118
+ * @param s String to clean
119
+ * @returns The string containing only alphanumerics, `_` and `-`
120
+ */
113
121
  function removeNonAlphanumericSep(s) {
114
122
  return s.replace(/[^A-Za-z0-9_-]/g, "");
115
123
  }
@@ -128,4 +136,4 @@ function removeDupes(path) {
128
136
  }
129
137
  return ret;
130
138
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaXZhdGUvdW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLG9DQWlDQztBQXBFRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywrQ0FBaUM7QUFDakMsc0NBQWdFO0FBRWhFOzs7OztHQUtHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUMsb0JBQW9CO0FBQy9DLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2Qjs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFvQjtJQUMvQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRXZELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUEsNENBQW1DLEdBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxnQ0FBZ0M7SUFDaEMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLHFFQUFxRTtRQUNyRSx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSw2Q0FBNkM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsMEVBQTBFO1FBQzFFLG1CQUFtQjtRQUNuQixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxvQkFBb0IsQ0FBQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDaEIsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUzQixPQUFPLEtBQUssR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ25DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBYztJQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNO1NBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQsK0NBQStDO0FBQy9DLFNBQVMsMEJBQTBCLENBQUMsQ0FBUztJQUMzQyxPQUFPLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyx3QkFBd0IsQ0FBQyxDQUFTO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDakUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdmFyLXJlcXVpcmVzXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgY2Fubm90Q2FsY0lkRm9yRW1wdHlTZXRPZkNvbXBvbmVudHMgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgaGlkZGVuIGZyb20gaHVtYW5zXG4gKlxuICogVGhleSBkbyBub3QgYXBwZWFyIGluIHRoZSBodW1hbi1yZWFkYWJsZSBwYXJ0IG9mIHRoZSBsb2dpY2FsIElELFxuICogYnV0IHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNhbGN1bGF0aW9uLlxuICovXG5jb25zdCBISURERU5fRlJPTV9IVU1BTl9JRCA9IFwiUmVzb3VyY2VcIjtcblxuLyoqXG4gKiBSZXNvdXJjZXMgd2l0aCB0aGlzIElEIGFyZSBjb21wbGV0ZSBoaWRkZW4gZnJvbSB0aGUgbG9naWNhbCBJRCBjYWxjdWxhdGlvbi5cbiAqL1xuY29uc3QgSElEREVOX0lEID0gXCJEZWZhdWx0XCI7XG5cbmNvbnN0IFBBVEhfU0VQID0gXCIvXCI7XG5jb25zdCBVTklRVUVfU0VQID0gXCJfXCI7XG5cbmNvbnN0IEhBU0hfTEVOID0gODtcbmNvbnN0IE1BWF9IVU1BTl9MRU4gPSAyNDA7IC8vIG1heCBJRCBsZW4gaXMgMjU1XG5jb25zdCBNQVhfSURfTEVOID0gMjU1O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSB1bmlxdWUgSUQgZm9yIGEgc2V0IG9mIHRleHR1YWwgY29tcG9uZW50cy5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgYnkgY2FsY3VsYXRpbmcgYSBoYXNoIG9uIHRoZSBmdWxsIHBhdGggYW5kIHVzaW5nIGl0IGFzIGEgc3VmZml4XG4gKiBvZiBhIGxlbmd0aC1saW1pdGVkIFwiaHVtYW5cIiByZW5kaXRpb24gb2YgdGhlIHBhdGggY29tcG9uZW50cy5cbiAqXG4gKiBAcGFyYW0gY29tcG9uZW50cyBUaGUgcGF0aCBjb21wb25lbnRzXG4gKiBAcmV0dXJucyBhIHVuaXF1ZSBhbHBoYS1udW1lcmljIGlkZW50aWZpZXIgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDI1NVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVVuaXF1ZUlkKGNvbXBvbmVudHM6IHN0cmluZ1tdKSB7XG4gIGNvbXBvbmVudHMgPSBjb21wb25lbnRzLmZpbHRlcigoeCkgPT4geCAhPT0gSElEREVOX0lEKTtcblxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBjYW5ub3RDYWxjSWRGb3JFbXB0eVNldE9mQ29tcG9uZW50cygpO1xuICB9XG5cbiAgLy8gdG9wLWxldmVsIHJlc291cmNlcyB3aWxsIHNpbXBseSB1c2UgdGhlIGBuYW1lYCBhcy1pcyBpbiBvcmRlciB0byBzdXBwb3J0XG4gIC8vIHRyYW5zcGFyZW50IG1pZ3JhdGlvbiBvZiBjbG91ZGZvcm1hdGlvbiB0ZW1wbGF0ZXMgdG8gdGhlIENESyB3aXRob3V0IHRoZVxuICAvLyBuZWVkIHRvIHJlbmFtZSBhbGwgcmVzb3VyY2VzLlxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyB3ZSBmaWx0ZXIgb3V0IG5vbi1hbHBoYSBjaGFyYWN0ZXJzIGJ1dCB0aGF0IGlzIGFjdHVhbGx5IGEgYmFkIGlkZWFcbiAgICAvLyBiZWNhdXNlIGl0IGNvdWxkIGNyZWF0ZSBjb25mbGljdHMgKFwiQS1CXCIgYW5kIFwiQUJcIiB3aWxsIHJlbmRlciB0aGUgc2FtZVxuICAgIC8vIGxvZ2ljYWwgSUQpLiBzYWRseSwgY2hhbmdpbmcgaXQgaW4gdGhlIDEueCB2ZXJzaW9uIGxpbmUgaXMgaW1wb3NzaWJsZVxuICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZS4gd2Ugc2hvdWxkIGNvbnNpZGVyIGZvciB2Mi4wLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvNjQyMVxuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKGNvbXBvbmVudHNbMF0pO1xuXG4gICAgLy8gaWYgb3VyIGNhbmRpZGF0ZSBpcyBzaG9ydCBlbm91Z2gsIHVzZSBpdCBhcyBpcy4gb3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgbm9ybWFsIG1vZGUuXG4gICAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggPD0gTUFYX0lEX0xFTikge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXNoID0gcGF0aEhhc2goY29tcG9uZW50cyk7XG4gIGNvbnN0IGh1bWFuID0gcmVtb3ZlRHVwZXMoY29tcG9uZW50cylcbiAgICAuZmlsdGVyKCh4KSA9PiB4ICE9PSBISURERU5fRlJPTV9IVU1BTl9JRClcbiAgICAubWFwKChzKSA9PiByZW1vdmVEaXNhbGxvd2VkQ2hhcmFjdGVycyhzKSlcbiAgICAuam9pbihVTklRVUVfU0VQKVxuICAgIC5zbGljZSgwLCBNQVhfSFVNQU5fTEVOKTtcblxuICByZXR1cm4gaHVtYW4gKyBVTklRVUVfU0VQICsgaGFzaDtcbn1cblxuLyoqXG4gKiBUYWtlIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBUaGUgaGFzaCBpcyBsaW1pdGVkIGluIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHBhdGhIYXNoKHBhdGg6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgbWQ1ID0gY3J5cHRvXG4gICAgLmNyZWF0ZUhhc2goXCJtZDVcIilcbiAgICAudXBkYXRlKHBhdGguam9pbihQQVRIX1NFUCkpXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbiAgcmV0dXJuIG1kNS5zbGljZSgwLCBIQVNIX0xFTikudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKHM6IHN0cmluZykge1xuICByZXR1cm4gcmVtb3ZlTm9uQWxwaGFudW1lcmljU2VwKHMpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gcmVtb3ZlTm9uQWxwaGFudW1lcmljU2VwKHM6IHN0cmluZykge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bXkEtWmEtejAtOV8tXS9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZHVwbGljYXRlIFwidGVybXNcIiBmcm9tIHRoZSBwYXRoIGxpc3RcbiAqXG4gKiBJZiB0aGUgcHJldmlvdXMgcGF0aCBjb21wb25lbnQgbmFtZSBlbmRzIHdpdGggdGhpcyBjb21wb25lbnQgbmFtZSwgc2tpcCB0aGVcbiAqIGN1cnJlbnQgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiByZW1vdmVEdXBlcyhwYXRoOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBwYXRoKSB7XG4gICAgaWYgKHJldC5sZW5ndGggPT09IDAgfHwgIXJldFtyZXQubGVuZ3RoIC0gMV0uZW5kc1dpdGgoY29tcG9uZW50KSkge1xuICAgICAgcmV0LnB1c2goY29tcG9uZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuIl19
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaXZhdGUvdW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLG9DQWlDQztBQXBFRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywrQ0FBaUM7QUFDakMsc0NBQWdFO0FBRWhFOzs7OztHQUtHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUMsb0JBQW9CO0FBQy9DLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2Qjs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFvQjtJQUMvQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRXZELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUEsNENBQW1DLEdBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxnQ0FBZ0M7SUFDaEMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLHFFQUFxRTtRQUNyRSx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSw2Q0FBNkM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsMEVBQTBFO1FBQzFFLG1CQUFtQjtRQUNuQixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxvQkFBb0IsQ0FBQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDaEIsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUzQixPQUFPLEtBQUssR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ25DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBYztJQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNO1NBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsMEJBQTBCLENBQUMsQ0FBUztJQUMzQyxPQUFPLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxDQUFTO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDakUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdmFyLXJlcXVpcmVzXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgY2Fubm90Q2FsY0lkRm9yRW1wdHlTZXRPZkNvbXBvbmVudHMgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgaGlkZGVuIGZyb20gaHVtYW5zXG4gKlxuICogVGhleSBkbyBub3QgYXBwZWFyIGluIHRoZSBodW1hbi1yZWFkYWJsZSBwYXJ0IG9mIHRoZSBsb2dpY2FsIElELFxuICogYnV0IHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNhbGN1bGF0aW9uLlxuICovXG5jb25zdCBISURERU5fRlJPTV9IVU1BTl9JRCA9IFwiUmVzb3VyY2VcIjtcblxuLyoqXG4gKiBSZXNvdXJjZXMgd2l0aCB0aGlzIElEIGFyZSBjb21wbGV0ZSBoaWRkZW4gZnJvbSB0aGUgbG9naWNhbCBJRCBjYWxjdWxhdGlvbi5cbiAqL1xuY29uc3QgSElEREVOX0lEID0gXCJEZWZhdWx0XCI7XG5cbmNvbnN0IFBBVEhfU0VQID0gXCIvXCI7XG5jb25zdCBVTklRVUVfU0VQID0gXCJfXCI7XG5cbmNvbnN0IEhBU0hfTEVOID0gODtcbmNvbnN0IE1BWF9IVU1BTl9MRU4gPSAyNDA7IC8vIG1heCBJRCBsZW4gaXMgMjU1XG5jb25zdCBNQVhfSURfTEVOID0gMjU1O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSB1bmlxdWUgSUQgZm9yIGEgc2V0IG9mIHRleHR1YWwgY29tcG9uZW50cy5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgYnkgY2FsY3VsYXRpbmcgYSBoYXNoIG9uIHRoZSBmdWxsIHBhdGggYW5kIHVzaW5nIGl0IGFzIGEgc3VmZml4XG4gKiBvZiBhIGxlbmd0aC1saW1pdGVkIFwiaHVtYW5cIiByZW5kaXRpb24gb2YgdGhlIHBhdGggY29tcG9uZW50cy5cbiAqXG4gKiBAcGFyYW0gY29tcG9uZW50cyBUaGUgcGF0aCBjb21wb25lbnRzXG4gKiBAcmV0dXJucyBhIHVuaXF1ZSBhbHBoYS1udW1lcmljIGlkZW50aWZpZXIgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDI1NVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVVuaXF1ZUlkKGNvbXBvbmVudHM6IHN0cmluZ1tdKSB7XG4gIGNvbXBvbmVudHMgPSBjb21wb25lbnRzLmZpbHRlcigoeCkgPT4geCAhPT0gSElEREVOX0lEKTtcblxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBjYW5ub3RDYWxjSWRGb3JFbXB0eVNldE9mQ29tcG9uZW50cygpO1xuICB9XG5cbiAgLy8gdG9wLWxldmVsIHJlc291cmNlcyB3aWxsIHNpbXBseSB1c2UgdGhlIGBuYW1lYCBhcy1pcyBpbiBvcmRlciB0byBzdXBwb3J0XG4gIC8vIHRyYW5zcGFyZW50IG1pZ3JhdGlvbiBvZiBjbG91ZGZvcm1hdGlvbiB0ZW1wbGF0ZXMgdG8gdGhlIENESyB3aXRob3V0IHRoZVxuICAvLyBuZWVkIHRvIHJlbmFtZSBhbGwgcmVzb3VyY2VzLlxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyB3ZSBmaWx0ZXIgb3V0IG5vbi1hbHBoYSBjaGFyYWN0ZXJzIGJ1dCB0aGF0IGlzIGFjdHVhbGx5IGEgYmFkIGlkZWFcbiAgICAvLyBiZWNhdXNlIGl0IGNvdWxkIGNyZWF0ZSBjb25mbGljdHMgKFwiQS1CXCIgYW5kIFwiQUJcIiB3aWxsIHJlbmRlciB0aGUgc2FtZVxuICAgIC8vIGxvZ2ljYWwgSUQpLiBzYWRseSwgY2hhbmdpbmcgaXQgaW4gdGhlIDEueCB2ZXJzaW9uIGxpbmUgaXMgaW1wb3NzaWJsZVxuICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZS4gd2Ugc2hvdWxkIGNvbnNpZGVyIGZvciB2Mi4wLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvNjQyMVxuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKGNvbXBvbmVudHNbMF0pO1xuXG4gICAgLy8gaWYgb3VyIGNhbmRpZGF0ZSBpcyBzaG9ydCBlbm91Z2gsIHVzZSBpdCBhcyBpcy4gb3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgbm9ybWFsIG1vZGUuXG4gICAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggPD0gTUFYX0lEX0xFTikge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXNoID0gcGF0aEhhc2goY29tcG9uZW50cyk7XG4gIGNvbnN0IGh1bWFuID0gcmVtb3ZlRHVwZXMoY29tcG9uZW50cylcbiAgICAuZmlsdGVyKCh4KSA9PiB4ICE9PSBISURERU5fRlJPTV9IVU1BTl9JRClcbiAgICAubWFwKChzKSA9PiByZW1vdmVEaXNhbGxvd2VkQ2hhcmFjdGVycyhzKSlcbiAgICAuam9pbihVTklRVUVfU0VQKVxuICAgIC5zbGljZSgwLCBNQVhfSFVNQU5fTEVOKTtcblxuICByZXR1cm4gaHVtYW4gKyBVTklRVUVfU0VQICsgaGFzaDtcbn1cblxuLyoqXG4gKiBUYWtlIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBUaGUgaGFzaCBpcyBsaW1pdGVkIGluIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHBhdGhIYXNoKHBhdGg6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgbWQ1ID0gY3J5cHRvXG4gICAgLmNyZWF0ZUhhc2goXCJtZDVcIilcbiAgICAudXBkYXRlKHBhdGguam9pbihQQVRIX1NFUCkpXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbiAgcmV0dXJuIG1kNS5zbGljZSgwLCBIQVNIX0xFTikudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgaW4gYSBsb2dpY2FsIElEXG4gKiBAcGFyYW0gcyBTdHJpbmcgdG8gY2xlYW5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgY29udGFpbmluZyBvbmx5IGFscGhhbnVtZXJpY3MsIGBfYCBhbmQgYC1gXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKHM6IHN0cmluZykge1xuICByZXR1cm4gcmVtb3ZlTm9uQWxwaGFudW1lcmljU2VwKHMpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoYXJhY3RlcnMgZXhjZXB0IGFscGhhbnVtZXJpY3MsIGBfYCBhbmQgYC1gXG4gKiBAcGFyYW0gcyBTdHJpbmcgdG8gY2xlYW5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgY29udGFpbmluZyBvbmx5IGFscGhhbnVtZXJpY3MsIGBfYCBhbmQgYC1gXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU5vbkFscGhhbnVtZXJpY1NlcChzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgXCJcIik7XG59XG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZSBcInRlcm1zXCIgZnJvbSB0aGUgcGF0aCBsaXN0XG4gKlxuICogSWYgdGhlIHByZXZpb3VzIHBhdGggY29tcG9uZW50IG5hbWUgZW5kcyB3aXRoIHRoaXMgY29tcG9uZW50IG5hbWUsIHNraXAgdGhlXG4gKiBjdXJyZW50IGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwZXMocGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgcGF0aCkge1xuICAgIGlmIChyZXQubGVuZ3RoID09PSAwIHx8ICFyZXRbcmV0Lmxlbmd0aCAtIDFdLmVuZHNXaXRoKGNvbXBvbmVudCkpIHtcbiAgICAgIHJldC5wdXNoKGNvbXBvbmVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
package/lib/resource.js CHANGED
@@ -11,7 +11,7 @@ const terraform_stack_1 = require("./terraform-stack");
11
11
  * @deprecated - Please use Construct from the constructs package instead.
12
12
  */
13
13
  class Resource extends constructs_1.Construct {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Resource", version: "0.26.0-pre.2" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Resource", version: "0.26.0-pre.21" };
15
15
  stack;
16
16
  constructor(scope, id) {
17
17
  super(scope, id);
package/lib/runtime.d.ts CHANGED
@@ -24,6 +24,12 @@ export declare function listMapper(elementMapper: Mapper, isBlockType?: boolean)
24
24
  * a dynamic block)
25
25
  */
26
26
  export declare function listMapperHcl(elementMapper: Mapper, isBlockType?: boolean): Mapper;
27
+ /**
28
+ * Creates a mapper that applies the element mapper to each value of a map. Tokens, strings and values containing
29
+ * tokens are returned unchanged.
30
+ * @param elementMapper Mapper applied to each map value
31
+ * @returns A mapper for maps
32
+ */
27
33
  export declare function hashMapper(elementMapper: Mapper): Mapper;
28
34
  /**
29
35
  *
package/lib/runtime.js CHANGED
@@ -20,7 +20,11 @@ Object.defineProperty(exports, "isComplexElement", { enumerable: true, get: func
20
20
  const tokens_1 = require("./tokens");
21
21
  const terraform_dynamic_block_1 = require("./terraform-dynamic-block");
22
22
  const terraform_dynamic_expression_1 = require("./terraform-dynamic-expression");
23
- // eslint-disable-next-line jsdoc/require-jsdoc
23
+ /**
24
+ * Mapper that returns its input unchanged
25
+ * @param x The value to map
26
+ * @returns The same value
27
+ */
24
28
  function identity(x) {
25
29
  return x;
26
30
  }
@@ -84,7 +88,12 @@ function listMapperHcl(elementMapper, isBlockType) {
84
88
  return x.map(elementMapper);
85
89
  };
86
90
  }
87
- // eslint-disable-next-line jsdoc/require-jsdoc
91
+ /**
92
+ * Creates a mapper that applies the element mapper to each value of a map. Tokens, strings and values containing
93
+ * tokens are returned unchanged.
94
+ * @param elementMapper Mapper applied to each map value
95
+ * @returns A mapper for maps
96
+ */
88
97
  function hashMapper(elementMapper) {
89
98
  return (x) => {
90
99
  if (!canInspect(x)) {
@@ -149,4 +158,4 @@ function canInspect(x) {
149
158
  // Note: using weak equality on purpose, we also want to catch undefined
150
159
  return x != null;
151
160
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHlFQUF5RTtBQUN6RSxtQkFBbUI7QUFDbkIsRUFBRTtBQUNGLDRGQUE0RjtBQUM1RixFQUFFO0FBQ0YsMEdBQTBHO0FBQzFHLHNHQUFzRzs7O0FBb0N0RyxnQ0EwQkM7QUFTRCxzQ0EwQkM7QUFHRCxnQ0FnQ0M7QUFLRCxzQ0FnQ0M7QUFPRCxnQ0FHQztBQWpMRCx3REFJbUM7QUE4SzFCLGlHQWhMUCwyQkFBZ0IsT0FnTE87QUE3S3pCLHFDQUF3QztBQUN4Qyx1RUFBa0U7QUFDbEUsaUZBQTRFO0FBSzVFLCtDQUErQztBQUMvQyxTQUFTLFFBQVEsQ0FBQyxDQUFNO0lBQ3RCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVZLFFBQUEsaUJBQWlCLEdBQVcsUUFBUSxDQUFDO0FBQ3JDLFFBQUEsa0JBQWtCLEdBQVcsUUFBUSxDQUFDO0FBQ3RDLFFBQUEsY0FBYyxHQUFXLFFBQVEsQ0FBQztBQUNsQyxRQUFBLGlCQUFpQixHQUFXLFFBQVEsQ0FBQztBQUVyQyxRQUFBLG9CQUFvQixHQUFXLFFBQVEsQ0FBQztBQUN4QyxRQUFBLHFCQUFxQixHQUFXLFFBQVEsQ0FBQztBQUN6QyxRQUFBLGlCQUFpQixHQUFXLFFBQVEsQ0FBQztBQUNyQyxRQUFBLG9CQUFvQixHQUFXLFFBQVEsQ0FBQztBQUVyRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixVQUFVLENBQ3hCLGFBQXFCLEVBQ3JCLFdBQXFCO0lBRXJCLE9BQU8sQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsMEhBQTBIO1FBQzFILDJIQUEySDtRQUMzSCw0SEFBNEg7UUFDNUgsNkhB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QUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCxJQUFJLElBQUEsMkJBQWdCLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFFcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxDQUFNO0lBQy9CLHdFQUF3RTtJQUN4RSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQUk9QRVJUWSBNQVBQRVJTXG4vL1xuLy8gVGhlc2UgYXJlIHVzZWQgd2hpbGUgY29udmVydGluZyBnZW5lcmF0ZWQgY2xhc3Nlcy9wcm9wZXJ0eSBiYWdzIHRvIFRlcnJhZm9ybSBKU09OIG9iamVjdHNcbi8vXG4vLyBXZSB1c2UgaWRlbnRpdHkgbWFwcGVycyBmb3IgdGhlIHByaW1pdGl2ZSB0eXBlcy4gVGhlc2UgZG9uJ3QgZG8gYW55dGhpbmcgYnV0IGFyZSB0aGVyZSB0byBtYWtlIHRoZSBjb2RlXG4vLyBnZW5lcmF0aW9uIHdvcmsgb3V0IG5pY2VseSAoc28gdGhlIGNvZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgbmVlZCB0byBlbWl0IGRpZmZlcmVudCBjb2RlIGZvciBwcmltaXRpdmVcblxuaW1wb3J0IHtcbiAgY29udGFpbnNDb21wbGV4RWxlbWVudCxcbiAgaXNDb21wbGV4RWxlbWVudCxcbiAgY29udGFpbnNNYXBUb2tlbixcbn0gZnJvbSBcIi4vdG9rZW5zL3ByaXZhdGUvZW5jb2RpbmdcIjtcbmltcG9ydCB7IFRva2VuaXphdGlvbiB9IGZyb20gXCIuL3Rva2Vuc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtRHluYW1pY0Jsb2NrIH0gZnJvbSBcIi4vdGVycmFmb3JtLWR5bmFtaWMtYmxvY2tcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUR5bmFtaWNFeHByZXNzaW9uIH0gZnJvbSBcIi4vdGVycmFmb3JtLWR5bmFtaWMtZXhwcmVzc2lvblwiO1xuXG4vLyB2cy4gY29tcGxleCB0eXBlcykuXG5leHBvcnQgdHlwZSBNYXBwZXIgPSAoeDogYW55KSA9PiBhbnk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBpZGVudGl0eSh4OiBhbnkpIHtcbiAgcmV0dXJuIHg7XG59XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdUb1RlcnJhZm9ybTogTWFwcGVyID0gaWRlbnRpdHk7XG5leHBvcnQgY29uc3QgYm9vbGVhblRvVGVycmFmb3JtOiBNYXBwZXIgPSBpZGVudGl0eTtcbmV4cG9ydCBjb25zdCBhbnlUb1RlcnJhZm9ybTogTWFwcGVyID0gaWRlbnRpdHk7XG5leHBvcnQgY29uc3QgbnVtYmVyVG9UZXJyYWZvcm06IE1hcHBlciA9IGlkZW50aXR5O1xuXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9IY2xUZXJyYWZvcm06IE1hcHBlciA9IGlkZW50aXR5O1xuZXhwb3J0IGNvbnN0IGJvb2xlYW5Ub0hjbFRlcnJhZm9ybTogTWFwcGVyID0gaWRlbnRpdHk7XG5leHBvcnQgY29uc3QgYW55VG9IY2xUZXJyYWZvcm06IE1hcHBlciA9IGlkZW50aXR5O1xuZXhwb3J0IGNvbnN0IG51bWJlclRvSGNsVGVycmFmb3JtOiBNYXBwZXIgPSBpZGVudGl0eTtcblxuLyoqXG4gKiBAcGFyYW0gaXNCbG9ja1R5cGUgYmxvY2tzIGFuZCBsaXN0cyBvZiBvYmplY3RzIG5lZWQgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnQgaW4gVGVycmFmb3JtXG4gKiAgICAgICAgICAgICAgICAgICAgYnV0IGFyZSByZXByZXNlbnRlZCBleGFjdGx5IHRoZSBzYW1lIGluIGdlbmVyYXRlZCBiaW5kaW5nc1xuICogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseSB0aGlzIGlzIHVzZWQgdG8gcmVzb2x2ZSBUZXJyYWZvcm1EeW5hbWljQmxvY2tzIGlmIG5vdCB3aXRoaW5cbiAqICAgICAgICAgICAgICAgICAgICBhIGJsb2NrIHR5cGUgKHdpbGwgYmUgcmVzb2x2ZWQgdG8gYSBmb3IgZXhwcmVzc2lvbiBmb3IgdGhvc2UgaW5zdGVhZCBvZlxuICogICAgICAgICAgICAgICAgICAgIGEgZHluYW1pYyBibG9jaylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNYXBwZXIoXG4gIGVsZW1lbnRNYXBwZXI6IE1hcHBlcixcbiAgaXNCbG9ja1R5cGU/OiBib29sZWFuLFxuKTogTWFwcGVyIHtcbiAgcmV0dXJuICh4OiBhbnkpID0+IHtcbiAgICBpZiAoIWNhbkluc3BlY3QoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIC8vIHJlcGxhY2UgZHluYW1pYyBleHByZXNzaW9ucyBmb3IgYmxvY2sgdHlwZXMgc28gdGhleSBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHJlcGxhY2VkIHByb3Blcmx5IGJ5IHByb2Nlc3NEeW5hbWljQXR0cmlidXRlcygpXG4gICAgLy8gd2hpY2ggYWxzbyByZWxvY2F0ZXMgdGhlbSB0byBkeW5hbWljLmF0dHJpYnV0ZU5hbWUgKHNvbWV0aGluZyB3ZSBjYW4ndCBkbyB3aGVuIHJlc29sdmluZyBhIHZhbHVlLCBwdXQgaXQgc29tZXdoZXJlIGVsc2UpXG4gICAgLy8gaWYgaXNCbG9ja1R5cGUgaXMgZmFsc2UsIHRoZSBUZXJyYWZvcm1EeW5hbWljRXhwcmVzc2lvbiB0aGF0IGlzIHByZXNlbnQgd2lsbCBiZSByZXNvbHZlZCAoaXQgaW1wbGVtZW50cyBJUmVzb2x2YWJsZSkgdG8gYVxuICAgIC8vIGZvciBleHByZXNzaW9uIGRpcmVjdGx5ICh3aGljaCBjYW4gYmUgdXNlZCBlLmcuIHdpdGhpbiBUZXJyYWZvcm0gZnVuY3Rpb25zIG9yIGZvciBhdHRyaWJ1dGVzIHRoYXQgYXJlIG5vdCBvZiBhIGJsb2NrIHR5cGUpXG4gICAgaWYgKFxuICAgICAgVGVycmFmb3JtRHluYW1pY0V4cHJlc3Npb24uaXNUZXJyYWZvcm1EeW5hbWljRXhwcmVzc2lvbih4KSAmJlxuICAgICAgaXNCbG9ja1R5cGVcbiAgICApIHtcbiAgICAgIHJldHVybiBUZXJyYWZvcm1EeW5hbWljQmxvY2suZnJvbUR5bmFtaWNFeHByZXNzaW9uKHgpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHgubWFwKGVsZW1lbnRNYXBwZXIpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSBpc0Jsb2NrVHlwZSBibG9ja3MgYW5kIGxpc3RzIG9mIG9iamVjdHMgbmVlZCB0byBiZSBoYW5kbGVkIGRpZmZlcmVudCBpbiBUZXJyYWZvcm1cbiAqICAgICAgICAgICAgICAgICAgICBidXQgYXJlIHJlcHJlc2VudGVkIGV4YWN0bHkgdGhlIHNhbWUgaW4gZ2VuZXJhdGVkIGJpbmRpbmdzXG4gKiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5IHRoaXMgaXMgdXNlZCB0byByZXNvbHZlIFRlcnJhZm9ybUR5bmFtaWNCbG9ja3MgaWYgbm90IHdpdGhpblxuICogICAgICAgICAgICAgICAgICAgIGEgYmxvY2sgdHlwZSAod2lsbCBiZSByZXNvbHZlZCB0byBhIGZvciBleHByZXNzaW9uIGZvciB0aG9zZSBpbnN0ZWFkIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgYSBkeW5hbWljIGJsb2NrKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdE1hcHBlckhjbChcbiAgZWxlbWVudE1hcHBlcjogTWFwcGVyLFxuICBpc0Jsb2NrVHlwZT86IGJvb2xlYW4sXG4pOiBNYXBwZXIge1xuICByZXR1cm4gKHg6IGFueSkgPT4ge1xuICAgIGlmICghY2FuSW5zcGVjdCh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgLy8gcmVwbGFjZSBkeW5hbWljIGV4cHJlc3Npb25zIGZvciBibG9jayB0eXBlcyBzbyB0aGV5IGNhbiBiZSBkZXRlY3RlZCBhbmQgcmVwbGFjZWQgcHJvcGVybHkgYnkgcHJvY2Vzc0R5bmFtaWNBdHRyaWJ1dGVzKClcbiAgICAvLyB3aGljaCBhbHNvIHJlbG9jYXRlcyB0aGVtIHRvIGR5bmFtaWMuYXR0cmlidXRlTmFtZSAoc29tZXRoaW5nIHdlIGNhbid0IGRvIHdoZW4gcmVzb2x2aW5nIGEgdmFsdWUsIHB1dCBpdCBzb21ld2hlcmUgZWxzZSlcbiAgICAvLyBpZiBpc0Jsb2NrVHlwZSBpcyBmYWxzZSwgdGhlIFRlcnJhZm9ybUR5bmFtaWNFeHByZXNzaW9uIHRoYXQgaXMgcHJlc2VudCB3aWxsIGJlIHJlc29sdmVkIChpdCBpbXBsZW1lbnRzIElSZXNvbHZhYmxlKSB0byBhXG4gICAgLy8gZm9yIGV4cHJlc3Npb24gZGlyZWN0bHkgKHdoaWNoIGNhbiBiZSB1c2VkIGUuZy4gd2l0aGluIFRlcnJhZm9ybSBmdW5jdGlvbnMgb3IgZm9yIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbm90IG9mIGEgYmxvY2sgdHlwZSlcbiAgICBpZiAoXG4gICAgICBUZXJyYWZvcm1EeW5hbWljRXhwcmVzc2lvbi5pc1RlcnJhZm9ybUR5bmFtaWNFeHByZXNzaW9uKHgpICYmXG4gICAgICBpc0Jsb2NrVHlwZVxuICAgICkge1xuICAgICAgcmV0dXJuIFRlcnJhZm9ybUR5bmFtaWNCbG9jay5mcm9tRHluYW1pY0V4cHJlc3Npb24oeCk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICByZXR1cm4geC5tYXAoZWxlbWVudE1hcHBlcik7XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgZnVuY3Rpb24gaGFzaE1hcHBlcihlbGVtZW50TWFwcGVyOiBNYXBwZXIpOiBNYXBwZXIge1xuICByZXR1cm4gKHg6IGFueSkgPT4ge1xuICAgIGlmICghY2FuSW5zcGVjdCh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHRva2VuIG9iamVjdFxuICAgIGlmIChjb250YWluc0NvbXBsZXhFbGVtZW50KHgpKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBpZiAoVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgLy8gV2UgY2FuJ3QgdHJlYXQgc3RyaW5ncyBhcyBoYXNoZXMgKGxpa2VseSBhIHRva2VuIG9yIGEgbWlzY29uZmlndXJhdGlvbilcbiAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIGlmIChjb250YWluc01hcFRva2VuKHgpKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBjb25zdCByZXQ6IGFueSA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMoeCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICByZXRba2V5XSA9IGVsZW1lbnRNYXBwZXIoeFtrZXldKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hNYXBwZXJIY2woZWxlbWVudE1hcHBlcjogTWFwcGVyKTogTWFwcGVyIHtcbiAgcmV0dXJuICh4OiBhbnkpID0+IHtcbiAgICBpZiAoIWNhbkluc3BlY3QoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGl0J3MgYSB0b2tlbiBvYmplY3RcbiAgICBpZiAoY29udGFpbnNDb21wbGV4RWxlbWVudCh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgaWYgKFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIC8vIFdlIGNhbid0IHRyZWF0IHN0cmluZ3MgYXMgaGFzaGVzIChsaWtlbHkgYSB0b2tlbiBvciBhIG1pc2NvbmZpZ3VyYXRpb24pXG4gICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNNYXBUb2tlbih4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKHgpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgcmV0W2tleV0gPSBlbGVtZW50TWFwcGVyKHhba2V5XSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoaXMgb2JqZWN0IGNhbiBiZSB2YWxpZGF0ZWQgYXQgYWxsXG4gKlxuICogVHJ1ZSB1bmxlc3MgaXQncyB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkluc3BlY3QoeDogYW55KSB7XG4gIC8vIE5vdGU6IHVzaW5nIHdlYWsgZXF1YWxpdHkgb24gcHVycG9zZSwgd2UgYWxzbyB3YW50IHRvIGNhdGNoIHVuZGVmaW5lZFxuICByZXR1cm4geCAhPSBudWxsO1xufVxuZXhwb3J0IHsgaXNDb21wbGV4RWxlbWVudCB9O1xuIl19
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHlFQUF5RTtBQUN6RSxtQkFBbUI7QUFDbkIsRUFBRTtBQUNGLDRGQUE0RjtBQUM1RixFQUFFO0FBQ0YsMEdBQTBHO0FBQzFHLHNHQUFzRzs7O0FBd0N0RyxnQ0EwQkM7QUFTRCxzQ0EwQkM7QUFRRCxnQ0FnQ0M7QUFLRCxzQ0FnQ0M7QUFPRCxnQ0FHQztBQTFMRCx3REFJbUM7QUF1TDFCLGlHQXpMUCwyQkFBZ0IsT0F5TE87QUF0THpCLHFDQUF3QztBQUN4Qyx1RUFBa0U7QUFDbEUsaUZBQTRFO0FBSzVFOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxDQUFNO0lBQ3RCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVZLFFBQUEsaUJBQWlCLEdBQVcsUUFBUSxDQUFDO0FBQ3JDLFFBQUEsa0JBQWtCLEdBQVcsUUFBUSxDQUFDO0FBQ3RDLFFBQUEsY0FBYyxHQUFXLFFBQVEsQ0FBQztBQUNsQyxRQUFBLGlCQUFpQixHQUFXLFFBQVEsQ0FBQztBQUVyQyxRQUFBLG9CQUFvQixHQUFXLFFBQVEsQ0FBQztBQUN4QyxRQUFBLHFCQUFxQixHQUFXLFFBQVEsQ0FBQztBQUN6QyxRQUFBLGlCQUFpQixHQUFXLFFBQVEsQ0FBQztBQUNyQyxRQUFBLG9CQUFvQixHQUFXLFFBQVEsQ0FBQztBQUVyRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixVQUFVLENBQ3hCLGFBQXFCLEVBQ3JCLFdBQXFCO0lBRXJCLE9BQU8sQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsMEhBQTBIO1FBQzFILDJIQUEySDtRQUMzSCw0SEFBNEg7UUFDNUgsNkhBQTZIO1FBQzdILElBQ0UseURBQTBCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO1lBQzFELFdBQVcsRUFDWCxDQUFDO1lBQ0QsT0FBTywrQ0FBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGFBQWEsQ0FDM0IsYUFBcUIsRUFDckIsV0FBcUI7SUFFckIsT0FBTyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCwwSEFBMEg7UUFDMUgsMkhBQTJIO1FBQzNILDRIQUE0SDtRQUM1SCw2SEFBNkg7UUFDN0gsSUFDRSx5REFBMEIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7WUFDMUQsV0FBVyxFQUNYLENBQUM7WUFDRCxPQUFPLCtDQUFxQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixVQUFVLENBQUMsYUFBcUI7SUFDOUMsT0FBTyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsSUFBSSxJQUFBLGlDQUFzQixFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsSUFBSSxxQkFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBQSwyQkFBZ0IsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztRQUVwQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxhQUFxQjtJQUNqRCxPQUFPLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELCtCQUErQjtRQUMvQixJQUFJLElBQUEsaUNBQXNCLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFFRCxJQUFJLHFCQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsSUFBSSxJQUFBLDJCQUFnQixFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFDO1FBRXBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixVQUFVLENBQUMsQ0FBTTtJQUMvQix3RUFBd0U7SUFDeEUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUFJPUEVSVFkgTUFQUEVSU1xuLy9cbi8vIFRoZXNlIGFyZSB1c2VkIHdoaWxlIGNvbnZlcnRpbmcgZ2VuZXJhdGVkIGNsYXNzZXMvcHJvcGVydHkgYmFncyB0byBUZXJyYWZvcm0gSlNPTiBvYmplY3RzXG4vL1xuLy8gV2UgdXNlIGlkZW50aXR5IG1hcHBlcnMgZm9yIHRoZSBwcmltaXRpdmUgdHlwZXMuIFRoZXNlIGRvbid0IGRvIGFueXRoaW5nIGJ1dCBhcmUgdGhlcmUgdG8gbWFrZSB0aGUgY29kZVxuLy8gZ2VuZXJhdGlvbiB3b3JrIG91dCBuaWNlbHkgKHNvIHRoZSBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IG5lZWQgdG8gZW1pdCBkaWZmZXJlbnQgY29kZSBmb3IgcHJpbWl0aXZlXG5cbmltcG9ydCB7XG4gIGNvbnRhaW5zQ29tcGxleEVsZW1lbnQsXG4gIGlzQ29tcGxleEVsZW1lbnQsXG4gIGNvbnRhaW5zTWFwVG9rZW4sXG59IGZyb20gXCIuL3Rva2Vucy9wcml2YXRlL2VuY29kaW5nXCI7XG5pbXBvcnQgeyBUb2tlbml6YXRpb24gfSBmcm9tIFwiLi90b2tlbnNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUR5bmFtaWNCbG9jayB9IGZyb20gXCIuL3RlcnJhZm9ybS1keW5hbWljLWJsb2NrXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1EeW5hbWljRXhwcmVzc2lvbiB9IGZyb20gXCIuL3RlcnJhZm9ybS1keW5hbWljLWV4cHJlc3Npb25cIjtcblxuLy8gdnMuIGNvbXBsZXggdHlwZXMpLlxuZXhwb3J0IHR5cGUgTWFwcGVyID0gKHg6IGFueSkgPT4gYW55O1xuXG4vKipcbiAqIE1hcHBlciB0aGF0IHJldHVybnMgaXRzIGlucHV0IHVuY2hhbmdlZFxuICogQHBhcmFtIHggVGhlIHZhbHVlIHRvIG1hcFxuICogQHJldHVybnMgVGhlIHNhbWUgdmFsdWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkoeDogYW55KSB7XG4gIHJldHVybiB4O1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9UZXJyYWZvcm06IE1hcHBlciA9IGlkZW50aXR5O1xuZXhwb3J0IGNvbnN0IGJvb2xlYW5Ub1RlcnJhZm9ybTogTWFwcGVyID0gaWRlbnRpdHk7XG5leHBvcnQgY29uc3QgYW55VG9UZXJyYWZvcm06IE1hcHBlciA9IGlkZW50aXR5O1xuZXhwb3J0IGNvbnN0IG51bWJlclRvVGVycmFmb3JtOiBNYXBwZXIgPSBpZGVudGl0eTtcblxuZXhwb3J0IGNvbnN0IHN0cmluZ1RvSGNsVGVycmFmb3JtOiBNYXBwZXIgPSBpZGVudGl0eTtcbmV4cG9ydCBjb25zdCBib29sZWFuVG9IY2xUZXJyYWZvcm06IE1hcHBlciA9IGlkZW50aXR5O1xuZXhwb3J0IGNvbnN0IGFueVRvSGNsVGVycmFmb3JtOiBNYXBwZXIgPSBpZGVudGl0eTtcbmV4cG9ydCBjb25zdCBudW1iZXJUb0hjbFRlcnJhZm9ybTogTWFwcGVyID0gaWRlbnRpdHk7XG5cbi8qKlxuICogQHBhcmFtIGlzQmxvY2tUeXBlIGJsb2NrcyBhbmQgbGlzdHMgb2Ygb2JqZWN0cyBuZWVkIHRvIGJlIGhhbmRsZWQgZGlmZmVyZW50IGluIFRlcnJhZm9ybVxuICogICAgICAgICAgICAgICAgICAgIGJ1dCBhcmUgcmVwcmVzZW50ZWQgZXhhY3RseSB0aGUgc2FtZSBpbiBnZW5lcmF0ZWQgYmluZGluZ3NcbiAqICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgdGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgVGVycmFmb3JtRHluYW1pY0Jsb2NrcyBpZiBub3Qgd2l0aGluXG4gKiAgICAgICAgICAgICAgICAgICAgYSBibG9jayB0eXBlICh3aWxsIGJlIHJlc29sdmVkIHRvIGEgZm9yIGV4cHJlc3Npb24gZm9yIHRob3NlIGluc3RlYWQgb2ZcbiAqICAgICAgICAgICAgICAgICAgICBhIGR5bmFtaWMgYmxvY2spXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0TWFwcGVyKFxuICBlbGVtZW50TWFwcGVyOiBNYXBwZXIsXG4gIGlzQmxvY2tUeXBlPzogYm9vbGVhbixcbik6IE1hcHBlciB7XG4gIHJldHVybiAoeDogYW55KSA9PiB7XG4gICAgaWYgKCFjYW5JbnNwZWN0KHgpKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICAvLyByZXBsYWNlIGR5bmFtaWMgZXhwcmVzc2lvbnMgZm9yIGJsb2NrIHR5cGVzIHNvIHRoZXkgY2FuIGJlIGRldGVjdGVkIGFuZCByZXBsYWNlZCBwcm9wZXJseSBieSBwcm9jZXNzRHluYW1pY0F0dHJpYnV0ZXMoKVxuICAgIC8vIHdoaWNoIGFsc28gcmVsb2NhdGVzIHRoZW0gdG8gZHluYW1pYy5hdHRyaWJ1dGVOYW1lIChzb21ldGhpbmcgd2UgY2FuJ3QgZG8gd2hlbiByZXNvbHZpbmcgYSB2YWx1ZSwgcHV0IGl0IHNvbWV3aGVyZSBlbHNlKVxuICAgIC8vIGlmIGlzQmxvY2tUeXBlIGlzIGZhbHNlLCB0aGUgVGVycmFmb3JtRHluYW1pY0V4cHJlc3Npb24gdGhhdCBpcyBwcmVzZW50IHdpbGwgYmUgcmVzb2x2ZWQgKGl0IGltcGxlbWVudHMgSVJlc29sdmFibGUpIHRvIGFcbiAgICAvLyBmb3IgZXhwcmVzc2lvbiBkaXJlY3RseSAod2hpY2ggY2FuIGJlIHVzZWQgZS5nLiB3aXRoaW4gVGVycmFmb3JtIGZ1bmN0aW9ucyBvciBmb3IgYXR0cmlidXRlcyB0aGF0IGFyZSBub3Qgb2YgYSBibG9jayB0eXBlKVxuICAgIGlmIChcbiAgICAgIFRlcnJhZm9ybUR5bmFtaWNFeHByZXNzaW9uLmlzVGVycmFmb3JtRHluYW1pY0V4cHJlc3Npb24oeCkgJiZcbiAgICAgIGlzQmxvY2tUeXBlXG4gICAgKSB7XG4gICAgICByZXR1cm4gVGVycmFmb3JtRHluYW1pY0Jsb2NrLmZyb21EeW5hbWljRXhwcmVzc2lvbih4KTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIHJldHVybiB4Lm1hcChlbGVtZW50TWFwcGVyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaXNCbG9ja1R5cGUgYmxvY2tzIGFuZCBsaXN0cyBvZiBvYmplY3RzIG5lZWQgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnQgaW4gVGVycmFmb3JtXG4gKiAgICAgICAgICAgICAgICAgICAgYnV0IGFyZSByZXByZXNlbnRlZCBleGFjdGx5IHRoZSBzYW1lIGluIGdlbmVyYXRlZCBiaW5kaW5nc1xuICogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseSB0aGlzIGlzIHVzZWQgdG8gcmVzb2x2ZSBUZXJyYWZvcm1EeW5hbWljQmxvY2tzIGlmIG5vdCB3aXRoaW5cbiAqICAgICAgICAgICAgICAgICAgICBhIGJsb2NrIHR5cGUgKHdpbGwgYmUgcmVzb2x2ZWQgdG8gYSBmb3IgZXhwcmVzc2lvbiBmb3IgdGhvc2UgaW5zdGVhZCBvZlxuICogICAgICAgICAgICAgICAgICAgIGEgZHluYW1pYyBibG9jaylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNYXBwZXJIY2woXG4gIGVsZW1lbnRNYXBwZXI6IE1hcHBlcixcbiAgaXNCbG9ja1R5cGU/OiBib29sZWFuLFxuKTogTWFwcGVyIHtcbiAgcmV0dXJuICh4OiBhbnkpID0+IHtcbiAgICBpZiAoIWNhbkluc3BlY3QoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIC8vIHJlcGxhY2UgZHluYW1pYyBleHByZXNzaW9ucyBmb3IgYmxvY2sgdHlwZXMgc28gdGhleSBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHJlcGxhY2VkIHByb3Blcmx5IGJ5IHByb2Nlc3NEeW5hbWljQXR0cmlidXRlcygpXG4gICAgLy8gd2hpY2ggYWxzbyByZWxvY2F0ZXMgdGhlbSB0byBkeW5hbWljLmF0dHJpYnV0ZU5hbWUgKHNvbWV0aGluZyB3ZSBjYW4ndCBkbyB3aGVuIHJlc29sdmluZyBhIHZhbHVlLCBwdXQgaXQgc29tZXdoZXJlIGVsc2UpXG4gICAgLy8gaWYgaXNCbG9ja1R5cGUgaXMgZmFsc2UsIHRoZSBUZXJyYWZvcm1EeW5hbWljRXhwcmVzc2lvbiB0aGF0IGlzIHByZXNlbnQgd2lsbCBiZSByZXNvbHZlZCAoaXQgaW1wbGVtZW50cyBJUmVzb2x2YWJsZSkgdG8gYVxuICAgIC8vIGZvciBleHByZXNzaW9uIGRpcmVjdGx5ICh3aGljaCBjYW4gYmUgdXNlZCBlLmcuIHdpdGhpbiBUZXJyYWZvcm0gZnVuY3Rpb25zIG9yIGZvciBhdHRyaWJ1dGVzIHRoYXQgYXJlIG5vdCBvZiBhIGJsb2NrIHR5cGUpXG4gICAgaWYgKFxuICAgICAgVGVycmFmb3JtRHluYW1pY0V4cHJlc3Npb24uaXNUZXJyYWZvcm1EeW5hbWljRXhwcmVzc2lvbih4KSAmJlxuICAgICAgaXNCbG9ja1R5cGVcbiAgICApIHtcbiAgICAgIHJldHVybiBUZXJyYWZvcm1EeW5hbWljQmxvY2suZnJvbUR5bmFtaWNFeHByZXNzaW9uKHgpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHgubWFwKGVsZW1lbnRNYXBwZXIpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXBwZXIgdGhhdCBhcHBsaWVzIHRoZSBlbGVtZW50IG1hcHBlciB0byBlYWNoIHZhbHVlIG9mIGEgbWFwLiBUb2tlbnMsIHN0cmluZ3MgYW5kIHZhbHVlcyBjb250YWluaW5nXG4gKiB0b2tlbnMgYXJlIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqIEBwYXJhbSBlbGVtZW50TWFwcGVyIE1hcHBlciBhcHBsaWVkIHRvIGVhY2ggbWFwIHZhbHVlXG4gKiBAcmV0dXJucyBBIG1hcHBlciBmb3IgbWFwc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaE1hcHBlcihlbGVtZW50TWFwcGVyOiBNYXBwZXIpOiBNYXBwZXIge1xuICByZXR1cm4gKHg6IGFueSkgPT4ge1xuICAgIGlmICghY2FuSW5zcGVjdCh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHRva2VuIG9iamVjdFxuICAgIGlmIChjb250YWluc0NvbXBsZXhFbGVtZW50KHgpKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBpZiAoVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgLy8gV2UgY2FuJ3QgdHJlYXQgc3RyaW5ncyBhcyBoYXNoZXMgKGxpa2VseSBhIHRva2VuIG9yIGEgbWlzY29uZmlndXJhdGlvbilcbiAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIGlmIChjb250YWluc01hcFRva2VuKHgpKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBjb25zdCByZXQ6IGFueSA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMoeCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICByZXRba2V5XSA9IGVsZW1lbnRNYXBwZXIoeFtrZXldKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hNYXBwZXJIY2woZWxlbWVudE1hcHBlcjogTWFwcGVyKTogTWFwcGVyIHtcbiAgcmV0dXJuICh4OiBhbnkpID0+IHtcbiAgICBpZiAoIWNhbkluc3BlY3QoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGl0J3MgYSB0b2tlbiBvYmplY3RcbiAgICBpZiAoY29udGFpbnNDb21wbGV4RWxlbWVudCh4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgaWYgKFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIC8vIFdlIGNhbid0IHRyZWF0IHN0cmluZ3MgYXMgaGFzaGVzIChsaWtlbHkgYSB0b2tlbiBvciBhIG1pc2NvbmZpZ3VyYXRpb24pXG4gICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNNYXBUb2tlbih4KSkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKHgpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgcmV0W2tleV0gPSBlbGVtZW50TWFwcGVyKHhba2V5XSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoaXMgb2JqZWN0IGNhbiBiZSB2YWxpZGF0ZWQgYXQgYWxsXG4gKlxuICogVHJ1ZSB1bmxlc3MgaXQncyB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkluc3BlY3QoeDogYW55KSB7XG4gIC8vIE5vdGU6IHVzaW5nIHdlYWsgZXF1YWxpdHkgb24gcHVycG9zZSwgd2UgYWxzbyB3YW50IHRvIGNhdGNoIHVuZGVmaW5lZFxuICByZXR1cm4geCAhPSBudWxsO1xufVxuZXhwb3J0IHsgaXNDb21wbGV4RWxlbWVudCB9O1xuIl19