aws-cdk 2.5.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +8 -1
  2. package/bin/cdk.js +22 -6
  3. package/build-info.json +2 -2
  4. package/lib/api/aws-auth/sdk-provider.d.ts +26 -1
  5. package/lib/api/aws-auth/sdk-provider.js +4 -4
  6. package/lib/api/aws-auth/sdk.d.ts +2 -0
  7. package/lib/api/aws-auth/sdk.js +4 -1
  8. package/lib/api/bootstrap/deploy-bootstrap.js +14 -3
  9. package/lib/api/cloudformation-deployments.d.ts +63 -1
  10. package/lib/api/cloudformation-deployments.js +74 -4
  11. package/lib/api/cxapp/cloud-assembly.js +5 -5
  12. package/lib/api/deploy-stack.d.ts +0 -1
  13. package/lib/api/deploy-stack.js +8 -9
  14. package/lib/api/{hotswap/evaluate-cloudformation-template.d.ts → evaluate-cloudformation-template.d.ts} +14 -1
  15. package/lib/api/evaluate-cloudformation-template.js +289 -0
  16. package/lib/api/hotswap/code-build-projects.d.ts +1 -1
  17. package/lib/api/hotswap/code-build-projects.js +2 -2
  18. package/lib/api/hotswap/common.d.ts +0 -6
  19. package/lib/api/hotswap/common.js +2 -19
  20. package/lib/api/hotswap/ecs-services.d.ts +1 -1
  21. package/lib/api/hotswap/ecs-services.js +2 -2
  22. package/lib/api/hotswap/lambda-functions.d.ts +1 -1
  23. package/lib/api/hotswap/lambda-functions.js +69 -3
  24. package/lib/api/hotswap/s3-bucket-deployments.d.ts +1 -1
  25. package/lib/api/hotswap/s3-bucket-deployments.js +1 -1
  26. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +1 -1
  27. package/lib/api/hotswap/stepfunctions-state-machines.js +1 -1
  28. package/lib/api/hotswap-deployments.js +9 -35
  29. package/lib/api/logs/find-cloudwatch-logs.d.ts +24 -0
  30. package/lib/api/logs/find-cloudwatch-logs.js +84 -0
  31. package/lib/api/logs/logs-monitor.d.ts +53 -0
  32. package/lib/api/logs/logs-monitor.js +163 -0
  33. package/lib/api/toolkit-info.d.ts +5 -5
  34. package/lib/api/toolkit-info.js +10 -10
  35. package/lib/api/util/cloudformation/stack-activity-monitor.js +22 -22
  36. package/lib/assets.js +3 -3
  37. package/lib/cdk-toolkit.d.ts +15 -0
  38. package/lib/cdk-toolkit.js +30 -20
  39. package/lib/commands/context.js +7 -7
  40. package/lib/commands/docs.js +4 -4
  41. package/lib/commands/doctor.js +6 -6
  42. package/lib/context-providers/ami.js +2 -2
  43. package/lib/context-providers/availability-zones.js +2 -2
  44. package/lib/context-providers/endpoint-service-availability-zones.js +2 -2
  45. package/lib/context-providers/hosted-zones.js +2 -2
  46. package/lib/context-providers/keys.js +2 -2
  47. package/lib/context-providers/load-balancers.js +3 -3
  48. package/lib/context-providers/security-groups.js +2 -2
  49. package/lib/context-providers/ssm-parameters.js +2 -2
  50. package/lib/context-providers/vpcs.js +2 -2
  51. package/lib/diff.js +3 -3
  52. package/lib/init.js +14 -14
  53. package/lib/logging.js +7 -7
  54. package/lib/os.js +3 -3
  55. package/lib/plugin.js +4 -4
  56. package/lib/util/asset-publishing.js +3 -3
  57. package/lib/util/console-formatters.js +4 -3
  58. package/lib/version.js +3 -3
  59. package/npm-shrinkwrap.json +90 -95
  60. package/package.json +22 -21
  61. package/test/api/bootstrap2.test.js +2 -3
  62. package/test/api/cloudformation-deployments.test.js +2 -2
  63. package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.d.ts +1 -0
  64. package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +64 -0
  65. package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.d.ts +1 -0
  66. package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.js +139 -0
  67. package/test/api/logs/find-cloudwatch-logs.test.d.ts +1 -0
  68. package/test/api/logs/find-cloudwatch-logs.test.js +264 -0
  69. package/test/api/logs/logs-monitor.test.d.ts +1 -0
  70. package/test/api/logs/logs-monitor.test.js +59 -0
  71. package/test/api/sdk-provider.test.js +11 -11
  72. package/test/api/stack-activity-monitor.test.js +13 -13
  73. package/test/cdk-toolkit.test.js +271 -10
  74. package/test/context-providers/load-balancers.test.js +4 -4
  75. package/test/util/cloudformation.test.js +2 -2
  76. package/test/util/console-formatters.test.js +6 -6
  77. package/test/util/mock-sdk.d.ts +8 -2
  78. package/test/util/mock-sdk.js +12 -2
  79. package/test/util/mock-toolkitinfo.js +2 -2
  80. package/lib/api/hotswap/evaluate-cloudformation-template.js +0 -247
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isHotswappableLambdaFunctionChange = void 0;
4
+ const stream_1 = require("stream");
5
+ const archiver = require("archiver");
4
6
  const util_1 = require("../../util");
7
+ const evaluate_cloudformation_template_1 = require("../evaluate-cloudformation-template");
5
8
  const common_1 = require("./common");
6
9
  /**
7
10
  * Returns `ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT` if the change cannot be short-circuited,
@@ -26,7 +29,7 @@ async function isHotswappableLambdaFunctionChange(logicalId, change, evaluateCfn
26
29
  if (typeof lambdaCodeChange === 'string') {
27
30
  return lambdaCodeChange;
28
31
  }
29
- const functionName = await common_1.establishResourcePhysicalName(logicalId, (_a = change.newValue.Properties) === null || _a === void 0 ? void 0 : _a.FunctionName, evaluateCfnTemplate);
32
+ const functionName = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, (_a = change.newValue.Properties) === null || _a === void 0 ? void 0 : _a.FunctionName);
30
33
  if (!functionName) {
31
34
  return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
32
35
  }
@@ -70,6 +73,7 @@ function checkAliasHasVersionOnlyChange(change) {
70
73
  * and only affects its Code property.
71
74
  */
