aws-cdk 2.1005.0 → 2.1006.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 (174) hide show
  1. package/THIRD_PARTY_LICENSES +31 -31
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth/awscli-compatible.js +9 -10
  5. package/lib/api/aws-auth/credential-plugins.js +6 -7
  6. package/lib/api/aws-auth/sdk-logger.js +3 -4
  7. package/lib/api/aws-auth/sdk-provider.js +11 -13
  8. package/lib/api/aws-auth/sdk.js +8 -9
  9. package/lib/api/aws-auth/tracing.js +3 -4
  10. package/lib/api/aws-auth/user-agent.js +4 -5
  11. package/lib/api/bootstrap/bootstrap-environment.d.ts +1 -1
  12. package/lib/api/bootstrap/bootstrap-environment.js +42 -46
  13. package/lib/api/bootstrap/bootstrap-props.d.ts +1 -1
  14. package/lib/api/bootstrap/bootstrap-props.js +1 -1
  15. package/lib/api/bootstrap/deploy-bootstrap.d.ts +1 -1
  16. package/lib/api/bootstrap/deploy-bootstrap.js +11 -14
  17. package/lib/api/{evaluate-cloudformation-template.d.ts → cloudformation/evaluate-cloudformation-template.d.ts} +4 -8
  18. package/lib/api/{evaluate-cloudformation-template.js → cloudformation/evaluate-cloudformation-template.js} +16 -25
  19. package/lib/api/cloudformation/index.d.ts +4 -0
  20. package/lib/api/cloudformation/index.js +21 -0
  21. package/lib/api/{deployments → cloudformation}/nested-stack-helpers.d.ts +1 -1
  22. package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
  23. package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
  24. package/lib/api/cloudformation/stack-helpers.js +158 -0
  25. package/lib/api/{util → cloudformation}/template-body-parameter.d.ts +3 -2
  26. package/lib/api/cloudformation/template-body-parameter.js +104 -0
  27. package/lib/api/context.js +3 -3
  28. package/lib/api/cxapp/cloud-assembly.js +13 -15
  29. package/lib/api/cxapp/cloud-executable.js +4 -5
  30. package/lib/api/cxapp/environments.js +4 -4
  31. package/lib/api/cxapp/exec.js +20 -23
  32. package/lib/api/deployments/asset-publishing.d.ts +0 -2
  33. package/lib/api/deployments/asset-publishing.js +24 -31
  34. package/lib/api/deployments/assets.d.ts +1 -1
  35. package/lib/api/deployments/assets.js +12 -13
  36. package/lib/api/deployments/{cloudformation.d.ts → cfn-api.d.ts} +5 -102
  37. package/lib/api/deployments/cfn-api.js +438 -0
  38. package/lib/api/deployments/checks.d.ts +1 -1
  39. package/lib/api/deployments/checks.js +12 -13
  40. package/lib/api/deployments/deploy-stack.d.ts +2 -3
  41. package/lib/api/deployments/deploy-stack.js +34 -45
  42. package/lib/api/deployments/deployment-result.js +3 -3
  43. package/lib/api/deployments/deployments.d.ts +3 -3
  44. package/lib/api/deployments/deployments.js +35 -42
  45. package/lib/api/deployments/hotswap-deployments.d.ts +2 -2
  46. package/lib/api/deployments/hotswap-deployments.js +122 -69
  47. package/lib/api/deployments/index.d.ts +0 -2
  48. package/lib/api/deployments/index.js +1 -3
  49. package/lib/api/environment/environment-access.d.ts +2 -2
  50. package/lib/api/environment/environment-access.js +18 -20
  51. package/lib/api/environment/environment-resources.d.ts +1 -1
  52. package/lib/api/environment/environment-resources.js +17 -19
  53. package/lib/api/environment/index.d.ts +1 -0
  54. package/lib/api/environment/index.js +2 -1
  55. package/lib/api/environment/placeholders.js +23 -0
  56. package/lib/api/garbage-collection/garbage-collector.d.ts +1 -1
  57. package/lib/api/garbage-collection/garbage-collector.js +56 -66
  58. package/lib/api/garbage-collection/progress-printer.d.ts +1 -1
  59. package/lib/api/garbage-collection/progress-printer.js +7 -7
  60. package/lib/api/garbage-collection/stack-refresh.d.ts +1 -1
  61. package/lib/api/garbage-collection/stack-refresh.js +12 -15
  62. package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -3
  63. package/lib/api/hotswap/appsync-mapping-templates.js +25 -22
  64. package/lib/api/hotswap/code-build-projects.d.ts +3 -3
  65. package/lib/api/hotswap/code-build-projects.js +12 -7
  66. package/lib/api/hotswap/common.d.ts +13 -61
  67. package/lib/api/hotswap/common.js +40 -70
  68. package/lib/api/hotswap/ecs-services.d.ts +4 -4
  69. package/lib/api/hotswap/ecs-services.js +38 -21
  70. package/lib/api/hotswap/lambda-functions.d.ts +3 -3
  71. package/lib/api/hotswap/lambda-functions.js +23 -19
  72. package/lib/api/hotswap/s3-bucket-deployments.d.ts +3 -3
  73. package/lib/api/hotswap/s3-bucket-deployments.js +11 -7
  74. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +3 -3
  75. package/lib/api/hotswap/stepfunctions-state-machines.js +8 -4
  76. package/lib/api/logs/find-cloudwatch-logs.js +6 -7
  77. package/lib/api/logs/logs-monitor.js +5 -8
  78. package/lib/api/plugin/plugin.js +6 -10
  79. package/lib/api/resource-import/importer.d.ts +8 -3
  80. package/lib/api/resource-import/importer.js +23 -29
  81. package/lib/api/resource-import/migrator.d.ts +3 -3
  82. package/lib/api/resource-import/migrator.js +6 -6
  83. package/lib/api/settings.d.ts +0 -3
  84. package/lib/api/settings.js +4 -40
  85. package/lib/api/stack-events/stack-activity-monitor.d.ts +1 -1
  86. package/lib/api/stack-events/stack-activity-monitor.js +12 -15
  87. package/lib/api/stack-events/stack-event-poller.js +9 -10
  88. package/lib/api/toolkit-info.d.ts +2 -2
  89. package/lib/api/toolkit-info.js +20 -24
  90. package/lib/{tree.d.ts → api/tree.d.ts} +2 -2
  91. package/lib/api/tree.js +37 -0
  92. package/lib/api/util/rwlock.js +4 -4
  93. package/lib/api/work-graph/work-graph-builder.js +4 -4
  94. package/lib/api/work-graph/work-graph.d.ts +1 -1
  95. package/lib/api/work-graph/work-graph.js +13 -15
  96. package/lib/cli/activity-printer/base.d.ts +2 -2
  97. package/lib/cli/activity-printer/base.js +6 -8
  98. package/lib/cli/activity-printer/current.js +7 -11
  99. package/lib/cli/activity-printer/history.js +2 -3
  100. package/lib/cli/cdk-toolkit.d.ts +2 -8
  101. package/lib/cli/cdk-toolkit.js +81 -72
  102. package/lib/cli/ci-systems.js +2 -3
  103. package/lib/cli/cli-config.js +3 -3
  104. package/lib/cli/cli.js +48 -50
  105. package/lib/cli/convert-to-user-input.js +110 -111
  106. package/lib/{toolkit → cli/io-host}/cli-io-host.d.ts +6 -2
  107. package/lib/cli/io-host/cli-io-host.js +356 -0
  108. package/lib/cli/io-host/index.d.ts +1 -0
  109. package/lib/{toolkit/error.js → cli/io-host/index.js} +2 -2
  110. package/lib/cli/messages.d.ts +1 -1
  111. package/lib/cli/messages.js +2 -3
  112. package/lib/cli/pretty-print-error.d.ts +1 -0
  113. package/lib/cli/pretty-print-error.js +35 -0
  114. package/lib/cli/root-dir.js +4 -4
  115. package/lib/cli/user-configuration.js +57 -14
  116. package/lib/cli/util/npm.js +3 -3
  117. package/lib/cli/util/yargs-helpers.d.ts +1 -1
  118. package/lib/cli/util/yargs-helpers.js +3 -3
  119. package/lib/cli/version.js +4 -4
  120. package/lib/commands/context.js +7 -8
  121. package/lib/commands/diff.d.ts +50 -0
  122. package/lib/commands/diff.js +215 -0
  123. package/lib/commands/init/index.d.ts +1 -0
  124. package/lib/commands/init/index.js +18 -0
  125. package/lib/commands/init/init-hooks.js +63 -0
  126. package/lib/commands/init/init.js +435 -0
  127. package/lib/{os.js → commands/init/os.js} +4 -4
  128. package/lib/{list-stacks.d.ts → commands/list-stacks.d.ts} +1 -1
  129. package/lib/{list-stacks.js → commands/list-stacks.js} +2 -2
  130. package/lib/commands/migrate.js +29 -32
  131. package/lib/context-providers/ami.d.ts +3 -1
  132. package/lib/context-providers/ami.js +8 -8
  133. package/lib/context-providers/availability-zones.d.ts +3 -1
  134. package/lib/context-providers/availability-zones.js +4 -4
  135. package/lib/context-providers/cc-api-provider.d.ts +8 -12
  136. package/lib/context-providers/cc-api-provider.js +88 -66
  137. package/lib/context-providers/endpoint-service-availability-zones.d.ts +3 -1
  138. package/lib/context-providers/endpoint-service-availability-zones.js +6 -6
  139. package/lib/context-providers/hosted-zones.d.ts +3 -1
  140. package/lib/context-providers/hosted-zones.js +11 -11
  141. package/lib/context-providers/index.d.ts +19 -5
  142. package/lib/context-providers/index.js +35 -17
  143. package/lib/context-providers/keys.d.ts +3 -1
  144. package/lib/context-providers/keys.js +8 -8
  145. package/lib/context-providers/load-balancers.js +15 -18
  146. package/lib/context-providers/security-groups.js +10 -12
  147. package/lib/context-providers/ssm-parameters.d.ts +3 -1
  148. package/lib/context-providers/ssm-parameters.js +7 -7
  149. package/lib/context-providers/vpcs.d.ts +3 -1
  150. package/lib/context-providers/vpcs.js +14 -15
  151. package/lib/index.js +113386 -112712
  152. package/lib/init-templates/.init-version.json +1 -1
  153. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  154. package/lib/legacy-exports-source.d.ts +4 -5
  155. package/lib/legacy-exports-source.js +6 -7
  156. package/lib/logging.js +2 -2
  157. package/lib/notices.d.ts +1 -1
  158. package/lib/notices.js +26 -32
  159. package/package.json +18 -18
  160. package/lib/api/deployments/cloudformation.js +0 -597
  161. package/lib/api/deployments/nested-stack-helpers.js +0 -88
  162. package/lib/api/util/placeholders.js +0 -24
  163. package/lib/api/util/template-body-parameter.js +0 -103
  164. package/lib/diff.d.ts +0 -28
  165. package/lib/diff.js +0 -165
  166. package/lib/init-hooks.js +0 -63
  167. package/lib/init.js +0 -437
  168. package/lib/toolkit/cli-io-host.js +0 -353
  169. package/lib/toolkit/error.d.ts +0 -1
  170. package/lib/tree.js +0 -40
  171. /package/lib/api/{util → environment}/placeholders.d.ts +0 -0
  172. /package/lib/{init-hooks.d.ts → commands/init/init-hooks.d.ts} +0 -0
  173. /package/lib/{init.d.ts → commands/init/init.d.ts} +0 -0
  174. /package/lib/{os.d.ts → commands/init/os.d.ts} +0 -0
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequireApproval = void 0;
4
+ exports.formatStackDiff = formatStackDiff;
5
+ exports.formatSecurityDiff = formatSecurityDiff;
6
+ const stream_1 = require("stream");
7
+ const util_1 = require("util");
8
+ const cxschema = require("@aws-cdk/cloud-assembly-schema");
9
+ const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
10
+ const chalk = require("chalk");
11
+ const api_1 = require("../../../@aws-cdk/tmp-toolkit-helpers/src/api");
12
+ const logging_1 = require("../logging");
13
+ /*
14
+ * Custom writable stream that collects text into a string buffer.
15
+ * Used on classes that take in and directly write to a stream, but
16
+ * we intend to capture the output rather than print.
17
+ */
18
+ class StringWriteStream extends stream_1.Writable {
19
+ constructor() {
20
+ super();
21
+ this.buffer = [];
22
+ }
23
+ _write(chunk, _encoding, callback) {
24
+ this.buffer.push(chunk.toString());
25
+ callback();
26
+ }
27
+ toString() {
28
+ return this.buffer.join('');
29
+ }
30
+ }
31
+ /**
32
+ * Formats the differences between two template states and returns it as a string.
33
+ *
34
+ * @param oldTemplate the old/current state of the stack.
35
+ * @param newTemplate the new/target state of the stack.
36
+ * @param strict do not filter out AWS::CDK::Metadata or Rules
37
+ * @param context lines of context to use in arbitrary JSON diff
38
+ * @param quiet silences \'There were no differences\' messages
39
+ *
40
+ * @returns the formatted diff, and the number of stacks in this stack tree that have differences, including the top-level root stack
41
+ */
42
+ function formatStackDiff(oldTemplate, newTemplate, strict, context, quiet, stackName, changeSet, isImport, nestedStackTemplates) {
43
+ let diff = (0, cloudformation_diff_1.fullDiff)(oldTemplate, newTemplate.template, changeSet, isImport);
44
+ // The stack diff is formatted via `Formatter`, which takes in a stream
45
+ // and sends its output directly to that stream. To faciliate use of the
46
+ // global CliIoHost, we create our own stream to capture the output of
47
+ // `Formatter` and return the output as a string for the consumer of
48
+ // `formatStackDiff` to decide what to do with it.
49
+ const stream = new StringWriteStream();
50
+ let numStacksWithChanges = 0;
51
+ let formattedDiff = '';
52
+ let filteredChangesCount = 0;
53
+ try {
54
+ // must output the stack name if there are differences, even if quiet
55
+ if (stackName && (!quiet || !diff.isEmpty)) {
56
+ stream.write((0, util_1.format)('Stack %s\n', chalk.bold(stackName)));
57
+ }
58
+ if (!quiet && isImport) {
59
+ stream.write('Parameters and rules created during migration do not affect resource configuration.\n');
60
+ }
61
+ // detect and filter out mangled characters from the diff
62
+ if (diff.differenceCount && !strict) {
63
+ const mangledNewTemplate = JSON.parse((0, cloudformation_diff_1.mangleLikeCloudFormation)(JSON.stringify(newTemplate.template)));
64
+ const mangledDiff = (0, cloudformation_diff_1.fullDiff)(oldTemplate, mangledNewTemplate, changeSet);
65
+ filteredChangesCount = Math.max(0, diff.differenceCount - mangledDiff.differenceCount);
66
+ if (filteredChangesCount > 0) {
67
+ diff = mangledDiff;
68
+ }
69
+ }
70
+ // filter out 'AWS::CDK::Metadata' resources from the template
71
+ // filter out 'CheckBootstrapVersion' rules from the template
72
+ if (!strict) {
73
+ obscureDiff(diff);
74
+ }
75
+ if (!diff.isEmpty) {
76
+ numStacksWithChanges++;
77
+ // formatDifferences updates the stream with the formatted stack diff
78
+ (0, cloudformation_diff_1.formatDifferences)(stream, diff, {
79
+ ...logicalIdMapFromTemplate(oldTemplate),
80
+ ...buildLogicalToPathMap(newTemplate),
81
+ }, context);
82
+ // store the stream containing a formatted stack diff
83
+ formattedDiff = stream.toString();
84
+ }
85
+ else if (!quiet) {
86
+ (0, logging_1.info)(chalk.green('There were no differences'));
87
+ }
88
+ }
89
+ finally {
90
+ stream.end();
91
+ }
92
+ if (filteredChangesCount > 0) {
93
+ (0, logging_1.info)(chalk.yellow(`Omitted ${filteredChangesCount} changes because they are likely mangled non-ASCII characters. Use --strict to print them.`));
94
+ }
95
+ for (const nestedStackLogicalId of Object.keys(nestedStackTemplates ?? {})) {
96
+ if (!nestedStackTemplates) {
97
+ break;
98
+ }
99
+ const nestedStack = nestedStackTemplates[nestedStackLogicalId];
100
+ newTemplate._template = nestedStack.generatedTemplate;
101
+ const nextDiff = formatStackDiff(nestedStack.deployedTemplate, newTemplate, strict, context, quiet, nestedStack.physicalName ?? nestedStackLogicalId, undefined, isImport, nestedStack.nestedStackTemplates);
102
+ numStacksWithChanges += nextDiff.numStacksWithChanges;
103
+ formattedDiff += nextDiff.formattedDiff;
104
+ }
105
+ return {
106
+ numStacksWithChanges,
107
+ formattedDiff,
108
+ };
109
+ }
110
+ var RequireApproval;
111
+ (function (RequireApproval) {
112
+ RequireApproval["Never"] = "never";
113
+ RequireApproval["AnyChange"] = "any-change";
114
+ RequireApproval["Broadening"] = "broadening";
115
+ })(RequireApproval || (exports.RequireApproval = RequireApproval = {}));
116
+ /**
117
+ * Formats the security changes of this diff, if the change is impactful enough according to the approval level
118
+ *
119
+ * Returns the diff if the changes are prompt-worthy, an empty object otherwise.
120
+ */
121
+ function formatSecurityDiff(oldTemplate, newTemplate, requireApproval, stackName, changeSet) {
122
+ const diff = (0, cloudformation_diff_1.fullDiff)(oldTemplate, newTemplate.template, changeSet);
123
+ if (diffRequiresApproval(diff, requireApproval)) {
124
+ (0, logging_1.info)((0, util_1.format)('Stack %s\n', chalk.bold(stackName)));
125
+ // eslint-disable-next-line max-len
126
+ (0, logging_1.warning)(`This deployment will make potentially sensitive changes according to your current security approval level (--require-approval ${requireApproval}).`);
127
+ (0, logging_1.warning)('Please confirm you intend to make the following modifications:\n');
128
+ // The security diff is formatted via `Formatter`, which takes in a stream
129
+ // and sends its output directly to that stream. To faciliate use of the
130
+ // global CliIoHost, we create our own stream to capture the output of
131
+ // `Formatter` and return the output as a string for the consumer of
132
+ // `formatSecurityDiff` to decide what to do with it.
133
+ const stream = new StringWriteStream();
134
+ try {
135
+ // formatSecurityChanges updates the stream with the formatted security diff
136
+ (0, cloudformation_diff_1.formatSecurityChanges)(stream, diff, buildLogicalToPathMap(newTemplate));
137
+ }
138
+ finally {
139
+ stream.end();
140
+ }
141
+ // store the stream containing a formatted stack diff
142
+ const formattedDiff = stream.toString();
143
+ return { formattedDiff };
144
+ }
145
+ return {};
146
+ }
147
+ /**
148
+ * Return whether the diff has security-impacting changes that need confirmation
149
+ *
150
+ * TODO: Filter the security impact determination based off of an enum that allows
151
+ * us to pick minimum "severities" to alert on.
152
+ */
153
+ function diffRequiresApproval(diff, requireApproval) {
154
+ switch (requireApproval) {
155
+ case RequireApproval.Never: return false;
156
+ case RequireApproval.AnyChange: return diff.permissionsAnyChanges;
157
+ case RequireApproval.Broadening: return diff.permissionsBroadened;
158
+ default: throw new api_1.ToolkitError(`Unrecognized approval level: ${requireApproval}`);
159
+ }
160
+ }
161
+ function buildLogicalToPathMap(stack) {
162
+ const map = {};
163
+ for (const md of stack.findMetadataByType(cxschema.ArtifactMetadataEntryType.LOGICAL_ID)) {
164
+ map[md.data] = md.path;
165
+ }
166
+ return map;
167
+ }
168
+ function logicalIdMapFromTemplate(template) {
169
+ const ret = {};
170
+ for (const [logicalId, resource] of Object.entries(template.Resources ?? {})) {
171
+ const path = resource?.Metadata?.['aws:cdk:path'];
172
+ if (path) {
173
+ ret[logicalId] = path;
174
+ }
175
+ }
176
+ return ret;
177
+ }
178
+ /**
179
+ * Remove any template elements that we don't want to show users.
180
+ * This is currently:
181
+ * - AWS::CDK::Metadata resource
182
+ * - CheckBootstrapVersion Rule
183
+ */
184
+ function obscureDiff(diff) {
185
+ if (diff.unknown) {
186
+ // see https://github.com/aws/aws-cdk/issues/17942
187
+ diff.unknown = diff.unknown.filter(change => {
188
+ if (!change) {
189
+ return true;
190
+ }
191
+ if (change.newValue?.CheckBootstrapVersion) {
192
+ return false;
193
+ }
194
+ if (change.oldValue?.CheckBootstrapVersion) {
195
+ return false;
196
+ }
197
+ return true;
198
+ });
199
+ }
200
+ if (diff.resources) {
201
+ diff.resources = diff.resources.filter(change => {
202
+ if (!change) {
203
+ return true;
204
+ }
205
+ if (change.newResourceType === 'AWS::CDK::Metadata') {
206
+ return false;
207
+ }
208
+ if (change.oldResourceType === 'AWS::CDK::Metadata') {
209
+ return false;
210
+ }
211
+ return true;
212
+ });
213
+ }
214
+ }
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpZmYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUVBLDBDQWdHQztBQXlCRCxnREFpQ0M7QUEzTkQsbUNBQWtDO0FBQ2xDLCtCQUE4QjtBQUM5QiwyREFBMkQ7QUFDM0Qsc0VBT3NDO0FBRXRDLCtCQUErQjtBQUMvQix1RUFBNkU7QUFFN0Usd0NBQTJDO0FBRTNDOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFrQixTQUFRLGlCQUFRO0lBR3RDO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFIRixXQUFNLEdBQWEsRUFBRSxDQUFDO0lBSTlCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVSxFQUFFLFNBQWlCLEVBQUUsUUFBd0M7UUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkMsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBaUJEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixlQUFlLENBQzdCLFdBQWdCLEVBQ2hCLFdBQThDLEVBQzlDLE1BQWUsRUFDZixPQUFlLEVBQ2YsS0FBYyxFQUNkLFNBQWtCLEVBQ2xCLFNBQW1DLEVBQ25DLFFBQWtCLEVBQ2xCLG9CQUErRTtJQUMvRSxJQUFJLElBQUksR0FBRyxJQUFBLDhCQUFRLEVBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVFLHVFQUF1RTtJQUN2RSx3RUFBd0U7SUFDeEUsc0VBQXNFO0lBQ3RFLG9FQUFvRTtJQUNwRSxrREFBa0Q7SUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBRXZDLElBQUksb0JBQW9CLEdBQUcsQ0FB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SUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3BELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLGVBQWUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQge1xuICB0eXBlIERlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0LFxuICB0eXBlIFRlbXBsYXRlRGlmZixcbiAgZm9ybWF0RGlmZmVyZW5jZXMsXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyxcbiAgZnVsbERpZmYsXG4gIG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbixcbn0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9AYXdzLWNkay90bXAtdG9vbGtpdC1oZWxwZXJzL3NyYy9hcGknO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9IGZyb20gJy4uL2FwaS9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBpbmZvLCB3YXJuaW5nIH0gZnJvbSAnLi4vbG9nZ2luZyc7XG5cbi8qXG4gKiBDdXN0b20gd3JpdGFibGUgc3RyZWFtIHRoYXQgY29sbGVjdHMgdGV4dCBpbnRvIGEgc3RyaW5nIGJ1ZmZlci5cbiAqIFVzZWQgb24gY2xhc3NlcyB0aGF0IHRha2UgaW4gYW5kIGRpcmVjdGx5IHdyaXRlIHRvIGEgc3RyZWFtLCBidXRcbiAqIHdlIGludGVuZCB0byBjYXB0dXJlIHRoZSBvdXRwdXQgcmF0aGVyIHRoYW4gcHJpbnQuXG4gKi9cbmNsYXNzIFN0cmluZ1dyaXRlU3RyZWFtIGV4dGVuZHMgV3JpdGFibGUge1xuICBwcml2YXRlIGJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgX3dyaXRlKGNodW5rOiBhbnksIF9lbmNvZGluZzogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXIucHVzaChjaHVuay50b1N0cmluZygpKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuam9pbignJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBPdXRwdXQgb2YgZm9ybWF0U3RhY2tEaWZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0U3RhY2tEaWZmT3V0cHV0IHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBzdGFja3Mgd2l0aCBkaWZmIGNoYW5nZXNcbiAgICovXG4gIHJlYWRvbmx5IG51bVN0YWNrc1dpdGhDaGFuZ2VzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGZvcm1hdHRlZCBkaWZmXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZWREaWZmOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gdGVtcGxhdGUgc3RhdGVzIGFuZCByZXR1cm5zIGl0IGFzIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBvbGRUZW1wbGF0ZSB0aGUgb2xkL2N1cnJlbnQgc3RhdGUgb2YgdGhlIHN0YWNrLlxuICogQHBhcmFtIG5ld1RlbXBsYXRlIHRoZSBuZXcvdGFyZ2V0IHN0YXRlIG9mIHRoZSBzdGFjay5cbiAqIEBwYXJhbSBzdHJpY3QgICAgICBkbyBub3QgZmlsdGVyIG91dCBBV1M6OkNESzo6TWV0YWRhdGEgb3IgUnVsZXNcbiAqIEBwYXJhbSBjb250ZXh0ICAgICBsaW5lcyBvZiBjb250ZXh0IHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmXG4gKiBAcGFyYW0gcXVpZXQgICAgICAgc2lsZW5jZXMgXFwnVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlc1xcJyBtZXNzYWdlc1xuICpcbiAqIEByZXR1cm5zIHRoZSBmb3JtYXR0ZWQgZGlmZiwgYW5kIHRoZSBudW1iZXIgb2Ygc3RhY2tzIGluIHRoaXMgc3RhY2sgdHJlZSB0aGF0IGhhdmUgZGlmZmVyZW5jZXMsIGluY2x1ZGluZyB0aGUgdG9wLWxldmVsIHJvb3Qgc3RhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0YWNrRGlmZihcbiAgb2xkVGVtcGxhdGU6IGFueSxcbiAgbmV3VGVtcGxhdGU6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgc3RyaWN0OiBib29sZWFuLFxuICBjb250ZXh0OiBudW1iZXIsXG4gIHF1aWV0OiBib29sZWFuLFxuICBzdGFja05hbWU/OiBzdHJpbmcsXG4gIGNoYW5nZVNldD86IERlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0LFxuICBpc0ltcG9ydD86IGJvb2xlYW4sXG4gIG5lc3RlZFN0YWNrVGVtcGxhdGVzPzogeyBbbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzIH0pOiBGb3JtYXRTdGFja0RpZmZPdXRwdXQge1xuICBsZXQgZGlmZiA9IGZ1bGxEaWZmKG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZS50ZW1wbGF0ZSwgY2hhbmdlU2V0LCBpc0ltcG9ydCk7XG5cbiAgLy8gVGhlIHN0YWNrIGRpZmYgaXMgZm9ybWF0dGVkIHZpYSBgRm9ybWF0dGVyYCwgd2hpY2ggdGFrZXMgaW4gYSBzdHJlYW1cbiAgLy8gYW5kIHNlbmRzIGl0cyBvdXRwdXQgZGlyZWN0bHkgdG8gdGhhdCBzdHJlYW0uIFRvIGZhY2lsaWF0ZSB1c2Ugb2YgdGhlXG4gIC8vIGdsb2JhbCBDbGlJb0hvc3QsIHdlIGNyZWF0ZSBvdXIgb3duIHN0cmVhbSB0byBjYXB0dXJlIHRoZSBvdXRwdXQgb2ZcbiAgLy8gYEZvcm1hdHRlcmAgYW5kIHJldHVybiB0aGUgb3V0cHV0IGFzIGEgc3RyaW5nIGZvciB0aGUgY29uc3VtZXIgb2ZcbiAgLy8gYGZvcm1hdFN0YWNrRGlmZmAgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdC5cbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG5cbiAgbGV0IG51bVN0YWNrc1dpdGhDaGFuZ2VzID0gMDtcbiAgbGV0IGZvcm1hdHRlZERpZmYgPSAnJztcbiAgbGV0IGZpbHRlcmVkQ2hhbmdlc0NvdW50ID0gMDtcbiAgdHJ5IHtcbiAgICAvLyBtdXN0IG91dHB1dCB0aGUgc3RhY2sgbmFtZSBpZiB0aGVyZSBhcmUgZGlmZmVyZW5jZXMsIGV2ZW4gaWYgcXVpZXRcbiAgICBpZiAoc3RhY2tOYW1lICYmICghcXVpZXQgfHwgIWRpZmYuaXNFbXB0eSkpIHtcbiAgICAgIHN0cmVhbS53cml0ZShmb3JtYXQoJ1N0YWNrICVzXFxuJywgY2hhbGsuYm9sZChzdGFja05hbWUpKSk7XG4gICAgfVxuXG4gICAgaWYgKCFxdWlldCAmJiBpc0ltcG9ydCkge1xuICAgICAgc3RyZWFtLndyaXRlKCdQYXJhbWV0ZXJzIGFuZCBydWxlcyBjcmVhdGVkIGR1cmluZyBtaWdyYXRpb24gZG8gbm90IGFmZmVjdCByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxcbicpO1xuICAgIH1cblxuICAgIC8vIGRldGVjdCBhbmQgZmlsdGVyIG91dCBtYW5nbGVkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZGlmZlxuICAgIGlmIChkaWZmLmRpZmZlcmVuY2VDb3VudCAmJiAhc3RyaWN0KSB7XG4gICAgICBjb25zdCBtYW5nbGVkTmV3VGVtcGxhdGUgPSBKU09OLnBhcnNlKG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbihKU09OLnN0cmluZ2lmeShuZXdUZW1wbGF0ZS50ZW1wbGF0ZSkpKTtcbiAgICAgIGNvbnN0IG1hbmdsZWREaWZmID0gZnVsbERpZmYob2xkVGVtcGxhdGUsIG1hbmdsZWROZXdUZW1wbGF0ZSwgY2hhbmdlU2V0KTtcbiAgICAgIGZpbHRlcmVkQ2hhbmdlc0NvdW50ID0gTWF0aC5tYXgoMCwgZGlmZi5kaWZmZXJlbmNlQ291bnQgLSBtYW5nbGVkRGlmZi5kaWZmZXJlbmNlQ291bnQpO1xuICAgICAgaWYgKGZpbHRlcmVkQ2hhbmdlc0NvdW50ID4gMCkge1xuICAgICAgICBkaWZmID0gbWFuZ2xlZERpZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG91dCAnQVdTOjpDREs6Ok1ldGFkYXRhJyByZXNvdXJjZXMgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICAvLyBmaWx0ZXIgb3V0ICdDaGVja0Jvb3RzdHJhcFZlcnNpb24nIHJ1bGVzIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgIG9ic2N1cmVEaWZmKGRpZmYpO1xuICAgIH1cblxuICAgIGlmICghZGlmZi5pc0VtcHR5KSB7XG4gICAgICBudW1TdGFja3NXaXRoQ2hhbmdlcysrO1xuXG4gICAgICAvLyBmb3JtYXREaWZmZXJlbmNlcyB1cGRhdGVzIHRoZSBzdHJlYW0gd2l0aCB0aGUgZm9ybWF0dGVkIHN0YWNrIGRpZmZcbiAgICAgIGZvcm1hdERpZmZlcmVuY2VzKHN0cmVhbSwgZGlmZiwge1xuICAgICAgICAuLi5sb2dpY2FsSWRNYXBGcm9tVGVtcGxhdGUob2xkVGVtcGxhdGUpLFxuICAgICAgICAuLi5idWlsZExvZ2ljYWxUb1BhdGhNYXAobmV3VGVtcGxhdGUpLFxuICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgIC8vIHN0b3JlIHRoZSBzdHJlYW0gY29udGFpbmluZyBhIGZvcm1hdHRlZCBzdGFjayBkaWZmXG4gICAgICBmb3JtYXR0ZWREaWZmID0gc3RyZWFtLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICghcXVpZXQpIHtcbiAgICAgIGluZm8oY2hhbGsuZ3JlZW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHN0cmVhbS5lbmQoKTtcbiAgfVxuXG4gIGlmIChmaWx0ZXJlZENoYW5nZXNDb3VudCA+IDApIHtcbiAgICBpbmZvKGNoYWxrLnllbGxvdyhgT21pdHRlZCAke2ZpbHRlcmVkQ2hhbmdlc0NvdW50fSBjaGFuZ2VzIGJlY2F1c2UgdGhleSBhcmUgbGlrZWx5IG1hbmdsZWQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFVzZSAtLXN0cmljdCB0byBwcmludCB0aGVtLmApKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbmVzdGVkU3RhY2tMb2dpY2FsSWQgb2YgT2JqZWN0LmtleXMobmVzdGVkU3RhY2tUZW1wbGF0ZXMgPz8ge30pKSB7XG4gICAgaWYgKCFuZXN0ZWRTdGFja1RlbXBsYXRlcykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG5lc3RlZFN0YWNrID0gbmVzdGVkU3RhY2tUZW1wbGF0ZXNbbmVzdGVkU3RhY2tMb2dpY2FsSWRdO1xuXG4gICAgKG5ld1RlbXBsYXRlIGFzIGFueSkuX3RlbXBsYXRlID0gbmVzdGVkU3RhY2suZ2VuZXJhdGVkVGVtcGxhdGU7XG4gICAgY29uc3QgbmV4dERpZmYgPSBmb3JtYXRTdGFja0RpZmYoXG4gICAgICBuZXN0ZWRTdGFjay5kZXBsb3llZFRlbXBsYXRlLFxuICAgICAgbmV3VGVtcGxhdGUsXG4gICAgICBzdHJpY3QsXG4gICAgICBjb250ZXh0LFxuICAgICAgcXVpZXQsXG4gICAgICBuZXN0ZWRTdGFjay5waHlzaWNhbE5hbWUgPz8gbmVzdGVkU3RhY2tMb2dpY2FsSWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBpc0ltcG9ydCxcbiAgICAgIG5lc3RlZFN0YWNrLm5lc3RlZFN0YWNrVGVtcGxhdGVzLFxuICAgICk7XG4gICAgbnVtU3RhY2tzV2l0aENoYW5nZXMgKz0gbmV4dERpZmYubnVtU3RhY2tzV2l0aENoYW5nZXM7XG4gICAgZm9ybWF0dGVkRGlmZiArPSBuZXh0RGlmZi5mb3JtYXR0ZWREaWZmO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1TdGFja3NXaXRoQ2hhbmdlcyxcbiAgICBmb3JtYXR0ZWREaWZmLFxuICB9O1xufVxuXG5leHBvcnQgZW51bSBSZXF1aXJlQXBwcm92YWwge1xuICBOZXZlciA9ICduZXZlcicsXG5cbiAgQW55Q2hhbmdlID0gJ2FueS1jaGFuZ2UnLFxuXG4gIEJyb2FkZW5pbmcgPSAnYnJvYWRlbmluZycsXG59XG5cbi8qKlxuICogT3V0cHV0IG9mIGZvcm1hdFNlY3VyaXR5RGlmZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdFNlY3VyaXR5RGlmZk91dHB1dCB7XG4gIC8qKlxuICAgKiBDb21wbGV0ZSBmb3JtYXR0ZWQgc2VjdXJpdHkgZGlmZiwgaWYgaXQgaXMgcHJvbXB0LXdvcnRoeVxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVkRGlmZj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBzZWN1cml0eSBjaGFuZ2VzIG9mIHRoaXMgZGlmZiwgaWYgdGhlIGNoYW5nZSBpcyBpbXBhY3RmdWwgZW5vdWdoIGFjY29yZGluZyB0byB0aGUgYXBwcm92YWwgbGV2ZWxcbiAqXG4gKiBSZXR1cm5zIHRoZSBkaWZmIGlmIHRoZSBjaGFuZ2VzIGFyZSBwcm9tcHQtd29ydGh5LCBhbiBlbXB0eSBvYmplY3Qgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2VjdXJpdHlEaWZmKFxuICBvbGRUZW1wbGF0ZTogYW55LFxuICBuZXdUZW1wbGF0ZTogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICByZXF1aXJlQXBwcm92YWw6IFJlcXVpcmVBcHByb3ZhbCxcbiAgc3RhY2tOYW1lPzogc3RyaW5nLFxuICBjaGFuZ2VTZXQ/OiBEZXNjcmliZUNoYW5nZVNldE91dHB1dCxcbik6IEZvcm1hdFNlY3VyaXR5RGlmZk91dHB1dCB7XG4gIGNvbnN0IGRpZmYgPSBmdWxsRGlmZihvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUudGVtcGxhdGUsIGNoYW5nZVNldCk7XG5cbiAgaWYgKGRpZmZSZXF1aXJlc0FwcHJvdmFsKGRpZmYsIHJlcXVpcmVBcHByb3ZhbCkpIHtcbiAgICBpbmZvKGZvcm1hdCgnU3RhY2sgJXNcXG4nLCBjaGFsay5ib2xkKHN0YWNrTmFtZSkpKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgd2FybmluZyhgVGhpcyBkZXBsb3ltZW50IHdpbGwgbWFrZSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgY2hhbmdlcyBhY2NvcmRpbmcgdG8geW91ciBjdXJyZW50IHNlY3VyaXR5IGFwcHJvdmFsIGxldmVsICgtLXJlcXVpcmUtYXBwcm92YWwgJHtyZXF1aXJlQXBwcm92YWx9KS5gKTtcbiAgICB3YXJuaW5nKCdQbGVhc2UgY29uZmlybSB5b3UgaW50ZW5kIHRvIG1ha2UgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOlxcbicpO1xuXG4gICAgLy8gVGhlIHNlY3VyaXR5IGRpZmYgaXMgZm9ybWF0dGVkIHZpYSBgRm9ybWF0dGVyYCwgd2hpY2ggdGFrZXMgaW4gYSBzdHJlYW1cbiAgICAvLyBhbmQgc2VuZHMgaXRzIG91dHB1dCBkaXJlY3RseSB0byB0aGF0IHN0cmVhbS4gVG8gZmFjaWxpYXRlIHVzZSBvZiB0aGVcbiAgICAvLyBnbG9iYWwgQ2xpSW9Ib3N0LCB3ZSBjcmVhdGUgb3VyIG93biBzdHJlYW0gdG8gY2FwdHVyZSB0aGUgb3V0cHV0IG9mXG4gICAgLy8gYEZvcm1hdHRlcmAgYW5kIHJldHVybiB0aGUgb3V0cHV0IGFzIGEgc3RyaW5nIGZvciB0aGUgY29uc3VtZXIgb2ZcbiAgICAvLyBgZm9ybWF0U2VjdXJpdHlEaWZmYCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LlxuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJpbmdXcml0ZVN0cmVhbSgpO1xuICAgIHRyeSB7XG4gICAgICAvLyBmb3JtYXRTZWN1cml0eUNoYW5nZXMgdXBkYXRlcyB0aGUgc3RyZWFtIHdpdGggdGhlIGZvcm1hdHRlZCBzZWN1cml0eSBkaWZmXG4gICAgICBmb3JtYXRTZWN1cml0eUNoYW5nZXMoc3RyZWFtLCBkaWZmLCBidWlsZExvZ2ljYWxUb1BhdGhNYXAobmV3VGVtcGxhdGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3RyZWFtLmVuZCgpO1xuICAgIH1cbiAgICAvLyBzdG9yZSB0aGUgc3RyZWFtIGNvbnRhaW5pbmcgYSBmb3JtYXR0ZWQgc3RhY2sgZGlmZlxuICAgIGNvbnN0IGZvcm1hdHRlZERpZmYgPSBzdHJlYW0udG9TdHJpbmcoKTtcbiAgICByZXR1cm4geyBmb3JtYXR0ZWREaWZmIH07XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSBkaWZmIGhhcyBzZWN1cml0eS1pbXBhY3RpbmcgY2hhbmdlcyB0aGF0IG5lZWQgY29uZmlybWF0aW9uXG4gKlxuICogVE9ETzogRmlsdGVyIHRoZSBzZWN1cml0eSBpbXBhY3QgZGV0ZXJtaW5hdGlvbiBiYXNlZCBvZmYgb2YgYW4gZW51bSB0aGF0IGFsbG93c1xuICogdXMgdG8gcGljayBtaW5pbXVtIFwic2V2ZXJpdGllc1wiIHRvIGFsZXJ0IG9uLlxuICovXG5mdW5jdGlvbiBkaWZmUmVxdWlyZXNBcHByb3ZhbChkaWZmOiBUZW1wbGF0ZURpZmYsIHJlcXVpcmVBcHByb3ZhbDogUmVxdWlyZUFwcHJvdmFsKSB7XG4gIHN3aXRjaCAocmVxdWlyZUFwcHJvdmFsKSB7XG4gICAgY2FzZSBSZXF1aXJlQXBwcm92YWwuTmV2ZXI6IHJldHVybiBmYWxzZTtcbiAgICBjYXNlIFJlcXVpcmVBcHByb3ZhbC5BbnlDaGFuZ2U6IHJldHVybiBkaWZmLnBlcm1pc3Npb25zQW55Q2hhbmdlcztcbiAgICBjYXNlIFJlcXVpcmVBcHByb3ZhbC5Ccm9hZGVuaW5nOiByZXR1cm4gZGlmZi5wZXJtaXNzaW9uc0Jyb2FkZW5lZDtcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBVbnJlY29nbml6ZWQgYXBwcm92YWwgbGV2ZWw6ICR7cmVxdWlyZUFwcHJvdmFsfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTG9naWNhbFRvUGF0aE1hcChzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSB7XG4gIGNvbnN0IG1hcDogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIGZvciAoY29uc3QgbWQgb2Ygc3RhY2suZmluZE1ldGFkYXRhQnlUeXBlKGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRCkpIHtcbiAgICBtYXBbbWQuZGF0YSBhcyBzdHJpbmddID0gbWQucGF0aDtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBsb2dpY2FsSWRNYXBGcm9tVGVtcGxhdGUodGVtcGxhdGU6IGFueSkge1xuICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIHJlc291cmNlXSBvZiBPYmplY3QuZW50cmllcyh0ZW1wbGF0ZS5SZXNvdXJjZXMgPz8ge30pKSB7XG4gICAgY29uc3QgcGF0aCA9IChyZXNvdXJjZSBhcyBhbnkpPy5NZXRhZGF0YT8uWydhd3M6Y2RrOnBhdGgnXTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgcmV0W2xvZ2ljYWxJZF0gPSBwYXRoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFJlbW92ZSBhbnkgdGVtcGxhdGUgZWxlbWVudHMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHNob3cgdXNlcnMuXG4gKiBUaGlzIGlzIGN1cnJlbnRseTpcbiAqIC0gQVdTOjpDREs6Ok1ldGFkYXRhIHJlc291cmNlXG4gKiAtIENoZWNrQm9vdHN0cmFwVmVyc2lvbiBSdWxlXG4gKi9cbmZ1bmN0aW9uIG9ic2N1cmVEaWZmKGRpZmY6IFRlbXBsYXRlRGlmZikge1xuICBpZiAoZGlmZi51bmtub3duKSB7XG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTc5NDJcbiAgICBkaWZmLnVua25vd24gPSBkaWZmLnVua25vd24uZmlsdGVyKGNoYW5nZSA9PiB7XG4gICAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2UubmV3VmFsdWU/LkNoZWNrQm9vdHN0cmFwVmVyc2lvbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLm9sZFZhbHVlPy5DaGVja0Jvb3RzdHJhcFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGlmZi5yZXNvdXJjZXMpIHtcbiAgICBkaWZmLnJlc291cmNlcyA9IGRpZmYucmVzb3VyY2VzLmZpbHRlcihjaGFuZ2UgPT4ge1xuICAgICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLm5ld1Jlc291cmNlVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZS5vbGRSZXNvdXJjZVR5cGUgPT09ICdBV1M6OkNESzo6TWV0YWRhdGEnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export * from './init';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./init"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbml0JztcbiJdfQ==
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.invokeBuiltinHooks = invokeBuiltinHooks;
4
+ const path = require("path");
5
+ const os_1 = require("./os");
6
+ const api_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api");
7
+ const util_1 = require("../../util");
8
+ /**
9
+ * Invoke hooks for the given init template
10
+ *
11
+ * Sometimes templates need more complex logic than just replacing tokens. A 'hook' can be
12
+ * used to do additional processing other than copying files.
13
+ *
14
+ * Hooks used to be defined externally to the CLI, by running arbitrarily
15
+ * substituted shell scripts in the target directory.
16
+ *
17
+ * In practice, they're all TypeScript files and all the same, and the dynamism
18
+ * that the original solution allowed wasn't used at all. Worse, since the CLI
19
+ * is now bundled the hooks can't even reuse code from the CLI libraries at all
20
+ * anymore, so all shared code would have to be copy/pasted.
21
+ *
22
+ * Bundle hooks as built-ins into the CLI, so they get bundled and can take advantage
23
+ * of all shared code.
24
+ */
25
+ async function invokeBuiltinHooks(target, context) {
26
+ switch (target.language) {
27
+ case 'csharp':
28
+ if (['app', 'sample-app'].includes(target.templateName)) {
29
+ return dotnetAddProject(target.targetDirectory, context);
30
+ }
31
+ break;
32
+ case 'fsharp':
33
+ if (['app', 'sample-app'].includes(target.templateName)) {
34
+ return dotnetAddProject(target.targetDirectory, context, 'fsproj');
35
+ }
36
+ break;
37
+ case 'python':
38
+ // We can't call this file 'requirements.template.txt' because Dependabot needs to be able to find it.
39
+ // Therefore, keep the in-repo name but still substitute placeholders.
40
+ await context.substitutePlaceholdersIn('requirements.txt');
41
+ break;
42
+ case 'java':
43
+ // We can't call this file 'pom.template.xml'... for the same reason as Python above.
44
+ await context.substitutePlaceholdersIn('pom.xml');
45
+ break;
46
+ case 'javascript':
47
+ case 'typescript':
48
+ // See above, but for 'package.json'.
49
+ await context.substitutePlaceholdersIn('package.json');
50
+ }
51
+ }
52
+ async function dotnetAddProject(targetDirectory, context, ext = 'csproj') {
53
+ const pname = context.placeholder('name.PascalCased');
54
+ const slnPath = path.join(targetDirectory, 'src', `${pname}.sln`);
55
+ const csprojPath = path.join(targetDirectory, 'src', pname, `${pname}.${ext}`);
56
+ try {
57
+ await (0, os_1.shell)(['dotnet', 'sln', slnPath, 'add', csprojPath]);
58
+ }
59
+ catch (e) {
60
+ throw new api_1.ToolkitError(`Could not add project ${pname}.${ext} to solution ${pname}.sln. ${(0, util_1.formatErrorMessage)(e)}`);
61
+ }
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1ob29rcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluaXQtaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpREEsZ0RBOEJDO0FBL0VELDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsMEVBQWdGO0FBQ2hGLHFDQUFnRDtBQTZCaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFBa0IsRUFBRSxPQUFvQjtJQUMvRSxRQUFRLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixLQUFLLFFBQVE7WUFDWCxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFDRCxNQUFNO1FBRVIsS0FBSyxRQUFRO1lBQ1gsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUNELE1BQU07UUFFUixLQUFLLFFBQVE7WUFDWCxzR0FBc0c7WUFDdEcsc0VBQXNFO1lBQ3RFLE1BQU0sT0FBTyxDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0QsTUFBTTtRQUVSLEtBQUssTUFBTTtZQUNULHFGQUFxRjtZQUNyRixNQUFNLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxNQUFNO1FBRVIsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxZQUFZO1lBQ2YscUNBQXFDO1lBQ3JDLE1BQU0sT0FBTyxDQUFDLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNELENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUFDLGVBQXVCLEVBQUUsT0FBb0IsRUFBRSxHQUFHLEdBQUcsUUFBUTtJQUMzRixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNsRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0UsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFBLFVBQUssRUFBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxrQkFBWSxDQUFDLHlCQUF5QixLQUFLLElBQUksR0FBRyxnQkFBZ0IsS0FBSyxTQUFTLElBQUEseUJBQWtCLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHNoZWxsIH0gZnJvbSAnLi9vcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi9AYXdzLWNkay90bXAtdG9vbGtpdC1oZWxwZXJzL3NyYy9hcGknO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmV4cG9ydCB0eXBlIFN1YnN0aXR1dGVQbGFjZWhvbGRlcnMgPSAoLi4uZmlsZU5hbWVzOiBzdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqXG4gKiBIZWxwZXJzIHBhc3NlZCB0byBob29rIGZ1bmN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tDb250ZXh0IHtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlcGxhY2UgcGxhY2Vob2xkZXJzIG9uIGFyYml0cmFyeSBmaWxlc1xuICAgKlxuICAgKiBUaGlzIG1ha2VzIHRva2VuIHN1YnN0aXR1dGlvbiBhdmFpbGFibGUgdG8gbm9uLWAudGVtcGxhdGVgIGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Vic3RpdHV0ZVBsYWNlaG9sZGVyc0luOiBTdWJzdGl0dXRlUGxhY2Vob2xkZXJzO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzaW5nbGUgcGxhY2Vob2xkZXJcbiAgICovXG4gIHBsYWNlaG9sZGVyKG5hbWU6IHN0cmluZyk6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSW52b2tlSG9vayA9ICh0YXJnZXREaXJlY3Rvcnk6IHN0cmluZywgY29udGV4dDogSG9va0NvbnRleHQpID0+IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9va1RhcmdldCB7XG4gIHJlYWRvbmx5IHRhcmdldERpcmVjdG9yeTogc3RyaW5nO1xuICByZWFkb25seSB0ZW1wbGF0ZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbGFuZ3VhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnZva2UgaG9va3MgZm9yIHRoZSBnaXZlbiBpbml0IHRlbXBsYXRlXG4gKlxuICogU29tZXRpbWVzIHRlbXBsYXRlcyBuZWVkIG1vcmUgY29tcGxleCBsb2dpYyB0aGFuIGp1c3QgcmVwbGFjaW5nIHRva2Vucy4gQSAnaG9vaycgY2FuIGJlXG4gKiB1c2VkIHRvIGRvIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBvdGhlciB0aGFuIGNvcHlpbmcgZmlsZXMuXG4gKlxuICogSG9va3MgdXNlZCB0byBiZSBkZWZpbmVkIGV4dGVybmFsbHkgdG8gdGhlIENMSSwgYnkgcnVubmluZyBhcmJpdHJhcmlseVxuICogc3Vic3RpdHV0ZWQgc2hlbGwgc2NyaXB0cyBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeS5cbiAqXG4gKiBJbiBwcmFjdGljZSwgdGhleSdyZSBhbGwgVHlwZVNjcmlwdCBmaWxlcyBhbmQgYWxsIHRoZSBzYW1lLCBhbmQgdGhlIGR5bmFtaXNtXG4gKiB0aGF0IHRoZSBvcmlnaW5hbCBzb2x1dGlvbiBhbGxvd2VkIHdhc24ndCB1c2VkIGF0IGFsbC4gV29yc2UsIHNpbmNlIHRoZSBDTElcbiAqIGlzIG5vdyBidW5kbGVkIHRoZSBob29rcyBjYW4ndCBldmVuIHJldXNlIGNvZGUgZnJvbSB0aGUgQ0xJIGxpYnJhcmllcyBhdCBhbGxcbiAqIGFueW1vcmUsIHNvIGFsbCBzaGFyZWQgY29kZSB3b3VsZCBoYXZlIHRvIGJlIGNvcHkvcGFzdGVkLlxuICpcbiAqIEJ1bmRsZSBob29rcyBhcyBidWlsdC1pbnMgaW50byB0aGUgQ0xJLCBzbyB0aGV5IGdldCBidW5kbGVkIGFuZCBjYW4gdGFrZSBhZHZhbnRhZ2VcbiAqIG9mIGFsbCBzaGFyZWQgY29kZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludm9rZUJ1aWx0aW5Ib29rcyh0YXJnZXQ6IEhvb2tUYXJnZXQsIGNvbnRleHQ6IEhvb2tDb250ZXh0KSB7XG4gIHN3aXRjaCAodGFyZ2V0Lmxhbmd1YWdlKSB7XG4gICAgY2FzZSAnY3NoYXJwJzpcbiAgICAgIGlmIChbJ2FwcCcsICdzYW1wbGUtYXBwJ10uaW5jbHVkZXModGFyZ2V0LnRlbXBsYXRlTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGRvdG5ldEFkZFByb2plY3QodGFyZ2V0LnRhcmdldERpcmVjdG9yeSwgY29udGV4dCk7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZzaGFycCc6XG4gICAgICBpZiAoWydhcHAnLCAnc2FtcGxlLWFwcCddLmluY2x1ZGVzKHRhcmdldC50ZW1wbGF0ZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBkb3RuZXRBZGRQcm9qZWN0KHRhcmdldC50YXJnZXREaXJlY3RvcnksIGNvbnRleHQsICdmc3Byb2onKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncHl0aG9uJzpcbiAgICAgIC8vIFdlIGNhbid0IGNhbGwgdGhpcyBmaWxlICdyZXF1aXJlbWVudHMudGVtcGxhdGUudHh0JyBiZWNhdXNlIERlcGVuZGFib3QgbmVlZHMgdG8gYmUgYWJsZSB0byBmaW5kIGl0LlxuICAgICAgLy8gVGhlcmVmb3JlLCBrZWVwIHRoZSBpbi1yZXBvIG5hbWUgYnV0IHN0aWxsIHN1YnN0aXR1dGUgcGxhY2Vob2xkZXJzLlxuICAgICAgYXdhaXQgY29udGV4dC5zdWJzdGl0dXRlUGxhY2Vob2xkZXJzSW4oJ3JlcXVpcmVtZW50cy50eHQnKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnamF2YSc6XG4gICAgICAvLyBXZSBjYW4ndCBjYWxsIHRoaXMgZmlsZSAncG9tLnRlbXBsYXRlLnhtbCcuLi4gZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBQeXRob24gYWJvdmUuXG4gICAgICBhd2FpdCBjb250ZXh0LnN1YnN0aXR1dGVQbGFjZWhvbGRlcnNJbigncG9tLnhtbCcpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdqYXZhc2NyaXB0JzpcbiAgICBjYXNlICd0eXBlc2NyaXB0JzpcbiAgICAgIC8vIFNlZSBhYm92ZSwgYnV0IGZvciAncGFja2FnZS5qc29uJy5cbiAgICAgIGF3YWl0IGNvbnRleHQuc3Vic3RpdHV0ZVBsYWNlaG9sZGVyc0luKCdwYWNrYWdlLmpzb24nKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkb3RuZXRBZGRQcm9qZWN0KHRhcmdldERpcmVjdG9yeTogc3RyaW5nLCBjb250ZXh0OiBIb29rQ29udGV4dCwgZXh0ID0gJ2NzcHJvaicpIHtcbiAgY29uc3QgcG5hbWUgPSBjb250ZXh0LnBsYWNlaG9sZGVyKCduYW1lLlBhc2NhbENhc2VkJyk7XG4gIGNvbnN0IHNsblBhdGggPSBwYXRoLmpvaW4odGFyZ2V0RGlyZWN0b3J5LCAnc3JjJywgYCR7cG5hbWV9LnNsbmApO1xuICBjb25zdCBjc3Byb2pQYXRoID0gcGF0aC5qb2luKHRhcmdldERpcmVjdG9yeSwgJ3NyYycsIHBuYW1lLCBgJHtwbmFtZX0uJHtleHR9YCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgc2hlbGwoWydkb3RuZXQnLCAnc2xuJywgc2xuUGF0aCwgJ2FkZCcsIGNzcHJvalBhdGhdKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgQ291bGQgbm90IGFkZCBwcm9qZWN0ICR7cG5hbWV9LiR7ZXh0fSB0byBzb2x1dGlvbiAke3BuYW1lfS5zbG4uICR7Zm9ybWF0RXJyb3JNZXNzYWdlKGUpfWApO1xuICB9XG59XG4iXX0=