@cloudsnorkel/cdk-github-runners 0.12.5 → 0.13.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.
- package/.jsii +331 -193
- package/API.md +20 -0
- package/assets/idle-runner-repear.lambda/index.js +44 -11
- package/assets/image-builders/aws-image-builder/delete-ami.lambda/index.js +9 -4
- package/assets/image-builders/aws-image-builder/filter-failed-builds.lambda/index.js +1 -1
- package/assets/image-builders/aws-image-builder/versioner.lambda/index.js +1 -1
- package/assets/image-builders/build-image.lambda/index.js +11 -27
- package/assets/providers/ami-root-device.lambda/index.js +1 -1
- package/assets/providers/update-lambda.lambda/index.js +1 -1
- package/assets/setup.lambda/index.html +1 -1
- package/assets/webhook-handler.lambda/index.js +26 -10
- package/lib/access.js +1 -1
- package/lib/idle-runner-repear.lambda.js +45 -12
- package/lib/image-builders/api.js +1 -1
- package/lib/image-builders/aws-image-builder/builder.d.ts +2 -1
- package/lib/image-builders/aws-image-builder/builder.js +23 -10
- package/lib/image-builders/aws-image-builder/common.js +3 -2
- package/lib/image-builders/aws-image-builder/container.d.ts +1 -3
- package/lib/image-builders/aws-image-builder/container.js +3 -2
- package/lib/image-builders/aws-image-builder/delete-ami.lambda.js +10 -5
- package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/container.js +3 -3
- package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
- package/lib/image-builders/aws-image-builder/filter-failed-builds.lambda.js +2 -2
- package/lib/image-builders/aws-image-builder/versioner.lambda.js +2 -2
- package/lib/image-builders/build-image.lambda.d.ts +11 -0
- package/lib/image-builders/build-image.lambda.js +12 -30
- package/lib/image-builders/codebuild-deprecated.js +1 -1
- package/lib/image-builders/codebuild.d.ts +1 -0
- package/lib/image-builders/codebuild.js +51 -26
- package/lib/image-builders/common.d.ts +10 -0
- package/lib/image-builders/common.js +1 -1
- package/lib/image-builders/components.js +1 -1
- package/lib/image-builders/static.js +1 -1
- package/lib/providers/ami-root-device.lambda.js +2 -2
- package/lib/providers/codebuild.js +2 -2
- package/lib/providers/common.js +7 -6
- package/lib/providers/ec2.js +2 -2
- package/lib/providers/ecs.js +1 -1
- package/lib/providers/fargate.js +2 -2
- package/lib/providers/lambda.js +13 -10
- package/lib/providers/update-lambda.lambda.js +2 -2
- package/lib/runner.js +44 -19
- package/lib/secrets.js +1 -1
- package/lib/utils.d.ts +19 -1
- package/lib/utils.js +32 -2
- package/lib/webhook-handler.lambda.js +27 -11
- package/lib/webhook.js +5 -3
- package/package.json +17 -17
|
@@ -152,7 +152,7 @@ class ImageBuilderComponent extends common_1.ImageBuilderObjectBase {
|
|
|
152
152
|
}
|
|
153
153
|
exports.ImageBuilderComponent = ImageBuilderComponent;
|
|
154
154
|
_a = JSII_RTTI_SYMBOL_1;
|
|
155
|
-
ImageBuilderComponent[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.ImageBuilderComponent", version: "0.
|
|
155
|
+
ImageBuilderComponent[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.ImageBuilderComponent", version: "0.13.0" };
|
|
156
156
|
/**
|
|
157
157
|
* @internal
|
|
158
158
|
*/
|
|
@@ -175,6 +175,7 @@ class AwsImageBuilderRunnerImageBuilder extends common_2.RunnerImageBuilderBase
|
|
|
175
175
|
this.baseAmi = props?.baseAmi ?? (0, ami_1.defaultBaseAmi)(this, this.os, this.architecture);
|
|
176
176
|
this.instanceType = props?.awsImageBuilderOptions?.instanceType ?? aws_cdk_lib_1.aws_ec2.InstanceType.of(aws_cdk_lib_1.aws_ec2.InstanceClass.M5, aws_cdk_lib_1.aws_ec2.InstanceSize.LARGE);
|
|
177
177
|
this.fastLaunchOptions = props?.awsImageBuilderOptions?.fastLaunchOptions;
|
|
178
|
+
this.waitOnDeploy = props?.waitOnDeploy ?? true;
|
|
178
179
|
// confirm instance type
|
|
179
180
|
if (!this.architecture.instanceTypeMatch(this.instanceType)) {
|
|
180
181
|
throw new Error(`Builder architecture (${this.architecture.name}) doesn't match selected instance type (${this.instanceType} / ${this.instanceType.architecture})`);
|
|
@@ -210,7 +211,7 @@ class AwsImageBuilderRunnerImageBuilder extends common_2.RunnerImageBuilderBase
|
|
|
210
211
|
imageScanOnPush: true,
|
|
211
212
|
imageTagMutability: aws_ecr_1.TagMutability.MUTABLE,
|
|
212
213
|
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
213
|
-
|
|
214
|
+
emptyOnDelete: true,
|
|
214
215
|
});
|
|
215
216
|
const dist = new aws_cdk_lib_1.aws_imagebuilder.CfnDistributionConfiguration(this, 'Docker Distribution', {
|
|
216
217
|
name: (0, common_2.uniqueImageBuilderName)(this),
|
|
@@ -249,9 +250,14 @@ class AwsImageBuilderRunnerImageBuilder extends common_2.RunnerImageBuilderBase
|
|
|
249
250
|
aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'),
|
|
250
251
|
aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName('EC2InstanceProfileForImageBuilderECRContainerBuilds'),
|
|
251
252
|
]);
|
|
252
|
-
|
|
253
|
+
if (this.waitOnDeploy) {
|
|
254
|
+
const image = this.createImage(infra, dist, log, undefined, recipe.arn);
|
|
255
|
+
this.dockerImageCleaner(recipe, image, repository);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
this.dockerImageCleaner(recipe, undefined, repository);
|
|
259
|
+
}
|
|
253
260
|
this.createPipeline(infra, dist, log, undefined, recipe.arn);
|
|
254
|
-
this.dockerImageCleaner(recipe, image, repository);
|
|
255
261
|
this.boundDockerImage = {
|
|
256
262
|
imageRepository: repository,
|
|
257
263
|
imageTag: 'latest',
|
|
@@ -268,7 +274,8 @@ class AwsImageBuilderRunnerImageBuilder extends common_2.RunnerImageBuilderBase
|
|
|
268
274
|
const crHandler = (0, utils_1.singletonLambda)(build_image_function_1.BuildImageFunction, this, 'build-image', {
|
|
269
275
|
description: 'Custom resource handler that triggers CodeBuild to build runner images, and cleans-up images on deletion',
|
|
270
276
|
timeout: cdk.Duration.minutes(3),
|
|
271
|
-
|
|
277
|
+
logGroup: (0, utils_1.singletonLogGroup)(this, utils_1.SingletonLogType.RUNNER_IMAGE_BUILD),
|
|
278
|
+
logFormat: aws_cdk_lib_1.aws_lambda.LogFormat.JSON,
|
|
272
279
|
});
|
|
273
280
|
const policy = new aws_cdk_lib_1.aws_iam.Policy(this, 'CR Policy', {
|
|
274
281
|
statements: [
|
|
@@ -290,7 +297,9 @@ class AwsImageBuilderRunnerImageBuilder extends common_2.RunnerImageBuilderBase
|
|
|
290
297
|
},
|
|
291
298
|
});
|
|
292
299
|
// add dependencies to make sure resources are there when we need them
|
|
293
|
-
|
|
300
|
+
if (image !== undefined) {
|
|
301
|
+
cr.node.addDependency(image);
|
|
302
|
+
}
|
|
294
303
|
cr.node.addDependency(policy);
|
|
295
304
|
cr.node.addDependency(crHandler);
|
|
296
305
|
// delete old docker images + IB resources daily
|
|
@@ -541,7 +550,9 @@ class AwsImageBuilderRunnerImageBuilder extends common_2.RunnerImageBuilderBase
|
|
|
541
550
|
aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'),
|
|
542
551
|
aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName('EC2InstanceProfileForImageBuilder'),
|
|
543
552
|
]);
|
|
544
|
-
this.
|
|
553
|
+
if (this.waitOnDeploy) {
|
|
554
|
+
this.createImage(infra, dist, log, recipe.arn, undefined);
|
|
555
|
+
}
|
|
545
556
|
this.createPipeline(infra, dist, log, recipe.arn, undefined);
|
|
546
557
|
this.boundAmi = {
|
|
547
558
|
launchTemplate: launchTemplate,
|
|
@@ -572,7 +583,8 @@ class AwsImageBuilderRunnerImageBuilder extends common_2.RunnerImageBuilderBase
|
|
|
572
583
|
}),
|
|
573
584
|
],
|
|
574
585
|
timeout: cdk.Duration.minutes(5),
|
|
575
|
-
|
|
586
|
+
logGroup: (0, utils_1.singletonLogGroup)(this, utils_1.SingletonLogType.RUNNER_IMAGE_BUILD),
|
|
587
|
+
logFormat: aws_cdk_lib_1.aws_lambda.LogFormat.JSON,
|
|
576
588
|
});
|
|
577
589
|
// delete all AMIs when this construct is removed
|
|
578
590
|
new aws_cdk_lib_1.CustomResource(this, 'AMI Deleter', {
|
|
@@ -657,7 +669,8 @@ class AwsImageBuilderFailedBuildNotifier {
|
|
|
657
669
|
static createFilteringTopic(scope, targetTopic) {
|
|
658
670
|
const topic = new aws_cdk_lib_1.aws_sns.Topic(scope, 'Image Builder Builds');
|
|
659
671
|
const filter = new filter_failed_builds_function_1.FilterFailedBuildsFunction(scope, 'Image Builder Builds Filter', {
|
|
660
|
-
|
|
672
|
+
logGroup: (0, utils_1.singletonLogGroup)(scope, utils_1.SingletonLogType.RUNNER_IMAGE_BUILD),
|
|
673
|
+
logFormat: aws_cdk_lib_1.aws_lambda.LogFormat.JSON,
|
|
661
674
|
environment: {
|
|
662
675
|
TARGET_TOPIC_ARN: targetTopic.topicArn,
|
|
663
676
|
},
|
|
@@ -684,4 +697,4 @@ class AwsImageBuilderFailedBuildNotifier {
|
|
|
684
697
|
}
|
|
685
698
|
}
|
|
686
699
|
exports.AwsImageBuilderFailedBuildNotifier = AwsImageBuilderFailedBuildNotifier;
|
|
687
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbWFnZS1idWlsZGVycy9hd3MtaW1hZ2UtYnVpbGRlci9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDZDQWVxQjtBQUNyQixpREFBb0Q7QUFDcEQsbURBQXFEO0FBRXJELCtCQUFrRDtBQUNsRCxxQ0FBa0Q7QUFDbEQsMkNBQXNFO0FBQ3RFLCtEQUEwRDtBQUMxRCxtRkFBNkU7QUFDN0UsK0NBQTBGO0FBQzFGLHVDQUE4QztBQUM5QyxrRUFBNkQ7QUFDN0Qsc0NBQW9HO0FBMkdwRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSwrQkFBc0I7SUFhL0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQztRQUM5RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSEYsV0FBTSxHQUFzQixFQUFFLENBQUM7UUFLOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksS0FBSyxHQUFVLEVBQUUsQ0FBQztRQUV0QixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixJQUFJLE1BQU0sR0FBVSxFQUFFLENBQUM7WUFDdkIsSUFBSSxlQUFlLEdBQWEsRUFBRSxDQUFDO1lBQ25DLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTlCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDVixNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXO3dCQUMvQixXQUFXLEVBQUUs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UztZQUMxQyxXQUFXLEVBQUU7Z0JBQ1gsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLFFBQVE7YUFDdkM7U0FDRixDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksbUNBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzNELFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsWUFBb0IsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtJQUNyQyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQWdCO1FBQzNCLElBQUksSUFBSSxZQUFZLGlDQUFpQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBeUMsQ0FBQztZQUMxRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsU0FBd0QsQ0FBQztnQkFDdkUsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7WUFDckcsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEvQkQsZ0ZBK0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIEFubm90YXRpb25zLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2VjciBhcyBlY3IsXG4gIGF3c19ldmVudHMgYXMgZXZlbnRzLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2ltYWdlYnVpbGRlciBhcyBpbWFnZWJ1aWxkZXIsXG4gIGF3c19sb2dzIGFzIGxvZ3MsXG4gIGF3c19zM19hc3NldHMgYXMgczNfYXNzZXRzLFxuICBhd3Nfc25zIGFzIHNucyxcbiAgYXdzX3Nuc19zdWJzY3JpcHRpb25zIGFzIHN1YnMsXG4gIEN1c3RvbVJlc291cmNlLFxuICBEdXJhdGlvbixcbiAgUmVtb3ZhbFBvbGljeSxcbiAgU3RhY2ssXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFRhZ011dGFiaWxpdHkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEFtaVJlY2lwZSwgZGVmYXVsdEJhc2VBbWkgfSBmcm9tICcuL2FtaSc7XG5pbXBvcnQgeyBJbWFnZUJ1aWxkZXJPYmplY3RCYXNlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgQ29udGFpbmVyUmVjaXBlLCBkZWZhdWx0QmFzZURvY2tlckltYWdlIH0gZnJvbSAnLi9jb250YWluZXInO1xuaW1wb3J0IHsgRGVsZXRlQW1pRnVuY3Rpb24gfSBmcm9tICcuL2RlbGV0ZS1hbWktZnVuY3Rpb24nO1xuaW1wb3J0IHsgRmlsdGVyRmFpbGVkQnVpbGRzRnVuY3Rpb24gfSBmcm9tICcuL2ZpbHRlci1mYWlsZWQtYnVpbGRzLWZ1bmN0aW9uJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgT3MsIFJ1bm5lckFtaSwgUnVubmVySW1hZ2UsIFJ1bm5lclZlcnNpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMnO1xuaW1wb3J0IHsgc2luZ2xldG9uTGFtYmRhIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQnVpbGRJbWFnZUZ1bmN0aW9uIH0gZnJvbSAnLi4vYnVpbGQtaW1hZ2UtZnVuY3Rpb24nO1xuaW1wb3J0IHsgUnVubmVySW1hZ2VCdWlsZGVyQmFzZSwgUnVubmVySW1hZ2VCdWlsZGVyUHJvcHMsIHVuaXF1ZUltYWdlQnVpbGRlck5hbWUgfSBmcm9tICcuLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF3c0ltYWdlQnVpbGRlclJ1bm5lckltYWdlQnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSB0eXBlIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBtNS5sYXJnZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogZWMyLkluc3RhbmNlVHlwZTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgZmFzdCBsYXVuY2guXG4gICAqXG4gICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgQU1Jcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGZhc3RMYXVuY2hPcHRpb25zPzogRmFzdExhdW5jaE9wdGlvbnM7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZmFzdCBsYXVuY2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFzdExhdW5jaE9wdGlvbnMge1xuICAvKipcbiAgICogRW5hYmxlIGZhc3QgbGF1bmNoIGZvciBBTUlzIGdlbmVyYXRlZCBieSB0aGlzIGJ1aWxkZXIuIEl0IGNyZWF0ZXMgYSBzbmFwc2hvdCBvZiB0aGUgcm9vdCB2b2x1bWUgYW5kIHVzZXMgaXQgdG8gbGF1bmNoIG5ldyBpbnN0YW5jZXMgZmFzdGVyLlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBXaW5kb3dzIEFNSXMuXG4gICAqXG4gICAqIEBub3RlIHRoaXMgZmVhdHVyZSBjb21lcyB3aXRoIGFkZGl0aW9uYWwgcmVzb3VyY2UgY29zdHMuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9XaW5kb3dzR3VpZGUvd2luLWZhc3QtbGF1bmNoLW1hbmFnZS1jb3N0cy5odG1sXG4gICAqIEBub3RlIGVuYWJsaW5nIGZhc3QgbGF1bmNoIG9uIGFuIGV4aXN0aW5nIGJ1aWxkZXIgd2lsbCBub3QgZW5hYmxlIGl0IGZvciBleGlzdGluZyBBTUlzLiBJdCB3aWxsIG9ubHkgYWZmZWN0IG5ldyBBTUlzLiBJZiB5b3Ugd2FudCBpbW1lZGlhdGUgZWZmZWN0LCB0cmlnZ2VyIGEgbmV3IGltYWdlIGJ1aWxkLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBidWlsZGVyIHdpdGggZmFzdCBsYXVuY2ggZW5hYmxlZCBhbmQgdXNlIGl0IGZvciBuZXcgQU1Jcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgaW5zdGFuY2VzIHRoYXQgYXJlIGxhdW5jaGVkIGZvciBjcmVhdGluZyByZXNvdXJjZXMuXG4gICAqXG4gICAqIE11c3QgYmUgYXQgbGVhc3QgNi5cbiAgICpcbiAgICogQGRlZmF1bHQgNlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UGFyYWxsZWxMYXVuY2hlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBwcmUtcHJvdmlzaW9uZWQgc25hcHNob3RzIHRvIGtlZXAgb24gaGFuZCBmb3IgYSBmYXN0LWxhdW5jaCBlbmFibGVkIFdpbmRvd3MgQU1JLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZUNvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFuIGFzc2V0IGluY2x1ZGluZyBmaWxlIG9yIGRpcmVjdG9yeSB0byBwbGFjZSBpbnNpZGUgdGhlIGJ1aWx0IGltYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlQnVpbGRlckFzc2V0IHtcbiAgLyoqXG4gICAqIFBhdGggdG8gcGxhY2UgYXNzZXQgaW4gdGhlIGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBc3NldCB0byBwbGFjZSBpbiB0aGUgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBhc3NldDogczNfYXNzZXRzLkFzc2V0O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEltYWdlQnVpbGRlckNvbXBvbmVudCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VCdWlsZGVyQ29tcG9uZW50UHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBDb21wb25lbnQgcGxhdGZvcm0uIE11c3QgbWF0Y2ggdGhlIGJ1aWxkZXIgcGxhdGZvcm0uXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogJ0xpbnV4JyB8ICdXaW5kb3dzJztcblxuICAvKipcbiAgICogQ29tcG9uZW50IGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBkZXNjcmlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNoZWxsIGNvbW1hbmRzIHRvIHJ1biB3aGVuIGFkZGluZyB0aGlzIGNvbXBvbmVudCB0byB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIE9uIExpbnV4LCB0aGVzZSBhcmUgYmFzaCBjb21tYW5kcy4gT24gV2luZG93cywgdGhlcmUgYXJlIFBvd2VyU2hlbGwgY29tbWFuZHMuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0cyB0byBhZGQgdG8gdGhlIGJ1aWx0IGltYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRzPzogSW1hZ2VCdWlsZGVyQXNzZXRbXTtcblxuICAvKipcbiAgICogUmVxdWlyZSBhIHJlYm9vdCBhZnRlciBpbnN0YWxsaW5nIHRoaXMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVib290PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb21wb25lbnRzIGFyZSBhIHNldCBvZiBjb21tYW5kcyB0byBydW4gYW5kIG9wdGlvbmFsIGZpbGVzIHRvIGFkZCB0byBhbiBpbWFnZS4gQ29tcG9uZW50cyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiBpbWFnZXMgYnVpbHQgYnkgSW1hZ2UgQnVpbGRlci5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYFxuICogbmV3IEltYWdlQnVpbGRlckNvbXBvbmVudCh0aGlzLCAnQVdTIENMSScsIHtcbiAqICAgcGxhdGZvcm06ICdXaW5kb3dzJyxcbiAqICAgZGlzcGxheU5hbWU6ICdBV1MgQ0xJJyxcbiAqICAgZGVzY3JpcHRpb246ICdJbnN0YWxsIGxhdGVzdCB2ZXJzaW9uIG9mIEFXUyBDTEknLFxuICogICBjb21tYW5kczogW1xuICogICAgICckcCA9IFN0YXJ0LVByb2Nlc3MgbXNpZXhlYy5leGUgLVBhc3NUaHJ1IC1XYWl0IC1Bcmd1bWVudExpc3QgXFwnL2kgaHR0cHM6Ly9hd3NjbGkuYW1hem9uYXdzLmNvbS9BV1NDTElWMi5tc2kgL3FuXFwnJyxcbiAqICAgICAnaWYgKCRwLkV4aXRDb2RlIC1uZSAwKSB7IHRocm93IFwiRXhpdCBjb2RlIGlzICRwLkV4aXRDb2RlXCIgfScsXG4gKiAgIF0sXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYFJ1bm5lckltYWdlQ29tcG9uZW50YCBpbnN0ZWFkIGFzIHRoaXMgYmUgaW50ZXJuYWwgc29vbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEltYWdlQnVpbGRlckNvbXBvbmVudCBleHRlbmRzIEltYWdlQnVpbGRlck9iamVjdEJhc2Uge1xuICAvKipcbiAgICogQ29tcG9uZW50IEFSTi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogU3VwcG9ydGVkIHBsYXRmb3JtIGZvciB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBsYXRmb3JtOiAnV2luZG93cycgfCAnTGludXgnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzZXRzOiBzM19hc3NldHMuQXNzZXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbWFnZUJ1aWxkZXJDb21wb25lbnRQcm9wZXJ0aWVzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucGxhdGZvcm0gPSBwcm9wcy5wbGF0Zm9ybTtcblxuICAgIGxldCBzdGVwczogYW55W10gPSBbXTtcblxuICAgIGlmIChwcm9wcy5hc3NldHMpIHtcbiAgICAgIGxldCBpbnB1dHM6IGFueVtdID0gW107XG4gICAgICBsZXQgZXh0cmFjdENvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBhc3NldCBvZiBwcm9wcy5hc3NldHMpIHtcbiAgICAgICAgdGhpcy5hc3NldHMucHVzaChhc3NldC5hc3NldCk7XG5cbiAgICAgICAgaWYgKGFzc2V0LmFzc2V0LmlzRmlsZSkge1xuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIHNvdXJjZTogYXNzZXQuYXNzZXQuczNPYmplY3RVcmwsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYXNzZXQucGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChhc3NldC5hc3NldC5pc1ppcEFyY2hpdmUpIHtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBzb3VyY2U6IGFzc2V0LmFzc2V0LnMzT2JqZWN0VXJsLFxuICAgICAgICAgICAgZGVzdGluYXRpb246IGAke2Fzc2V0LnBhdGh9LnppcGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHByb3BzLnBsYXRmb3JtID09PSAnV2luZG93cycpIHtcbiAgICAgICAgICAgIGV4dHJhY3RDb21tYW5kcy5wdXNoKGBFeHBhbmQtQXJjaGl2ZSBcIiR7YXNzZXQucGF0aH0uemlwXCIgLURlc3RpbmF0aW9uUGF0aCBcIiR7YXNzZXQucGF0aH1cImApO1xuICAgICAgICAgICAgZXh0cmFjdENvbW1hbmRzLnB1c2goYGRlbCBcIiR7YXNzZXQucGF0aH0uemlwXCJgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXh0cmFjdENvbW1hbmRzLnB1c2goYHVuemlwIFwiJHthc3NldC5wYXRofS56aXBcIiAtZCBcIiR7YXNzZXQucGF0aH1cImApO1xuICAgICAgICAgICAgZXh0cmFjdENvbW1hbmRzLnB1c2goYHJtIFwiJHthc3NldC5wYXRofS56aXBcImApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXNzZXQgdHlwZTogJHthc3NldC5hc3NldH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ0Rvd25sb2FkJyxcbiAgICAgICAgYWN0aW9uOiAnUzNEb3dubG9hZCcsXG4gICAgICAgIGlucHV0cyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXh0cmFjdENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RlcHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ0V4dHJhY3QnLFxuICAgICAgICAgIGFjdGlvbjogcHJvcHMucGxhdGZvcm0gPT09ICdMaW51eCcgPyAnRXhlY3V0ZUJhc2gnIDogJ0V4ZWN1dGVQb3dlclNoZWxsJyxcbiAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiB0aGlzLnByZWZpeENvbW1hbmRzV2l0aEVycm9ySGFuZGxpbmcocHJvcHMucGxhdGZvcm0sIGV4dHJhY3RDb21tYW5kcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnUnVuJyxcbiAgICAgICAgYWN0aW9uOiBwcm9wcy5wbGF0Zm9ybSA9PT0gJ0xpbnV4JyA/ICdFeGVjdXRlQmFzaCcgOiAnRXhlY3V0ZVBvd2VyU2hlbGwnLFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBjb21tYW5kczogdGhpcy5wcmVmaXhDb21tYW5kc1dpdGhFcnJvckhhbmRsaW5nKHByb3BzLnBsYXRmb3JtLCBwcm9wcy5jb21tYW5kcyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucmVib290ID8/IGZhbHNlKSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ1JlYm9vdCcsXG4gICAgICAgIGFjdGlvbjogJ1JlYm9vdCcsXG4gICAgICAgIGlucHV0czoge30sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcHMuZGlzcGxheU5hbWUsXG4gICAgICBzY2hlbWFWZXJzaW9uOiAnMS4wJyxcbiAgICAgIHBoYXNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2J1aWxkJyxcbiAgICAgICAgICBzdGVwcyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGNvbnN0IG5hbWUgPSB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lKHRoaXMpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBpbWFnZWJ1aWxkZXIuQ2ZuQ29tcG9uZW50KHRoaXMsICdDb21wb25lbnQnLCB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAgdmVyc2lvbjogdGhpcy5nZW5lcmF0ZVZlcnNpb24oJ0NvbXBvbmVudCcsIG5hbWUsIHtcbiAgICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICB9KSxcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcm4gPSBjb21wb25lbnQuYXR0ckFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgcHJpbmNpcGFsIG9uIHRoZSBhc3NldHMgYnVja2V0cy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWVcbiAgICovXG4gIGdyYW50QXNzZXRzUmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSkge1xuICAgIGZvciAoY29uc3QgYXNzZXQgb2YgdGhpcy5hc3NldHMpIHtcbiAgICAgIGFzc2V0LmdyYW50UmVhZChncmFudGVlKTtcbiAgICB9XG4gIH1cblxuICBwcmVmaXhDb21tYW5kc1dpdGhFcnJvckhhbmRsaW5nKHBsYXRmb3JtOiAnV2luZG93cycgfCAnTGludXgnLCBjb21tYW5kczogc3RyaW5nW10pIHtcbiAgICBpZiAocGxhdGZvcm0gPT0gJ1dpbmRvd3MnKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnJEVycm9yQWN0aW9uUHJlZmVyZW5jZSA9IFxcJ1N0b3BcXCcnLFxuICAgICAgICAnJFByb2dyZXNzUHJlZmVyZW5jZSA9IFxcJ1NpbGVudGx5Q29udGludWVcXCcnLFxuICAgICAgICAnU2V0LVBTRGVidWcgLVRyYWNlIDEnLFxuICAgICAgXS5jb25jYXQoY29tbWFuZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnc2V0IC1leCcsXG4gICAgICBdLmNvbmNhdChjb21tYW5kcyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NJbWFnZUJ1aWxkZXJSdW5uZXJJbWFnZUJ1aWxkZXIgZXh0ZW5kcyBSdW5uZXJJbWFnZUJ1aWxkZXJCYXNlIHtcbiAgcHJpdmF0ZSBib3VuZERvY2tlckltYWdlPzogUnVubmVySW1hZ2U7XG4gIHByaXZhdGUgYm91bmRBbWk/OiBSdW5uZXJBbWk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3M6IE9zO1xuICBwcml2YXRlIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VJbWFnZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VBbWk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nUmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeTtcbiAgcHJpdmF0ZSByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzOiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdWJuZXRTZWxlY3Rpb246IGVjMi5TdWJuZXRTZWxlY3Rpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVidWlsZEludGVydmFsOiBjZGsuRHVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgYm91bmRDb21wb25lbnRzOiBJbWFnZUJ1aWxkZXJDb21wb25lbnRbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZTtcbiAgcHJpdmF0ZSBpbmZyYXN0cnVjdHVyZTogaW1hZ2VidWlsZGVyLkNmbkluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSByb2xlOiBpYW0uUm9sZTtcbiAgcHJpdmF0ZSByZWFkb25seSBmYXN0TGF1bmNoT3B0aW9ucz86IEZhc3RMYXVuY2hPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogUnVubmVySW1hZ2VCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucykge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZygnY29kZUJ1aWxkT3B0aW9ucyBhcmUgaWdub3JlZCB3aGVuIHVzaW5nIEFXUyBJbWFnZSBCdWlsZGVyIHRvIGJ1aWxkIHJ1bm5lciBpbWFnZXMuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcyA9IHByb3BzPy5vcyA/PyBPcy5MSU5VWF9VQlVOVFU7XG4gICAgdGhpcy5hcmNoaXRlY3R1cmUgPSBwcm9wcz8uYXJjaGl0ZWN0dXJlID8/IEFyY2hpdGVjdHVyZS5YODZfNjQ7XG4gICAgdGhpcy5yZWJ1aWxkSW50ZXJ2YWwgPSBwcm9wcz8ucmVidWlsZEludGVydmFsID8/IER1cmF0aW9uLmRheXMoNyk7XG4gICAgdGhpcy5sb2dSZXRlbnRpb24gPSBwcm9wcz8ubG9nUmV0ZW50aW9uID8/IFJldGVudGlvbkRheXMuT05FX01PTlRIO1xuICAgIHRoaXMubG9nUmVtb3ZhbFBvbGljeSA9IHByb3BzPy5sb2dSZW1vdmFsUG9saWN5ID8/IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgICB0aGlzLnZwYyA9IHByb3BzPy52cGMgPz8gZWMyLlZwYy5mcm9tTG9va3VwKHRoaXMsICdWUEMnLCB7IGlzRGVmYXVsdDogdHJ1ZSB9KTtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzID0gcHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1NHJywgeyB2cGM6IHRoaXMudnBjIH0pXTtcbiAgICB0aGlzLnN1Ym5ldFNlbGVjdGlvbiA9IHByb3BzPy5zdWJuZXRTZWxlY3Rpb247XG4gICAgdGhpcy5iYXNlSW1hZ2UgPSBwcm9wcz8uYmFzZURvY2tlckltYWdlID8/IGRlZmF1bHRCYXNlRG9ja2VySW1hZ2UodGhpcy5vcyk7XG4gICAgdGhpcy5iYXNlQW1pID0gcHJvcHM/LmJhc2VBbWkgPz8gZGVmYXVsdEJhc2VBbWkodGhpcywgdGhpcy5vcywgdGhpcy5hcmNoaXRlY3R1cmUpO1xuICAgIHRoaXMuaW5zdGFuY2VUeXBlID0gcHJvcHM/LmF3c0ltYWdlQnVpbGRlck9wdGlvbnM/Lmluc3RhbmNlVHlwZSA/PyBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLk01LCBlYzIuSW5zdGFuY2VTaXplLkxBUkdFKTtcbiAgICB0aGlzLmZhc3RMYXVuY2hPcHRpb25zID0gcHJvcHM/LmF3c0ltYWdlQnVpbGRlck9wdGlvbnM/LmZhc3RMYXVuY2hPcHRpb25zO1xuXG4gICAgLy8gY29uZmlybSBpbnN0YW5jZSB0eXBlXG4gICAgaWYgKCF0aGlzLmFyY2hpdGVjdHVyZS5pbnN0YW5jZVR5cGVNYXRjaCh0aGlzLmluc3RhbmNlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQnVpbGRlciBhcmNoaXRlY3R1cmUgKCR7dGhpcy5hcmNoaXRlY3R1cmUubmFtZX0pIGRvZXNuJ3QgbWF0Y2ggc2VsZWN0ZWQgaW5zdGFuY2UgdHlwZSAoJHt0aGlzLmluc3RhbmNlVHlwZX0gLyAke3RoaXMuaW5zdGFuY2VUeXBlLmFyY2hpdGVjdHVyZX0pYCk7XG4gICAgfVxuXG4gICAgLy8gd2FybiBhZ2FpbnN0IGlzb2xhdGVkIG5ldHdvcmtzXG4gICAgaWYgKHByb3BzPy5zdWJuZXRTZWxlY3Rpb24/LnN1Ym5ldFR5cGUgPT0gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZygnUHJpdmF0ZSBpc29sYXRlZCBzdWJuZXRzIGNhbm5vdCBwdWxsIGZyb20gcHVibGljIEVDUiBhbmQgVlBDIGVuZHBvaW50IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiAnICtcbiAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2NvbnRhaW5lcnMtcm9hZG1hcC9pc3N1ZXMvMTE2MCcpO1xuICAgIH1cblxuICAgIC8vIHJvbGUgdG8gYmUgdXNlZCBieSBBV1MgSW1hZ2UgQnVpbGRlclxuICAgIHRoaXMucm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlYzIuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwbGF0Zm9ybSgpIHtcbiAgICBpZiAodGhpcy5vcy5pcyhPcy5XSU5ET1dTKSkge1xuICAgICAgcmV0dXJuICdXaW5kb3dzJztcbiAgICB9XG4gICAgaWYgKHRoaXMub3MuaXNJbihPcy5fQUxMX0xJTlVYX1ZFUlNJT05TKSkge1xuICAgICAgcmV0dXJuICdMaW51eCc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgT1MgJHt0aGlzLm9zLm5hbWV9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgQVdTIEltYWdlIEJ1aWxkZXJgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgSVJ1bm5lclByb3ZpZGVyIHRvIGZpbmFsaXplIHNldHRpbmdzIGFuZCBjcmVhdGUgdGhlIGltYWdlIGJ1aWxkZXIuXG4gICAqL1xuICBiaW5kRG9ja2VySW1hZ2UoKTogUnVubmVySW1hZ2Uge1xuICAgIGlmICh0aGlzLmJvdW5kRG9ja2VySW1hZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvdW5kRG9ja2VySW1hZ2U7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIHJlcG9zaXRvcnkgdGhhdCBvbmx5IGtlZXBzIG9uZSB0YWdcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gbmV3IGVjci5SZXBvc2l0b3J5KHRoaXMsICdSZXBvc2l0b3J5Jywge1xuICAgICAgaW1hZ2VTY2FuT25QdXNoOiB0cnVlLFxuICAgICAgaW1hZ2VUYWdNdXRhYmlsaXR5OiBUYWdNdXRhYmlsaXR5Lk1VVEFCTEUsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlSW1hZ2VzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdCA9IG5ldyBpbWFnZWJ1aWxkZXIuQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbih0aGlzLCAnRG9ja2VyIERpc3RyaWJ1dGlvbicsIHtcbiAgICAgIG5hbWU6IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUodGhpcyksXG4gICAgICAvLyBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIGRpc3RyaWJ1dGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlZ2lvbjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgICAgIGNvbnRhaW5lckRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIENvbnRhaW5lclRhZ3M6IFsnbGF0ZXN0J10sXG4gICAgICAgICAgICBUYXJnZXRSZXBvc2l0b3J5OiB7XG4gICAgICAgICAgICAgIFNlcnZpY2U6ICdFQ1InLFxuICAgICAgICAgICAgICBSZXBvc2l0b3J5TmFtZTogcmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBsZXQgZG9ja2VyZmlsZVRlbXBsYXRlID0gYEZST00ge3t7IGltYWdlYnVpbGRlcjpwYXJlbnRJbWFnZSB9fX1cbnt7eyBpbWFnZWJ1aWxkZXI6ZW52aXJvbm1lbnRzIH19fVxue3t7IGltYWdlYnVpbGRlcjpjb21wb25lbnRzIH19fWA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IGMuZ2V0RG9ja2VyQ29tbWFuZHModGhpcy5vcywgdGhpcy5hcmNoaXRlY3R1cmUpO1xuICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZG9ja2VyZmlsZVRlbXBsYXRlICs9ICdcXG4nICsgY29tbWFuZHMuam9pbignXFxuJykgKyAnXFxuJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGUgPSBuZXcgQ29udGFpbmVyUmVjaXBlKHRoaXMsICdDb250YWluZXIgUmVjaXBlJywge1xuICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0oKSxcbiAgICAgIGNvbXBvbmVudHM6IHRoaXMuYmluZENvbXBvbmVudHMoKSxcbiAgICAgIHRhcmdldFJlcG9zaXRvcnk6IHJlcG9zaXRvcnksXG4gICAgICBkb2NrZXJmaWxlVGVtcGxhdGU6IGRvY2tlcmZpbGVUZW1wbGF0ZSxcbiAgICAgIHBhcmVudEltYWdlOiB0aGlzLmJhc2VJbWFnZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZyA9IHRoaXMuY3JlYXRlTG9nKCdEb2NrZXIgTG9nJywgcmVjaXBlLm5hbWUpO1xuICAgIGNvbnN0IGluZnJhID0gdGhpcy5jcmVhdGVJbmZyYXN0cnVjdHVyZShbXG4gICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0FtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUnKSxcbiAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyRUNSQ29udGFpbmVyQnVpbGRzJyksXG4gICAgXSk7XG4gICAgY29uc3QgaW1hZ2UgPSB0aGlzLmNyZWF0ZUltYWdlKGluZnJhLCBkaXN0LCBsb2csIHVuZGVmaW5lZCwgcmVjaXBlLmFybik7XG4gICAgdGhpcy5jcmVhdGVQaXBlbGluZShpbmZyYSwgZGlzdCwgbG9nLCB1bmRlZmluZWQsIHJlY2lwZS5hcm4pO1xuXG4gICAgdGhpcy5kb2NrZXJJbWFnZUNsZWFuZXIocmVjaXBlLCBpbWFnZSwgcmVwb3NpdG9yeSk7XG5cbiAgICB0aGlzLmJvdW5kRG9ja2VySW1hZ2UgPSB7XG4gICAgICBpbWFnZVJlcG9zaXRvcnk6IHJlcG9zaXRvcnksXG4gICAgICBpbWFnZVRhZzogJ2xhdGVzdCcsXG4gICAgICBvczogdGhpcy5vcyxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5hcmNoaXRlY3R1cmUsXG4gICAgICBsb2dHcm91cDogbG9nLFxuICAgICAgcnVubmVyVmVyc2lvbjogUnVubmVyVmVyc2lvbi5zcGVjaWZpYygndW5rbm93bicpLFxuICAgICAgLy8gbm8gZGVwZW5kYWJsZSBhcyBDbG91ZEZvcm1hdGlvbiB3aWxsIGZhaWwgdG8gZ2V0IGltYWdlIEFSTiBvbmNlIHRoZSBpbWFnZSBpcyBkZWxldGVkICh3ZSBkZWxldGUgb2xkIGltYWdlcyBkYWlseSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuYm91bmREb2NrZXJJbWFnZTtcbiAgfVxuXG4gIHByaXZhdGUgZG9ja2VySW1hZ2VDbGVhbmVyKHJlY2lwZTogQ29udGFpbmVyUmVjaXBlLCBpbWFnZTogaW1hZ2VidWlsZGVyLkNmbkltYWdlLCByZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnkpIHtcbiAgICAvLyBkZWxldGUgYWxsIGxlZnQgb3ZlciBkb2NrZXJzIGltYWdlcyBvblxuICAgIGNvbnN0IGNySGFuZGxlciA9IHNpbmdsZXRvbkxhbWJkYShCdWlsZEltYWdlRnVuY3Rpb24sIHRoaXMsICdidWlsZC1pbWFnZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9tIHJlc291cmNlIGhhbmRsZXIgdGhhdCB0cmlnZ2VycyBDb2RlQnVpbGQgdG8gYnVpbGQgcnVubmVyIGltYWdlcywgYW5kIGNsZWFucy11cCBpbWFnZXMgb24gZGVsZXRpb24nLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMyksXG4gICAgICBsb2dSZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb2xpY3kgPSBuZXcgaWFtLlBvbGljeSh0aGlzLCAnQ1IgUG9saWN5Jywge1xuICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydpbWFnZWJ1aWxkZXI6TGlzdEltYWdlcycsICdpbWFnZWJ1aWxkZXI6TGlzdEltYWdlQnVpbGRWZXJzaW9ucycsICdpbWFnZWJ1aWxkZXI6RGVsZXRlSW1hZ2UnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLCAvLyBJbWFnZSBCdWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBzY29waW5nIHRoaXMgOihcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNySGFuZGxlci5yb2xlPy5hdHRhY2hJbmxpbmVQb2xpY3kocG9saWN5KTtcblxuICAgIGNvbnN0IGNyID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdEZWxldGVyJywge1xuICAgICAgc2VydmljZVRva2VuOiBjckhhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkltYWdlRGVsZXRlcicsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFJlcG9OYW1lOiByZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBJbWFnZUJ1aWxkZXJOYW1lOiByZWNpcGUubmFtZSwgLy8gd2UgZG9uJ3QgdXNlIGltYWdlLm5hbWUgYmVjYXVzZSBDbG91ZEZvcm1hdGlvbiBjb21wbGFpbnMgaWYgaXQgd2FzIGRlbGV0ZWQgYWxyZWFkeVxuICAgICAgICAvLyBUT0RPIHBhc3MgdmVyc2lvbiB0b28gYW5kIHRoZW4gd2hlbiBhIG5ldyB2ZXJzaW9uIGlzIGRlcGxveWVkLCBpdCB3aWxsIGRlbGV0ZSB0aGUgb2xkIG9uZSAoY2FyZWZ1bCB3aXRoIHVwZ3JhZGVzKVxuICAgICAgICBEZWxldGVPbmx5OiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHJlc291cmNlcyBhcmUgdGhlcmUgd2hlbiB3ZSBuZWVkIHRoZW1cbiAgICBjci5ub2RlLmFkZERlcGVuZGVuY3koaW1hZ2UpO1xuICAgIGNyLm5vZGUuYWRkRGVwZW5kZW5jeShwb2xpY3kpO1xuICAgIGNyLm5vZGUuYWRkRGVwZW5kZW5jeShjckhhbmRsZXIpO1xuXG4gICAgLy8gZGVsZXRlIG9sZCBkb2NrZXIgaW1hZ2VzICsgSUIgcmVzb3VyY2VzIGRhaWx5XG4gICAgbmV3IGltYWdlYnVpbGRlci5DZm5MaWZlY3ljbGVQb2xpY3kodGhpcywgJ0xpZmVjeWNsZSBQb2xpY3kgRG9ja2VyJywge1xuICAgICAgbmFtZTogdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSh0aGlzKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGVsZXRlIG9sZCBHaXRIdWIgUnVubmVyIERvY2tlciBpbWFnZXMgZm9yICR7dGhpcy5ub2RlLnBhdGh9YCxcbiAgICAgIGV4ZWN1dGlvblJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnTGlmZWN5Y2xlIFBvbGljeSBEb2NrZXIgUm9sZScsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2ltYWdlYnVpbGRlci5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgaWI6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogWyd0YWc6R2V0UmVzb3VyY2VzJywgJ2ltYWdlYnVpbGRlcjpEZWxldGVJbWFnZSddLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sIC8vIEltYWdlIEJ1aWxkZXIgZG9lc24ndCBzdXBwb3J0IHNjb3BpbmcgdGhpcyA6KFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZWNyOiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFsnZWNyOkJhdGNoR2V0SW1hZ2UnLCAnZWNyOkJhdGNoRGVsZXRlSW1hZ2UnXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtyZXBvc2l0b3J5LnJlcG9zaXRvcnlBcm5dLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KS5yb2xlQXJuLFxuICAgICAgcG9saWN5RGV0YWlsczogW3tcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgdHlwZTogJ0RFTEVURScsXG4gICAgICAgICAgaW5jbHVkZVJlc291cmNlczoge1xuICAgICAgICAgICAgY29udGFpbmVyczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICB0eXBlOiAnQ09VTlQnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICB9LFxuICAgICAgfV0sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDT05UQUlORVJfSU1BR0UnLFxuICAgICAgcmVzb3VyY2VTZWxlY3Rpb246IHtcbiAgICAgICAgcmVjaXBlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHJlY2lwZS5uYW1lLFxuICAgICAgICAgICAgc2VtYW50aWNWZXJzaW9uOiByZWNpcGUudmVyc2lvbiwgLy8gZG9jcyBzYXkgaXQncyBvcHRpb25hbCwgYnV0IGl0J3Mgbm90XG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlTG9nKGlkOiBzdHJpbmcsIHJlY2lwZU5hbWU6IHN0cmluZyk6IGxvZ3MuTG9nR3JvdXAge1xuICAgIHJldHVybiBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBpZCwge1xuICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9pbWFnZWJ1aWxkZXIvJHtyZWNpcGVOYW1lfWAsXG4gICAgICByZXRlbnRpb246IHRoaXMubG9nUmV0ZW50aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogdGhpcy5sb2dSZW1vdmFsUG9saWN5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUluZnJhc3RydWN0dXJlKG1hbmFnZWRQb2xpY2llczogaWFtLklNYW5hZ2VkUG9saWN5W10pOiBpbWFnZWJ1aWxkZXIuQ2ZuSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uIHtcbiAgICBpZiAodGhpcy5pbmZyYXN0cnVjdHVyZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5mcmFzdHJ1Y3R1cmU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtYW5hZ2VkUG9saWN5IG9mIG1hbmFnZWRQb2xpY2llcykge1xuICAgICAgdGhpcy5yb2xlLmFkZE1hbmFnZWRQb2xpY3kobWFuYWdlZFBvbGljeSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5ib3VuZENvbXBvbmVudHMpIHtcbiAgICAgIGNvbXBvbmVudC5ncmFudEFzc2V0c1JlYWQodGhpcy5yb2xlKTtcbiAgICB9XG5cbiAgICB0aGlzLmluZnJhc3RydWN0dXJlID0gbmV3IGltYWdlYnVpbGRlci5DZm5JbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24odGhpcywgJ0luZnJhc3RydWN0dXJlJywge1xuICAgICAgbmFtZTogdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSh0aGlzKSxcbiAgICAgIC8vIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgc3VibmV0SWQ6IHRoaXMudnBjPy5zZWxlY3RTdWJuZXRzKHRoaXMuc3VibmV0U2VsZWN0aW9uKS5zdWJuZXRJZHNbMF0sXG4gICAgICBzZWN1cml0eUdyb3VwSWRzOiB0aGlzLnNlY3VyaXR5R3JvdXBzPy5tYXAoc2cgPT4gc2cuc2VjdXJpdHlHcm91cElkKSxcbiAgICAgIGluc3RhbmNlVHlwZXM6IFt0aGlzLmluc3RhbmNlVHlwZS50b1N0cmluZygpXSxcbiAgICAgIGluc3RhbmNlTWV0YWRhdGFPcHRpb25zOiB7XG4gICAgICAgIGh0dHBUb2tlbnM6ICdyZXF1aXJlZCcsXG4gICAgICAgIC8vIENvbnRhaW5lciBidWlsZHMgcmVxdWlyZSBhIG1pbmltdW0gb2YgdHdvIGhvcHMuXG4gICAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgfSxcbiAgICAgIGluc3RhbmNlUHJvZmlsZU5hbWU6IG5ldyBpYW0uQ2ZuSW5zdGFuY2VQcm9maWxlKHRoaXMsICdJbnN0YW5jZSBQcm9maWxlJywge1xuICAgICAgICByb2xlczogW1xuICAgICAgICAgIHRoaXMucm9sZS5yb2xlTmFtZSxcbiAgICAgICAgXSxcbiAgICAgIH0pLnJlZixcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmluZnJhc3RydWN0dXJlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUltYWdlKGluZnJhOiBpbWFnZWJ1aWxkZXIuQ2ZuSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uLCBkaXN0OiBpbWFnZWJ1aWxkZXIuQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiwgbG9nOiBsb2dzLkxvZ0dyb3VwLFxuICAgIGltYWdlUmVjaXBlQXJuPzogc3RyaW5nLCBjb250YWluZXJSZWNpcGVBcm4/OiBzdHJpbmcpOiBpbWFnZWJ1aWxkZXIuQ2ZuSW1hZ2Uge1xuICAgIGNvbnN0IGltYWdlID0gbmV3IGltYWdlYnVpbGRlci5DZm5JbWFnZSh0aGlzLCB0aGlzLmFtaU9yQ29udGFpbmVySWQoJ0ltYWdlJywgaW1hZ2VSZWNpcGVBcm4sIGNvbnRhaW5lclJlY2lwZUFybiksIHtcbiAgICAgIGluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbkFybjogaW5mcmEuYXR0ckFybixcbiAgICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IGRpc3QuYXR0ckFybixcbiAgICAgIGltYWdlUmVjaXBlQXJuLFxuICAgICAgY29udGFpbmVyUmVjaXBlQXJuLFxuICAgICAgaW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgaW1hZ2VUZXN0c0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpbWFnZS5ub2RlLmFkZERlcGVuZGVuY3koaW5mcmEpO1xuICAgIGltYWdlLm5vZGUuYWRkRGVwZW5kZW5jeShsb2cpO1xuXG4gICAgcmV0dXJuIGltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBhbWlPckNvbnRhaW5lcklkKGJhc2VJZDogc3RyaW5nLCBpbWFnZVJlY2lwZUFybj86IHN0cmluZywgY29udGFpbmVyUmVjaXBlQXJuPzogc3RyaW5nKSB7XG4gICAgaWYgKGltYWdlUmVjaXBlQXJuKSB7XG4gICAgICByZXR1cm4gYEFNSSAke2Jhc2VJZH1gO1xuICAgIH1cbiAgICBpZiAoY29udGFpbmVyUmVjaXBlQXJuKSB7XG4gICAgICByZXR1cm4gYERvY2tlciAke2Jhc2VJZH1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBpbWFnZVJlY2lwZUFybiBvciBjb250YWluZXJSZWNpcGVBcm4gbXVzdCBiZSBkZWZpbmVkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUGlwZWxpbmUoaW5mcmE6IGltYWdlYnVpbGRlci5DZm5JbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24sIGRpc3Q6IGltYWdlYnVpbGRlci5DZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLCBsb2c6IGxvZ3MuTG9nR3JvdXAsXG4gICAgaW1hZ2VSZWNpcGVBcm4/OiBzdHJpbmcsIGNvbnRhaW5lclJlY2lwZUFybj86IHN0cmluZyk6IGltYWdlYnVpbGRlci5DZm5JbWFnZVBpcGVsaW5lIHtcbiAgICBsZXQgc2NoZWR1bGVPcHRpb25zOiBpbWFnZWJ1aWxkZXIuQ2ZuSW1hZ2VQaXBlbGluZS5TY2hlZHVsZVByb3BlcnR5IHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnJlYnVpbGRJbnRlcnZhbC50b0RheXMoKSA+IDApIHtcbiAgICAgIHNjaGVkdWxlT3B0aW9ucyA9IHtcbiAgICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBldmVudHMuU2NoZWR1bGUucmF0ZSh0aGlzLnJlYnVpbGRJbnRlcnZhbCkuZXhwcmVzc2lvblN0cmluZyxcbiAgICAgICAgcGlwZWxpbmVFeGVjdXRpb25TdGFydENvbmRpdGlvbjogJ0VYUFJFU1NJT05fTUFUQ0hfT05MWScsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBpbWFnZWJ1aWxkZXIuQ2ZuSW1hZ2VQaXBlbGluZSh0aGlzLCB0aGlzLmFtaU9yQ29udGFpbmVySWQoJ1BpcGVsaW5lJywgaW1hZ2VSZWNpcGVBcm4sIGNvbnRhaW5lclJlY2lwZUFybiksIHtcbiAgICAgIG5hbWU6IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUodGhpcyksXG4gICAgICAvLyBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIGluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbkFybjogaW5mcmEuYXR0ckFybixcbiAgICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IGRpc3QuYXR0ckFybixcbiAgICAgIGltYWdlUmVjaXBlQXJuLFxuICAgICAgY29udGFpbmVyUmVjaXBlQXJuLFxuICAgICAgc2NoZWR1bGU6IHNjaGVkdWxlT3B0aW9ucyxcbiAgICAgIGltYWdlVGVzdHNDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGltYWdlVGVzdHNFbmFibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcGlwZWxpbmUubm9kZS5hZGREZXBlbmRlbmN5KGluZnJhKTtcbiAgICBwaXBlbGluZS5ub2RlLmFkZERlcGVuZGVuY3kobG9nKTtcblxuICAgIHJldHVybiBwaXBlbGluZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmV0d29yayBjb25uZWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbnMoKTogZWMyLkNvbm5lY3Rpb25zIHtcbiAgICByZXR1cm4gbmV3IGVjMi5Db25uZWN0aW9ucyh7IHNlY3VyaXR5R3JvdXBzOiB0aGlzLnNlY3VyaXR5R3JvdXBzIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBncmFudFByaW5jaXBhbCgpOiBpYW0uSVByaW5jaXBhbCB7XG4gICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgfVxuXG4gIGJpbmRBbWkoKTogUnVubmVyQW1pIHtcbiAgICBpZiAodGhpcy5ib3VuZEFtaSkge1xuICAgICAgcmV0dXJuIHRoaXMuYm91bmRBbWk7XG4gICAgfVxuXG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGUgPSBuZXcgZWMyLkxhdW5jaFRlbXBsYXRlKHRoaXMsICdMYXVuY2ggdGVtcGxhdGUnLCB7XG4gICAgICByZXF1aXJlSW1kc3YyOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGVDb25maWdzOiBpbWFnZWJ1aWxkZXIuQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5MYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW3tcbiAgICAgIGxhdW5jaFRlbXBsYXRlSWQ6IGxhdW5jaFRlbXBsYXRlLmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICBzZXREZWZhdWx0VmVyc2lvbjogdHJ1ZSxcbiAgICB9XTtcbiAgICBjb25zdCBmYXN0TGF1bmNoQ29uZmlnczogaW1hZ2VidWlsZGVyLkNmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRmFzdExhdW5jaENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG5cbiAgICBpZiAodGhpcy5mYXN0TGF1bmNoT3B0aW9ucz8uZW5hYmxlZCA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLm9zLmlzKE9zLldJTkRPV1MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFzdCBsYXVuY2ggaXMgb25seSBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MnKTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIGEgc2VwYXJhdGUgbGF1bmNoIHRlbXBsYXRlIGZvciBmYXN0IGxhdW5jaCBzbzpcbiAgICAgIC8vICAtIHNldHRpbmdzIGRvbid0IGFmZmVjdCB0aGUgcnVubmVyc1xuICAgICAgLy8gIC0gZW5hYmxpbmcgZmFzdCBsYXVuY2ggb24gYW4gZXhpc3RpbmcgYnVpbGRlciB3b3JrcyAod2l0aG91dCBhIG5ldyBsYXVuY2ggdGVtcGxhdGUsIEVDMiBJbWFnZSBCdWlsZGVyIHdpbGwgdXNlIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBpbnN0YW5jZSBvciBWUEMgY29uZmlnKVxuICAgICAgLy8gIC0gc2V0dGluZyB2cGMgKyBzdWJuZXQgb24gdGhlIG1haW4gbGF1bmNoIHRlbXBsYXRlIHdpbGwgY2F1c2UgUnVuSW5zdGFuY2VzIHRvIGZhaWxcbiAgICAgIC8vICAtIEVDMiBJbWFnZSBCdWlsZGVyIHNlZW1zIHRvIGdldCBjb25mdXNlZCB3aXRoIHdoaWNoIGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIHRvIGJhc2UgYW55IG5ldyB2ZXJzaW9uIG9uLCBzbyBhIG5ldyB0ZW1wbGF0ZSBpcyBhbHdheXMgYmVzdFxuICAgICAgY29uc3QgZmFzdExhdW5jaFRlbXBsYXRlID0gbmV3IGVjMi5DZm5MYXVuY2hUZW1wbGF0ZSh0aGlzLCAnRmFzdCBMYXVuY2ggVGVtcGxhdGUnLCB7XG4gICAgICAgIGxhdW5jaFRlbXBsYXRlRGF0YToge1xuICAgICAgICAgIG1ldGFkYXRhT3B0aW9uczoge1xuICAgICAgICAgICAgaHR0cFRva2VuczogJ3JlcXVpcmVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogdGhpcy5pbnN0YW5jZVR5cGUudG9TdHJpbmcoKSxcbiAgICAgICAgICBuZXR3b3JrSW50ZXJmYWNlczogW3tcbiAgICAgICAgICAgIHN1Ym5ldElkOiB0aGlzLnZwYz8uc2VsZWN0U3VibmV0cyh0aGlzLnN1Ym5ldFNlbGVjdGlvbikuc3VibmV0SWRzWzBdLFxuICAgICAgICAgICAgZGV2aWNlSW5kZXg6IDAsXG4gICAgICAgICAgICBncm91cHM6IHRoaXMuc2VjdXJpdHlHcm91cHMubWFwKHNnID0+IHNnLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgdGFnU3BlY2lmaWNhdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiAnaW5zdGFuY2UnLFxuICAgICAgICAgICAgICB0YWdzOiBbe1xuICAgICAgICAgICAgICAgIGtleTogJ05hbWUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBgJHt0aGlzLm5vZGUucGF0aH0vRmFzdCBMYXVuY2ggSW5zdGFuY2VgLFxuICAgICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogJ3ZvbHVtZScsXG4gICAgICAgICAgICAgIHRhZ3M6IFt7XG4gICAgICAgICAgICAgICAga2V5OiAnTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGAke3RoaXMubm9kZS5wYXRofS9GYXN0IExhdW5jaCBJbnN0YW5jZWAsXG4gICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB0YWdTcGVjaWZpY2F0aW9uczogW3tcbiAgICAgICAgICByZXNvdXJjZVR5cGU6ICdsYXVuY2gtdGVtcGxhdGUnLFxuICAgICAgICAgIHRhZ3M6IFt7XG4gICAgICAgICAgICBrZXk6ICdOYW1lJyxcbiAgICAgICAgICAgIHZhbHVlOiBgJHt0aGlzLm5vZGUucGF0aH0vRmFzdCBMYXVuY2ggVGVtcGxhdGVgLFxuICAgICAgICAgIH1dLFxuICAgICAgICB9XSxcbiAgICAgIH0pO1xuXG4gICAgICBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3MucHVzaCh7XG4gICAgICAgIGxhdW5jaFRlbXBsYXRlSWQ6IGZhc3RMYXVuY2hUZW1wbGF0ZS5hdHRyTGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgICAgc2V0RGVmYXVsdFZlcnNpb246IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGZhc3RMYXVuY2hDb25maWdzLnB1c2goe1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBsYXVuY2hUZW1wbGF0ZToge1xuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlSWQ6IGZhc3RMYXVuY2hUZW1wbGF0ZS5hdHRyTGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgICAgfSxcbiAgICAgICAgbWF4UGFyYWxsZWxMYXVuY2hlczogdGhpcy5mYXN0TGF1bmNoT3B0aW9ucz8ubWF4UGFyYWxsZWxMYXVuY2hlcyA/PyA2LFxuICAgICAgICBzbmFwc2hvdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICB0YXJnZXRSZXNvdXJjZUNvdW50OiB0aGlzLmZhc3RMYXVuY2hPcHRpb25zPy50YXJnZXRSZXNvdXJjZUNvdW50ID8/IDEsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFja05hbWUgPSBjZGsuU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGJ1aWxkZXJOYW1lID0gdGhpcy5ub2RlLnBhdGg7XG5cbiAgICBjb25zdCBkaXN0ID0gbmV3IGltYWdlYnVpbGRlci5DZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uKHRoaXMsICdBTUkgRGlzdHJpYnV0aW9uJywge1xuICAgICAgbmFtZTogdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSh0aGlzKSxcbiAgICAgIC8vIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgZGlzdHJpYnV0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVnaW9uOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICAgICAgYW1pRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgTmFtZTogYCR7Y2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTAwLFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnXy0nLFxuICAgICAgICAgICAgfSl9LXt7IGltYWdlYnVpbGRlcjpidWlsZERhdGUgfX1gLFxuICAgICAgICAgICAgQW1pVGFnczoge1xuICAgICAgICAgICAgICAnTmFtZSc6IHRoaXMubm9kZS5pZCxcbiAgICAgICAgICAgICAgJ0dpdEh1YlJ1bm5lcnM6U3RhY2snOiBzdGFja05hbWUsXG4gICAgICAgICAgICAgICdHaXRIdWJSdW5uZXJzOkJ1aWxkZXInOiBidWlsZGVyTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zOiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3MsXG4gICAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zOiBmYXN0TGF1bmNoQ29uZmlncy5sZW5ndGggPiAwID8gZmFzdExhdW5jaENvbmZpZ3MgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVjaXBlID0gbmV3IEFtaVJlY2lwZSh0aGlzLCAnQW1pIFJlY2lwZScsIHtcbiAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtKCksXG4gICAgICBjb21wb25lbnRzOiB0aGlzLmJpbmRDb21wb25lbnRzKCksXG4gICAgICBhcmNoaXRlY3R1cmU6IHRoaXMuYXJjaGl0ZWN0dXJlLFxuICAgICAgYmFzZUFtaTogdGhpcy5iYXNlQW1pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbG9nID0gdGhpcy5jcmVhdGVMb2coJ0FtaSBMb2cnLCByZWNpcGUubmFtZSk7XG4gICAgY29uc3QgaW5mcmEgPSB0aGlzLmNyZWF0ZUluZnJhc3RydWN0dXJlKFtcbiAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZScpLFxuICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdFQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXInKSxcbiAgICBdKTtcbiAgICB0aGlzLmNyZWF0ZUltYWdlKGluZnJhLCBkaXN0LCBsb2csIHJlY2lwZS5hcm4sIHVuZGVmaW5lZCk7XG4gICAgdGhpcy5jcmVhdGVQaXBlbGluZShpbmZyYSwgZGlzdCwgbG9nLCByZWNpcGUuYXJuLCB1bmRlZmluZWQpO1xuXG4gICAgdGhpcy5ib3VuZEFtaSA9IHtcbiAgICAgIGxhdW5jaFRlbXBsYXRlOiBsYXVuY2hUZW1wbGF0ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5hcmNoaXRlY3R1cmUsXG4gICAgICBvczogdGhpcy5vcyxcbiAgICAgIGxvZ0dyb3VwOiBsb2csXG4gICAgICBydW5uZXJWZXJzaW9uOiBSdW5uZXJWZXJzaW9uLnNwZWNpZmljKCd1bmtub3duJyksXG4gICAgfTtcblxuICAgIHRoaXMuYW1pQ2xlYW5lcihyZWNpcGUsIHN0YWNrTmFtZSwgYnVpbGRlck5hbWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuYm91bmRBbWk7XG4gIH1cblxuICBwcml2YXRlIGFtaUNsZWFuZXIocmVjaXBlOiBBbWlSZWNpcGUsIHN0YWNrTmFtZTogc3RyaW5nLCBidWlsZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGVsZXRlciA9IHNpbmdsZXRvbkxhbWJkYShEZWxldGVBbWlGdW5jdGlvbiwgdGhpcywgJ2RlbGV0ZS1hbWknLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0RlbGV0ZSBvbGQgR2l0SHViIFJ1bm5lciBBTUlzJyxcbiAgICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnZWMyOkRlc2NyaWJlSW1hZ2VzJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2VjMjpEZXJlZ2lzdGVySW1hZ2UnLCAnZWMyOkRlbGV0ZVNuYXBzaG90J10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgJ2F3czpSZXNvdXJjZVRhZy9HaXRIdWJSdW5uZXJzOlN0YWNrJzogc3RhY2tOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIGxvZ1JldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICB9KTtcblxuICAgIC8vIGRlbGV0ZSBhbGwgQU1JcyB3aGVuIHRoaXMgY29uc3RydWN0IGlzIHJlbW92ZWRcbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0FNSSBEZWxldGVyJywge1xuICAgICAgc2VydmljZVRva2VuOiBkZWxldGVyLmZ1bmN0aW9uQXJuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpBbWlEZWxldGVyJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgIEJ1aWxkZXJOYW1lOiBidWlsZGVyTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBkZWxldGUgb2xkIEFNSXMgKyBJQiByZXNvdXJjZXMgZGFpbHlcbiAgICBuZXcgaW1hZ2VidWlsZGVyLkNmbkxpZmVjeWNsZVBvbGljeSh0aGlzLCAnTGlmZWN5Y2xlIFBvbGljeSBBTUknLCB7XG4gICAgICBuYW1lOiB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lKHRoaXMpLFxuICAgICAgZGVzY3JpcHRpb246IGBEZWxldGUgb2xkIEdpdEh1YiBSdW5uZXIgQU1JcyBmb3IgJHt0aGlzLm5vZGUucGF0aH1gLFxuICAgICAgZXhlY3V0aW9uUm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdMaWZlY3ljbGUgUG9saWN5IEFNSSBSb2xlJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnaW1hZ2VidWlsZGVyLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICBpYjogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbJ3RhZzpHZXRSZXNvdXJjZXMnLCAnaW1hZ2VidWlsZGVyOkRlbGV0ZUltYWdlJ10sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSwgLy8gSW1hZ2UgQnVpbGRlciBkb2Vzbid0IHN1cHBvcnQgc2NvcGluZyB0aGlzIDooXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBhbWk6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogWydlYzI6RGVzY3JpYmVJbWFnZXMnLCAnZWMyOkRlc2NyaWJlSW1hZ2VBdHRyaWJ1dGUnXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFsnZWMyOkRlcmVnaXN0ZXJJbWFnZScsICdlYzI6RGVsZXRlU25hcHNob3QnXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgICAgICAgICAnYXdzOlJlc291cmNlVGFnL0dpdEh1YlJ1bm5lcnM6U3RhY2snOiBzdGFja05hbWUsXG4gICAgICAgICAgICAgICAgICAgICdhd3M6UmVzb3VyY2VUYWcvR2l0SHViUnVubmVyczpCdWlsZGVyJzogYnVpbGRlck5hbWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pLnJvbGVBcm4sXG4gICAgICBwb2xpY3lEZXRhaWxzOiBbe1xuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICB0eXBlOiAnREVMRVRFJyxcbiAgICAgICAgICBpbmNsdWRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICBhbWlzOiB0cnVlLFxuICAgICAgICAgICAgc25hcHNob3RzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIHR5cGU6ICdDT1VOVCcsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICAgIHJlc291cmNlVHlwZTogJ0FNSV9JTUFHRScsXG4gICAgICByZXNvdXJjZVNlbGVjdGlvbjoge1xuICAgICAgICByZWNpcGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogcmVjaXBlLm5hbWUsXG4gICAgICAgICAgICBzZW1hbnRpY1ZlcnNpb246IHJlY2lwZS52ZXJzaW9uLCAvLyBkb2NzIHNheSBpdCdzIG9wdGlvbmFsLCBidXQgaXQncyBub3RcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZENvbXBvbmVudHMoKTogSW1hZ2VCdWlsZGVyQ29tcG9uZW50W10ge1xuICAgIGlmICh0aGlzLmJvdW5kQ29tcG9uZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5ib3VuZENvbXBvbmVudHMucHVzaCguLi50aGlzLmNvbXBvbmVudHMubWFwKChjLCBpKSA9PiBjLl9hc0F3c0ltYWdlQnVpbGRlckNvbXBvbmVudCh0aGlzLCBgQ29tcG9uZW50ICR7aX0gJHtjLm5hbWV9YCwgdGhpcy5vcywgdGhpcy5hcmNoaXRlY3R1cmUpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYm91bmRDb21wb25lbnRzO1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NJbWFnZUJ1aWxkZXJGYWlsZWRCdWlsZE5vdGlmaWVyIGltcGxlbWVudHMgY2RrLklBc3BlY3Qge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZpbHRlcmluZ1RvcGljKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldFRvcGljOiBzbnMuVG9waWMpIHtcbiAgICBjb25zdCB0b3BpYyA9IG5ldyBzbnMuVG9waWMoc2NvcGUsICdJbWFnZSBCdWlsZGVyIEJ1aWxkcycpO1xuICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJGYWlsZWRCdWlsZHNGdW5jdGlvbihzY29wZSwgJ0ltYWdlIEJ1aWxkZXIgQnVpbGRzIEZpbHRlcicsIHtcbiAgICAgIGxvZ1JldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFRBUkdFVF9UT1BJQ19BUk46IHRhcmdldFRvcGljLnRvcGljQXJuLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRvcGljLmFkZFN1YnNjcmlwdGlvbihuZXcgc3Vicy5MYW1iZGFTdWJzY3JpcHRpb24oZmlsdGVyKSk7XG4gICAgdGFyZ2V0VG9waWMuZ3JhbnRQdWJsaXNoKGZpbHRlcik7XG5cbiAgICByZXR1cm4gdG9waWM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRvcGljOiBzbnMuSVRvcGljKSB7XG4gIH1cblxuICBwdWJsaWMgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXdzSW1hZ2VCdWlsZGVyUnVubmVySW1hZ2VCdWlsZGVyKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbm9kZSBhcyBBd3NJbWFnZUJ1aWxkZXJSdW5uZXJJbWFnZUJ1aWxkZXI7XG4gICAgICBjb25zdCBpbmZyYU5vZGUgPSBidWlsZGVyLm5vZGUudHJ5RmluZENoaWxkKCdJbmZyYXN0cnVjdHVyZScpO1xuICAgICAgaWYgKGluZnJhTm9kZSkge1xuICAgICAgICBjb25zdCBpbmZyYSA9IGluZnJhTm9kZSBhcyBpbWFnZWJ1aWxkZXIuQ2ZuSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uO1xuICAgICAgICBpbmZyYS5zbnNUb3BpY0FybiA9IHRoaXMudG9waWMudG9waWNBcm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjZGsuQW5ub3RhdGlvbnMub2YoYnVpbGRlcikuYWRkV2FybmluZygnVW51c2VkIGJ1aWxkZXIgY2Fubm90IGdldCBub3RpZmljYXRpb25zIG9mIGZhaWxlZCBidWlsZHMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
700
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbWFnZS1idWlsZGVycy9hd3MtaW1hZ2UtYnVpbGRlci9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDZDQWdCcUI7QUFDckIsaURBQW9EO0FBQ3BELG1EQUFxRDtBQUVyRCwrQkFBa0Q7QUFDbEQscUNBQWtEO0FBQ2xELDJDQUFzRTtBQUN0RSwrREFBMEQ7QUFDMUQsbUZBQTZFO0FBQzdFLCtDQUEwRjtBQUMxRix1Q0FBbUY7QUFDbkYsa0VBQTZEO0FBQzdELHNDQUFvRztBQTJHcEc7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQWEscUJBQXNCLFNBQVEsK0JBQXNCO0lBYS9ELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0M7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhGLFdBQU0sR0FBc0IsRUFBRSxDQUFDO1FBSzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUUvQixJQUFJLEtBQUssR0FBVSxFQUFFLENBQUM7UUFFdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxNQUFNLEdBQVUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksZUFBZSxHQUFhLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUU5QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQ1YsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVzt3QkFDL0IsV0FBVyxFQUFF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QyxDQUFDO1lBQzlELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsU0FBd0QsQ0FBQztnQkFDdkUsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7WUFDckcsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoQ0QsZ0ZBZ0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIEFubm90YXRpb25zLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2VjciBhcyBlY3IsXG4gIGF3c19ldmVudHMgYXMgZXZlbnRzLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2ltYWdlYnVpbGRlciBhcyBpbWFnZWJ1aWxkZXIsXG4gIGF3c19sYW1iZGEgYXMgbGFtYmRhLFxuICBhd3NfbG9ncyBhcyBsb2dzLFxuICBhd3NfczNfYXNzZXRzIGFzIHMzX2Fzc2V0cyxcbiAgYXdzX3NucyBhcyBzbnMsXG4gIGF3c19zbnNfc3Vic2NyaXB0aW9ucyBhcyBzdWJzLFxuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIFJlbW92YWxQb2xpY3ksXG4gIFN0YWNrLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUYWdNdXRhYmlsaXR5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBbWlSZWNpcGUsIGRlZmF1bHRCYXNlQW1pIH0gZnJvbSAnLi9hbWknO1xuaW1wb3J0IHsgSW1hZ2VCdWlsZGVyT2JqZWN0QmFzZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IENvbnRhaW5lclJlY2lwZSwgZGVmYXVsdEJhc2VEb2NrZXJJbWFnZSB9IGZyb20gJy4vY29udGFpbmVyJztcbmltcG9ydCB7IERlbGV0ZUFtaUZ1bmN0aW9uIH0gZnJvbSAnLi9kZWxldGUtYW1pLWZ1bmN0aW9uJztcbmltcG9ydCB7IEZpbHRlckZhaWxlZEJ1aWxkc0Z1bmN0aW9uIH0gZnJvbSAnLi9maWx0ZXItZmFpbGVkLWJ1aWxkcy1mdW5jdGlvbic7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUsIE9zLCBSdW5uZXJBbWksIFJ1bm5lckltYWdlLCBSdW5uZXJWZXJzaW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7IHNpbmdsZXRvbkxvZ0dyb3VwLCBzaW5nbGV0b25MYW1iZGEsIFNpbmdsZXRvbkxvZ1R5cGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBCdWlsZEltYWdlRnVuY3Rpb24gfSBmcm9tICcuLi9idWlsZC1pbWFnZS1mdW5jdGlvbic7XG5pbXBvcnQgeyBSdW5uZXJJbWFnZUJ1aWxkZXJCYXNlLCBSdW5uZXJJbWFnZUJ1aWxkZXJQcm9wcywgdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzSW1hZ2VCdWlsZGVyUnVubmVySW1hZ2VCdWlsZGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHR5cGUgdXNlZCB0byBidWlsZCB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IG01LmxhcmdlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBlYzIuSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBmYXN0IGxhdW5jaC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgV2luZG93cyBBTUlzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkaXNhYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZmFzdExhdW5jaE9wdGlvbnM/OiBGYXN0TGF1bmNoT3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBmYXN0IGxhdW5jaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYXN0TGF1bmNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbmFibGUgZmFzdCBsYXVuY2ggZm9yIEFNSXMgZ2VuZXJhdGVkIGJ5IHRoaXMgYnVpbGRlci4gSXQgY3JlYXRlcyBhIHNuYXBzaG90IG9mIHRoZSByb290IHZvbHVtZSBhbmQgdXNlcyBpdCB0byBsYXVuY2ggbmV3IGluc3RhbmNlcyBmYXN0ZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgQU1Jcy5cbiAgICpcbiAgICogQG5vdGUgdGhpcyBmZWF0dXJlIGNvbWVzIHdpdGggYWRkaXRpb25hbCByZXNvdXJjZSBjb3N0cy4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1dpbmRvd3NHdWlkZS93aW4tZmFzdC1sYXVuY2gtbWFuYWdlLWNvc3RzLmh0bWxcbiAgICogQG5vdGUgZW5hYmxpbmcgZmFzdCBsYXVuY2ggb24gYW4gZXhpc3RpbmcgYnVpbGRlciB3aWxsIG5vdCBlbmFibGUgaXQgZm9yIGV4aXN0aW5nIEFNSXMuIEl0IHdpbGwgb25seSBhZmZlY3QgbmV3IEFNSXMuIElmIHlvdSB3YW50IGltbWVkaWF0ZSBlZmZlY3QsIHRyaWdnZXIgYSBuZXcgaW1hZ2UgYnVpbGQuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY3JlYXRlIGEgbmV3IGJ1aWxkZXIgd2l0aCBmYXN0IGxhdW5jaCBlbmFibGVkIGFuZCB1c2UgaXQgZm9yIG5ldyBBTUlzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBpbnN0YW5jZXMgdGhhdCBhcmUgbGF1bmNoZWQgZm9yIGNyZWF0aW5nIHJlc291cmNlcy5cbiAgICpcbiAgICogTXVzdCBiZSBhdCBsZWFzdCA2LlxuICAgKlxuICAgKiBAZGVmYXVsdCA2XG4gICAqL1xuICByZWFkb25seSBtYXhQYXJhbGxlbExhdW5jaGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHByZS1wcm92aXNpb25lZCBzbmFwc2hvdHMgdG8ga2VlcCBvbiBoYW5kIGZvciBhIGZhc3QtbGF1bmNoIGVuYWJsZWQgV2luZG93cyBBTUkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQW4gYXNzZXQgaW5jbHVkaW5nIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHBsYWNlIGluc2lkZSB0aGUgYnVpbHQgaW1hZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VCdWlsZGVyQXNzZXQge1xuICAvKipcbiAgICogUGF0aCB0byBwbGFjZSBhc3NldCBpbiB0aGUgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFzc2V0IHRvIHBsYWNlIGluIHRoZSBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0OiBzM19hc3NldHMuQXNzZXQ7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgSW1hZ2VCdWlsZGVyQ29tcG9uZW50IGNvbnN0cnVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbWFnZUJ1aWxkZXJDb21wb25lbnRQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIENvbXBvbmVudCBwbGF0Zm9ybS4gTXVzdCBtYXRjaCB0aGUgYnVpbGRlciBwbGF0Zm9ybS5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiAnTGludXgnIHwgJ1dpbmRvd3MnO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcG9uZW50IGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogU2hlbGwgY29tbWFuZHMgdG8gcnVuIHdoZW4gYWRkaW5nIHRoaXMgY29tcG9uZW50IHRvIHRoZSBpbWFnZS5cbiAgICpcbiAgICogT24gTGludXgsIHRoZXNlIGFyZSBiYXNoIGNvbW1hbmRzLiBPbiBXaW5kb3dzLCB0aGVyZSBhcmUgUG93ZXJTaGVsbCBjb21tYW5kcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYXNzZXRzIHRvIGFkZCB0byB0aGUgYnVpbHQgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM/OiBJbWFnZUJ1aWxkZXJBc3NldFtdO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlIGEgcmVib290IGFmdGVyIGluc3RhbGxpbmcgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWJvb3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbXBvbmVudHMgYXJlIGEgc2V0IG9mIGNvbW1hbmRzIHRvIHJ1biBhbmQgb3B0aW9uYWwgZmlsZXMgdG8gYWRkIHRvIGFuIGltYWdlLiBDb21wb25lbnRzIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIG9mIGltYWdlcyBidWlsdCBieSBJbWFnZSBCdWlsZGVyLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgXG4gKiBuZXcgSW1hZ2VCdWlsZGVyQ29tcG9uZW50KHRoaXMsICdBV1MgQ0xJJywge1xuICogICBwbGF0Zm9ybTogJ1dpbmRvd3MnLFxuICogICBkaXNwbGF5TmFtZTogJ0FXUyBDTEknLFxuICogICBkZXNjcmlwdGlvbjogJ0luc3RhbGwgbGF0ZXN0IHZlcnNpb24gb2YgQVdTIENMSScsXG4gKiAgIGNvbW1hbmRzOiBbXG4gKiAgICAgJyRwID0gU3RhcnQtUHJvY2VzcyBtc2lleGVjLmV4ZSAtUGFzc1RocnUgLVdhaXQgLUFyZ3VtZW50TGlzdCBcXCcvaSBodHRwczovL2F3c2NsaS5hbWF6b25hd3MuY29tL0FXU0NMSVYyLm1zaSAvcW5cXCcnLFxuICogICAgICdpZiAoJHAuRXhpdENvZGUgLW5lIDApIHsgdGhyb3cgXCJFeGl0IGNvZGUgaXMgJHAuRXhpdENvZGVcIiB9JyxcbiAqICAgXSxcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBgUnVubmVySW1hZ2VDb21wb25lbnRgIGluc3RlYWQgYXMgdGhpcyBiZSBpbnRlcm5hbCBzb29uLlxuICovXG5leHBvcnQgY2xhc3MgSW1hZ2VCdWlsZGVyQ29tcG9uZW50IGV4dGVuZHMgSW1hZ2VCdWlsZGVyT2JqZWN0QmFzZSB7XG4gIC8qKlxuICAgKiBDb21wb25lbnQgQVJOLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdXBwb3J0ZWQgcGxhdGZvcm0gZm9yIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGxhdGZvcm06ICdXaW5kb3dzJyB8ICdMaW51eCc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhc3NldHM6IHMzX2Fzc2V0cy5Bc3NldFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEltYWdlQnVpbGRlckNvbXBvbmVudFByb3BlcnRpZXMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5wbGF0Zm9ybSA9IHByb3BzLnBsYXRmb3JtO1xuXG4gICAgbGV0IHN0ZXBzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHByb3BzLmFzc2V0cykge1xuICAgICAgbGV0IGlucHV0czogYW55W10gPSBbXTtcbiAgICAgIGxldCBleHRyYWN0Q29tbWFuZHM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGFzc2V0IG9mIHByb3BzLmFzc2V0cykge1xuICAgICAgICB0aGlzLmFzc2V0cy5wdXNoKGFzc2V0LmFzc2V0KTtcblxuICAgICAgICBpZiAoYXNzZXQuYXNzZXQuaXNGaWxlKSB7XG4gICAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgICAgc291cmNlOiBhc3NldC5hc3NldC5zM09iamVjdFVybCxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBhc3NldC5wYXRoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGFzc2V0LmFzc2V0LmlzWmlwQXJjaGl2ZSkge1xuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIHNvdXJjZTogYXNzZXQuYXNzZXQuczNPYmplY3RVcmwsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYCR7YXNzZXQucGF0aH0uemlwYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocHJvcHMucGxhdGZvcm0gPT09ICdXaW5kb3dzJykge1xuICAgICAgICAgICAgZXh0cmFjdENvbW1hbmRzLnB1c2goYEV4cGFuZC1BcmNoaXZlIFwiJHthc3NldC5wYXRofS56aXBcIiAtRGVzdGluYXRpb25QYXRoIFwiJHthc3NldC5wYXRofVwiYCk7XG4gICAgICAgICAgICBleHRyYWN0Q29tbWFuZHMucHVzaChgZGVsIFwiJHthc3NldC5wYXRofS56aXBcImApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHRyYWN0Q29tbWFuZHMucHVzaChgdW56aXAgXCIke2Fzc2V0LnBhdGh9LnppcFwiIC1kIFwiJHthc3NldC5wYXRofVwiYCk7XG4gICAgICAgICAgICBleHRyYWN0Q29tbWFuZHMucHVzaChgcm0gXCIke2Fzc2V0LnBhdGh9LnppcFwiYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhc3NldCB0eXBlOiAke2Fzc2V0LmFzc2V0fWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnRG93bmxvYWQnLFxuICAgICAgICBhY3Rpb246ICdTM0Rvd25sb2FkJyxcbiAgICAgICAgaW5wdXRzLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChleHRyYWN0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiAnRXh0cmFjdCcsXG4gICAgICAgICAgYWN0aW9uOiBwcm9wcy5wbGF0Zm9ybSA9PT0gJ0xpbnV4JyA/ICdFeGVjdXRlQmFzaCcgOiAnRXhlY3V0ZVBvd2VyU2hlbGwnLFxuICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgY29tbWFuZHM6IHRoaXMucHJlZml4Q29tbWFuZHNXaXRoRXJyb3JIYW5kbGluZyhwcm9wcy5wbGF0Zm9ybSwgZXh0cmFjdENvbW1hbmRzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgc3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdSdW4nLFxuICAgICAgICBhY3Rpb246IHByb3BzLnBsYXRmb3JtID09PSAnTGludXgnID8gJ0V4ZWN1dGVCYXNoJyA6ICdFeGVjdXRlUG93ZXJTaGVsbCcsXG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGNvbW1hbmRzOiB0aGlzLnByZWZpeENvbW1hbmRzV2l0aEVycm9ySGFuZGxpbmcocHJvcHMucGxhdGZvcm0sIHByb3BzLmNvbW1hbmRzKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5yZWJvb3QgPz8gZmFsc2UpIHtcbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnUmVib290JyxcbiAgICAgICAgYWN0aW9uOiAnUmVib290JyxcbiAgICAgICAgaW5wdXRzOiB7fSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBuYW1lOiBwcm9wcy5kaXNwbGF5TmFtZSxcbiAgICAgIHNjaGVtYVZlcnNpb246ICcxLjAnLFxuICAgICAgcGhhc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYnVpbGQnLFxuICAgICAgICAgIHN0ZXBzLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgbmFtZSA9IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUodGhpcyk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IGltYWdlYnVpbGRlci5DZm5Db21wb25lbnQodGhpcywgJ0NvbXBvbmVudCcsIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBwbGF0Zm9ybTogcHJvcHMucGxhdGZvcm0sXG4gICAgICB2ZXJzaW9uOiB0aGlzLmdlbmVyYXRlVmVyc2lvbignQ29tcG9uZW50JywgbmFtZSwge1xuICAgICAgICBwbGF0Zm9ybTogcHJvcHMucGxhdGZvcm0sXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIH0pLFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFybiA9IGNvbXBvbmVudC5hdHRyQXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBwcmluY2lwYWwgb24gdGhlIGFzc2V0cyBidWNrZXRzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZVxuICAgKi9cbiAgZ3JhbnRBc3NldHNSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgZm9yIChjb25zdCBhc3NldCBvZiB0aGlzLmFzc2V0cykge1xuICAgICAgYXNzZXQuZ3JhbnRSZWFkKGdyYW50ZWUpO1xuICAgIH1cbiAgfVxuXG4gIHByZWZpeENvbW1hbmRzV2l0aEVycm9ySGFuZGxpbmcocGxhdGZvcm06ICdXaW5kb3dzJyB8ICdMaW51eCcsIGNvbW1hbmRzOiBzdHJpbmdbXSkge1xuICAgIGlmIChwbGF0Zm9ybSA9PSAnV2luZG93cycpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICckRXJyb3JBY3Rpb25QcmVmZXJlbmNlID0gXFwnU3RvcFxcJycsXG4gICAgICAgICckUHJvZ3Jlc3NQcmVmZXJlbmNlID0gXFwnU2lsZW50bHlDb250aW51ZVxcJycsXG4gICAgICAgICdTZXQtUFNEZWJ1ZyAtVHJhY2UgMScsXG4gICAgICBdLmNvbmNhdChjb21tYW5kcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICdzZXQgLWV4JyxcbiAgICAgIF0uY29uY2F0KGNvbW1hbmRzKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0ltYWdlQnVpbGRlclJ1bm5lckltYWdlQnVpbGRlciBleHRlbmRzIFJ1bm5lckltYWdlQnVpbGRlckJhc2Uge1xuICBwcml2YXRlIGJvdW5kRG9ja2VySW1hZ2U/OiBSdW5uZXJJbWFnZTtcbiAgcHJpdmF0ZSBib3VuZEFtaT86IFJ1bm5lckFtaTtcbiAgcHJpdmF0ZSByZWFkb25seSBvczogT3M7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUltYWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUFtaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dSZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5O1xuICBwcml2YXRlIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM6IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1Ym5ldFNlbGVjdGlvbjogZWMyLlN1Ym5ldFNlbGVjdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSByZWJ1aWxkSW50ZXJ2YWw6IGNkay5EdXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBib3VuZENvbXBvbmVudHM6IEltYWdlQnVpbGRlckNvbXBvbmVudFtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlO1xuICBwcml2YXRlIGluZnJhc3RydWN0dXJlOiBpbWFnZWJ1aWxkZXIuQ2ZuSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvbGU6IGlhbS5Sb2xlO1xuICBwcml2YXRlIHJlYWRvbmx5IGZhc3RMYXVuY2hPcHRpb25zPzogRmFzdExhdW5jaE9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2FpdE9uRGVwbG95OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogUnVubmVySW1hZ2VCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucykge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZygnY29kZUJ1aWxkT3B0aW9ucyBhcmUgaWdub3JlZCB3aGVuIHVzaW5nIEFXUyBJbWFnZSBCdWlsZGVyIHRvIGJ1aWxkIHJ1bm5lciBpbWFnZXMuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcyA9IHByb3BzPy5vcyA/PyBPcy5MSU5VWF9VQlVOVFU7XG4gICAgdGhpcy5hcmNoaXRlY3R1cmUgPSBwcm9wcz8uYXJjaGl0ZWN0dXJlID8/IEFyY2hpdGVjdHVyZS5YODZfNjQ7XG4gICAgdGhpcy5yZWJ1aWxkSW50ZXJ2YWwgPSBwcm9wcz8ucmVidWlsZEludGVydmFsID8/IER1cmF0aW9uLmRheXMoNyk7XG4gICAgdGhpcy5sb2dSZXRlbnRpb24gPSBwcm9wcz8ubG9nUmV0ZW50aW9uID8/IFJldGVudGlvbkRheXMuT05FX01PTlRIO1xuICAgIHRoaXMubG9nUmVtb3ZhbFBvbGljeSA9IHByb3BzPy5sb2dSZW1vdmFsUG9saWN5ID8/IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgICB0aGlzLnZwYyA9IHByb3BzPy52cGMgPz8gZWMyLlZwYy5mcm9tTG9va3VwKHRoaXMsICdWUEMnLCB7IGlzRGVmYXVsdDogdHJ1ZSB9KTtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzID0gcHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1NHJywgeyB2cGM6IHRoaXMudnBjIH0pXTtcbiAgICB0aGlzLnN1Ym5ldFNlbGVjdGlvbiA9IHByb3BzPy5zdWJuZXRTZWxlY3Rpb247XG4gICAgdGhpcy5iYXNlSW1hZ2UgPSBwcm9wcz8uYmFzZURvY2tlckltYWdlID8/IGRlZmF1bHRCYXNlRG9ja2VySW1hZ2UodGhpcy5vcyk7XG4gICAgdGhpcy5iYXNlQW1pID0gcHJvcHM/LmJhc2VBbWkgPz8gZGVmYXVsdEJhc2VBbWkodGhpcywgdGhpcy5vcywgdGhpcy5hcmNoaXRlY3R1cmUpO1xuICAgIHRoaXMuaW5zdGFuY2VUeXBlID0gcHJvcHM/LmF3c0ltYWdlQnVpbGRlck9wdGlvbnM/Lmluc3RhbmNlVHlwZSA/PyBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLk01LCBlYzIuSW5zdGFuY2VTaXplLkxBUkdFKTtcbiAgICB0aGlzLmZhc3RMYXVuY2hPcHRpb25zID0gcHJvcHM/LmF3c0ltYWdlQnVpbGRlck9wdGlvbnM/LmZhc3RMYXVuY2hPcHRpb25zO1xuICAgIHRoaXMud2FpdE9uRGVwbG95ID0gcHJvcHM/LndhaXRPbkRlcGxveSA/PyB0cnVlO1xuXG4gICAgLy8gY29uZmlybSBpbnN0YW5jZSB0eXBlXG4gICAgaWYgKCF0aGlzLmFyY2hpdGVjdHVyZS5pbnN0YW5jZVR5cGVNYXRjaCh0aGlzLmluc3RhbmNlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQnVpbGRlciBhcmNoaXRlY3R1cmUgKCR7dGhpcy5hcmNoaXRlY3R1cmUubmFtZX0pIGRvZXNuJ3QgbWF0Y2ggc2VsZWN0ZWQgaW5zdGFuY2UgdHlwZSAoJHt0aGlzLmluc3RhbmNlVHlwZX0gLyAke3RoaXMuaW5zdGFuY2VUeXBlLmFyY2hpdGVjdHVyZX0pYCk7XG4gICAgfVxuXG4gICAgLy8gd2FybiBhZ2FpbnN0IGlzb2xhdGVkIG5ldHdvcmtzXG4gICAgaWYgKHByb3BzPy5zdWJuZXRTZWxlY3Rpb24/LnN1Ym5ldFR5cGUgPT0gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZygnUHJpdmF0ZSBpc29sYXRlZCBzdWJuZXRzIGNhbm5vdCBwdWxsIGZyb20gcHVibGljIEVDUiBhbmQgVlBDIGVuZHBvaW50IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiAnICtcbiAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2NvbnRhaW5lcnMtcm9hZG1hcC9pc3N1ZXMvMTE2MCcpO1xuICAgIH1cblxuICAgIC8vIHJvbGUgdG8gYmUgdXNlZCBieSBBV1MgSW1hZ2UgQnVpbGRlclxuICAgIHRoaXMucm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlYzIuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwbGF0Zm9ybSgpIHtcbiAgICBpZiAodGhpcy5vcy5pcyhPcy5XSU5ET1dTKSkge1xuICAgICAgcmV0dXJuICdXaW5kb3dzJztcbiAgICB9XG4gICAgaWYgKHRoaXMub3MuaXNJbihPcy5fQUxMX0xJTlVYX1ZFUlNJT05TKSkge1xuICAgICAgcmV0dXJuICdMaW51eCc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgT1MgJHt0aGlzLm9zLm5hbWV9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgQVdTIEltYWdlIEJ1aWxkZXJgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgSVJ1bm5lclByb3ZpZGVyIHRvIGZpbmFsaXplIHNldHRpbmdzIGFuZCBjcmVhdGUgdGhlIGltYWdlIGJ1aWxkZXIuXG4gICAqL1xuICBiaW5kRG9ja2VySW1hZ2UoKTogUnVubmVySW1hZ2Uge1xuICAgIGlmICh0aGlzLmJvdW5kRG9ja2VySW1hZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvdW5kRG9ja2VySW1hZ2U7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIHJlcG9zaXRvcnkgdGhhdCBvbmx5IGtlZXBzIG9uZSB0YWdcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gbmV3IGVjci5SZXBvc2l0b3J5KHRoaXMsICdSZXBvc2l0b3J5Jywge1xuICAgICAgaW1hZ2VTY2FuT25QdXNoOiB0cnVlLFxuICAgICAgaW1hZ2VUYWdNdXRhYmlsaXR5OiBUYWdNdXRhYmlsaXR5Lk1VVEFCTEUsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBlbXB0eU9uRGVsZXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdCA9IG5ldyBpbWFnZWJ1aWxkZXIuQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbih0aGlzLCAnRG9ja2VyIERpc3RyaWJ1dGlvbicsIHtcbiAgICAgIG5hbWU6IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUodGhpcyksXG4gICAgICAvLyBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIGRpc3RyaWJ1dGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlZ2lvbjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgICAgIGNvbnRhaW5lckRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIENvbnRhaW5lclRhZ3M6IFsnbGF0ZXN0J10sXG4gICAgICAgICAgICBUYXJnZXRSZXBvc2l0b3J5OiB7XG4gICAgICAgICAgICAgIFNlcnZpY2U6ICdFQ1InLFxuICAgICAgICAgICAgICBSZXBvc2l0b3J5TmFtZTogcmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBsZXQgZG9ja2VyZmlsZVRlbXBsYXRlID0gYEZST00ge3t7IGltYWdlYnVpbGRlcjpwYXJlbnRJbWFnZSB9fX1cbnt7eyBpbWFnZWJ1aWxkZXI6ZW52aXJvbm1lbnRzIH19fVxue3t7IGltYWdlYnVpbGRlcjpjb21wb25lbnRzIH19fWA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IGMuZ2V0RG9ja2VyQ29tbWFuZHModGhpcy5vcywgdGhpcy5hcmNoaXRlY3R1cmUpO1xuICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZG9ja2VyZmlsZVRlbXBsYXRlICs9ICdcXG4nICsgY29tbWFuZHMuam9pbignXFxuJykgKyAnXFxuJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGUgPSBuZXcgQ29udGFpbmVyUmVjaXBlKHRoaXMsICdDb250YWluZXIgUmVjaXBlJywge1xuICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0oKSxcbiAgICAgIGNvbXBvbmVudHM6IHRoaXMuYmluZENvbXBvbmVudHMoKSxcbiAgICAgIHRhcmdldFJlcG9zaXRvcnk6IHJlcG9zaXRvcnksXG4gICAgICBkb2NrZXJmaWxlVGVtcGxhdGU6IGRvY2tlcmZpbGVUZW1wbGF0ZSxcbiAgICAgIHBhcmVudEltYWdlOiB0aGlzLmJhc2VJbWFnZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZyA9IHRoaXMuY3JlYXRlTG9nKCdEb2NrZXIgTG9nJywgcmVjaXBlLm5hbWUpO1xuICAgIGNvbnN0IGluZnJhID0gdGhpcy5jcmVhdGVJbmZyYXN0cnVjdHVyZShbXG4gICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0FtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUnKSxcbiAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyRUNSQ29udGFpbmVyQnVpbGRzJyksXG4gICAgXSk7XG5cbiAgICBpZiAodGhpcy53YWl0T25EZXBsb3kpIHtcbiAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5jcmVhdGVJbWFnZShpbmZyYSwgZGlzdCwgbG9nLCB1bmRlZmluZWQsIHJlY2lwZS5hcm4pO1xuICAgICAgdGhpcy5kb2NrZXJJbWFnZUNsZWFuZXIocmVjaXBlLCBpbWFnZSwgcmVwb3NpdG9yeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9ja2VySW1hZ2VDbGVhbmVyKHJlY2lwZSwgdW5kZWZpbmVkLCByZXBvc2l0b3J5KTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lKGluZnJhLCBkaXN0LCBsb2csIHVuZGVmaW5lZCwgcmVjaXBlLmFybik7XG5cbiAgICB0aGlzLmJvdW5kRG9ja2VySW1hZ2UgPSB7XG4gICAgICBpbWFnZVJlcG9zaXRvcnk6IHJlcG9zaXRvcnksXG4gICAgICBpbWFnZVRhZzogJ2xhdGVzdCcsXG4gICAgICBvczogdGhpcy5vcyxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5hcmNoaXRlY3R1cmUsXG4gICAgICBsb2dHcm91cDogbG9nLFxuICAgICAgcnVubmVyVmVyc2lvbjogUnVubmVyVmVyc2lvbi5zcGVjaWZpYygndW5rbm93bicpLFxuICAgICAgLy8gbm8gZGVwZW5kYWJsZSBhcyBDbG91ZEZvcm1hdGlvbiB3aWxsIGZhaWwgdG8gZ2V0IGltYWdlIEFSTiBvbmNlIHRoZSBpbWFnZSBpcyBkZWxldGVkICh3ZSBkZWxldGUgb2xkIGltYWdlcyBkYWlseSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuYm91bmREb2NrZXJJbWFnZTtcbiAgfVxuXG4gIHByaXZhdGUgZG9ja2VySW1hZ2VDbGVhbmVyKHJlY2lwZTogQ29udGFpbmVyUmVjaXBlLCBpbWFnZTogaW1hZ2VidWlsZGVyLkNmbkltYWdlIHwgdW5kZWZpbmVkLCByZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnkpIHtcbiAgICAvLyBkZWxldGUgYWxsIGxlZnQgb3ZlciBkb2NrZXJzIGltYWdlcyBvblxuICAgIGNvbnN0IGNySGFuZGxlciA9IHNpbmdsZXRvbkxhbWJkYShCdWlsZEltYWdlRnVuY3Rpb24sIHRoaXMsICdidWlsZC1pbWFnZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9tIHJlc291cmNlIGhhbmRsZXIgdGhhdCB0cmlnZ2VycyBDb2RlQnVpbGQgdG8gYnVpbGQgcnVubmVyIGltYWdlcywgYW5kIGNsZWFucy11cCBpbWFnZXMgb24gZGVsZXRpb24nLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMyksXG4gICAgICBsb2dHcm91cDogc2luZ2xldG9uTG9nR3JvdXAodGhpcywgU2luZ2xldG9uTG9nVHlwZS5SVU5ORVJfSU1BR0VfQlVJTEQpLFxuICAgICAgbG9nRm9ybWF0OiBsYW1iZGEuTG9nRm9ybWF0LkpTT04sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb2xpY3kgPSBuZXcgaWFtLlBvbGljeSh0aGlzLCAnQ1IgUG9saWN5Jywge1xuICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydpbWFnZWJ1aWxkZXI6TGlzdEltYWdlcycsICdpbWFnZWJ1aWxkZXI6TGlzdEltYWdlQnVpbGRWZXJzaW9ucycsICdpbWFnZWJ1aWxkZXI6RGVsZXRlSW1hZ2UnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLCAvLyBJbWFnZSBCdWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBzY29waW5nIHRoaXMgOihcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNySGFuZGxlci5yb2xlPy5hdHRhY2hJbmxpbmVQb2xpY3kocG9saWN5KTtcblxuICAgIGNvbnN0IGNyID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdEZWxldGVyJywge1xuICAgICAgc2VydmljZVRva2VuOiBjckhhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkltYWdlRGVsZXRlcicsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFJlcG9OYW1lOiByZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBJbWFnZUJ1aWxkZXJOYW1lOiByZWNpcGUubmFtZSwgLy8gd2UgZG9uJ3QgdXNlIGltYWdlLm5hbWUgYmVjYXVzZSBDbG91ZEZvcm1hdGlvbiBjb21wbGFpbnMgaWYgaXQgd2FzIGRlbGV0ZWQgYWxyZWFkeVxuICAgICAgICAvLyBUT0RPIHBhc3MgdmVyc2lvbiB0b28gYW5kIHRoZW4gd2hlbiBhIG5ldyB2ZXJzaW9uIGlzIGRlcGxveWVkLCBpdCB3aWxsIGRlbGV0ZSB0aGUgb2xkIG9uZSAoY2FyZWZ1bCB3aXRoIHVwZ3JhZGVzKVxuICAgICAgICBEZWxldGVPbmx5OiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHJlc291cmNlcyBhcmUgdGhlcmUgd2hlbiB3ZSBuZWVkIHRoZW1cbiAgICBpZiAoaW1hZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3Iubm9kZS5hZGREZXBlbmRlbmN5KGltYWdlKTtcbiAgICB9XG4gICAgY3Iubm9kZS5hZGREZXBlbmRlbmN5KHBvbGljeSk7XG4gICAgY3Iubm9kZS5hZGREZXBlbmRlbmN5KGNySGFuZGxlcik7XG5cbiAgICAvLyBkZWxldGUgb2xkIGRvY2tlciBpbWFnZXMgKyBJQiByZXNvdXJjZXMgZGFpbHlcbiAgICBuZXcgaW1hZ2VidWlsZGVyLkNmbkxpZmVjeWNsZVBvbGljeSh0aGlzLCAnTGlmZWN5Y2xlIFBvbGljeSBEb2NrZXInLCB7XG4gICAgICBuYW1lOiB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lKHRoaXMpLFxuICAgICAgZGVzY3JpcHRpb246IGBEZWxldGUgb2xkIEdpdEh1YiBSdW5uZXIgRG9ja2VyIGltYWdlcyBmb3IgJHt0aGlzLm5vZGUucGF0aH1gLFxuICAgICAgZXhlY3V0aW9uUm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdMaWZlY3ljbGUgUG9saWN5IERvY2tlciBSb2xlJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnaW1hZ2VidWlsZGVyLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICBpYjogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbJ3RhZzpHZXRSZXNvdXJjZXMnLCAnaW1hZ2VidWlsZGVyOkRlbGV0ZUltYWdlJ10sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSwgLy8gSW1hZ2UgQnVpbGRlciBkb2Vzbid0IHN1cHBvcnQgc2NvcGluZyB0aGlzIDooXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBlY3I6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogWydlY3I6QmF0Y2hHZXRJbWFnZScsICdlY3I6QmF0Y2hEZWxldGVJbWFnZSddLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW3JlcG9zaXRvcnkucmVwb3NpdG9yeUFybl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pLnJvbGVBcm4sXG4gICAgICBwb2xpY3lEZXRhaWxzOiBbe1xuICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICB0eXBlOiAnREVMRVRFJyxcbiAgICAgICAgICBpbmNsdWRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICBjb250YWluZXJzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIHR5cGU6ICdDT1VOVCcsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIH0sXG4gICAgICB9XSxcbiAgICAgIHJlc291cmNlVHlwZTogJ0NPTlRBSU5FUl9JTUFHRScsXG4gICAgICByZXNvdXJjZVNlbGVjdGlvbjoge1xuICAgICAgICByZWNpcGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogcmVjaXBlLm5hbWUsXG4gICAgICAgICAgICBzZW1hbnRpY1ZlcnNpb246IHJlY2lwZS52ZXJzaW9uLCAvLyBkb2NzIHNheSBpdCdzIG9wdGlvbmFsLCBidXQgaXQncyBub3RcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVMb2coaWQ6IHN0cmluZywgcmVjaXBlTmFtZTogc3RyaW5nKTogbG9ncy5Mb2dHcm91cCB7XG4gICAgcmV0dXJuIG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIGlkLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2ltYWdlYnVpbGRlci8ke3JlY2lwZU5hbWV9YCxcbiAgICAgIHJldGVudGlvbjogdGhpcy5sb2dSZXRlbnRpb24sXG4gICAgICByZW1vdmFsUG9saWN5OiB0aGlzLmxvZ1JlbW92YWxQb2xpY3ksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSW5mcmFzdHJ1Y3R1cmUobWFuYWdlZFBvbGljaWVzOiBpYW0uSU1hbmFnZWRQb2xpY3lbXSk6IGltYWdlYnVpbGRlci5DZm5JbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24ge1xuICAgIGlmICh0aGlzLmluZnJhc3RydWN0dXJlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmZyYXN0cnVjdHVyZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1hbmFnZWRQb2xpY3kgb2YgbWFuYWdlZFBvbGljaWVzKSB7XG4gICAgICB0aGlzLnJvbGUuYWRkTWFuYWdlZFBvbGljeShtYW5hZ2VkUG9saWN5KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmJvdW5kQ29tcG9uZW50cykge1xuICAgICAgY29tcG9uZW50LmdyYW50QXNzZXRzUmVhZCh0aGlzLnJvbGUpO1xuICAgIH1cblxuICAgIHRoaXMuaW5mcmFzdHJ1Y3R1cmUgPSBuZXcgaW1hZ2VidWlsZGVyLkNmbkluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbih0aGlzLCAnSW5mcmFzdHJ1Y3R1cmUnLCB7XG4gICAgICBuYW1lOiB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lKHRoaXMpLFxuICAgICAgLy8gZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBzdWJuZXRJZDogdGhpcy52cGM/LnNlbGVjdFN1Ym5ldHModGhpcy5zdWJuZXRTZWxlY3Rpb24pLnN1Ym5ldElkc1swXSxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHRoaXMuc2VjdXJpdHlHcm91cHM/Lm1hcChzZyA9PiBzZy5zZWN1cml0eUdyb3VwSWQpLFxuICAgICAgaW5zdGFuY2VUeXBlczogW3RoaXMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCldLFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YU9wdGlvbnM6IHtcbiAgICAgICAgaHR0cFRva2VuczogJ3JlcXVpcmVkJyxcbiAgICAgICAgLy8gQ29udGFpbmVyIGJ1aWxkcyByZXF1aXJlIGEgbWluaW11bSBvZiB0d28gaG9wcy5cbiAgICAgICAgaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQ6IDIsXG4gICAgICB9LFxuICAgICAgaW5zdGFuY2VQcm9maWxlTmFtZTogbmV3IGlhbS5DZm5JbnN0YW5jZVByb2ZpbGUodGhpcywgJ0luc3RhbmNlIFByb2ZpbGUnLCB7XG4gICAgICAgIHJvbGVzOiBbXG4gICAgICAgICAgdGhpcy5yb2xlLnJvbGVOYW1lLFxuICAgICAgICBdLFxuICAgICAgfSkucmVmLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaW5mcmFzdHJ1Y3R1cmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSW1hZ2UoaW5mcmE6IGltYWdlYnVpbGRlci5DZm5JbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24sIGRpc3Q6IGltYWdlYnVpbGRlci5DZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLCBsb2c6IGxvZ3MuTG9nR3JvdXAsXG4gICAgaW1hZ2VSZWNpcGVBcm4/OiBzdHJpbmcsIGNvbnRhaW5lclJlY2lwZUFybj86IHN0cmluZyk6IGltYWdlYnVpbGRlci5DZm5JbWFnZSB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgaW1hZ2VidWlsZGVyLkNmbkltYWdlKHRoaXMsIHRoaXMuYW1pT3JDb250YWluZXJJZCgnSW1hZ2UnLCBpbWFnZVJlY2lwZUFybiwgY29udGFpbmVyUmVjaXBlQXJuKSwge1xuICAgICAgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uQXJuOiBpbmZyYS5hdHRyQXJuLFxuICAgICAgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogZGlzdC5hdHRyQXJuLFxuICAgICAgaW1hZ2VSZWNpcGVBcm4sXG4gICAgICBjb250YWluZXJSZWNpcGVBcm4sXG4gICAgICBpbWFnZVRlc3RzQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBpbWFnZVRlc3RzRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGltYWdlLm5vZGUuYWRkRGVwZW5kZW5jeShpbmZyYSk7XG4gICAgaW1hZ2Uubm9kZS5hZGREZXBlbmRlbmN5KGxvZyk7XG5cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH1cblxuICBwcml2YXRlIGFtaU9yQ29udGFpbmVySWQoYmFzZUlkOiBzdHJpbmcsIGltYWdlUmVjaXBlQXJuPzogc3RyaW5nLCBjb250YWluZXJSZWNpcGVBcm4/OiBzdHJpbmcpIHtcbiAgICBpZiAoaW1hZ2VSZWNpcGVBcm4pIHtcbiAgICAgIHJldHVybiBgQU1JICR7YmFzZUlkfWA7XG4gICAgfVxuICAgIGlmIChjb250YWluZXJSZWNpcGVBcm4pIHtcbiAgICAgIHJldHVybiBgRG9ja2VyICR7YmFzZUlkfWA7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIGltYWdlUmVjaXBlQXJuIG9yIGNvbnRhaW5lclJlY2lwZUFybiBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVQaXBlbGluZShpbmZyYTogaW1hZ2VidWlsZGVyLkNmbkluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbiwgZGlzdDogaW1hZ2VidWlsZGVyLkNmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24sIGxvZzogbG9ncy5Mb2dHcm91cCxcbiAgICBpbWFnZVJlY2lwZUFybj86IHN0cmluZywgY29udGFpbmVyUmVjaXBlQXJuPzogc3RyaW5nKTogaW1hZ2VidWlsZGVyLkNmbkltYWdlUGlwZWxpbmUge1xuICAgIGxldCBzY2hlZHVsZU9wdGlvbnM6IGltYWdlYnVpbGRlci5DZm5JbWFnZVBpcGVsaW5lLlNjaGVkdWxlUHJvcGVydHkgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMucmVidWlsZEludGVydmFsLnRvRGF5cygpID4gMCkge1xuICAgICAgc2NoZWR1bGVPcHRpb25zID0ge1xuICAgICAgICBzY2hlZHVsZUV4cHJlc3Npb246IGV2ZW50cy5TY2hlZHVsZS5yYXRlKHRoaXMucmVidWlsZEludGVydmFsKS5leHByZXNzaW9uU3RyaW5nLFxuICAgICAgICBwaXBlbGluZUV4ZWN1dGlvblN0YXJ0Q29uZGl0aW9uOiAnRVhQUkVTU0lPTl9NQVRDSF9PTkxZJyxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3IGltYWdlYnVpbGRlci5DZm5JbWFnZVBpcGVsaW5lKHRoaXMsIHRoaXMuYW1pT3JDb250YWluZXJJZCgnUGlwZWxpbmUnLCBpbWFnZVJlY2lwZUFybiwgY29udGFpbmVyUmVjaXBlQXJuKSwge1xuICAgICAgbmFtZTogdW5pcXVlSW1hZ2VCdWlsZGVyTmFtZSh0aGlzKSxcbiAgICAgIC8vIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uQXJuOiBpbmZyYS5hdHRyQXJuLFxuICAgICAgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogZGlzdC5hdHRyQXJuLFxuICAgICAgaW1hZ2VSZWNpcGVBcm4sXG4gICAgICBjb250YWluZXJSZWNpcGVBcm4sXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVPcHRpb25zLFxuICAgICAgaW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgaW1hZ2VUZXN0c0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBwaXBlbGluZS5ub2RlLmFkZERlcGVuZGVuY3koaW5mcmEpO1xuICAgIHBpcGVsaW5lLm5vZGUuYWRkRGVwZW5kZW5jeShsb2cpO1xuXG4gICAgcmV0dXJuIHBpcGVsaW5lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuZXR3b3JrIGNvbm5lY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb25uZWN0aW9ucygpOiBlYzIuQ29ubmVjdGlvbnMge1xuICAgIHJldHVybiBuZXcgZWMyLkNvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHM6IHRoaXMuc2VjdXJpdHlHcm91cHMgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdyYW50UHJpbmNpcGFsKCk6IGlhbS5JUHJpbmNpcGFsIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlO1xuICB9XG5cbiAgYmluZEFtaSgpOiBSdW5uZXJBbWkge1xuICAgIGlmICh0aGlzLmJvdW5kQW1pKSB7XG4gICAgICByZXR1cm4gdGhpcy5ib3VuZEFtaTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZSA9IG5ldyBlYzIuTGF1bmNoVGVtcGxhdGUodGhpcywgJ0xhdW5jaCB0ZW1wbGF0ZScsIHtcbiAgICAgIHJlcXVpcmVJbWRzdjI6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3M6IGltYWdlYnVpbGRlci5DZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvblByb3BlcnR5W10gPSBbe1xuICAgICAgbGF1bmNoVGVtcGxhdGVJZDogbGF1bmNoVGVtcGxhdGUubGF1bmNoVGVtcGxhdGVJZCxcbiAgICAgIHNldERlZmF1bHRWZXJzaW9uOiB0cnVlLFxuICAgIH1dO1xuICAgIGNvbnN0IGZhc3RMYXVuY2hDb25maWdzOiBpbWFnZWJ1aWxkZXIuQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5GYXN0TGF1bmNoQ29uZmlndXJhdGlvblByb3BlcnR5W10gPSBbXTtcblxuICAgIGlmICh0aGlzLmZhc3RMYXVuY2hPcHRpb25zPy5lbmFibGVkID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMub3MuaXMoT3MuV0lORE9XUykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYXN0IGxhdW5jaCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgV2luZG93cycpO1xuICAgICAgfVxuXG4gICAgICAvLyBjcmVhdGUgYSBzZXBhcmF0ZSBsYXVuY2ggdGVtcGxhdGUgZm9yIGZhc3QgbGF1bmNoIHNvOlxuICAgICAgLy8gIC0gc2V0dGluZ3MgZG9uJ3QgYWZmZWN0IHRoZSBydW5uZXJzXG4gICAgICAvLyAgLSBlbmFibGluZyBmYXN0IGxhdW5jaCBvbiBhbiBleGlzdGluZyBidWlsZGVyIHdvcmtzICh3aXRob3V0IGEgbmV3IGxhdW5jaCB0ZW1wbGF0ZSwgRUMyIEltYWdlIEJ1aWxkZXIgd2lsbCB1c2UgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZSwgd2hpY2ggZG9lc24ndCBoYXZlIGluc3RhbmNlIG9yIFZQQyBjb25maWcpXG4gICAgICAvLyAgLSBzZXR0aW5nIHZwYyArIHN1Ym5ldCBvbiB0aGUgbWFpbiBsYXVuY2ggdGVtcGxhdGUgd2lsbCBjYXVzZSBSdW5JbnN0YW5jZXMgdG8gZmFpbFxuICAgICAgLy8gIC0gRUMyIEltYWdlIEJ1aWxkZXIgc2VlbXMgdG8gZ2V0IGNvbmZ1c2VkIHdpdGggd2hpY2ggbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gdG8gYmFzZSBhbnkgbmV3IHZlcnNpb24gb24sIHNvIGEgbmV3IHRlbXBsYXRlIGlzIGFsd2F5cyBiZXN0XG4gICAgICBjb25zdCBmYXN0TGF1bmNoVGVtcGxhdGUgPSBuZXcgZWMyLkNmbkxhdW5jaFRlbXBsYXRlKHRoaXMsICdGYXN0IExhdW5jaCBUZW1wbGF0ZScsIHtcbiAgICAgICAgbGF1bmNoVGVtcGxhdGVEYXRhOiB7XG4gICAgICAgICAgbWV0YWRhdGFPcHRpb25zOiB7XG4gICAgICAgICAgICBodHRwVG9rZW5zOiAncmVxdWlyZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5zdGFuY2VUeXBlOiB0aGlzLmluc3RhbmNlVHlwZS50b1N0cmluZygpLFxuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VzOiBbe1xuICAgICAgICAgICAgc3VibmV0SWQ6IHRoaXMudnBjPy5zZWxlY3RTdWJuZXRzKHRoaXMuc3VibmV0U2VsZWN0aW9uKS5zdWJuZXRJZHNbMF0sXG4gICAgICAgICAgICBkZXZpY2VJbmRleDogMCxcbiAgICAgICAgICAgIGdyb3VwczogdGhpcy5zZWN1cml0eUdyb3Vwcy5tYXAoc2cgPT4gc2cuc2VjdXJpdHlHcm91cElkKSxcbiAgICAgICAgICB9XSxcbiAgICAgICAgICB0YWdTcGVjaWZpY2F0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6ICdpbnN0YW5jZScsXG4gICAgICAgICAgICAgIHRhZ3M6IFt7XG4gICAgICAgICAgICAgICAga2V5OiAnTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGAke3RoaXMubm9kZS5wYXRofS9GYXN0IExhdW5jaCBJbnN0YW5jZWAsXG4gICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiAndm9sdW1lJyxcbiAgICAgICAgICAgICAgdGFnczogW3tcbiAgICAgICAgICAgICAgICBrZXk6ICdOYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYCR7dGhpcy5ub2RlLnBhdGh9L0Zhc3QgTGF1bmNoIEluc3RhbmNlYCxcbiAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHRhZ1NwZWNpZmljYXRpb25zOiBbe1xuICAgICAgICAgIHJlc291cmNlVHlwZTogJ2xhdW5jaC10ZW1wbGF0ZScsXG4gICAgICAgICAgdGFnczogW3tcbiAgICAgICAgICAgIGtleTogJ05hbWUnLFxuICAgICAgICAgICAgdmFsdWU6IGAke3RoaXMubm9kZS5wYXRofS9GYXN0IExhdW5jaCBUZW1wbGF0ZWAsXG4gICAgICAgICAgfV0sXG4gICAgICAgIH1dLFxuICAgICAgfSk7XG5cbiAgICAgIGxhdW5jaFRlbXBsYXRlQ29uZmlncy5wdXNoKHtcbiAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogZmFzdExhdW5jaFRlbXBsYXRlLmF0dHJMYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgICBzZXREZWZhdWx0VmVyc2lvbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZmFzdExhdW5jaENvbmZpZ3MucHVzaCh7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxhdW5jaFRlbXBsYXRlOiB7XG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogZmFzdExhdW5jaFRlbXBsYXRlLmF0dHJMYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgICB9LFxuICAgICAgICBtYXhQYXJhbGxlbExhdW5jaGVzOiB0aGlzLmZhc3RMYXVuY2hPcHRpb25zPy5tYXhQYXJhbGxlbExhdW5jaGVzID8/IDYsXG4gICAgICAgIHNuYXBzaG90Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIHRhcmdldFJlc291cmNlQ291bnQ6IHRoaXMuZmFzdExhdW5jaE9wdGlvbnM/LnRhcmdldFJlc291cmNlQ291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGNkay5TdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG4gICAgY29uc3QgYnVpbGRlck5hbWUgPSB0aGlzLm5vZGUucGF0aDtcblxuICAgIGNvbnN0IGRpc3QgPSBuZXcgaW1hZ2VidWlsZGVyLkNmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24odGhpcywgJ0FNSSBEaXN0cmlidXRpb24nLCB7XG4gICAgICBuYW1lOiB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lKHRoaXMpLFxuICAgICAgLy8gZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBkaXN0cmlidXRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZWdpb246IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgICAgICBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBOYW1lOiBgJHtjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICdfLScsXG4gICAgICAgICAgICB9KX0te3sgaW1hZ2VidWlsZGVyOmJ1aWxkRGF0ZSB9fWAsXG4gICAgICAgICAgICBBbWlUYWdzOiB7XG4gICAgICAgICAgICAgICdOYW1lJzogdGhpcy5ub2RlLmlkLFxuICAgICAgICAgICAgICAnR2l0SHViUnVubmVyczpTdGFjayc6IHN0YWNrTmFtZSxcbiAgICAgICAgICAgICAgJ0dpdEh1YlJ1bm5lcnM6QnVpbGRlcic6IGJ1aWxkZXJOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnM6IGxhdW5jaFRlbXBsYXRlQ29uZmlncyxcbiAgICAgICAgICBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnM6IGZhc3RMYXVuY2hDb25maWdzLmxlbmd0aCA+IDAgPyBmYXN0TGF1bmNoQ29uZmlncyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWNpcGUgPSBuZXcgQW1pUmVjaXBlKHRoaXMsICdBbWkgUmVjaXBlJywge1xuICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0oKSxcbiAgICAgIGNvbXBvbmVudHM6IHRoaXMuYmluZENvbXBvbmVudHMoKSxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5hcmNoaXRlY3R1cmUsXG4gICAgICBiYXNlQW1pOiB0aGlzLmJhc2VBbWksXG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2cgPSB0aGlzLmNyZWF0ZUxvZygnQW1pIExvZycsIHJlY2lwZS5uYW1lKTtcbiAgICBjb25zdCBpbmZyYSA9IHRoaXMuY3JlYXRlSW5mcmFzdHJ1Y3R1cmUoW1xuICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlJyksXG4gICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0VDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlcicpLFxuICAgIF0pO1xuICAgIGlmICh0aGlzLndhaXRPbkRlcGxveSkge1xuICAgICAgdGhpcy5jcmVhdGVJbWFnZShpbmZyYSwgZGlzdCwgbG9nLCByZWNpcGUuYXJuLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lKGluZnJhLCBkaXN0LCBsb2csIHJlY2lwZS5hcm4sIHVuZGVmaW5lZCk7XG5cbiAgICB0aGlzLmJvdW5kQW1pID0ge1xuICAgICAgbGF1bmNoVGVtcGxhdGU6IGxhdW5jaFRlbXBsYXRlLFxuICAgICAgYXJjaGl0ZWN0dXJlOiB0aGlzLmFyY2hpdGVjdHVyZSxcbiAgICAgIG9zOiB0aGlzLm9zLFxuICAgICAgbG9nR3JvdXA6IGxvZyxcbiAgICAgIHJ1bm5lclZlcnNpb246IFJ1bm5lclZlcnNpb24uc3BlY2lmaWMoJ3Vua25vd24nKSxcbiAgICB9O1xuXG4gICAgdGhpcy5hbWlDbGVhbmVyKHJlY2lwZSwgc3RhY2tOYW1lLCBidWlsZGVyTmFtZSk7XG5cbiAgICByZXR1cm4gdGhpcy5ib3VuZEFtaTtcbiAgfVxuXG4gIHByaXZhdGUgYW1pQ2xlYW5lcihyZWNpcGU6IEFtaVJlY2lwZSwgc3RhY2tOYW1lOiBzdHJpbmcsIGJ1aWxkZXJOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkZWxldGVyID0gc2luZ2xldG9uTGFtYmRhKERlbGV0ZUFtaUZ1bmN0aW9uLCB0aGlzLCAnZGVsZXRlLWFtaScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGVsZXRlIG9sZCBHaXRIdWIgUnVubmVyIEFNSXMnLFxuICAgICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydlYzI6RGVzY3JpYmVJbWFnZXMnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnZWMyOkRlcmVnaXN0ZXJJbWFnZScsICdlYzI6RGVsZXRlU25hcHNob3QnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgICAnYXdzOlJlc291cmNlVGFnL0dpdEh1YlJ1bm5lcnM6U3RhY2snOiBzdGFja05hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgbG9nR3JvdXA6IHNpbmdsZXRvbkxvZ0dyb3VwKHRoaXMsIFNpbmdsZXRvbkxvZ1R5cGUuUlVOTkVSX0lNQUdFX0JVSUxEKSxcbiAgICAgIGxvZ0Zvcm1hdDogbGFtYmRhLkxvZ0Zvcm1hdC5KU09OLFxuICAgIH0pO1xuXG4gICAgLy8gZGVsZXRlIGFsbCBBTUlzIHdoZW4gdGhpcyBjb25zdHJ1Y3QgaXMgcmVtb3ZlZFxuICAgIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQU1JIERlbGV0ZXInLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IGRlbGV0ZXIuZnVuY3Rpb25Bcm4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkFtaURlbGV0ZXInLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgQnVpbGRlck5hbWU6IGJ1aWxkZXJOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIGRlbGV0ZSBvbGQgQU1JcyArIElCIHJlc291cmNlcyBkYWlseVxuICAgIG5ldyBpbWFnZWJ1aWxkZXIuQ2ZuTGlmZWN5Y2xlUG9saWN5KHRoaXMsICdMaWZlY3ljbGUgUG9saWN5IEFNSScsIHtcbiAgICAgIG5hbWU6IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUodGhpcyksXG4gICAgICBkZXNjcmlwdGlvbjogYERlbGV0ZSBvbGQgR2l0SHViIFJ1bm5lciBBTUlzIGZvciAke3RoaXMubm9kZS5wYXRofWAsXG4gICAgICBleGVjdXRpb25Sb2xlOiBuZXcgaWFtLlJvbGUodGhpcywgJ0xpZmVjeWNsZSBQb2xpY3kgQU1JIFJvbGUnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdpbWFnZWJ1aWxkZXIuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICAgIGliOiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFsndGFnOkdldFJlc291cmNlcycsICdpbWFnZWJ1aWxkZXI6RGVsZXRlSW1hZ2UnXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLCAvLyBJbWFnZSBCdWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBzY29waW5nIHRoaXMgOihcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGFtaTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2VjMjpEZXNjcmliZUltYWdlcycsICdlYzI6RGVzY3JpYmVJbWFnZUF0dHJpYnV0ZSddLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogWydlYzI6RGVyZWdpc3RlckltYWdlJywgJ2VjMjpEZWxldGVTbmFwc2hvdCddLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICdhd3M6UmVzb3VyY2VUYWcvR2l0SHViUnVubmVyczpTdGFjayc6IHN0YWNrTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ2F3czpSZXNvdXJjZVRhZy9HaXRIdWJSdW5uZXJzOkJ1aWxkZXInOiBidWlsZGVyTmFtZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSkucm9sZUFybixcbiAgICAgIHBvbGljeURldGFpbHM6IFt7XG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICdERUxFVEUnLFxuICAgICAgICAgIGluY2x1ZGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIGFtaXM6IHRydWUsXG4gICAgICAgICAgICBzbmFwc2hvdHM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgdHlwZTogJ0NPVU5UJyxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgfSxcbiAgICAgIH1dLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQU1JX0lNQUdFJyxcbiAgICAgIHJlc291cmNlU2VsZWN0aW9uOiB7XG4gICAgICAgIHJlY2lwZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiByZWNpcGUubmFtZSxcbiAgICAgICAgICAgIHNlbWFudGljVmVyc2lvbjogcmVjaXBlLnZlcnNpb24sIC8vIGRvY3Mgc2F5IGl0J3Mgb3B0aW9uYWwsIGJ1dCBpdCdzIG5vdFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kQ29tcG9uZW50cygpOiBJbWFnZUJ1aWxkZXJDb21wb25lbnRbXSB7XG4gICAgaWYgKHRoaXMuYm91bmRDb21wb25lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmJvdW5kQ29tcG9uZW50cy5wdXNoKC4uLnRoaXMuY29tcG9uZW50cy5tYXAoKGMsIGkpID0+IGMuX2FzQXdzSW1hZ2VCdWlsZGVyQ29tcG9uZW50KHRoaXMsIGBDb21wb25lbnQgJHtpfSAke2MubmFtZX1gLCB0aGlzLm9zLCB0aGlzLmFyY2hpdGVjdHVyZSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ib3VuZENvbXBvbmVudHM7XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0ltYWdlQnVpbGRlckZhaWxlZEJ1aWxkTm90aWZpZXIgaW1wbGVtZW50cyBjZGsuSUFzcGVjdCB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlRmlsdGVyaW5nVG9waWMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0VG9waWM6IHNucy5Ub3BpYyk6IHNucy5JVG9waWMge1xuICAgIGNvbnN0IHRvcGljID0gbmV3IHNucy5Ub3BpYyhzY29wZSwgJ0ltYWdlIEJ1aWxkZXIgQnVpbGRzJyk7XG4gICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckZhaWxlZEJ1aWxkc0Z1bmN0aW9uKHNjb3BlLCAnSW1hZ2UgQnVpbGRlciBCdWlsZHMgRmlsdGVyJywge1xuICAgICAgbG9nR3JvdXA6IHNpbmdsZXRvbkxvZ0dyb3VwKHNjb3BlLCBTaW5nbGV0b25Mb2dUeXBlLlJVTk5FUl9JTUFHRV9CVUlMRCksXG4gICAgICBsb2dGb3JtYXQ6IGxhbWJkYS5Mb2dGb3JtYXQuSlNPTixcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFRBUkdFVF9UT1BJQ19BUk46IHRhcmdldFRvcGljLnRvcGljQXJuLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRvcGljLmFkZFN1YnNjcmlwdGlvbihuZXcgc3Vicy5MYW1iZGFTdWJzY3JpcHRpb24oZmlsdGVyKSk7XG4gICAgdGFyZ2V0VG9waWMuZ3JhbnRQdWJsaXNoKGZpbHRlcik7XG5cbiAgICByZXR1cm4gdG9waWM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRvcGljOiBzbnMuSVRvcGljKSB7XG4gIH1cblxuICBwdWJsaWMgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXdzSW1hZ2VCdWlsZGVyUnVubmVySW1hZ2VCdWlsZGVyKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbm9kZSBhcyBBd3NJbWFnZUJ1aWxkZXJSdW5uZXJJbWFnZUJ1aWxkZXI7XG4gICAgICBjb25zdCBpbmZyYU5vZGUgPSBidWlsZGVyLm5vZGUudHJ5RmluZENoaWxkKCdJbmZyYXN0cnVjdHVyZScpO1xuICAgICAgaWYgKGluZnJhTm9kZSkge1xuICAgICAgICBjb25zdCBpbmZyYSA9IGluZnJhTm9kZSBhcyBpbWFnZWJ1aWxkZXIuQ2ZuSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uO1xuICAgICAgICBpbmZyYS5zbnNUb3BpY0FybiA9IHRoaXMudG9waWMudG9waWNBcm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjZGsuQW5ub3RhdGlvbnMub2YoYnVpbGRlcikuYWRkV2FybmluZygnVW51c2VkIGJ1aWxkZXIgY2Fubm90IGdldCBub3RpZmljYXRpb25zIG9mIGZhaWxlZCBidWlsZHMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -37,10 +37,11 @@ class ImageBuilderObjectBase extends cdk.Resource {
|
|
|
37
37
|
resources: ['*'],
|
|
38
38
|
}),
|
|
39
39
|
],
|
|
40
|
-
|
|
40
|
+
logGroup: (0, utils_1.singletonLogGroup)(this, utils_1.SingletonLogType.RUNNER_IMAGE_BUILD),
|
|
41
|
+
logFormat: aws_cdk_lib_1.aws_lambda.LogFormat.JSON,
|
|
41
42
|
timeout: cdk.Duration.minutes(5),
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
exports.ImageBuilderObjectBase = ImageBuilderObjectBase;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2F3cy1pbWFnZS1idWlsZGVyL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQW1GO0FBRW5GLDZEQUF5RDtBQUN6RCx1Q0FBbUY7QUFFbkY7O0dBRUc7QUFDSCxNQUFzQixzQkFBdUIsU0FBUSxHQUFHLENBQUMsUUFBUTtJQUMvRCxZQUFzQixLQUFnQixFQUFFLEVBQVU7UUFDaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRVMsZUFBZSxDQUFDLElBQXFELEVBQUUsSUFBWSxFQUFFLElBQVM7UUFDdEcsT0FBTyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUN6QyxZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFdBQVc7WUFDaEQsWUFBWSxFQUFFLHdCQUF3QixJQUFJLFVBQVU7WUFDcEQsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLDBEQUEwRDtZQUNuRyxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxFQUFFLDJFQUEyRTthQUNqRztTQUNGLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDVCxDQUFDO0lBRU8sZUFBZTtRQUNyQixPQUFPLElBQUEsdUJBQWUsRUFBQyxzQ0FBaUIsRUFBRSxJQUFJLEVBQUUsNkJBQTZCLEVBQUU7WUFDN0UsV0FBVyxFQUFFLDhEQUE4RDtZQUMzRSxhQUFhLEVBQUU7Z0JBQ2IsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztvQkFDdEIsT0FBTyxFQUFFO3dCQUNQLDZCQUE2Qjt3QkFDN0IsbUNBQW1DO3dCQUNuQywrQkFBK0I7cUJBQ2hDO29CQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsQ0FBQzthQUNIO1lBQ0QsUUFBUSxFQUFFLElBQUEseUJBQWlCLEVBQUMsSUFBSSxFQUFFLHdCQUFnQixDQUFDLGtCQUFrQixDQUFDO1lBQ3RFLFNBQVMsRUFBRSx3QkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQ2hDLE9BQU8sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBcENELHdEQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBhd3NfaWFtIGFzIGlhbSwgYXdzX2xhbWJkYSBhcyBsYW1iZGEsIEN1c3RvbVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBWZXJzaW9uZXJGdW5jdGlvbiB9IGZyb20gJy4vdmVyc2lvbmVyLWZ1bmN0aW9uJztcbmltcG9ydCB7IHNpbmdsZXRvbkxvZ0dyb3VwLCBzaW5nbGV0b25MYW1iZGEsIFNpbmdsZXRvbkxvZ1R5cGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbWFnZUJ1aWxkZXJPYmplY3RCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlVmVyc2lvbih0eXBlOiAnQ29tcG9uZW50JyB8ICdJbWFnZVJlY2lwZScgfCAnQ29udGFpbmVyUmVjaXBlJywgbmFtZTogc3RyaW5nLCBkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ1ZlcnNpb24nLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMudmVyc2lvbkZ1bmN0aW9uKCkuZnVuY3Rpb25Bcm4sXG4gICAgICByZXNvdXJjZVR5cGU6IGBDdXN0b206OkltYWdlQnVpbGRlci0ke3R5cGV9LVZlcnNpb25gLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLCAvLyBubyBwb2ludCBpbiBkZWxldGluZyBhcyBpdCBkb2Vzbid0IGV2ZW4gY3JlYXRlIGFueXRoaW5nXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIE9iamVjdFR5cGU6IHR5cGUsXG4gICAgICAgIE9iamVjdE5hbWU6IG5hbWUsXG4gICAgICAgIFZlcnNpb25lZERhdGE6IGRhdGEsIC8vIGdldCBhIG5ldyB2ZXJzaW9uIGV2ZXJ5IHRpbWUgc29tZXRoaW5nIGNoYW5nZXMsIGxpa2UgSW1hZ2UgQnVpbGRlciB3YW50c1xuICAgICAgfSxcbiAgICB9KS5yZWY7XG4gIH1cblxuICBwcml2YXRlIHZlcnNpb25GdW5jdGlvbigpOiBWZXJzaW9uZXJGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHNpbmdsZXRvbkxhbWJkYShWZXJzaW9uZXJGdW5jdGlvbiwgdGhpcywgJ2F3cy1pbWFnZS1idWlsZGVyLXZlcnNpb25lcicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9tIHJlc291cmNlIGhhbmRsZXIgdGhhdCBidW1wcyB1cCBJbWFnZSBCdWlsZGVyIHZlcnNpb25zJyxcbiAgICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdpbWFnZWJ1aWxkZXI6TGlzdENvbXBvbmVudHMnLFxuICAgICAgICAgICAgJ2ltYWdlYnVpbGRlcjpMaXN0Q29udGFpbmVyUmVjaXBlcycsXG4gICAgICAgICAgICAnaW1hZ2VidWlsZGVyOkxpc3RJbWFnZVJlY2lwZXMnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgbG9nR3JvdXA6IHNpbmdsZXRvbkxvZ0dyb3VwKHRoaXMsIFNpbmdsZXRvbkxvZ1R5cGUuUlVOTkVSX0lNQUdFX0JVSUxEKSxcbiAgICAgIGxvZ0Zvcm1hdDogbGFtYmRhLkxvZ0Zvcm1hdC5KU09OLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgfSk7XG4gIH1cbn1cblxuIl19
|
|
@@ -35,10 +35,8 @@ export interface ContainerRecipeProperties {
|
|
|
35
35
|
readonly dockerfileTemplate: string;
|
|
36
36
|
/**
|
|
37
37
|
* Parent image for the new Docker Image.
|
|
38
|
-
*
|
|
39
|
-
* @default 'mcr.microsoft.com/windows/servercore:ltsc2019-amd64'
|
|
40
38
|
*/
|
|
41
|
-
readonly parentImage
|
|
39
|
+
readonly parentImage: string;
|
|
42
40
|
}
|
|
43
41
|
/**
|
|
44
42
|
* Image builder recipe for a Docker container image.
|
|
@@ -27,7 +27,8 @@ class ContainerRecipe extends common_1.ImageBuilderObjectBase {
|
|
|
27
27
|
const recipe = new aws_cdk_lib_1.aws_imagebuilder.CfnContainerRecipe(this, 'Recipe', {
|
|
28
28
|
name: this.name,
|
|
29
29
|
version: this.version,
|
|
30
|
-
parentImage: props.parentImage
|
|
30
|
+
parentImage: props.parentImage,
|
|
31
|
+
platformOverride: props.platform == 'Linux' ? 'Linux' : undefined,
|
|
31
32
|
components,
|
|
32
33
|
containerType: 'DOCKER',
|
|
33
34
|
targetRepository: {
|
|
@@ -63,4 +64,4 @@ function defaultBaseDockerImage(os) {
|
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
66
|
exports.defaultBaseDockerImage = defaultBaseDockerImage;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2F3cy1pbWFnZS1idWlsZGVyL2NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBK0U7QUFHL0UscUNBQWtEO0FBQ2xELCtDQUFxQztBQUNyQyxzQ0FBbUQ7QUEwQ25EOzs7O0dBSUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsK0JBQXNCO0lBS3pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoRCxPQUFPO2dCQUNMLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRzthQUM1QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUEsK0JBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFVBQVU7WUFDVixrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1NBQzdDLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLElBQUksOEJBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2pFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNqRSxVQUFVO1lBQ1YsYUFBYSxFQUFFLFFBQVE7WUFDdkIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLGNBQWMsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsY0FBYzthQUN0RDtZQUNELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7U0FDakQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQXJDRCwwQ0FxQ0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsRUFBTTtJQUMzQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxxREFBcUQsQ0FBQztJQUMvRCxDQUFDO1NBQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8saUNBQWlDLENBQUM7SUFDM0MsQ0FBQztTQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLDBDQUEwQyxDQUFDO0lBQ3BELENBQUM7U0FBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLDZDQUE2QyxDQUFDO0lBQ3ZELENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLHdDQUF3QyxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUM7QUFaRCx3REFZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19lY3IgYXMgZWNyLCBhd3NfaW1hZ2VidWlsZGVyIGFzIGltYWdlYnVpbGRlciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSW1hZ2VCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IEltYWdlQnVpbGRlck9iamVjdEJhc2UgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBPcyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyB1bmlxdWVJbWFnZUJ1aWxkZXJOYW1lIH0gZnJvbSAnLi4vY29tbW9uJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBDb250YWluZXJSZWNpcGUgY29uc3RydWN0LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lclJlY2lwZVByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGFyZ2V0IHBsYXRmb3JtLiBNdXN0IG1hdGNoIGJ1aWxkZXIgcGxhdGZvcm0uXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogJ0xpbnV4JyB8ICdXaW5kb3dzJztcblxuICAvKipcbiAgICogQ29tcG9uZW50cyB0byBhZGQgdG8gdGFyZ2V0IGNvbnRhaW5lciBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudHM6IEltYWdlQnVpbGRlckNvbXBvbmVudFtdO1xuXG4gIC8qKlxuICAgKiBFQ1IgcmVwb3NpdG9yeSB3aGVyZSByZXN1bHRpbmcgY29udGFpbmVyIGltYWdlIHdpbGwgYmUgdXBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRSZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIERvY2tlcmZpbGUgdGVtcGxhdGUgd2hlcmUgYWxsIHRoZSBjb21wb25lbnRzIHdpbGwgYmUgYWRkZWQuXG4gICAqXG4gICAqIE11c3QgY29udGFpbiBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIHBsYWNlaG9sZGVyczpcbiAgICpcbiAgICogYGBgXG4gICAqIEZST00ge3t7IGltYWdlYnVpbGRlcjpwYXJlbnRJbWFnZSB9fX1cbiAgICoge3t7IGltYWdlYnVpbGRlcjplbnZpcm9ubWVudHMgfX19XG4gICAqIHt7eyBpbWFnZWJ1aWxkZXI6Y29tcG9uZW50cyB9fX1cbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBkb2NrZXJmaWxlVGVtcGxhdGU6IHN0cmluZztcblxuICAvKipcbiAgICogUGFyZW50IGltYWdlIGZvciB0aGUgbmV3IERvY2tlciBJbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudEltYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW1hZ2UgYnVpbGRlciByZWNpcGUgZm9yIGEgRG9ja2VyIGNvbnRhaW5lciBpbWFnZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRhaW5lclJlY2lwZSBleHRlbmRzIEltYWdlQnVpbGRlck9iamVjdEJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbnRhaW5lclJlY2lwZVByb3BlcnRpZXMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbGV0IGNvbXBvbmVudHMgPSBwcm9wcy5jb21wb25lbnRzLm1hcChjb21wb25lbnQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50QXJuOiBjb21wb25lbnQuYXJuLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZSA9IHVuaXF1ZUltYWdlQnVpbGRlck5hbWUodGhpcyk7XG4gICAgdGhpcy52ZXJzaW9uID0gdGhpcy5nZW5lcmF0ZVZlcnNpb24oJ0NvbnRhaW5lclJlY2lwZScsIHRoaXMubmFtZSwge1xuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGRvY2tlcmZpbGVUZW1wbGF0ZTogcHJvcHMuZG9ja2VyZmlsZVRlbXBsYXRlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVjaXBlID0gbmV3IGltYWdlYnVpbGRlci5DZm5Db250YWluZXJSZWNpcGUodGhpcywgJ1JlY2lwZScsIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIHBhcmVudEltYWdlOiBwcm9wcy5wYXJlbnRJbWFnZSxcbiAgICAgIHBsYXRmb3JtT3ZlcnJpZGU6IHByb3BzLnBsYXRmb3JtID09ICdMaW51eCcgPyAnTGludXgnIDogdW5kZWZpbmVkLFxuICAgICAgY29tcG9uZW50cyxcbiAgICAgIGNvbnRhaW5lclR5cGU6ICdET0NLRVInLFxuICAgICAgdGFyZ2V0UmVwb3NpdG9yeToge1xuICAgICAgICBzZXJ2aWNlOiAnRUNSJyxcbiAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHByb3BzLnRhcmdldFJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWUsXG4gICAgICB9LFxuICAgICAgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YTogcHJvcHMuZG9ja2VyZmlsZVRlbXBsYXRlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcm4gPSByZWNpcGUuYXR0ckFybjtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgYmFzZSBEb2NrZXIgaW1hZ2UgZm9yIGdpdmVuIE9TLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEJhc2VEb2NrZXJJbWFnZShvczogT3MpIHtcbiAgaWYgKG9zLmlzKE9zLldJTkRPV1MpKSB7XG4gICAgcmV0dXJuICdtY3IubWljcm9zb2Z0LmNvbS93aW5kb3dzL3NlcnZlcmNvcmU6bHRzYzIwMTktYW1kNjQnO1xuICB9IGVsc2UgaWYgKG9zLmlzKE9zLkxJTlVYX1VCVU5UVSkpIHtcbiAgICByZXR1cm4gJ3B1YmxpYy5lY3IuYXdzL2x0cy91YnVudHU6MjIuMDQnO1xuICB9IGVsc2UgaWYgKG9zLmlzKE9zLkxJTlVYX0FNQVpPTl8yKSkge1xuICAgIHJldHVybiAncHVibGljLmVjci5hd3MvYW1hem9ubGludXgvYW1hem9ubGludXg6Mic7XG4gIH0gZWxzZSBpZiAob3MuaXMoT3MuTElOVVhfQU1BWk9OXzIwMjMpKSB7XG4gICAgcmV0dXJuICdwdWJsaWMuZWNyLmF3cy9hbWF6b25saW51eC9hbWF6b25saW51eDoyMDIzJztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9TICR7b3MubmFtZX0gbm90IHN1cHBvcnRlZCBmb3IgRG9ja2VyIHJ1bm5lciBpbWFnZWApO1xuICB9XG59XG5cbiJdfQ==
|
|
@@ -20,12 +20,17 @@ async function deleteAmis(stackName, builderName) {
|
|
|
20
20
|
],
|
|
21
21
|
}));
|
|
22
22
|
let imagesToDelete = images.Images ?? [];
|
|
23
|
-
console.log(
|
|
24
|
-
|
|
23
|
+
console.log({
|
|
24
|
+
notice: `Found ${imagesToDelete.length} AMIs`,
|
|
25
|
+
images: imagesToDelete.map(i => i.ImageId),
|
|
26
|
+
});
|
|
25
27
|
// delete all that we found
|
|
26
28
|
for (const image of imagesToDelete) {
|
|
27
29
|
if (!image.ImageId) {
|
|
28
|
-
console.warn(
|
|
30
|
+
console.warn({
|
|
31
|
+
notice: 'No image id?',
|
|
32
|
+
image,
|
|
33
|
+
});
|
|
29
34
|
continue;
|
|
30
35
|
}
|
|
31
36
|
console.log(`Deregistering ${image.ImageId}`);
|
|
@@ -44,7 +49,7 @@ async function deleteAmis(stackName, builderName) {
|
|
|
44
49
|
}
|
|
45
50
|
async function handler(event, context) {
|
|
46
51
|
try {
|
|
47
|
-
console.log(
|
|
52
|
+
console.log({ ...event, ResponseURL: '...' });
|
|
48
53
|
switch (event.RequestType) {
|
|
49
54
|
case 'Create':
|
|
50
55
|
case 'Update':
|
|
@@ -62,4 +67,4 @@ async function handler(event, context) {
|
|
|
62
67
|
}
|
|
63
68
|
}
|
|
64
69
|
exports.handler = handler;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWFtaS5sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW1hZ2UtYnVpbGRlcnMvYXdzLWltYWdlLWJ1aWxkZXIvZGVsZXRlLWFtaS5sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBSzZCO0FBRTdCLHlEQUE2RDtBQUU3RCxNQUFNLEdBQUcsR0FBRyxJQUFJLHNCQUFTLEVBQUUsQ0FBQztBQUU1QixLQUFLLFVBQVUsVUFBVSxDQUFDLFNBQWlCLEVBQUUsV0FBbUI7SUFDOUQsMEdBQTBHO0lBQzFHLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLGtDQUFxQixDQUFDO1FBQ3RELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoQixPQUFPLEVBQUU7WUFDUDtnQkFDRSxJQUFJLEVBQUUseUJBQXlCO2dCQUMvQixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDcEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUM7YUFDdEI7U0FDRjtLQUNGLENBQUMsQ0FBQyxDQUFDO0lBRUosSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFFekMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNWLE1BQU0sRUFBRSxTQUFTLGNBQWMsQ0FBQyxNQUFNLE9BQU87UUFDN0MsTUFBTSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0tBQzNDLENBQUMsQ0FBQztJQUVILDJCQUEyQjtJQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWCxNQUFNLEVBQUUsY0FBYztnQkFDdEIsS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILFNBQVM7UUFDWCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFOUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksbUNBQXNCLENBQUM7WUFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBRUosS0FBSyxNQUFNLFlBQVksSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFFLENBQUM7WUFDM0QsSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUV2RCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQ0FBcUIsQ0FBQztvQkFDdkMsVUFBVSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVTtpQkFDeEMsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUFrRCxFQUFFLE9BQTBCO0lBQzFHLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUU5QyxRQUFRLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUTtnQkFDWCxNQUFNLElBQUEsc0NBQXFCLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzRixNQUFNLElBQUEsc0NBQXFCLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRixNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixNQUFNLElBQUEsc0NBQXFCLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRyxDQUFXLENBQUMsT0FBTyxJQUFJLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEgsQ0FBQztBQUNILENBQUM7QUFsQkQsMEJBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVsZXRlU25hcHNob3RDb21tYW5kLFxuICBEZXJlZ2lzdGVySW1hZ2VDb21tYW5kLFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIEVDMkNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjMic7XG5pbXBvcnQgKiBhcyBBV1NMYW1iZGEgZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBjdXN0b21SZXNvdXJjZVJlc3BvbmQgfSBmcm9tICcuLi8uLi9sYW1iZGEtaGVscGVycyc7XG5cbmNvbnN0IGVjMiA9IG5ldyBFQzJDbGllbnQoKTtcblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlQW1pcyhzdGFja05hbWU6IHN0cmluZywgYnVpbGRlck5hbWU6IHN0cmluZykge1xuICAvLyBsaWZlY3ljbGUgcnVsZSBydW5zIGRhaWx5IGFuZCBpbWFnZXMgYXJlIGJ1aWx0IG9uY2UgYSB3ZWVrLCBzbyB0aGVyZSBzaG91bGRuJ3QgYmUgYSBuZWVkIGZvciBwYWdpbmF0aW9uXG4gIGNvbnN0IGltYWdlcyA9IGF3YWl0IGVjMi5zZW5kKG5ldyBEZXNjcmliZUltYWdlc0NvbW1hbmQoe1xuICAgIE93bmVyczogWydzZWxmJ10sXG4gICAgRmlsdGVyczogW1xuICAgICAge1xuICAgICAgICBOYW1lOiAndGFnOkdpdEh1YlJ1bm5lcnM6U3RhY2snLFxuICAgICAgICBWYWx1ZXM6IFtzdGFja05hbWVdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgTmFtZTogJ3RhZzpHaXRIdWJSdW5uZXJzOkJ1aWxkZXInLFxuICAgICAgICBWYWx1ZXM6IFtidWlsZGVyTmFtZV0sXG4gICAgICB9LFxuICAgIF0sXG4gIH0pKTtcblxuICBsZXQgaW1hZ2VzVG9EZWxldGUgPSBpbWFnZXMuSW1hZ2VzID8/IFtdO1xuXG4gIGNvbnNvbGUubG9nKHtcbiAgICBub3RpY2U6IGBGb3VuZCAke2ltYWdlc1RvRGVsZXRlLmxlbmd0aH0gQU1Jc2AsXG4gICAgaW1hZ2VzOiBpbWFnZXNUb0RlbGV0ZS5tYXAoaSA9PiBpLkltYWdlSWQpLFxuICB9KTtcblxuICAvLyBkZWxldGUgYWxsIHRoYXQgd2UgZm91bmRcbiAgZm9yIChjb25zdCBpbWFnZSBvZiBpbWFnZXNUb0RlbGV0ZSkge1xuICAgIGlmICghaW1hZ2UuSW1hZ2VJZCkge1xuICAgICAgY29uc29sZS53YXJuKHtcbiAgICAgICAgbm90aWNlOiAnTm8gaW1hZ2UgaWQ/JyxcbiAgICAgICAgaW1hZ2UsXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBEZXJlZ2lzdGVyaW5nICR7aW1hZ2UuSW1hZ2VJZH1gKTtcblxuICAgIGF3YWl0IGVjMi5zZW5kKG5ldyBEZXJlZ2lzdGVySW1hZ2VDb21tYW5kKHtcbiAgICAgIEltYWdlSWQ6IGltYWdlLkltYWdlSWQsXG4gICAgfSkpO1xuXG4gICAgZm9yIChjb25zdCBibG9ja01hcHBpbmcgb2YgaW1hZ2UuQmxvY2tEZXZpY2VNYXBwaW5ncyA/PyBbXSkge1xuICAgICAgaWYgKGJsb2NrTWFwcGluZy5FYnM/LlNuYXBzaG90SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYERlbGV0aW5nICR7YmxvY2tNYXBwaW5nLkVicy5TbmFwc2hvdElkfWApO1xuXG4gICAgICAgIGF3YWl0IGVjMi5zZW5kKG5ldyBEZWxldGVTbmFwc2hvdENvbW1hbmQoe1xuICAgICAgICAgIFNuYXBzaG90SWQ6IGJsb2NrTWFwcGluZy5FYnMuU25hcHNob3RJZCxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgY29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyh7IC4uLmV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfSk7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LlJlcXVlc3RUeXBlKSB7XG4gICAgICBjYXNlICdDcmVhdGUnOlxuICAgICAgY2FzZSAnVXBkYXRlJzpcbiAgICAgICAgYXdhaXQgY3VzdG9tUmVzb3VyY2VSZXNwb25kKGV2ZW50LCAnU1VDQ0VTUycsICdPSycsICdEZWxldGVBbWlzJywge30pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICAgIGF3YWl0IGRlbGV0ZUFtaXMoZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlN0YWNrTmFtZSwgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkJ1aWxkZXJOYW1lKTtcbiAgICAgICAgYXdhaXQgY3VzdG9tUmVzb3VyY2VSZXNwb25kKGV2ZW50LCAnU1VDQ0VTUycsICdPSycsIGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCwge30pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIGF3YWl0IGN1c3RvbVJlc291cmNlUmVzcG9uZChldmVudCwgJ0ZBSUxFRCcsIChlIGFzIEVycm9yKS5tZXNzYWdlIHx8ICdJbnRlcm5hbCBFcnJvcicsIGNvbnRleHQubG9nU3RyZWFtTmFtZSwge30pO1xuICB9XG59XG4iXX0=
|