72
75
  async function isLambdaFunctionCodeOnlyChange(change, evaluateCfnTemplate) {
76
+ var _a;
73
77
  const newResourceType = change.newValue.Type;
74
78
  if (newResourceType !== 'AWS::Lambda::Function') {
75
79
  return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
@@ -93,7 +97,7 @@ async function isLambdaFunctionCodeOnlyChange(change, evaluateCfnTemplate) {
93
97
  switch (updatedPropName) {
94
98
  case 'Code':
95
99
  let foundCodeDifference = false;
96
- let s3Bucket = '', s3Key = '';
100
+ let s3Bucket, s3Key, imageUri, functionCodeZip;
97
101
  for (const newPropName in updatedProp.newValue) {
98
102
  switch (newPropName) {
99
103
  case 'S3Bucket':
@@ -104,6 +108,22 @@ async function isLambdaFunctionCodeOnlyChange(change, evaluateCfnTemplate) {
104
108
  foundCodeDifference = true;
105
109
  s3Key = await evaluateCfnTemplate.evaluateCfnExpression(updatedProp.newValue[newPropName]);
106
110
  break;
111
+ case 'ImageUri':
112
+ foundCodeDifference = true;
113
+ imageUri = await evaluateCfnTemplate.evaluateCfnExpression(updatedProp.newValue[newPropName]);
114
+ break;
115
+ case 'ZipFile':
116
+ foundCodeDifference = true;
117
+ // We must create a zip package containing a file with the inline code
118
+ const functionCode = await evaluateCfnTemplate.evaluateCfnExpression(updatedProp.newValue[newPropName]);
119
+ const functionRuntime = await evaluateCfnTemplate.evaluateCfnExpression((_a = change.newValue.Properties) === null || _a === void 0 ? void 0 : _a.Runtime);
120
+ if (!functionRuntime) {
121
+ return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
122
+ }
123
+ // file extension must be chosen depending on the runtime
124
+ const codeFileExt = determineCodeFileExtFromRuntime(functionRuntime);
125
+ functionCodeZip = await zipString(`index.${codeFileExt}`, functionCode);
126
+ break;
107
127
  default:
108
128
  return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
109
129
  }
@@ -112,6 +132,8 @@ async function isLambdaFunctionCodeOnlyChange(change, evaluateCfnTemplate) {
112
132
  code = {
113
133
  s3Bucket,
114
134
  s3Key,
135
+ imageUri,
136
+ functionCodeZip,
115
137
  };
116
138
  }
117
139
  break;
@@ -164,6 +186,8 @@ class LambdaFunctionHotswapOperation {
164
186
  FunctionName: this.lambdaFunctionResource.physicalName,
165
187
  S3Bucket: resource.code.s3Bucket,
166
188
  S3Key: resource.code.s3Key,
189
+ ImageUri: resource.code.imageUri,
190
+ ZipFile: resource.code.functionCodeZip,
167
191
  }).promise();
168
192
  // only if the code changed is there any point in publishing a new Version
169
193
  if (this.lambdaFunctionResource.publishVersion) {
@@ -224,4 +248,46 @@ class LambdaFunctionHotswapOperation {
224
248
  return Promise.all(operations);
225
249
  }
226
250
  }
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQXFDO0FBRXJDLHFDQUFrSjtBQUdsSjs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxrQ0FBa0MsQ0FDdEQsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDs7SUFFM0cseUNBQXlDO0lBQ3pDLHNEQUFzRDtJQUN0RCw2R0FBNkc7SUFDN0csMEVBQTBFO0lBQzFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7UUFDbkQsT0FBTyw0QkFBbUIsQ0FBQyxVQUFVLENBQUM7S0FDdkM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxvQkFBb0IsRUFBRTtRQUNqRCxPQUFPLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQy9DO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNGLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7UUFDeEMsT0FBTyxnQkFBZ0IsQ0FBQztLQUN6QjtJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sc0NBQTZCLENBQUMsU0FBUyxRQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSwwQ0FBRSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuSSxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO1FBQ2xFLFNBQVMsRUFBRSx5RUFBeUUsR0FBRyxZQUFZO0tBQ3BHLENBQUMsQ0FBQztJQUVILHdEQUF3RDtJQUN4RCxNQUFNLDJCQUEy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Jy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIGVzdGFibGlzaFJlc291cmNlUGh5c2ljYWxOYW1lLCBIb3Rzd2FwT3BlcmF0aW9uLCBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcblxuLyoqXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVGAgaWYgdGhlIGNoYW5nZSBjYW5ub3QgYmUgc2hvcnQtY2lyY3VpdGVkLFxuICogYENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVGAgaWYgdGhlIGNoYW5nZSBpcyBpcnJlbGV2YW50IGZyb20gYSBzaG9ydC1jaXJjdWl0IHBlcnNwZWN0aXZlXG4gKiAobGlrZSBhIGNoYW5nZSB0byBDREtNZXRhZGF0YSksXG4gKiBvciBhIExhbWJkYUZ1bmN0aW9uUmVzb3VyY2UgaWYgdGhlIGNoYW5nZSBjYW4gYmUgc2hvcnQtY2lyY3VpdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgLy8gaWYgdGhlIGNoYW5nZSBpcyBmb3IgYSBMYW1iZGEgVmVyc2lvbixcbiAgLy8gaWdub3JlIGl0IGJ5IHJldHVybmluZyBhbiBlbXB0eSBob3Rzd2FwIG9wZXJhdGlvbiAtXG4gIC8vIHdlIHdpbGwgcHVibGlzaCBhIG5ldyB2ZXJzaW9uIHdoZW4gd2UgZ2V0IHRvIGhvdHN3YXBwaW5nIHRoZSBhY3R1YWwgRnVuY3Rpb24gdGhpcyBWZXJzaW9uIHBvaW50cyB0bywgYmVsb3dcbiAgLy8gKFZlcnNpb25zIGNhbid0IGJlIGNoYW5nZWQgaW4gQ2xvdWRGb3JtYXRpb24gYW55d2F5LCB0aGV5J3JlIGltbXV0YWJsZSlcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbiAgfVxuXG4gIC8vIHdlIGhhbmRsZSBBbGlhc2VzIHNwZWNpYWxseSB0b29cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OkFsaWFzJykge1xuICAgIHJldHVybiBjaGVja0FsaWFzSGFzVmVyc2lvbk9ubHlDaGFuZ2UoY2hhbmdlKTtcbiAgfVxuXG4gIGNvbnN0IGxhbWJkYUNvZGVDaGFuZ2UgPSBhd2FpdCBpc0xhbWJkYUZ1bmN0aW9uQ29kZU9ubHlDaGFuZ2UoY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgaWYgKHR5cGVvZiBsYW1iZGFDb2RlQ2hhbmdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBsYW1iZGFDb2RlQ2hhbmdlO1xuICB9XG5cbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXdhaXQgZXN0YWJsaXNoUmVzb3VyY2VQaHlzaWNhbE5hbWUobG9naWNhbElkLCBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uRnVuY3Rpb25OYW1lLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgaWYgKCFmdW5jdGlvbk5hbWUpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICBjb25zdCBmdW5jdGlvbkFybiA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHtcbiAgICAnRm46OlN1Yic6ICdhcm46JHtBV1M6OlBhcnRpdGlvbn06bGFtYmRhOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9OmZ1bmN0aW9uOicgKyBmdW5jdGlvbk5hbWUsXG4gIH0pO1xuXG4gIC8vIGZpbmQgYWxsIExhbWJkYSBWZXJzaW9ucyB0aGF0IHJlZmVyZW5jZSB0aGlzIEZ1bmN0aW9uXG4gIGNvbnN0IHZlcnNpb25zUmVmZXJlbmNpbmdGdW5jdGlvbiA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyhsb2dpY2FsSWQpXG4gICAgLmZpbHRlcihyID0+IHIuVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpWZXJzaW9uJyk7XG4gIC8vIGZpbmQgYWxsIExhbWJkYSBBbGlhc2VzIHRoYXQgcmVmZXJlbmNlIHRoZSBhYm92ZSBWZXJzaW9uc1xuICBjb25zdCBhbGlhc2VzUmVmZXJlbmNpbmdWZXJzaW9ucyA9IGZsYXRNYXAodmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uLCB2ID0+XG4gICAgZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKHYuTG9naWNhbElkKSk7XG4gIGNvbnN0IGFsaWFzZXNOYW1lcyA9IGF3YWl0IFByb21pc2UuYWxsKGFsaWFzZXNSZWZlcmVuY2luZ1ZlcnNpb25zLm1hcChhID0+XG4gICAgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oYS5Qcm9wZXJ0aWVzPy5OYW1lKSkpO1xuXG4gIHJldHVybiBuZXcgTGFtYmRhRnVuY3Rpb25Ib3Rzd2FwT3BlcmF0aW9uKHtcbiAgICBwaHlzaWNhbE5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICBmdW5jdGlvbkFybjogZnVuY3Rpb25Bcm4sXG4gICAgcmVzb3VyY2U6IGxhbWJkYUNvZGVDaGFuZ2UsXG4gICAgcHVibGlzaFZlcnNpb246IHZlcnNpb25zUmVmZXJlbmNpbmdGdW5jdGlvbi5sZW5ndGggPiAwLFxuICAgIGFsaWFzZXNOYW1lcyxcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyAgaXMgYSBnaXZlbiBBbGlhcyBjaGFuZ2UgaXMgb25seSBpbiB0aGUgJ0Z1bmN0aW9uVmVyc2lvbicgcHJvcGVydHksXG4gKiBhbmQgYENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UYCBpcyB0aGUgY2hhbmdlIGlzIGZvciBhbnkgb3RoZXIgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWxpYXNIYXNWZXJzaW9uT25seUNoYW5nZShjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSk6IENoYW5nZUhvdHN3YXBSZXN1bHQge1xuICBmb3IgKGNvbnN0IHVwZGF0ZWRQcm9wTmFtZSBpbiBjaGFuZ2UucHJvcGVydHlVcGRhdGVzKSB7XG4gICAgaWYgKHVwZGF0ZWRQcm9wTmFtZSAhPT0gJ0Z1bmN0aW9uVmVyc2lvbicpIHtcbiAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlRgIGlmIHRoZSBjaGFuZ2UgaXMgbm90IGZvciBhIEFXUzo6TGFtYmRhOjpGdW5jdGlvbixcbiAqIGJ1dCBkb2Vzbid0IHByZXZlbnQgc2hvcnQtY2lyY3VpdGluZ1xuICogKGxpa2UgYSBjaGFuZ2UgdG8gQ0RLTWV0YWRhdGEgcmVzb3VyY2UpLFxuICogYENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UYCBpZiB0aGUgY2hhbmdlIGlzIHRvIGEgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uLFxuICogYnV0IG5vdCBvbmx5IHRvIGl0cyBDb2RlIHByb3BlcnR5LFxuICogb3IgYSBMYW1iZGFGdW5jdGlvbkNvZGUgaWYgdGhlIGNoYW5nZSBpcyB0byBhIEFXUzo6TGFtYmRhOjpGdW5jdGlvbixcbiAqIGFuZCBvbmx5IGFmZmVjdHMgaXRzIENvZGUgcHJvcGVydHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzTGFtYmRhRnVuY3Rpb25Db2RlT25seUNoYW5nZShcbiAgY2hhbmdlOiBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8TGFtYmRhRnVuY3Rpb25DaGFuZ2UgfCBDaGFuZ2VIb3Rzd2FwSW1wYWN0PiB7XG4gIGNvbnN0IG5ld1Jlc291cmNlVHlwZSA9IGNoYW5nZS5uZXdWYWx1ZS5UeXBlO1xuICBpZiAobmV3UmVzb3VyY2VUeXBlICE9PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJykge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIC8qXG4gICAqIEF0IGZpcnN0IGdsYW5jZSwgd2Ugd291bGQgd2FudCB0byBpbml0aWFsaXplIHRoZXNlIHVzaW5nIHRoZSBcInByZXZpb3VzXCIgdmFsdWVzIChjaGFuZ2Uub2xkVmFsdWUpLFxuICAgKiBpbiBjYXNlIG9ubHkgb25lIG9mIHRoZW0gY2hhbmdlZCwgbGlrZSB0aGUga2V5LCBhbmQgdGhlIEJ1Y2tldCBzdGF5ZWQgdGhlIHNhbWUuXG4gICAqIEhvd2V2ZXIsIHRoYXQgYWN0dWFsbHkgZmFpbHMgZm9yIG9sZC1zdHlsZSBzeW50aGVzaXMsIHdoaWNoIHVzZXMgQ0ZOIFBhcmFtZXRlcnMhXG4gICAqIEJlY2F1c2UgdGhlIG5hbWVzIG9mIHRoZSBQYXJhbWV0ZXJzIGRlcGVuZCBvbiB0aGUgaGFzaCBvZiB0aGUgQXNzZXQsXG4gICAqIHRoZSBQYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBcIm9sZFwiIHZhbHVlcyBubyBsb25nZXIgZXhpc3QgaW4gYGFzc2V0UGFyYW1zYCBhdCB0aGlzIHBvaW50LFxuICAgKiB3aGljaCBtZWFucyB3ZSBkb24ndCBoYXZlIHRoZSBjb3JyZWN0IHZhbHVlcyBhdmFpbGFibGUgdG8gZXZhbHVhdGUgdGhlIENGTiBleHByZXNzaW9uIHdpdGguXG4gICAqIEZvcnR1bmF0ZWx5LCB0aGUgZGlmZiB3aWxsIGFsd2F5cyBpbmNsdWRlIGJvdGggdGhlIHMzQnVja2V0IGFuZCBzM0tleSBwYXJ0cyBvZiB0aGUgTGFtYmRhJ3MgQ29kZSBwcm9wZXJ0eSxcbiAgICogZXZlbiBpZiBvbmx5IG9uZSBvZiB0aGVtIHdhcyBhY3R1YWxseSBjaGFuZ2VkLFxuICAgKiB3aGljaCBtZWFucyB3ZSBkb24ndCBuZWVkIHRoZSBcIm9sZFwiIHZhbHVlcyBhdCBhbGwsIGFuZCB3ZSBjYW4gc2FmZWx5IGluaXRpYWxpemUgdGhlc2Ugd2l0aCBqdXN0IGAnJ2AuXG4gICAqL1xuICBjb25zdCBwcm9wZXJ0eVVwZGF0ZXMgPSBjaGFuZ2UucHJvcGVydHlVcGRhdGVzO1xuICBsZXQgY29kZTogTGFtYmRhRnVuY3Rpb25Db2RlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgdGFnczogTGFtYmRhRnVuY3Rpb25UYWdzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgdXBkYXRlZFByb3BOYW1lIGluIHByb3BlcnR5VXBkYXRlcykge1xuICAgIGNvbnN0IHVwZGF0ZWRQcm9wID0gcHJvcGVydHlVcGRhdGVzW3VwZGF0ZWRQcm9wTmFtZV07XG5cbiAgICBzd2l0Y2ggKHVwZGF0ZWRQcm9wTmFtZSkge1xuICAgICAgY2FzZSAnQ29kZSc6XG4gICAgICAgIGxldCBmb3VuZENvZGVEaWZmZXJlbmNlID0gZmFsc2U7XG4gICAgICAgIGxldCBzM0J1Y2tldCA9ICcnLCBzM0tleSA9ICcnO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmV3UHJvcE5hbWUgaW4gdXBkYXRlZFByb3AubmV3VmFsdWUpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld1Byb3BOYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdTM0J1Y2tldCc6XG4gICAgICAgICAgICAgIGZvdW5kQ29kZURpZmZlcmVuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICBzM0J1Y2tldCA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUzNLZXknOlxuICAgICAgICAgICAgICBmb3VuZENvZGVEaWZmZXJlbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgczNLZXkgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZVtuZXdQcm9wTmFtZV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvdW5kQ29kZURpZmZlcmVuY2UpIHtcbiAgICAgICAgICBjb2RlID0ge1xuICAgICAgICAgICAgczNCdWNrZXQsXG4gICAgICAgICAgICBzM0tleSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFncyc6XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRhZyB1cGRhdGVzIGFyZSBhIGJpdCBvZGQ7IHRoZXkgbWFuaWZlc3QgYXMgdHdvIGxpc3RzLCBhcmUgZmxhZ2dlZCBvbmx5IGFzXG4gICAgICAgICAqIGBpc0RpZmZlcmVudGAsIGFuZCB3ZSBoYXZlIHRvIHJlY29uY2lsZSB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgdGFnVXBkYXRlczogeyBbdGFnOiBzdHJpbmddOiBzdHJpbmcgfCBUYWdEZWxldGlvbiB9ID0ge307XG4gICAgICAgIGlmICh1cGRhdGVkUHJvcD8uaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgICB1cGRhdGVkUHJvcC5uZXdWYWx1ZS5mb3JFYWNoKCh0YWc6IENmbkRpZmZUYWdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGFnVXBkYXRlc1t0YWcuS2V5XSA9IHRhZy5WYWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHVwZGF0ZWRQcm9wLm9sZFZhbHVlLmZvckVhY2goKHRhZzogQ2ZuRGlmZlRhZ1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGFnVXBkYXRlc1t0YWcuS2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRhZ1VwZGF0ZXNbdGFnLktleV0gPSBUYWdEZWxldGlvbi5ERUxFVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0YWdzID0geyB0YWdVcGRhdGVzIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvZGUgfHwgdGFncyA/IHsgY29kZSwgdGFncyB9IDogQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UO1xufVxuXG5pbnRlcmZhY2UgQ2ZuRGlmZlRhZ1ZhbHVlIHtcbiAgcmVhZG9ubHkgS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IFZhbHVlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNvZGUge1xuICByZWFkb25seSBzM0J1Y2tldDogc3RyaW5nO1xuICByZWFkb25seSBzM0tleTogc3RyaW5nO1xufVxuXG5lbnVtIFRhZ0RlbGV0aW9uIHtcbiAgREVMRVRFID0gLTEsXG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvblRhZ3Mge1xuICByZWFkb25seSB0YWdVcGRhdGVzOiB7IFt0YWcgOiBzdHJpbmddIDogc3RyaW5nIHwgVGFnRGVsZXRpb24gfTtcbn1cblxuaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ2hhbmdlIHtcbiAgcmVhZG9ubHkgY29kZT86IExhbWJkYUZ1bmN0aW9uQ29kZTtcbiAgcmVhZG9ubHkgdGFncz86IExhbWJkYUZ1bmN0aW9uVGFncztcbn1cblxuaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uUmVzb3VyY2Uge1xuICByZWFkb25seSBwaHlzaWNhbE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZnVuY3Rpb25Bcm46IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2U6IExhbWJkYUZ1bmN0aW9uQ2hhbmdlO1xuICByZWFkb25seSBwdWJsaXNoVmVyc2lvbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYWxpYXNlc05hbWVzOiBzdHJpbmdbXTtcbn1cblxuY2xhc3MgTGFtYmRhRnVuY3Rpb25Ib3Rzd2FwT3BlcmF0aW9uIGltcGxlbWVudHMgSG90c3dhcE9wZXJhdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlID0gJ2xhbWJkYS1mdW5jdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uUmVzb3VyY2U6IExhbWJkYUZ1bmN0aW9uUmVzb3VyY2UpIHtcbiAgICB0aGlzLnJlc291cmNlTmFtZXMgPSBbXG4gICAgICBgTGFtYmRhIEZ1bmN0aW9uICcke2xhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgLy8gYWRkIFZlcnNpb24gaGVyZSBpZiB3ZSdyZSBwdWJsaXNoaW5nIGEgbmV3IG9uZVxuICAgICAgLi4uKGxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucHVibGlzaFZlcnNpb24gPyBbYExhbWJkYSBWZXJzaW9uIGZvciBGdW5jdGlvbiAnJHtsYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZX0nYF0gOiBbXSksXG4gICAgICAvLyBhZGQgYW55IEFsaWFzZXMgdGhhdCB3ZSBhcmUgaG90c3dhcHBpbmcgaGVyZVxuICAgICAgLi4ubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5hbGlhc2VzTmFtZXMubWFwKGFsaWFzID0+IGBMYW1iZGEgQWxpYXMgJyR7YWxpYXN9JyBmb3IgRnVuY3Rpb24gJyR7bGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWV9J2ApLFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYXBwbHkoc2RrOiBJU0RLKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBsYW1iZGEgPSBzZGsubGFtYmRhKCk7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucmVzb3VyY2U7XG4gICAgY29uc3Qgb3BlcmF0aW9uczogUHJvbWlzZTxhbnk+W10gPSBbXTtcblxuICAgIGlmIChyZXNvdXJjZS5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZUZ1bmN0aW9uQ29kZVByb21pc2UgPSBsYW1iZGEudXBkYXRlRnVuY3Rpb25Db2RlKHtcbiAgICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lLFxuICAgICAgICBTM0J1Y2tldDogcmVzb3VyY2UuY29kZS5zM0J1Y2tldCxcbiAgICAgICAgUzNLZXk6IHJlc291cmNlLmNvZGUuczNLZXksXG4gICAgICB9KS5wcm9taXNlKCk7XG5cbiAgICAgIC8vIG9ubHkgaWYgdGhlIGNvZGUgY2hhbmdlZCBpcyB0aGVyZSBhbnkgcG9pbnQgaW4gcHVibGlzaGluZyBhIG5ldyBWZXJzaW9uXG4gICAgICBpZiAodGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnB1Ymxpc2hWZXJzaW9uKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvZGUgdXBkYXRlIHRvIGJlIGRvbmUgYmVmb3JlIHB1Ymxpc2hpbmcgYSBuZXcgVmVyc2lvblxuICAgICAgICBhd2FpdCB1cGRhdGVGdW5jdGlvbkNvZGVQcm9taXNlO1xuICAgICAgICAvLyBpZiB3ZSBkb24ndCB3YWl0IGZvciB0aGUgRnVuY3Rpb24gdG8gZmluaXNoIHVwZGF0aW5nLFxuICAgICAgICAvLyB3ZSBjYW4gZ2V0IGEgXCJUaGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgYXQgdGhpcyB0aW1lLiBBbiB1cGRhdGUgaXMgaW4gcHJvZ3Jlc3MgZm9yIHJlc291cmNlOlwiXG4gICAgICAgIC8vIGVycm9yIHdoZW4gcHVibGlzaGluZyBhIG5ldyBWZXJzaW9uXG4gICAgICAgIGF3YWl0IGxhbWJkYS53YWl0Rm9yKCdmdW5jdGlvblVwZGF0ZWQnLCB7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lLFxuICAgICAgICB9KS5wcm9taXNlKCk7XG5cbiAgICAgICAgY29uc3QgcHVibGlzaFZlcnNpb25Qcm9taXNlID0gbGFtYmRhLnB1Ymxpc2hWZXJzaW9uKHtcbiAgICAgICAgICBGdW5jdGlvbk5hbWU6IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWUsXG4gICAgICAgIH0pLnByb21pc2UoKTtcblxuICAgICAgICBpZiAodGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLmFsaWFzZXNOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgVmVyc2lvbiB0byBmaW5pc2ggcHVibGlzaGluZ1xuICAgICAgICAgIGNvbnN0IHZlcnNpb25VcGRhdGUgPSBhd2FpdCBwdWJsaXNoVmVyc2lvblByb21pc2U7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5hbGlhc2VzTmFtZXMpIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnMucHVzaChsYW1iZGEudXBkYXRlQWxpYXMoe1xuICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWUsXG4gICAgICAgICAgICAgIE5hbWU6IGFsaWFzLFxuICAgICAgICAgICAgICBGdW5jdGlvblZlcnNpb246IHZlcnNpb25VcGRhdGUuVmVyc2lvbixcbiAgICAgICAgICAgIH0pLnByb21pc2UoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wZXJhdGlvbnMucHVzaChwdWJsaXNoVmVyc2lvblByb21pc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcGVyYXRpb25zLnB1c2godXBkYXRlRnVuY3Rpb25Db2RlUHJvbWlzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc291cmNlLnRhZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGFnc1RvRGVsZXRlOiBzdHJpbmdbXSA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlLnRhZ3MudGFnVXBkYXRlcylcbiAgICAgICAgLmZpbHRlcigoW19rZXksIHZhbF0pID0+IHZhbCA9PT0gVGFnRGVsZXRpb24uREVMRVRFKVxuICAgICAgICAubWFwKChba2V5LCBfdmFsXSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgdGFnc1RvU2V0OiB7IFt0YWc6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICBPYmplY3QuZW50cmllcyhyZXNvdXJjZS50YWdzIS50YWdVcGRhdGVzKVxuICAgICAgICAuZmlsdGVyKChbX2tleSwgdmFsXSkgPT4gdmFsICE9PSBUYWdEZWxldGlvbi5ERUxFVEUpXG4gICAgICAgIC5mb3JFYWNoKChbdGFnTmFtZSwgdGFnVmFsdWVdKSA9PiB7XG4gICAgICAgICAgdGFnc1RvU2V0W3RhZ05hbWVdID0gdGFnVmFsdWUgYXMgc3RyaW5nO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKHRhZ3NUb0RlbGV0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaChsYW1iZGEudW50YWdSZXNvdXJjZSh7XG4gICAgICAgICAgUmVzb3VyY2U6IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5mdW5jdGlvbkFybixcbiAgICAgICAgICBUYWdLZXlzOiB0YWdzVG9EZWxldGUsXG4gICAgICAgIH0pLnByb21pc2UoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyh0YWdzVG9TZXQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGxhbWJkYS50YWdSZXNvdXJjZSh7XG4gICAgICAgICAgUmVzb3VyY2U6IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5mdW5jdGlvbkFybixcbiAgICAgICAgICBUYWdzOiB0YWdzVG9TZXQsXG4gICAgICAgIH0pLnByb21pc2UoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcnVuIGFsbCBvZiBvdXIgdXBkYXRlcyBpbiBwYXJhbGxlbFxuICAgIHJldHVybiBQcm9taXNlLmFsbChvcGVyYXRpb25zKTtcbiAgfVxufVxuIl19
251
+ /**
252
+ * Compress a string as a file, returning a promise for the zip buffer
253
+ * https://github.com/archiverjs/node-archiver/issues/342
254
+ */
255
+ function zipString(fileName, rawString) {
256
+ return new Promise((resolve, reject) => {
257
+ const buffers = [];
258
+ const converter = new stream_1.Writable();
259
+ converter._write = (chunk, _, callback) => {
260
+ buffers.push(chunk);
261
+ process.nextTick(callback);
262
+ };
263
+ converter.on('finish', () => {
264
+ resolve(Buffer.concat(buffers));
265
+ });
266
+ const archive = archiver('zip');
267
+ archive.on('error', (err) => {
268
+ reject(err);
269
+ });
270
+ archive.pipe(converter);
271
+ archive.append(rawString, {
272
+ name: fileName,
273
+ date: new Date('1980-01-01T00:00:00.000Z'),
274
+ });
275
+ void archive.finalize();
276
+ });
277
+ }
278
+ /**
279
+ * Get file extension from Lambda runtime string.
280
+ * We use this extension to create a deployment package from Lambda inline code.
281
+ */
282
+ function determineCodeFileExtFromRuntime(runtime) {
283
+ if (runtime.startsWith('node')) {
284
+ return 'js';
285
+ }
286
+ if (runtime.startsWith('python')) {
287
+ return 'py';
288
+ }
289
+ // Currently inline code only supports Node.js and Python, ignoring other runtimes.
290
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#aws-properties-lambda-function-code-properties
291
+ throw new evaluate_cloudformation_template_1.CfnEvaluationException(`runtime ${runtime} is unsupported, only node.js and python runtimes are currently supported.`);
292
+ }
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBQ2xDLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMEZBQTZHO0FBQzdHLHFDQUFtSDtBQUVuSDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxrQ0FBa0MsQ0FDdEQsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDs7SUFFM0cseUNBQXlDO0lBQ3pDLHNEQUFzRDtJQUN0RCw2R0FBNkc7SUFDN0csMEVBQTBFO0lBQzFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7UUFDbkQsT0FBTyw0QkFBbUIsQ0FBQyxVQUFVLENBQUM7S0FDdkM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxvQkFBb0IsRUFBRTtRQUNqRCxPQUFPLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQy9DO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNGLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7UUFDeEMsT0FBTyxnQkFBZ0IsQ0FBQztLQUN6QjtJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsNkJBQTZCLENBQUMsU0FBUyxRQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSwwQ0FBRSxZQUFZLENBQUMsQ0FBQztJQUNsSSxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO1FBQ2xFLFNBQVMsRUFBRSx5RUFBeUUsR0FBRyxZQUFZO0tBQ3BH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QztBQUNuSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHsgZmxhdE1hcCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IENmbkV2YWx1YXRpb25FeGNlcHRpb24sIEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIEhvdHN3YXBPcGVyYXRpb24sIEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSB9IGZyb20gJy4vY29tbW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVGAgaWYgdGhlIGNoYW5nZSBjYW5ub3QgYmUgc2hvcnQtY2lyY3VpdGVkLFxuICogYENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVGAgaWYgdGhlIGNoYW5nZSBpcyBpcnJlbGV2YW50IGZyb20gYSBzaG9ydC1jaXJjdWl0IHBlcnNwZWN0aXZlXG4gKiAobGlrZSBhIGNoYW5nZSB0byBDREtNZXRhZGF0YSksXG4gKiBvciBhIExhbWJkYUZ1bmN0aW9uUmVzb3VyY2UgaWYgdGhlIGNoYW5nZSBjYW4gYmUgc2hvcnQtY2lyY3VpdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgLy8gaWYgdGhlIGNoYW5nZSBpcyBmb3IgYSBMYW1iZGEgVmVyc2lvbixcbiAgLy8gaWdub3JlIGl0IGJ5IHJldHVybmluZyBhbiBlbXB0eSBob3Rzd2FwIG9wZXJhdGlvbiAtXG4gIC8vIHdlIHdpbGwgcHVibGlzaCBhIG5ldyB2ZXJzaW9uIHdoZW4gd2UgZ2V0IHRvIGhvdHN3YXBwaW5nIHRoZSBhY3R1YWwgRnVuY3Rpb24gdGhpcyBWZXJzaW9uIHBvaW50cyB0bywgYmVsb3dcbiAgLy8gKFZlcnNpb25zIGNhbid0IGJlIGNoYW5nZWQgaW4gQ2xvdWRGb3JtYXRpb24gYW55d2F5LCB0aGV5J3JlIGltbXV0YWJsZSlcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbiAgfVxuXG4gIC8vIHdlIGhhbmRsZSBBbGlhc2VzIHNwZWNpYWxseSB0b29cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OkFsaWFzJykge1xuICAgIHJldHVybiBjaGVja0FsaWFzSGFzVmVyc2lvbk9ubHlDaGFuZ2UoY2hhbmdlKTtcbiAgfVxuXG4gIGNvbnN0IGxhbWJkYUNvZGVDaGFuZ2UgPSBhd2FpdCBpc0xhbWJkYUZ1bmN0aW9uQ29kZU9ubHlDaGFuZ2UoY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgaWYgKHR5cGVvZiBsYW1iZGFDb2RlQ2hhbmdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBsYW1iZGFDb2RlQ2hhbmdlO1xuICB9XG5cbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5lc3RhYmxpc2hSZXNvdXJjZVBoeXNpY2FsTmFtZShsb2dpY2FsSWQsIGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5GdW5jdGlvbk5hbWUpO1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGNvbnN0IGZ1bmN0aW9uQXJuID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICdGbjo6U3ViJzogJ2Fybjoke0FXUzo6UGFydGl0aW9ufTpsYW1iZGE6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06ZnVuY3Rpb246JyArIGZ1bmN0aW9uTmFtZSxcbiAgfSk7XG5cbiAgLy8gZmluZCBhbGwgTGFtYmRhIFZlcnNpb25zIHRoYXQgcmVmZXJlbmNlIHRoaXMgRnVuY3Rpb25cbiAgY29uc3QgdmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uID0gZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKGxvZ2ljYWxJZClcbiAgICAuZmlsdGVyKHIgPT4gci5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKTtcbiAgLy8gZmluZCBhbGwgTGFtYmRhIEFsaWFzZXMgdGhhdCByZWZlcmVuY2UgdGhlIGFib3ZlIFZlcnNpb25zXG4gIGNvbnN0IGFsaWFzZXNSZWZlcmVuY2luZ1ZlcnNpb25zID0gZmxhdE1hcCh2ZXJzaW9uc1JlZmVyZW5jaW5nRnVuY3Rpb24sIHYgPT5cbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRSZWZlcmVuY2VzVG8odi5Mb2dpY2FsSWQpKTtcbiAgY29uc3QgYWxpYXNlc05hbWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYWxpYXNlc1JlZmVyZW5jaW5nVmVyc2lvbnMubWFwKGEgPT5cbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihhLlByb3BlcnRpZXM/Lk5hbWUpKSk7XG5cbiAgcmV0dXJuIG5ldyBMYW1iZGFGdW5jdGlvbkhvdHN3YXBPcGVyYXRpb24oe1xuICAgIHBoeXNpY2FsTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgIGZ1bmN0aW9uQXJuOiBmdW5jdGlvbkFybixcbiAgICByZXNvdXJjZTogbGFtYmRhQ29kZUNoYW5nZSxcbiAgICBwdWJsaXNoVmVyc2lvbjogdmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uLmxlbmd0aCA+IDAsXG4gICAgYWxpYXNlc05hbWVzLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zICBpcyBhIGdpdmVuIEFsaWFzIGNoYW5nZSBpcyBvbmx5IGluIHRoZSAnRnVuY3Rpb25WZXJzaW9uJyBwcm9wZXJ0eSxcbiAqIGFuZCBgQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlRgIGlzIHRoZSBjaGFuZ2UgaXMgZm9yIGFueSBvdGhlciBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tBbGlhc0hhc1ZlcnNpb25Pbmx5Q2hhbmdlKGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlKTogQ2hhbmdlSG90c3dhcFJlc3VsdCB7XG4gIGZvciAoY29uc3QgdXBkYXRlZFByb3BOYW1lIGluIGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMpIHtcbiAgICBpZiAodXBkYXRlZFByb3BOYW1lICE9PSAnRnVuY3Rpb25WZXJzaW9uJykge1xuICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UO1xufVxuXG4vKipcbiAqIFJldHVybnMgYENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVGAgaWYgdGhlIGNoYW5nZSBpcyBub3QgZm9yIGEgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uLFxuICogYnV0IGRvZXNuJ3QgcHJldmVudCBzaG9ydC1jaXJjdWl0aW5nXG4gKiAobGlrZSBhIGNoYW5nZSB0byBDREtNZXRhZGF0YSByZXNvdXJjZSksXG4gKiBgQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlRgIGlmIHRoZSBjaGFuZ2UgaXMgdG8gYSBBV1M6OkxhbWJkYTo6RnVuY3Rpb24sXG4gKiBidXQgbm90IG9ubHkgdG8gaXRzIENvZGUgcHJvcGVydHksXG4gKiBvciBhIExhbWJkYUZ1bmN0aW9uQ29kZSBpZiB0aGUgY2hhbmdlIGlzIHRvIGEgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uLFxuICogYW5kIG9ubHkgYWZmZWN0cyBpdHMgQ29kZSBwcm9wZXJ0eS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNMYW1iZGFGdW5jdGlvbkNvZGVPbmx5Q2hhbmdlKFxuICBjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxMYW1iZGFGdW5jdGlvbkNoYW5nZSB8IENoYW5nZUhvdHN3YXBJbXBhY3Q+IHtcbiAgY29uc3QgbmV3UmVzb3VyY2VUeXBlID0gY2hhbmdlLm5ld1ZhbHVlLlR5cGU7XG4gIGlmIChuZXdSZXNvdXJjZVR5cGUgIT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgLypcbiAgICogQXQgZmlyc3QgZ2xhbmNlLCB3ZSB3b3VsZCB3YW50IHRvIGluaXRpYWxpemUgdGhlc2UgdXNpbmcgdGhlIFwicHJldmlvdXNcIiB2YWx1ZXMgKGNoYW5nZS5vbGRWYWx1ZSksXG4gICAqIGluIGNhc2Ugb25seSBvbmUgb2YgdGhlbSBjaGFuZ2VkLCBsaWtlIHRoZSBrZXksIGFuZCB0aGUgQnVja2V0IHN0YXllZCB0aGUgc2FtZS5cbiAgICogSG93ZXZlciwgdGhhdCBhY3R1YWxseSBmYWlscyBmb3Igb2xkLXN0eWxlIHN5bnRoZXNpcywgd2hpY2ggdXNlcyBDRk4gUGFyYW1ldGVycyFcbiAgICogQmVjYXVzZSB0aGUgbmFtZXMgb2YgdGhlIFBhcmFtZXRlcnMgZGVwZW5kIG9uIHRoZSBoYXNoIG9mIHRoZSBBc3NldCxcbiAgICogdGhlIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIFwib2xkXCIgdmFsdWVzIG5vIGxvbmdlciBleGlzdCBpbiBgYXNzZXRQYXJhbXNgIGF0IHRoaXMgcG9pbnQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IGhhdmUgdGhlIGNvcnJlY3QgdmFsdWVzIGF2YWlsYWJsZSB0byBldmFsdWF0ZSB0aGUgQ0ZOIGV4cHJlc3Npb24gd2l0aC5cbiAgICogRm9ydHVuYXRlbHksIHRoZSBkaWZmIHdpbGwgYWx3YXlzIGluY2x1ZGUgYm90aCB0aGUgczNCdWNrZXQgYW5kIHMzS2V5IHBhcnRzIG9mIHRoZSBMYW1iZGEncyBDb2RlIHByb3BlcnR5LFxuICAgKiBldmVuIGlmIG9ubHkgb25lIG9mIHRoZW0gd2FzIGFjdHVhbGx5IGNoYW5nZWQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IG5lZWQgdGhlIFwib2xkXCIgdmFsdWVzIGF0IGFsbCwgYW5kIHdlIGNhbiBzYWZlbHkgaW5pdGlhbGl6ZSB0aGVzZSB3aXRoIGp1c3QgYCcnYC5cbiAgICovXG4gIGNvbnN0IHByb3BlcnR5VXBkYXRlcyA9IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXM7XG4gIGxldCBjb2RlOiBMYW1iZGFGdW5jdGlvbkNvZGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCB0YWdzOiBMYW1iZGFGdW5jdGlvblRhZ3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gcHJvcGVydHlVcGRhdGVzKSB7XG4gICAgY29uc3QgdXBkYXRlZFByb3AgPSBwcm9wZXJ0eVVwZGF0ZXNbdXBkYXRlZFByb3BOYW1lXTtcblxuICAgIHN3aXRjaCAodXBkYXRlZFByb3BOYW1lKSB7XG4gICAgICBjYXNlICdDb2RlJzpcbiAgICAgICAgbGV0IGZvdW5kQ29kZURpZmZlcmVuY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IHMzQnVja2V0LCBzM0tleSwgaW1hZ2VVcmksIGZ1bmN0aW9uQ29kZVppcDtcblxuICAgICAgICBmb3IgKGNvbnN0IG5ld1Byb3BOYW1lIGluIHVwZGF0ZWRQcm9wLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdQcm9wTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnUzNCdWNrZXQnOlxuICAgICAgICAgICAgICBmb3VuZENvZGVEaWZmZXJlbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgczNCdWNrZXQgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZVtuZXdQcm9wTmFtZV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1MzS2V5JzpcbiAgICAgICAgICAgICAgZm91bmRDb2RlRGlmZmVyZW5jZSA9IHRydWU7XG4gICAgICAgICAgICAgIHMzS2V5ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWVbbmV3UHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJbWFnZVVyaSc6XG4gICAgICAgICAgICAgIGZvdW5kQ29kZURpZmZlcmVuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICBpbWFnZVVyaSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnWmlwRmlsZSc6XG4gICAgICAgICAgICAgIGZvdW5kQ29kZURpZmZlcmVuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSBhIHppcCBwYWNrYWdlIGNvbnRhaW5pbmcgYSBmaWxlIHdpdGggdGhlIGlubGluZSBjb2RlXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQ29kZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uUnVudGltZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SdW50aW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZmlsZSBleHRlbnNpb24gbXVzdCBiZSBjaG9zZW4gZGVwZW5kaW5nIG9uIHRoZSBydW50aW1lXG4gICAgICAgICAgICAgIGNvbnN0IGNvZGVGaWxlRXh0ID0gZGV0ZXJtaW5lQ29kZUZpbGVFeHRGcm9tUnVudGltZShmdW5jdGlvblJ1bnRpbWUpO1xuICAgICAgICAgICAgICBmdW5jdGlvbkNvZGVaaXAgPSBhd2FpdCB6aXBTdHJpbmcoYGluZGV4LiR7Y29kZUZpbGVFeHR9YCwgZnVuY3Rpb25Db2RlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmb3VuZENvZGVEaWZmZXJlbmNlKSB7XG4gICAgICAgICAgY29kZSA9IHtcbiAgICAgICAgICAgIHMzQnVja2V0LFxuICAgICAgICAgICAgczNLZXksXG4gICAgICAgICAgICBpbWFnZVVyaSxcbiAgICAgICAgICAgIGZ1bmN0aW9uQ29kZVppcCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFncyc6XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRhZyB1cGRhdGVzIGFyZSBhIGJpdCBvZGQ7IHRoZXkgbWFuaWZlc3QgYXMgdHdvIGxpc3RzLCBhcmUgZmxhZ2dlZCBvbmx5IGFzXG4gICAgICAgICAqIGBpc0RpZmZlcmVudGAsIGFuZCB3ZSBoYXZlIHRvIHJlY29uY2lsZSB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgdGFnVXBkYXRlczogeyBbdGFnOiBzdHJpbmddOiBzdHJpbmcgfCBUYWdEZWxldGlvbiB9ID0ge307XG4gICAgICAgIGlmICh1cGRhdGVkUHJvcD8uaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgICB1cGRhdGVkUHJvcC5uZXdWYWx1ZS5mb3JFYWNoKCh0YWc6IENmbkRpZmZUYWdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGFnVXBkYXRlc1t0YWcuS2V5XSA9IHRhZy5WYWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHVwZGF0ZWRQcm9wLm9sZFZhbHVlLmZvckVhY2goKHRhZzogQ2ZuRGlmZlRhZ1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGFnVXBkYXRlc1t0YWcuS2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRhZ1VwZGF0ZXNbdGFnLktleV0gPSBUYWdEZWxldGlvbi5ERUxFVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0YWdzID0geyB0YWdVcGRhdGVzIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvZGUgfHwgdGFncyA/IHsgY29kZSwgdGFncyB9IDogQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UO1xufVxuXG5pbnRlcmZhY2UgQ2ZuRGlmZlRhZ1ZhbHVlIHtcbiAgcmVhZG9ubHkgS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IFZhbHVlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNvZGUge1xuICByZWFkb25seSBzM0J1Y2tldD86IHN0cmluZztcbiAgcmVhZG9ubHkgczNLZXk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGltYWdlVXJpPzogc3RyaW5nO1xuICByZWFkb25seSBmdW5jdGlvbkNvZGVaaXA/OiBCdWZmZXI7XG59XG5cbmVudW0gVGFnRGVsZXRpb24ge1xuICBERUxFVEUgPSAtMSxcbn1cblxuaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uVGFncyB7XG4gIHJlYWRvbmx5IHRhZ1VwZGF0ZXM6IHsgW3RhZyA6IHN0cmluZ10gOiBzdHJpbmcgfCBUYWdEZWxldGlvbiB9O1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25DaGFuZ2Uge1xuICByZWFkb25seSBjb2RlPzogTGFtYmRhRnVuY3Rpb25Db2RlO1xuICByZWFkb25seSB0YWdzPzogTGFtYmRhRnVuY3Rpb25UYWdzO1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25SZXNvdXJjZSB7XG4gIHJlYWRvbmx5IHBoeXNpY2FsTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBmdW5jdGlvbkFybjogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZTogTGFtYmRhRnVuY3Rpb25DaGFuZ2U7XG4gIHJlYWRvbmx5IHB1Ymxpc2hWZXJzaW9uOiBib29sZWFuO1xuICByZWFkb25seSBhbGlhc2VzTmFtZXM6IHN0cmluZ1tdO1xufVxuXG5jbGFzcyBMYW1iZGFGdW5jdGlvbkhvdHN3YXBPcGVyYXRpb24gaW1wbGVtZW50cyBIb3Rzd2FwT3BlcmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2UgPSAnbGFtYmRhLWZ1bmN0aW9uJztcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlTmFtZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb25SZXNvdXJjZTogTGFtYmRhRnVuY3Rpb25SZXNvdXJjZSkge1xuICAgIHRoaXMucmVzb3VyY2VOYW1lcyA9IFtcbiAgICAgIGBMYW1iZGEgRnVuY3Rpb24gJyR7bGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWV9J2AsXG4gICAgICAvLyBhZGQgVmVyc2lvbiBoZXJlIGlmIHdlJ3JlIHB1Ymxpc2hpbmcgYSBuZXcgb25lXG4gICAgICAuLi4obGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5wdWJsaXNoVmVyc2lvbiA/IFtgTGFtYmRhIFZlcnNpb24gZm9yIEZ1bmN0aW9uICcke2xhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lfSdgXSA6IFtdKSxcbiAgICAgIC8vIGFkZCBhbnkgQWxpYXNlcyB0aGF0IHdlIGFyZSBob3Rzd2FwcGluZyBoZXJlXG4gICAgICAuLi5sYW1iZGFGdW5jdGlvblJlc291cmNlLmFsaWFzZXNOYW1lcy5tYXAoYWxpYXMgPT4gYExhbWJkYSBBbGlhcyAnJHthbGlhc30nIGZvciBGdW5jdGlvbiAnJHtsYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZX0nYCksXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseShzZGs6IElTREspOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGxhbWJkYSA9IHNkay5sYW1iZGEoKTtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5yZXNvdXJjZTtcbiAgICBjb25zdCBvcGVyYXRpb25zOiBQcm9taXNlPGFueT5bXSA9IFtdO1xuXG4gICAgaWYgKHJlc291cmNlLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdXBkYXRlRnVuY3Rpb25Db2RlUHJvbWlzZSA9IGxhbWJkYS51cGRhdGVGdW5jdGlvbkNvZGUoe1xuICAgICAgICBGdW5jdGlvbk5hbWU6IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWUsXG4gICAgICAgIFMzQnVja2V0OiByZXNvdXJjZS5jb2RlLnMzQnVja2V0LFxuICAgICAgICBTM0tleTogcmVzb3VyY2UuY29kZS5zM0tleSxcbiAgICAgICAgSW1hZ2VVcmk6IHJlc291cmNlLmNvZGUuaW1hZ2VVcmksXG4gICAgICAgIFppcEZpbGU6IHJlc291cmNlLmNvZGUuZnVuY3Rpb25Db2RlWmlwLFxuICAgICAgfSkucHJvbWlzZSgpO1xuXG4gICAgICAvLyBvbmx5IGlmIHRoZSBjb2RlIGNoYW5nZWQgaXMgdGhlcmUgYW55IHBvaW50IGluIHB1Ymxpc2hpbmcgYSBuZXcgVmVyc2lvblxuICAgICAgaWYgKHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5wdWJsaXNoVmVyc2lvbikge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBjb2RlIHVwZGF0ZSB0byBiZSBkb25lIGJlZm9yZSBwdWJsaXNoaW5nIGEgbmV3IFZlcnNpb25cbiAgICAgICAgYXdhaXQgdXBkYXRlRnVuY3Rpb25Db2RlUHJvbWlzZTtcbiAgICAgICAgLy8gaWYgd2UgZG9uJ3Qgd2FpdCBmb3IgdGhlIEZ1bmN0aW9uIHRvIGZpbmlzaCB1cGRhdGluZyxcbiAgICAgICAgLy8gd2UgY2FuIGdldCBhIFwiVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIGF0IHRoaXMgdGltZS4gQW4gdXBkYXRlIGlzIGluIHByb2dyZXNzIGZvciByZXNvdXJjZTpcIlxuICAgICAgICAvLyBlcnJvciB3aGVuIHB1Ymxpc2hpbmcgYSBuZXcgVmVyc2lvblxuICAgICAgICBhd2FpdCBsYW1iZGEud2FpdEZvcignZnVuY3Rpb25VcGRhdGVkJywge1xuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgfSkucHJvbWlzZSgpO1xuXG4gICAgICAgIGNvbnN0IHB1Ymxpc2hWZXJzaW9uUHJvbWlzZSA9IGxhbWJkYS5wdWJsaXNoVmVyc2lvbih7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lLFxuICAgICAgICB9KS5wcm9taXNlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5hbGlhc2VzTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIFZlcnNpb24gdG8gZmluaXNoIHB1Ymxpc2hpbmdcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uVXBkYXRlID0gYXdhaXQgcHVibGlzaFZlcnNpb25Qcm9taXNlO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UuYWxpYXNlc05hbWVzKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zLnB1c2gobGFtYmRhLnVwZGF0ZUFsaWFzKHtcbiAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lLFxuICAgICAgICAgICAgICBOYW1lOiBhbGlhcyxcbiAgICAgICAgICAgICAgRnVuY3Rpb25WZXJzaW9uOiB2ZXJzaW9uVXBkYXRlLlZlcnNpb24sXG4gICAgICAgICAgICB9KS5wcm9taXNlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcGVyYXRpb25zLnB1c2gocHVibGlzaFZlcnNpb25Qcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BlcmF0aW9ucy5wdXNoKHVwZGF0ZUZ1bmN0aW9uQ29kZVByb21pc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZS50YWdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRhZ3NUb0RlbGV0ZTogc3RyaW5nW10gPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZS50YWdzLnRhZ1VwZGF0ZXMpXG4gICAgICAgIC5maWx0ZXIoKFtfa2V5LCB2YWxdKSA9PiB2YWwgPT09IFRhZ0RlbGV0aW9uLkRFTEVURSlcbiAgICAgICAgLm1hcCgoW2tleSwgX3ZhbF0pID0+IGtleSk7XG5cbiAgICAgIGNvbnN0IHRhZ3NUb1NldDogeyBbdGFnOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgT2JqZWN0LmVudHJpZXMocmVzb3VyY2UudGFncyEudGFnVXBkYXRlcylcbiAgICAgICAgLmZpbHRlcigoW19rZXksIHZhbF0pID0+IHZhbCAhPT0gVGFnRGVsZXRpb24uREVMRVRFKVxuICAgICAgICAuZm9yRWFjaCgoW3RhZ05hbWUsIHRhZ1ZhbHVlXSkgPT4ge1xuICAgICAgICAgIHRhZ3NUb1NldFt0YWdOYW1lXSA9IHRhZ1ZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgfSk7XG5cbiAgICAgIGlmICh0YWdzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgICBvcGVyYXRpb25zLnB1c2gobGFtYmRhLnVudGFnUmVzb3VyY2Uoe1xuICAgICAgICAgIFJlc291cmNlOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UuZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgVGFnS2V5czogdGFnc1RvRGVsZXRlLFxuICAgICAgICB9KS5wcm9taXNlKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXModGFnc1RvU2V0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaChsYW1iZGEudGFnUmVzb3VyY2Uoe1xuICAgICAgICAgIFJlc291cmNlOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UuZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgVGFnczogdGFnc1RvU2V0LFxuICAgICAgICB9KS5wcm9taXNlKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJ1biBhbGwgb2Ygb3VyIHVwZGF0ZXMgaW4gcGFyYWxsZWxcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwob3BlcmF0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wcmVzcyBhIHN0cmluZyBhcyBhIGZpbGUsIHJldHVybmluZyBhIHByb21pc2UgZm9yIHRoZSB6aXAgYnVmZmVyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2lzc3Vlcy8zNDJcbiAqL1xuZnVuY3Rpb24gemlwU3RyaW5nKGZpbGVOYW1lOiBzdHJpbmcsIHJhd1N0cmluZzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBidWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuXG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IFdyaXRhYmxlKCk7XG5cbiAgICBjb252ZXJ0ZXIuX3dyaXRlID0gKGNodW5rOiBCdWZmZXIsIF86IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIGJ1ZmZlcnMucHVzaChjaHVuayk7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgY29udmVydGVyLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVycykpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnKTtcblxuICAgIGFyY2hpdmUub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG5cbiAgICBhcmNoaXZlLnBpcGUoY29udmVydGVyKTtcblxuICAgIGFyY2hpdmUuYXBwZW5kKHJhd1N0cmluZywge1xuICAgICAgbmFtZTogZmlsZU5hbWUsXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgnMTk4MC0wMS0wMVQwMDowMDowMC4wMDBaJyksIC8vIEFkZCBkYXRlIHRvIG1ha2UgcmVzdWx0aW5nIHppcCBmaWxlIGRldGVybWluaXN0aWNcbiAgICB9KTtcblxuICAgIHZvaWQgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgZmlsZSBleHRlbnNpb24gZnJvbSBMYW1iZGEgcnVudGltZSBzdHJpbmcuXG4gKiBXZSB1c2UgdGhpcyBleHRlbnNpb24gdG8gY3JlYXRlIGEgZGVwbG95bWVudCBwYWNrYWdlIGZyb20gTGFtYmRhIGlubGluZSBjb2RlLlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVDb2RlRmlsZUV4dEZyb21SdW50aW1lKHJ1bnRpbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChydW50aW1lLnN0YXJ0c1dpdGgoJ25vZGUnKSkge1xuICAgIHJldHVybiAnanMnO1xuICB9XG4gIGlmIChydW50aW1lLnN0YXJ0c1dpdGgoJ3B5dGhvbicpKSB7XG4gICAgcmV0dXJuICdweSc7XG4gIH1cbiAgLy8gQ3VycmVudGx5IGlubGluZSBjb2RlIG9ubHkgc3VwcG9ydHMgTm9kZS5qcyBhbmQgUHl0aG9uLCBpZ25vcmluZyBvdGhlciBydW50aW1lcy5cbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbCNhd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS1wcm9wZXJ0aWVzXG4gIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKGBydW50aW1lICR7cnVudGltZX0gaXMgdW5zdXBwb3J0ZWQsIG9ubHkgbm9kZS5qcyBhbmQgcHl0aG9uIHJ1bnRpbWVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLmApO1xufVxuIl19
@@ -1,5 +1,5 @@
1
+ import { EvaluateCloudFormationTemplate } from '../evaluate-cloudformation-template';
1
2
  import { ChangeHotswapResult, HotswappableChangeCandidate } from './common';
2
- import { EvaluateCloudFormationTemplate } from './evaluate-cloudformation-template';
3
3
  /**
4
4
  * This means that the value is required to exist by CloudFormation's API (or our S3 Bucket Deployment Lambda)
5
5
  * but the actual value specified is irrelevant
@@ -103,4 +103,4 @@ function stringifyObject(obj) {
103
103
  }
104
104
  return ret;
105
105
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtYnVja2V0LWRlcGxveW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiczMtYnVja2V0LWRlcGxveW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFDQUFtSDtBQUduSDs7O0dBR0c7QUFDVSxRQUFBLGVBQWUsR0FBRywrQkFBK0IsQ0FBQztBQUV4RCxLQUFLLFVBQVUsc0NBQXNDLENBQzFELFNBQWlCLEVBQUUsTUFBbUMsRUFBRSxtQkFBbUQ7O0lBRTNHLGtHQUFrRztJQUNsRyx1RkFBdUY7SUFDdkYsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtRQUMvQyxPQUFPLHVDQUF1QyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztLQUN4RjtJQUVELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssNkJBQTZCLEVBQUU7UUFDMUQsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztLQUNyRDtJQUVELHdIQUF3SDtJQUN4SCxNQUFNLFlBQVksR0FBRyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixPQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSwwQ0FBRSxZQUFZLENBQUMsQ0FBQztJQUMvRyxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxNQUFNLHdCQUF3QixHQUFHLE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUM7UUFDL0UsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVU7UUFDN0IsWUFBWSxFQUFFLFNBQVM7S0FDeEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLGtDQUFrQyxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUF6QkQsd0ZBeUJDO0FBRUQsTUFBTSxrQ0FBa0M7SUFJdEMsWUFBNkIsWUFBb0IsRUFBbUIs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QzNCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ3ZCO0lBRUQsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIEhvdHN3YXBPcGVyYXRpb24sIEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4vZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuXG4vKipcbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgcmVxdWlyZWQgdG8gZXhpc3QgYnkgQ2xvdWRGb3JtYXRpb24ncyBBUEkgKG9yIG91ciBTMyBCdWNrZXQgRGVwbG95bWVudCBMYW1iZGEpXG4gKiBidXQgdGhlIGFjdHVhbCB2YWx1ZSBzcGVjaWZpZWQgaXMgaXJyZWxldmFudFxuICovXG5leHBvcnQgY29uc3QgUkVRVUlSRURfQllfQ0ZOID0gJ3JlcXVpcmVkLXRvLWJlLXByZXNlbnQtYnktY2ZuJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlKFxuICBsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4ge1xuICAvLyBJbiBvbGQtc3R5bGUgc3ludGhlc2lzLCB0aGUgcG9saWN5IHVzZWQgYnkgdGhlIGxhbWJkYSB0byBjb3B5IGFzc2V0cyBSZWYncyB0aGUgYXNzZXRzIGRpcmVjdGx5LFxuICAvLyBtZWFuaW5nIHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgUG9saWN5IGFyZSBhcnRpZmFjdHMgdGhhdCBjYW4gYmUgc2FmZWx5IGlnbm9yZWRcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpJQU06OlBvbGljeScpIHtcbiAgICByZXR1cm4gY2hhbmdlSXNGb3JTM0RlcGxveUN1c3RvbVJlc291cmNlUG9saWN5KGxvZ2ljYWxJZCwgY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgfVxuXG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSAhPT0gJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICAvLyBub3RlIHRoYXQgdGhpcyBnaXZlcyB0aGUgQVJOIG9mIHRoZSBsYW1iZGEsIG5vdCB0aGUgbmFtZS4gVGhpcyBpcyBmaW5lIHRob3VnaCwgdGhlIGludm9rZSgpIHNkayBjYWxsIHdpbGwgdGFrZSBlaXRoZXJcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LlNlcnZpY2VUb2tlbik7XG4gIGlmICghZnVuY3Rpb25OYW1lKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgY29uc3QgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgIC4uLmNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzLFxuICAgIFNlcnZpY2VUb2tlbjogdW5kZWZpbmVkLFxuICB9KTtcblxuICByZXR1cm4gbmV3IFMzQnVja2V0RGVwbG95bWVudEhvdHN3YXBPcGVyYXRpb24oZnVuY3Rpb25OYW1lLCBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXMpO1xufVxuXG5jbGFzcyBTM0J1Y2tldERlcGxveW1lbnRIb3Rzd2FwT3BlcmF0aW9uIGltcGxlbWVudHMgSG90c3dhcE9wZXJhdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlID0gJ2N1c3RvbS1zMy1kZXBsb3ltZW50JztcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlTmFtZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnJlc291cmNlTmFtZXMgPSBbYENvbnRlbnRzIG9mIFMzIEJ1Y2tldCAnJHt0aGlzLmN1c3RvbVJlc291cmNlUHJvcGVydGllcy5EZXN0aW5hdGlvbkJ1Y2tldE5hbWV9J2BdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFwcGx5KHNkazogSVNESyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHNkay5sYW1iZGEoKS5pbnZva2Uoe1xuICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIC8vIExhbWJkYSByZWZ1c2VzIHRvIHRha2UgYSBkaXJlY3QgSlNPTiBvYmplY3QgYW5kIHJlcXVpcmVzIGl0IHRvIGJlIHN0cmluZ2lmeSgpJ2RcbiAgICAgIFBheWxvYWQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgUmVxdWVzdFR5cGU6ICdVcGRhdGUnLFxuICAgICAgICBSZXNwb25zZVVSTDogUkVRVUlSRURfQllfQ0ZOLFxuICAgICAgICBQaHlzaWNhbFJlc291cmNlSWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgU3RhY2tJZDogUkVRVUlSRURfQllfQ0ZOLFxuICAgICAgICBSZXF1ZXN0SWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgUmVzb3VyY2VQcm9wZXJ0aWVzOiBzdHJpbmdpZnlPYmplY3QodGhpcy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMpLCAvLyBKU09OLnN0cmluZ2lmeSgpIGRvZXNuJ3QgdHVybiB0aGUgYWN0dWFsIG9iamVjdHMgdG8gc3RyaW5ncywgYnV0IHRoZSBsYW1iZGEgZXhwZWN0cyBzdHJpbmdzXG4gICAgICB9KSxcbiAgICB9KS5wcm9taXNlKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hhbmdlSXNGb3JTM0RlcGxveUN1c3RvbVJlc291cmNlUG9saWN5KFxuICBpYW1Qb2xpY3lMb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4ge1xuICBjb25zdCByb2xlcyA9IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5Sb2xlcztcbiAgaWYgKCFyb2xlcykge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgIGNvbnN0IHJvbGVMb2dpY2FsSWQgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRMb2dpY2FsSWRGb3JQaHlzaWNhbE5hbWUoYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24ocm9sZSkpO1xuICAgIGlmICghcm9sZUxvZ2ljYWxJZCkge1xuICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVSZWZzID0gZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKHJvbGVMb2dpY2FsSWQpO1xuICAgIGZvciAoY29uc3Qgcm9sZVJlZiBvZiByb2xlUmVmcykge1xuICAgICAgaWYgKHJvbGVSZWYuVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgbGFtYmRhUmVmcyA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyhyb2xlUmVmLkxvZ2ljYWxJZCk7XG4gICAgICAgIGZvciAoY29uc3QgbGFtYmRhUmVmIG9mIGxhbWJkYVJlZnMpIHtcbiAgICAgICAgICAvLyBJZiBTM0RlcGxveW1lbnQgLT4gTGFtYmRhIC0+IFJvbGUgYW5kIElBTTo6UG9saWN5IC0+IFJvbGUsIHRoZW4gdGhpcyBJQU06OlBvbGljeSBjaGFuZ2UgaXMgYW5cbiAgICAgICAgICAvLyBhcnRpZmFjdCBvZiBvbGQtc3R5bGUgc3ludGhlc2lzXG4gICAgICAgICAgaWYgKGxhbWJkYVJlZi5UeXBlICE9PSAnQ3VzdG9tOjpDREtCdWNrZXREZXBsb3ltZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyb2xlUmVmLlR5cGUgPT09ICdBV1M6OklBTTo6UG9saWN5Jykge1xuICAgICAgICBpZiAocm9sZVJlZi5Mb2dpY2FsSWQgIT09IGlhbVBvbGljeUxvZ2ljYWxJZCkge1xuICAgICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQ7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdChvYmo6IGFueSk6IGFueSB7XG4gIGlmIChvYmogPT0gbnVsbCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKHN0cmluZ2lmeU9iamVjdCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3QgcmV0OiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgcmV0W2tdID0gc3RyaW5naWZ5T2JqZWN0KHYpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtYnVja2V0LWRlcGxveW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiczMtYnVja2V0LWRlcGxveW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFDQUFtSDtBQUVuSDs7O0dBR0c7QUFDVSxRQUFBLGVBQWUsR0FBRywrQkFBK0IsQ0FBQztBQUV4RCxLQUFLLFVBQVUsc0NBQXNDLENBQzFELFNBQWlCLEVBQUUsTUFBbUMsRUFBRSxtQkFBbUQ7O0lBRTNHLGtHQUFrRztJQUNsRyx1RkFBdUY7SUFDdkYsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtRQUMvQyxPQUFPLHVDQUF1QyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztLQUN4RjtJQUVELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssNkJBQTZCLEVBQUU7UUFDMUQsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztLQUNyRDtJQUVELHdIQUF3SDtJQUN4SCxNQUFNLFlBQVksR0FBRyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixPQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSwwQ0FBRSxZQUFZLENBQUMsQ0FBQztJQUMvRyxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxNQUFNLHdCQUF3QixHQUFHLE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUM7UUFDL0UsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVU7UUFDN0IsWUFBWSxFQUFFLFNBQVM7S0FDeEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLGtDQUFrQyxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUF6QkQsd0ZBeUJDO0FBRUQsTUFBTSxrQ0FBa0M7SUFJdEMsWUFBNkIsWUFBb0IsRUFBbUIs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QzNCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ3ZCO0lBRUQsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIEhvdHN3YXBPcGVyYXRpb24sIEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSB9IGZyb20gJy4vY29tbW9uJztcblxuLyoqXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzIHJlcXVpcmVkIHRvIGV4aXN0IGJ5IENsb3VkRm9ybWF0aW9uJ3MgQVBJIChvciBvdXIgUzMgQnVja2V0IERlcGxveW1lbnQgTGFtYmRhKVxuICogYnV0IHRoZSBhY3R1YWwgdmFsdWUgc3BlY2lmaWVkIGlzIGlycmVsZXZhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IFJFUVVJUkVEX0JZX0NGTiA9ICdyZXF1aXJlZC10by1iZS1wcmVzZW50LWJ5LWNmbic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0hvdHN3YXBwYWJsZVMzQnVja2V0RGVwbG95bWVudENoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgLy8gSW4gb2xkLXN0eWxlIHN5bnRoZXNpcywgdGhlIHBvbGljeSB1c2VkIGJ5IHRoZSBsYW1iZGEgdG8gY29weSBhc3NldHMgUmVmJ3MgdGhlIGFzc2V0cyBkaXJlY3RseSxcbiAgLy8gbWVhbmluZyB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIFBvbGljeSBhcmUgYXJ0aWZhY3RzIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkXG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6SUFNOjpQb2xpY3knKSB7XG4gICAgcmV0dXJuIGNoYW5nZUlzRm9yUzNEZXBsb3lDdXN0b21SZXNvdXJjZVBvbGljeShsb2dpY2FsSWQsIGNoYW5nZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG4gIH1cblxuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgIT09ICdDdXN0b206OkNES0J1Y2tldERlcGxveW1lbnQnKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgLy8gbm90ZSB0aGF0IHRoaXMgZ2l2ZXMgdGhlIEFSTiBvZiB0aGUgbGFtYmRhLCBub3QgdGhlIG5hbWUuIFRoaXMgaXMgZmluZSB0aG91Z2gsIHRoZSBpbnZva2UoKSBzZGsgY2FsbCB3aWxsIHRha2UgZWl0aGVyXG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5TZXJ2aWNlVG9rZW4pO1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbVJlc291cmNlUHJvcGVydGllcyA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHtcbiAgICAuLi5jaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcyxcbiAgICBTZXJ2aWNlVG9rZW46IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBTM0J1Y2tldERlcGxveW1lbnRIb3Rzd2FwT3BlcmF0aW9uKGZ1bmN0aW9uTmFtZSwgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzKTtcbn1cblxuY2xhc3MgUzNCdWNrZXREZXBsb3ltZW50SG90c3dhcE9wZXJhdGlvbiBpbXBsZW1lbnRzIEhvdHN3YXBPcGVyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZSA9ICdjdXN0b20tczMtZGVwbG95bWVudCc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5yZXNvdXJjZU5hbWVzID0gW2BDb250ZW50cyBvZiBTMyBCdWNrZXQgJyR7dGhpcy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMuRGVzdGluYXRpb25CdWNrZXROYW1lfSdgXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseShzZGs6IElTREspOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBzZGsubGFtYmRhKCkuaW52b2tlKHtcbiAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAvLyBMYW1iZGEgcmVmdXNlcyB0byB0YWtlIGEgZGlyZWN0IEpTT04gb2JqZWN0IGFuZCByZXF1aXJlcyBpdCB0byBiZSBzdHJpbmdpZnkoKSdkXG4gICAgICBQYXlsb2FkOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFJlcXVlc3RUeXBlOiAnVXBkYXRlJyxcbiAgICAgICAgUmVzcG9uc2VVUkw6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBSRVFVSVJFRF9CWV9DRk4sXG4gICAgICAgIFN0YWNrSWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgUmVxdWVzdElkOiBSRVFVSVJFRF9CWV9DRk4sXG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBSRVFVSVJFRF9CWV9DRk4sXG4gICAgICAgIFJlc291cmNlUHJvcGVydGllczogc3RyaW5naWZ5T2JqZWN0KHRoaXMuY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzKSwgLy8gSlNPTi5zdHJpbmdpZnkoKSBkb2Vzbid0IHR1cm4gdGhlIGFjdHVhbCBvYmplY3RzIHRvIHN0cmluZ3MsIGJ1dCB0aGUgbGFtYmRhIGV4cGVjdHMgc3RyaW5nc1xuICAgICAgfSksXG4gICAgfSkucHJvbWlzZSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoYW5nZUlzRm9yUzNEZXBsb3lDdXN0b21SZXNvdXJjZVBvbGljeShcbiAgaWFtUG9saWN5TG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgY29uc3Qgcm9sZXMgPSBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uUm9sZXM7XG4gIGlmICghcm9sZXMpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICBjb25zdCByb2xlTG9naWNhbElkID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kTG9naWNhbElkRm9yUGh5c2ljYWxOYW1lKGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHJvbGUpKTtcbiAgICBpZiAoIXJvbGVMb2dpY2FsSWQpIHtcbiAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG5cbiAgICBjb25zdCByb2xlUmVmcyA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyhyb2xlTG9naWNhbElkKTtcbiAgICBmb3IgKGNvbnN0IHJvbGVSZWYgb2Ygcm9sZVJlZnMpIHtcbiAgICAgIGlmIChyb2xlUmVmLlR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGxhbWJkYVJlZnMgPSBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRSZWZlcmVuY2VzVG8ocm9sZVJlZi5Mb2dpY2FsSWQpO1xuICAgICAgICBmb3IgKGNvbnN0IGxhbWJkYVJlZiBvZiBsYW1iZGFSZWZzKSB7XG4gICAgICAgICAgLy8gSWYgUzNEZXBsb3ltZW50IC0+IExhbWJkYSAtPiBSb2xlIGFuZCBJQU06OlBvbGljeSAtPiBSb2xlLCB0aGVuIHRoaXMgSUFNOjpQb2xpY3kgY2hhbmdlIGlzIGFuXG4gICAgICAgICAgLy8gYXJ0aWZhY3Qgb2Ygb2xkLXN0eWxlIHN5bnRoZXNpc1xuICAgICAgICAgIGlmIChsYW1iZGFSZWYuVHlwZSAhPT0gJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocm9sZVJlZi5UeXBlID09PSAnQVdTOjpJQU06OlBvbGljeScpIHtcbiAgICAgICAgaWYgKHJvbGVSZWYuTG9naWNhbElkICE9PSBpYW1Qb2xpY3lMb2dpY2FsSWQpIHtcbiAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3Qob2JqOiBhbnkpOiBhbnkge1xuICBpZiAob2JqID09IG51bGwpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcChzdHJpbmdpZnlPYmplY3QpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHJldDogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIHJldFtrXSA9IHN0cmluZ2lmeU9iamVjdCh2KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19
@@ -1,3 +1,3 @@
1
+ import { EvaluateCloudFormationTemplate } from '../evaluate-cloudformation-template';
1
2
  import { ChangeHotswapResult, HotswappableChangeCandidate } from './common';
2
- import { EvaluateCloudFormationTemplate } from './evaluate-cloudformation-template';
3
3
  export declare function isHotswappableStateMachineChange(logicalId: string, change: HotswappableChangeCandidate, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<ChangeHotswapResult>;
@@ -52,4 +52,4 @@ class StateMachineHotswapOperation {
52
52
  }).promise();
53
53
  }
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcGZ1bmN0aW9ucy1zdGF0ZS1tYWNoaW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0ZXBmdW5jdGlvbnMtc3RhdGUtbWFjaGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscUNBQW1IO0FBRzVHLEtBQUssVUFBVSxnQ0FBZ0MsQ0FDcEQsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDs7SUFFM0csTUFBTSw0QkFBNEIsR0FBRyxNQUFNLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNHLElBQUksNEJBQTRCLEtBQUssNEJBQW1CLENBQUMsd0JBQXdCO1FBQzdFLDRCQUE0QixLQUFLLDRCQUFtQixDQUFDLFVBQVUsRUFBRTtRQUNuRSxPQUFPLDRCQUE0QixDQUFDO0tBQ3JDO0lBRUQsTUFBTSw2QkFBNkIsZUFBRyxNQUFNLENBQUMsUUFBUSwwQ0FBRSxVQUFVLDBDQUFFLGdCQUFnQixDQUFDO0lBQ3BGLE1BQU0sZUFBZSxHQUFHLDZCQUE2QjtRQUNuRCxDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztZQUNoRCxTQUFTLEVBQUUsNkVBQTZFLEdBQUcsNkJBQTZCO1NBQ3pILENBQUM7UUFDRixDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3RCxJQUFJLENBQUMsZUFBZSxFQUFFO1FBQ3BCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxPQUFPLElBQUksNEJBQTRCLENBQUM7UUFDdEMsVUFBVSxFQUFFLDRCQUE0QjtRQUN4QyxlQUFlLEVBQUUsZUFBZTtLQUNqQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBeEJELDRFQXdCQztBQUVELEtBQUssVUFBVSxrQ0FBa0MsQ0FDL0MsTUFBbUMsRUFBRSxtQkFBbUQ7SUFFeEYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDN0MsSUFBSSxlQUFlLEtBQUssa0NBQWtDLEVBQUU7UUFDMUQsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztLQUNyRDtJQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7SUFDL0MsS0FBSyxNQUFNLGVBQWUsSUFBSSxlQUFlLEVBQUU7UUFDN0Msd0VBQXdFO1FBQ3hFLElBQUksZUFBZSxLQUFLLGtCQUFrQixFQUFFO1lBQzFDLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7U0FDckQ7S0FDRjtJQUVELE9BQU8sbUJBQW1CLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFPRCxNQUFNLDRCQUE0QjtJQUloQyxZQUE2QixvQkFBMEM7UUFBMUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUh2RCxZQUFPLEdBQUcsNkJBQTZCLENBQUM7UUFJdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLGlCQUFpQixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBUztRQUMxQiw0REFBNEQ7UUFDNUQsT0FBTyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLENBQUM7WUFDNUMsZUFBZSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlO1lBQzFELFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVTtTQUNqRCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgQ2hhbmdlSG90c3dhcEltcGFjdCwgQ2hhbmdlSG90c3dhcFJlc3VsdCwgSG90c3dhcE9wZXJhdGlvbiwgSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIH0gZnJvbSAnLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhdGVNYWNoaW5lRGVmaW5pdGlvbkNoYW5nZSA9IGF3YWl0IGlzU3RhdGVNYWNoaW5lRGVmaW5pdGlvbk9ubHlDaGFuZ2UoY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgaWYgKHN0YXRlTWFjaGluZURlZmluaXRpb25DaGFuZ2UgPT09IENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UIHx8XG4gICAgICBzdGF0ZU1hY2hpbmVEZWZpbml0aW9uQ2hhbmdlID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQpIHtcbiAgICByZXR1cm4gc3RhdGVNYWNoaW5lRGVmaW5pdGlvbkNoYW5nZTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlTWFjaGluZU5hbWVJbkNmblRlbXBsYXRlID0gY2hhbmdlLm5ld1ZhbHVlPy5Qcm9wZXJ0aWVzPy5TdGF0ZU1hY2hpbmVOYW1lO1xuICBjb25zdCBzdGF0ZU1hY2hpbmVBcm4gPSBzdGF0ZU1hY2hpbmVOYW1lSW5DZm5UZW1wbGF0ZVxuICAgID8gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICAgJ0ZuOjpTdWInOiAnYXJuOiR7QVdTOjpQYXJ0aXRpb259OnN0YXRlczoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfTpzdGF0ZU1hY2hpbmU6JyArIHN0YXRlTWFjaGluZU5hbWVJbkNmblRlbXBsYXRlLFxuICAgIH0pXG4gICAgOiBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRQaHlzaWNhbE5hbWVGb3IobG9naWNhbElkKTtcblxuICBpZiAoIXN0YXRlTWFjaGluZUFybikge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIHJldHVybiBuZXcgU3RhdGVNYWNoaW5lSG90c3dhcE9wZXJhdGlvbih7XG4gICAgZGVmaW5pdGlvbjogc3RhdGVNYWNoaW5lRGVmaW5pdGlvbkNoYW5nZSxcbiAgICBzdGF0ZU1hY2hpbmVBcm46IHN0YXRlTWFjaGluZUFybixcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzU3RhdGVNYWNoaW5lRGVmaW5pdGlvbk9ubHlDaGFuZ2UoXG4gIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPHN0cmluZyB8IENoYW5nZUhvdHN3YXBJbXBhY3Q+IHtcbiAgY29uc3QgbmV3UmVzb3VyY2VUeXBlID0gY2hhbmdlLm5ld1ZhbHVlLlR5cGU7XG4gIGlmIChuZXdSZXNvdXJjZVR5cGUgIT09ICdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICBjb25zdCBwcm9wZXJ0eVVwZGF0ZXMgPSBjaGFuZ2UucHJvcGVydHlVcGRhdGVzO1xuICBmb3IgKGNvbnN0IHVwZGF0ZWRQcm9wTmFtZSBpbiBwcm9wZXJ0eVVwZGF0ZXMpIHtcbiAgICAvLyBlbnN1cmUgdGhhdCBvbmx5IGNoYW5nZXMgdG8gdGhlIGRlZmluaXRpb24gc3RyaW5nIHJlc3VsdCBpbiBhIGhvdHN3YXBcbiAgICBpZiAodXBkYXRlZFByb3BOYW1lICE9PSAnRGVmaW5pdGlvblN0cmluZycpIHtcbiAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24ocHJvcGVydHlVcGRhdGVzLkRlZmluaXRpb25TdHJpbmcubmV3VmFsdWUpO1xufVxuXG5pbnRlcmZhY2UgU3RhdGVNYWNoaW5lUmVzb3VyY2Uge1xuICByZWFkb25seSBzdGF0ZU1hY2hpbmVBcm46IHN0cmluZztcbiAgcmVhZG9ubHkgZGVmaW5pdGlvbjogc3RyaW5nO1xufVxuXG5jbGFzcyBTdGF0ZU1hY2hpbmVIb3Rzd2FwT3BlcmF0aW9uIGltcGxlbWVudHMgSG90c3dhcE9wZXJhdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlID0gJ3N0ZXBmdW5jdGlvbnMtc3RhdGUtbWFjaGluZSc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0ZXBGdW5jdGlvblJlc291cmNlOiBTdGF0ZU1hY2hpbmVSZXNvdXJjZSkge1xuICAgIHRoaXMucmVzb3VyY2VOYW1lcyA9IFtgU3RhdGVNYWNoaW5lICcke3RoaXMuc3RlcEZ1bmN0aW9uUmVzb3VyY2Uuc3RhdGVNYWNoaW5lQXJuLnNwbGl0KCc6JylbNl19J2BdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFwcGx5KHNkazogSVNESyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gbm90IHBhc3NpbmcgdGhlIG9wdGlvbmFsIHByb3BlcnRpZXMgbGVhdmVzIHRoZW0gdW5jaGFuZ2VkXG4gICAgcmV0dXJuIHNkay5zdGVwRnVuY3Rpb25zKCkudXBkYXRlU3RhdGVNYWNoaW5lKHtcbiAgICAgIHN0YXRlTWFjaGluZUFybjogdGhpcy5zdGVwRnVuY3Rpb25SZXNvdXJjZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICBkZWZpbml0aW9uOiB0aGlzLnN0ZXBGdW5jdGlvblJlc291cmNlLmRlZmluaXRpb24sXG4gICAgfSkucHJvbWlzZSgpO1xuICB9XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcGZ1bmN0aW9ucy1zdGF0ZS1tYWNoaW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0ZXBmdW5jdGlvbnMtc3RhdGUtbWFjaGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscUNBQW1IO0FBRTVHLEtBQUssVUFBVSxnQ0FBZ0MsQ0FDcEQsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDs7SUFFM0csTUFBTSw0QkFBNEIsR0FBRyxNQUFNLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNHLElBQUksNEJBQTRCLEtBQUssNEJBQW1CLENBQUMsd0JBQXdCO1FBQzdFLDRCQUE0QixLQUFLLDRCQUFtQixDQUFDLFVBQVUsRUFBRTtRQUNuRSxPQUFPLDRCQUE0QixDQUFDO0tBQ3JDO0lBRUQsTUFBTSw2QkFBNkIsZUFBRyxNQUFNLENBQUMsUUFBUSwwQ0FBRSxVQUFVLDBDQUFFLGdCQUFnQixDQUFDO0lBQ3BGLE1BQU0sZUFBZSxHQUFHLDZCQUE2QjtRQUNuRCxDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztZQUNoRCxTQUFTLEVBQUUsNkVBQTZFLEdBQUcsNkJBQTZCO1NBQ3pILENBQUM7UUFDRixDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3RCxJQUFJLENBQUMsZUFBZSxFQUFFO1FBQ3BCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxPQUFPLElBQUksNEJBQTRCLENBQUM7UUFDdEMsVUFBVSxFQUFFLDRCQUE0QjtRQUN4QyxlQUFlLEVBQUUsZUFBZTtLQUNqQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBeEJELDRFQXdCQztBQUVELEtBQUssVUFBVSxrQ0FBa0MsQ0FDL0MsTUFBbUMsRUFBRSxtQkFBbUQ7SUFFeEYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDN0MsSUFBSSxlQUFlLEtBQUssa0NBQWtDLEVBQUU7UUFDMUQsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztLQUNyRDtJQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7SUFDL0MsS0FBSyxNQUFNLGVBQWUsSUFBSSxlQUFlLEVBQUU7UUFDN0Msd0VBQXdFO1FBQ3hFLElBQUksZUFBZSxLQUFLLGtCQUFrQixFQUFFO1lBQzFDLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7U0FDckQ7S0FDRjtJQUVELE9BQU8sbUJBQW1CLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFPRCxNQUFNLDRCQUE0QjtJQUloQyxZQUE2QixvQkFBMEM7UUFBMUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUh2RCxZQUFPLEdBQUcsNkJBQTZCLENBQUM7UUFJdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLGlCQUFpQixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBUztRQUMxQiw0REFBNEQ7UUFDNUQsT0FBTyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLENBQUM7WUFDNUMsZUFBZSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlO1lBQzFELFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVTtTQUNqRCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuaW1wb3J0IHsgQ2hhbmdlSG90c3dhcEltcGFjdCwgQ2hhbmdlSG90c3dhcFJlc3VsdCwgSG90c3dhcE9wZXJhdGlvbiwgSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlIH0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVTdGF0ZU1hY2hpbmVDaGFuZ2UoXG4gIGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxDaGFuZ2VIb3Rzd2FwUmVzdWx0PiB7XG4gIGNvbnN0IHN0YXRlTWFjaGluZURlZmluaXRpb25DaGFuZ2UgPSBhd2FpdCBpc1N0YXRlTWFjaGluZURlZmluaXRpb25Pbmx5Q2hhbmdlKGNoYW5nZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG4gIGlmIChzdGF0ZU1hY2hpbmVEZWZpbml0aW9uQ2hhbmdlID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVCB8fFxuICAgICAgc3RhdGVNYWNoaW5lRGVmaW5pdGlvbkNoYW5nZSA9PT0gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UKSB7XG4gICAgcmV0dXJuIHN0YXRlTWFjaGluZURlZmluaXRpb25DaGFuZ2U7XG4gIH1cblxuICBjb25zdCBzdGF0ZU1hY2hpbmVOYW1lSW5DZm5UZW1wbGF0ZSA9IGNoYW5nZS5uZXdWYWx1ZT8uUHJvcGVydGllcz8uU3RhdGVNYWNoaW5lTmFtZTtcbiAgY29uc3Qgc3RhdGVNYWNoaW5lQXJuID0gc3RhdGVNYWNoaW5lTmFtZUluQ2ZuVGVtcGxhdGVcbiAgICA/IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHtcbiAgICAgICdGbjo6U3ViJzogJ2Fybjoke0FXUzo6UGFydGl0aW9ufTpzdGF0ZXM6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06c3RhdGVNYWNoaW5lOicgKyBzdGF0ZU1hY2hpbmVOYW1lSW5DZm5UZW1wbGF0ZSxcbiAgICB9KVxuICAgIDogYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUGh5c2ljYWxOYW1lRm9yKGxvZ2ljYWxJZCk7XG5cbiAgaWYgKCFzdGF0ZU1hY2hpbmVBcm4pIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICByZXR1cm4gbmV3IFN0YXRlTWFjaGluZUhvdHN3YXBPcGVyYXRpb24oe1xuICAgIGRlZmluaXRpb246IHN0YXRlTWFjaGluZURlZmluaXRpb25DaGFuZ2UsXG4gICAgc3RhdGVNYWNoaW5lQXJuOiBzdGF0ZU1hY2hpbmVBcm4sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1N0YXRlTWFjaGluZURlZmluaXRpb25Pbmx5Q2hhbmdlKFxuICBjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxzdHJpbmcgfCBDaGFuZ2VIb3Rzd2FwSW1wYWN0PiB7XG4gIGNvbnN0IG5ld1Jlc291cmNlVHlwZSA9IGNoYW5nZS5uZXdWYWx1ZS5UeXBlO1xuICBpZiAobmV3UmVzb3VyY2VUeXBlICE9PSAnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgY29uc3QgcHJvcGVydHlVcGRhdGVzID0gY2hhbmdlLnByb3BlcnR5VXBkYXRlcztcbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gcHJvcGVydHlVcGRhdGVzKSB7XG4gICAgLy8gZW5zdXJlIHRoYXQgb25seSBjaGFuZ2VzIHRvIHRoZSBkZWZpbml0aW9uIHN0cmluZyByZXN1bHQgaW4gYSBob3Rzd2FwXG4gICAgaWYgKHVwZGF0ZWRQcm9wTmFtZSAhPT0gJ0RlZmluaXRpb25TdHJpbmcnKSB7XG4gICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHByb3BlcnR5VXBkYXRlcy5EZWZpbml0aW9uU3RyaW5nLm5ld1ZhbHVlKTtcbn1cblxuaW50ZXJmYWNlIFN0YXRlTWFjaGluZVJlc291cmNlIHtcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlZmluaXRpb246IHN0cmluZztcbn1cblxuY2xhc3MgU3RhdGVNYWNoaW5lSG90c3dhcE9wZXJhdGlvbiBpbXBsZW1lbnRzIEhvdHN3YXBPcGVyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZSA9ICdzdGVwZnVuY3Rpb25zLXN0YXRlLW1hY2hpbmUnO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdGVwRnVuY3Rpb25SZXNvdXJjZTogU3RhdGVNYWNoaW5lUmVzb3VyY2UpIHtcbiAgICB0aGlzLnJlc291cmNlTmFtZXMgPSBbYFN0YXRlTWFjaGluZSAnJHt0aGlzLnN0ZXBGdW5jdGlvblJlc291cmNlLnN0YXRlTWFjaGluZUFybi5zcGxpdCgnOicpWzZdfSdgXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseShzZGs6IElTREspOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIG5vdCBwYXNzaW5nIHRoZSBvcHRpb25hbCBwcm9wZXJ0aWVzIGxlYXZlcyB0aGVtIHVuY2hhbmdlZFxuICAgIHJldHVybiBzZGsuc3RlcEZ1bmN0aW9ucygpLnVwZGF0ZVN0YXRlTWFjaGluZSh7XG4gICAgICBzdGF0ZU1hY2hpbmVBcm46IHRoaXMuc3RlcEZ1bmN0aW9uUmVzb3VyY2Uuc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgZGVmaW5pdGlvbjogdGhpcy5zdGVwRnVuY3Rpb25SZXNvdXJjZS5kZWZpbml0aW9uLFxuICAgIH0pLnByb21pc2UoKTtcbiAgfVxufVxuIl19
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryHotswapDeployment = void 0;
4
4
  const cfn_diff = require("@aws-cdk/cloudformation-diff");
5
- const colors = require("colors/safe");
5
+ const chalk = require("chalk");
6
6
  const logging_1 = require("../logging");
7
7
  const aws_auth_1 = require("./aws-auth");
8
+ const evaluate_cloudformation_template_1 = require("./evaluate-cloudformation-template");
8
9
  const code_build_projects_1 = require("./hotswap/code-build-projects");
9
10
  const common_1 = require("./hotswap/common");
10
11
  const ecs_services_1 = require("./hotswap/ecs-services");
11
- const evaluate_cloudformation_template_1 = require("./hotswap/evaluate-cloudformation-template");
12
12
  const lambda_functions_1 = require("./hotswap/lambda-functions");
13
13
  const s3_bucket_deployments_1 = require("./hotswap/s3-bucket-deployments");
14
14
  const stepfunctions_state_machines_1 = require("./hotswap/stepfunctions-state-machines");
@@ -24,18 +24,18 @@ async function tryHotswapDeployment(sdkProvider, assetParams, cloudFormationStac
24
24
  const resolvedEnv = await sdkProvider.resolveEnvironment(stackArtifact.environment);
25
25
  // create a new SDK using the CLI credentials, because the default one will not work for new-style synthesis -
26
26
  // it assumes the bootstrap deploy Role, which doesn't have permissions to update Lambda functions
27
- const sdk = await sdkProvider.forEnvironment(resolvedEnv, aws_auth_1.Mode.ForWriting);
27
+ const sdk = (await sdkProvider.forEnvironment(resolvedEnv, aws_auth_1.Mode.ForWriting)).sdk;
28
28
  // The current resources of the Stack.
29
29
  // We need them to figure out the physical name of a resource in case it wasn't specified by the user.
30
30
  // We fetch it lazily, to save a service call, in case all hotswapped resources have their physical names set.
31
- const listStackResources = new LazyListStackResources(sdk, stackArtifact.stackName);
31
+ const listStackResources = new evaluate_cloudformation_template_1.LazyListStackResources(sdk, stackArtifact.stackName);
32
32
  const evaluateCfnTemplate = new evaluate_cloudformation_template_1.EvaluateCloudFormationTemplate({
33
33
  stackArtifact,
34
34
  parameters: assetParams,
35
35
  account: resolvedEnv.account,
36
36
  region: resolvedEnv.region,
37
37
  partition: (await sdk.currentAccount()).partition,
38
- urlSuffix: sdk.getEndpointSuffix,
38
+ urlSuffix: (region) => sdk.getEndpointSuffix(region),
39
39
  listStackResources,
40
40
  });
41
41
  const currentTemplate = await cloudFormationStack.template();
@@ -47,7 +47,7 @@ async function tryHotswapDeployment(sdkProvider, assetParams, cloudFormationStac
47
47
  }
48
48
  // apply the short-circuitable changes
49
49
  await applyAllHotswappableChanges(sdk, hotswappableChanges);
50
- return { noOp: hotswappableChanges.length === 0, stackArn: cloudFormationStack.stackId, outputs: cloudFormationStack.outputs, stackArtifact };
50
+ return { noOp: hotswappableChanges.length === 0, stackArn: cloudFormationStack.stackId, outputs: cloudFormationStack.outputs };
51
51
  }
52
52
  exports.tryHotswapDeployment = tryHotswapDeployment;
53
53
  async function findAllHotswappableChanges(stackChanges, evaluateCfnTemplate) {
@@ -193,41 +193,15 @@ async function applyHotswappableChange(sdk, hotswapOperation) {
193
193
  sdk.appendCustomUserAgent(customUserAgent);
194
194
  try {
195
195
  for (const name of hotswapOperation.resourceNames) {
196
- logging_1.print(` ${common_1.ICON} %s`, colors.bold(name));
196
+ logging_1.print(` ${common_1.ICON} %s`, chalk.bold(name));
197
197
  }
198
198
  return await hotswapOperation.apply(sdk);
199
199
  }
200
200
  finally {
201
201
  for (const name of hotswapOperation.resourceNames) {
202
- logging_1.print(`${common_1.ICON} %s %s`, colors.bold(name), colors.green('hotswapped!'));
202
+ logging_1.print(`${common_1.ICON} %s %s`, chalk.bold(name), chalk.green('hotswapped!'));
203
203
  }
204
204
  sdk.removeCustomUserAgent(customUserAgent);
205
205
  }
206
206
  }
207
- class LazyListStackResources {
208
- constructor(sdk, stackName) {
209
- this.sdk = sdk;
210
- this.stackName = stackName;
211
- }
212
- async listStackResources() {
213
- if (this.stackResources === undefined) {
214
- this.stackResources = await this.getStackResources();
215
- }
216
- return this.stackResources;
217
- }
218
- async getStackResources() {
219
- var _a;
220
- const ret = new Array();
221
- let nextToken;
222
- do {
223
- const stackResourcesResponse = await this.sdk.cloudFormation().listStackResources({
224
- StackName: this.stackName,
225
- NextToken: nextToken,
226
- }).promise();
227
- ret.push(...((_a = stackResourcesResponse.StackResourceSummaries) !== null && _a !== void 0 ? _a : []));
228
- nextToken = stackResourcesResponse.NextToken;
229
- } while (nextToken);
230
- return ret;
231
- }
232
- }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAtZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBQXlEO0FBR3pELHNDQUFzQztBQUN0Qyx3Q0FBbUM7QUFDbkMseUNBQXFEO0FBRXJELHVFQUFxRjtBQUNyRiw2Q0FBcUo7QUFDckoseURBQXdFO0FBQ3hFLGlHQUE0RjtBQUM1RixpRUFBZ0Y7QUFDaEYsMkVBQXlGO0FBQ3pGLHlGQUEwRjtBQUcxRjs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFdBQXdCLEVBQUUsV0FBc0MsRUFDaEUsbUJBQXdDLEVBQUUsYUFBZ0Q7SUFFMUYsMkZBQTJGO0lBQzNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRiw4R0FBOEc7SUFDOUcsa0dBQWtHO0lBQ2xHLE1BQU0sR0FBRyxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsZUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLHNDQUFzQztJQUN0QyxzR0FBc0c7SUFDdEcsOEdBQThHO0lBQzlHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxpRUFBOEIsQ0FBQztRQUM3RCxhQUFhO1FBQ2IsVUFBVSxFQUFFLFdBQVc7UUFDdkIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO1FBQzVCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMxQixTQUFTLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDakQsU0FBUyxFQUFFLEdBQUcsQ0FBQyxpQkFBaUI7UUFDaEMsa0JBQWtCO0tB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RyxJQUFJLEtBQUssRUFBdUMsQ0FBQztRQUM3RCxJQUFJLFNBQTZCLENBQUM7UUFDbEMsR0FBRztZQUNELE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNoRixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFDLHNCQUFzQixDQUFDLHNCQUFzQixtQ0FBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25FLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7U0FDOUMsUUFBUSxTQUFTLEVBQUU7UUFDcEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZm5fZGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbiB9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgY29sb3JzIGZyb20gJ2NvbG9ycy9zYWZlJztcbmltcG9ydCB7IHByaW50IH0gZnJvbSAnLi4vbG9nZ2luZyc7XG5pbXBvcnQgeyBJU0RLLCBNb2RlLCBTZGtQcm92aWRlciB9IGZyb20gJy4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuL2RlcGxveS1zdGFjayc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUNvZGVCdWlsZFByb2plY3RDaGFuZ2UgfSBmcm9tICcuL2hvdHN3YXAvY29kZS1idWlsZC1wcm9qZWN0cyc7XG5pbXBvcnQgeyBJQ09OLCBDaGFuZ2VIb3Rzd2FwSW1wYWN0LCBDaGFuZ2VIb3Rzd2FwUmVzdWx0LCBIb3Rzd2FwT3BlcmF0aW9uLCBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIExpc3RTdGFja1Jlc291cmNlcyB9IGZyb20gJy4vaG90c3dhcC9jb21tb24nO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVFY3NTZXJ2aWNlQ2hhbmdlIH0gZnJvbSAnLi9ob3Rzd2FwL2Vjcy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuL2hvdHN3YXAvZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9sYW1iZGEtZnVuY3Rpb25zJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlIH0gZnJvbSAnLi9ob3Rzd2FwL3MzLWJ1Y2tldC1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9zdGVwZnVuY3Rpb25zLXN0YXRlLW1hY2hpbmVzJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsXG4gKiBzaG9ydC1jaXJjdWl0aW5nIENsb3VkRm9ybWF0aW9uIGlmIHBvc3NpYmxlLlxuICogSWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudFxuICogKGJlY2F1c2UgdGhlIENESyBTdGFjayBjb250YWlucyBjaGFuZ2VzIHRoYXQgY2Fubm90IGJlIGRlcGxveWVkIHdpdGhvdXQgQ2xvdWRGb3JtYXRpb24pLFxuICogcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUhvdHN3YXBEZXBsb3ltZW50KFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGFzc2V0UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLCBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4pOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIC8vIHJlc29sdmUgdGhlIGVudmlyb25tZW50LCBzbyB3ZSBjYW4gc3Vic3RpdHV0ZSB0aGluZ3MgbGlrZSBBV1M6OlJlZ2lvbiBpbiBDRk4gZXhwcmVzc2lvbnNcbiAgY29uc3QgcmVzb2x2ZWRFbnYgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2tBcnRpZmFjdC5lbnZpcm9ubWVudCk7XG4gIC8vIGNyZWF0ZSBhIG5ldyBTREsgdXNpbmcgdGhlIENMSSBjcmVkZW50aWFscywgYmVjYXVzZSB0aGUgZGVmYXVsdCBvbmUgd2lsbCBub3Qgd29yayBmb3IgbmV3LXN0eWxlIHN5bnRoZXNpcyAtXG4gIC8vIGl0IGFzc3VtZXMgdGhlIGJvb3RzdHJhcCBkZXBsb3kgUm9sZSwgd2hpY2ggZG9lc24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBMYW1iZGEgZnVuY3Rpb25zXG4gIGNvbnN0IHNkayA9IGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KHJlc29sdmVkRW52LCBNb2RlLkZvcldyaXRpbmcpO1xuICAvLyBUaGUgY3VycmVudCByZXNvdXJjZXMgb2YgdGhlIFN0YWNrLlxuICAvLyBXZSBuZWVkIHRoZW0gdG8gZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgbmFtZSBvZiBhIHJlc291cmNlIGluIGNhc2UgaXQgd2Fzbid0IHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAgLy8gV2UgZmV0Y2ggaXQgbGF6aWx5LCB0byBzYXZlIGEgc2VydmljZSBjYWxsLCBpbiBjYXNlIGFsbCBob3Rzd2FwcGVkIHJlc291cmNlcyBoYXZlIHRoZWlyIHBoeXNpY2FsIG5hbWVzIHNldC5cbiAgY29uc3QgbGlzdFN0YWNrUmVzb3VyY2VzID0gbmV3IExhenlMaXN0U3RhY2tSZXNvdXJjZXMoc2RrLCBzdGFja0FydGlmYWN0LnN0YWNrTmFtZSk7XG4gIGNvbnN0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUgPSBuZXcgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKHtcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIHBhcmFtZXRlcnM6IGFzc2V0UGFyYW1zLFxuICAgIGFjY291bnQ6IHJlc29sdmVkRW52LmFjY291bnQsXG4gICAgcmVnaW9uOiByZXNvbHZlZEVudi5yZWdpb24sXG4gICAgcGFydGl0aW9uOiAoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLnBhcnRpdGlvbixcbiAgICB1cmxTdWZmaXg6IHNkay5nZXRFbmRwb2ludFN1ZmZpeCxcbiAgICBsaXN0U3RhY2tSZXNvdXJjZXMsXG4gIH0pO1xuXG4gIGNvbnN0IGN1cnJlbnRUZW1wbGF0ZSA9IGF3YWl0IGNsb3VkRm9ybWF0aW9uU3RhY2sudGVtcGxhdGUoKTtcbiAgY29uc3Qgc3RhY2tDaGFuZ2VzID0gY2ZuX2RpZmYuZGlmZlRlbXBsYXRlKGN1cnJlbnRUZW1wbGF0ZSwgc3RhY2tBcnRpZmFjdC50ZW1wbGF0ZSk7XG4gIGNvbnN0IGhvdHN3YXBwYWJsZUNoYW5nZXMgPSBhd2FpdCBmaW5kQWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhzdGFja0NoYW5nZXMsIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpO1xuICBpZiAoIWhvdHN3YXBwYWJsZUNoYW5nZXMpIHtcbiAgICAvLyB0aGlzIG1lYW5zIHRoZXJlIHdlcmUgY2hhbmdlcyB0byB0aGUgdGVtcGxhdGUgdGhhdCBjYW5ub3QgYmUgc2hvcnQtY2lyY3VpdGVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIGFwcGx5IHRoZSBzaG9ydC1jaXJjdWl0YWJsZSBjaGFuZ2VzXG4gIGF3YWl0IGFwcGx5QWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhzZGssIGhvdHN3YXBwYWJsZUNoYW5nZXMpO1xuXG4gIHJldHVybiB7IG5vT3A6IGhvdHN3YXBwYWJsZUNoYW5nZXMubGVuZ3RoID09PSAwLCBzdGFja0FybjogY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja0lkLCBvdXRwdXRzOiBjbG91ZEZvcm1hdGlvblN0YWNrLm91dHB1dHMsIHN0YWNrQXJ0aWZhY3QgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZEFsbEhvdHN3YXBwYWJsZUNoYW5nZXMoXG4gIHN0YWNrQ2hhbmdlczogY2ZuX2RpZmYuVGVtcGxhdGVEaWZmLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPEhvdHN3YXBPcGVyYXRpb25bXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCByZXNvdXJjZURpZmZlcmVuY2VzID0gZ2V0U3RhY2tSZXNvdXJjZURpZmZlcmVuY2VzKHN0YWNrQ2hhbmdlcyk7XG5cbiAgbGV0IGZvdW5kTm9uSG90c3dhcHBhYmxlQ2hhbmdlID0gZmFsc2U7XG4gIGNvbnN0IHByb21pc2VzOiBBcnJheTxBcnJheTxQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+Pj4gPSBbXTtcbiAgLy8gZ2F0aGVyIHRoZSByZXN1bHRzIG9mIHRoZSBkZXRlY3RvciBmdW5jdGlvbnNcbiAgZm9yIChjb25zdCBbbG9naWNhbElkLCBjaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHJlc291cmNlRGlmZmVyZW5jZXMpKSB7XG4gICAgY29uc3QgcmVzb3VyY2VIb3Rzd2FwRXZhbHVhdGlvbiA9IGlzQ2FuZGlkYXRlRm9ySG90c3dhcHBpbmcoY2hhbmdlKTtcblxuICAgIGlmIChyZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVCkge1xuICAgICAgZm91bmROb25Ib3Rzd2FwcGFibGVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VIb3Rzd2FwRXZhbHVhdGlvbiA9PT0gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UKSB7XG4gICAgICAvLyBlbXB0eSAnaWYnIGp1c3QgZm9yIGZsb3ctYXdhcmUgdHlwaW5nIHRvIGtpY2sgaW4uLi5cbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZXMucHVzaChbXG4gICAgICAgIGlzSG90c3dhcHBhYmxlTGFtYmRhRnVuY3Rpb25DaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVTdGF0ZU1hY2hpbmVDaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVFY3NTZXJ2aWNlQ2hhbmdlKGxvZ2ljYWxJZCwgcmVzb3VyY2VIb3Rzd2FwRXZhbHVhdGlvbiwgZXZhbHVhdGVDZm5UZW1wbGF0ZSksXG4gICAgICAgIGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlKGxvZ2ljYWxJZCwgcmVzb3VyY2VIb3Rzd2FwRXZhbHVhdGlvbiwgZXZhbHVhdGVDZm5UZW1wbGF0ZSksXG4gICAgICAgIGlzSG90c3dhcHBhYmxlQ29kZUJ1aWxkUHJvamVjdENoYW5nZShsb2dpY2FsSWQsIHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24sIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpLFxuICAgICAgXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVzb2x2ZSBhbGwgZGV0ZWN0b3IgcmVzdWx0c1xuICBjb25zdCBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0czogQXJyYXk8QXJyYXk8Q2hhbmdlSG90c3dhcFJlc3VsdD4+ID0gW107XG4gIGZvciAoY29uc3QgZGV0ZWN0b3JSZXN1bHRQcm9taXNlcyBvZiBwcm9taXNlcykge1xuICAgIGNvbnN0IGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZGV0ZWN0b3JSZXN1bHRQcm9taXNlcyk7XG4gICAgY2hhbmdlc0RldGVjdGlvblJlc3VsdHMucHVzaChob3Rzd2FwRGV0ZWN0aW9uUmVzdWx0cyk7XG4gIH1cblxuICBjb25zdCBob3Rzd2FwcGFibGVSZXNvdXJjZXMgPSBuZXcgQXJyYXk8SG90c3dhcE9wZXJhdGlvbj4oKTtcbiAgZm9yIChjb25zdCBob3Rzd2FwRGV0ZWN0aW9uUmVzdWx0cyBvZiBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0cykge1xuICAgIGNvbnN0IHBlckNoYW5nZUhvdHN3YXBwYWJsZVJlc291cmNlcyA9IG5ldyBBcnJheTxIb3Rzd2FwT3BlcmF0aW9uPigpO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgaG90c3dhcERldGVjdGlvblJlc3VsdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBwZXJDaGFuZ2VIb3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGZvdW5kIGFueSBob3Rzd2FwcGFibGUgY2hhbmdlcywgcmV0dXJuIG5vd1xuICAgIGlmIChwZXJDaGFuZ2VIb3Rzd2FwcGFibGVSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgaG90c3dhcHBhYmxlUmVzb3VyY2VzLnB1c2goLi4ucGVyQ2hhbmdlSG90c3dhcHBhYmxlUmVzb3VyY2VzKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIG5vIGhvdHN3YXBwYWJsZSBjaGFuZ2VzIGZvdW5kLCBzbyBhdCBsZWFzdCBvbmUgSVJSRUxFVkFOVCBtZWFucyB3ZSBjYW4gaWdub3JlIHRoaXMgY2hhbmdlO1xuICAgIC8vIG90aGVyd2lzZSwgYWxsIGFuc3dlcnMgYXJlIFJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVCwgc28gdGhpcyBtZWFucyB3ZSBjYW4ndCBob3Rzd2FwIHRoaXMgY2hhbmdlLFxuICAgIC8vIGFuZCBoYXZlIHRvIGRvIGEgZnVsbCBkZXBsb3ltZW50IGluc3RlYWRcbiAgICBpZiAoIWhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzLnNvbWUoaGRyID0+IGhkciA9PT0gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UKSkge1xuICAgICAgZm91bmROb25Ib3Rzd2FwcGFibGVDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3VuZE5vbkhvdHN3YXBwYWJsZUNoYW5nZSA/IHVuZGVmaW5lZCA6IGhvdHN3YXBwYWJsZVJlc291cmNlcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBjaGFuZ2VzIHRvIHJlc291cmNlcyBpbiB0aGUgZ2l2ZW4gU3RhY2suXG4gKlxuICogQHBhcmFtIHN0YWNrQ2hhbmdlcyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgY2hhbmdlcyB0byBhIGdpdmVuIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIGdldFN0YWNrUmVzb3VyY2VEaWZmZXJlbmNlcyhzdGFja0NoYW5nZXM6IGNmbl9kaWZmLlRlbXBsYXRlRGlmZik6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlIH0ge1xuICAvLyB3ZSBuZWVkIHRvIGNvbGxhcHNlIGxvZ2ljYWwgSUQgcmVuYW1lIGNoYW5nZXMgaW50byBvbmUgY2hhbmdlLFxuICAvLyBhcyB0aGV5IGFyZSByZXByZXNlbnRlZCBpbiBzdGFja0NoYW5nZXMgYXMgYSBwYWlyIG9mIHR3byBjaGFuZ2VzOiBvbmUgYWRkaXRpb24gYW5kIG9uZSByZW1vdmFsXG4gIGNvbnN0IGFsbFJlc291cmNlQ2hhbmdlczogeyBbbG9nSWQ6IHN0cmluZ106IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSB9ID0gc3RhY2tDaGFuZ2VzLnJlc291cmNlcy5jaGFuZ2VzO1xuICBjb25zdCBhbGxSZW1vdmFsQ2hhbmdlcyA9IGZpbHRlckRpY3QoYWxsUmVzb3VyY2VDaGFuZ2VzLCByZXNDaGFuZ2UgPT4gcmVzQ2hhbmdlLmlzUmVtb3ZhbCk7XG4gIGNvbnN0IGFsbE5vblJlbW92YWxDaGFuZ2VzID0gZmlsdGVyRGljdChhbGxSZXNvdXJjZUNoYW5nZXMsIHJlc0NoYW5nZSA9PiAhcmVzQ2hhbmdlLmlzUmVtb3ZhbCk7XG4gIGZvciAoY29uc3QgW2xvZ0lkLCBub25SZW1vdmFsQ2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyhhbGxOb25SZW1vdmFsQ2hhbmdlcykpIHtcbiAgICBpZiAobm9uUmVtb3ZhbENoYW5nZS5pc0FkZGl0aW9uKSB7XG4gICAgICBjb25zdCBhZGRDaGFuZ2UgPSBub25SZW1vdmFsQ2hhbmdlO1xuICAgICAgLy8gc2VhcmNoIGZvciBhbiBpZGVudGljYWwgcmVtb3ZhbCBjaGFuZ2VcbiAgICAgIGNvbnN0IGlkZW50aWNhbFJlbW92YWxDaGFuZ2UgPSBPYmplY3QuZW50cmllcyhhbGxSZW1vdmFsQ2hhbmdlcykuZmluZCgoW18sIHJlbUNoYW5nZV0pID0+IHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZXNBcmVGb3JTYW1lUmVzb3VyY2UocmVtQ2hhbmdlLCBhZGRDaGFuZ2UpO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiB3ZSBmb3VuZCBvbmUsIHRoZW4gdGhpcyBtZWFucyB0aGlzIGlzIGEgcmVuYW1lIGNoYW5nZVxuICAgICAgaWYgKGlkZW50aWNhbFJlbW92YWxDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgW3JlbW92ZWRMb2dJZCwgcmVtb3ZlZFJlc291cmNlQ2hhbmdlXSA9IGlkZW50aWNhbFJlbW92YWxDaGFuZ2U7XG4gICAgICAgIGFsbE5vblJlbW92YWxDaGFuZ2VzW2xvZ0lkXSA9IG1ha2VSZW5hbWVEaWZmZXJlbmNlKHJlbW92ZWRSZXNvdXJjZUNoYW5nZSwgYWRkQ2hhbmdlKTtcbiAgICAgICAgLy8gZGVsZXRlIHRoZSByZW1vdmFsIGNoYW5nZSB0aGF0IGZvcm1zIHRoZSByZW5hbWUgcGFpclxuICAgICAgICBkZWxldGUgYWxsUmVtb3ZhbENoYW5nZXNbcmVtb3ZlZExvZ0lkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBhcmUgYWxsIG9mIHRoZSByZW1haW5pbmcgcmVtb3ZhbCBjaGFuZ2VzLFxuICAvLyBwbHVzIGFsbCBvZiB0aGUgbm9uLXJlbW92YWwgY2hhbmdlc1xuICAvLyAod2Ugc2F2ZWQgdGhlIHJlbmFtZSBjaGFuZ2VzIGluIHRoYXQgb2JqZWN0IGFscmVhZHkpXG4gIHJldHVybiB7XG4gICAgLi4uYWxsUmVtb3ZhbENoYW5nZXMsXG4gICAgLi4uYWxsTm9uUmVtb3ZhbENoYW5nZXMsXG4gIH07XG59XG5cbi8qKiBGaWx0ZXJzIGFuIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHJldHVybnMgJ3RydWUnIGZvciB0aGUgZ2l2ZW4gdmFsdWUgaW4gdGhlIG9iamVjdC4gKi9cbmZ1bmN0aW9uIGZpbHRlckRpY3Q8VD4oZGljdDogeyBba2V5OiBzdHJpbmddOiBUIH0sIGZ1bmM6ICh0OiBUKSA9PiBib29sZWFuKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGljdCkucmVkdWNlKChhY2MsIFtrZXksIHRdKSA9PiB7XG4gICAgaWYgKGZ1bmModCkpIHtcbiAgICAgIGFjY1trZXldID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBUIH0pO1xufVxuXG4vKiogUmV0dXJucyAndHJ1ZScgaWYgYSBwYWlyIG9mIGNoYW5nZXMgaXMgZm9yIHRoZSBzYW1lIHJlc291cmNlLiAqL1xuZnVuY3Rpb24gY2hhbmdlc0FyZUZvclNhbWVSZXNvdXJjZShvbGRDaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSwgbmV3Q2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9sZENoYW5nZS5vbGRSZXNvdXJjZVR5cGUgPT09IG5ld0NoYW5nZS5uZXdSZXNvdXJjZVR5cGUgJiZcbiAgICAgIC8vIHRoaXMgaXNuJ3QgZ3JlYXQsIGJ1dCBJIGRvbid0IHdhbnQgdG8gYnJpbmcgaW4gc29tZXRoaW5nIGxpa2UgdW5kZXJzY29yZSBqdXN0IGZvciB0aGlzIGNvbXBhcmlzb25cbiAgICAgIEpTT04uc3RyaW5naWZ5KG9sZENoYW5nZS5vbGRQcm9wZXJ0aWVzKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3Q2hhbmdlLm5ld1Byb3BlcnRpZXMpO1xufVxuXG5mdW5jdGlvbiBtYWtlUmVuYW1lRGlmZmVyZW5jZShcbiAgcmVtQ2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4gIGFkZENoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlLFxuKTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlIHtcbiAgcmV0dXJuIG5ldyBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UoXG4gICAgLy8gd2UgaGF2ZSB0byBmaWxsIGluIHRoZSBvbGQgdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoaXMgd2lsbCBiZSBjbGFzc2lmaWVkIGFzIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2VcbiAgICByZW1DaGFuZ2Uub2xkVmFsdWUsXG4gICAgYWRkQ2hhbmdlLm5ld1ZhbHVlLFxuICAgIHtcbiAgICAgIHJlc291cmNlVHlwZToge1xuICAgICAgICBvbGRUeXBlOiByZW1DaGFuZ2Uub2xkUmVzb3VyY2VUeXBlLFxuICAgICAgICBuZXdUeXBlOiBhZGRDaGFuZ2UubmV3UmVzb3VyY2VUeXBlLFxuICAgICAgfSxcbiAgICAgIHByb3BlcnR5RGlmZnM6IChhZGRDaGFuZ2UgYXMgYW55KS5wcm9wZXJ0eURpZmZzLFxuICAgICAgb3RoZXJEaWZmczogKGFkZENoYW5nZSBhcyBhbnkpLm90aGVyRGlmZnMsXG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiByZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVGAgaWYgYSByZXNvdXJjZSB3YXMgZGVsZXRlZCwgb3IgYSBjaGFuZ2UgdGhhdCB3ZSBjYW5ub3Qgc2hvcnQtY2lyY3VpdCBvY2N1cmVkLlxuICogUmV0dXJucyBgQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UYCBpZiBhIGNoYW5nZSB0aGF0IGRvZXMgbm90IGltcGFjdCBzaG9ydGNpcmN1aXRpbmcgb2NjdXJlZCwgc3VjaCBhcyBhIG1ldGFkYXRhIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gaXNDYW5kaWRhdGVGb3JIb3Rzd2FwcGluZyhjaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSk6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSB8IENoYW5nZUhvdHN3YXBJbXBhY3Qge1xuICAvLyBhIHJlc291cmNlIGhhcyBiZWVuIHJlbW92ZWQgT1IgYSByZXNvdXJjZSBoYXMgYmVlbiBhZGRlZDsgd2UgY2FuJ3Qgc2hvcnQtY2lyY3VpdCB0aGF0IGNoYW5nZVxuICBpZiAoIWNoYW5nZS5uZXdWYWx1ZSB8fCAhY2hhbmdlLm9sZFZhbHVlKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgLy8gSWdub3JlIE1ldGFkYXRhIGNoYW5nZXNcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5ld1ZhbHVlOiBjaGFuZ2UubmV3VmFsdWUsXG4gICAgcHJvcGVydHlVcGRhdGVzOiBjaGFuZ2UucHJvcGVydHlVcGRhdGVzLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUFsbEhvdHN3YXBwYWJsZUNoYW5nZXMoXG4gIHNkazogSVNESywgaG90c3dhcHBhYmxlQ2hhbmdlczogSG90c3dhcE9wZXJhdGlvbltdLFxuKTogUHJvbWlzZTx2b2lkW10+IHtcbiAgcHJpbnQoYFxcbiR7SUNPTn0gaG90c3dhcHBpbmcgcmVzb3VyY2VzOmApO1xuICByZXR1cm4gUHJvbWlzZS5hbGwoaG90c3dhcHBhYmxlQ2hhbmdlcy5tYXAoaG90c3dhcE9wZXJhdGlvbiA9PiB7XG4gICAgcmV0dXJuIGFwcGx5SG90c3dhcHBhYmxlQ2hhbmdlKHNkaywgaG90c3dhcE9wZXJhdGlvbik7XG4gIH0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlIb3Rzd2FwcGFibGVDaGFuZ2Uoc2RrOiBJU0RLLCBob3Rzd2FwT3BlcmF0aW9uOiBIb3Rzd2FwT3BlcmF0aW9uKTogUHJvbWlzZTxhbnk+IHtcbiAgLy8gbm90ZSB0aGUgdHlwZSBvZiBzZXJ2aWNlIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBob3Rzd2FwcGVkIGluIHRoZSBVc2VyLUFnZW50XG4gIGNvbnN0IGN1c3RvbVVzZXJBZ2VudCA9IGBjZGstaG90c3dhcC9zdWNjZXNzLSR7aG90c3dhcE9wZXJhdGlvbi5zZXJ2aWNlfWA7XG4gIHNkay5hcHBlbmRDdXN0b21Vc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50KTtcblxuICB0cnkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBob3Rzd2FwT3BlcmF0aW9uLnJlc291cmNlTmFtZXMpIHtcbiAgICAgIHByaW50KGAgICAke0lDT059ICVzYCwgY29sb3JzLmJvbGQobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaG90c3dhcE9wZXJhdGlvbi5hcHBseShzZGspO1xuICB9IGZpbmFsbHkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBob3Rzd2FwT3BlcmF0aW9uLnJlc291cmNlTmFtZXMpIHtcbiAgICAgIHByaW50KGAke0lDT059ICVzICVzYCwgY29sb3JzLmJvbGQobmFtZSksIGNvbG9ycy5ncmVlbignaG90c3dhcHBlZCEnKSk7XG4gICAgfVxuICAgIHNkay5yZW1vdmVDdXN0b21Vc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50KTtcbiAgfVxufVxuXG5jbGFzcyBMYXp5TGlzdFN0YWNrUmVzb3VyY2VzIGltcGxlbWVudHMgTGlzdFN0YWNrUmVzb3VyY2VzIHtcbiAgcHJpdmF0ZSBzdGFja1Jlc291cmNlczogQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHNkazogSVNESywgcHJpdmF0ZSByZWFkb25seSBzdGFja05hbWU6IHN0cmluZykge1xuICB9XG5cbiAgYXN5bmMgbGlzdFN0YWNrUmVzb3VyY2VzKCk6IFByb21pc2U8Q2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXT4ge1xuICAgIGlmICh0aGlzLnN0YWNrUmVzb3VyY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3RhY2tSZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmdldFN0YWNrUmVzb3VyY2VzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YWNrUmVzb3VyY2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTdGFja1Jlc291cmNlcygpOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+IHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8Q2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnk+KCk7XG4gICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNkay5jbG91ZEZvcm1hdGlvbigpLmxpc3RTdGFja1Jlc291cmNlcyh7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgfSkucHJvbWlzZSgpO1xuICAgICAgcmV0LnB1c2goLi4uKHN0YWNrUmVzb3VyY2VzUmVzcG9uc2UuU3RhY2tSZXNvdXJjZVN1bW1hcmllcyA/PyBbXSkpO1xuICAgICAgbmV4dFRva2VuID0gc3RhY2tSZXNvdXJjZXNSZXNwb25zZS5OZXh0VG9rZW47XG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4iXX0=
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAtZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBQXlEO0FBRXpELCtCQUErQjtBQUMvQix3Q0FBbUM7QUFDbkMseUNBQXFEO0FBRXJELHlGQUE0RztBQUM1Ryx1RUFBcUY7QUFDckYsNkNBQWlJO0FBQ2pJLHlEQUF3RTtBQUN4RSxpRUFBZ0Y7QUFDaEYsMkVBQXlGO0FBQ3pGLHlGQUEwRjtBQUcxRjs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFdBQXdCLEVBQUUsV0FBc0MsRUFDaEUsbUJBQXdDLEVBQUUsYUFBZ0Q7SUFFMUYsMkZBQTJGO0lBQzNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRiw4R0FBOEc7SUFDOUcsa0dBQWtHO0lBQ2xHLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxlQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDakYsc0NBQXNDO0lBQ3RDLHNHQUFzRztJQUN0Ryw4R0FBOEc7SUFDOUcsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLHlEQUFzQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGlFQUE4QixDQUFDO1FBQzdELGFBQWE7UUFDYixVQUFVLEVBQUUsV0FBVztRQUN2QixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDNUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLFNBQVMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsU0FBUztRQUNqRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVB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QWdCLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxHQUFTLEVBQUUsZ0JBQWtDO0lBQ2xGLDhFQUE4RTtJQUM5RSxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUUsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTNDLElBQUk7UUFDRixLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNqRCxlQUFLLENBQUMsTUFBTSxhQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFDO1lBQVM7UUFDUixLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNqRCxlQUFLLENBQUMsR0FBRyxhQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN0RTtRQUNELEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUM1QztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZm5fZGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBwcmludCB9IGZyb20gJy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgSVNESywgTW9kZSwgU2RrUHJvdmlkZXIgfSBmcm9tICcuL2F3cy1hdXRoJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLCBMYXp5TGlzdFN0YWNrUmVzb3VyY2VzIH0gZnJvbSAnLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZUNvZGVCdWlsZFByb2plY3RDaGFuZ2UgfSBmcm9tICcuL2hvdHN3YXAvY29kZS1idWlsZC1wcm9qZWN0cyc7XG5pbXBvcnQgeyBJQ09OLCBDaGFuZ2VIb3Rzd2FwSW1wYWN0LCBDaGFuZ2VIb3Rzd2FwUmVzdWx0LCBIb3Rzd2FwT3BlcmF0aW9uLCBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUgfSBmcm9tICcuL2hvdHN3YXAvY29tbW9uJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlRWNzU2VydmljZUNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9lY3Mtc2VydmljZXMnO1xuaW1wb3J0IHsgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9sYW1iZGEtZnVuY3Rpb25zJztcbmltcG9ydCB7IGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlIH0gZnJvbSAnLi9ob3Rzd2FwL3MzLWJ1Y2tldC1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZSB9IGZyb20gJy4vaG90c3dhcC9zdGVwZnVuY3Rpb25zLXN0YXRlLW1hY2hpbmVzJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm0gYSBob3Rzd2FwIGRlcGxveW1lbnQsXG4gKiBzaG9ydC1jaXJjdWl0aW5nIENsb3VkRm9ybWF0aW9uIGlmIHBvc3NpYmxlLlxuICogSWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvcnQtY2lyY3VpdCB0aGUgZGVwbG95bWVudFxuICogKGJlY2F1c2UgdGhlIENESyBTdGFjayBjb250YWlucyBjaGFuZ2VzIHRoYXQgY2Fubm90IGJlIGRlcGxveWVkIHdpdGhvdXQgQ2xvdWRGb3JtYXRpb24pLFxuICogcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUhvdHN3YXBEZXBsb3ltZW50KFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGFzc2V0UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICBjbG91ZEZvcm1hdGlvblN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrLCBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4pOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIC8vIHJlc29sdmUgdGhlIGVudmlyb25tZW50LCBzbyB3ZSBjYW4gc3Vic3RpdHV0ZSB0aGluZ3MgbGlrZSBBV1M6OlJlZ2lvbiBpbiBDRk4gZXhwcmVzc2lvbnNcbiAgY29uc3QgcmVzb2x2ZWRFbnYgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2tBcnRpZmFjdC5lbnZpcm9ubWVudCk7XG4gIC8vIGNyZWF0ZSBhIG5ldyBTREsgdXNpbmcgdGhlIENMSSBjcmVkZW50aWFscywgYmVjYXVzZSB0aGUgZGVmYXVsdCBvbmUgd2lsbCBub3Qgd29yayBmb3IgbmV3LXN0eWxlIHN5bnRoZXNpcyAtXG4gIC8vIGl0IGFzc3VtZXMgdGhlIGJvb3RzdHJhcCBkZXBsb3kgUm9sZSwgd2hpY2ggZG9lc24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSBMYW1iZGEgZnVuY3Rpb25zXG4gIGNvbnN0IHNkayA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudiwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuICAvLyBUaGUgY3VycmVudCByZXNvdXJjZXMgb2YgdGhlIFN0YWNrLlxuICAvLyBXZSBuZWVkIHRoZW0gdG8gZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgbmFtZSBvZiBhIHJlc291cmNlIGluIGNhc2UgaXQgd2Fzbid0IHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAgLy8gV2UgZmV0Y2ggaXQgbGF6aWx5LCB0byBzYXZlIGEgc2VydmljZSBjYWxsLCBpbiBjYXNlIGFsbCBob3Rzd2FwcGVkIHJlc291cmNlcyBoYXZlIHRoZWlyIHBoeXNpY2FsIG5hbWVzIHNldC5cbiAgY29uc3QgbGlzdFN0YWNrUmVzb3VyY2VzID0gbmV3IExhenlMaXN0U3RhY2tSZXNvdXJjZXMoc2RrLCBzdGFja0FydGlmYWN0LnN0YWNrTmFtZSk7XG4gIGNvbnN0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUgPSBuZXcgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKHtcbiAgICBzdGFja0FydGlmYWN0LFxuICAgIHBhcmFtZXRlcnM6IGFzc2V0UGFyYW1zLFxuICAgIGFjY291bnQ6IHJlc29sdmVkRW52LmFjY291bnQsXG4gICAgcmVnaW9uOiByZXNvbHZlZEVudi5yZWdpb24sXG4gICAgcGFydGl0aW9uOiAoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLnBhcnRpdGlvbixcbiAgICB1cmxTdWZmaXg6IChyZWdpb24pID0+IHNkay5nZXRFbmRwb2ludFN1ZmZpeChyZWdpb24pLFxuICAgIGxpc3RTdGFja1Jlc291cmNlcyxcbiAgfSk7XG5cbiAgY29uc3QgY3VycmVudFRlbXBsYXRlID0gYXdhaXQgY2xvdWRGb3JtYXRpb25TdGFjay50ZW1wbGF0ZSgpO1xuICBjb25zdCBzdGFja0NoYW5nZXMgPSBjZm5fZGlmZi5kaWZmVGVtcGxhdGUoY3VycmVudFRlbXBsYXRlLCBzdGFja0FydGlmYWN0LnRlbXBsYXRlKTtcbiAgY29uc3QgaG90c3dhcHBhYmxlQ2hhbmdlcyA9IGF3YWl0IGZpbmRBbGxIb3Rzd2FwcGFibGVDaGFuZ2VzKHN0YWNrQ2hhbmdlcywgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG4gIGlmICghaG90c3dhcHBhYmxlQ2hhbmdlcykge1xuICAgIC8vIHRoaXMgbWVhbnMgdGhlcmUgd2VyZSBjaGFuZ2VzIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IGNhbm5vdCBiZSBzaG9ydC1jaXJjdWl0ZWRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gYXBwbHkgdGhlIHNob3J0LWNpcmN1aXRhYmxlIGNoYW5nZXNcbiAgYXdhaXQgYXBwbHlBbGxIb3Rzd2FwcGFibGVDaGFuZ2VzKHNkaywgaG90c3dhcHBhYmxlQ2hhbmdlcyk7XG5cbiAgcmV0dXJuIHsgbm9PcDogaG90c3dhcHBhYmxlQ2hhbmdlcy5sZW5ndGggPT09IDAsIHN0YWNrQXJuOiBjbG91ZEZvcm1hdGlvblN0YWNrLnN0YWNrSWQsIG91dHB1dHM6IGNsb3VkRm9ybWF0aW9uU3RhY2sub3V0cHV0cyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kQWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhcbiAgc3RhY2tDaGFuZ2VzOiBjZm5fZGlmZi5UZW1wbGF0ZURpZmYsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8SG90c3dhcE9wZXJhdGlvbltdIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlc291cmNlRGlmZmVyZW5jZXMgPSBnZXRTdGFja1Jlc291cmNlRGlmZmVyZW5jZXMoc3RhY2tDaGFuZ2VzKTtcblxuICBsZXQgZm91bmROb25Ib3Rzd2FwcGFibGVDaGFuZ2UgPSBmYWxzZTtcbiAgY29uc3QgcHJvbWlzZXM6IEFycmF5PEFycmF5PFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4+PiA9IFtdO1xuICAvLyBnYXRoZXIgdGhlIHJlc3VsdHMgb2YgdGhlIGRldGVjdG9yIGZ1bmN0aW9uc1xuICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzb3VyY2VEaWZmZXJlbmNlcykpIHtcbiAgICBjb25zdCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uID0gaXNDYW5kaWRhdGVGb3JIb3Rzd2FwcGluZyhjaGFuZ2UpO1xuXG4gICAgaWYgKHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24gPT09IENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UKSB7XG4gICAgICBmb3VuZE5vbkhvdHN3YXBwYWJsZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQpIHtcbiAgICAgIC8vIGVtcHR5ICdpZicganVzdCBmb3IgZmxvdy1hd2FyZSB0eXBpbmcgdG8ga2ljayBpbi4uLlxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlcy5wdXNoKFtcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShsb2dpY2FsSWQsIHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24sIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpLFxuICAgICAgICBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZShsb2dpY2FsSWQsIHJlc291cmNlSG90c3dhcEV2YWx1YXRpb24sIGV2YWx1YXRlQ2ZuVGVtcGxhdGUpLFxuICAgICAgICBpc0hvdHN3YXBwYWJsZUVjc1NlcnZpY2VDaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVTM0J1Y2tldERlcGxveW1lbnRDaGFuZ2UobG9naWNhbElkLCByZXNvdXJjZUhvdHN3YXBFdmFsdWF0aW9uLCBldmFsdWF0ZUNmblRlbXBsYXRlKSxcbiAgICAgICAgaXNIb3Rzd2FwcGFibGVDb2RlQnVpbGRQcm9qZWN0Q2hhbmdlKGxvZ2ljYWxJZCwgcmVzb3VyY2VIb3Rzd2FwRXZhbHVhdGlvbiwgZXZhbHVhdGVDZm5UZW1wbGF0ZSksXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXNvbHZlIGFsbCBkZXRlY3RvciByZXN1bHRzXG4gIGNvbnN0IGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzOiBBcnJheTxBcnJheTxDaGFuZ2VIb3Rzd2FwUmVzdWx0Pj4gPSBbXTtcbiAgZm9yIChjb25zdCBkZXRlY3RvclJlc3VsdFByb21pc2VzIG9mIHByb21pc2VzKSB7XG4gICAgY29uc3QgaG90c3dhcERldGVjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChkZXRlY3RvclJlc3VsdFByb21pc2VzKTtcbiAgICBjaGFuZ2VzRGV0ZWN0aW9uUmVzdWx0cy5wdXNoKGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzKTtcbiAgfVxuXG4gIGNvbnN0IGhvdHN3YXBwYWJsZVJlc291cmNlcyA9IG5ldyBBcnJheTxIb3Rzd2FwT3BlcmF0aW9uPigpO1xuICBmb3IgKGNvbnN0IGhvdHN3YXBEZXRlY3Rpb25SZXN1bHRzIG9mIGNoYW5nZXNEZXRlY3Rpb25SZXN1bHRzKSB7XG4gICAgY29uc3QgcGVyQ2hhbmdlSG90c3dhcHBhYmxlUmVzb3VyY2VzID0gbmV3IEFycmF5PEhvdHN3YXBPcGVyYXRpb24+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBob3Rzd2FwRGV0ZWN0aW9uUmVzdWx0cykge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBlckNoYW5nZUhvdHN3YXBwYWJsZVJlc291cmNlcy5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZm91bmQgYW55IGhvdHN3YXBwYWJsZSBjaGFuZ2VzLCByZXR1cm4gbm93XG4gICAgaWYgKHBlckNoYW5nZUhvdHN3YXBwYWJsZVJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBob3Rzd2FwcGFibGVSZXNvdXJjZXMucHVzaCguLi5wZXJDaGFuZ2VIb3Rzd2FwcGFibGVSZXNvdXJjZXMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbm8gaG90c3dhcHBhYmxlIGNoYW5nZXMgZm91bmQsIHNvIGF0IGxlYXN0IG9uZSBJUlJFTEVWQU5UIG1lYW5zIHdlIGNhbiBpZ25vcmUgdGhpcyBjaGFuZ2U7XG4gICAgLy8gb3RoZXJ3aXNlLCBhbGwgYW5zd2VycyBhcmUgUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5ULCBzbyB0aGlzIG1lYW5zIHdlIGNhbid0IGhvdHN3YXAgdGhpcyBjaGFuZ2UsXG4gICAgLy8gYW5kIGhhdmUgdG8gZG8gYSBmdWxsIGRlcGxveW1lbnQgaW5zdGVhZFxuICAgIGlmICghaG90c3dhcERldGVjdGlvblJlc3VsdHMuc29tZShoZHIgPT4gaGRyID09PSBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQpKSB7XG4gICAgICBmb3VuZE5vbkhvdHN3YXBwYWJsZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvdW5kTm9uSG90c3dhcHBhYmxlQ2hhbmdlID8gdW5kZWZpbmVkIDogaG90c3dhcHBhYmxlUmVzb3VyY2VzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNoYW5nZXMgdG8gcmVzb3VyY2VzIGluIHRoZSBnaXZlbiBTdGFjay5cbiAqXG4gKiBAcGFyYW0gc3RhY2tDaGFuZ2VzIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCBjaGFuZ2VzIHRvIGEgZ2l2ZW4gU3RhY2tcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhY2tSZXNvdXJjZURpZmZlcmVuY2VzKHN0YWNrQ2hhbmdlczogY2ZuX2RpZmYuVGVtcGxhdGVEaWZmKTogeyBbbG9naWNhbElkOiBzdHJpbmddOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UgfSB7XG4gIC8vIHdlIG5lZWQgdG8gY29sbGFwc2UgbG9naWNhbCBJRCByZW5hbWUgY2hhbmdlcyBpbnRvIG9uZSBjaGFuZ2UsXG4gIC8vIGFzIHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIHN0YWNrQ2hhbmdlcyBhcyBhIHBhaXIgb2YgdHdvIGNoYW5nZXM6IG9uZSBhZGRpdGlvbiBhbmQgb25lIHJlbW92YWxcbiAgY29uc3QgYWxsUmVzb3VyY2VDaGFuZ2VzOiB7IFtsb2dJZDogc3RyaW5nXTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlIH0gPSBzdGFja0NoYW5nZXMucmVzb3VyY2VzLmNoYW5nZXM7XG4gIGNvbnN0IGFsbFJlbW92YWxDaGFuZ2VzID0gZmlsdGVyRGljdChhbGxSZXNvdXJjZUNoYW5nZXMsIHJlc0NoYW5nZSA9PiByZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgY29uc3QgYWxsTm9uUmVtb3ZhbENoYW5nZXMgPSBmaWx0ZXJEaWN0KGFsbFJlc291cmNlQ2hhbmdlcywgcmVzQ2hhbmdlID0+ICFyZXNDaGFuZ2UuaXNSZW1vdmFsKTtcbiAgZm9yIChjb25zdCBbbG9nSWQsIG5vblJlbW92YWxDaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGFsbE5vblJlbW92YWxDaGFuZ2VzKSkge1xuICAgIGlmIChub25SZW1vdmFsQ2hhbmdlLmlzQWRkaXRpb24pIHtcbiAgICAgIGNvbnN0IGFkZENoYW5nZSA9IG5vblJlbW92YWxDaGFuZ2U7XG4gICAgICAvLyBzZWFyY2ggZm9yIGFuIGlkZW50aWNhbCByZW1vdmFsIGNoYW5nZVxuICAgICAgY29uc3QgaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSA9IE9iamVjdC5lbnRyaWVzKGFsbFJlbW92YWxDaGFuZ2VzKS5maW5kKChbXywgcmVtQ2hhbmdlXSkgPT4ge1xuICAgICAgICByZXR1cm4gY2hhbmdlc0FyZUZvclNhbWVSZXNvdXJjZShyZW1DaGFuZ2UsIGFkZENoYW5nZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHdlIGZvdW5kIG9uZSwgdGhlbiB0aGlzIG1lYW5zIHRoaXMgaXMgYSByZW5hbWUgY2hhbmdlXG4gICAgICBpZiAoaWRlbnRpY2FsUmVtb3ZhbENoYW5nZSkge1xuICAgICAgICBjb25zdCBbcmVtb3ZlZExvZ0lkLCByZW1vdmVkUmVzb3VyY2VDaGFuZ2VdID0gaWRlbnRpY2FsUmVtb3ZhbENoYW5nZTtcbiAgICAgICAgYWxsTm9uUmVtb3ZhbENoYW5nZXNbbG9nSWRdID0gbWFrZVJlbmFtZURpZmZlcmVuY2UocmVtb3ZlZFJlc291cmNlQ2hhbmdlLCBhZGRDaGFuZ2UpO1xuICAgICAgICAvLyBkZWxldGUgdGhlIHJlbW92YWwgY2hhbmdlIHRoYXQgZm9ybXMgdGhlIHJlbmFtZSBwYWlyXG4gICAgICAgIGRlbGV0ZSBhbGxSZW1vdmFsQ2hhbmdlc1tyZW1vdmVkTG9nSWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyB0aGUgZmluYWwgcmVzdWx0IGFyZSBhbGwgb2YgdGhlIHJlbWFpbmluZyByZW1vdmFsIGNoYW5nZXMsXG4gIC8vIHBsdXMgYWxsIG9mIHRoZSBub24tcmVtb3ZhbCBjaGFuZ2VzXG4gIC8vICh3ZSBzYXZlZCB0aGUgcmVuYW1lIGNoYW5nZXMgaW4gdGhhdCBvYmplY3QgYWxyZWFkeSlcbiAgcmV0dXJuIHtcbiAgICAuLi5hbGxSZW1vdmFsQ2hhbmdlcyxcbiAgICAuLi5hbGxOb25SZW1vdmFsQ2hhbmdlcyxcbiAgfTtcbn1cblxuLyoqIEZpbHRlcnMgYW4gb2JqZWN0IHdpdGggc3RyaW5nIGtleXMgYmFzZWQgb24gd2hldGhlciB0aGUgY2FsbGJhY2sgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBnaXZlbiB2YWx1ZSBpbiB0aGUgb2JqZWN0LiAqL1xuZnVuY3Rpb24gZmlsdGVyRGljdDxUPihkaWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgZnVuYzogKHQ6IFQpID0+IGJvb2xlYW4pOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkaWN0KS5yZWR1Y2UoKGFjYywgW2tleSwgdF0pID0+IHtcbiAgICBpZiAoZnVuYyh0KSkge1xuICAgICAgYWNjW2tleV0gPSB0O1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyB7IFtrZXk6IHN0cmluZ106IFQgfSk7XG59XG5cbi8qKiBSZXR1cm5zICd0cnVlJyBpZiBhIHBhaXIgb2YgY2hhbmdlcyBpcyBmb3IgdGhlIHNhbWUgcmVzb3VyY2UuICovXG5mdW5jdGlvbiBjaGFuZ2VzQXJlRm9yU2FtZVJlc291cmNlKG9sZENoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlLCBuZXdDaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2xkQ2hhbmdlLm9sZFJlc291cmNlVHlwZSA9PT0gbmV3Q2hhbmdlLm5ld1Jlc291cmNlVHlwZSAmJlxuICAgICAgLy8gdGhpcyBpc24ndCBncmVhdCwgYnV0IEkgZG9uJ3Qgd2FudCB0byBicmluZyBpbiBzb21ldGhpbmcgbGlrZSB1bmRlcnNjb3JlIGp1c3QgZm9yIHRoaXMgY29tcGFyaXNvblxuICAgICAgSlNPTi5zdHJpbmdpZnkob2xkQ2hhbmdlLm9sZFByb3BlcnRpZXMpID09PSBKU09OLnN0cmluZ2lmeShuZXdDaGFuZ2UubmV3UHJvcGVydGllcyk7XG59XG5cbmZ1bmN0aW9uIG1ha2VSZW5hbWVEaWZmZXJlbmNlKFxuICByZW1DaGFuZ2U6IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZSxcbiAgYWRkQ2hhbmdlOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2UsXG4pOiBjZm5fZGlmZi5SZXNvdXJjZURpZmZlcmVuY2Uge1xuICByZXR1cm4gbmV3IGNmbl9kaWZmLlJlc291cmNlRGlmZmVyZW5jZShcbiAgICAvLyB3ZSBoYXZlIHRvIGZpbGwgaW4gdGhlIG9sZCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhpcyB3aWxsIGJlIGNsYXNzaWZpZWQgYXMgYSBub24taG90c3dhcHBhYmxlIGNoYW5nZVxuICAgIHJlbUNoYW5nZS5vbGRWYWx1ZSxcbiAgICBhZGRDaGFuZ2UubmV3VmFsdWUsXG4gICAge1xuICAgICAgcmVzb3VyY2VUeXBlOiB7XG4gICAgICAgIG9sZFR5cGU6IHJlbUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUsXG4gICAgICAgIG5ld1R5cGU6IGFkZENoYW5nZS5uZXdSZXNvdXJjZVR5cGUsXG4gICAgICB9LFxuICAgICAgcHJvcGVydHlEaWZmczogKGFkZENoYW5nZSBhcyBhbnkpLnByb3BlcnR5RGlmZnMsXG4gICAgICBvdGhlckRpZmZzOiAoYWRkQ2hhbmdlIGFzIGFueSkub3RoZXJEaWZmcyxcbiAgICB9LFxuICApO1xufVxuXG4vKipcbiAqIHJldHVybnMgYENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UYCBpZiBhIHJlc291cmNlIHdhcyBkZWxldGVkLCBvciBhIGNoYW5nZSB0aGF0IHdlIGNhbm5vdCBzaG9ydC1jaXJjdWl0IG9jY3VyZWQuXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlRgIGlmIGEgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW1wYWN0IHNob3J0Y2lyY3VpdGluZyBvY2N1cmVkLCBzdWNoIGFzIGEgbWV0YWRhdGEgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBpc0NhbmRpZGF0ZUZvckhvdHN3YXBwaW5nKGNoYW5nZTogY2ZuX2RpZmYuUmVzb3VyY2VEaWZmZXJlbmNlKTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlIHwgQ2hhbmdlSG90c3dhcEltcGFjdCB7XG4gIC8vIGEgcmVzb3VyY2UgaGFzIGJlZW4gcmVtb3ZlZCBPUiBhIHJlc291cmNlIGhhcyBiZWVuIGFkZGVkOyB3ZSBjYW4ndCBzaG9ydC1jaXJjdWl0IHRoYXQgY2hhbmdlXG4gIGlmICghY2hhbmdlLm5ld1ZhbHVlIHx8ICFjaGFuZ2Uub2xkVmFsdWUpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICAvLyBJZ25vcmUgTWV0YWRhdGEgY2hhbmdlc1xuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkNESzo6TWV0YWRhdGEnKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmV3VmFsdWU6IGNoYW5nZS5uZXdWYWx1ZSxcbiAgICBwcm9wZXJ0eVVwZGF0ZXM6IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5QWxsSG90c3dhcHBhYmxlQ2hhbmdlcyhzZGs6IElTREssIGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBPcGVyYXRpb25bXSk6IFByb21pc2U8dm9pZFtdPiB7XG4gIHByaW50KGBcXG4ke0lDT059IGhvdHN3YXBwaW5nIHJlc291cmNlczpgKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKGhvdHN3YXBwYWJsZUNoYW5nZXMubWFwKGhvdHN3YXBPcGVyYXRpb24gPT4ge1xuICAgIHJldHVybiBhcHBseUhvdHN3YXBwYWJsZUNoYW5nZShzZGssIGhvdHN3YXBPcGVyYXRpb24pO1xuICB9KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5SG90c3dhcHBhYmxlQ2hhbmdlKHNkazogSVNESywgaG90c3dhcE9wZXJhdGlvbjogSG90c3dhcE9wZXJhdGlvbik6IFByb21pc2U8YW55PiB7XG4gIC8vIG5vdGUgdGhlIHR5cGUgb2Ygc2VydmljZSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgaG90c3dhcHBlZCBpbiB0aGUgVXNlci1BZ2VudFxuICBjb25zdCBjdXN0b21Vc2VyQWdlbnQgPSBgY2RrLWhvdHN3YXAvc3VjY2Vzcy0ke2hvdHN3YXBPcGVyYXRpb24uc2VydmljZX1gO1xuICBzZGsuYXBwZW5kQ3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgaG90c3dhcE9wZXJhdGlvbi5yZXNvdXJjZU5hbWVzKSB7XG4gICAgICBwcmludChgICAgJHtJQ09OfSAlc2AsIGNoYWxrLmJvbGQobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgaG90c3dhcE9wZXJhdGlvbi5hcHBseShzZGspO1xuICB9IGZpbmFsbHkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBob3Rzd2FwT3BlcmF0aW9uLnJlc291cmNlTmFtZXMpIHtcbiAgICAgIHByaW50KGAke0lDT059ICVzICVzYCwgY2hhbGsuYm9sZChuYW1lKSwgY2hhbGsuZ3JlZW4oJ2hvdHN3YXBwZWQhJykpO1xuICAgIH1cbiAgICBzZGsucmVtb3ZlQ3VzdG9tVXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7XG4gIH1cbn1cblxuIl19
@@ -0,0 +1,24 @@
1
+ import * as cxapi from '@aws-cdk/cx-api';
2
+ import { SdkProvider, ISDK } from '../aws-auth';
3
+ /**
4
+ * Configuration needed to monitor CloudWatch Log Groups
5
+ * found in a given CloudFormation Stack
6
+ */
7
+ export interface FoundLogGroupsResult {
8
+ /**
9
+ * The resolved environment (account/region) that the log
10
+ * groups are deployed in
11
+ */
12
+ readonly env: cxapi.Environment;
13
+ /**
14
+ * The SDK that can be used to read events from the CloudWatch
15
+ * Log Groups in the given environment
16
+ */
17
+ readonly sdk: ISDK;
18
+ /**
19
+ * The names of the relevant CloudWatch Log Groups
20
+ * in the given CloudFormation template
21
+ */
22
+ readonly logGroupNames: string[];
23
+ }
24
+ export declare function findCloudWatchLogGroups(sdkProvider: SdkProvider, stackArtifact: cxapi.CloudFormationStackArtifact): Promise<FoundLogGroupsResult>;