@rio-cloud/cdk-v2-constructs 2.0.6 → 2.3.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 +411 -66
- package/CHANGELOG.md +35 -0
- package/CONTRIBUTION.md +122 -9
- package/MIGRATION_GUIDE.md +1 -1
- package/lib/contributions/team-transport-two/pipeline/application-stage.d.ts +12 -0
- package/lib/contributions/team-transport-two/pipeline/application-stage.js +16 -0
- package/lib/contributions/team-transport-two/pipeline/build-project.d.ts +13 -0
- package/lib/contributions/team-transport-two/pipeline/build-project.js +31 -0
- package/lib/contributions/team-transport-two/pipeline/buildspec-vulnerability-checks.yaml +19 -0
- package/lib/contributions/team-transport-two/pipeline/buildspec.yaml +58 -0
- package/lib/contributions/team-transport-two/pipeline/datadog-monitors.d.ts +15 -0
- package/lib/contributions/team-transport-two/pipeline/datadog-monitors.js +42 -0
- package/lib/contributions/team-transport-two/pipeline/index.d.ts +1 -0
- package/lib/contributions/team-transport-two/pipeline/index.js +14 -0
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.d.ts +105 -0
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +173 -0
- package/lib/fargate/datadog.js +2 -2
- package/lib/fargate/rio-fargate-service.d.ts +6 -0
- package/lib/fargate/rio-fargate-service.js +16 -12
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/rio-claidometer.d.ts +4 -1
- package/lib/rio-claidometer.js +4 -1
- package/lib/watchful/lambda.d.ts +1 -0
- package/lib/watchful/lambda.js +18 -1
- package/package.json +4 -2
- package/scripts/.jsii-doc.mjs +11 -0
- package/version.json +1 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PipelineStack = exports.PipelineType = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const cdk = require("aws-cdk-lib");
|
|
8
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
+
const codepipeline = require("aws-cdk-lib/aws-codepipeline");
|
|
10
|
+
const codepipeline_actions = require("aws-cdk-lib/aws-codepipeline-actions");
|
|
11
|
+
const events = require("aws-cdk-lib/aws-events");
|
|
12
|
+
const targets = require("aws-cdk-lib/aws-events-targets");
|
|
13
|
+
const s3 = require("aws-cdk-lib/aws-s3");
|
|
14
|
+
const ssm = require("aws-cdk-lib/aws-ssm");
|
|
15
|
+
const pipelines = require("aws-cdk-lib/pipelines");
|
|
16
|
+
const pipelines_1 = require("aws-cdk-lib/pipelines");
|
|
17
|
+
const rio = require("../../../index");
|
|
18
|
+
const index_1 = require("../../../index");
|
|
19
|
+
const upperToLower_1 = require("../../../watchful/upperToLower");
|
|
20
|
+
const application_stage_1 = require("./application-stage");
|
|
21
|
+
const build_project_1 = require("./build-project");
|
|
22
|
+
const datadog_monitors_1 = require("./datadog-monitors");
|
|
23
|
+
var PipelineType;
|
|
24
|
+
(function (PipelineType) {
|
|
25
|
+
/**
|
|
26
|
+
* Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka.
|
|
27
|
+
*
|
|
28
|
+
* Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and
|
|
29
|
+
* branch pipeline and includes the following steps
|
|
30
|
+
* - build and test of the artifact via command "./gradlew clean build".
|
|
31
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
32
|
+
* - license-check and upload of license-check-file via command "./gradlew checkLicenses".
|
|
33
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
34
|
+
* - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
|
|
35
|
+
* - build the container image via command "./gradlew jibBuildTar".
|
|
36
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
37
|
+
*/
|
|
38
|
+
PipelineType["STANDARD_GRADLE"] = "STANDARD_GRADLE";
|
|
39
|
+
})(PipelineType = exports.PipelineType || (exports.PipelineType = {}));
|
|
40
|
+
class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
41
|
+
constructor(scope, id, props) {
|
|
42
|
+
super(scope, id, props);
|
|
43
|
+
// Creating the main pipeline
|
|
44
|
+
const bucket = s3.Bucket.fromBucketName(this, 'TriggerBucket', aws_cdk_lib_1.Fn.importValue('bitbucket-integration-s3-bucket'));
|
|
45
|
+
const hostedZone = rio.RioLandingZone.getDefaultHostedZone(this);
|
|
46
|
+
const inputMasterTriggerFile = pipelines.CodePipelineSource.s3(bucket, `${props.serviceName}/trigger/${rio.TriggerKey.MASTER_REPO}`, { trigger: codepipeline_actions.S3Trigger.EVENTS });
|
|
47
|
+
const inputBranchTriggerFile = pipelines.CodePipelineSource.s3(bucket, `${props.serviceName}/trigger/${rio.TriggerKey.BRANCH_REPO}`, { trigger: codepipeline_actions.S3Trigger.EVENTS });
|
|
48
|
+
const ossLicensesBucketParameter = ssm.StringParameter.fromStringParameterAttributes(this, 'OssLicensesBucketParameter', {
|
|
49
|
+
parameterName: '/config/oss-licenses/bucket-name',
|
|
50
|
+
});
|
|
51
|
+
const ossLicensesBucket = s3.Bucket.fromBucketName(this, 'OssLicensesBucket', ossLicensesBucketParameter.stringValue);
|
|
52
|
+
const serviceKeystorePassword = ssm.StringParameter.fromSecureStringParameterAttributes(this, 'KeystorePassword', {
|
|
53
|
+
parameterName: `/config/${props.serviceName}/service-keystore-password`,
|
|
54
|
+
version: 1,
|
|
55
|
+
});
|
|
56
|
+
const accountNameParameter = ssm.StringParameter.fromStringParameterName(this, 'AccountNameParameter', '/config/account/name');
|
|
57
|
+
const gradlebuild = new build_project_1.RioGradleCodeBuildProject(this, 'GradleBuild', {
|
|
58
|
+
input: inputMasterTriggerFile,
|
|
59
|
+
cdkOutDirectory: 'infrastructure/cdk.out',
|
|
60
|
+
buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec.yaml'),
|
|
61
|
+
hostedZoneName: hostedZone.zoneName,
|
|
62
|
+
serviceName: props.serviceName,
|
|
63
|
+
});
|
|
64
|
+
const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
|
|
65
|
+
synth: gradlebuild,
|
|
66
|
+
});
|
|
67
|
+
// CloudAssemblyArtifacts must be smaller than 256MB. Due to the gradle artifact we are exceeding this limit and pipeline fails in deployment step.
|
|
68
|
+
// Issue is known and not fixed for already some years. See: https://github.com/aws/aws-cdk/issues/9917
|
|
69
|
+
// Dirty fix: Assets are already uploaded and thus not needed. Remove them from pipeline artifact.
|
|
70
|
+
const stripAssetsStep = new pipelines_1.CodeBuildStep('StripAssetsFromAssembly', {
|
|
71
|
+
input: pipeline.cloudAssemblyFileSet,
|
|
72
|
+
commands: [
|
|
73
|
+
'S3_PATH=${CODEBUILD_SOURCE_VERSION#"arn:aws:s3:::"}',
|
|
74
|
+
'ZIP_ARCHIVE=$(basename $S3_PATH)',
|
|
75
|
+
'rm -rfv asset.*',
|
|
76
|
+
'zip -r -q -A $ZIP_ARCHIVE *',
|
|
77
|
+
'aws s3 cp $ZIP_ARCHIVE s3://$S3_PATH',
|
|
78
|
+
],
|
|
79
|
+
});
|
|
80
|
+
pipeline.addWave('BeforeDeploy', { pre: [stripAssetsStep] });
|
|
81
|
+
pipeline.addStage(new application_stage_1.Application(this, 'DeployApplicationStacks', {
|
|
82
|
+
appStackFactory: props.appStackFactory,
|
|
83
|
+
serviceName: props.serviceName,
|
|
84
|
+
version: codepipeline.GlobalVariables.executionId,
|
|
85
|
+
}), {
|
|
86
|
+
pre: props.secretsDeployStepProps ? [
|
|
87
|
+
new rio.RioSecretsDeployStep(this, 'DeploySecrets', { ...props.secretsDeployStepProps, input: inputMasterTriggerFile }),
|
|
88
|
+
] : undefined,
|
|
89
|
+
});
|
|
90
|
+
pipeline.buildPipeline();
|
|
91
|
+
const rule = new events.Rule(this, 'PipelineSchedule', { schedule: events.Schedule.expression('cron(0 9 ? * 2#1 *)') });
|
|
92
|
+
rule.addTarget(new targets.CodePipeline(pipeline.pipeline));
|
|
93
|
+
PipelineStack.addLifecycleRuleArtifactBucket(pipeline);
|
|
94
|
+
ossLicensesBucket.grantReadWrite(gradlebuild);
|
|
95
|
+
ossLicensesBucketParameter.grantRead(gradlebuild);
|
|
96
|
+
serviceKeystorePassword.grantRead(gradlebuild);
|
|
97
|
+
accountNameParameter.grantRead(gradlebuild);
|
|
98
|
+
pipeline.pipeline.artifactBucket.grantReadWrite(stripAssetsStep.project);
|
|
99
|
+
// Branch pipeline
|
|
100
|
+
const branchBuild = new build_project_1.RioGradleCodeBuildProject(this, 'BranchBuild', {
|
|
101
|
+
input: inputBranchTriggerFile,
|
|
102
|
+
cdkOutDirectory: 'infrastructure/cdk.out',
|
|
103
|
+
buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec.yaml'),
|
|
104
|
+
hostedZoneName: hostedZone.zoneName,
|
|
105
|
+
serviceName: props.serviceName,
|
|
106
|
+
});
|
|
107
|
+
const branchPipeline = new pipelines.CodePipeline(this, 'BranchPipeline', {
|
|
108
|
+
synth: branchBuild,
|
|
109
|
+
selfMutation: false,
|
|
110
|
+
});
|
|
111
|
+
branchPipeline.addWave('BranchBuild').addPost(branchBuild);
|
|
112
|
+
branchPipeline.buildPipeline();
|
|
113
|
+
PipelineStack.addLifecycleRuleArtifactBucket(branchPipeline);
|
|
114
|
+
ossLicensesBucket.grantReadWrite(branchBuild);
|
|
115
|
+
ossLicensesBucketParameter.grantRead(branchBuild);
|
|
116
|
+
serviceKeystorePassword.grantRead(branchBuild);
|
|
117
|
+
accountNameParameter.grantRead(branchBuild);
|
|
118
|
+
// Vulnerability Pipeline
|
|
119
|
+
const vulnerabilityBuild = new build_project_1.RioGradleCodeBuildProject(this, 'VulnerabilityChecks', {
|
|
120
|
+
input: inputMasterTriggerFile,
|
|
121
|
+
buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec-vulnerability-checks.yaml'),
|
|
122
|
+
hostedZoneName: hostedZone.zoneName,
|
|
123
|
+
serviceName: props.serviceName,
|
|
124
|
+
});
|
|
125
|
+
const vulnerabilityPipeline = new pipelines.CodePipeline(this, 'VulnerabilityPipeline', {
|
|
126
|
+
synth: vulnerabilityBuild,
|
|
127
|
+
selfMutation: false,
|
|
128
|
+
});
|
|
129
|
+
vulnerabilityPipeline.addWave('VulnerabilityChecks').addPost(vulnerabilityBuild);
|
|
130
|
+
vulnerabilityPipeline.buildPipeline();
|
|
131
|
+
const vulnerabilityRule = new events.Rule(this, 'VulnerabilityPipelineSchedule', { schedule: events.Schedule.expression('cron(0 5 ? * MON-FRI *)') });
|
|
132
|
+
vulnerabilityRule.addTarget(new targets.CodePipeline(vulnerabilityPipeline.pipeline));
|
|
133
|
+
PipelineStack.addLifecycleRuleArtifactBucket(vulnerabilityPipeline);
|
|
134
|
+
new datadog_monitors_1.DatadogPipelineErrorAlert(this, 'DatadogPipelineErrorMonitor', {
|
|
135
|
+
serviceName: props.serviceName,
|
|
136
|
+
pipelineName: this.renamePipelineToLowerCase(pipeline),
|
|
137
|
+
accountId: this.account,
|
|
138
|
+
});
|
|
139
|
+
new datadog_monitors_1.DataDogPipelineErrorAlertForVulnerabilityChecks(this, 'DataDogPipelineErrorForVulnerabilityChecksMonitor', {
|
|
140
|
+
serviceName: props.serviceName,
|
|
141
|
+
pipelineName: this.renamePipelineToLowerCase(vulnerabilityPipeline),
|
|
142
|
+
accountId: this.account,
|
|
143
|
+
});
|
|
144
|
+
const [feature, packageName] = __dirname.split(path.sep).reverse();
|
|
145
|
+
new index_1.Claidometer(this, 'Claidometer', {
|
|
146
|
+
product: index_1.ClaidometerProduct.CDK_CONTRIBUTION,
|
|
147
|
+
packageName,
|
|
148
|
+
feature,
|
|
149
|
+
version: '0.0.1',
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
static addLifecycleRuleArtifactBucket(pipeline) {
|
|
153
|
+
const artifactsBucket = pipeline.pipeline.artifactBucket;
|
|
154
|
+
artifactsBucket.addLifecycleRule({
|
|
155
|
+
enabled: true,
|
|
156
|
+
expiration: aws_cdk_lib_1.Duration.days(90),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
renamePipelineToLowerCase(pipeline) {
|
|
160
|
+
const upperToLowerCr = new cdk.CustomResource(this, `${pipeline.node.id}-UpperToLower`, {
|
|
161
|
+
resourceType: 'Custom::UpperToLower',
|
|
162
|
+
serviceToken: upperToLower_1.UpperToLower.getOrCreate(this).provider.serviceToken,
|
|
163
|
+
properties: {
|
|
164
|
+
Upper: pipeline.pipeline.pipelineName,
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
return upperToLowerCr.getAtt('Lower');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.PipelineStack = PipelineStack;
|
|
171
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
172
|
+
PipelineStack[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.PipelineStack", version: "0.0.0" };
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLDZDQUF5RTtBQUN6RSw2REFBNkQ7QUFDN0QsNkVBQTZFO0FBQzdFLGlEQUFpRDtBQUNqRCwwREFBMEQ7QUFDMUQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxtREFBbUQ7QUFDbkQscURBQXNEO0FBRXRELHNDQUFzQztBQUN0QywwQ0FBaUU7QUFDakUsaUVBQThEO0FBQzlELDJEQUFrRDtBQUNsRCxtREFBNEQ7QUFDNUQseURBQWdIO0FBNEZoSCxJQUFZLFlBZ0JYO0FBaEJELFdBQVksWUFBWTtJQUV0Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxtREFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBaEJXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBZ0J2QjtBQUVELE1BQWEsYUFBYyxTQUFRLG1CQUFLO0lBVXRDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsNkJBQTZCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsTUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLFlBQVksR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN6TCxNQUFNLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsWUFBWSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXpMLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FDbEYsSUFBSSxFQUNKLDRCQUE0QixFQUM1QjtZQUNFLGFBQWEsRUFBRSxrQ0FBa0M7U0FDbEQsQ0FDRixDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FDaEQsSUFBSSxFQUNKLG1CQUFtQixFQUNuQiwwQkFBMEIsQ0FBQyxXQUFXLENBQ3ZDLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsbUNBQW1DLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ2hILGFBQWEsRUFBRSxXQUFXLEtBQUssQ0FBQyxXQUFXLDRCQUE0QjtZQUN2RSxPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUMsQ0FBQztRQUNILE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDdEUsSUFBSSxFQUNKLHNCQUFzQixFQUN0QixzQkFBc0IsQ0FDdkIsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUkseUNBQXlCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNyRSxLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLGVBQWUsRUFBRSx3QkFBd0I7WUFDekMsYUFBYSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztZQUNyRixjQUFjLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDbkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzVELEtBQUssRUFBRSxXQUFXO1NBQ25CLENBQUMsQ0FBQztRQUVILG1KQUFtSjtRQUNuSix1R0FBdUc7UUFDdkcsa0dBQWtHO1FBQ2xHLE1BQU0sZUFBZSxHQUFHLElBQUkseUJBQWEsQ0FDdkMseUJBQXlCLEVBQUU7WUFDekIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0I7WUFDcEMsUUFBUSxFQUFFO2dCQUNSLHFEQUFxRDtnQkFDckQsa0NBQWtDO2dCQUNsQyxpQkFBaUI7Z0JBQ2pCLDZCQUE2QjtnQkFDN0Isc0NBQXNDO2FBQ3ZDO1NBQ0YsQ0FDRixDQUFDO1FBRUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLCtCQUFXLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFO1lBQ2pFLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtZQUN0QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsT0FBTyxFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsV0FBVztTQUNsRCxDQUFDLEVBQUU7WUFDRixHQUFHLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxHQUFHLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxDQUFDO2FBQ3hILENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4SCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUU1RCxhQUFhLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0Msb0JBQW9CLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekUsa0JBQWtCO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUkseUNBQXlCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNyRSxLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLGVBQWUsRUFBRSx3QkFBd0I7WUFDekMsYUFBYSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztZQUNyRixjQUFjLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDbkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztRQUNILE1BQU0sY0FBYyxHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDeEUsS0FBSyxFQUFFLFdBQVc7WUFDbEIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0QsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRS9CLGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3RCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUMseUJBQXlCO1FBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSx5Q0FBeUIsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDcEYsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixhQUFhLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLHFDQUFxQyxDQUFDO1lBQzFHLGNBQWMsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUNuQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ3RGLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBQ0gscUJBQXFCLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakYscUJBQXFCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLCtCQUErQixFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RKLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV0RixhQUFhLENBQUMsOEJBQThCLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVwRSxJQUFJLDRDQUF5QixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRTtZQUNqRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsWUFBWSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUM7WUFDdEQsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3hCLENBQUMsQ0FBQztRQUVILElBQUksa0VBQStDLENBQUMsSUFBSSxFQUFFLG1EQUFtRCxFQUFFO1lBQzdHLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixZQUFZLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDO1lBQ25FLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztTQUN4QixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25FLElBQUksbUJBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ25DLE9BQU8sRUFBRSwwQkFBa0IsQ0FBQyxnQkFBZ0I7WUFDNUMsV0FBVztZQUNYLE9BQU87WUFDUCxPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBdEpPLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxRQUFnQztRQUM1RSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUN4RCxlQUE2QixDQUFDLGdCQUFnQixDQUFDO1lBQzlDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBa0pPLHlCQUF5QixDQUFDLFFBQWdDO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxFQUFFO1lBQ3RGLFlBQVksRUFBRSxzQkFBc0I7WUFDcEMsWUFBWSxFQUFFLDJCQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ2xFLFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZO2FBQ3RDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O0FBbEtILHNDQW1LQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRHVyYXRpb24sIEZuLCBSZWZlcmVuY2UsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lX2FjdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyByaW8gZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHsgQ2xhaWRvbWV0ZXIsIENsYWlkb21ldGVyUHJvZHVjdCB9IGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IFVwcGVyVG9Mb3dlciB9IGZyb20gJy4uLy4uLy4uL3dhdGNoZnVsL3VwcGVyVG9Mb3dlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gJy4vYXBwbGljYXRpb24tc3RhZ2UnO1xuaW1wb3J0IHsgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCB9IGZyb20gJy4vYnVpbGQtcHJvamVjdCc7XG5pbXBvcnQgeyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0LCBEYXRhRG9nUGlwZWxpbmVFcnJvckFsZXJ0Rm9yVnVsbmVyYWJpbGl0eUNoZWNrcyB9IGZyb20gJy4vZGF0YWRvZy1tb25pdG9ycyc7XG5cbi8qKlxuICAqIEBzdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhpcyBoYXMgdG8gYmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcmVwb3NpdG9yeSBhcyB0aGUgczMgdHJpZ2dlciBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJpdGJ1Y2tldC1pbnRlZ3JhdGlvbiB1c2VzIHRoaXMgYXMgYSBwcmVmaXhcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIFNFUlZJQ0VfTkFNRSBpbiB0aGUgQ29kZUJ1aWxkU3RlcFxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgaW4gdGhlIEFwcFN0YWNrUHJvcHMgaW4gdGhlIGFwcFN0YWNrRmFjdG9yeVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgYXMgc3RhY2tOYW1lIHByb3BlcnR5IGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnkuIEkuZS4gdGhlIHN0YWNrIGlzIG5hbWVkIGFmdGVyIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGhhbmRlZCBvdmVyIHRvIGFsbCBEYXRhZG9nIG1vbml0b3JzXG4gICAqIC0gUklPIGNvbnZlbnRpb24gaXMgdGhhdCB1cGxvYWRlZCBsaWNlbnNlLWNoZWNrLWZpbGVzIGFyZSBuYW1lZCBhZnRlciB0aGUgc2VydmljZSwgaS5lLiBzZXJ2aWNlTmFtZS50eHRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhcHBTdGFjayB0byBiZSBkZXBsb3llZC5cbiAgICpcbiAgICogVGhpcyBhY3RzIGFzIGEgd3JhcHBlciBmb3IgYWxsIHJlc291cmNlcyB5b3Ugd2FudCB0byBkZXBsb3kgdmlhIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFN0YWNrRmFjdG9yeTogSUFwcFN0YWNrRmFjdG9yeTtcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVUeXBlOiBQaXBlbGluZVR5cGU7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYSBjdXN0b20gYnVpbGRzcGVjLnlhbWwgdGhhdCBpcyB1c2VkIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiBBIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIGZpdHRpbmcgdGhlIHBpcGVsaW5lVHlwZSBpcyB1c2VkIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUJ1aWxkc3BlY1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gc2VjcmV0cyBmaWxlIGNvbnRhaW5pbmcgZW5jcnlwdGVkIHNlY3JldHMuXG4gICAqXG4gICAqIFRoZSBSaW9TZWNyZXRzRGVwbG95U3RlcCBpcyBhZGRlZCBwcmlvciB0byBkZXBsb3ltZW50IG9mIHRoZSBBcHBTdGFjayBpZiBhIHBhdGggaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIE5vIHNlY3JldHMgYXJlIGRlcGxveWVkIGlmIG5vIHBhdGggaXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzRGVwbG95U3RlcFByb3BzPzogUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHM7XG59XG5cbi8qKlxuICogUHJvdmlkZXIgaW50ZXJmYWNlIHRvIGNyZWF0ZSB0aGUgQXBwU3RhY2sgd2l0aGluIHRoZSBzcGVjaWZpYyBzY29wZVxuICpcbiAqIFNpbXBseSBwbGFjZSB0aGUgQXBwU3RhY2sgY3JlYXRpb24gaW50byB0aGUgY3JlYXRlLW1ldGhvZDpcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gVXNlIGUuZy4gd2l0aGluIEFwcGxpY2F0aW9uUHJvcHMgYXMgSlNPTk9iamVjdDpcbiAqIHsgY3JlYXRlOiAoY29uc3RydWN0LCBwcm9wcykgPT4gbmV3IFN0YWNrKGNvbnN0cnVjdCwgJ0FwcFN0YWNrJywgcHJvcHMpIH1cbiAqXG4gKiAvLyBvciBzaW1wbHkgYXMgY2xhc3MgaW50ZXJmYWNlIHdpdGhpbiB5b3VyIHN0YWNrIGltcGxlbWVudGF0aW9uOlxuICogY2xhc3MgUGlwZWxpbmVTdGFnZSBleHRlbmRzIFN0YWdlIGltcGxlbWVudHMgSUFwcFN0YWNrRmFjdG9yeSB7XG4gKiAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFnZVByb3BzKSB7XG4gKiAgICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gKiAgICAgLy8geW91ciBzdGFnZSBkZWZpbml0aW9tXG4gKiAgIH1cbiAqXG4gKiAgIGNyZWF0ZShzY29wZTogQ29uc3RydWN0LCBwcm9wczogQXBwU3RhY2tQcm9wcyk6IHZvaWQge1xuICogICAgIC8vIGFwcCBzdGFjayBpbml0aWF0aW9uIGdvZXMgaW4gaGVyZVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcFN0YWNrRmFjdG9yeSB7XG4gIC8qKlxuICAgKiBGYWN0b3J5IG1ldGhvZCwgYmVpbmcgaW52b2tlZCB3aXRoIHRoZSBzcGVjaWZpYyBzY29wZSBkdXJpbmcgcGlwZWxpbmUgaW5zdGFudGlhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHBhcmVudCBjb25zdHJ1Y3QgZm9yIHRoZSBhcHAgc3RhY2tcbiAgICogQHBhcmFtIHByb3BzIHRoZSBhcHAgc3RhY2tzIHByb3BlcnRpZXNcbiAgICovXG4gIGNyZWF0ZShzY29wZTogQ29uc3RydWN0LCBwcm9wczogQXBwU3RhY2tQcm9wcyApOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdGVkIHByb3BlcnRpZXMgYmVpbmcgaGFuZGVkIG92ZXIgdG8gUmlvU2VjcmV0c0RlcGxveVN0ZXAuXG4gKlxuICogQHNlZSByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXBcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wcyB7XG4gIHJlYWRvbmx5IHNlY3JldHNGaWxlUGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBQaXBlbGluZVR5cGUge1xuXG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrLiBCZSBhd2FyZTogVGhlIHByb3ZpZGVkIHNlcnZpY2Ugd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gS2Fma2EuXG4gICAqXG4gICAqIENvbWVzIHdpdGggYSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmb3IgYSBncmFkbGUgcHJvamVjdC4gVGhpcyBidWlsZHNwZWMueWFtbCBpcyB1c2VkIGZvciBib3RoIHRoZSBtYWluIGFuZFxuICAgKiBicmFuY2ggcGlwZWxpbmUgYW5kIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgc3RlcHNcbiAgICogLSBidWlsZCBhbmQgdGVzdCBvZiB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2xlYW4gYnVpbGRcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjaGVja0xpY2Vuc2VzXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGNyZWF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRvIG1ha2UgVExTIGNvbW11bmljYXRpb24gcG9zc2libGUsIGUuZy4gd2l0aCBhIGxvYWRiYWxhbmNlci5cbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKi9cbiAgU1RBTkRBUkRfR1JBRExFID0gJ1NUQU5EQVJEX0dSQURMRScsXG59XG5cbmV4cG9ydCBjbGFzcyBQaXBlbGluZVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIHN0YXRpYyBhZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQocGlwZWxpbmU6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUpIHtcbiAgICBjb25zdCBhcnRpZmFjdHNCdWNrZXQgPSBwaXBlbGluZS5waXBlbGluZS5hcnRpZmFjdEJ1Y2tldDtcbiAgICAoYXJ0aWZhY3RzQnVja2V0IGFzIHMzLkJ1Y2tldCkuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyg5MCksXG4gICAgfSk7XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIENyZWF0aW5nIHRoZSBtYWluIHBpcGVsaW5lXG4gICAgY29uc3QgYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdUcmlnZ2VyQnVja2V0JywgRm4uaW1wb3J0VmFsdWUoJ2JpdGJ1Y2tldC1pbnRlZ3JhdGlvbi1zMy1idWNrZXQnKSk7XG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IHJpby5SaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0SG9zdGVkWm9uZSh0aGlzKTtcbiAgICBjb25zdCBpbnB1dE1hc3RlclRyaWdnZXJGaWxlID0gcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZS5zMyhidWNrZXQsIGAke3Byb3BzLnNlcnZpY2VOYW1lfS90cmlnZ2VyLyR7cmlvLlRyaWdnZXJLZXkuTUFTVEVSX1JFUE99YCwgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH0pO1xuICAgIGNvbnN0IGlucHV0QnJhbmNoVHJpZ2dlckZpbGUgPSBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLnMzKGJ1Y2tldCwgYCR7cHJvcHMuc2VydmljZU5hbWV9L3RyaWdnZXIvJHtyaW8uVHJpZ2dlcktleS5CUkFOQ0hfUkVQT31gLCB7IHRyaWdnZXI6IGNvZGVwaXBlbGluZV9hY3Rpb25zLlMzVHJpZ2dlci5FVkVOVFMgfSk7XG5cbiAgICBjb25zdCBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyJyxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBvc3NMaWNlbnNlc0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnT3NzTGljZW5zZXNCdWNrZXQnLFxuICAgICAgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuc3RyaW5nVmFsdWUsXG4gICAgKTtcbiAgICBjb25zdCBzZXJ2aWNlS2V5c3RvcmVQYXNzd29yZCA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgJ0tleXN0b3JlUGFzc3dvcmQnLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBgL2NvbmZpZy8ke3Byb3BzLnNlcnZpY2VOYW1lfS9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkYCxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgfSk7XG4gICAgY29uc3QgYWNjb3VudE5hbWVQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdBY2NvdW50TmFtZVBhcmFtZXRlcicsXG4gICAgICAnL2NvbmZpZy9hY2NvdW50L25hbWUnLFxuICAgICk7XG5cbiAgICBjb25zdCBncmFkbGVidWlsZCA9IG5ldyBSaW9HcmFkbGVDb2RlQnVpbGRQcm9qZWN0KHRoaXMsICdHcmFkbGVCdWlsZCcsIHtcbiAgICAgIGlucHV0OiBpbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgY2RrT3V0RGlyZWN0b3J5OiAnaW5mcmFzdHJ1Y3R1cmUvY2RrLm91dCcsXG4gICAgICBidWlsZFNwZWNQYXRoOiBwcm9wcy5jdXN0b21CdWlsZHNwZWNQYXRoIHx8IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdidWlsZHNwZWMueWFtbCcpLFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHRoaXMsICdQaXBlbGluZScsIHtcbiAgICAgIHN5bnRoOiBncmFkbGVidWlsZCxcbiAgICB9KTtcblxuICAgIC8vIENsb3VkQXNzZW1ibHlBcnRpZmFjdHMgbXVzdCBiZSBzbWFsbGVyIHRoYW4gMjU2TUIuIER1ZSB0byB0aGUgZ3JhZGxlIGFydGlmYWN0IHdlIGFyZSBleGNlZWRpbmcgdGhpcyBsaW1pdCBhbmQgcGlwZWxpbmUgZmFpbHMgaW4gZGVwbG95bWVudCBzdGVwLlxuICAgIC8vIElzc3VlIGlzIGtub3duIGFuZCBub3QgZml4ZWQgZm9yIGFscmVhZHkgc29tZSB5ZWFycy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICAvLyBEaXJ0eSBmaXg6IEFzc2V0cyBhcmUgYWxyZWFkeSB1cGxvYWRlZCBhbmQgdGh1cyBub3QgbmVlZGVkLiBSZW1vdmUgdGhlbSBmcm9tIHBpcGVsaW5lIGFydGlmYWN0LlxuICAgIGNvbnN0IHN0cmlwQXNzZXRzU3RlcCA9IG5ldyBDb2RlQnVpbGRTdGVwKFxuICAgICAgJ1N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5Jywge1xuICAgICAgICBpbnB1dDogcGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICAnWklQX0FSQ0hJVkU9JChiYXNlbmFtZSAkUzNfUEFUSCknLFxuICAgICAgICAgICdybSAtcmZ2IGFzc2V0LionLFxuICAgICAgICAgICd6aXAgLXIgLXEgLUEgJFpJUF9BUkNISVZFIConLFxuICAgICAgICAgICdhd3MgczMgY3AgJFpJUF9BUkNISVZFIHMzOi8vJFMzX1BBVEgnLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcGlwZWxpbmUuYWRkV2F2ZSgnQmVmb3JlRGVwbG95JywgeyBwcmU6IFtzdHJpcEFzc2V0c1N0ZXBdIH0pO1xuXG4gICAgcGlwZWxpbmUuYWRkU3RhZ2UobmV3IEFwcGxpY2F0aW9uKHRoaXMsICdEZXBsb3lBcHBsaWNhdGlvblN0YWNrcycsIHtcbiAgICAgIGFwcFN0YWNrRmFjdG9yeTogcHJvcHMuYXBwU3RhY2tGYWN0b3J5LFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbjogY29kZXBpcGVsaW5lLkdsb2JhbFZhcmlhYmxlcy5leGVjdXRpb25JZCxcbiAgICB9KSwge1xuICAgICAgcHJlOiBwcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzID8gW1xuICAgICAgICBuZXcgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwKHRoaXMsICdEZXBsb3lTZWNyZXRzJywgeyAuLi5wcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzLCBpbnB1dDogaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSB9KSxcbiAgICAgIF0gOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnUGlwZWxpbmVTY2hlZHVsZScsIHsgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKCdjcm9uKDAgOSA/ICogMiMxICopJykgfSk7XG4gICAgcnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKHBpcGVsaW5lLnBpcGVsaW5lKSk7XG5cbiAgICBQaXBlbGluZVN0YWNrLmFkZExpZmVjeWNsZVJ1bGVBcnRpZmFjdEJ1Y2tldChwaXBlbGluZSk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoZ3JhZGxlYnVpbGQpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChncmFkbGVidWlsZCk7XG4gICAgc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKGdyYWRsZWJ1aWxkKTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoZ3JhZGxlYnVpbGQpO1xuICAgIHBpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKHN0cmlwQXNzZXRzU3RlcC5wcm9qZWN0KTtcblxuICAgIC8vIEJyYW5jaCBwaXBlbGluZVxuICAgIGNvbnN0IGJyYW5jaEJ1aWxkID0gbmV3IFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3QodGhpcywgJ0JyYW5jaEJ1aWxkJywge1xuICAgICAgaW5wdXQ6IGlucHV0QnJhbmNoVHJpZ2dlckZpbGUsXG4gICAgICBjZGtPdXREaXJlY3Rvcnk6ICdpbmZyYXN0cnVjdHVyZS9jZGsub3V0JyxcbiAgICAgIGJ1aWxkU3BlY1BhdGg6IHByb3BzLmN1c3RvbUJ1aWxkc3BlY1BhdGggfHwgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2J1aWxkc3BlYy55YW1sJyksXG4gICAgICBob3N0ZWRab25lTmFtZTogaG9zdGVkWm9uZS56b25lTmFtZSxcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICB9KTtcbiAgICBjb25zdCBicmFuY2hQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHRoaXMsICdCcmFuY2hQaXBlbGluZScsIHtcbiAgICAgIHN5bnRoOiBicmFuY2hCdWlsZCxcbiAgICAgIHNlbGZNdXRhdGlvbjogZmFsc2UsXG4gICAgfSk7XG4gICAgYnJhbmNoUGlwZWxpbmUuYWRkV2F2ZSgnQnJhbmNoQnVpbGQnKS5hZGRQb3N0KGJyYW5jaEJ1aWxkKTtcbiAgICBicmFuY2hQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBQaXBlbGluZVN0YWNrLmFkZExpZmVjeWNsZVJ1bGVBcnRpZmFjdEJ1Y2tldChicmFuY2hQaXBlbGluZSk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoYnJhbmNoQnVpbGQpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuXG4gICAgLy8gVnVsbmVyYWJpbGl0eSBQaXBlbGluZVxuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlCdWlsZCA9IG5ldyBSaW9HcmFkbGVDb2RlQnVpbGRQcm9qZWN0KHRoaXMsICdWdWxuZXJhYmlsaXR5Q2hlY2tzJywge1xuICAgICAgaW5wdXQ6IGlucHV0TWFzdGVyVHJpZ2dlckZpbGUsXG4gICAgICBidWlsZFNwZWNQYXRoOiBwcm9wcy5jdXN0b21CdWlsZHNwZWNQYXRoIHx8IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdidWlsZHNwZWMtdnVsbmVyYWJpbGl0eS1jaGVja3MueWFtbCcpLFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZScsIHtcbiAgICAgIHN5bnRoOiB2dWxuZXJhYmlsaXR5QnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZS5hZGRXYXZlKCdWdWxuZXJhYmlsaXR5Q2hlY2tzJykuYWRkUG9zdCh2dWxuZXJhYmlsaXR5QnVpbGQpO1xuICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5UnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnVnVsbmVyYWJpbGl0eVBpcGVsaW5lU2NoZWR1bGUnLCB7IHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbignY3JvbigwIDUgPyAqIE1PTi1GUkkgKiknKSB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKHZ1bG5lcmFiaWxpdHlQaXBlbGluZS5waXBlbGluZSkpO1xuXG4gICAgUGlwZWxpbmVTdGFjay5hZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQodnVsbmVyYWJpbGl0eVBpcGVsaW5lKTtcblxuICAgIG5ldyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0KHRoaXMsICdEYXRhZG9nUGlwZWxpbmVFcnJvck1vbml0b3InLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBwaXBlbGluZU5hbWU6IHRoaXMucmVuYW1lUGlwZWxpbmVUb0xvd2VyQ2FzZShwaXBlbGluZSksXG4gICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICB9KTtcblxuICAgIG5ldyBEYXRhRG9nUGlwZWxpbmVFcnJvckFsZXJ0Rm9yVnVsbmVyYWJpbGl0eUNoZWNrcyh0aGlzLCAnRGF0YURvZ1BpcGVsaW5lRXJyb3JGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzTW9uaXRvcicsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHBpcGVsaW5lTmFtZTogdGhpcy5yZW5hbWVQaXBlbGluZVRvTG93ZXJDYXNlKHZ1bG5lcmFiaWxpdHlQaXBlbGluZSksXG4gICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICB9KTtcblxuICAgIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgICBuZXcgQ2xhaWRvbWV0ZXIodGhpcywgJ0NsYWlkb21ldGVyJywge1xuICAgICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICAgIGZlYXR1cmUsXG4gICAgICB2ZXJzaW9uOiAnMC4wLjEnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5hbWVQaXBlbGluZVRvTG93ZXJDYXNlKHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKTogUmVmZXJlbmNlIHtcbiAgICBjb25zdCB1cHBlclRvTG93ZXJDciA9IG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgYCR7cGlwZWxpbmUubm9kZS5pZH0tVXBwZXJUb0xvd2VyYCwge1xuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpVcHBlclRvTG93ZXInLFxuICAgICAgc2VydmljZVRva2VuOiBVcHBlclRvTG93ZXIuZ2V0T3JDcmVhdGUodGhpcykucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBVcHBlcjogcGlwZWxpbmUucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdXBwZXJUb0xvd2VyQ3IuZ2V0QXR0KCdMb3dlcicpO1xuICB9XG59XG4iXX0=
|
package/lib/fargate/datadog.js
CHANGED
|
@@ -188,7 +188,7 @@ function determineSeparator(containerType) {
|
|
|
188
188
|
}
|
|
189
189
|
function addFireLensLogRouter(props) {
|
|
190
190
|
return props.taskDefinition.addFirelensLogRouter('firelens-log-router', {
|
|
191
|
-
image: ecs.ContainerImage.fromRegistry('public.ecr.aws/aws-observability/aws-for-fluent-bit:
|
|
191
|
+
image: ecs.ContainerImage.fromRegistry('public.ecr.aws/aws-observability/aws-for-fluent-bit:stable'),
|
|
192
192
|
firelensConfig: {
|
|
193
193
|
type: ecs.FirelensLogRouterType.FLUENTBIT,
|
|
194
194
|
options: {
|
|
@@ -292,4 +292,4 @@ function ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService
|
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
294
|
exports.ensureLoggingAndMonitoringAreReadyBeforeServiceStarts = ensureLoggingAndMonitoringAreReadyBeforeServiceStarts;
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL2RhdGFkb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQ2xELDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBRzdDLCtEQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQWEsT0FBTztJQUVYLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FDbkQsS0FBZ0IsRUFDaEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixXQUFtQixFQUNuQixRQUFnQixFQUNoQixjQUFzQixFQUN0QixjQUFrRDtRQUVsRCxPQUFPLHVDQUF1QyxDQUFDO1lBQzdDLEtBQUs7WUFDTCxLQUFLO1lBQ0wsV0FBVztZQUNYLE9BQU87WUFDUCxXQUFXO1lBQ1gsUUFBUTtZQUNSLGNBQWM7WUFDZCxjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsV0FBbUIsRUFBRSxPQUFlO1FBQ3RGLE9BQU8sc0JBQXNCLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDN0IsS0FBZ0IsRUFDaEIsY0FBa0MsRUFDbEMsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixzQkFBNEMsRUFDNUMsV0FBbUIsRUFDbkIsa0JBQXNDLEVBQ3RDLHVCQUFpQyxFQUNqQyxHQUFXLEVBQ1gsY0FBc0IsRUFDdEIsU0FBa0IsRUFDbEIsWUFBb0IsRUFDcEIsY0FBa0Q7UUFHbEQsT0FBTyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLO1lBQ0wsY0FBYztZQUNkLFdBQVc7WUFDWCxRQUFRO1lBQ1IsY0FBYztZQUNkLEtBQUs7WUFDTCxXQUFX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SSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUMxRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO2FBQ3ZDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLFlBQVksRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDakMsUUFBUSxFQUFFLHdCQUF3QjthQUNuQyxDQUFDLENBQUM7S0FDTjtBQUNILENBQUM7QUE5RkQsb0NBOEZDO0FBRUQsU0FBZ0IscURBQXFELENBQUMsaUJBQW9DOztJQUV4RyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsaUNBQWlDO1FBQzlELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsT0FBTztLQUNwRCxDQUFDLENBQUM7SUFFSCxJQUFJLGlCQUFpQixDQUFDLDRCQUE0QixFQUFFO1FBQ2xELGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixDQUFDO1lBQ3BFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7WUFDekQsU0FBUyxFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLO1NBQ2xELENBQUMsQ0FBQztRQUVILElBQUksT0FBQSxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsTUFBSyxhQUFhLEVBQUU7WUFDcEcsaUJBQWlCLENBQUMsaUNBQWlDLENBQUMsd0JBQXdCLENBQUM7Z0JBQzNFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7Z0JBQ3pELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsS0FBSzthQUNsRCxDQUFDLENBQUM7U0FDSjtLQUNGO0FBQ0gsQ0FBQztBQXBCRCxzSEFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgRHVyYXRpb24sIEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFEb2dMb2dnaW5nTW9kZSwgUmlvRmFyZ2F0ZVNlcnZpY2UgfSBmcm9tICcuL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIE1vdmVkIG91dCBzdGF0aWMgbWV0aG9kcyBhbmQgaW1wb3JvdmVkIHNpZ25hdHVyZS4gVXNlIG5hbWVkIGltcG9ydCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YURvZyB7XG5cbiAgcHVibGljIHN0YXRpYyBnZXRGYXJnYXRlQ29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkLFxuICApOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZUNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzKHtcbiAgICAgIHNjb3BlLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBhY2NvdW50TmFtZSxcbiAgICAgIHRlYW1OYW1lLFxuICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICBhZGRpdGlvbmFsVGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhzdGFnZTogc3RyaW5nLCBzZXJ2aWNlTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyh7IHN0YWdlLCBzZXJ2aWNlTmFtZSwgdmVyc2lvbiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYWRkRGF0YWRvZ1NpZGVjYXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIHN0YWdlOiBzdHJpbmcsXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXIsXG4gICAgZGF0YWRvZ1NpdGU6IHN0cmluZyxcbiAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZSxcbiAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgICBlc3NlbnRpYWw6IGJvb2xlYW4sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Db250YWluZXJEZWZpbml0aW9uIHtcblxuICAgIHJldHVybiBhZGREYXRhZG9nU2lkZWNhcih7XG4gICAgICBzY29wZSxcbiAgICAgIHRhc2tEZWZpbml0aW9uLFxuICAgICAgYWNjb3VudE5hbWUsXG4gICAgICB0ZWFtTmFtZSxcbiAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLFxuICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICBkYXRhZG9nTG9nZ2luZ01vZGUsXG4gICAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZSxcbiAgICAgIGNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCLFxuICAgICAgZXNzZW50aWFsLFxuICAgICAgY29udGFpbmVyVGFnLFxuICAgICAgYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFkZEZpcmVMZW5zTG9nUm91dGVyKFxuICAgIHRhc2tEZWZpbml0aW9uOiBlY3MuVGFza0RlZmluaXRpb24sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgKTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuICAgIHJldHVybiBhZGRGaXJlTGVuc0xvZ1JvdXRlcih7IHRhc2tEZWZpbml0aW9uLCBjcHUsIG1lbW9yeUxpbWl0TWlCIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzZXR1cExvZ2dpbmcoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgdGVhbUlkZW50aWZpZXI6IHN0cmluZyxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGRhdGFkb2dTaXRlOiBzdHJpbmcsXG4gICAgY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Mb2dEcml2ZXIge1xuXG4gICAgcmV0dXJuIHNldHVwTG9nZ2luZyh7XG4gICAgICBzY29wZSxcbiAgICAgIGFjY291bnROYW1lLFxuICAgICAgdGVhbU5hbWUsXG4gICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgIHN0YWdlLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcixcbiAgICAgIGRhdGFkb2dMb2dnaW5nTW9kZSxcbiAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgY29udGFpbmVyVHlwZSxcbiAgICAgIGFkZGl0aW9uYWxUYWdzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpIHtcbiAgICBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZhcmdhdGVDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkO1xufSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcblxuICByZXR1cm4ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgRERfRU5WOiBwcm9wcy5zdGFnZSxcbiAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICBERF9WRVJTSU9OOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIEFQTSBhbmQgdHJhY2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL3RyYWNpbmcvc2V0dXBfb3ZlcnZpZXcvc2V0dXAvamF2YS8/dGFiPWNvbnRhaW5lcnNcbiAgICBERF9MT0dTX0lOSkVDVElPTjogJ3RydWUnLFxuICAgIEREX1NFUlZJQ0VfTUFQUElORzogZ2V0QXBtU2VydmljZU1hcHBpbmdFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHMuc2VydmljZU5hbWUpLFxuICAgIEREX1RBR1M6IGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScsXG4gICAgICBhY2NvdW50SWQsXG4gICAgICByZWdpb24sXG4gICAgfSksXG4gICAgRERfVFJBQ0VfU0FNUExFX1JBVEU6ICcxLjAnLCAvLyBzZWUgaHR0cHM6Ly9kZHRyYWNlLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb25maWd1cmF0aW9uLmh0bWxcbiAgfTtcbn1cblxuLy8gd2UgYWRkIGFsbCBwb3NzaWJsZSBzZXJ2aWNlIG1hcHBpbmdzIGhlcmUgZXZlbiBpZiBub3QgdXNlZCBpbiBhIHBhcnRpY3VsYXIgc2VydmljZSB0byBnZXQgZ2xvYmFsbHkgdW5pcXVlIG5hbWVzXG5mdW5jdGlvbiBnZXRBcG1TZXJ2aWNlTWFwcGluZ0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblxuICBjb25zdCBzZXJ2aWNlTWFwcGluZyA9IHtcbiAgICAnZGF0YWJhc2UnOiBgJHtzZXJ2aWNlTmFtZX0tYXVyb3JhYCxcbiAgICAnamF2YS1hd3Mtc2RrJzogYCR7c2VydmljZU5hbWV9LWF3cy1zZGtgLFxuICAgICdrYWZrYSc6IGAke3NlcnZpY2VOYW1lfS1rYWZrYWAsXG4gICAgJ215c3FsJzogYCR7c2VydmljZU5hbWV9LWF1cm9yYWAsXG4gICAgJ3JlZGlzJzogYCR7c2VydmljZU5hbWV9LXJlZGlzYCxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc2VydmljZU1hcHBpbmcpXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbignLCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhwcm9wczoge3N0YWdlOiBzdHJpbmc7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZ30pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgcmV0dXJuIHtcbiAgICAnY29tLmRhdGFkb2docS50YWdzLmVudic6IHByb3BzLnN0YWdlLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3Muc2VydmljZSc6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3MudmVyc2lvbic6IHByb3BzLnZlcnNpb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXRhZG9nU2lkZWNhcihwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZTtcbiAgYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmU6IHN0cmluZ1tdO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbiAgZXNzZW50aWFsOiBib29sZWFuO1xuICBjb250YWluZXJUYWc6IHN0cmluZztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcbiAgY29uc3QgZGF0YWRvZ1NpZGVjYXIgPSBwcm9wcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoJ2RhdGFkb2ctYWdlbnQnLCB7XG4gICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6JHtwcm9wcy5jb250YWluZXJUYWd9YCksXG4gICAgbG9nZ2luZzogc2V0dXBMb2dnaW5nKHsgLi4ucHJvcHMsIGNvbnRhaW5lclR5cGU6ICdkYXRhZG9nLXNpZGVjYXInIH0pLFxuICAgIGNwdTogcHJvcHMuY3B1LFxuICAgIG1lbW9yeUxpbWl0TWlCOiBwcm9wcy5tZW1vcnlMaW1pdE1pQixcbiAgICBlbnZpcm9ubWVudDoge1xuICAgICAgLy8gdW5pZmllZCB0YWdnaW5nLCBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vZ2V0dGluZ19zdGFydGVkL3RhZ2dpbmcvdW5pZmllZF9zZXJ2aWNlX3RhZ2dpbmcvP3RhYj1lY3NcbiAgICAgIEREX0VOVjogcHJvcHMuc3RhZ2UsXG4gICAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIEREX1ZFUlNJT046IHByb3BzLnZlcnNpb24sXG4gICAgICAvLyBBUE0gYW5kIHRyYWNpbmcgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2FnZW50L2RvY2tlci9hcG0vP3RhYj1saW51eFxuICAgICAgRERfQVBNX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgIEREX0FQTV9JR05PUkVfUkVTT1VSQ0VTOiBwcm9wcy5hcG1HZXRSZXNvdXJjZXNUb0lnbm9yZVxuICAgICAgICAubWFwKChhcG1HZXRSZXNvdXJjZVRvSWdub3JlKSA9PiBgR0VUICR7YXBtR2V0UmVzb3VyY2VUb0lnbm9yZX1gKVxuICAgICAgICAuam9pbignLCcpLFxuICAgICAgLy8gZ2VuZXJhbCBzZXR0aW5nc1xuICAgICAgRERfU0lURTogcHJvcHMuZGF0YWRvZ1NpdGUsXG4gICAgICBERF9UQUdTOiBnZXRUYWdzRW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlKHsgLi4ucHJvcHMsIGFjY291bnRJZCwgcmVnaW9uLCBjb250YWluZXJUeXBlOiAnZGF0YWRvZy1zaWRlY2FyJyB9KSxcbiAgICAgIEVDU19GQVJHQVRFOiAndHJ1ZScsXG4gICAgICBERF9DT0xMRUNUX0dDRV9UQUdTOiAnZmFsc2UnLFxuICAgIH0sXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctYWdlbnQvYmxvYi9tYXN0ZXIvRG9ja2VyZmlsZXMvYWdlbnQvYW1kNjQvRG9ja2VyZmlsZSNMMTcxLUwxNzJcbiAgICBoZWFsdGhDaGVjazoge1xuICAgICAgc3RhcnRQZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgcmV0cmllczogMixcbiAgICAgIGNvbW1hbmQ6IFsnQ01ELVNIRUxMJywgJy9wcm9iZS5zaCddLFxuICAgIH0sXG4gICAgc2VjcmV0czoge1xuICAgICAgRERfQVBJX0tFWTogZWNzLlNlY3JldC5mcm9tU3NtUGFyYW1ldGVyKHByb3BzLmRhdGFkb2dBcGlLZXlQYXJhbWV0ZXIpLFxuICAgIH0sXG4gICAgZXNzZW50aWFsOiBwcm9wcy5lc3NlbnRpYWwsXG4gIH0pO1xuXG4gIGRhdGFkb2dTaWRlY2FyLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgY29udGFpbmVyUG9ydDogODEyNSxcbiAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlVEUCxcbiAgfSk7XG5cbiAgZGF0YWRvZ1NpZGVjYXIuYWRkUG9ydE1hcHBpbmdzKHtcbiAgICBjb250YWluZXJQb3J0OiA4MTI2LFxuICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICB9KTtcblxuICByZXR1cm4gZGF0YWRvZ1NpZGVjYXI7XG59XG5cbmZ1bmN0aW9uIGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHM6IHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnRhaW5lclR5cGU6ICdzZXJ2aWNlJyB8ICdkYXRhZG9nLXNpZGVjYXInIHwgJ2ZsdWVudC1iaXQnO1xuICBhZGRpdGlvbmFsVGFnczogeyBbazogc3RyaW5nXTogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbn0pOiBzdHJpbmcge1xuXG4gIGNvbnN0IHNlcGFyYXRvciA9IGRldGVybWluZVNlcGFyYXRvcihwcm9wcy5jb250YWluZXJUeXBlKTtcblxuICBjb25zdCB0YWdzID0ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZ1xuICAgIC8vIG92ZXJyaWRkZW4gYnkgZGVkaWNhdGVkIHNldHRpbmdzIChlbnZpcm9ubWVudCB2YXJpYWJsZXMvdGFncylcbiAgICAvLyBkdXBsaWNhdGVkIGhlcmUgdG8gZW5zdXJlIHRoZXkgYXJlIHVzZWQgKGFuZCBzb21ldGltZXMsIG5vdCBhbGwgdGhyZWUgdmFsdWVzIGFyZSBzdXBwb3J0ZWQpXG4gICAgZW52OiBwcm9wcy5zdGFnZSxcbiAgICBzZXJ2aWNlOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICB2ZXJzaW9uOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIGFjY291bnQvdGVhbSBzcGVjaWZpYyBwYXJ0c1xuICAgIGFjY291bnRfaWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICBhY2NvdW50X25hbWU6IHByb3BzLmFjY291bnROYW1lLFxuICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgIHRlYW06IHByb3BzLnRlYW1OYW1lLFxuICAgIHRlYW1faWRlbnRpZmllcjogcHJvcHMudGVhbUlkZW50aWZpZXIsXG4gIH07XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh7IC4uLnRhZ3MsIC4uLnByb3BzLmFkZGl0aW9uYWxUYWdzIH0pXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbihzZXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVTZXBhcmF0b3IoY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicgfCAnZmx1ZW50LWJpdCcpIHtcbiAgaWYgKGNvbnRhaW5lclR5cGUgPT09ICdkYXRhZG9nLXNpZGVjYXInKSB7XG4gICAgcmV0dXJuICcgJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJywnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaXJlTGVuc0xvZ1JvdXRlcihwcm9wczoge1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbn0pOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG5cbiAgcmV0dXJuIHByb3BzLnRhc2tEZWZpbml0aW9uLmFkZEZpcmVsZW5zTG9nUm91dGVyKCdmaXJlbGVucy1sb2ctcm91dGVyJywge1xuICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3MtZm9yLWZsdWVudC1iaXQ6bGF0ZXN0JyksXG4gICAgZmlyZWxlbnNDb25maWc6IHtcbiAgICAgIHR5cGU6IGVjcy5GaXJlbGVuc0xvZ1JvdXRlclR5cGUuRkxVRU5UQklULFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjb25maWdGaWxlVHlwZTogZWNzLkZpcmVsZW5zQ29uZmlnRmlsZVR5cGUuRklMRSxcbiAgICAgICAgY29uZmlnRmlsZVZhbHVlOiAnL2ZsdWVudC1iaXQvY29uZmlncy9wYXJzZS1qc29uLmNvbmYnLFxuICAgICAgICBlbmFibGVFQ1NMb2dNZXRhZGF0YTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcHU6IHByb3BzLmNwdSxcbiAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMubWVtb3J5TGltaXRNaUIsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBMb2dnaW5nKHByb3BzOiB7XG4gIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIHN0YWdlOiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXI7XG4gIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBjb250YWluZXJUeXBlOiAnc2VydmljZScgfCAnZGF0YWRvZy1zaWRlY2FyJztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkxvZ0RyaXZlciB7XG5cbiAgbGV0IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICBsZXQgbG9nR3JvdXBJZDogc3RyaW5nO1xuICBsZXQgY29udGFpbmVyVHlwZUNhbWVsQ2FzZTtcblxuICBzd2l0Y2ggKHByb3BzLmNvbnRhaW5lclR5cGUpIHtcblxuICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvclNlcnZpY2UnO1xuICAgICAgbG9nR3JvdXBOYW1lID0gcHJvcHMuc2VydmljZU5hbWU7XG4gICAgICBjb250YWluZXJUeXBlQ2FtZWxDYXNlID0gJ1NlcnZpY2UnO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkYXRhZG9nLXNpZGVjYXInOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvckRhdGFkb2dTaWRlY2FyJztcbiAgICAgIGxvZ0dyb3VwTmFtZSA9IGAke3Byb3BzLnNlcnZpY2VOYW1lfS0ke3Byb3BzLmNvbnRhaW5lclR5cGV9YDtcbiAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRJZCwgcmVnaW9uIH0gPSBTdGFjay5vZihwcm9wcy5zY29wZSk7XG5cbiAgc3dpdGNoIChwcm9wcy5kYXRhZG9nTG9nZ2luZ01vZGUpIHtcblxuICAgIGNhc2UgRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM6XG4gICAgICAvLyBUT0RPIGNhbiB3ZSB1c2UgYHNlY3JldE9wdGlvbnNgIGhlcmUgYXMgd2VsbCwgZS5nLiBhcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWVjcy1maXJlbGVucy1leGFtcGxlcy9ibG9iL21haW5saW5lL2V4YW1wbGVzL2ZsdWVudC1iaXQvZGF0YWRvZy90YXNrLWRlZmluaXRpb24uanNvbiNMMzMtTDM2XG4gICAgICAvLyBQcm9iYWJseSBub3QsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzgxNzRcbiAgICAgIHJldHVybiBlY3MuTG9nRHJpdmVycy5maXJlbGVucyh7XG4gICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZmx1ZW50Yml0LyNjb25maWd1cmF0aW9uLXBhcmFtZXRlcnNcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIE5hbWU6ICdkYXRhZG9nJyxcbiAgICAgICAgICBNYXRjaDogJyonLFxuICAgICAgICAgIEhvc3Q6IGBodHRwLWludGFrZS5sb2dzLiR7cHJvcHMuZGF0YWRvZ1NpdGV9YCxcbiAgICAgICAgICBUTFM6ICdvbicsXG4gICAgICAgICAgYXBpa2V5OiBwcm9wcy5kYXRhZG9nQXBpS2V5UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICAgICAgIGNvbXByZXNzOiAnZ3ppcCcsXG4gICAgICAgICAgZGRfc2VydmljZTogbG9nR3JvdXBOYW1lLFxuICAgICAgICAgIGRkX3NvdXJjZTogJ3Jpby1mYXJnYXRlJyxcbiAgICAgICAgICBkZF9tZXNzYWdlX2tleTogJ2xvZycsXG4gICAgICAgICAgZGRfdGFnczogZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZSh7IC4uLnByb3BzLCBhY2NvdW50SWQsIHJlZ2lvbiwgY29udGFpbmVyVHlwZTogJ2ZsdWVudC1iaXQnIH0pLFxuICAgICAgICAgIHByb3ZpZGVyOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuRk9SV0FSREVSX0xBTUJEQTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYUFybiA9IEZuLmltcG9ydFZhbHVlKCdjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuJyk7XG4gICAgICBjb25zdCBjZm5QZXJtaXNzaW9uID0gbmV3IGxhbWJkYS5DZm5QZXJtaXNzaW9uKHByb3BzLnNjb3BlLCBgTG9nRm9yd2FyZGVyUGVybWlzc2lvbiR7Y29udGFpbmVyVHlwZUNhbWVsQ2FzZX1gLCB7XG4gICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICBwcmluY2lwYWw6IGBsb2dzLiR7cmVnaW9ufS5hbWF6b25hd3MuY29tYCxcbiAgICAgICAgc291cmNlQXJuOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBBcm4sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNmblN1YnNjcmlwdGlvbkZpbHRlciA9IG5ldyBsb2dzLkNmblN1YnNjcmlwdGlvbkZpbHRlcihcbiAgICAgICAgcHJvcHMuc2NvcGUsXG4gICAgICAgIGBMb2dGb3J3YXJkZXJTdWJzY3JpcHRpb25GaWx0ZXIke2NvbnRhaW5lclR5cGVDYW1lbENhc2V9YCxcbiAgICAgICAge1xuICAgICAgICAgIGRlc3RpbmF0aW9uQXJuOiBsb2dGb3J3YXJkZXJMYW1iZGFBcm4sXG4gICAgICAgICAgZmlsdGVyUGF0dGVybjogJycsXG4gICAgICAgICAgbG9nR3JvdXBOYW1lOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBOYW1lLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNmblN1YnNjcmlwdGlvbkZpbHRlci5hZGREZXBlbmRzT24oY2ZuUGVybWlzc2lvbik7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSxcbiAgICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpOiB2b2lkIHtcblxuICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgIGNvbnRhaW5lcjogcmlvRmFyZ2F0ZVNlcnZpY2UuZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uSEVBTFRIWSxcbiAgfSk7XG5cbiAgaWYgKHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24pIHtcbiAgICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgY29udGFpbmVyOiByaW9GYXJnYXRlU2VydmljZS5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgICAgY29uZGl0aW9uOiBlY3MuQ29udGFpbmVyRGVwZW5kZW5jeUNvbmRpdGlvbi5TVEFSVCxcbiAgICB9KTtcblxuICAgIGlmIChyaW9GYXJnYXRlU2VydmljZS5kYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb24ubG9nRHJpdmVyQ29uZmlnPy5sb2dEcml2ZXIgPT09ICdhd3NmaXJlbGVucycpIHtcbiAgICAgIHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uU1RBUlQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL2RhdGFkb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQ2xELDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBRzdDLCtEQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQWEsT0FBTztJQUVYLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FDbkQsS0FBZ0IsRUFDaEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixXQUFtQixFQUNuQixRQUFnQixFQUNoQixjQUFzQixFQUN0QixjQUFrRDtRQUVsRCxPQUFPLHVDQUF1QyxDQUFDO1lBQzdDLEtBQUs7WUFDTCxLQUFLO1lBQ0wsV0FBVztZQUNYLE9BQU87WUFDUCxXQUFXO1lBQ1gsUUFBUTtZQUNSLGNBQWM7WUFDZCxjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsV0FBbUIsRUFBRSxPQUFlO1FBQ3RGLE9BQU8sc0JBQXNCLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDN0IsS0FBZ0IsRUFDaEIsY0FBa0MsRUFDbEMsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixzQkFBNEMsRUFDNUMsV0FBbUIsRUFDbkIsa0JBQXNDLEVBQ3RDLHVCQUFpQyxFQUNqQyxHQUFXLEVBQ1gsY0FBc0IsRUFDdEIsU0FBa0IsRUFDbEIsWUFBb0IsRUFDcEIsY0FBa0Q7UUFHbEQsT0FBTyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLO1lBQ0wsY0FBYztZQUNkLFdBQVc7WUFDWCxRQUFRO1lBQ1IsY0FBYztZQUNkLEtBQUs7WUFDTCxXQUFX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SSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUMxRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO2FBQ3ZDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLFlBQVksRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDakMsUUFBUSxFQUFFLHdCQUF3QjthQUNuQyxDQUFDLENBQUM7S0FDTjtBQUNILENBQUM7QUE5RkQsb0NBOEZDO0FBRUQsU0FBZ0IscURBQXFELENBQUMsaUJBQW9DOztJQUV4RyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsaUNBQWlDO1FBQzlELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsT0FBTztLQUNwRCxDQUFDLENBQUM7SUFFSCxJQUFJLGlCQUFpQixDQUFDLDRCQUE0QixFQUFFO1FBQ2xELGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixDQUFDO1lBQ3BFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7WUFDekQsU0FBUyxFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLO1NBQ2xELENBQUMsQ0FBQztRQUVILElBQUksT0FBQSxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsTUFBSyxhQUFhLEVBQUU7WUFDcEcsaUJBQWlCLENBQUMsaUNBQWlDLENBQUMsd0JBQXdCLENBQUM7Z0JBQzNFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7Z0JBQ3pELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsS0FBSzthQUNsRCxDQUFDLENBQUM7U0FDSjtLQUNGO0FBQ0gsQ0FBQztBQXBCRCxzSEFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgRHVyYXRpb24sIEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFEb2dMb2dnaW5nTW9kZSwgUmlvRmFyZ2F0ZVNlcnZpY2UgfSBmcm9tICcuL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIE1vdmVkIG91dCBzdGF0aWMgbWV0aG9kcyBhbmQgaW1wb3JvdmVkIHNpZ25hdHVyZS4gVXNlIG5hbWVkIGltcG9ydCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YURvZyB7XG5cbiAgcHVibGljIHN0YXRpYyBnZXRGYXJnYXRlQ29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkLFxuICApOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZUNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzKHtcbiAgICAgIHNjb3BlLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBhY2NvdW50TmFtZSxcbiAgICAgIHRlYW1OYW1lLFxuICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICBhZGRpdGlvbmFsVGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhzdGFnZTogc3RyaW5nLCBzZXJ2aWNlTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyh7IHN0YWdlLCBzZXJ2aWNlTmFtZSwgdmVyc2lvbiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYWRkRGF0YWRvZ1NpZGVjYXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIHN0YWdlOiBzdHJpbmcsXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXIsXG4gICAgZGF0YWRvZ1NpdGU6IHN0cmluZyxcbiAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZSxcbiAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgICBlc3NlbnRpYWw6IGJvb2xlYW4sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Db250YWluZXJEZWZpbml0aW9uIHtcblxuICAgIHJldHVybiBhZGREYXRhZG9nU2lkZWNhcih7XG4gICAgICBzY29wZSxcbiAgICAgIHRhc2tEZWZpbml0aW9uLFxuICAgICAgYWNjb3VudE5hbWUsXG4gICAgICB0ZWFtTmFtZSxcbiAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLFxuICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICBkYXRhZG9nTG9nZ2luZ01vZGUsXG4gICAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZSxcbiAgICAgIGNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCLFxuICAgICAgZXNzZW50aWFsLFxuICAgICAgY29udGFpbmVyVGFnLFxuICAgICAgYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFkZEZpcmVMZW5zTG9nUm91dGVyKFxuICAgIHRhc2tEZWZpbml0aW9uOiBlY3MuVGFza0RlZmluaXRpb24sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgKTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuICAgIHJldHVybiBhZGRGaXJlTGVuc0xvZ1JvdXRlcih7IHRhc2tEZWZpbml0aW9uLCBjcHUsIG1lbW9yeUxpbWl0TWlCIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzZXR1cExvZ2dpbmcoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgdGVhbUlkZW50aWZpZXI6IHN0cmluZyxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGRhdGFkb2dTaXRlOiBzdHJpbmcsXG4gICAgY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Mb2dEcml2ZXIge1xuXG4gICAgcmV0dXJuIHNldHVwTG9nZ2luZyh7XG4gICAgICBzY29wZSxcbiAgICAgIGFjY291bnROYW1lLFxuICAgICAgdGVhbU5hbWUsXG4gICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgIHN0YWdlLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcixcbiAgICAgIGRhdGFkb2dMb2dnaW5nTW9kZSxcbiAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgY29udGFpbmVyVHlwZSxcbiAgICAgIGFkZGl0aW9uYWxUYWdzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpIHtcbiAgICBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZhcmdhdGVDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkO1xufSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcblxuICByZXR1cm4ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgRERfRU5WOiBwcm9wcy5zdGFnZSxcbiAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICBERF9WRVJTSU9OOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIEFQTSBhbmQgdHJhY2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL3RyYWNpbmcvc2V0dXBfb3ZlcnZpZXcvc2V0dXAvamF2YS8/dGFiPWNvbnRhaW5lcnNcbiAgICBERF9MT0dTX0lOSkVDVElPTjogJ3RydWUnLFxuICAgIEREX1NFUlZJQ0VfTUFQUElORzogZ2V0QXBtU2VydmljZU1hcHBpbmdFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHMuc2VydmljZU5hbWUpLFxuICAgIEREX1RBR1M6IGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScsXG4gICAgICBhY2NvdW50SWQsXG4gICAgICByZWdpb24sXG4gICAgfSksXG4gICAgRERfVFJBQ0VfU0FNUExFX1JBVEU6ICcxLjAnLCAvLyBzZWUgaHR0cHM6Ly9kZHRyYWNlLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb25maWd1cmF0aW9uLmh0bWxcbiAgfTtcbn1cblxuLy8gd2UgYWRkIGFsbCBwb3NzaWJsZSBzZXJ2aWNlIG1hcHBpbmdzIGhlcmUgZXZlbiBpZiBub3QgdXNlZCBpbiBhIHBhcnRpY3VsYXIgc2VydmljZSB0byBnZXQgZ2xvYmFsbHkgdW5pcXVlIG5hbWVzXG5mdW5jdGlvbiBnZXRBcG1TZXJ2aWNlTWFwcGluZ0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblxuICBjb25zdCBzZXJ2aWNlTWFwcGluZyA9IHtcbiAgICAnZGF0YWJhc2UnOiBgJHtzZXJ2aWNlTmFtZX0tYXVyb3JhYCxcbiAgICAnamF2YS1hd3Mtc2RrJzogYCR7c2VydmljZU5hbWV9LWF3cy1zZGtgLFxuICAgICdrYWZrYSc6IGAke3NlcnZpY2VOYW1lfS1rYWZrYWAsXG4gICAgJ215c3FsJzogYCR7c2VydmljZU5hbWV9LWF1cm9yYWAsXG4gICAgJ3JlZGlzJzogYCR7c2VydmljZU5hbWV9LXJlZGlzYCxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc2VydmljZU1hcHBpbmcpXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbignLCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhwcm9wczoge3N0YWdlOiBzdHJpbmc7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZ30pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgcmV0dXJuIHtcbiAgICAnY29tLmRhdGFkb2docS50YWdzLmVudic6IHByb3BzLnN0YWdlLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3Muc2VydmljZSc6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3MudmVyc2lvbic6IHByb3BzLnZlcnNpb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXRhZG9nU2lkZWNhcihwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZTtcbiAgYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmU6IHN0cmluZ1tdO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbiAgZXNzZW50aWFsOiBib29sZWFuO1xuICBjb250YWluZXJUYWc6IHN0cmluZztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcbiAgY29uc3QgZGF0YWRvZ1NpZGVjYXIgPSBwcm9wcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoJ2RhdGFkb2ctYWdlbnQnLCB7XG4gICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6JHtwcm9wcy5jb250YWluZXJUYWd9YCksXG4gICAgbG9nZ2luZzogc2V0dXBMb2dnaW5nKHsgLi4ucHJvcHMsIGNvbnRhaW5lclR5cGU6ICdkYXRhZG9nLXNpZGVjYXInIH0pLFxuICAgIGNwdTogcHJvcHMuY3B1LFxuICAgIG1lbW9yeUxpbWl0TWlCOiBwcm9wcy5tZW1vcnlMaW1pdE1pQixcbiAgICBlbnZpcm9ubWVudDoge1xuICAgICAgLy8gdW5pZmllZCB0YWdnaW5nLCBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vZ2V0dGluZ19zdGFydGVkL3RhZ2dpbmcvdW5pZmllZF9zZXJ2aWNlX3RhZ2dpbmcvP3RhYj1lY3NcbiAgICAgIEREX0VOVjogcHJvcHMuc3RhZ2UsXG4gICAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIEREX1ZFUlNJT046IHByb3BzLnZlcnNpb24sXG4gICAgICAvLyBBUE0gYW5kIHRyYWNpbmcgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2FnZW50L2RvY2tlci9hcG0vP3RhYj1saW51eFxuICAgICAgRERfQVBNX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgIEREX0FQTV9JR05PUkVfUkVTT1VSQ0VTOiBwcm9wcy5hcG1HZXRSZXNvdXJjZXNUb0lnbm9yZVxuICAgICAgICAubWFwKChhcG1HZXRSZXNvdXJjZVRvSWdub3JlKSA9PiBgR0VUICR7YXBtR2V0UmVzb3VyY2VUb0lnbm9yZX1gKVxuICAgICAgICAuam9pbignLCcpLFxuICAgICAgLy8gZ2VuZXJhbCBzZXR0aW5nc1xuICAgICAgRERfU0lURTogcHJvcHMuZGF0YWRvZ1NpdGUsXG4gICAgICBERF9UQUdTOiBnZXRUYWdzRW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlKHsgLi4ucHJvcHMsIGFjY291bnRJZCwgcmVnaW9uLCBjb250YWluZXJUeXBlOiAnZGF0YWRvZy1zaWRlY2FyJyB9KSxcbiAgICAgIEVDU19GQVJHQVRFOiAndHJ1ZScsXG4gICAgICBERF9DT0xMRUNUX0dDRV9UQUdTOiAnZmFsc2UnLFxuICAgIH0sXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctYWdlbnQvYmxvYi9tYXN0ZXIvRG9ja2VyZmlsZXMvYWdlbnQvYW1kNjQvRG9ja2VyZmlsZSNMMTcxLUwxNzJcbiAgICBoZWFsdGhDaGVjazoge1xuICAgICAgc3RhcnRQZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgcmV0cmllczogMixcbiAgICAgIGNvbW1hbmQ6IFsnQ01ELVNIRUxMJywgJy9wcm9iZS5zaCddLFxuICAgIH0sXG4gICAgc2VjcmV0czoge1xuICAgICAgRERfQVBJX0tFWTogZWNzLlNlY3JldC5mcm9tU3NtUGFyYW1ldGVyKHByb3BzLmRhdGFkb2dBcGlLZXlQYXJhbWV0ZXIpLFxuICAgIH0sXG4gICAgZXNzZW50aWFsOiBwcm9wcy5lc3NlbnRpYWwsXG4gIH0pO1xuXG4gIGRhdGFkb2dTaWRlY2FyLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgY29udGFpbmVyUG9ydDogODEyNSxcbiAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlVEUCxcbiAgfSk7XG5cbiAgZGF0YWRvZ1NpZGVjYXIuYWRkUG9ydE1hcHBpbmdzKHtcbiAgICBjb250YWluZXJQb3J0OiA4MTI2LFxuICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICB9KTtcblxuICByZXR1cm4gZGF0YWRvZ1NpZGVjYXI7XG59XG5cbmZ1bmN0aW9uIGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHM6IHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnRhaW5lclR5cGU6ICdzZXJ2aWNlJyB8ICdkYXRhZG9nLXNpZGVjYXInIHwgJ2ZsdWVudC1iaXQnO1xuICBhZGRpdGlvbmFsVGFnczogeyBbazogc3RyaW5nXTogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbn0pOiBzdHJpbmcge1xuXG4gIGNvbnN0IHNlcGFyYXRvciA9IGRldGVybWluZVNlcGFyYXRvcihwcm9wcy5jb250YWluZXJUeXBlKTtcblxuICBjb25zdCB0YWdzID0ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZ1xuICAgIC8vIG92ZXJyaWRkZW4gYnkgZGVkaWNhdGVkIHNldHRpbmdzIChlbnZpcm9ubWVudCB2YXJpYWJsZXMvdGFncylcbiAgICAvLyBkdXBsaWNhdGVkIGhlcmUgdG8gZW5zdXJlIHRoZXkgYXJlIHVzZWQgKGFuZCBzb21ldGltZXMsIG5vdCBhbGwgdGhyZWUgdmFsdWVzIGFyZSBzdXBwb3J0ZWQpXG4gICAgZW52OiBwcm9wcy5zdGFnZSxcbiAgICBzZXJ2aWNlOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICB2ZXJzaW9uOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIGFjY291bnQvdGVhbSBzcGVjaWZpYyBwYXJ0c1xuICAgIGFjY291bnRfaWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICBhY2NvdW50X25hbWU6IHByb3BzLmFjY291bnROYW1lLFxuICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgIHRlYW06IHByb3BzLnRlYW1OYW1lLFxuICAgIHRlYW1faWRlbnRpZmllcjogcHJvcHMudGVhbUlkZW50aWZpZXIsXG4gIH07XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh7IC4uLnRhZ3MsIC4uLnByb3BzLmFkZGl0aW9uYWxUYWdzIH0pXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbihzZXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVTZXBhcmF0b3IoY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicgfCAnZmx1ZW50LWJpdCcpIHtcbiAgaWYgKGNvbnRhaW5lclR5cGUgPT09ICdkYXRhZG9nLXNpZGVjYXInKSB7XG4gICAgcmV0dXJuICcgJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJywnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaXJlTGVuc0xvZ1JvdXRlcihwcm9wczoge1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbn0pOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG5cbiAgcmV0dXJuIHByb3BzLnRhc2tEZWZpbml0aW9uLmFkZEZpcmVsZW5zTG9nUm91dGVyKCdmaXJlbGVucy1sb2ctcm91dGVyJywge1xuICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3MtZm9yLWZsdWVudC1iaXQ6c3RhYmxlJyksXG4gICAgZmlyZWxlbnNDb25maWc6IHtcbiAgICAgIHR5cGU6IGVjcy5GaXJlbGVuc0xvZ1JvdXRlclR5cGUuRkxVRU5UQklULFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjb25maWdGaWxlVHlwZTogZWNzLkZpcmVsZW5zQ29uZmlnRmlsZVR5cGUuRklMRSxcbiAgICAgICAgY29uZmlnRmlsZVZhbHVlOiAnL2ZsdWVudC1iaXQvY29uZmlncy9wYXJzZS1qc29uLmNvbmYnLFxuICAgICAgICBlbmFibGVFQ1NMb2dNZXRhZGF0YTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcHU6IHByb3BzLmNwdSxcbiAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMubWVtb3J5TGltaXRNaUIsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBMb2dnaW5nKHByb3BzOiB7XG4gIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIHN0YWdlOiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXI7XG4gIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBjb250YWluZXJUeXBlOiAnc2VydmljZScgfCAnZGF0YWRvZy1zaWRlY2FyJztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkxvZ0RyaXZlciB7XG5cbiAgbGV0IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICBsZXQgbG9nR3JvdXBJZDogc3RyaW5nO1xuICBsZXQgY29udGFpbmVyVHlwZUNhbWVsQ2FzZTtcblxuICBzd2l0Y2ggKHByb3BzLmNvbnRhaW5lclR5cGUpIHtcblxuICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvclNlcnZpY2UnO1xuICAgICAgbG9nR3JvdXBOYW1lID0gcHJvcHMuc2VydmljZU5hbWU7XG4gICAgICBjb250YWluZXJUeXBlQ2FtZWxDYXNlID0gJ1NlcnZpY2UnO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkYXRhZG9nLXNpZGVjYXInOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvckRhdGFkb2dTaWRlY2FyJztcbiAgICAgIGxvZ0dyb3VwTmFtZSA9IGAke3Byb3BzLnNlcnZpY2VOYW1lfS0ke3Byb3BzLmNvbnRhaW5lclR5cGV9YDtcbiAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRJZCwgcmVnaW9uIH0gPSBTdGFjay5vZihwcm9wcy5zY29wZSk7XG5cbiAgc3dpdGNoIChwcm9wcy5kYXRhZG9nTG9nZ2luZ01vZGUpIHtcblxuICAgIGNhc2UgRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM6XG4gICAgICAvLyBUT0RPIGNhbiB3ZSB1c2UgYHNlY3JldE9wdGlvbnNgIGhlcmUgYXMgd2VsbCwgZS5nLiBhcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWVjcy1maXJlbGVucy1leGFtcGxlcy9ibG9iL21haW5saW5lL2V4YW1wbGVzL2ZsdWVudC1iaXQvZGF0YWRvZy90YXNrLWRlZmluaXRpb24uanNvbiNMMzMtTDM2XG4gICAgICAvLyBQcm9iYWJseSBub3QsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzgxNzRcbiAgICAgIHJldHVybiBlY3MuTG9nRHJpdmVycy5maXJlbGVucyh7XG4gICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZmx1ZW50Yml0LyNjb25maWd1cmF0aW9uLXBhcmFtZXRlcnNcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIE5hbWU6ICdkYXRhZG9nJyxcbiAgICAgICAgICBNYXRjaDogJyonLFxuICAgICAgICAgIEhvc3Q6IGBodHRwLWludGFrZS5sb2dzLiR7cHJvcHMuZGF0YWRvZ1NpdGV9YCxcbiAgICAgICAgICBUTFM6ICdvbicsXG4gICAgICAgICAgYXBpa2V5OiBwcm9wcy5kYXRhZG9nQXBpS2V5UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICAgICAgIGNvbXByZXNzOiAnZ3ppcCcsXG4gICAgICAgICAgZGRfc2VydmljZTogbG9nR3JvdXBOYW1lLFxuICAgICAgICAgIGRkX3NvdXJjZTogJ3Jpby1mYXJnYXRlJyxcbiAgICAgICAgICBkZF9tZXNzYWdlX2tleTogJ2xvZycsXG4gICAgICAgICAgZGRfdGFnczogZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZSh7IC4uLnByb3BzLCBhY2NvdW50SWQsIHJlZ2lvbiwgY29udGFpbmVyVHlwZTogJ2ZsdWVudC1iaXQnIH0pLFxuICAgICAgICAgIHByb3ZpZGVyOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuRk9SV0FSREVSX0xBTUJEQTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYUFybiA9IEZuLmltcG9ydFZhbHVlKCdjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuJyk7XG4gICAgICBjb25zdCBjZm5QZXJtaXNzaW9uID0gbmV3IGxhbWJkYS5DZm5QZXJtaXNzaW9uKHByb3BzLnNjb3BlLCBgTG9nRm9yd2FyZGVyUGVybWlzc2lvbiR7Y29udGFpbmVyVHlwZUNhbWVsQ2FzZX1gLCB7XG4gICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICBwcmluY2lwYWw6IGBsb2dzLiR7cmVnaW9ufS5hbWF6b25hd3MuY29tYCxcbiAgICAgICAgc291cmNlQXJuOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBBcm4sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNmblN1YnNjcmlwdGlvbkZpbHRlciA9IG5ldyBsb2dzLkNmblN1YnNjcmlwdGlvbkZpbHRlcihcbiAgICAgICAgcHJvcHMuc2NvcGUsXG4gICAgICAgIGBMb2dGb3J3YXJkZXJTdWJzY3JpcHRpb25GaWx0ZXIke2NvbnRhaW5lclR5cGVDYW1lbENhc2V9YCxcbiAgICAgICAge1xuICAgICAgICAgIGRlc3RpbmF0aW9uQXJuOiBsb2dGb3J3YXJkZXJMYW1iZGFBcm4sXG4gICAgICAgICAgZmlsdGVyUGF0dGVybjogJycsXG4gICAgICAgICAgbG9nR3JvdXBOYW1lOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBOYW1lLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNmblN1YnNjcmlwdGlvbkZpbHRlci5hZGREZXBlbmRzT24oY2ZuUGVybWlzc2lvbik7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSxcbiAgICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpOiB2b2lkIHtcblxuICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgIGNvbnRhaW5lcjogcmlvRmFyZ2F0ZVNlcnZpY2UuZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uSEVBTFRIWSxcbiAgfSk7XG5cbiAgaWYgKHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24pIHtcbiAgICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgY29udGFpbmVyOiByaW9GYXJnYXRlU2VydmljZS5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgICAgY29uZGl0aW9uOiBlY3MuQ29udGFpbmVyRGVwZW5kZW5jeUNvbmRpdGlvbi5TVEFSVCxcbiAgICB9KTtcblxuICAgIGlmIChyaW9GYXJnYXRlU2VydmljZS5kYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb24ubG9nRHJpdmVyQ29uZmlnPy5sb2dEcml2ZXIgPT09ICdhd3NmaXJlbGVucycpIHtcbiAgICAgIHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uU1RBUlQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -142,6 +142,12 @@ export interface FargateTaskDefinitionProps {
|
|
|
142
142
|
* the current task number.
|
|
143
143
|
*/
|
|
144
144
|
readonly desiredCount?: number;
|
|
145
|
+
/**
|
|
146
|
+
* The operating system that your task definitions are running on.
|
|
147
|
+
*
|
|
148
|
+
* @default - Using ecs.OperatingSystemFamily.LINUX and ecs.CpuArchitecture.X86_64
|
|
149
|
+
*/
|
|
150
|
+
readonly runtimePlatform?: ecs.RuntimePlatform;
|
|
145
151
|
}
|
|
146
152
|
export interface ListenerRule {
|
|
147
153
|
readonly priority: number;
|