@rio-cloud/cdk-v2-constructs 4.0.1 → 4.1.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.
@@ -12,6 +12,7 @@ const codepipeline = require("aws-cdk-lib/aws-codepipeline");
12
12
  const codepipeline_actions = require("aws-cdk-lib/aws-codepipeline-actions");
13
13
  const events = require("aws-cdk-lib/aws-events");
14
14
  const targets = require("aws-cdk-lib/aws-events-targets");
15
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
15
16
  const s3 = require("aws-cdk-lib/aws-s3");
16
17
  const ssm = require("aws-cdk-lib/aws-ssm");
17
18
  const pipelines = require("aws-cdk-lib/pipelines");
@@ -39,6 +40,7 @@ var PipelineType;
39
40
  * <p> This gradle command must be provided by the gradle project.
40
41
  */
41
42
  PipelineType["STANDARD_GRADLE"] = "STANDARD_GRADLE";
43
+ PipelineType["STANDARD_GRADLE_KAFKA"] = "STANDARD_GRADLE_KAFKA";
42
44
  })(PipelineType = exports.PipelineType || (exports.PipelineType = {}));
43
45
  class PipelineStack extends aws_cdk_lib_1.Stack {
44
46
  constructor(scope, id, props) {
@@ -64,7 +66,8 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
64
66
  const gradlebuild = new build_project_1.RioGradleCodeBuildProject(this, 'GradleBuild', {
65
67
  input: inputMasterTriggerFile,
66
68
  cdkOutDirectory: 'infrastructure/cdk.out',
67
- partialBuildSpec: this.loadBuildSpecFromFile(((_b = props === null || props === void 0 ? void 0 : props.codeBuildOptions) === null || _b === void 0 ? void 0 : _b.partialBuildSpecPath) || path.resolve(__dirname, 'buildspec.yaml')),
69
+ partialBuildSpec: this.loadBuildSpecFromFile(((_b = props === null || props === void 0 ? void 0 : props.codeBuildOptions) === null || _b === void 0 ? void 0 : _b.partialBuildSpecPath) ||
70
+ this.resolveDefaultBuildSpec(props.pipelineType)),
68
71
  buildEnvironment: (_c = props === null || props === void 0 ? void 0 : props.codeBuildOptions) === null || _c === void 0 ? void 0 : _c.buildEnvironment,
69
72
  hostedZoneName: hostedZone.zoneName,
70
73
  serviceName: props.serviceName,
@@ -92,7 +95,10 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
92
95
  version: codepipeline.GlobalVariables.executionId,
93
96
  }), {
94
97
  pre: props.secretsDeployStepProps ? [
95
- new rio.RioSecretsDeployStep(this, 'DeploySecrets', { ...props.secretsDeployStepProps, input: inputMasterTriggerFile }),
98
+ new rio.RioSecretsDeployStep(this, 'DeploySecrets', {
99
+ ...props.secretsDeployStepProps,
100
+ input: inputMasterTriggerFile,
101
+ }),
96
102
  ] : undefined,
97
103
  });
98
104
  pipeline.buildPipeline();
@@ -103,12 +109,16 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
103
109
  ossLicensesBucketParameter.grantRead(gradlebuild);
104
110
  serviceKeystorePassword.grantRead(gradlebuild);
105
111
  accountNameParameter.grantRead(gradlebuild);
112
+ if (props.pipelineType === PipelineType.STANDARD_GRADLE_KAFKA) {
113
+ this.grantPermissionsForKafkaIntegration(gradlebuild, 'KafkaIntegrationPolicy');
114
+ }
106
115
  pipeline.pipeline.artifactBucket.grantReadWrite(stripAssetsStep.project);
107
116
  // Branch pipeline
108
117
  const branchBuild = new build_project_1.RioGradleCodeBuildProject(this, 'BranchBuild', {
109
118
  input: inputBranchTriggerFile,
110
119
  cdkOutDirectory: 'infrastructure/cdk.out',
111
- partialBuildSpec: this.loadBuildSpecFromFile(((_d = props === null || props === void 0 ? void 0 : props.codeBuildOptions) === null || _d === void 0 ? void 0 : _d.partialBuildSpecPath) || path.resolve(__dirname, 'buildspec.yaml')),
120
+ partialBuildSpec: this.loadBuildSpecFromFile(((_d = props === null || props === void 0 ? void 0 : props.codeBuildOptions) === null || _d === void 0 ? void 0 : _d.partialBuildSpecPath) ||
121
+ this.resolveDefaultBuildSpec(props.pipelineType)),
112
122
  buildEnvironment: (_e = props === null || props === void 0 ? void 0 : props.codeBuildOptions) === null || _e === void 0 ? void 0 : _e.buildEnvironment,
113
123
  hostedZoneName: hostedZone.zoneName,
114
124
  serviceName: props.serviceName,
@@ -124,10 +134,13 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
124
134
  ossLicensesBucketParameter.grantRead(branchBuild);
125
135
  serviceKeystorePassword.grantRead(branchBuild);
126
136
  accountNameParameter.grantRead(branchBuild);
137
+ if (props.pipelineType === PipelineType.STANDARD_GRADLE_KAFKA) {
138
+ this.grantPermissionsForKafkaIntegration(gradlebuild, 'BranchKafkaIntegrationPolicy');
139
+ }
127
140
  // Vulnerability Pipeline
128
141
  const vulnerabilityBuild = new build_project_1.RioGradleCodeBuildProject(this, 'VulnerabilityChecks', {
129
142
  input: inputMasterTriggerFile,
130
- partialBuildSpec: this.loadBuildSpecFromFile(path.resolve(__dirname, 'buildspec-vulnerability-checks.yaml')),
143
+ partialBuildSpec: this.loadBuildSpecFromFile(path.resolve(__dirname, 'buildspecs/buildspec-vulnerability-checks.yaml')),
131
144
  buildEnvironment: (_f = props === null || props === void 0 ? void 0 : props.codeBuildOptions) === null || _f === void 0 ? void 0 : _f.buildEnvironment,
132
145
  hostedZoneName: hostedZone.zoneName,
133
146
  serviceName: props.serviceName,
@@ -167,6 +180,21 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
167
180
  expiration: aws_cdk_lib_1.Duration.days(90),
168
181
  });
169
182
  }
183
+ resolveDefaultBuildSpec(pipelineType) {
184
+ switch (pipelineType) {
185
+ case PipelineType.STANDARD_GRADLE: return path.resolve(__dirname, 'buildspecs/buildspec.yaml');
186
+ case PipelineType.STANDARD_GRADLE_KAFKA: return path.resolve(__dirname, 'buildspecs/buildspec_kafka.yaml');
187
+ }
188
+ }
189
+ grantPermissionsForKafkaIntegration(buildProject, policyId) {
190
+ const buildProjectRole = buildProject.project.role;
191
+ if (buildProjectRole) {
192
+ buildProjectRole.addManagedPolicy(aws_iam_1.ManagedPolicy.fromManagedPolicyArn(this, policyId, aws_cdk_lib_1.Fn.importValue('kafka-integration-policy-arn')));
193
+ }
194
+ else {
195
+ throw Error(`Could not add managed policy for kafka-integration to CodeBuild project of ${buildProject.id} due to missing role.`);
196
+ }
197
+ }
170
198
  loadBuildSpecFromFile(buildSpecPath) {
171
199
  return aws_codebuild_1.BuildSpec.fromObject(yaml.load(fs.readFileSync(buildSpecPath, { encoding: 'utf-8' })));
172
200
  }
@@ -184,4 +212,4 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
184
212
  exports.PipelineStack = PipelineStack;
185
213
  _a = JSII_RTTI_SYMBOL_1;
186
214
  PipelineStack[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.PipelineStack", version: "0.0.0" };
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1DQUFtQztBQUNuQyw2Q0FBeUU7QUFDekUsNkRBQXdFO0FBQ3hFLDZEQUE2RDtBQUM3RCw2RUFBNkU7QUFDN0UsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCx5Q0FBeUM7QUFDekMsMkNBQTJDO0FBQzNDLG1EQUFtRDtBQUNuRCxxREFBc0Q7QUFFdEQsZ0NBQWdDO0FBQ2hDLHNDQUFzQztBQUN0QywwQ0FBaUU7QUFDakUsaUVBQThEO0FBQzlELDJEQUFrRDtBQUNsRCxtREFBNEQ7QUFDNUQseURBQWdIO0FBMEZoSCxJQUFZLFlBZ0JYO0FBaEJELFdBQVksWUFBWTtJQUV0Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxtREFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBaEJXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBZ0J2QjtBQWNELE1BQWEsYUFBYyxTQUFRLG1CQUFLO0lBVXRDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7O1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLDZCQUE2QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGdCQUFFLENBQUMsV0FBVyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFD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QUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxFQUFFO1lBQ3RGLFlBQVksRUFBRSxzQkFBc0I7WUFDcEMsWUFBWSxFQUFFLDJCQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ2xFLFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZO2FBQ3RDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O0FBakxILHNDQWtMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRHVyYXRpb24sIEZuLCBSZWZlcmVuY2UsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRTcGVjIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmVfYWN0aW9ucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lLWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgKiBhcyByaW8gZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHsgQ2xhaWRvbWV0ZXIsIENsYWlkb21ldGVyUHJvZHVjdCB9IGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IFVwcGVyVG9Mb3dlciB9IGZyb20gJy4uLy4uLy4uL3dhdGNoZnVsL3VwcGVyVG9Mb3dlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gJy4vYXBwbGljYXRpb24tc3RhZ2UnO1xuaW1wb3J0IHsgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCB9IGZyb20gJy4vYnVpbGQtcHJvamVjdCc7XG5pbXBvcnQgeyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0LCBEYXRhRG9nUGlwZWxpbmVFcnJvckFsZXJ0Rm9yVnVsbmVyYWJpbGl0eUNoZWNrcyB9IGZyb20gJy4vZGF0YWRvZy1tb25pdG9ycyc7XG5cbi8qKlxuICAqIEBzdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhpcyBoYXMgdG8gYmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcmVwb3NpdG9yeSBhcyB0aGUgczMgdHJpZ2dlciBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJpdGJ1Y2tldC1pbnRlZ3JhdGlvbiB1c2VzIHRoaXMgYXMgYSBwcmVmaXhcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIFNFUlZJQ0VfTkFNRSBpbiB0aGUgQ29kZUJ1aWxkU3RlcFxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgaW4gdGhlIEFwcFN0YWNrUHJvcHMgaW4gdGhlIGFwcFN0YWNrRmFjdG9yeVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgYXMgc3RhY2tOYW1lIHByb3BlcnR5IGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnkuIEkuZS4gdGhlIHN0YWNrIGlzIG5hbWVkIGFmdGVyIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGhhbmRlZCBvdmVyIHRvIGFsbCBEYXRhZG9nIG1vbml0b3JzXG4gICAqIC0gUklPIGNvbnZlbnRpb24gaXMgdGhhdCB1cGxvYWRlZCBsaWNlbnNlLWNoZWNrLWZpbGVzIGFyZSBuYW1lZCBhZnRlciB0aGUgc2VydmljZSwgaS5lLiBzZXJ2aWNlTmFtZS50eHRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhcHBTdGFjayB0byBiZSBkZXBsb3llZC5cbiAgICpcbiAgICogVGhpcyBhY3RzIGFzIGEgd3JhcHBlciBmb3IgYWxsIHJlc291cmNlcyB5b3Ugd2FudCB0byBkZXBsb3kgdmlhIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFN0YWNrRmFjdG9yeTogSUFwcFN0YWNrRmFjdG9yeTtcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVUeXBlOiBQaXBlbGluZVR5cGU7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gc2VjcmV0cyBmaWxlIGNvbnRhaW5pbmcgZW5jcnlwdGVkIHNlY3JldHMuXG4gICAqXG4gICAqIFRoZSBSaW9TZWNyZXRzRGVwbG95U3RlcCBpcyBhZGRlZCBwcmlvciB0byBkZXBsb3ltZW50IG9mIHRoZSBBcHBTdGFjayBpZiBhIHBhdGggaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIE5vIHNlY3JldHMgYXJlIGRlcGxveWVkIGlmIG5vIHBhdGggaXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzRGVwbG95U3RlcFByb3BzPzogUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHM7XG5cbiAgLyoqXG4gICAqIENvZGVCdWlsZCBvcHRpb25zIG92ZXJyaWRpbmcgdGhlIHJpby1zcGVjaWZpYyBkZWZhdWx0cy5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVCdWlsZE9wdGlvbnM/OiBDb2RlQnVpbGRPcHRpb25zO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGludGVyZmFjZSB0byBjcmVhdGUgdGhlIEFwcFN0YWNrIHdpdGhpbiB0aGUgc3BlY2lmaWMgc2NvcGVcbiAqXG4gKiBTaW1wbHkgcGxhY2UgdGhlIEFwcFN0YWNrIGNyZWF0aW9uIGludG8gdGhlIGNyZWF0ZS1tZXRob2Q6XG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSBlLmcuIHdpdGhpbiBBcHBsaWNhdGlvblByb3BzIGFzIEpTT05PYmplY3Q6XG4gKiB7IGNyZWF0ZTogKGNvbnN0cnVjdCwgcHJvcHMpID0+IG5ldyBTdGFjayhjb25zdHJ1Y3QsICdBcHBTdGFjaycsIHByb3BzKSB9XG4gKlxuICogLy8gb3Igc2ltcGx5IGFzIGNsYXNzIGludGVyZmFjZSB3aXRoaW4geW91ciBzdGFjayBpbXBsZW1lbnRhdGlvbjpcbiAqIGNsYXNzIFBpcGVsaW5lU3RhZ2UgZXh0ZW5kcyBTdGFnZSBpbXBsZW1lbnRzIElBcHBTdGFja0ZhY3Rvcnkge1xuICogICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhZ2VQcm9wcykge1xuICogICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICogICAgIC8vIHlvdXIgc3RhZ2UgZGVmaW5pdGlvbVxuICogICB9XG4gKlxuICogICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkIHtcbiAqICAgICAvLyBhcHAgc3RhY2sgaW5pdGlhdGlvbiBnb2VzIGluIGhlcmVcbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTdGFja0ZhY3Rvcnkge1xuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QsIGJlaW5nIGludm9rZWQgd2l0aCB0aGUgc3BlY2lmaWMgc2NvcGUgZHVyaW5nIHBpcGVsaW5lIGluc3RhbnRpYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBwYXJlbnQgY29uc3RydWN0IGZvciB0aGUgYXBwIHN0YWNrXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgYXBwIHN0YWNrcyBwcm9wZXJ0aWVzXG4gICAqL1xuICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMgKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RlZCBwcm9wZXJ0aWVzIGJlaW5nIGhhbmRlZCBvdmVyIHRvIFJpb1NlY3JldHNEZXBsb3lTdGVwLlxuICpcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMge1xuICByZWFkb25seSBzZWNyZXRzRmlsZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gUGlwZWxpbmVUeXBlIHtcblxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjay4gQmUgYXdhcmU6IFRoZSBwcm92aWRlZCBzZXJ2aWNlIHdvbid0IGhhdmUgYWNjZXNzIHRvIEthZmthLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZm9yIGEgZ3JhZGxlIHByb2plY3QuIFRoaXMgYnVpbGRzcGVjLnlhbWwgaXMgdXNlZCBmb3IgYm90aCB0aGUgbWFpbiBhbmRcbiAgICogYnJhbmNoIHBpcGVsaW5lIGFuZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzXG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2hlY2tMaWNlbnNlc1wiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXIuXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICovXG4gIFNUQU5EQVJEX0dSQURMRSA9ICdTVEFOREFSRF9HUkFETEUnLFxufVxuXG4vKipcbiAqIEBwYXJhbSBwYXJ0aWFsQnVpbGRTcGVjUGF0aCBQYXRoIHRvIGEgY3VzdG9tIGJ1aWxkLXNwZWMgZmlsZSB0byB1c2UgZm9yIHRoZSBtYWluIGFuZCBicmFuY2ggcGlwZWxpbmUuXG4gKiBBIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIGZpdHRpbmcgdGhlIHBpcGVsaW5lVHlwZSBpcyB1c2VkIGlmIG5vdCBwcm92aWRlZC5cbiAqIEBwYXJhbSBidWlsZEVudmlyb25tZW50IEN1c3RvbSBDb2RlQnVpbGQgYnVpbGQgZW52aXJvbm1lbnQgb3ZlcnJpZGluZyB0aGUgcmlvLXNwZWNpZmljIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgYXJlOlxuICogICAgICAgICAgYnVpbGRJbWFnZTogQU1BWk9OX0xJTlVYXzJfNFxuICogICAgICAgICAgY29tcHV0ZVR5cGU6IExBUkdFXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcnRpYWxCdWlsZFNwZWNQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBidWlsZEVudmlyb25tZW50PzogQnVpbGRFbnZpcm9ubWVudDtcbn1cblxuZXhwb3J0IGNsYXNzIFBpcGVsaW5lU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIHByaXZhdGUgc3RhdGljIGFkZExpZmVjeWNsZVJ1bGVBcnRpZmFjdEJ1Y2tldChwaXBlbGluZTogcGlwZWxpbmVzLkNvZGVQaXBlbGluZSkge1xuICAgIGNvbnN0IGFydGlmYWN0c0J1Y2tldCA9IHBpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0O1xuICAgIChhcnRpZmFjdHNCdWNrZXQgYXMgczMuQnVja2V0KS5hZGRMaWZlY3ljbGVSdWxlKHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBleHBpcmF0aW9uOiBEdXJhdGlvbi5kYXlzKDkwKSxcbiAgICB9KTtcbiAgfVxuXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgLy8gQ3JlYXRpbmcgdGhlIG1haW4gcGlwZWxpbmVcbiAgICBjb25zdCBidWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ1RyaWdnZXJCdWNrZXQnLCBGbi5pbXBvcnRWYWx1ZSgnYml0YnVja2V0LWludGVncmF0aW9uLXMzLWJ1Y2tldCcpKTtcbiAgICBjb25zdCBob3N0ZWRab25lID0gcmlvLlJpb0xhbmRpbmdab25lLmdldERlZmF1bHRIb3N0ZWRab25lKHRoaXMpO1xuICAgIGNvbnN0IGlucHV0TWFzdGVyVHJpZ2dlckZpbGUgPSBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLnMzKGJ1Y2tldCwgYCR7cHJvcHMuc2VydmljZU5hbWV9L3RyaWdnZXIvJHtyaW8uVHJpZ2dlcktleS5NQVNURVJfUkVQT31gLCB7IHRyaWdnZXI6IGNvZGVwaXBlbGluZV9hY3Rpb25zLlMzVHJpZ2dlci5FVkVOVFMgfSk7XG4gICAgY29uc3QgaW5wdXRCcmFuY2hUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoYnVja2V0LCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5LkJSQU5DSF9SRVBPfWAsIHsgdHJpZ2dlcjogY29kZXBpcGVsaW5lX2FjdGlvbnMuUzNUcmlnZ2VyLkVWRU5UUyB9KTtcblxuICAgIGNvbnN0IG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICAgIHRoaXMsXG4gICAgICAnT3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXInLFxuICAgICAge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiAnL2NvbmZpZy9vc3MtbGljZW5zZXMvYnVja2V0LW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IG9zc0xpY2Vuc2VzQnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdPc3NMaWNlbnNlc0J1Y2tldCcsXG4gICAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5zdHJpbmdWYWx1ZSxcbiAgICApO1xuICAgIGNvbnN0IHNlcnZpY2VLZXlzdG9yZVBhc3N3b3JkID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnS2V5c3RvcmVQYXNzd29yZCcsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6IGAvY29uZmlnLyR7cHJvcHMuc2VydmljZU5hbWV9L3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9KTtcbiAgICBjb25zdCBhY2NvdW50TmFtZVBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ0FjY291bnROYW1lUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL2FjY291bnQvbmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBuaXN0RGF0YU1pcnJvclVybCA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ05pc3REYXRhTWlycm9yVXJsJyxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvbmlzdC1kYXRhLW1pcnJvci91cmwnLCB2ZXJzaW9uOiAxLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgZ3JhZGxlYnVpbGQgPSBuZXcgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnR3JhZGxlQnVpbGQnLCB7XG4gICAgICBpbnB1dDogaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIGNka091dERpcmVjdG9yeTogJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoIHx8IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdidWlsZHNwZWMueWFtbCcpKSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5idWlsZEVudmlyb25tZW50LFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHRoaXMsICdQaXBlbGluZScsIHtcbiAgICAgIHN5bnRoOiBncmFkbGVidWlsZCxcbiAgICB9KTtcblxuICAgIC8vIENsb3VkQXNzZW1ibHlBcnRpZmFjdHMgbXVzdCBiZSBzbWFsbGVyIHRoYW4gMjU2TUIuIER1ZSB0byB0aGUgZ3JhZGxlIGFydGlmYWN0IHdlIGFyZSBleGNlZWRpbmcgdGhpcyBsaW1pdCBhbmQgcGlwZWxpbmUgZmFpbHMgaW4gZGVwbG95bWVudCBzdGVwLlxuICAgIC8vIElzc3VlIGlzIGtub3duIGFuZCBub3QgZml4ZWQgZm9yIGFscmVhZHkgc29tZSB5ZWFycy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICAvLyBEaXJ0eSBmaXg6IEFzc2V0cyBhcmUgYWxyZWFkeSB1cGxvYWRlZCBhbmQgdGh1cyBub3QgbmVlZGVkLiBSZW1vdmUgdGhlbSBmcm9tIHBpcGVsaW5lIGFydGlmYWN0LlxuICAgIGNvbnN0IHN0cmlwQXNzZXRzU3RlcCA9IG5ldyBDb2RlQnVpbGRTdGVwKFxuICAgICAgJ1N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5Jywge1xuICAgICAgICBpbnB1dDogcGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICAnWklQX0FSQ0hJVkU9JChiYXNlbmFtZSAkUzNfUEFUSCknLFxuICAgICAgICAgICdybSAtcmZ2IGFzc2V0LionLFxuICAgICAgICAgICd6aXAgLXIgLXEgLUEgJFpJUF9BUkNISVZFIConLFxuICAgICAgICAgICdhd3MgczMgY3AgJFpJUF9BUkNISVZFIHMzOi8vJFMzX1BBVEgnLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcGlwZWxpbmUuYWRkV2F2ZSgnQmVmb3JlRGVwbG95JywgeyBwcmU6IFtzdHJpcEFzc2V0c1N0ZXBdIH0pO1xuXG4gICAgcGlwZWxpbmUuYWRkU3RhZ2UobmV3IEFwcGxpY2F0aW9uKHRoaXMsICdEZXBsb3lBcHBsaWNhdGlvblN0YWNrcycsIHtcbiAgICAgIGFwcFN0YWNrRmFjdG9yeTogcHJvcHMuYXBwU3RhY2tGYWN0b3J5LFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbjogY29kZXBpcGVsaW5lLkdsb2JhbFZhcmlhYmxlcy5leGVjdXRpb25JZCxcbiAgICB9KSwge1xuICAgICAgcHJlOiBwcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzID8gW1xuICAgICAgICBuZXcgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwKHRoaXMsICdEZXBsb3lTZWNyZXRzJywgeyAuLi5wcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzLCBpbnB1dDogaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSB9KSxcbiAgICAgIF0gOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnUGlwZWxpbmVTY2hlZHVsZScsIHsgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKCdjcm9uKDAgOSA/ICogMiMxICopJykgfSk7XG4gICAgcnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKHBpcGVsaW5lLnBpcGVsaW5lKSk7XG5cbiAgICBQaXBlbGluZVN0YWNrLmFkZExpZmVjeWNsZVJ1bGVBcnRpZmFjdEJ1Y2tldChwaXBlbGluZSk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoZ3JhZGxlYnVpbGQpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChncmFkbGVidWlsZCk7XG4gICAgc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKGdyYWRsZWJ1aWxkKTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoZ3JhZGxlYnVpbGQpO1xuICAgIHBpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKHN0cmlwQXNzZXRzU3RlcC5wcm9qZWN0KTtcblxuICAgIC8vIEJyYW5jaCBwaXBlbGluZVxuICAgIGNvbnN0IGJyYW5jaEJ1aWxkID0gbmV3IFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3QodGhpcywgJ0JyYW5jaEJ1aWxkJywge1xuICAgICAgaW5wdXQ6IGlucHV0QnJhbmNoVHJpZ2dlckZpbGUsXG4gICAgICBjZGtPdXREaXJlY3Rvcnk6ICdpbmZyYXN0cnVjdHVyZS9jZGsub3V0JyxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCB8fCBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnYnVpbGRzcGVjLnlhbWwnKSksXG4gICAgICBidWlsZEVudmlyb25tZW50OiBwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8uYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgIH0pO1xuICAgIGNvbnN0IGJyYW5jaFBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUodGhpcywgJ0JyYW5jaFBpcGVsaW5lJywge1xuICAgICAgc3ludGg6IGJyYW5jaEJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICBicmFuY2hQaXBlbGluZS5hZGRXYXZlKCdCcmFuY2hCdWlsZCcpLmFkZFBvc3QoYnJhbmNoQnVpbGQpO1xuICAgIGJyYW5jaFBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIFBpcGVsaW5lU3RhY2suYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KGJyYW5jaFBpcGVsaW5lKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZShicmFuY2hCdWlsZCk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICBzZXJ2aWNlS2V5c3RvcmVQYXNzd29yZC5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIGFjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG5cbiAgICAvLyBWdWxuZXJhYmlsaXR5IFBpcGVsaW5lXG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eUJ1aWxkID0gbmV3IFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3QodGhpcywgJ1Z1bG5lcmFiaWxpdHlDaGVja3MnLCB7XG4gICAgICBpbnB1dDogaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdidWlsZHNwZWMtdnVsbmVyYWJpbGl0eS1jaGVja3MueWFtbCcpKSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5idWlsZEVudmlyb25tZW50LFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZScsIHtcbiAgICAgIHN5bnRoOiB2dWxuZXJhYmlsaXR5QnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZS5hZGRXYXZlKCdWdWxuZXJhYmlsaXR5Q2hlY2tzJykuYWRkUG9zdCh2dWxuZXJhYmlsaXR5QnVpbGQpO1xuICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG4gICAgbmlzdERhdGFNaXJyb3JVcmwuZ3JhbnRSZWFkKHZ1bG5lcmFiaWxpdHlCdWlsZCk7XG5cbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5UnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnVnVsbmVyYWJpbGl0eVBpcGVsaW5lU2NoZWR1bGUnLCB7IHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbignY3JvbigwIDUgPyAqIE1PTi1GUkkgKiknKSB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKHZ1bG5lcmFiaWxpdHlQaXBlbGluZS5waXBlbGluZSkpO1xuXG4gICAgUGlwZWxpbmVTdGFjay5hZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQodnVsbmVyYWJpbGl0eVBpcGVsaW5lKTtcblxuICAgIG5ldyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0KHRoaXMsICdEYXRhZG9nUGlwZWxpbmVFcnJvck1vbml0b3InLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBwaXBlbGluZU5hbWU6IHRoaXMucmVuYW1lUGlwZWxpbmVUb0xvd2VyQ2FzZShwaXBlbGluZSksXG4gICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICB9KTtcblxuICAgIG5ldyBEYXRhRG9nUGlwZWxpbmVFcnJvckFsZXJ0Rm9yVnVsbmVyYWJpbGl0eUNoZWNrcyh0aGlzLCAnRGF0YURvZ1BpcGVsaW5lRXJyb3JGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzTW9uaXRvcicsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHBpcGVsaW5lTmFtZTogdGhpcy5yZW5hbWVQaXBlbGluZVRvTG93ZXJDYXNlKHZ1bG5lcmFiaWxpdHlQaXBlbGluZSksXG4gICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICB9KTtcblxuICAgIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgICBuZXcgQ2xhaWRvbWV0ZXIodGhpcywgJ0NsYWlkb21ldGVyJywge1xuICAgICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICAgIGZlYXR1cmUsXG4gICAgICB2ZXJzaW9uOiAnMC4wLjMnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQnVpbGRTcGVjRnJvbUZpbGUoYnVpbGRTcGVjUGF0aDogc3RyaW5nKTogQnVpbGRTcGVjIHtcbiAgICByZXR1cm4gQnVpbGRTcGVjLmZyb21PYmplY3QoeWFtbC5sb2FkKGZzLnJlYWRGaWxlU3luYyhidWlsZFNwZWNQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKSBhcyBPYmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5hbWVQaXBlbGluZVRvTG93ZXJDYXNlKHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKTogUmVmZXJlbmNlIHtcbiAgICBjb25zdCB1cHBlclRvTG93ZXJDciA9IG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgYCR7cGlwZWxpbmUubm9kZS5pZH0tVXBwZXJUb0xvd2VyYCwge1xuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpVcHBlclRvTG93ZXInLFxuICAgICAgc2VydmljZVRva2VuOiBVcHBlclRvTG93ZXIuZ2V0T3JDcmVhdGUodGhpcykucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBVcHBlcjogcGlwZWxpbmUucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdXBwZXJUb0xvd2VyQ3IuZ2V0QXR0KCdMb3dlcicpO1xuICB9XG59XG4iXX0=
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1DQUFtQztBQUNuQyw2Q0FBeUU7QUFDekUsNkRBQXdFO0FBQ3hFLDZEQUE2RDtBQUM3RCw2RUFBNkU7QUFDN0UsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCxpREFBb0Q7QUFDcEQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxtREFBbUQ7QUFDbkQscURBQXNEO0FBRXRELGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsMENBQWlFO0FBQ2pFLGlFQUE4RDtBQUM5RCwyREFBa0Q7QUFDbEQsbURBQTREO0FBQzVELHlEQUFnSDtBQTBGaEgsSUFBWSxZQWlCWDtBQWpCRCxXQUFZLFlBQVk7SUFFdEI7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsbURBQW1DLENBQUE7SUFDbkMsK0RBQStDLENBQUE7QUFDakQsQ0FBQyxFQWpCVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQWlCdkI7QUFjRCxNQUFhLGFBQWMsU0FBUSxtQkFBSztJQVV0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCOztRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4Qiw2QkFBNkI7UUFDN0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7UUFDbEgsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztR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RixZQUFZLEVBQUUsc0JBQXNCO1lBQ3BDLFlBQVksRUFBRSwyQkFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUNsRSxVQUFVLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWTthQUN0QztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDOztBQWpOSCxzQ0FrTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IER1cmF0aW9uLCBGbiwgUmVmZXJlbmNlLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEJ1aWxkRW52aXJvbm1lbnQsIEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lX2FjdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0ICogYXMgcmlvIGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IENsYWlkb21ldGVyLCBDbGFpZG9tZXRlclByb2R1Y3QgfSBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBVcHBlclRvTG93ZXIgfSBmcm9tICcuLi8uLi8uLi93YXRjaGZ1bC91cHBlclRvTG93ZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICcuL2FwcGxpY2F0aW9uLXN0YWdlJztcbmltcG9ydCB7IFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3QgfSBmcm9tICcuL2J1aWxkLXByb2plY3QnO1xuaW1wb3J0IHsgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCwgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3MgfSBmcm9tICcuL2RhdGFkb2ctbW9uaXRvcnMnO1xuXG4vKipcbiAgKiBAc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgKiAtIFRoaXMgaGFzIHRvIGJlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHJlcG9zaXRvcnkgYXMgdGhlIHMzIHRyaWdnZXIgZmlsZSBjcmVhdGVkIGJ5IHRoZSBiaXRidWNrZXQtaW50ZWdyYXRpb24gdXNlcyB0aGlzIGFzIGEgcHJlZml4XG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBTRVJWSUNFX05BTUUgaW4gdGhlIENvZGVCdWlsZFN0ZXBcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnlcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIHN0YWNrTmFtZSBwcm9wZXJ0eSBpbiB0aGUgQXBwU3RhY2tQcm9wcyBpbiB0aGUgYXBwU3RhY2tGYWN0b3J5LiBJLmUuIHRoZSBzdGFjayBpcyBuYW1lZCBhZnRlciB0aGUgc2VydmljZVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBoYW5kZWQgb3ZlciB0byBhbGwgRGF0YWRvZyBtb25pdG9yc1xuICAgKiAtIFJJTyBjb252ZW50aW9uIGlzIHRoYXQgdXBsb2FkZWQgbGljZW5zZS1jaGVjay1maWxlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHNlcnZpY2UsIGkuZS4gc2VydmljZU5hbWUudHh0XG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlciBmb3IgYXBwU3RhY2sgdG8gYmUgZGVwbG95ZWQuXG4gICAqXG4gICAqIFRoaXMgYWN0cyBhcyBhIHdyYXBwZXIgZm9yIGFsbCByZXNvdXJjZXMgeW91IHdhbnQgdG8gZGVwbG95IHZpYSB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSBhcHBTdGFja0ZhY3Rvcnk6IElBcHBTdGFja0ZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgd2hpY2gga2luZCBvZiBwaXBlbGluZSBpcyBkZXBsb3llZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHNlY3JldHMgZmlsZSBjb250YWluaW5nIGVuY3J5cHRlZCBzZWNyZXRzLlxuICAgKlxuICAgKiBUaGUgUmlvU2VjcmV0c0RlcGxveVN0ZXAgaXMgYWRkZWQgcHJpb3IgdG8gZGVwbG95bWVudCBvZiB0aGUgQXBwU3RhY2sgaWYgYSBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBObyBzZWNyZXRzIGFyZSBkZXBsb3llZCBpZiBubyBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c0RlcGxveVN0ZXBQcm9wcz86IFBpcGVsaW5lU3RhY2tSaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgb3B0aW9ucyBvdmVycmlkaW5nIHRoZSByaW8tc3BlY2lmaWMgZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBjb2RlQnVpbGRPcHRpb25zPzogQ29kZUJ1aWxkT3B0aW9ucztcbn1cblxuLyoqXG4gKiBQcm92aWRlciBpbnRlcmZhY2UgdG8gY3JlYXRlIHRoZSBBcHBTdGFjayB3aXRoaW4gdGhlIHNwZWNpZmljIHNjb3BlXG4gKlxuICogU2ltcGx5IHBsYWNlIHRoZSBBcHBTdGFjayBjcmVhdGlvbiBpbnRvIHRoZSBjcmVhdGUtbWV0aG9kOlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgZS5nLiB3aXRoaW4gQXBwbGljYXRpb25Qcm9wcyBhcyBKU09OT2JqZWN0OlxuICogeyBjcmVhdGU6IChjb25zdHJ1Y3QsIHByb3BzKSA9PiBuZXcgU3RhY2soY29uc3RydWN0LCAnQXBwU3RhY2snLCBwcm9wcykgfVxuICpcbiAqIC8vIG9yIHNpbXBseSBhcyBjbGFzcyBpbnRlcmZhY2Ugd2l0aGluIHlvdXIgc3RhY2sgaW1wbGVtZW50YXRpb246XG4gKiBjbGFzcyBQaXBlbGluZVN0YWdlIGV4dGVuZHMgU3RhZ2UgaW1wbGVtZW50cyBJQXBwU3RhY2tGYWN0b3J5IHtcbiAqICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWdlUHJvcHMpIHtcbiAqICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAqICAgICAvLyB5b3VyIHN0YWdlIGRlZmluaXRpb21cbiAqICAgfVxuICpcbiAqICAgY3JlYXRlKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBcHBTdGFja1Byb3BzKTogdm9pZCB7XG4gKiAgICAgLy8gYXBwIHN0YWNrIGluaXRpYXRpb24gZ29lcyBpbiBoZXJlXG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXBwU3RhY2tGYWN0b3J5IHtcbiAgLyoqXG4gICAqIEZhY3RvcnkgbWV0aG9kLCBiZWluZyBpbnZva2VkIHdpdGggdGhlIHNwZWNpZmljIHNjb3BlIGR1cmluZyBwaXBlbGluZSBpbnN0YW50aWF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSB0aGUgcGFyZW50IGNvbnN0cnVjdCBmb3IgdGhlIGFwcCBzdGFja1xuICAgKiBAcGFyYW0gcHJvcHMgdGhlIGFwcCBzdGFja3MgcHJvcGVydGllc1xuICAgKi9cbiAgY3JlYXRlKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBcHBTdGFja1Byb3BzICk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VsZWN0ZWQgcHJvcGVydGllcyBiZWluZyBoYW5kZWQgb3ZlciB0byBSaW9TZWNyZXRzRGVwbG95U3RlcC5cbiAqXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFxuICogQHNlZSByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RhY2tSaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzIHtcbiAgcmVhZG9ubHkgc2VjcmV0c0ZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFBpcGVsaW5lVHlwZSB7XG5cbiAgLyoqXG4gICAqIFNlbGYtbXV0YXRpbmcgY29kZXBpcGVsaW5lIGRlcGxveWluZyB0aGUgcHJvdmlkZWQgQXBwU3RhY2suIEJlIGF3YXJlOiBUaGUgcHJvdmlkZWQgc2VydmljZSB3b24ndCBoYXZlIGFjY2VzcyB0byBLYWZrYS5cbiAgICpcbiAgICogQ29tZXMgd2l0aCBhIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIGZvciBhIGdyYWRsZSBwcm9qZWN0LiBUaGlzIGJ1aWxkc3BlYy55YW1sIGlzIHVzZWQgZm9yIGJvdGggdGhlIG1haW4gYW5kXG4gICAqIGJyYW5jaCBwaXBlbGluZSBhbmQgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBzdGVwc1xuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBsaWNlbnNlLWNoZWNrIGFuZCB1cGxvYWQgb2YgbGljZW5zZS1jaGVjay1maWxlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNoZWNrTGljZW5zZXNcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gY3JlYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG8gbWFrZSBUTFMgY29tbXVuaWNhdGlvbiBwb3NzaWJsZSwgZS5nLiB3aXRoIGEgbG9hZGJhbGFuY2VyLlxuICAgKiAtIGJ1aWxkIHRoZSBjb250YWluZXIgaW1hZ2UgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgamliQnVpbGRUYXJcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqL1xuICBTVEFOREFSRF9HUkFETEUgPSAnU1RBTkRBUkRfR1JBRExFJyxcbiAgU1RBTkRBUkRfR1JBRExFX0tBRktBID0gJ1NUQU5EQVJEX0dSQURMRV9LQUZLQScsXG59XG5cbi8qKlxuICogQHBhcmFtIHBhcnRpYWxCdWlsZFNwZWNQYXRoIFBhdGggdG8gYSBjdXN0b20gYnVpbGQtc3BlYyBmaWxlIHRvIHVzZSBmb3IgdGhlIG1haW4gYW5kIGJyYW5jaCBwaXBlbGluZS5cbiAqIEEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZml0dGluZyB0aGUgcGlwZWxpbmVUeXBlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIGJ1aWxkRW52aXJvbm1lbnQgQ3VzdG9tIENvZGVCdWlsZCBidWlsZCBlbnZpcm9ubWVudCBvdmVycmlkaW5nIHRoZSByaW8tc3BlY2lmaWMgZGVmYXVsdHMuIFRoZSBkZWZhdWx0cyBhcmU6XG4gKiAgICAgICAgICBidWlsZEltYWdlOiBBTUFaT05fTElOVVhfMl80XG4gKiAgICAgICAgICBjb21wdXRlVHlwZTogTEFSR0VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGFydGlhbEJ1aWxkU3BlY1BhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJ1aWxkRW52aXJvbm1lbnQ/OiBCdWlsZEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKSB7XG4gICAgY29uc3QgYXJ0aWZhY3RzQnVja2V0ID0gcGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQ7XG4gICAgKGFydGlmYWN0c0J1Y2tldCBhcyBzMy5CdWNrZXQpLmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoOTApLFxuICAgIH0pO1xuICB9XG5cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBDcmVhdGluZyB0aGUgbWFpbiBwaXBlbGluZVxuICAgIGNvbnN0IGJ1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnVHJpZ2dlckJ1Y2tldCcsIEZuLmltcG9ydFZhbHVlKCdiaXRidWNrZXQtaW50ZWdyYXRpb24tczMtYnVja2V0JykpO1xuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSByaW8uUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdEhvc3RlZFpvbmUodGhpcyk7XG4gICAgY29uc3QgaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoYnVja2V0LCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5Lk1BU1RFUl9SRVBPfWAsIHsgdHJpZ2dlcjogY29kZXBpcGVsaW5lX2FjdGlvbnMuUzNUcmlnZ2VyLkVWRU5UUyB9KTtcbiAgICBjb25zdCBpbnB1dEJyYW5jaFRyaWdnZXJGaWxlID0gcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZS5zMyhidWNrZXQsIGAke3Byb3BzLnNlcnZpY2VOYW1lfS90cmlnZ2VyLyR7cmlvLlRyaWdnZXJLZXkuQlJBTkNIX1JFUE99YCwgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH0pO1xuXG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL29zcy1saWNlbnNlcy9idWNrZXQtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICk7XG4gICAgY29uc3Qgc2VydmljZUtleXN0b3JlUGFzc3dvcmQgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdLZXlzdG9yZVBhc3N3b3JkJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogYC9jb25maWcvJHtwcm9wcy5zZXJ2aWNlTmFtZX0vc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IGFjY291bnROYW1lUGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnQWNjb3VudE5hbWVQYXJhbWV0ZXInLFxuICAgICAgJy9jb25maWcvYWNjb3VudC9uYW1lJyxcbiAgICApO1xuICAgIGNvbnN0IG5pc3REYXRhTWlycm9yVXJsID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICAgIHRoaXMsXG4gICAgICAnTmlzdERhdGFNaXJyb3JVcmwnLFxuICAgICAge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiAnL2NvbmZpZy9uaXN0LWRhdGEtbWlycm9yL3VybCcsIHZlcnNpb246IDEsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBncmFkbGVidWlsZCA9IG5ldyBSaW9HcmFkbGVDb2RlQnVpbGRQcm9qZWN0KHRoaXMsICdHcmFkbGVCdWlsZCcsIHtcbiAgICAgIGlucHV0OiBpbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgY2RrT3V0RGlyZWN0b3J5OiAnaW5mcmFzdHJ1Y3R1cmUvY2RrLm91dCcsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB0aGlzLmxvYWRCdWlsZFNwZWNGcm9tRmlsZShwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8ucGFydGlhbEJ1aWxkU3BlY1BhdGggfHxcbiAgICAgICAgICB0aGlzLnJlc29sdmVEZWZhdWx0QnVpbGRTcGVjKCBwcm9wcy5waXBlbGluZVR5cGUpKSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5idWlsZEVudmlyb25tZW50LFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHRoaXMsICdQaXBlbGluZScsIHtcbiAgICAgIHN5bnRoOiBncmFkbGVidWlsZCxcbiAgICB9KTtcblxuICAgIC8vIENsb3VkQXNzZW1ibHlBcnRpZmFjdHMgbXVzdCBiZSBzbWFsbGVyIHRoYW4gMjU2TUIuIER1ZSB0byB0aGUgZ3JhZGxlIGFydGlmYWN0IHdlIGFyZSBleGNlZWRpbmcgdGhpcyBsaW1pdCBhbmQgcGlwZWxpbmUgZmFpbHMgaW4gZGVwbG95bWVudCBzdGVwLlxuICAgIC8vIElzc3VlIGlzIGtub3duIGFuZCBub3QgZml4ZWQgZm9yIGFscmVhZHkgc29tZSB5ZWFycy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICAvLyBEaXJ0eSBmaXg6IEFzc2V0cyBhcmUgYWxyZWFkeSB1cGxvYWRlZCBhbmQgdGh1cyBub3QgbmVlZGVkLiBSZW1vdmUgdGhlbSBmcm9tIHBpcGVsaW5lIGFydGlmYWN0LlxuICAgIGNvbnN0IHN0cmlwQXNzZXRzU3RlcCA9IG5ldyBDb2RlQnVpbGRTdGVwKFxuICAgICAgJ1N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5Jywge1xuICAgICAgICBpbnB1dDogcGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICAnWklQX0FSQ0hJVkU9JChiYXNlbmFtZSAkUzNfUEFUSCknLFxuICAgICAgICAgICdybSAtcmZ2IGFzc2V0LionLFxuICAgICAgICAgICd6aXAgLXIgLXEgLUEgJFpJUF9BUkNISVZFIConLFxuICAgICAgICAgICdhd3MgczMgY3AgJFpJUF9BUkNISVZFIHMzOi8vJFMzX1BBVEgnLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcGlwZWxpbmUuYWRkV2F2ZSgnQmVmb3JlRGVwbG95JywgeyBwcmU6IFtzdHJpcEFzc2V0c1N0ZXBdIH0pO1xuXG4gICAgcGlwZWxpbmUuYWRkU3RhZ2UobmV3IEFwcGxpY2F0aW9uKHRoaXMsICdEZXBsb3lBcHBsaWNhdGlvblN0YWNrcycsIHtcbiAgICAgIGFwcFN0YWNrRmFjdG9yeTogcHJvcHMuYXBwU3RhY2tGYWN0b3J5LFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbjogY29kZXBpcGVsaW5lLkdsb2JhbFZhcmlhYmxlcy5leGVjdXRpb25JZCxcbiAgICB9KSwge1xuICAgICAgcHJlOiBwcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzID8gW1xuICAgICAgICBuZXcgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwKHRoaXMsICdEZXBsb3lTZWNyZXRzJywge1xuICAgICAgICAgIC4uLnByb3BzLnNlY3JldHNEZXBsb3lTdGVwUHJvcHMsXG4gICAgICAgICAgaW5wdXQ6IGlucHV0TWFzdGVyVHJpZ2dlckZpbGUsXG4gICAgICAgIH0pLFxuICAgICAgXSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBwaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBjb25zdCBydWxlID0gbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdQaXBlbGluZVNjaGVkdWxlJywgeyBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oJ2Nyb24oMCA5ID8gKiAyIzEgKiknKSB9KTtcbiAgICBydWxlLmFkZFRhcmdldChuZXcgdGFyZ2V0cy5Db2RlUGlwZWxpbmUocGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIFBpcGVsaW5lU3RhY2suYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KHBpcGVsaW5lKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZShncmFkbGVidWlsZCk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuZ3JhbnRSZWFkKGdyYWRsZWJ1aWxkKTtcbiAgICBzZXJ2aWNlS2V5c3RvcmVQYXNzd29yZC5ncmFudFJlYWQoZ3JhZGxlYnVpbGQpO1xuICAgIGFjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChncmFkbGVidWlsZCk7XG4gICAgaWYgKHByb3BzLnBpcGVsaW5lVHlwZSA9PT0gUGlwZWxpbmVUeXBlLlNUQU5EQVJEX0dSQURMRV9LQUZLQSkge1xuICAgICAgdGhpcy5ncmFudFBlcm1pc3Npb25zRm9yS2Fma2FJbnRlZ3JhdGlvbihncmFkbGVidWlsZCwgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knKTtcbiAgICB9XG4gICAgcGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoc3RyaXBBc3NldHNTdGVwLnByb2plY3QpO1xuXG4gICAgLy8gQnJhbmNoIHBpcGVsaW5lXG4gICAgY29uc3QgYnJhbmNoQnVpbGQgPSBuZXcgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnQnJhbmNoQnVpbGQnLCB7XG4gICAgICBpbnB1dDogaW5wdXRCcmFuY2hUcmlnZ2VyRmlsZSxcbiAgICAgIGNka091dERpcmVjdG9yeTogJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoIHx8XG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGVmYXVsdEJ1aWxkU3BlYyhwcm9wcy5waXBlbGluZVR5cGUpKSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5idWlsZEVudmlyb25tZW50LFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgYnJhbmNoUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZSh0aGlzLCAnQnJhbmNoUGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogYnJhbmNoQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIGJyYW5jaFBpcGVsaW5lLmFkZFdhdmUoJ0JyYW5jaEJ1aWxkJykuYWRkUG9zdChicmFuY2hCdWlsZCk7XG4gICAgYnJhbmNoUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgUGlwZWxpbmVTdGFjay5hZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQoYnJhbmNoUGlwZWxpbmUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKGJyYW5jaEJ1aWxkKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIHNlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICBpZiAocHJvcHMucGlwZWxpbmVUeXBlID09PSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfR1JBRExFX0tBRktBKSB7XG4gICAgICB0aGlzLmdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKGdyYWRsZWJ1aWxkLCAnQnJhbmNoS2Fma2FJbnRlZ3JhdGlvblBvbGljeScpO1xuICAgIH1cblxuICAgIC8vIFZ1bG5lcmFiaWxpdHkgUGlwZWxpbmVcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5QnVpbGQgPSBuZXcgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnVnVsbmVyYWJpbGl0eUNoZWNrcycsIHtcbiAgICAgIGlucHV0OiBpbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2J1aWxkc3BlY3MvYnVpbGRzcGVjLXZ1bG5lcmFiaWxpdHktY2hlY2tzLnlhbWwnKSksXG4gICAgICBidWlsZEVudmlyb25tZW50OiBwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8uYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgIH0pO1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHRoaXMsICdWdWxuZXJhYmlsaXR5UGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogdnVsbmVyYWJpbGl0eUJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmUuYWRkV2F2ZSgnVnVsbmVyYWJpbGl0eUNoZWNrcycpLmFkZFBvc3QodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgIG5pc3REYXRhTWlycm9yVXJsLmdyYW50UmVhZCh2dWxuZXJhYmlsaXR5QnVpbGQpO1xuXG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZVNjaGVkdWxlJywgeyBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oJ2Nyb24oMCA1ID8gKiBNT04tRlJJICopJykgfSk7XG4gICAgdnVsbmVyYWJpbGl0eVJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIFBpcGVsaW5lU3RhY2suYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KHZ1bG5lcmFiaWxpdHlQaXBlbGluZSk7XG5cbiAgICBuZXcgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCh0aGlzLCAnRGF0YWRvZ1BpcGVsaW5lRXJyb3JNb25pdG9yJywge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLnJlbmFtZVBpcGVsaW5lVG9Mb3dlckNhc2UocGlwZWxpbmUpLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3ModGhpcywgJ0RhdGFEb2dQaXBlbGluZUVycm9yRm9yVnVsbmVyYWJpbGl0eUNoZWNrc01vbml0b3InLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBwaXBlbGluZU5hbWU6IHRoaXMucmVuYW1lUGlwZWxpbmVUb0xvd2VyQ2FzZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUpLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBbZmVhdHVyZSwgcGFja2FnZU5hbWVdID0gX19kaXJuYW1lLnNwbGl0KHBhdGguc2VwKS5yZXZlcnNlKCk7XG4gICAgbmV3IENsYWlkb21ldGVyKHRoaXMsICdDbGFpZG9tZXRlcicsIHtcbiAgICAgIHByb2R1Y3Q6IENsYWlkb21ldGVyUHJvZHVjdC5DREtfQ09OVFJJQlVUSU9OLFxuICAgICAgcGFja2FnZU5hbWUsXG4gICAgICBmZWF0dXJlLFxuICAgICAgdmVyc2lvbjogJzAuMC4zJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURlZmF1bHRCdWlsZFNwZWMocGlwZWxpbmVUeXBlOiBQaXBlbGluZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHBpcGVsaW5lVHlwZSkge1xuICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfR1JBRExFOiByZXR1cm4gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2J1aWxkc3BlY3MvYnVpbGRzcGVjLnlhbWwnKTtcbiAgICAgIGNhc2UgUGlwZWxpbmVUeXBlLlNUQU5EQVJEX0dSQURMRV9LQUZLQTogcmV0dXJuIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdidWlsZHNwZWNzL2J1aWxkc3BlY19rYWZrYS55YW1sJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBncmFudFBlcm1pc3Npb25zRm9yS2Fma2FJbnRlZ3JhdGlvbihidWlsZFByb2plY3Q6IFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3QsIHBvbGljeUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWlsZFByb2plY3RSb2xlID0gYnVpbGRQcm9qZWN0LnByb2plY3Qucm9sZTtcbiAgICBpZiAoYnVpbGRQcm9qZWN0Um9sZSkge1xuICAgICAgYnVpbGRQcm9qZWN0Um9sZS5hZGRNYW5hZ2VkUG9saWN5KFxuICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21NYW5hZ2VkUG9saWN5QXJuKHRoaXMsXG4gICAgICAgICAgcG9saWN5SWQsXG4gICAgICAgICAgRm4uaW1wb3J0VmFsdWUoJ2thZmthLWludGVncmF0aW9uLXBvbGljeS1hcm4nKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKGBDb3VsZCBub3QgYWRkIG1hbmFnZWQgcG9saWN5IGZvciBrYWZrYS1pbnRlZ3JhdGlvbiB0byBDb2RlQnVpbGQgcHJvamVjdCBvZiAke2J1aWxkUHJvamVjdC5pZH0gZHVlIHRvIG1pc3Npbmcgcm9sZS5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRCdWlsZFNwZWNGcm9tRmlsZShidWlsZFNwZWNQYXRoOiBzdHJpbmcpOiBCdWlsZFNwZWMge1xuICAgIHJldHVybiBCdWlsZFNwZWMuZnJvbU9iamVjdCh5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKGJ1aWxkU3BlY1BhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIGFzIE9iamVjdCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmFtZVBpcGVsaW5lVG9Mb3dlckNhc2UocGlwZWxpbmU6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUpOiBSZWZlcmVuY2Uge1xuICAgIGNvbnN0IHVwcGVyVG9Mb3dlckNyID0gbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtwaXBlbGluZS5ub2RlLmlkfS1VcHBlclRvTG93ZXJgLCB7XG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OlVwcGVyVG9Mb3dlcicsXG4gICAgICBzZXJ2aWNlVG9rZW46IFVwcGVyVG9Mb3dlci5nZXRPckNyZWF0ZSh0aGlzKS5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFVwcGVyOiBwaXBlbGluZS5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiB1cHBlclRvTG93ZXJDci5nZXRBdHQoJ0xvd2VyJyk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "main": "lib/index.js",
17
17
  "license": "Apache-2.0",
18
- "version": "4.0.1",
18
+ "version": "4.1.0",
19
19
  "types": "lib/index.d.ts",
20
20
  "stability": "stable",
21
21
  "jsii": {
@@ -37,7 +37,7 @@
37
37
  "scripts": {
38
38
  "compile": "jsii",
39
39
  "build": "npm run compile && npm run copy-assets && npm run eslint && npm test",
40
- "copy-assets": "copyfiles --error --up 1 src/contributions/team-transport-two/pipeline/buildspec*.yaml lib",
40
+ "copy-assets": "copyfiles --error --up 1 src/contributions/team-transport-two/pipeline/buildspecs/buildspec*.yaml lib",
41
41
  "watch": "jsii -w",
42
42
  "bump": "standard-version",
43
43
  "test": "jest --coverage",
package/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.0.1"
2
+ "version": "4.1.0"
3
3
  }
@@ -1,216 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
-
9
- ## [2.0.1] - 2020-08-29
10
- ### Fixed
11
- - Fix issue with `process.argv` when used with interpreters (`coffee`, `ts-node`, etc.), #150.
12
-
13
-
14
- ## [2.0.0] - 2020-08-14
15
- ### Changed
16
- - Full rewrite. Now port from python 3.9.0 & more precise following.
17
- See [doc](./doc) for difference and migration info.
18
- - node.js 10+ required
19
- - Removed most of local docs in favour of original ones.
20
-
21
-
22
- ## [1.0.10] - 2018-02-15
23
- ### Fixed
24
- - Use .concat instead of + for arrays, #122.
25
-
26
-
27
- ## [1.0.9] - 2016-09-29
28
- ### Changed
29
- - Rerelease after 1.0.8 - deps cleanup.
30
-
31
-
32
- ## [1.0.8] - 2016-09-29
33
- ### Changed
34
- - Maintenance (deps bump, fix node 6.5+ tests, coverage report).
35
-
36
-
37
- ## [1.0.7] - 2016-03-17
38
- ### Changed
39
- - Teach `addArgument` to accept string arg names. #97, @tomxtobin.
40
-
41
-
42
- ## [1.0.6] - 2016-02-06
43
- ### Changed
44
- - Maintenance: moved to eslint & updated CS.
45
-
46
-
47
- ## [1.0.5] - 2016-02-05
48
- ### Changed
49
- - Removed lodash dependency to significantly reduce install size.
50
- Thanks to @mourner.
51
-
52
-
53
- ## [1.0.4] - 2016-01-17
54
- ### Changed
55
- - Maintenance: lodash update to 4.0.0.
56
-
57
-
58
- ## [1.0.3] - 2015-10-27
59
- ### Fixed
60
- - Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple.
61
-
62
-
63
- ## [1.0.2] - 2015-03-22
64
- ### Changed
65
- - Relaxed lodash version dependency.
66
-
67
-
68
- ## [1.0.1] - 2015-02-20
69
- ### Changed
70
- - Changed dependencies to be compatible with ancient nodejs.
71
-
72
-
73
- ## [1.0.0] - 2015-02-19
74
- ### Changed
75
- - Maintenance release.
76
- - Replaced `underscore` with `lodash`.
77
- - Bumped version to 1.0.0 to better reflect semver meaning.
78
- - HISTORY.md -> CHANGELOG.md
79
-
80
-
81
- ## [0.1.16] - 2013-12-01
82
- ### Changed
83
- - Maintenance release. Updated dependencies and docs.
84
-
85
-
86
- ## [0.1.15] - 2013-05-13
87
- ### Fixed
88
- - Fixed #55, @trebor89
89
-
90
-
91
- ## [0.1.14] - 2013-05-12
92
- ### Fixed
93
- - Fixed #62, @maxtaco
94
-
95
-
96
- ## [0.1.13] - 2013-04-08
97
- ### Changed
98
- - Added `.npmignore` to reduce package size
99
-
100
-
101
- ## [0.1.12] - 2013-02-10
102
- ### Fixed
103
- - Fixed conflictHandler (#46), @hpaulj
104
-
105
-
106
- ## [0.1.11] - 2013-02-07
107
- ### Added
108
- - Added 70+ tests (ported from python), @hpaulj
109
- - Added conflictHandler, @applepicke
110
- - Added fromfilePrefixChar, @hpaulj
111
-
112
- ### Fixed
113
- - Multiple bugfixes, @hpaulj
114
-
115
-
116
- ## [0.1.10] - 2012-12-30
117
- ### Added
118
- - Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion)
119
- support, thanks to @hpaulj
120
-
121
- ### Fixed
122
- - Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj
123
-
124
-
125
- ## [0.1.9] - 2012-12-27
126
- ### Fixed
127
- - Fixed option dest interferens with other options (issue #23), thanks to @hpaulj
128
- - Fixed default value behavior with `*` positionals, thanks to @hpaulj
129
- - Improve `getDefault()` behavior, thanks to @hpaulj
130
- - Improve negative argument parsing, thanks to @hpaulj
131
-
132
-
133
- ## [0.1.8] - 2012-12-01
134
- ### Fixed
135
- - Fixed parser parents (issue #19), thanks to @hpaulj
136
- - Fixed negative argument parse (issue #20), thanks to @hpaulj
137
-
138
-
139
- ## [0.1.7] - 2012-10-14
140
- ### Fixed
141
- - Fixed 'choices' argument parse (issue #16)
142
- - Fixed stderr output (issue #15)
143
-
144
-
145
- ## [0.1.6] - 2012-09-09
146
- ### Fixed
147
- - Fixed check for conflict of options (thanks to @tomxtobin)
148
-
149
-
150
- ## [0.1.5] - 2012-09-03
151
- ### Fixed
152
- - Fix parser #setDefaults method (thanks to @tomxtobin)
153
-
154
-
155
- ## [0.1.4] - 2012-07-30
156
- ### Fixed
157
- - Fixed pseudo-argument support (thanks to @CGamesPlay)
158
- - Fixed addHelp default (should be true), if not set (thanks to @benblank)
159
-
160
-
161
- ## [0.1.3] - 2012-06-27
162
- ### Fixed
163
- - Fixed formatter api name: Formatter -> HelpFormatter
164
-
165
-
166
- ## [0.1.2] - 2012-05-29
167
- ### Fixed
168
- - Removed excess whitespace in help
169
- - Fixed error reporting, when parcer with subcommands
170
- called with empty arguments
171
-
172
- ### Added
173
- - Added basic tests
174
-
175
-
176
- ## [0.1.1] - 2012-05-23
177
- ### Fixed
178
- - Fixed line wrapping in help formatter
179
- - Added better error reporting on invalid arguments
180
-
181
-
182
- ## [0.1.0] - 2012-05-16
183
- ### Added
184
- - First release.
185
-
186
-
187
- [2.0.1]: https://github.com/nodeca/argparse/compare/2.0.0...2.0.1
188
- [2.0.0]: https://github.com/nodeca/argparse/compare/1.0.10...2.0.0
189
- [1.0.10]: https://github.com/nodeca/argparse/compare/1.0.9...1.0.10
190
- [1.0.9]: https://github.com/nodeca/argparse/compare/1.0.8...1.0.9
191
- [1.0.8]: https://github.com/nodeca/argparse/compare/1.0.7...1.0.8
192
- [1.0.7]: https://github.com/nodeca/argparse/compare/1.0.6...1.0.7
193
- [1.0.6]: https://github.com/nodeca/argparse/compare/1.0.5...1.0.6
194
- [1.0.5]: https://github.com/nodeca/argparse/compare/1.0.4...1.0.5
195
- [1.0.4]: https://github.com/nodeca/argparse/compare/1.0.3...1.0.4
196
- [1.0.3]: https://github.com/nodeca/argparse/compare/1.0.2...1.0.3
197
- [1.0.2]: https://github.com/nodeca/argparse/compare/1.0.1...1.0.2
198
- [1.0.1]: https://github.com/nodeca/argparse/compare/1.0.0...1.0.1
199
- [1.0.0]: https://github.com/nodeca/argparse/compare/0.1.16...1.0.0
200
- [0.1.16]: https://github.com/nodeca/argparse/compare/0.1.15...0.1.16
201
- [0.1.15]: https://github.com/nodeca/argparse/compare/0.1.14...0.1.15
202
- [0.1.14]: https://github.com/nodeca/argparse/compare/0.1.13...0.1.14
203
- [0.1.13]: https://github.com/nodeca/argparse/compare/0.1.12...0.1.13
204
- [0.1.12]: https://github.com/nodeca/argparse/compare/0.1.11...0.1.12
205
- [0.1.11]: https://github.com/nodeca/argparse/compare/0.1.10...0.1.11
206
- [0.1.10]: https://github.com/nodeca/argparse/compare/0.1.9...0.1.10
207
- [0.1.9]: https://github.com/nodeca/argparse/compare/0.1.8...0.1.9
208
- [0.1.8]: https://github.com/nodeca/argparse/compare/0.1.7...0.1.8
209
- [0.1.7]: https://github.com/nodeca/argparse/compare/0.1.6...0.1.7
210
- [0.1.6]: https://github.com/nodeca/argparse/compare/0.1.5...0.1.6
211
- [0.1.5]: https://github.com/nodeca/argparse/compare/0.1.4...0.1.5
212
- [0.1.4]: https://github.com/nodeca/argparse/compare/0.1.3...0.1.4
213
- [0.1.3]: https://github.com/nodeca/argparse/compare/0.1.2...0.1.3
214
- [0.1.2]: https://github.com/nodeca/argparse/compare/0.1.1...0.1.2
215
- [0.1.1]: https://github.com/nodeca/argparse/compare/0.1.0...0.1.1
216
- [0.1.0]: https://github.com/nodeca/argparse/releases/tag/0.1.0