@aws-cdk-testing/cli-integ 2.142.0 → 2.143.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/lib/aws.d.ts +0 -1
- package/lib/aws.js +1 -2
- package/package.json +5 -5
- package/resources/cdk-apps/app/app.js +0 -18
- package/resources/cli-regression-patches/v2.142.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.142.0/skip-tests.txt +4 -0
- package/tests/cli-integ-tests/cli.integtest.js +1 -40
package/lib/aws.d.ts
CHANGED
|
@@ -11,7 +11,6 @@ export declare class AwsClients {
|
|
|
11
11
|
readonly ecr: AwsCaller<AWS.ECR>;
|
|
12
12
|
readonly ecs: AwsCaller<AWS.ECS>;
|
|
13
13
|
readonly sso: AwsCaller<AWS.SSO>;
|
|
14
|
-
readonly ssm: AwsCaller<AWS.SSM>;
|
|
15
14
|
readonly sns: AwsCaller<AWS.SNS>;
|
|
16
15
|
readonly iam: AwsCaller<AWS.IAM>;
|
|
17
16
|
readonly lambda: AwsCaller<AWS.Lambda>;
|
package/lib/aws.js
CHANGED
|
@@ -28,7 +28,6 @@ class AwsClients {
|
|
|
28
28
|
this.ecs = makeAwsCaller(AWS.ECS, this.config);
|
|
29
29
|
this.sso = makeAwsCaller(AWS.SSO, this.config);
|
|
30
30
|
this.sns = makeAwsCaller(AWS.SNS, this.config);
|
|
31
|
-
this.ssm = makeAwsCaller(AWS.SSM, this.config);
|
|
32
31
|
this.iam = makeAwsCaller(AWS.IAM, this.config);
|
|
33
32
|
this.lambda = makeAwsCaller(AWS.Lambda, this.config);
|
|
34
33
|
this.sts = makeAwsCaller(AWS.STS, this.config);
|
|
@@ -246,4 +245,4 @@ function chainableCredentials(region) {
|
|
|
246
245
|
}
|
|
247
246
|
return undefined;
|
|
248
247
|
}
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQixpRUFBaUU7QUFDakUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUVoRSxNQUFhLFVBQVU7SUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUE2QjtRQUN2RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztRQUN2RixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFjLEVBQUUsTUFBNkI7UUFDekUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQWVELFlBQTRCLE1BQWMsRUFBbUIsTUFBNkI7UUFBOUQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFtQixXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUN4RixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osV0FBVyxFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDOUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRSxDQUFDO1lBQ2IsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLG9CQUFvQixFQUFFLFVBQVU7U0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLEdB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VCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsT0FBTyxJQUFJLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQztZQUMzQyxNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFLEdBQUc7Z0JBQ1osVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLGVBQWUsRUFBRSxhQUFhO2FBQy9CO1lBQ0QsU0FBUyxFQUFFO2dCQUNULE1BQU07YUFDUDtZQUNELGlCQUFpQixFQUFFLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRTtTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbnJlcXVpcmUoJ2F3cy1zZGsvbGliL21haW50ZW5hbmNlX21vZGVfbWVzc2FnZScpLnN1cHByZXNzID0gdHJ1ZTtcblxuZXhwb3J0IGNsYXNzIEF3c0NsaWVudHMge1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGRlZmF1bHQob3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pIHtcbiAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID8/IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTiA/PyAndXMtZWFzdC0xJztcbiAgICByZXR1cm4gQXdzQ2xpZW50cy5mb3JSZWdpb24ocmVnaW9uLCBvdXRwdXQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhc3luYyBmb3JSZWdpb24ocmVnaW9uOiBzdHJpbmcsIG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBBd3NDbGllbnRzKHJlZ2lvbiwgb3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBhbnk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uOiBBd3NDYWxsZXI8QVdTLkNsb3VkRm9ybWF0aW9uPjtcbiAgcHVibGljIHJlYWRvbmx5IHMzOiBBd3NDYWxsZXI8QVdTLlMzPjtcbiAgcHVibGljIHJlYWRvbmx5IGVjcjogQXdzQ2FsbGVyPEFXUy5FQ1I+O1xuICBwdWJsaWMgcmVhZG9ubHkgZWNzOiBBd3NDYWxsZXI8QVdTLkVDUz47XG4gIHB1YmxpYyByZWFkb25seSBzc286IEF3c0NhbGxlcjxBV1MuU1NPPjtcbiAgcHVibGljIHJlYWRvbmx5IHNzbTogQXdzQ2FsbGVyPEFXUy5TU00+O1xuICBwdWJsaWMgcmVhZG9ubHkgc25zOiBBd3NDYWxsZXI8QVdTLlNOUz47XG4gIHB1YmxpYyByZWFkb25seSBpYW06IEF3c0NhbGxlcjxBV1MuSUFNPjtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogQXdzQ2FsbGVyPEFXUy5MYW1iZGE+O1xuICBwdWJsaWMgcmVhZG9ubHkgc3RzOiBBd3NDYWxsZXI8QVdTLlNUUz47XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBjcmVkZW50aWFsczogY2hhaW5hYmxlQ3JlZGVudGlhbHModGhpcy5yZWdpb24pLFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIG1heFJldHJpZXM6IDgsXG4gICAgICByZXRyeURlbGF5T3B0aW9uczogeyBiYXNlOiA1MDAgfSxcbiAgICAgIHN0c1JlZ2lvbmFsRW5kcG9pbnRzOiAncmVnaW9uYWwnLFxuICAgIH07XG4gICAgdGhpcy5jbG91ZEZvcm1hdGlvbiA9IG1ha2VBd3NDYWxsZXIoQVdTLkNsb3VkRm9ybWF0aW9uLCB0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zMyA9IG1ha2VBd3NDYWxsZXIoQVdTLlMzLCB0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5lY3IgPSBtYWtlQXdzQ2FsbGVyKEFXUy5FQ1IsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmVjcyA9IG1ha2VBd3NDYWxsZXIoQVdTLkVDUywgdGhpcy5jb25maWcpO1xuICAgIHRoaXMuc3NvID0gbWFrZUF3c0NhbGxlcihBV1MuU1NPLCB0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zbnMgPSBtYWtlQXdzQ2FsbGVyKEFXUy5TTlMsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnNzbSA9IG1ha2VBd3NDYWxsZXIoQVdTLlNTTSwgdGhpcy5jb25maWcpO1xuICAgIHRoaXMuaWFtID0gbWFrZUF3c0NhbGxlcihBV1MuSUFNLCB0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5sYW1iZGEgPSBtYWtlQXdzQ2FsbGVyKEFXUy5MYW1iZGEsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnN0cyA9IG1ha2VBd3NDYWxsZXIoQVdTLlNUUywgdGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFjY291bnQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBSZWR1Y2UgIyBvZiByZXRyaWVzLCB3ZSB1c2UgdGhpcyBhcyBhIGNpcmN1aXQgYnJlYWtlciBmb3IgZGV0ZWN0aW5nIG5vLWNvbmZpZ1xuICAgIHJldHVybiAoYXdhaXQgbmV3IEFXUy5TVFMoeyAuLi50aGlzLmNvbmZpZywgbWF4UmV0cmllczogMSB9KS5nZXRDYWxsZXJJZGVudGl0eSgpLnByb21pc2UoKSkuQWNjb3VudCE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlU3RhY2tzKC4uLnN0YWNrTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKHN0YWNrTmFtZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuXG4gICAgLy8gV2UgcHVycG9zZWx5IGRvIGFsbCBzdGFja3Mgc2VyaWFsbHksIGJlY2F1c2UgdGhleSd2ZSBiZWVuIG9yZGVyZWRcbiAgICAvLyB0byBkbyB0aGUgYm9vdHN0cmFwIHN0YWNrIGxhc3QuXG4gICAgZm9yIChjb25zdCBzdGFja05hbWUgb2Ygc3RhY2tOYW1lcykge1xuICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbigndXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uJywge1xuICAgICAgICBFbmFibGVUZXJtaW5hdGlvblByb3RlY3Rpb246IGZhbHNlLFxuICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbignZGVsZXRlU3RhY2snLCB7XG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHJldHJ5KHRoaXMub3V0cHV0LCBgRGVsZXRpbmcgJHtzdGFja05hbWV9YCwgcmV0cnkuZm9yU2Vjb25kcyg2MDApLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuc3RhY2tTdGF0dXMoc3RhY2tOYW1lKTtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cy5lbmRzV2l0aCgnX0ZBSUxFRCcpKSB7XG4gICAgICAgICAgdGhyb3cgcmV0cnkuYWJvcnQobmV3IEVycm9yKGAnJHtzdGFja05hbWV9JyBpcyBpbiBzdGF0ZSAnJHtzdGF0dXN9J2ApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlbGV0ZSBvZiAnJHtzdGFja05hbWV9JyBub3QgY29tcGxldGUgeWV0YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFja1N0YXR1cyhzdGFja05hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pKS5TdGFja3M/LlswXS5TdGFja1N0YXR1cztcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChpc1N0YWNrTWlzc2luZ0Vycm9yKGUpKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtcHR5QnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IG9iamVjdHMgPSBhd2FpdCB0aGlzLnMzKCdsaXN0T2JqZWN0VmVyc2lvbnMnLCB7IEJ1Y2tldDogYnVja2V0TmFtZSB9KTtcbiAgICBjb25zdCBkZWxldGVzID0gWy4uLm9iamVjdHMuVmVyc2lvbnMgfHwgW10sIC4uLm9iamVjdHMuRGVsZXRlTWFya2VycyB8fCBbXV1cbiAgICAgIC5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqLlZlcnNpb25JZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9iai5LZXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgYWNjLnB1c2goeyBLZXk6IG9iai5LZXksIFZlcnNpb25JZDogb2JqLlZlcnNpb25JZCB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqLktleSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBhY2MucHVzaCh7IEtleTogb2JqLktleSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10gYXMgQVdTLlMzLk9iamVjdElkZW50aWZpZXJMaXN0KTtcbiAgICBpZiAoZGVsZXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuczMoJ2RlbGV0ZU9iamVjdHMnLCB7XG4gICAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgICBEZWxldGU6IHtcbiAgICAgICAgT2JqZWN0czogZGVsZXRlcyxcbiAgICAgICAgUXVpZXQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVJbWFnZVJlcG9zaXRvcnkocmVwb3NpdG9yeU5hbWU6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZWNyKCdkZWxldGVSZXBvc2l0b3J5JywgeyByZXBvc2l0b3J5TmFtZSwgZm9yY2U6IHRydWUgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlQnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVtcHR5QnVja2V0KGJ1Y2tldE5hbWUpO1xuICAgICAgYXdhaXQgdGhpcy5zMygnZGVsZXRlQnVja2V0Jywge1xuICAgICAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChpc0J1Y2tldE1pc3NpbmdFcnJvcihlKSkgeyByZXR1cm47IH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUGVyZm9ybSBhbiBBV1MgY2FsbCBmcm9tIG5vdGhpbmdcbiAqXG4gKiBDcmVhdGUgdGhlIGNvcnJlY3QgY2xpZW50LCBkbyB0aGUgY2FsbCBhbmQgcmVzb2xlIHRoZSBwcm9taXNlKCkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF3c0NhbGw8XG4gIFN2YyBleHRlbmRzIEFXUy5TZXJ2aWNlLFxuICBDYWxscyBleHRlbmRzIFNlcnZpY2VDYWxsczxTdmM+LFxuICBDYWxsIGV4dGVuZHMga2V5b2YgQ2FsbHMsXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvd1xuPihjdG9yOiBuZXcgKGNvbmZpZzogYW55KSA9PiBTdmMsIGNvbmZpZzogYW55LCBjYWxsOiBDYWxsLCByZXF1ZXN0OiBGaXJzdDxDYWxsc1tDYWxsXT4pOiBQcm9taXNlPFNlY29uZDxDYWxsc1tDYWxsXT4+IHtcbiAgY29uc3QgY2ZuID0gbmV3IGN0b3IoY29uZmlnKTtcbiAgY29uc3QgcmVzcG9uc2UgPSAoKGNmbiBhcyBhbnkpW2NhbGxdIGFzIGFueSkocmVxdWVzdCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnByb21pc2UoKTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY29uc3QgbmV3RXJyID0gbmV3IEVycm9yKGAke1N0cmluZyhjYWxsKX0oJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0KX0pOiAke2UubWVzc2FnZX1gKTtcbiAgICAobmV3RXJyIGFzIGFueSkuY29kZSA9IGUuY29kZTtcbiAgICB0aHJvdyBuZXdFcnI7XG4gIH1cbn1cblxudHlwZSBBd3NDYWxsZXI8QT4gPSA8QiBleHRlbmRzIGtleW9mIFNlcnZpY2VDYWxsczxBPj4oY2FsbDogQiwgcmVxdWVzdDogRmlyc3Q8U2VydmljZUNhbGxzPEE+W0JdPikgPT4gUHJvbWlzZTxTZWNvbmQ8U2VydmljZUNhbGxzPEE+W0JdPj47XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBpbnZva2UgJ2F3c0NhbGwnIGZvciBzcGVjaWZpYyBzZXJ2aWNlcy5cbiAqXG4gKiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBjYWxsaW5nIHRoaXMgcmVwbGFjZXMgYSB3aG9sZSBidW5jaCBvZiBhbm5veWluZyBnZW5lcmljcyB5b3Ugb3RoZXJ3aXNlIGhhdmUgdG8gdHlwZTpcbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGZ1bmN0aW9uIGNsb3VkRm9ybWF0aW9uPFxuICogICBDIGV4dGVuZHMga2V5b2YgU2VydmljZUNhbGxzPEFXUy5DbG91ZEZvcm1hdGlvbj4sXG4gKiA+KGNhbGw6IEMsIHJlcXVlc3Q6IEZpcnN0PFNlcnZpY2VDYWxsczxBV1MuQ2xvdWRGb3JtYXRpb24+W0NdPik6IFByb21pc2U8U2Vjb25kPFNlcnZpY2VDYWxsczxBV1MuQ2xvdWRGb3JtYXRpb24+W0NdPj4ge1xuICogICByZXR1cm4gYXdzQ2FsbChBV1MuQ2xvdWRGb3JtYXRpb24sIGNhbGwsIHJlcXVlc3QpO1xuICogfVxuICogYGBgXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG5mdW5jdGlvbiBtYWtlQXdzQ2FsbGVyPEEgZXh0ZW5kcyBBV1MuU2VydmljZT4oY3RvcjogbmV3IChjb25maWc6IGFueSkgPT4gQSwgY29uZmlnOiBhbnkpOiBBd3NDYWxsZXI8QT4ge1xuICByZXR1cm4gPEIgZXh0ZW5kcyBrZXlvZiBTZXJ2aWNlQ2FsbHM8QT4+KGNhbGw6IEIsIHJlcXVlc3Q6IEZpcnN0PFNlcnZpY2VDYWxsczxBPltCXT4pOiBQcm9taXNlPFNlY29uZDxTZXJ2aWNlQ2FsbHM8QT5bQl0+PiA9PiB7XG4gICAgcmV0dXJuIGF3c0NhbGwoY3RvciwgY29uZmlnLCBjYWxsLCByZXF1ZXN0KTtcbiAgfTtcbn1cblxudHlwZSBTZXJ2aWNlQ2FsbHM8VD4gPSBOb05heU5ldmVyPFNpbXBsaWZpZWRTZXJ2aWNlPFQ+Pjtcbi8vIE1hcCBldmVyIG1lbWJlciBpbiB0aGUgdHlwZSB0byB0aGUgaW1wb3J0YW50IEFXUyBjYWxsIG92ZXJsb2FkLCBvciB0byAnbmV2ZXInXG50eXBlIFNpbXBsaWZpZWRTZXJ2aWNlPFQ+ID0ge1trIGluIGtleW9mIFRdOiBBd3NDYWxsSU88VFtrXT59O1xuLy8gUmVtb3ZlIGFsbCAnbmV2ZXInIHR5cGVzIGZyb20gYW4gb2JqZWN0IHR5cGVcbnR5cGUgTm9OYXlOZXZlcjxUPiA9IFBpY2s8VCwge1trIGluIGtleW9mIFRdOiBUW2tdIGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGsgfVtrZXlvZiBUXT47XG5cbi8vIEJlY2F1c2Ugb2YgdGhlIG92ZXJsb2FkcyBhbiBBV1MgaGFuZGxlciB0eXBlIGxvb2tzIGxpa2UgdGhpczpcbi8vXG4vLyAgIHtcbi8vICAgICAgKHBhcmFtczogSU5QVVRTVFJVQ1QsIGNhbGxiYWNrPzogKChlcnI6IEFXU0Vycm9yLCBkYXRhOiB7fSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiBSZXF1ZXN0PE9VVFBVVCwgLi4uPjtcbi8vICAgICAgKGNhbGxiYWNrPzogKChlcnI6IEFXUy5BV1NFcnJvciwgZGF0YToge30pID0+IHZvaWQpIHwgdW5kZWZpbmVkKTogQVdTLlJlcXVlc3Q8Li4uPjtcbi8vICAgfVxuLy9cbi8vIEdldCB0aGUgZmlyc3Qgb3ZlcmxvYWQgYW5kIGV4dHJhY3QgdGhlIGlucHV0IGFuZCBvdXRwdXQgc3RydWN0IHR5cGVzXG50eXBlIEF3c0NhbGxJTzxUPiA9XG4gIFQgZXh0ZW5kcyB7XG4gICAgKGFyZ3M6IGluZmVyIElOUFVULCBjYWxsYmFjaz86ICgoZXJyOiBBV1MuQVdTRXJyb3IsIGRhdGE6IGFueSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiBBV1MuUmVxdWVzdDxpbmZlciBPVVRQVVQsIEFXUy5BV1NFcnJvcj47XG4gICAgKGNhbGxiYWNrPzogKChlcnI6IEFXUy5BV1NFcnJvciwgZGF0YToge30pID0+IHZvaWQpIHwgdW5kZWZpbmVkKTogQVdTLlJlcXVlc3Q8YW55LCBhbnk+O1xuICB9ID8gW0lOUFVULCBPVVRQVVRdIDogbmV2ZXI7XG5cbnR5cGUgRmlyc3Q8VD4gPSBUIGV4dGVuZHMgW2FueSwgYW55XSA/IFRbMF0gOiBuZXZlcjtcbnR5cGUgU2Vjb25kPFQ+ID0gVCBleHRlbmRzIFthbnksIGFueV0gPyBUWzFdIDogbmV2ZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWNrTWlzc2luZ0Vycm9yKGU6IEVycm9yKSB7XG4gIHJldHVybiBlLm1lc3NhZ2UuaW5kZXhPZignZG9lcyBub3QgZXhpc3QnKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCdWNrZXRNaXNzaW5nRXJyb3IoZTogRXJyb3IpIHtcbiAgcmV0dXJuIGUubWVzc2FnZS5pbmRleE9mKCdkb2VzIG5vdCBleGlzdCcpID4gLTE7XG59XG5cbi8qKlxuICogUmV0cnkgYW4gYXN5bmMgb3BlcmF0aW9uIHVudGlsIGEgZGVhZGxpbmUgaXMgaGl0LlxuICpcbiAqIFVzZSBgcmV0cnkuZm9yU2Vjb25kcygpYCB0byBjb25zdHJ1Y3QgYSBkZWFkbGluZSByZWxhdGl2ZSB0byByaWdodCBub3cuXG4gKlxuICogRXhjZXB0aW9ucyB3aWxsIGNhdXNlIHRoZSBvcGVyYXRpb24gdG8gcmV0cnkuIFVzZSBgcmV0cnkuYWJvcnRgIHRvIGFubm90YXRlIGFuIGV4Y2VwdGlvblxuICogdG8gc3RvcCB0aGUgcmV0cnkgYW5kIGVuZCBpbiBhIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeTxBPihvdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSwgb3BlcmF0aW9uOiBzdHJpbmcsIGRlYWRsaW5lOiBEYXRlLCBibG9jazogKCkgPT4gUHJvbWlzZTxBPik6IFByb21pc2U8QT4ge1xuICBsZXQgaSA9IDA7XG4gIG91dHB1dC53cml0ZShg8J+SiCAke29wZXJhdGlvbn1cXG5gKTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaSsrO1xuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgYmxvY2soKTtcbiAgICAgIG91dHB1dC53cml0ZShg8J+SiCAke29wZXJhdGlvbn06IHN1Y2NlZWRlZCBhZnRlciAke2l9IGF0dGVtcHRzXFxuYCk7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUuYWJvcnQgfHwgRGF0ZS5ub3coKSA+IGRlYWRsaW5lLmdldFRpbWUoICkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29wZXJhdGlvbn06IGRpZCBub3Qgc3VjY2VlZCBhZnRlciAke2l9IGF0dGVtcHRzOiAke2V9YCk7XG4gICAgICB9XG4gICAgICBvdXRwdXQud3JpdGUoYOKPsyAke29wZXJhdGlvbn0gKCR7ZS5tZXNzYWdlfSlcXG5gKTtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYSBkZWFkbGluZSBmb3IgdGhlIGByZXRyeWAgZnVuY3Rpb24gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZS5cbiAqL1xucmV0cnkuZm9yU2Vjb25kcyA9IChzZWNvbmRzOiBudW1iZXIpOiBEYXRlID0+IHtcbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgKyBzZWNvbmRzICogMTAwMCk7XG59O1xuXG4vKipcbiAqIEFubm90YXRlIGFuIGVycm9yIHRvIHN0b3AgdGhlIHJldHJ5aW5nXG4gKi9cbnJldHJ5LmFib3J0ID0gKGU6IEVycm9yKTogRXJyb3IgPT4ge1xuICAoZSBhcyBhbnkpLmFib3J0ID0gdHJ1ZTtcbiAgcmV0dXJuIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb3V0cHV0RnJvbVN0YWNrKGtleTogc3RyaW5nLCBzdGFjazogQVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChzdGFjay5PdXRwdXRzID8/IFtdKS5maW5kKG8gPT4gby5PdXRwdXRLZXkgPT09IGtleSk/Lk91dHB1dFZhbHVlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2Uob2sgPT4gc2V0VGltZW91dChvaywgbXMpKTtcbn1cblxuZnVuY3Rpb24gY2hhaW5hYmxlQ3JlZGVudGlhbHMocmVnaW9uOiBzdHJpbmcpOiBBV1MuQ3JlZGVudGlhbHMgfCB1bmRlZmluZWQge1xuXG4gIGNvbnN0IHByb2ZpbGVOYW1lID0gcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEU7XG4gIGlmIChwcm9jZXNzLmVudi5DT0RFQlVJTERfQlVJTERfQVJOICYmIHByb2ZpbGVOYW1lKSB7XG5cbiAgICAvLyBpbiBjb2RlYnVpbGQgd2UgbXVzdCBhc3N1bWUgdGhlIHJvbGUgdGhhdCB0aGUgY2RrIHVzZXNcbiAgICAvLyBvdGhlcndpc2UgY3JlZGVudGlhbHMgd2lsbCBqdXN0IGJlIHBpY2tlZCB1cCBieSB0aGUgbm9ybWFsIHNka1xuICAgIC8vIGhldXJpc3RpY3MgYW5kIGV4cGlyZSBhZnRlciBhbiBob3VyLlxuXG4gICAgLy8gY2FuJ3QgdXNlICd+JyBzaW5jZSB0aGUgU0RLIGRvZXNuJ3Qgc2VlbSB0byBleHBhbmQgaXQuLi4/XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGAke3Byb2Nlc3MuZW52LkhPTUV9Ly5hd3MvY29uZmlnYDtcbiAgICBjb25zdCBpbmkgPSBuZXcgQVdTLkluaUxvYWRlcigpLmxvYWRGcm9tKHtcbiAgICAgIGZpbGVuYW1lOiBjb25maWdQYXRoLFxuICAgICAgaXNDb25maWc6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9maWxlID0gaW5pW3Byb2ZpbGVOYW1lXTtcblxuICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9maWxlICcke3Byb2ZpbGVOYW1lfScgZG9lcyBub3QgZXhpc3QgaW4gY29uZmlnIGZpbGUgKCR7Y29uZmlnUGF0aH0pYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJuID0gcHJvZmlsZS5yb2xlX2FybjtcbiAgICBjb25zdCBleHRlcm5hbElkID0gcHJvZmlsZS5leHRlcm5hbF9pZDtcblxuICAgIGlmICghYXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJvbGVfYXJuIGRvZXMgbm90IGV4aXN0IGluIHByb2ZpbGUgJHtwcm9maWxlTmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dGVybmFsSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXh0ZXJuYWxfaWQgZG9lcyBub3QgZXhpc3QgaW4gcHJvZmlsZSAke2V4dGVybmFsSWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMoe1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIFJvbGVBcm46IGFybixcbiAgICAgICAgRXh0ZXJuYWxJZDogZXh0ZXJuYWxJZCxcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAnaW50ZWctdGVzdHMnLFxuICAgICAgfSxcbiAgICAgIHN0c0NvbmZpZzoge1xuICAgICAgICByZWdpb24sXG4gICAgICB9LFxuICAgICAgbWFzdGVyQ3JlZGVudGlhbHM6IG5ldyBBV1MuRUNTQ3JlZGVudGlhbHMoKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQixpRUFBaUU7QUFDakUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUVoRSxNQUFhLFVBQVU7SUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUE2QjtRQUN2RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztRQUN2RixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFjLEVBQUUsTUFBNkI7UUFDekUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQWNELFlBQTRCLE1BQWMsRUFBbUIsTUFBNkI7UUFBOUQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFtQixXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUN4RixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osV0FBVyxFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDOUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRSxDQUFDO1lBQ2IsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLG9CQUFvQixFQUFFLFVBQVU7U0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLEdB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QUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsT0FBTyxJQUFJLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQztZQUMzQyxNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFLEdBQUc7Z0JBQ1osVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLGVBQWUsRUFBRSxhQUFhO2FBQy9CO1lBQ0QsU0FBUyxFQUFFO2dCQUNULE1BQU07YUFDUDtZQUNELGlCQUFpQixFQUFFLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRTtTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbnJlcXVpcmUoJ2F3cy1zZGsvbGliL21haW50ZW5hbmNlX21vZGVfbWVzc2FnZScpLnN1cHByZXNzID0gdHJ1ZTtcblxuZXhwb3J0IGNsYXNzIEF3c0NsaWVudHMge1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGRlZmF1bHQob3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pIHtcbiAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID8/IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTiA/PyAndXMtZWFzdC0xJztcbiAgICByZXR1cm4gQXdzQ2xpZW50cy5mb3JSZWdpb24ocmVnaW9uLCBvdXRwdXQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhc3luYyBmb3JSZWdpb24ocmVnaW9uOiBzdHJpbmcsIG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBBd3NDbGllbnRzKHJlZ2lvbiwgb3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBhbnk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uOiBBd3NDYWxsZXI8QVdTLkNsb3VkRm9ybWF0aW9uPjtcbiAgcHVibGljIHJlYWRvbmx5IHMzOiBBd3NDYWxsZXI8QVdTLlMzPjtcbiAgcHVibGljIHJlYWRvbmx5IGVjcjogQXdzQ2FsbGVyPEFXUy5FQ1I+O1xuICBwdWJsaWMgcmVhZG9ubHkgZWNzOiBBd3NDYWxsZXI8QVdTLkVDUz47XG4gIHB1YmxpYyByZWFkb25seSBzc286IEF3c0NhbGxlcjxBV1MuU1NPPjtcbiAgcHVibGljIHJlYWRvbmx5IHNuczogQXdzQ2FsbGVyPEFXUy5TTlM+O1xuICBwdWJsaWMgcmVhZG9ubHkgaWFtOiBBd3NDYWxsZXI8QVdTLklBTT47XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IEF3c0NhbGxlcjxBV1MuTGFtYmRhPjtcbiAgcHVibGljIHJlYWRvbmx5IHN0czogQXdzQ2FsbGVyPEFXUy5TVFM+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBvdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgY3JlZGVudGlhbHM6IGNoYWluYWJsZUNyZWRlbnRpYWxzKHRoaXMucmVnaW9uKSxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICBtYXhSZXRyaWVzOiA4LFxuICAgICAgcmV0cnlEZWxheU9wdGlvbnM6IHsgYmFzZTogNTAwIH0sXG4gICAgICBzdHNSZWdpb25hbEVuZHBvaW50czogJ3JlZ2lvbmFsJyxcbiAgICB9O1xuICAgIHRoaXMuY2xvdWRGb3JtYXRpb24gPSBtYWtlQXdzQ2FsbGVyKEFXUy5DbG91ZEZvcm1hdGlvbiwgdGhpcy5jb25maWcpO1xuICAgIHRoaXMuczMgPSBtYWtlQXdzQ2FsbGVyKEFXUy5TMywgdGhpcy5jb25maWcpO1xuICAgIHRoaXMuZWNyID0gbWFrZUF3c0NhbGxlcihBV1MuRUNSLCB0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5lY3MgPSBtYWtlQXdzQ2FsbGVyKEFXUy5FQ1MsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnNzbyA9IG1ha2VBd3NDYWxsZXIoQVdTLlNTTywgdGhpcy5jb25maWcpO1xuICAgIHRoaXMuc25zID0gbWFrZUF3c0NhbGxlcihBV1MuU05TLCB0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5pYW0gPSBtYWtlQXdzQ2FsbGVyKEFXUy5JQU0sIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmxhbWJkYSA9IG1ha2VBd3NDYWxsZXIoQVdTLkxhbWJkYSwgdGhpcy5jb25maWcpO1xuICAgIHRoaXMuc3RzID0gbWFrZUF3c0NhbGxlcihBV1MuU1RTLCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWNjb3VudCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8vIFJlZHVjZSAjIG9mIHJldHJpZXMsIHdlIHVzZSB0aGlzIGFzIGEgY2lyY3VpdCBicmVha2VyIGZvciBkZXRlY3Rpbmcgbm8tY29uZmlnXG4gICAgcmV0dXJuIChhd2FpdCBuZXcgQVdTLlNUUyh7IC4uLnRoaXMuY29uZmlnLCBtYXhSZXRyaWVzOiAxIH0pLmdldENhbGxlcklkZW50aXR5KCkucHJvbWlzZSgpKS5BY2NvdW50ITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVTdGFja3MoLi4uc3RhY2tOYW1lczogc3RyaW5nW10pIHtcbiAgICBpZiAoc3RhY2tOYW1lcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAvLyBXZSBwdXJwb3NlbHkgZG8gYWxsIHN0YWNrcyBzZXJpYWxseSwgYmVjYXVzZSB0aGV5J3ZlIGJlZW4gb3JkZXJlZFxuICAgIC8vIHRvIGRvIHRoZSBib290c3RyYXAgc3RhY2sgbGFzdC5cbiAgICBmb3IgKGNvbnN0IHN0YWNrTmFtZSBvZiBzdGFja05hbWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsb3VkRm9ybWF0aW9uKCd1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24nLCB7XG4gICAgICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLmNsb3VkRm9ybWF0aW9uKCdkZWxldGVTdGFjaycsIHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgcmV0cnkodGhpcy5vdXRwdXQsIGBEZWxldGluZyAke3N0YWNrTmFtZX1gLCByZXRyeS5mb3JTZWNvbmRzKDYwMCksIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5zdGFja1N0YXR1cyhzdGFja05hbWUpO1xuICAgICAgICBpZiAoc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzLmVuZHNXaXRoKCdfRkFJTEVEJykpIHtcbiAgICAgICAgICB0aHJvdyByZXRyeS5hYm9ydChuZXcgRXJyb3IoYCcke3N0YWNrTmFtZX0nIGlzIGluIHN0YXRlICcke3N0YXR1c30nYCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVsZXRlIG9mICcke3N0YWNrTmFtZX0nIG5vdCBjb21wbGV0ZSB5ZXRgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YWNrU3RhdHVzKHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSkpLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGlzU3RhY2tNaXNzaW5nRXJyb3IoZSkpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1wdHlCdWNrZXQoYnVja2V0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgb2JqZWN0cyA9IGF3YWl0IHRoaXMuczMoJ2xpc3RPYmplY3RWZXJzaW9ucycsIHsgQnVja2V0OiBidWNrZXROYW1lIH0pO1xuICAgIGNvbnN0IGRlbGV0ZXMgPSBbLi4ub2JqZWN0cy5WZXJzaW9ucyB8fCBbXSwgLi4ub2JqZWN0cy5EZWxldGVNYXJrZXJzIHx8IFtdXVxuICAgICAgLnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmouVmVyc2lvbklkICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb2JqLktleSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBhY2MucHVzaCh7IEtleTogb2JqLktleSwgVmVyc2lvbklkOiBvYmouVmVyc2lvbklkIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmouS2V5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGFjYy5wdXNoKHsgS2V5OiBvYmouS2V5IH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSBhcyBBV1MuUzMuT2JqZWN0SWRlbnRpZmllckxpc3QpO1xuICAgIGlmIChkZWxldGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zMygnZGVsZXRlT2JqZWN0cycsIHtcbiAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBkZWxldGVzLFxuICAgICAgICBRdWlldDogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUltYWdlUmVwb3NpdG9yeShyZXBvc2l0b3J5TmFtZTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5lY3IoJ2RlbGV0ZVJlcG9zaXRvcnknLCB7IHJlcG9zaXRvcnlOYW1lLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVCdWNrZXQoYnVja2V0TmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW1wdHlCdWNrZXQoYnVja2V0TmFtZSk7XG4gICAgICBhd2FpdCB0aGlzLnMzKCdkZWxldGVCdWNrZXQnLCB7XG4gICAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGlzQnVja2V0TWlzc2luZ0Vycm9yKGUpKSB7IHJldHVybjsgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQZXJmb3JtIGFuIEFXUyBjYWxsIGZyb20gbm90aGluZ1xuICpcbiAqIENyZWF0ZSB0aGUgY29ycmVjdCBjbGllbnQsIGRvIHRoZSBjYWxsIGFuZCByZXNvbGUgdGhlIHByb21pc2UoKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXdzQ2FsbDxcbiAgU3ZjIGV4dGVuZHMgQVdTLlNlcnZpY2UsXG4gIENhbGxzIGV4dGVuZHMgU2VydmljZUNhbGxzPFN2Yz4sXG4gIENhbGwgZXh0ZW5kcyBrZXlvZiBDYWxscyxcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG4+KGN0b3I6IG5ldyAoY29uZmlnOiBhbnkpID0+IFN2YywgY29uZmlnOiBhbnksIGNhbGw6IENhbGwsIHJlcXVlc3Q6IEZpcnN0PENhbGxzW0NhbGxdPik6IFByb21pc2U8U2Vjb25kPENhbGxzW0NhbGxdPj4ge1xuICBjb25zdCBjZm4gPSBuZXcgY3Rvcihjb25maWcpO1xuICBjb25zdCByZXNwb25zZSA9ICgoY2ZuIGFzIGFueSlbY2FsbF0gYXMgYW55KShyZXF1ZXN0KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzcG9uc2UucHJvbWlzZSgpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBjb25zdCBuZXdFcnIgPSBuZXcgRXJyb3IoYCR7U3RyaW5nKGNhbGwpfSgke0pTT04uc3RyaW5naWZ5KHJlcXVlc3QpfSk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIChuZXdFcnIgYXMgYW55KS5jb2RlID0gZS5jb2RlO1xuICAgIHRocm93IG5ld0VycjtcbiAgfVxufVxuXG50eXBlIEF3c0NhbGxlcjxBPiA9IDxCIGV4dGVuZHMga2V5b2YgU2VydmljZUNhbGxzPEE+PihjYWxsOiBCLCByZXF1ZXN0OiBGaXJzdDxTZXJ2aWNlQ2FsbHM8QT5bQl0+KSA9PiBQcm9taXNlPFNlY29uZDxTZXJ2aWNlQ2FsbHM8QT5bQl0+PjtcblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGludm9rZSAnYXdzQ2FsbCcgZm9yIHNwZWNpZmljIHNlcnZpY2VzLlxuICpcbiAqIE5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGNhbGxpbmcgdGhpcyByZXBsYWNlcyBhIHdob2xlIGJ1bmNoIG9mIGFubm95aW5nIGdlbmVyaWNzIHlvdSBvdGhlcndpc2UgaGF2ZSB0byB0eXBlOlxuICpcbiAqIGBgYHRzXG4gKiBleHBvcnQgZnVuY3Rpb24gY2xvdWRGb3JtYXRpb248XG4gKiAgIEMgZXh0ZW5kcyBrZXlvZiBTZXJ2aWNlQ2FsbHM8QVdTLkNsb3VkRm9ybWF0aW9uPixcbiAqID4oY2FsbDogQywgcmVxdWVzdDogRmlyc3Q8U2VydmljZUNhbGxzPEFXUy5DbG91ZEZvcm1hdGlvbj5bQ10+KTogUHJvbWlzZTxTZWNvbmQ8U2VydmljZUNhbGxzPEFXUy5DbG91ZEZvcm1hdGlvbj5bQ10+PiB7XG4gKiAgIHJldHVybiBhd3NDYWxsKEFXUy5DbG91ZEZvcm1hdGlvbiwgY2FsbCwgcmVxdWVzdCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcbmZ1bmN0aW9uIG1ha2VBd3NDYWxsZXI8QSBleHRlbmRzIEFXUy5TZXJ2aWNlPihjdG9yOiBuZXcgKGNvbmZpZzogYW55KSA9PiBBLCBjb25maWc6IGFueSk6IEF3c0NhbGxlcjxBPiB7XG4gIHJldHVybiA8QiBleHRlbmRzIGtleW9mIFNlcnZpY2VDYWxsczxBPj4oY2FsbDogQiwgcmVxdWVzdDogRmlyc3Q8U2VydmljZUNhbGxzPEE+W0JdPik6IFByb21pc2U8U2Vjb25kPFNlcnZpY2VDYWxsczxBPltCXT4+ID0+IHtcbiAgICByZXR1cm4gYXdzQ2FsbChjdG9yLCBjb25maWcsIGNhbGwsIHJlcXVlc3QpO1xuICB9O1xufVxuXG50eXBlIFNlcnZpY2VDYWxsczxUPiA9IE5vTmF5TmV2ZXI8U2ltcGxpZmllZFNlcnZpY2U8VD4+O1xuLy8gTWFwIGV2ZXIgbWVtYmVyIGluIHRoZSB0eXBlIHRvIHRoZSBpbXBvcnRhbnQgQVdTIGNhbGwgb3ZlcmxvYWQsIG9yIHRvICduZXZlcidcbnR5cGUgU2ltcGxpZmllZFNlcnZpY2U8VD4gPSB7W2sgaW4ga2V5b2YgVF06IEF3c0NhbGxJTzxUW2tdPn07XG4vLyBSZW1vdmUgYWxsICduZXZlcicgdHlwZXMgZnJvbSBhbiBvYmplY3QgdHlwZVxudHlwZSBOb05heU5ldmVyPFQ+ID0gUGljazxULCB7W2sgaW4ga2V5b2YgVF06IFRba10gZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogayB9W2tleW9mIFRdPjtcblxuLy8gQmVjYXVzZSBvZiB0aGUgb3ZlcmxvYWRzIGFuIEFXUyBoYW5kbGVyIHR5cGUgbG9va3MgbGlrZSB0aGlzOlxuLy9cbi8vICAge1xuLy8gICAgICAocGFyYW1zOiBJTlBVVFNUUlVDVCwgY2FsbGJhY2s/OiAoKGVycjogQVdTRXJyb3IsIGRhdGE6IHt9KSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk6IFJlcXVlc3Q8T1VUUFVULCAuLi4+O1xuLy8gICAgICAoY2FsbGJhY2s/OiAoKGVycjogQVdTLkFXU0Vycm9yLCBkYXRhOiB7fSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiBBV1MuUmVxdWVzdDwuLi4+O1xuLy8gICB9XG4vL1xuLy8gR2V0IHRoZSBmaXJzdCBvdmVybG9hZCBhbmQgZXh0cmFjdCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzdHJ1Y3QgdHlwZXNcbnR5cGUgQXdzQ2FsbElPPFQ+ID1cbiAgVCBleHRlbmRzIHtcbiAgICAoYXJnczogaW5mZXIgSU5QVVQsIGNhbGxiYWNrPzogKChlcnI6IEFXUy5BV1NFcnJvciwgZGF0YTogYW55KSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk6IEFXUy5SZXF1ZXN0PGluZmVyIE9VVFBVVCwgQVdTLkFXU0Vycm9yPjtcbiAgICAoY2FsbGJhY2s/OiAoKGVycjogQVdTLkFXU0Vycm9yLCBkYXRhOiB7fSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiBBV1MuUmVxdWVzdDxhbnksIGFueT47XG4gIH0gPyBbSU5QVVQsIE9VVFBVVF0gOiBuZXZlcjtcblxudHlwZSBGaXJzdDxUPiA9IFQgZXh0ZW5kcyBbYW55LCBhbnldID8gVFswXSA6IG5ldmVyO1xudHlwZSBTZWNvbmQ8VD4gPSBUIGV4dGVuZHMgW2FueSwgYW55XSA/IFRbMV0gOiBuZXZlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhY2tNaXNzaW5nRXJyb3IoZTogRXJyb3IpIHtcbiAgcmV0dXJuIGUubWVzc2FnZS5pbmRleE9mKCdkb2VzIG5vdCBleGlzdCcpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0J1Y2tldE1pc3NpbmdFcnJvcihlOiBFcnJvcikge1xuICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoJ2RvZXMgbm90IGV4aXN0JykgPiAtMTtcbn1cblxuLyoqXG4gKiBSZXRyeSBhbiBhc3luYyBvcGVyYXRpb24gdW50aWwgYSBkZWFkbGluZSBpcyBoaXQuXG4gKlxuICogVXNlIGByZXRyeS5mb3JTZWNvbmRzKClgIHRvIGNvbnN0cnVjdCBhIGRlYWRsaW5lIHJlbGF0aXZlIHRvIHJpZ2h0IG5vdy5cbiAqXG4gKiBFeGNlcHRpb25zIHdpbGwgY2F1c2UgdGhlIG9wZXJhdGlvbiB0byByZXRyeS4gVXNlIGByZXRyeS5hYm9ydGAgdG8gYW5ub3RhdGUgYW4gZXhjZXB0aW9uXG4gKiB0byBzdG9wIHRoZSByZXRyeSBhbmQgZW5kIGluIGEgZmFpbHVyZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5PEE+KG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtLCBvcGVyYXRpb246IHN0cmluZywgZGVhZGxpbmU6IERhdGUsIGJsb2NrOiAoKSA9PiBQcm9taXNlPEE+KTogUHJvbWlzZTxBPiB7XG4gIGxldCBpID0gMDtcbiAgb3V0cHV0LndyaXRlKGDwn5KIICR7b3BlcmF0aW9ufVxcbmApO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpKys7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBibG9jaygpO1xuICAgICAgb3V0cHV0LndyaXRlKGDwn5KIICR7b3BlcmF0aW9ufTogc3VjY2VlZGVkIGFmdGVyICR7aX0gYXR0ZW1wdHNcXG5gKTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZS5hYm9ydCB8fCBEYXRlLm5vdygpID4gZGVhZGxpbmUuZ2V0VGltZSggKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b3BlcmF0aW9ufTogZGlkIG5vdCBzdWNjZWVkIGFmdGVyICR7aX0gYXR0ZW1wdHM6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dC53cml0ZShg4o+zICR7b3BlcmF0aW9ufSAoJHtlLm1lc3NhZ2V9KVxcbmApO1xuICAgICAgYXdhaXQgc2xlZXAoNTAwMCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWFrZSBhIGRlYWRsaW5lIGZvciB0aGUgYHJldHJ5YCBmdW5jdGlvbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB0aW1lLlxuICovXG5yZXRyeS5mb3JTZWNvbmRzID0gKHNlY29uZHM6IG51bWJlcik6IERhdGUgPT4ge1xuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHNlY29uZHMgKiAxMDAwKTtcbn07XG5cbi8qKlxuICogQW5ub3RhdGUgYW4gZXJyb3IgdG8gc3RvcCB0aGUgcmV0cnlpbmdcbiAqL1xucmV0cnkuYWJvcnQgPSAoZTogRXJyb3IpOiBFcnJvciA9PiB7XG4gIChlIGFzIGFueSkuYWJvcnQgPSB0cnVlO1xuICByZXR1cm4gZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvdXRwdXRGcm9tU3RhY2soa2V5OiBzdHJpbmcsIHN0YWNrOiBBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2spOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKHN0YWNrLk91dHB1dHMgPz8gW10pLmZpbmQobyA9PiBvLk91dHB1dEtleSA9PT0ga2V5KT8uT3V0cHV0VmFsdWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShvayA9PiBzZXRUaW1lb3V0KG9rLCBtcykpO1xufVxuXG5mdW5jdGlvbiBjaGFpbmFibGVDcmVkZW50aWFscyhyZWdpb246IHN0cmluZyk6IEFXUy5DcmVkZW50aWFscyB8IHVuZGVmaW5lZCB7XG5cbiAgY29uc3QgcHJvZmlsZU5hbWUgPSBwcm9jZXNzLmVudi5BV1NfUFJPRklMRTtcbiAgaWYgKHByb2Nlc3MuZW52LkNPREVCVUlMRF9CVUlMRF9BUk4gJiYgcHJvZmlsZU5hbWUpIHtcblxuICAgIC8vIGluIGNvZGVidWlsZCB3ZSBtdXN0IGFzc3VtZSB0aGUgcm9sZSB0aGF0IHRoZSBjZGsgdXNlc1xuICAgIC8vIG90aGVyd2lzZSBjcmVkZW50aWFscyB3aWxsIGp1c3QgYmUgcGlja2VkIHVwIGJ5IHRoZSBub3JtYWwgc2RrXG4gICAgLy8gaGV1cmlzdGljcyBhbmQgZXhwaXJlIGFmdGVyIGFuIGhvdXIuXG5cbiAgICAvLyBjYW4ndCB1c2UgJ34nIHNpbmNlIHRoZSBTREsgZG9lc24ndCBzZWVtIHRvIGV4cGFuZCBpdC4uLj9cbiAgICBjb25zdCBjb25maWdQYXRoID0gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vLmF3cy9jb25maWdgO1xuICAgIGNvbnN0IGluaSA9IG5ldyBBV1MuSW5pTG9hZGVyKCkubG9hZEZyb20oe1xuICAgICAgZmlsZW5hbWU6IGNvbmZpZ1BhdGgsXG4gICAgICBpc0NvbmZpZzogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2ZpbGUgPSBpbmlbcHJvZmlsZU5hbWVdO1xuXG4gICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2ZpbGUgJyR7cHJvZmlsZU5hbWV9JyBkb2VzIG5vdCBleGlzdCBpbiBjb25maWcgZmlsZSAoJHtjb25maWdQYXRofSlgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcm4gPSBwcm9maWxlLnJvbGVfYXJuO1xuICAgIGNvbnN0IGV4dGVybmFsSWQgPSBwcm9maWxlLmV4dGVybmFsX2lkO1xuXG4gICAgaWYgKCFhcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcm9sZV9hcm4gZG9lcyBub3QgZXhpc3QgaW4gcHJvZmlsZSAke3Byb2ZpbGVOYW1lfWApO1xuICAgIH1cblxuICAgIGlmICghZXh0ZXJuYWxJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHRlcm5hbF9pZCBkb2VzIG5vdCBleGlzdCBpbiBwcm9maWxlICR7ZXh0ZXJuYWxJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFXUy5DaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyh7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgUm9sZUFybjogYXJuLFxuICAgICAgICBFeHRlcm5hbElkOiBleHRlcm5hbElkLFxuICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6ICdpbnRlZy10ZXN0cycsXG4gICAgICB9LFxuICAgICAgc3RzQ29uZmlnOiB7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgIH0sXG4gICAgICBtYXN0ZXJDcmVkZW50aWFsczogbmV3IEFXUy5FQ1NDcmVkZW50aWFscygpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk-testing/cli-integ",
|
|
3
3
|
"description": "Integration tests for the AWS CDK CLI",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.143.0",
|
|
5
5
|
"bin": {
|
|
6
6
|
"run-suite": "bin/run-suite",
|
|
7
7
|
"download-and-run-old-tests": "bin/download-and-run-old-tests",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
"license": "Apache-2.0",
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
33
|
-
"@
|
|
32
|
+
"@aws-cdk/cdk-build-tools": "2.143.0-alpha.0",
|
|
33
|
+
"@types/semver": "^7.5.8",
|
|
34
|
+
"@types/yargs": "^15.0.19",
|
|
34
35
|
"@types/fs-extra": "^9.0.13",
|
|
35
36
|
"@types/glob": "^7.2.0",
|
|
36
37
|
"@types/npm": "^7.19.3",
|
|
37
|
-
"@
|
|
38
|
-
"@types/yargs": "^15.0.19"
|
|
38
|
+
"@aws-cdk/pkglint": "2.143.0-alpha.0"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@octokit/rest": "^18.12.0",
|
|
@@ -126,22 +126,6 @@ class SsoInstanceAccessControlConfig extends Stack {
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
class DiffFromChangeSetStack extends Stack {
|
|
130
|
-
constructor(scope, id) {
|
|
131
|
-
super(scope, id);
|
|
132
|
-
|
|
133
|
-
const queueNameFromParameter = ssm.StringParameter.valueForStringParameter(this, 'for-queue-name-defined-by-ssm-param');
|
|
134
|
-
new sqs.Queue(this, "DiffFromChangeSetQueue", {
|
|
135
|
-
queueName: queueNameFromParameter,
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
new ssm.StringParameter(this, 'DiffFromChangeSetSSMParam', {
|
|
139
|
-
parameterName: 'DiffFromChangeSetSSMParamName',
|
|
140
|
-
stringValue: queueNameFromParameter,
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
129
|
class ListMultipleDependentStack extends Stack {
|
|
146
130
|
constructor(scope, id) {
|
|
147
131
|
super(scope, id);
|
|
@@ -701,8 +685,6 @@ switch (stackSet) {
|
|
|
701
685
|
|
|
702
686
|
const failed = new FailedStack(app, `${stackPrefix}-failed`)
|
|
703
687
|
|
|
704
|
-
new DiffFromChangeSetStack(app, `${stackPrefix}-queue-name-defined-by-ssm-param`)
|
|
705
|
-
|
|
706
688
|
// A stack that depends on the failed stack -- used to test that '-e' does not deploy the failing stack
|
|
707
689
|
const dependsOnFailed = new OutputsStack(app, `${stackPrefix}-depends-on-failed`);
|
|
708
690
|
dependsOnFailed.addDependency(failed);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This patch brings the [fix](https://github.com/aws/aws-cdk/issues/30241) into the regression suite.
|
|
@@ -772,45 +772,6 @@ describe('ci', () => {
|
|
|
772
772
|
expect(diff).not.toContain('Stack test-1');
|
|
773
773
|
expect(diff).not.toContain('There were no differences');
|
|
774
774
|
}));
|
|
775
|
-
(0, lib_1.integTest)('cdk diff picks up changes that are only present in changeset', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
776
|
-
// GIVEN
|
|
777
|
-
await fixture.aws.ssm('putParameter', {
|
|
778
|
-
Name: 'for-queue-name-defined-by-ssm-param',
|
|
779
|
-
Value: (0, lib_1.randomString)(),
|
|
780
|
-
Type: 'String',
|
|
781
|
-
Overwrite: true,
|
|
782
|
-
});
|
|
783
|
-
try {
|
|
784
|
-
await fixture.cdkDeploy('queue-name-defined-by-ssm-param');
|
|
785
|
-
// WHEN
|
|
786
|
-
// We want to change the ssm value. Then the CFN changeset will detect that the queue will be changed upon deploy.
|
|
787
|
-
await fixture.aws.ssm('putParameter', {
|
|
788
|
-
Name: 'for-queue-name-defined-by-ssm-param',
|
|
789
|
-
Value: (0, lib_1.randomString)(),
|
|
790
|
-
Type: 'String',
|
|
791
|
-
Overwrite: true,
|
|
792
|
-
});
|
|
793
|
-
const diff = await fixture.cdk(['diff', fixture.fullStackName('queue-name-defined-by-ssm-param')]);
|
|
794
|
-
// THEN
|
|
795
|
-
const normalizedPlainTextOutput = diff.replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, '') // remove all color and formatting (bolding, italic, etc)
|
|
796
|
-
.replace(/ /g, '') // remove all spaces
|
|
797
|
-
.replace(/\n/g, '') // remove all new lines
|
|
798
|
-
.replace(/\d+/g, ''); // remove all digits
|
|
799
|
-
const normalizedExpectedOutput = `
|
|
800
|
-
Resources
|
|
801
|
-
[~] AWS::SQS::Queue DiffFromChangeSetQueue DiffFromChangeSetQueue06622C07 replace
|
|
802
|
-
└─ [~] QueueName (requires replacement)
|
|
803
|
-
[~] AWS::SSM::Parameter DiffFromChangeSetSSMParam DiffFromChangeSetSSMParam92A9A723
|
|
804
|
-
└─ [~] Value`
|
|
805
|
-
.replace(/ /g, '')
|
|
806
|
-
.replace(/\n/g, '')
|
|
807
|
-
.replace(/\d+/g, '');
|
|
808
|
-
expect(normalizedPlainTextOutput).toContain(normalizedExpectedOutput);
|
|
809
|
-
}
|
|
810
|
-
finally {
|
|
811
|
-
await fixture.cdkDestroy('queue-name-defined-by-ssm-param');
|
|
812
|
-
}
|
|
813
|
-
}));
|
|
814
775
|
(0, lib_1.integTest)('deploy stack with docker asset', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
815
776
|
await fixture.cdkDeploy('docker');
|
|
816
777
|
}));
|
|
@@ -1575,4 +1536,4 @@ async function listChildren(parent, pred) {
|
|
|
1575
1536
|
async function listChildDirs(parent) {
|
|
1576
1537
|
return listChildren(parent, async (fullPath) => (await fs_1.promises.stat(fullPath)).isDirectory());
|
|
1577
1538
|
}
|
|
1578
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBZ0Q7QUFDaEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixtQ0FBeU47QUFFek4sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLElBQUEsZUFBUyxFQUFDLGtCQUFrQixFQUFFLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ2pFLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNILE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FB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QUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxLQUFLLFVBQVUsYUFBYSxDQUFDLE1BQWM7SUFDekMsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sYUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2VzIGFzIGZzLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGludGVnVGVzdCwgY2xvbmVEaXJlY3RvcnksIHNoZWxsLCB3aXRoRGVmYXVsdEZpeHR1cmUsIHJldHJ5LCBzbGVlcCwgcmFuZG9tSW50ZWdlciwgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZSwgUkVTT1VSQ0VTX0RJUiwgd2l0aENES01pZ3JhdGVGaXh0dXJlLCB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZSwgcmFuZG9tU3RyaW5nIH0gZnJvbSAnLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuZGVzY3JpYmUoJ2NpJywgKCkgPT4ge1xuICBpbnRlZ1Rlc3QoJ291dHB1dCB0byBzdGRlcnInLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywgeyBjYXB0dXJlU3RkZXJyOiB0cnVlLCBvbmx5U3RkZXJyOiB0cnVlIH0pO1xuICAgIGNvbnN0IGRpZmZPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSwgeyBjYXB0dXJlU3RkZXJyOiB0cnVlLCBvbmx5U3RkZXJyOiB0cnVlIH0pO1xuICAgIGNvbnN0IGRlc3Ryb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogdHJ1ZSwgb25seVN0ZGVycjogdHJ1ZSB9KTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS5ub3QudG9FcXVhbCgnJyk7XG4gICAgZXhwZWN0KGRlc3Ryb3lPdXRwdXQpLm5vdC50b0VxdWFsKCcnKTtcbiAgICBleHBlY3QoZGlmZk91dHB1dCkubm90LnRvRXF1YWwoJycpO1xuICB9KSk7XG4gIGRlc2NyaWJlKCdjaT10cnVlJywgKCkgPT4ge1xuICAgIGludGVnVGVzdCgnb3V0cHV0IHRvIHN0ZG91dCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuXG4gICAgICBjb25zdCBleGVjT3B0aW9ucyA9IHtcbiAgICAgICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgICBKU0lJX1NJTEVOQ0VfV0FSTklOR19LTk9XTl9CUk9LRU5fTk9ERV9WRVJTSU9OOiAndHJ1ZScsXG4gICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfVU5URVNURURfTk9ERV9WRVJTSU9OOiAndHJ1ZScsXG4gICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfREVQUkVDQVRFRF9OT0RFX1ZFUlNJT046ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCBleGVjT3B0aW9ucyk7XG4gICAgICBjb25zdCBkaWZmT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIGV4ZWNPcHRpb25zKTtcbiAgICAgIGNvbnN0IGRlc3Ryb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicsIGV4ZWNPcHRpb25zKTtcbiAgICAgIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KGRlc3Ryb3lPdXRwdXQpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KGRpZmZPdXRwdXQpLnRvRXF1YWwoJycpO1xuICAgIH0pKTtcbiAgfSk7XG59KTtcblxuaW50ZWdUZXN0KCdWUEMgTG9va3VwJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGZpeHR1cmUubG9nKCdNYWtpbmcgc3VyZSB3ZSBhcmUgY2xlYW4gYmVmb3JlIHN0YXJ0aW5nLicpO1xuICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2RlZmluZS12cGMnLCB7IG1vZEVudjogeyBFTkFCTEVfVlBDX1RFU1RJTkc6ICdERUZJTkUnIH0gfSk7XG5cbiAgZml4dHVyZS5sb2coJ1NldHRpbmcgdXA6IGNyZWF0aW5nIGEgVlBDIHdpdGgga25vd24gdGFncycpO1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVmaW5lLXZwYycsIHsgbW9kRW52OiB7IEVOQUJMRV9WUENfVEVTVElORzogJ0RFRklORScgfSB9KTtcbiAgZml4dHVyZS5sb2coJ1NldHVwIGNvbXBsZXRlIScpO1xuXG4gIGZpeHR1cmUubG9nKCdWZXJpZnlpbmcgd2UgY2FuIG5vdyBpbXBvcnQgdGhhdCBWUEMnKTtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydC12cGMnLCB7IG1vZEVudjogeyBFTkFCTEVfVlBDX1RFU1RJTkc6ICdJTVBPUlQnIH0gfSk7XG59KSk7XG5cbi8vIHRlc3RpbmcgYSBjb25zdHJ1Y3Qgd2l0aCBhIGJ1aWx0aW4gTm9kZWpzIExhbWJkYSBGdW5jdGlvbi5cbi8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgdGVzdGluZyB0aGUgczMuQnVja2V0IGNvbnN0cnVjdCB3aXRoIHRoZVxuLy8gYXV0b0RlbGV0ZU9iamVjdHMgcHJvcCBzZXQgdG8gdHJ1ZSwgd2hpY2ggY3JlYXRlcyBhIExhbWJkYSBiYWNrZWRcbi8vIEN1c3RvbVJlc291cmNlLiBTaW5jZSB0aGUgY29tcGlsZWQgTGFtYmRhIGNvZGUgKGUuZy4gX19lbnRyeXBvaW50X18uanMpXG4vLyBpcyBidW5kbGVkIGFzIHBhcnQgb2YgdGhlIENESyBwYWNrYWdlLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndFxuLy8gaW50cm9kdWNlIGNoYW5nZXMgdG8gdGhlIGNvbXBpbGVkIGNvZGUgdGhhdCBjb3VsZCBwcmV2ZW50IHRoZSBMYW1iZGEgZnJvbVxuLy8gZXhlY3V0aW5nLiBJZiB3ZSBkbywgdGhpcyB0ZXN0IHdpbGwgdGltZW91dCBhbmQgZmFpbC5cbmludGVnVGVzdCgnQ29uc3RydWN0IHdpdGggYnVpbHRpbiBMYW1iZGEgZnVuY3Rpb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2J1aWx0aW4tbGFtYmRhLWZ1bmN0aW9uJyk7XG4gIGZpeHR1cmUubG9nKCdTZXR1cCBjb21wbGV0ZSEnKTtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdidWlsdGluLWxhbWJkYS1mdW5jdGlvbicpO1xufSkpO1xuXG4vLyB0aGlzIGlzIHRvIGVuc3VyZSB0aGF0IGFzc2V0IGJ1bmRsaW5nIGZvciBhcHBzIHVuZGVyIGEgc3RhZ2UgZG9lcyBub3QgYnJlYWtcbmludGVnVGVzdCgnU3RhZ2Ugd2l0aCBidW5kbGVkIExhbWJkYSBmdW5jdGlvbicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnYnVuZGxpbmctc3RhZ2UvQnVuZGxpbmdTdGFjaycpO1xuICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnYnVuZGxpbmctc3RhZ2UvQnVuZGxpbmdTdGFjaycpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ1R3byB3YXlzIG9mIHNob3dpbmcgdGhlIHZlcnNpb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgdmVyc2lvbjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3ZlcnNpb24nXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcbiAgY29uc3QgdmVyc2lvbjIgPSBhd2FpdCBmaXh0dXJlLmNkayhbJy0tdmVyc2lvbiddLCB7IHZlcmJvc2U6IGZhbHNlIH0pO1xuXG4gIGV4cGVjdCh2ZXJzaW9uMSkudG9FcXVhbCh2ZXJzaW9uMik7XG59KSk7XG5cbmludGVnVGVzdCgnVGVybWluYXRpb24gcHJvdGVjdGlvbicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBzdGFja05hbWUgPSAndGVybWluYXRpb24tcHJvdGVjdGlvbic7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSk7XG5cbiAgLy8gVHJ5IGEgZGVzdHJveSB0aGF0IHNob3VsZCBmYWlsXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNka0Rlc3Ryb3koc3RhY2tOYW1lKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gIC8vIENhbiB1cGRhdGUgdGVybWluYXRpb24gcHJvdGVjdGlvbiBldmVuIHRob3VnaCB0aGUgY2hhbmdlIHNldCBkb2Vzbid0IGNvbnRhaW4gY2hhbmdlc1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUsIHsgbW9kRW52OiB7IFRFUk1JTkFUSU9OX1BST1RFQ1RJT046ICdGQUxTRScgfSB9KTtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KHN0YWNrTmFtZSk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIHN5bnRoJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gIGV4cGVjdChmaXh0dXJlLnRlbXBsYXRlKCd0ZXN0LTEnKSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICB0b3BpYzY5ODMxNDkxOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNOUzo6VG9waWMnLFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0xL3RvcGljL1Jlc291cmNlYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSkpO1xuXG4gIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcbiAgZXhwZWN0KGZpeHR1cmUudGVtcGxhdGUoJ3Rlc3QtMicpKS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIHRvcGljMTUyRDg0QTM3OiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNOUzo6VG9waWMnLFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yL3RvcGljMS9SZXNvdXJjZWAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdG9waWMyQTRGQjU0N0Y6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U05TOjpUb3BpYycsXG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czpjZGs6cGF0aCc6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LTIvdG9waWMyL1Jlc291cmNlYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSkpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ3NzbSBwYXJhbWV0ZXIgcHJvdmlkZXIgZXJyb3InLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnc3ludGgnLFxuICAgIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlzc2luZy1zc20tcGFyYW1ldGVyJyksXG4gICAgJy1jJywgJ3Rlc3Q6c3NtLXBhcmFtZXRlci1uYW1lPS9kb2VzL25vdC9leGlzdCddLCB7XG4gICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICB9KSkucmVzb2x2ZXMudG9Db250YWluKCdTU00gcGFyYW1ldGVyIG5vdCBhdmFpbGFibGUgaW4gYWNjb3VudCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2F1dG9tYXRpYyBvcmRlcmluZycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBEZXBsb3kgdGhlIGNvbnN1bWluZyBzdGFjayB3aGljaCB3aWxsIGluY2x1ZGUgdGhlIHByb2R1Y2luZyBzdGFja1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnb3JkZXItY29uc3VtaW5nJyk7XG5cbiAgLy8gRGVzdHJveSB0aGUgcHJvdmlkaW5nIHN0YWNrIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgY29uc3VtaW5nIHN0YWNrXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnb3JkZXItcHJvdmlkaW5nJyk7XG59KSk7XG5cbmludGVnVGVzdCgnYXV0b21hdGljIG9yZGVyaW5nIHdpdGggY29uY3VycmVuY3knLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ29yZGVyLWNvbnN1bWluZycsIHsgb3B0aW9uczogWyctLWNvbmN1cnJlbmN5JywgJzInXSB9KTtcblxuICAvLyBEZXN0cm95IHRoZSBwcm92aWRpbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBjb25zdW1pbmcgc3RhY2tcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdvcmRlci1wcm92aWRpbmcnKTtcbn0pKTtcblxuaW50ZWdUZXN0KCctLWV4Y2x1c2l2ZWx5IHNlbGVjdHMgb25seSBzZWxlY3RlZCBzdGFjaycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBEZXBsb3kgdGhlIFwiZGVwZW5kcy1vbi1mYWlsZWRcIiBzdGFjaywgd2l0aCAtLWV4Y2x1c2l2ZWx5LiBJdCB3aWxsIE5PVCBmYWlsIChiZWNhdXNlXG4gIC8vIG9mIC0tZXhjbHVzaXZlbHkpIGFuZCBpdCBXSUxMIGNyZWF0ZSBhbiBvdXRwdXQgd2UgY2FuIGNoZWNrIGZvciB0byBjb25maXJtIHRoYXQgaXQgZGlkXG4gIC8vIGdldCBkZXBsb3llZC5cbiAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgJ291dHB1dHMuanNvbicpO1xuICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUob3V0cHV0c0ZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZGVwZW5kcy1vbi1mYWlsZWQnLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tZXhjbHVzaXZlbHknLFxuICAgICAgJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGUsXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gVmVyaWZ5IHRoZSBvdXRwdXQgdG8gc2VlIHRoYXQgdGhlIHN0YWNrIGRlcGxveWVkXG4gIGNvbnN0IG91dHB1dHMgPSBKU09OLnBhcnNlKChhd2FpdCBmcy5yZWFkRmlsZShvdXRwdXRzRmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkudG9TdHJpbmcoKSk7XG4gIGV4cGVjdChvdXRwdXRzKS50b0VxdWFsKHtcbiAgICBbYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LWRlcGVuZHMtb24tZmFpbGVkYF06IHtcbiAgICAgIFRvcGljTmFtZTogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LWRlcGVuZHMtb24tZmFpbGVkTXlUb3BpY2AsXG4gICAgfSxcbiAgfSk7XG59KSk7XG5cbmludGVnVGVzdCgnY29udGV4dCBzZXR0aW5nJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuY29udGV4dC5qc29uJyksIEpTT04uc3RyaW5naWZ5KHtcbiAgICBjb250ZXh0a2V5OiAndGhpcyBpcyB0aGUgY29udGV4dCB2YWx1ZScsXG4gIH0pKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydjb250ZXh0J10pKS5yZXNvbHZlcy50b0NvbnRhaW4oJ3RoaXMgaXMgdGhlIGNvbnRleHQgdmFsdWUnKTtcblxuICAgIC8vIFRlc3QgdGhhdCBkZWxldGluZyB0aGUgY29udGV4dGtleSB3b3Jrc1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnY29udGV4dCcsICctLXJlc2V0JywgJ2NvbnRleHRrZXknXSk7XG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnY29udGV4dCddKSkucmVzb2x2ZXMubm90LnRvQ29udGFpbigndGhpcyBpcyB0aGUgY29udGV4dCB2YWx1ZScpO1xuXG4gICAgLy8gVGVzdCB0aGF0IGZvcmNlZCBkZWxldGUgb2YgdGhlIGNvbnRleHQga2V5IGRvZXMgbm90IHRocm93XG4gICAgYXdhaXQgZml4dHVyZS5jZGsoWydjb250ZXh0JywgJy1mJywgJy0tcmVzZXQnLCAnY29udGV4dGtleSddKTtcblxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnVubGluayhwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuY29udGV4dC5qc29uJykpO1xuICB9XG59KSk7XG5cbmludGVnVGVzdCgnY29udGV4dCBpbiBzdGFnZSBwcm9wYWdhdGVzIHRvIHRvcCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtTeW50aCh7XG4gICAgLy8gVGhpcyB3aWxsIG1ha2UgaXQgZXJyb3IgdG8gcHJvdmUgdGhhdCB0aGUgY29udGV4dCBidWJibGVzIHVwLCBhbmQgYWxzbyB0aGF0IHdlIGNhbiBmYWlsIG9uIGNvbW1hbmRcbiAgICBvcHRpb25zOiBbJy0tbm8tbG9va3VwcyddLFxuICAgIG1vZEVudjoge1xuICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2UtdXNpbmctY29udGV4dCcsXG4gICAgfSxcbiAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gIH0pKS5yZXNvbHZlcy50b0NvbnRhaW4oJ0NvbnRleHQgbG9va3VwcyBoYXZlIGJlZW4gZGlzYWJsZWQnKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3knLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICAvLyB2ZXJpZnkgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIHN0YWNrXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tSZXNvdXJjZXMnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG4gIGV4cGVjdChyZXNwb25zZS5TdGFja1Jlc291cmNlcz8ubGVuZ3RoKS50b0VxdWFsKDIpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSAtLW1ldGhvZD1kaXJlY3QnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgIG9wdGlvbnM6IFsnLS1tZXRob2Q9ZGlyZWN0J10sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIHZlcmlmeSB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgc3RhY2tcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja1Jlc291cmNlcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgYWxsJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGFybnMgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0qJywgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGJvdGggc3RhY2tzICh0aGVyZSBhcmUgMiBBUk5zIGluIHRoZSBvdXRwdXQpXG4gIGV4cGVjdChhcm5zLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMik7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IGFsbCBjb25jdXJyZW50bHknLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgYXJucyA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LSonLCB7XG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgb3B0aW9uczogWyctLWNvbmN1cnJlbmN5JywgJzInXSxcbiAgfSk7XG5cbiAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBib3RoIHN0YWNrcyAodGhlcmUgYXJlIDIgQVJOcyBpbiB0aGUgb3V0cHV0KVxuICBleHBlY3QoYXJucy5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDIpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ25lc3RlZCBzdGFjayB3aXRoIHBhcmFtZXRlcnMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gU1RBQ0tfTkFNRV9QUkVGSVggaXMgdXNlZCBpbiBNeVRvcGljUGFyYW0gdG8gYWxsb3cgbXVsdGlwbGUgaW5zdGFuY2VzXG4gIC8vIG9mIHRoaXMgdGVzdCB0byBydW4gaW4gcGFyYWxsZWwsIG90aGV3aXNlIHRoZXkgd2lsbCBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgc2FtZSBTTlMgdG9waWMuXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrLXVzaW5nLXBhcmFtZXRlcnMnLCB7XG4gICAgb3B0aW9uczogWyctLXBhcmFtZXRlcnMnLCBgTXlUb3BpY1BhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9VGhlcmVJc05vU3Bvb25gXSxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBhIHNpbmdsZSBzdGFjayAodGhlcmUncyBhIHNpbmdsZSBBUk4gaW4gdGhlIG91dHB1dClcbiAgZXhwZWN0KHN0YWNrQXJuLnNwbGl0KCdcXG4nKS5sZW5ndGgpLnRvRXF1YWwoMSk7XG5cbiAgLy8gdmVyaWZ5IHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBzdGFja1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrUmVzb3VyY2VzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tSZXNvdXJjZXM/Lmxlbmd0aCkudG9FcXVhbCgxKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aG91dCBleGVjdXRlIGEgbmFtZWQgY2hhbmdlIHNldCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBjaGFuZ2VTZXROYW1lID0gJ2N1c3RvbS1jaGFuZ2Utc2V0LW5hbWUnO1xuICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgb3B0aW9uczogWyctLW5vLWV4ZWN1dGUnLCAnLS1jaGFuZ2Utc2V0LW5hbWUnLCBjaGFuZ2VTZXROYW1lXSxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG4gIC8vIHZlcmlmeSB0aGF0IHdlIG9ubHkgZGVwbG95ZWQgYSBzaW5nbGUgc3RhY2sgKHRoZXJlJ3MgYSBzaW5nbGUgQVJOIGluIHRoZSBvdXRwdXQpXG4gIGV4cGVjdChzdGFja0Fybi5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDEpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JFVklFV19JTl9QUk9HUkVTUycpO1xuXG4gIC8vdmVyaWZ5IGEgY2hhbmdlIHNldCB3YXMgY3JlYXRlZCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lXG4gIGNvbnN0IGNoYW5nZVNldFJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2xpc3RDaGFuZ2VTZXRzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuICBjb25zdCBjaGFuZ2VTZXRzID0gY2hhbmdlU2V0UmVzcG9uc2UuU3VtbWFyaWVzIHx8IFtdO1xuICBleHBlY3QoY2hhbmdlU2V0cy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gIGV4cGVjdChjaGFuZ2VTZXRzWzBdLkNoYW5nZVNldE5hbWUpLnRvRXF1YWwoY2hhbmdlU2V0TmFtZSk7XG4gIGV4cGVjdChjaGFuZ2VTZXRzWzBdLlN0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG59KSk7XG5cbmludGVnVGVzdCgnc2VjdXJpdHkgcmVsYXRlZCBjaGFuZ2VzIHdpdGhvdXQgYSBDTEkgYXJlIGV4cGVjdGVkIHRvIGZhaWwnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gcmVkaXJlY3QgL2Rldi9udWxsIHRvIHN0ZGluLCB3aGljaCBtZWFucyB0aGVyZSB3aWxsIG5vdCBiZSB0dHkgYXR0YWNoZWRcbiAgLy8gc2luY2UgdGhpcyBzdGFjayBpbmNsdWRlcyBzZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMsIHRoZSBkZXBsb3ltZW50IHNob3VsZFxuICAvLyBpbW1lZGlhdGVseSBmYWlsIGJlY2F1c2Ugd2UgY2FuJ3QgY29uZmlybSB0aGUgY2hhbmdlc1xuICBjb25zdCBzdGFja05hbWUgPSAnaWFtLXRlc3QnO1xuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtEZXBsb3koc3RhY2tOYW1lLCB7XG4gICAgb3B0aW9uczogWyc8JywgJy9kZXYvbnVsbCddLCAvLyBINHgsIHRoaXMgb25seSB3b3JrcyBiZWNhdXNlIEkgaGFwcGVuIHRvIGtub3cgd2UgcGFzcyBzaGVsbDogdHJ1ZS5cbiAgICBuZXZlclJlcXVpcmVBcHByb3ZhbDogZmFsc2UsXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgLy8gRW5zdXJlIHN0YWNrIHdhcyBub3QgZGVwbG95ZWRcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFja05hbWUpLFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdkb2VzIG5vdCBleGlzdCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aWxkY2FyZCB3aXRoIG91dHB1dHMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgJ291dHB1dHMuanNvbicpO1xuICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUob3V0cHV0c0ZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShbJ291dHB1dHMtdGVzdC0qJ10sIHtcbiAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICBleHBlY3Qob3V0cHV0cykudG9FcXVhbCh7XG4gICAgW2Ake2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMWBdOiB7XG4gICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMU15VG9waWNgLFxuICAgIH0sXG4gICAgW2Ake2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMmBdOiB7XG4gICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1vdXRwdXRzLXRlc3QtMk15T3RoZXJUb3BpY2AsXG4gICAgfSxcbiAgfSk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IHdpdGggcGFyYW1ldGVycycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWJhemluZ2FgLFxuICAgIF0sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuXG4gIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbChcbiAgICB7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdUb3BpY05hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YmF6aW5nYWAsXG4gICAgfSxcbiAgKTtcbn0pKTtcblxuaW50ZWdUZXN0KCd1cGRhdGUgdG8gc3RhY2sgaW4gUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgd2lsbCBkZWxldGUgc3RhY2sgYW5kIGNyZWF0ZSBhIG5ldyBvbmUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fUBhd3dgLFxuICAgIF0sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3BhcmFtLXRlc3QtMScpLFxuICB9KTtcblxuICBjb25zdCBzdGFja0FybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrSWQ7XG4gIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnUk9MTEJBQ0tfQ09NUExFVEUnKTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IG5ld1N0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGAsXG4gICAgXSxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhY2tSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IG5ld1N0YWNrQXJuLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChzdGFja0Fybikubm90LnRvRXF1YWwobmV3U3RhY2tBcm4pOyAvLyBuZXcgc3RhY2sgd2FzIGNyZWF0ZWRcbiAgZXhwZWN0KG5ld1N0YWNrUmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICBleHBlY3QobmV3U3RhY2tSZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbChcbiAgICB7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdUb3BpY05hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGAsXG4gICAgfSxcbiAgKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdzdGFjayBpbiBVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUgc3RhdGUgY2FuIGJlIHVwZGF0ZWQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgIG9wdGlvbnM6IFtcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgVG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1uaWNlYCxcbiAgICBdLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcblxuICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG5cbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcblxuICAvLyBiYWQgcGFyYW1ldGVyIG5hbWUgd2l0aCBAIHdpbGwgcHV0IHN0YWNrIGludG8gVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgIG9wdGlvbnM6IFtcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgVG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1AYXd3YCxcbiAgICBdLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpOztcblxuICByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcblxuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1VQREFURV9ST0xMQkFDS19DT01QTEVURScpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9YWxsZ29vZGAsXG4gICAgXSxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1VQREFURV9DT01QTEVURScpO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoXG4gICAge1xuICAgICAgUGFyYW1ldGVyS2V5OiAnVG9waWNOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIH0sXG4gICk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IHdpdGggd2lsZGNhcmQgYW5kIHBhcmFtZXRlcnMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtKicsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXBhcmFtLXRlc3QtMTpUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWJhemluZ2FgLFxuICAgICAgJy0tcGFyYW1ldGVycycsIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTI6T3RoZXJUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fVRoYXRzTXlTcG90YCxcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tcGFyYW0tdGVzdC0zOkRpc3BsYXlOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1IZXlUaGVyZWAsXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXBhcmFtLXRlc3QtMzpPdGhlckRpc3BsYXlOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1Bbm90aGVyT25lYCxcbiAgICBdLFxuICB9KTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aCBwYXJhbWV0ZXJzIG11bHRpJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHBhcmFtVmFsMSA9IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWJhemluZ2FgO1xuICBjb25zdCBwYXJhbVZhbDIgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH09amFnc2hlbWFzaGA7XG5cbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0zJywge1xuICAgIG9wdGlvbnM6IFtcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgRGlzcGxheU5hbWVQYXJhbT0ke3BhcmFtVmFsMX1gLFxuICAgICAgJy0tcGFyYW1ldGVycycsIGBPdGhlckRpc3BsYXlOYW1lUGFyYW09JHtwYXJhbVZhbDJ9YCxcbiAgICBdLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcblxuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoXG4gICAge1xuICAgICAgUGFyYW1ldGVyS2V5OiAnRGlzcGxheU5hbWVQYXJhbScsXG4gICAgICBQYXJhbWV0ZXJWYWx1ZTogcGFyYW1WYWwxLFxuICAgIH0sXG4gICk7XG4gIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5QYXJhbWV0ZXJzKS50b0NvbnRhaW5FcXVhbChcbiAgICB7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdPdGhlckRpc3BsYXlOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IHBhcmFtVmFsMixcbiAgICB9LFxuICApO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIG5vdGlmaWNhdGlvbiBBUk4nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgdG9waWNOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtdG9waWNgO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3Muc25zKCdjcmVhdGVUb3BpYycsIHsgTmFtZTogdG9waWNOYW1lIH0pO1xuICBjb25zdCB0b3BpY0FybiA9IHJlc3BvbnNlLlRvcGljQXJuITtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgICAgb3B0aW9uczogWyctLW5vdGlmaWNhdGlvbi1hcm5zJywgdG9waWNBcm5dLFxuICAgIH0pO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgdGhlIHN0YWNrIHdlIGRlcGxveWVkIGhhcyBvdXIgbm90aWZpY2F0aW9uIEFSTlxuICAgIGNvbnN0IGRlc2NyaWJlUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgICBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyksXG4gICAgfSk7XG4gICAgZXhwZWN0KGRlc2NyaWJlUmVzcG9uc2UuU3RhY2tzPy5bMF0uTm90aWZpY2F0aW9uQVJOcykudG9FcXVhbChbdG9waWNBcm5dKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmF3cy5zbnMoJ2RlbGV0ZVRvcGljJywge1xuICAgICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgIH0pO1xuICB9XG59KSk7XG5cbi8vIE5PVEU6IHRoaXMgZG9lc24ndCBjdXJyZW50bHkgd29yayB3aXRoIG1vZGVybi1zdHlsZSBzeW50aGVzaXMsIGFzIHRoZSBib290c3RyYXBcbi8vIHJvbGUgYnkgZGVmYXVsdCB3aWxsIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gaWFtOlBhc3NSb2xlIHRoZSBjcmVhdGVkIHJvbGUuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIHJvbGUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgaWYgKGZpeHR1cmUucGFja2FnZXMubWFqb3JWZXJzaW9uKCkgIT09ICcxJykge1xuICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkb1xuICB9XG5cbiAgY29uc3Qgcm9sZU5hbWUgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC1yb2xlYDtcblxuICBhd2FpdCBkZWxldGVSb2xlKCk7XG5cbiAgY29uc3QgY3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5pYW0oJ2NyZWF0ZVJvbGUnLCB7XG4gICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgU3RhdGVtZW50OiBbe1xuICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgIFByaW5jaXBhbDogeyBTZXJ2aWNlOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbScgfSxcbiAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgfSwge1xuICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgIFByaW5jaXBhbDogeyBBV1M6IChhd2FpdCBmaXh0dXJlLmF3cy5zdHMoJ2dldENhbGxlcklkZW50aXR5Jywge30pKS5Bcm4gfSxcbiAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgfV0sXG4gICAgfSksXG4gIH0pO1xuICBjb25zdCByb2xlQXJuID0gY3JlYXRlUmVzcG9uc2UuUm9sZS5Bcm47XG4gIHRyeSB7XG4gICAgYXdhaXQgZml4dHVyZS5hd3MuaWFtKCdwdXRSb2xlUG9saWN5Jywge1xuICAgICAgUm9sZU5hbWU6IHJvbGVOYW1lLFxuICAgICAgUG9saWN5TmFtZTogJ0RlZmF1bHRQb2xpY3knLFxuICAgICAgUG9saWN5RG9jdW1lbnQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICBTdGF0ZW1lbnQ6IFt7XG4gICAgICAgICAgQWN0aW9uOiAnKicsXG4gICAgICAgICAgUmVzb3VyY2U6ICcqJyxcbiAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgIH1dLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBhd2FpdCByZXRyeShmaXh0dXJlLm91dHB1dCwgJ1RyeWluZyB0byBhc3N1bWUgZnJlc2ggcm9sZScsIHJldHJ5LmZvclNlY29uZHMoMzAwKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZml4dHVyZS5hd3Muc3RzKCdhc3N1bWVSb2xlJywge1xuICAgICAgICBSb2xlQXJuOiByb2xlQXJuLFxuICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6ICd0ZXN0aW5nJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gSW4gcHJpbmNpcGxlLCB0aGUgcm9sZSBoYXMgcmVwbGljYXRlZCBmcm9tICd1cy1lYXN0LTEnIHRvIHdoZXJldmVyIHdlJ3JlIHRlc3RpbmcuXG4gICAgLy8gR2l2ZSBpdCBhIGxpdHRsZSBtb3JlIHNsZWVwIHRvIG1ha2Ugc3VyZSBDbG91ZEZvcm1hdGlvbiBpcyBub3QgaGl0dGluZyBhIGJveFxuICAgIC8vIHRoYXQgZG9lc24ndCBoYXZlIGl0IHlldC5cbiAgICBhd2FpdCBzbGVlcCg1MDAwKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInLCB7XG4gICAgICBvcHRpb25zOiBbJy0tcm9sZS1hcm4nLCByb2xlQXJuXSxcbiAgICB9KTtcblxuICAgIC8vIEltbWVkaWF0ZWx5IGRlbGV0ZSB0aGUgc3RhY2sgYWdhaW4gYmVmb3JlIHdlIGRlbGV0ZSB0aGUgcm9sZS5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHJvbGVzIGFyZSBzdGlja3ksIGlmIHdlIGRlbGV0ZSB0aGUgcm9sZSBiZWZvcmUgdGhlIHN0YWNrLCBzdWJzZXF1ZW50IERlbGV0ZVN0YWNrXG4gICAgLy8gb3BlcmF0aW9ucyB3aWxsIGZhaWwgd2hlbiBDbG91ZEZvcm1hdGlvbiB0cmllcyB0byBhc3N1bWUgdGhlIHJvbGUgdGhhdCdzIGFscmVhZHkgZ29uZS5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3Rlc3QtMicpO1xuXG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZGVsZXRlUm9sZSgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUm9sZSgpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBwb2xpY3lOYW1lIG9mIChhd2FpdCBmaXh0dXJlLmF3cy5pYW0oJ2xpc3RSb2xlUG9saWNpZXMnLCB7IFJvbGVOYW1lOiByb2xlTmFtZSB9KSkuUG9saWN5TmFtZXMpIHtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5hd3MuaWFtKCdkZWxldGVSb2xlUG9saWN5Jywge1xuICAgICAgICAgIFJvbGVOYW1lOiByb2xlTmFtZSxcbiAgICAgICAgICBQb2xpY3lOYW1lOiBwb2xpY3lOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLmlhbSgnZGVsZXRlUm9sZScsIHsgUm9sZU5hbWU6IHJvbGVOYW1lIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUubWVzc2FnZS5pbmRleE9mKCdjYW5ub3QgYmUgZm91bmQnKSA+IC0xKSB7IHJldHVybjsgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbn0pKTtcblxuLy8gVE9ETyBhZGQgbW9yZSB0ZXN0aW5nIHRoYXQgZW5zdXJlcyB0aGUgc3ltbWV0cnkgb2YgdGhlIGdlbmVyYXRlZCBjb25zdHJ1Y3RzIHRvIHRoZSByZXNvdXJjZXMuXG5bJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2NzaGFycCcsICdqYXZhJ10uZm9yRWFjaChsYW5ndWFnZSA9PiB7XG4gIGludGVnVGVzdChgY2RrIG1pZ3JhdGUgJHtsYW5ndWFnZX0gZGVwbG95cyBzdWNjZXNzZnVsbHlgLCB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUobGFuZ3VhZ2UsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlID09PSAncHl0aG9uJykge1xuICAgICAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ3BpcCcsICdpbnN0YWxsJywgJy1yJywgJ3JlcXVpcmVtZW50cy50eHQnXSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCwgeyBuZXZlclJlcXVpcmVBcHByb3ZhbDogdHJ1ZSwgdmVyYm9zZTogdHJ1ZSwgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSwgdHJ1ZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koZml4dHVyZS5zdGFja05hbWVQcmVmaXgpO1xuICB9KSk7XG59KTtcblxuaW50ZWdUZXN0KCdjZGsgbWlncmF0ZSBnZW5lcmF0ZXMgbWlncmF0ZS5qc29uJywgd2l0aENES01pZ3JhdGVGaXh0dXJlKCd0eXBlc2NyaXB0JywgYXN5bmMgKGZpeHR1cmUpID0+IHtcblxuICBjb25zdCBtaWdyYXRlRmlsZSA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ21pZ3JhdGUuanNvbicpLCAndXRmOCcpO1xuICBjb25zdCBleHBlY3RlZEZpbGUgPSBge1xuICAgIFxcXCIvL1xcXCI6IFxcXCJUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGNkayBtaWdyYXRlLiBJdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBhZnRlciB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBkZXBsb3ltZW50IG9mIHRoaXMgYXBwIHRvIHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgb3JpZ2luYWwgcmVzb3VyY2VzLlxcXCIsXG4gICAgXFxcIlNvdXJjZVxcXCI6IFxcXCJsb2NhbGZpbGVcXFwiXG4gIH1gO1xuICBleHBlY3QoSlNPTi5wYXJzZShtaWdyYXRlRmlsZSkpLnRvRXF1YWwoSlNPTi5wYXJzZShleHBlY3RlZEZpbGUpKTtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KGZpeHR1cmUuc3RhY2tOYW1lUHJlZml4KTtcbn0pKTtcblxuLy8gaW50ZWdUZXN0KCdjZGsgbWlncmF0ZSAtLWZyb20tc2NhbiB3aXRoIEFORC9PUiBmaWx0ZXJzIGNvcnJlY3RseSBmaWx0ZXJzIHJlc291cmNlcycsIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4vLyAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS1pbnRlZy0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWA7XG5cbi8vICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4vLyAgICAgbW9kRW52OiB7IFNBTVBMRV9SRVNPVVJDRVM6ICcxJyB9LFxuLy8gICB9KTtcbi8vICAgYXdhaXQgZml4dHVyZS5jZGsoXG4vLyAgICAgWydtaWdyYXRlJywgJy0tc3RhY2stbmFtZScsIHN0YWNrTmFtZSwgJy0tZnJvbS1zY2FuJywgJ25ldycsICctLWZpbHRlcicsICd0eXBlPUFXUzo6U05TOjpUb3BpYyx0YWcta2V5PXRhZzEnLCAndHlwZT1BV1M6OlNRUzo6UXVldWUsdGFnLWtleT10YWczJ10sXG4vLyAgICAgeyBtb2RFbnY6IHsgTUlHUkFURV9JTlRFR19URVNUOiAnMScgfSwgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4vLyAgICk7XG5cbi8vICAgdHJ5IHtcbi8vICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgICAgY29uc3QgcmVzb3VyY2VOYW1lcyA9IFtdO1xuLy8gICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzcG9uc2UuUmVzb3VyY2VzIHx8IFtdKSB7XG4vLyAgICAgICBpZiAocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQpIHtcbi8vICAgICAgICAgcmVzb3VyY2VOYW1lcy5wdXNoKHJlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkKTtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgZml4dHVyZS5sb2coYFJlc291cmNlczogJHtyZXNvdXJjZU5hbWVzfWApO1xuLy8gICAgIGV4cGVjdChyZXNvdXJjZU5hbWVzLnNvbWUoZWxlID0+IGVsZSAmJiBlbGUuaW5jbHVkZXMoJ21pZ3JhdGV0b3BpYzEnKSkpLnRvQmVUcnV0aHkoKTtcbi8vICAgICBleHBlY3QocmVzb3VyY2VOYW1lcy5zb21lKGVsZSA9PiBlbGUgJiYgZWxlLmluY2x1ZGVzKCdtaWdyYXRlcXVldWUxJykpKS50b0JlVHJ1dGh5KCk7XG4vLyAgIH0gZmluYWxseSB7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2RlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgIH1cbi8vIH0pKTtcblxuLy8gaW50ZWdUZXN0KCdjZGsgbWlncmF0ZSAtLWZyb20tc2NhbiBmb3IgcmVzb3VyY2VzIHdpdGggV3JpdGUgT25seSBQcm9wZXJ0aWVzIGdlbmVyYXRlcyB3YXJuaW5ncycsIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4vLyAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS1pbnRlZy0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWA7XG5cbi8vICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snLCB7XG4vLyAgICAgbW9kRW52OiB7XG4vLyAgICAgICBMQU1CREFfUkVTT1VSQ0VTOiAnMScsXG4vLyAgICAgfSxcbi8vICAgfSk7XG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrKFxuLy8gICAgIFsnbWlncmF0ZScsICctLXN0YWNrLW5hbWUnLCBzdGFja05hbWUsICctLWZyb20tc2NhbicsICduZXcnLCAnLS1maWx0ZXInLCAndHlwZT1BV1M6OkxhbWJkYTo6RnVuY3Rpb24sdGFnLWtleT1sYW1iZGEtdGFnJ10sXG4vLyAgICAgeyBtb2RFbnY6IHsgTUlHUkFURV9JTlRFR19URVNUOiAnMScgfSwgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4vLyAgICk7XG5cbi8vICAgdHJ5IHtcblxuLy8gICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGUnLCB7XG4vLyAgICAgICBHZW5lcmF0ZWRUZW1wbGF0ZU5hbWU6IHN0YWNrTmFtZSxcbi8vICAgICB9KTtcbi8vICAgICBjb25zdCByZXNvdXJjZU5hbWVzID0gW107XG4vLyAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNwb25zZS5SZXNvdXJjZXMgfHwgW10pIHtcbi8vICAgICAgIGlmIChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCAmJiByZXNvdXJjZS5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4vLyAgICAgICAgIHJlc291cmNlTmFtZXMucHVzaChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGZpeHR1cmUubG9nKGBSZXNvdXJjZXM6ICR7cmVzb3VyY2VOYW1lc31gKTtcbi8vICAgICBjb25zdCByZWFkbWVQYXRoID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCBzdGFja05hbWUsICdSRUFETUUubWQnKTtcbi8vICAgICBjb25zdCByZWFkbWUgPSBhd2FpdCBmcy5yZWFkRmlsZShyZWFkbWVQYXRoLCAndXRmOCcpO1xuLy8gICAgIGV4cGVjdChyZWFkbWUpLnRvQ29udGFpbignIyMgV2FybmluZ3MnKTtcbi8vICAgICBmb3IgKGNvbnN0IHJlc291cmNlTmFtZSBvZiByZXNvdXJjZU5hbWVzKSB7XG4vLyAgICAgICBleHBlY3QocmVhZG1lKS50b0NvbnRhaW4oYCMjIyAke3Jlc291cmNlTmFtZX1gKTtcbi8vICAgICB9XG4vLyAgIH0gZmluYWxseSB7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4vLyAgICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2RlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgIH1cbi8vIH0pKTtcblxuWyd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdjc2hhcnAnLCAnamF2YSddLmZvckVhY2gobGFuZ3VhZ2UgPT4ge1xuICBpbnRlZ1Rlc3QoYGNkayBtaWdyYXRlIC0tZnJvbS1zdGFjayBjcmVhdGVzIGRlcGxveWFibGUgJHtsYW5ndWFnZX0gYXBwYCwgd2l0aEV4dGVuZGVkVGltZW91dEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBjb25zdCBtaWdyYXRlU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2NyZWF0ZVN0YWNrJywge1xuICAgICAgU3RhY2tOYW1lOiBtaWdyYXRlU3RhY2tOYW1lLFxuICAgICAgVGVtcGxhdGVCb2R5OiBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAncmVzb3VyY2VzJywgJ3RlbXBsYXRlcycsICdzcXMtdGVtcGxhdGUuanNvbicpLCAndXRmOCcpLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc3RhY2tTdGF0dXMgPSAnQ1JFQVRFX0lOX1BST0dSRVNTJztcbiAgICAgIHdoaWxlIChzdGFja1N0YXR1cyA9PT0gJ0NSRUFURV9JTl9QUk9HUkVTUycpIHtcbiAgICAgICAgc3RhY2tTdGF0dXMgPSBhd2FpdCAoYXdhaXQgKGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHsgU3RhY2tOYW1lOiBtaWdyYXRlU3RhY2tOYW1lIH0pKSkuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMhO1xuICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgICAgICBbJ21pZ3JhdGUnLCAnLS1zdGFjay1uYW1lJywgbWlncmF0ZVN0YWNrTmFtZSwgJy0tZnJvbS1zdGFjayddLFxuICAgICAgICB7IG1vZEVudjogeyBNSUdSQVRFX0lOVEVHX1RFU1Q6ICcxJyB9LCBuZXZlclJlcXVpcmVBcHByb3ZhbDogdHJ1ZSwgdmVyYm9zZTogdHJ1ZSwgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnY2QnLCBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsIG1pZ3JhdGVTdGFja05hbWUpXSk7XG4gICAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ2RlcGxveScsIG1pZ3JhdGVTdGFja05hbWVdLCB7IG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLCB2ZXJib3NlOiB0cnVlLCBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgICAgICBTdGFja05hbWU6IG1pZ3JhdGVTdGFja05hbWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4gICAgfVxuICB9KSk7XG59KTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBkaWZmMSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyldKTtcbiAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ0FXUzo6U05TOjpUb3BpYycpO1xuXG4gIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICBleHBlY3QoZGlmZjIpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG5cbiAgLy8gV2UgY2FuIG1ha2UgaXQgZmFpbCBieSBwYXNzaW5nIC0tZmFpbFxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyldKSlcbiAgICAucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2VuYWJsZURpZmZOb0ZhaWwnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHsgZmFpbDogZmFsc2UsIGVuYWJsZURpZmZOb0ZhaWw6IGZhbHNlIH0pO1xuICBhd2FpdCBkaWZmU2hvdWxkU3VjY2VlZFdpdGgoeyBmYWlsOiBmYWxzZSwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcbiAgYXdhaXQgZGlmZlNob3VsZEZhaWxXaXRoKHsgZmFpbDogdHJ1ZSwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gIGF3YWl0IGRpZmZTaG91bGRGYWlsV2l0aCh7IGZhaWw6IHRydWUsIGVuYWJsZURpZmZOb0ZhaWw6IHRydWUgfSk7XG4gIGF3YWl0IGRpZmZTaG91bGRGYWlsV2l0aCh7IGZhaWw6IHVuZGVmaW5lZCwgZW5hYmxlRGlmZk5vRmFpbDogZmFsc2UgfSk7XG4gIGF3YWl0IGRpZmZTaG91bGRTdWNjZWVkV2l0aCh7IGZhaWw6IHVuZGVmaW5lZCwgZW5hYmxlRGlmZk5vRmFpbDogdHJ1ZSB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBkaWZmU2hvdWxkU3VjY2VlZFdpdGgocHJvcHM6IERpZmZQYXJhbWV0ZXJzKSB7XG4gICAgYXdhaXQgZXhwZWN0KGRpZmYocHJvcHMpKS5yZXNvbHZlcy5ub3QudG9UaHJvd0Vycm9yKCk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkaWZmU2hvdWxkRmFpbFdpdGgocHJvcHM6IERpZmZQYXJhbWV0ZXJzKSB7XG4gICAgYXdhaXQgZXhwZWN0KGRpZmYocHJvcHMpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkaWZmKHByb3BzOiBEaWZmUGFyYW1ldGVycyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdXBkYXRlQ29udGV4dChwcm9wcy5lbmFibGVEaWZmTm9GYWlsKTtcbiAgICBjb25zdCBmbGFnID0gcHJvcHMuZmFpbCAhPSBudWxsXG4gICAgICA/IChwcm9wcy5mYWlsID8gJy0tZmFpbCcgOiAnLS1uby1mYWlsJylcbiAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gZml4dHVyZS5jZGsoWydkaWZmJywgZmxhZywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ29udGV4dChlbmFibGVEaWZmTm9GYWlsOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2RrSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgY2RrSnNvbi5jb250ZXh0ID0ge1xuICAgICAgLi4uY2RrSnNvbi5jb250ZXh0LFxuICAgICAgJ2F3cy1jZGs6ZW5hYmxlRGlmZk5vRmFpbCc6IGVuYWJsZURpZmZOb0ZhaWwsXG4gICAgfTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbikpO1xuICB9XG5cbiAgdHlwZSBEaWZmUGFyYW1ldGVycyA9IHsgZmFpbD86IGJvb2xlYW47IGVuYWJsZURpZmZOb0ZhaWw6IGJvb2xlYW4gfTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiAtLWZhaWwgb24gbXVsdGlwbGUgc3RhY2tzIGV4aXRzIHdpdGggZXJyb3IgaWYgYW55IG9mIHRoZSBzdGFja3MgY29udGFpbnMgYSBkaWZmJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICBleHBlY3QoZGlmZjEpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicpO1xuICBjb25zdCBkaWZmMiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgZXhwZWN0KGRpZmYyKS50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcblxuICAvLyBXSEVOIC8gVEhFTlxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tZmFpbCB3aXRoIG11bHRpcGxlIHN0YWNrIGV4aXRzIHdpdGggaWYgYW55IG9mIHRoZSBzdGFja3MgY29udGFpbnMgYSBkaWZmJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTEnKTtcbiAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG5cbiAgY29uc3QgZGlmZjIgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSk7XG4gIGV4cGVjdChkaWZmMikudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICAvLyBXSEVOIC8gVEhFTlxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydkaWZmJywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tcGVybWlzc2lvbi1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeSBpbmZvcm1hdGlvbicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3knKV0sXG4gICk7XG4gIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgICAgICAgICAgICDilIIgUGVybWlzc2lvblNldCBuYW1lIOKUgiBQZXJtaXNzaW9uc0JvdW5kYXJ5ICAgICAgICAgICAgICAg4pSCIEN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMg4pSCXG4gICDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgIOKUgiArIOKUglxcJHtwZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5fSDilIIgYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUg4pSCIHRlc3ROYW1lICAgICAgICAgICDilIIgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlOiB7IOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCICAgTmFtZTogd2h5LCBQYXRoOiAvaG93LyAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgIOKUgiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG5gO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdSZXNvdXJjZScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdwZXJtaXNzaW9uLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5Jyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUnKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0IG5hbWUnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigndGVzdE5hbWUnKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uc0JvdW5kYXJ5Jyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZTogeycpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdOYW1lOiB3aHksIFBhdGg6IC9ob3cvJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ30nKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzJyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1wZXJtaXNzaW9uLXNldC13aXRoLW1hbmFnZWQtcG9saWN5IGluZm9ybWF0aW9uJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICBbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpXSxcbiAgKTtcbiAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEluc3RhbmNlQXJuICAgICAgICAgICAgICAgICAgICAgIOKUgiBQZXJtaXNzaW9uU2V0IG5hbWUg4pSCIFBlcm1pc3Npb25zQm91bmRhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMg4pSCXG4gICDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgIOKUgiArIOKUglxcJHtwZXJtaXNzaW9uLXNldC13aXRoLW1hbmFnZWQtcG9saWN5fSAgICDilIIgYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUg4pSCIG5pY2VXb3JrICAgICAgICAgICDilIIgTWFuYWdlZFBvbGljeUFybjogYXJuOmF3czppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2VzcyDilIIgTmFtZTogZm9yU1NPLCBQYXRoOiAgICAgICAgICAgICDilIJcbmA7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigncGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0luc3RhbmNlQXJuJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvblNldCBuYW1lJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ25pY2VXb3JrJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvbnNCb3VuZGFyeScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdNYW5hZ2VkUG9saWN5QXJuOiBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcycpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdOYW1lOiBmb3JTU08sIFBhdGg6Jyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IHN1Y2Nlc3NmdWxseSBvdXRwdXRzIHNzby1hc3NpZ25tZW50IGluZm9ybWF0aW9uJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICBbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYXNzaWdubWVudCcpXSxcbiAgKTtcbiAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAg4pSCIEluc3RhbmNlQXJuICAgICAgICAgICAgICAgICAgICAgIOKUgiBQZXJtaXNzaW9uU2V0QXJuICAgICAgICDilIIgUHJpbmNpcGFsSWQgICAgICAgICAgICAgICAgICDilIIgUHJpbmNpcGFsVHlwZSDilIIgVGFyZ2V0SWQgICAgIOKUgiBUYXJnZXRUeXBlICDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke2Fzc2lnbm1lbnR9IOKUgiBhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZSDilIIgYXJuOmF3czpzc286Ojp0ZXN0dmFsdWUg4pSCIDExMTExMTExLTIyMjItMzMzMy00NDQ0LXRlc3Qg4pSCIFVTRVIgICAgICAgICAg4pSCIDExMTExMTExMTExMSDilIIgQVdTX0FDQ09VTlQg4pSCXG4gICDilJTilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbmA7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fzc2lnbm1lbnQnKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25TZXRBcm4nKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286Ojp0ZXN0dmFsdWUnKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdQcmluY2lwYWxJZCcpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCcxMTExMTExMS0yMjIyLTMzMzMtNDQ0NC10ZXN0Jyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUHJpbmNpcGFsVHlwZScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdVU0VSJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignVGFyZ2V0SWQnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignMTExMTExMTExMTExJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignVGFyZ2V0VHlwZScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdBV1NfQUNDT1VOVCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tYWNjZXNzLWNvbnRyb2wgaW5mb3JtYXRpb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgIFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hY2Nlc3MtY29udHJvbCcpXSxcbiAgKTtcbiAgYOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAg4pSCIFJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICDilIIgQWNjZXNzQ29udHJvbEF0dHJpYnV0ZXMgICAgICAgICDilIJcbiAgIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAg4pSCICsg4pSCXFwke2luc3RhbmNlQWNjZXNzQ29udHJvbENvbmZpZ30g4pSCIGFybjphd3M6dGVzdDp0ZXN0dmFsdWUg4pSCIEtleTogZmlyc3QsIFZhbHVlczogW2FdICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IHNlY29uZCwgVmFsdWVzOiBbYl0gICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiB0aGlyZCwgVmFsdWVzOiBbY10gICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogZm91cnRoLCBWYWx1ZXM6IFtkXSAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IGZpZnRoLCBWYWx1ZXM6IFtlXSAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiBzaXh0aCwgVmFsdWVzOiBbZl0gICAgICAgICDilIJcbiAgIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuYDtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignaW5zdGFuY2VBY2Nlc3NDb250cm9sQ29uZmlnJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUnKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdBY2Nlc3NDb250cm9sQXR0cmlidXRlcycpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZpcnN0LCBWYWx1ZXM6IFthXScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IHNlY29uZCwgVmFsdWVzOiBbYl0nKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiB0aGlyZCwgVmFsdWVzOiBbY10nKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBmb3VydGgsIFZhbHVlczogW2RdJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogZmlmdGgsIFZhbHVlczogW2VdJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogc2l4dGgsIFZhbHVlczogW2ZdJyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzbyBhY2Nlc3MgY29udHJvbCBjb25maWcnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZXhwZWN0KFxuICAgIGZpeHR1cmUuY2RrKFxuICAgICAgWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1hY2Nlc3MtY29udHJvbCcpXSxcbiAgICApLFxuICApLnJlamVjdHNcbiAgICAudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgZGlmZiBmb3Igc3NvLXBlcm0tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3knLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZXhwZWN0KFxuICAgIGZpeHR1cmUuY2RrKFxuICAgICAgWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyldLFxuICAgICksXG4gICkucmVqZWN0c1xuICAgIC50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28tcGVybS1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeScsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBhd2FpdCBleHBlY3QoXG4gICAgZml4dHVyZS5jZGsoXG4gICAgICBbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knKV0sXG4gICAgKSxcbiAgKS5yZWplY3RzXG4gICAgLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzby1hc3NpZ25tZW50Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGV4cGVjdChcbiAgICBmaXh0dXJlLmNkayhcbiAgICAgIFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYXNzaWdubWVudCcpXSxcbiAgICApLFxuICApLnJlamVjdHNcbiAgICAudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgY2hhbmdlcyBhcmUgcHJlc2VudCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBzdGFja05hbWUgPSAnaWFtLXRlc3QnO1xuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGsoWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lKV0pKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1xdWlldCBkb2VzIG5vdCBwcmludCBcXCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzXFwnIG1lc3NhZ2UgZm9yIHN0YWNrcyB3aGljaCBoYXZlIG5vIGRpZmZlcmVuY2VzJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTEnKTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCAnLS1xdWlldCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyldKTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkaWZmKS5ub3QudG9Db250YWluKCdTdGFjayB0ZXN0LTEnKTtcbiAgZXhwZWN0KGRpZmYpLm5vdC50b0NvbnRhaW4oJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXMnKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiBwaWNrcyB1cCBjaGFuZ2VzIHRoYXQgYXJlIG9ubHkgcHJlc2VudCBpbiBjaGFuZ2VzZXQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgYXdhaXQgZml4dHVyZS5hd3Muc3NtKCdwdXRQYXJhbWV0ZXInLCB7XG4gICAgTmFtZTogJ2Zvci1xdWV1ZS1uYW1lLWRlZmluZWQtYnktc3NtLXBhcmFtJyxcbiAgICBWYWx1ZTogcmFuZG9tU3RyaW5nKCksXG4gICAgVHlwZTogJ1N0cmluZycsXG4gICAgT3ZlcndyaXRlOiB0cnVlLFxuICB9KTtcblxuICB0cnkge1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdxdWV1ZS1uYW1lLWRlZmluZWQtYnktc3NtLXBhcmFtJyk7XG5cbiAgICAvLyBXSEVOXG4gICAgLy8gV2Ugd2FudCB0byBjaGFuZ2UgdGhlIHNzbSB2YWx1ZS4gVGhlbiB0aGUgQ0ZOIGNoYW5nZXNldCB3aWxsIGRldGVjdCB0aGF0IHRoZSBxdWV1ZSB3aWxsIGJlIGNoYW5nZWQgdXBvbiBkZXBsb3kuXG4gICAgYXdhaXQgZml4dHVyZS5hd3Muc3NtKCdwdXRQYXJhbWV0ZXInLCB7XG4gICAgICBOYW1lOiAnZm9yLXF1ZXVlLW5hbWUtZGVmaW5lZC1ieS1zc20tcGFyYW0nLFxuICAgICAgVmFsdWU6IHJhbmRvbVN0cmluZygpLFxuICAgICAgVHlwZTogJ1N0cmluZycsXG4gICAgICBPdmVyd3JpdGU6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdxdWV1ZS1uYW1lLWRlZmluZWQtYnktc3NtLXBhcmFtJyldKTtcblxuICAgIC8vIFRIRU5cbiAgICBjb25zdCBub3JtYWxpemVkUGxhaW5UZXh0T3V0cHV0ID0gZGlmZi5yZXBsYWNlKC9cXHgxQlxcW1swLT9dKlsgLS9dKltALX5dL2csICcnKSAvLyByZW1vdmUgYWxsIGNvbG9yIGFuZCBmb3JtYXR0aW5nIChib2xkaW5nLCBpdGFsaWMsIGV0YylcbiAgICAgIC5yZXBsYWNlKC8gL2csICcnKSAvLyByZW1vdmUgYWxsIHNwYWNlc1xuICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnJykgLy8gcmVtb3ZlIGFsbCBuZXcgbGluZXNcbiAgICAgIC5yZXBsYWNlKC9cXGQrL2csICcnKTsgLy8gcmVtb3ZlIGFsbCBkaWdpdHNcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHBlY3RlZE91dHB1dCA9IGBcbiAgICAgIFJlc291cmNlc1xuICAgICAgW35dIEFXUzo6U1FTOjpRdWV1ZSBEaWZmRnJvbUNoYW5nZVNldFF1ZXVlIERpZmZGcm9tQ2hhbmdlU2V0UXVldWUwNjYyMkMwNyByZXBsYWNlXG4gICAgICAg4pSU4pSAIFt+XSBRdWV1ZU5hbWUgKHJlcXVpcmVzIHJlcGxhY2VtZW50KVxuICAgICAgW35dIEFXUzo6U1NNOjpQYXJhbWV0ZXIgRGlmZkZyb21DaGFuZ2VTZXRTU01QYXJhbSBEaWZmRnJvbUNoYW5nZVNldFNTTVBhcmFtOTJBOUE3MjNcbiAgICAgICDilJTilIAgW35dIFZhbHVlYFxuICAgICAgLnJlcGxhY2UoLyAvZywgJycpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1xcZCsvZywgJycpO1xuICAgIGV4cGVjdChub3JtYWxpemVkUGxhaW5UZXh0T3V0cHV0KS50b0NvbnRhaW4obm9ybWFsaXplZEV4cGVjdGVkT3V0cHV0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ3F1ZXVlLW5hbWUtZGVmaW5lZC1ieS1zc20tcGFyYW0nKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSBzdGFjayB3aXRoIGRvY2tlciBhc3NldCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZG9ja2VyJyk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IGFuZCB0ZXN0IHN0YWNrIHdpdGggbGFtYmRhIGFzc2V0Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYScsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG4gIGNvbnN0IGxhbWJkYUFybiA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcbiAgaWYgKGxhbWJkYUFybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgTGFtYmRhIEFSTiBvdXRwdXQnKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuYXdzLmxhbWJkYSgnaW52b2tlJywge1xuICAgIEZ1bmN0aW9uTmFtZTogbGFtYmRhQXJuLFxuICB9KTtcblxuICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob3V0cHV0LlBheWxvYWQpKS50b0NvbnRhaW4oJ2RlYXIgYXNzZXQnKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgbHMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgbGlzdGluZyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbHMnXSwgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICBjb25zdCBleHBlY3RlZFN0YWNrcyA9IFtcbiAgICAnY29uZGl0aW9uYWwtcmVzb3VyY2UnLFxuICAgICdkb2NrZXInLFxuICAgICdkb2NrZXItd2l0aC1jdXN0b20tZmlsZScsXG4gICAgJ2ZhaWxlZCcsXG4gICAgJ2lhbS10ZXN0JyxcbiAgICAnbGFtYmRhJyxcbiAgICAnbWlzc2luZy1zc20tcGFyYW1ldGVyJyxcbiAgICAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAnb3V0cHV0cy10ZXN0LTEnLFxuICAgICdvdXRwdXRzLXRlc3QtMicsXG4gICAgJ3BhcmFtLXRlc3QtMScsXG4gICAgJ3BhcmFtLXRlc3QtMicsXG4gICAgJ3BhcmFtLXRlc3QtMycsXG4gICAgJ3Rlcm1pbmF0aW9uLXByb3RlY3Rpb24nLFxuICAgICd0ZXN0LTEnLFxuICAgICd0ZXN0LTInLFxuICAgICd3aXRoLW5lc3RlZC1zdGFjaycsXG4gICAgJ3dpdGgtbmVzdGVkLXN0YWNrLXVzaW5nLXBhcmFtZXRlcnMnLFxuICAgICdvcmRlci1jb25zdW1pbmcnLFxuICBdO1xuXG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgZXhwZWN0ZWRTdGFja3MpIHtcbiAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFjaykpO1xuICB9XG59KSk7XG5cbi8qKlxuICogVHlwZSB0byBzdG9yZSBzdGFjayBkZXBlbmRlbmNpZXMgcmVjdXJzaXZlbHlcbiAqL1xudHlwZSBEZXBlbmRlbmN5RGV0YWlscyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5RGV0YWlsc1tdO1xufTtcblxudHlwZSBTdGFja0RldGFpbHMgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llczogRGVwZW5kZW5jeURldGFpbHNbXTtcbn07XG5cbmludGVnVGVzdCgnY2RrIGxzIC0tc2hvdy1kZXBlbmRlbmNpZXMgLS1qc29uJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGxpc3RpbmcgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2xzIC0tc2hvdy1kZXBlbmRlbmNpZXMgLS1qc29uJ10sIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgY29uc3QgZXhwZWN0ZWRTdGFja3MgPSBbXG4gICAge1xuICAgICAgaWQ6ICd0ZXN0LTEnLFxuICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ29yZGVyLWNvbnN1bWluZycsXG4gICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnd2l0aC1uZXN0ZWQtc3RhY2snLFxuICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnbGlzdC1zdGFja3MnLFxuICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2xpc3Qtc3RhY2tzL0RlcGVuZGVudFN0YWNrJyxcbiAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdsaXN0LXN0YWNrcy9EZXBlbmRlbnRTdGFjay9Jbm5lckRlcGVuZGVudFN0YWNrJyxcbiAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2xpc3QtbXVsdGlwbGUtZGVwZW5kZW50LXN0YWNrcycsXG4gICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbGlzdC1tdWx0aXBsZS1kZXBlbmRlbnQtc3RhY2tzL0RlcGVuZGVudFN0YWNrMScsXG4gICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbGlzdC1tdWx0aXBsZS1kZXBlbmRlbnQtc3RhY2tzL0RlcGVuZGVudFN0YWNrMicsXG4gICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVN0YWNrRGVwZW5kZW5jaWVzKHN0YWNrOiBTdGFja0RldGFpbHMpIHtcbiAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmlkKTtcblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczogRGVwZW5kZW5jeURldGFpbHNbXSkge1xuICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGRlcGVuZGVuY3kuaWQpO1xuICAgICAgICBpZiAoZGVwZW5kZW5jeS5kZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRlRGVwZW5kZW5jaWVzKGRlcGVuZGVuY3kuZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGFjay5kZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGVEZXBlbmRlbmNpZXMoc3RhY2suZGVwZW5kZW5jaWVzKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN0YWNrIG9mIGV4cGVjdGVkU3RhY2tzKSB7XG4gICAgdmFsaWRhdGVTdGFja0RlcGVuZGVuY2llcyhzdGFjayk7XG4gIH1cbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24gLS1sb25nJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGxpc3RpbmcgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2xzIC0tc2hvdy1kZXBlbmRlbmNpZXMgLS1qc29uIC0tbG9uZyddLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gIGNvbnN0IGV4cGVjdGVkU3RhY2tzID0gW1xuICAgIHtcbiAgICAgIGlkOiAnb3JkZXItcHJvdmlkaW5nJyxcbiAgICAgIG5hbWU6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgZW52aXJvbWVudDoge1xuICAgICAgICBhY2NvdW50OiAndW5rbm93bi1hY2NvdW50JyxcbiAgICAgICAgcmVnaW9uOiAndW5rbm93bi1yZWdpb24nLFxuICAgICAgICBuYW1lOiAnYXdzOi8vdW5rbm93bi1hY2NvdW50L3Vua25vd24tcmVnaW9uJyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdvcmRlci1jb25zdW1pbmcnLFxuICAgICAgbmFtZTogJ29yZGVyLWNvbnN1bWluZycsXG4gICAgICBlbnZpcm9tZW50OiB7XG4gICAgICAgIGFjY291bnQ6ICd1bmtub3duLWFjY291bnQnLFxuICAgICAgICByZWdpb246ICd1bmtub3duLXJlZ2lvbicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly91bmtub3duLWFjY291bnQvdW5rbm93bi1yZWdpb24nLFxuICAgICAgfSxcbiAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG5cbiAgZm9yIChjb25zdCBzdGFjayBvZiBleHBlY3RlZFN0YWNrcykge1xuICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrLmlkKSk7XG4gICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2submFtZSkpO1xuICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oc3RhY2suZW52aXJvbWVudC5hY2NvdW50KTtcbiAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQubmFtZSk7XG4gICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihzdGFjay5lbnZpcm9tZW50LnJlZ2lvbik7XG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHN0YWNrLmRlcGVuZGVuY2llcykge1xuICAgICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoZGVwZW5kZW5jeS5pZCkpO1xuICAgIH1cbiAgfVxuXG59KSk7XG5cbmludGVnVGVzdCgnc3ludGhpbmcgYSBzdGFnZSB3aXRoIGVycm9ycyBsZWFkcyB0byBmYWlsdXJlJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnXSwge1xuICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtZXJyb3JzJyxcbiAgICB9LFxuICB9KTtcblxuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ1RoaXMgaXMgYW4gZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdzeW50aGluZyBhIHN0YWdlIHdpdGggZXJyb3JzIGNhbiBiZSBzdXBwcmVzc2VkJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS1uby12YWxpZGF0aW9uJ10sIHtcbiAgICBtb2RFbnY6IHtcbiAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtZXJyb3JzJyxcbiAgICB9LFxuICB9KTtcbn0pKTtcblxuaW50ZWdUZXN0KCdzeW50aCAtLXF1aWV0IGNhbiBiZSBzcGVjaWZpZWQgaW4gY2RrLmpzb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgbGV0IGNka0pzb24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksICd1dGY4JykpO1xuICBjZGtKc29uID0ge1xuICAgIC4uLmNka0pzb24sXG4gICAgcXVpZXQ6IHRydWUsXG4gIH07XG4gIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpLCBKU09OLnN0cmluZ2lmeShjZGtKc29uKSk7XG4gIGNvbnN0IHN5bnRoT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgZXhwZWN0KHN5bnRoT3V0cHV0KS5ub3QudG9Db250YWluKCd0b3BpYzE1MkQ4NEEzNycpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSBzdGFjayB3aXRob3V0IHJlc291cmNlJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIERlcGxveSB0aGUgc3RhY2sgd2l0aG91dCByZXNvdXJjZXNcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2NvbmRpdGlvbmFsLXJlc291cmNlJywgeyBtb2RFbnY6IHsgTk9fUkVTT1VSQ0U6ICdUUlVFJyB9IH0pO1xuXG4gIC8vIFRoaXMgc2hvdWxkIGhhdmUgc3VjY2VlZGVkIGJ1dCBub3QgZGVwbG95ZWQgdGhlIHN0YWNrLlxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywgeyBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnKSB9KSlcbiAgICAucmVqZWN0cy50b1Rocm93KCdjb25kaXRpb25hbC1yZXNvdXJjZSBkb2VzIG5vdCBleGlzdCcpO1xuXG4gIC8vIERlcGxveSB0aGUgc3RhY2sgd2l0aCByZXNvdXJjZXNcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2NvbmRpdGlvbmFsLXJlc291cmNlJyk7XG5cbiAgLy8gVGhlbiBhZ2FpbiBXSVRIT1VUIHJlc291cmNlcyAodGhpcyBzaG91bGQgZGVzdHJveSB0aGUgc3RhY2spXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdjb25kaXRpb25hbC1yZXNvdXJjZScsIHsgbW9kRW52OiB7IE5PX1JFU09VUkNFOiAnVFJVRScgfSB9KTtcblxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywgeyBTdGFja05hbWU6IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnKSB9KSlcbiAgICAucmVqZWN0cy50b1Rocm93KCdjb25kaXRpb25hbC1yZXNvdXJjZSBkb2VzIG5vdCBleGlzdCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSBubyBzdGFja3Mgd2l0aCAtLWlnbm9yZS1uby1zdGFja3MnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gZW1wdHkgYXJyYXkgZm9yIHN0YWNrIG5hbWVzXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KFtdLCB7XG4gICAgb3B0aW9uczogWyctLWlnbm9yZS1uby1zdGFja3MnXSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtbm8tc3RhY2tzJyxcbiAgICB9LFxuICB9KTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgbm8gc3RhY2tzIGVycm9yJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIGVtcHR5IGFycmF5IGZvciBzdGFjayBuYW1lc1xuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtEZXBsb3koW10sIHtcbiAgICBtb2RFbnY6IHtcbiAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXdpdGgtbm8tc3RhY2tzJyxcbiAgICB9LFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ0lBTSBkaWZmJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnaWFtLXRlc3QnKV0pO1xuXG4gIC8vIFJvdWdobHkgY2hlY2sgZm9yIGEgdGFibGUgbGlrZSB0aGlzOlxuICAvL1xuICAvLyDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAt4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAg4pSCIEVmZmVjdCDilIIgQWN0aW9uICAgICAgICAg4pSCIFByaW5jaXBhbCAgICAgICAgICAgICAgICAgICAgIOKUgiBDb25kaXRpb24g4pSCXG4gIC8vIOKUnOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAvLyDilIIgKyDilIIgJHtTb21lUm9sZS5Bcm59IOKUgiBBbGxvdyAg4pSCIHN0czpBc3N1bWVSb2xlIOKUgiBTZXJ2aWNlOmVjMi5hbWF6b25hd3MuY29tICAgICDilIIgICAgICAgICAgIOKUglxuICAvLyDilJTilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcblxuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJyR7U29tZVJvbGUuQXJufScpO1xuICBleHBlY3Qob3V0cHV0KS50b0NvbnRhaW4oJ3N0czpBc3N1bWVSb2xlJyk7XG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignZWMyLmFtYXpvbmF3cy5jb20nKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdmYXN0IGRlcGxveScsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyB3ZSBhcmUgdXNpbmcgYSBzdGFjayB3aXRoIGEgbmVzdGVkIHN0YWNrIGJlY2F1c2UgQ0ZOIHdpbGwgYWx3YXlzIGF0dGVtcHQgdG9cbiAgLy8gdXBkYXRlIGEgbmVzdGVkIHN0YWNrLCB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHZlcmlmeSB0aGF0IHVwZGF0ZXMgYXJlIGFjdHVhbGx5XG4gIC8vIHNraXBwZWQgdW5sZXNzIC0tZm9yY2UgaXMgc3BlY2lmaWVkLlxuICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG4gIGNvbnN0IGNoYW5nZVNldDEgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcblxuICAvLyBEZXBsb3kgdGhlIHNhbWUgc3RhY2sgYWdhaW4sIHRoZXJlIHNob3VsZCBiZSBubyBuZXcgY2hhbmdlIHNldCBjcmVhdGVkXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycpO1xuICBjb25zdCBjaGFuZ2VTZXQyID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gIGV4cGVjdChjaGFuZ2VTZXQyLkNoYW5nZVNldElkKS50b0VxdWFsKGNoYW5nZVNldDEuQ2hhbmdlU2V0SWQpO1xuXG4gIC8vIERlcGxveSB0aGUgc3RhY2sgYWdhaW4gd2l0aCAtLWZvcmNlLCBub3cgd2Ugc2hvdWxkIGNyZWF0ZSBhIGNoYW5nZXNldFxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnd2l0aC1uZXN0ZWQtc3RhY2snLCB7IG9wdGlvbnM6IFsnLS1mb3JjZSddIH0pO1xuICBjb25zdCBjaGFuZ2VTZXQzID0gYXdhaXQgZ2V0TGF0ZXN0Q2hhbmdlU2V0KCk7XG4gIGV4cGVjdChjaGFuZ2VTZXQzLkNoYW5nZVNldElkKS5ub3QudG9FcXVhbChjaGFuZ2VTZXQyLkNoYW5nZVNldElkKTtcblxuICAvLyBEZXBsb3kgdGhlIHN0YWNrIGFnYWluIHdpdGggdGFncywgZXhwZWN0ZWQgdG8gY3JlYXRlIGEgbmV3IGNoYW5nZXNldFxuICAvLyBldmVuIHRob3VnaCB0aGUgcmVzb3VyY2VzIGRpZG4ndCBjaGFuZ2UuXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycsIHsgb3B0aW9uczogWyctLXRhZ3MnLCAna2V5PXZhbHVlJ10gfSk7XG4gIGNvbnN0IGNoYW5nZVNldDQgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgZXhwZWN0KGNoYW5nZVNldDQuQ2hhbmdlU2V0SWQpLm5vdC50b0VxdWFsKGNoYW5nZVNldDMuQ2hhbmdlU2V0SWQpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdENoYW5nZVNldCgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHsgU3RhY2tOYW1lOiBzdGFja0FybiB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLlN0YWNrcz8uWzBdKSB7IHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBnZXQgYSBDaGFuZ2VTZXQgYXQgYWxsJyk7IH1cbiAgICBmaXh0dXJlLmxvZyhgRm91bmQgQ2hhbmdlIFNldCAke3Jlc3BvbnNlLlN0YWNrcz8uWzBdLkNoYW5nZVNldElkfWApO1xuICAgIHJldHVybiByZXNwb25zZS5TdGFja3M/LlswXTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2ZhaWxlZCBkZXBsb3kgZG9lcyBub3QgaGFuZycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyB0aGlzIHdpbGwgaGFuZyBpZiB3ZSBpbnRyb2R1Y2UgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy82NDAzIGFnYWluLlxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtEZXBsb3koJ2ZhaWxlZCcpKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2FuIHN0aWxsIGxvYWQgb2xkIGFzc2VtYmxpZXMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgY3hBc21EaXIgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjZGstaW50ZWctY3gnKTtcblxuICBjb25zdCB0ZXN0QXNzZW1ibGllc0RpcmVjdG9yeSA9IHBhdGguam9pbihSRVNPVVJDRVNfRElSLCAnY2xvdWQtYXNzZW1ibGllcycpO1xuICBmb3IgKGNvbnN0IGFzbWRpciBvZiBhd2FpdCBsaXN0Q2hpbGREaXJzKHRlc3RBc3NlbWJsaWVzRGlyZWN0b3J5KSkge1xuICAgIGZpeHR1cmUubG9nKGBBU1NFTUJMWSAke2FzbWRpcn1gKTtcbiAgICBhd2FpdCBjbG9uZURpcmVjdG9yeShhc21kaXIsIGN4QXNtRGlyKTtcblxuICAgIC8vIFNvbWUgZmlsZXMgaW4gdGhlIGFzbSBkaXJlY3RvcnkgdGhhdCBoYXZlIGEgLmpzIGV4dGVuc2lvbiBhcmVcbiAgICAvLyBhY3R1YWxseSB0cmVhdGVkIGFzIHRlbXBsYXRlcy4gRXZhbHVhdGUgdGhlbSB1c2luZyBOb2RlSlMuXG4gICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgbGlzdENoaWxkcmVuKGN4QXNtRGlyLCBmdWxsUGF0aCA9PiBQcm9taXNlLnJlc29sdmUoZnVsbFBhdGguZW5kc1dpdGgoJy5qcycpKSk7XG4gICAgZm9yIChjb25zdCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC8uanMkLywgJycpO1xuICAgICAgYXdhaXQgc2hlbGwoW3Byb2Nlc3MuZXhlY1BhdGgsIHRlbXBsYXRlLCAnPicsIHRhcmdldE5hbWVdLCB7XG4gICAgICAgIGN3ZDogY3hBc21EaXIsXG4gICAgICAgIG91dHB1dDogZml4dHVyZS5vdXRwdXQsXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIFRFU1RfQUNDT1VOVDogYXdhaXQgZml4dHVyZS5hd3MuYWNjb3VudCgpLFxuICAgICAgICAgIFRFU1RfUkVHSU9OOiBmaXh0dXJlLmF3cy5yZWdpb24sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhpcyBkaXJlY3RvcnkgYXMgYSBDbG91ZCBBc3NlbWJseVxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFtcbiAgICAgICctLWFwcCcsIGN4QXNtRGlyLFxuICAgICAgJy12JyxcbiAgICAgICdzeW50aCcsXG4gICAgXSk7XG5cbiAgICAvLyBBc3NlcnQgdGhhdCB0aGVyZSB3YXMgbm8gcHJvdmlkZXJFcnJvciBpbiBDREsncyBzdGRlcnJcbiAgICAvLyBCZWNhdXNlIHdlIHJlbHkgb24gdGhlIGFwcC9mcmFtZXdvcmsgdG8gYWN0dWFsbHkgZXJyb3IgaW4gY2FzZSB0aGVcbiAgICAvLyBwcm92aWRlciBmYWlscywgd2UgaW5zcGVjdCB0aGUgbG9ncyBoZXJlLlxuICAgIGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJyRwcm92aWRlckVycm9yJyk7XG4gIH1cbn0pKTtcblxuaW50ZWdUZXN0KCdnZW5lcmF0aW5nIGFuZCBsb2FkaW5nIGFzc2VtYmx5Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGFzbU91dHB1dERpciA9IGAke2ZpeHR1cmUuaW50ZWdUZXN0RGlyfS1jZGstaW50ZWctYXNtYDtcbiAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ3JtJywgJy1yZicsIGFzbU91dHB1dERpcl0pO1xuXG4gIC8vIFN5bnRoZXNpemUgYSBDbG91ZCBBc3NlbWJseSB0b3RoZSBkZWZhdWx0IGRpcmVjdG9yeSAoY2RrLm91dCkgYW5kIGEgc3BlY2lmaWMgZGlyZWN0b3J5LlxuICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJ10pO1xuICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgJy0tb3V0cHV0JywgYXNtT3V0cHV0RGlyXSk7XG5cbiAgLy8gY2RrLm91dCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIHRoZSBpbmRpY2F0ZWQgLS1vdXRwdXQgc2hvdWxkIGJlIHRoZSBzYW1lXG4gIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydkaWZmJywgJ2Nkay5vdXQnLCBhc21PdXRwdXREaXJdKTtcblxuICAvLyBDaGVjayB0aGF0IHdlIGNhbiAnbHMnIHRoZSBzeW50aGVzaXplZCBhc20uXG4gIC8vIENoYW5nZSB0byBzb21lIHJhbmRvbSBkaXJlY3RvcnkgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgbG9hZGluZyBjZGsuanNvblxuICBjb25zdCBsaXN0ID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLWFwcCcsIGFzbU91dHB1dERpciwgJ2xzJ10sIHsgY3dkOiBvcy50bXBkaXIoKSB9KTtcbiAgLy8gU2FtZSBzdGFja3Mgd2Uga25vdyBhcmUgaW4gdGhlIGFwcFxuICBleHBlY3QobGlzdCkudG9Db250YWluKGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1sYW1iZGFgKTtcbiAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0xYCk7XG4gIGV4cGVjdChsaXN0KS50b0NvbnRhaW4oYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMmApO1xuXG4gIC8vIENoZWNrIHRoYXQgd2UgY2FuIHVzZSAnLicgYW5kIGp1c3Qgc3ludGggLHRoZSBnZW5lcmF0ZWQgYXNtXG4gIGNvbnN0IHN0YWNrVGVtcGxhdGUgPSBhd2FpdCBmaXh0dXJlLmNkayhbJy0tYXBwJywgJy4nLCAnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSwge1xuICAgIGN3ZDogYXNtT3V0cHV0RGlyLFxuICB9KTtcbiAgZXhwZWN0KHN0YWNrVGVtcGxhdGUpLnRvQ29udGFpbigndG9waWMxNTJEODRBMzcnKTtcblxuICAvLyBEZXBsb3kgYSBMYW1iZGEgZnJvbSB0aGUgY29waWVkIGFzbVxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhJywgeyBvcHRpb25zOiBbJy1hJywgJy4nXSwgY3dkOiBhc21PdXRwdXREaXIgfSk7XG5cbiAgLy8gUmVtb3ZlIChyZW5hbWUpIHRoZSBvcmlnaW5hbCBjdXN0b20gZG9ja2VyIGZpbGUgdGhhdCB3YXMgdXNlZCBkdXJpbmcgc3ludGguXG4gIC8vIHRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgYXNzZW1seSBoYXMgYSBjb3B5IG9mIGl0IGFuZCB0aGF0IHRoZSBtYW5pZmVzdCB1c2VzXG4gIC8vIHJlbGF0aXZlIHBhdGhzIHRvIHJlZmVyZW5jZSB0byBpdC5cbiAgY29uc3QgY3VzdG9tRG9ja2VyRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2RvY2tlcicsICdEb2NrZXJmaWxlLkN1c3RvbScpO1xuICBhd2FpdCBmcy5yZW5hbWUoY3VzdG9tRG9ja2VyRmlsZSwgYCR7Y3VzdG9tRG9ja2VyRmlsZX1+YCk7XG4gIHRyeSB7XG5cbiAgICAvLyBkZXBsb3kgYSBkb2NrZXIgaW1hZ2Ugd2l0aCBjdXN0b20gZmlsZSB3aXRob3V0IHN5bnRoICh1c2VzIGFzc2V0cylcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZG9ja2VyLXdpdGgtY3VzdG9tLWZpbGUnLCB7IG9wdGlvbnM6IFsnLWEnLCAnLiddLCBjd2Q6IGFzbU91dHB1dERpciB9KTtcblxuICB9IGZpbmFsbHkge1xuICAgIC8vIFJlbmFtZSBiYWNrIHRvIHJlc3RvcmUgZml4dHVyZSB0byBvcmlnaW5hbCBzdGF0ZVxuICAgIGF3YWl0IGZzLnJlbmFtZShgJHtjdXN0b21Eb2NrZXJGaWxlfX5gLCBjdXN0b21Eb2NrZXJGaWxlKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ3RlbXBsYXRlcyBvbiBkaXNrIGNvbnRhaW4gbWV0YWRhdGEgcmVzb3VyY2UsIGFsc28gaW4gbmVzdGVkIGFzc2VtYmxpZXMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gU3ludGggZmlyc3QsIGFuZCBzd2l0Y2ggb24gdmVyc2lvbiByZXBvcnRpbmcgYmVjYXVzZSBjZGsuanNvbiBpcyBkaXNhYmxpbmcgaXRcbiAgYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCcsICctLXZlcnNpb24tcmVwb3J0aW5nPXRydWUnXSk7XG5cbiAgLy8gTG9hZCB0ZW1wbGF0ZSBmcm9tIGRpc2sgZnJvbSByb290IGFzc2VtYmx5XG4gIGNvbnN0IHRlbXBsYXRlQ29udGVudHMgPSBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnY2F0JywgJ2Nkay5vdXQvKi1sYW1iZGEudGVtcGxhdGUuanNvbiddKTtcblxuICBleHBlY3QoSlNPTi5wYXJzZSh0ZW1wbGF0ZUNvbnRlbnRzKS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGEpLnRvQmVUcnV0aHkoKTtcblxuICAvLyBMb2FkIHRlbXBsYXRlIGZyb20gbmVzdGVkIGFzc2VtYmx5XG4gIGNvbnN0IG5lc3RlZFRlbXBsYXRlQ29udGVudHMgPSBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnY2F0JywgJ2Nkay5vdXQvYXNzZW1ibHktKi1zdGFnZS8qU3RhY2tJblN0YWdlKi50ZW1wbGF0ZS5qc29uJ10pO1xuXG4gIGV4cGVjdChKU09OLnBhcnNlKG5lc3RlZFRlbXBsYXRlQ29udGVudHMpLlJlc291cmNlcy5DREtNZXRhZGF0YSkudG9CZVRydXRoeSgpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ0NESyBzeW50aCBhZGQgdGhlIG1ldGFkYXRhIHByb3BlcnRpZXMgZXhwZWN0ZWQgYnkgc2FtJywgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBTeW50aCBmaXJzdFxuICBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKCk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBmaXh0dXJlLnRlbXBsYXRlKCdUZXN0U3RhY2snKTtcblxuICBjb25zdCBleHBlY3RlZFJlc291cmNlcyA9IFtcbiAgICB7XG4gICAgICAvLyBQeXRob24gTGF5ZXIgVmVyc2lvblxuICAgICAgaWQ6ICdQeXRob25MYXllclZlcnNpb24zOTQ5NUNFRicsXG4gICAgICBjZGtJZDogJ1B5dGhvbkxheWVyVmVyc2lvbicsXG4gICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICBwcm9wZXJ0eTogJ0NvbnRlbnQnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gTGF5ZXIgVmVyc2lvblxuICAgICAgaWQ6ICdMYXllclZlcnNpb24zODc4REEzQScsXG4gICAgICBjZGtJZDogJ0xheWVyVmVyc2lvbicsXG4gICAgICBpc0J1bmRsZWQ6IGZhbHNlLFxuICAgICAgcHJvcGVydHk6ICdDb250ZW50JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1bmRsZWQgbGF5ZXIgdmVyc2lvblxuICAgICAgaWQ6ICdCdW5kbGVkTGF5ZXJWZXJzaW9uUHl0aG9uUnVudGltZTZCQURCRDZFJyxcbiAgICAgIGNka0lkOiAnQnVuZGxlZExheWVyVmVyc2lvblB5dGhvblJ1bnRpbWUnLFxuICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgcHJvcGVydHk6ICdDb250ZW50JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIFB5dGhvbiBGdW5jdGlvblxuICAgICAgaWQ6ICdQeXRob25GdW5jdGlvbjBCQ0Y3N0ZEJyxcbiAgICAgIGNka0lkOiAnUHl0aG9uRnVuY3Rpb24nLFxuICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIExvZyBSZXRlbnRpb24gRnVuY3Rpb25cbiAgICAgIGlkOiAnTG9nUmV0ZW50aW9uYWFlMGFhM2M1YjRkNGY4N2IwMmQ4NWIyMDFlZmRkOGFGRDRCRkM4QScsXG4gICAgICBjZGtJZDogJ0xvZ1JldGVudGlvbmFhZTBhYTNjNWI0ZDRmODdiMDJkODViMjAxZWZkZDhhJyxcbiAgICAgIGlzQnVuZGxlZDogZmFsc2UsXG4gICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gRnVuY3Rpb25cbiAgICAgIGlkOiAnRnVuY3Rpb25QeXRob25SdW50aW1lMjhDQkRBMDUnLFxuICAgICAgY2RrSWQ6ICdGdW5jdGlvblB5dGhvblJ1bnRpbWUnLFxuICAgICAgaXNCdW5kbGVkOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBCdW5kbGVkIEZ1bmN0aW9uXG4gICAgICBpZDogJ0J1bmRsZWRGdW5jdGlvblB5dGhvblJ1bnRpbWU0RDlBMDkxOCcsXG4gICAgICBjZGtJZDogJ0J1bmRsZWRGdW5jdGlvblB5dGhvblJ1bnRpbWUnLFxuICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIE5vZGVKcyBGdW5jdGlvblxuICAgICAgaWQ6ICdOb2RlanNGdW5jdGlvbjA5QzFGMjBGJyxcbiAgICAgIGNka0lkOiAnTm9kZWpzRnVuY3Rpb24nLFxuICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEdvIEZ1bmN0aW9uXG4gICAgICBpZDogJ0dvRnVuY3Rpb25DQTk1RkJBQScsXG4gICAgICBjZGtJZDogJ0dvRnVuY3Rpb24nLFxuICAgICAgaXNCdW5kbGVkOiB0cnVlLFxuICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIERvY2tlciBJbWFnZSBGdW5jdGlvblxuICAgICAgaWQ6ICdEb2NrZXJJbWFnZUZ1bmN0aW9uMjhCNzczRTYnLFxuICAgICAgY2RrSWQ6ICdEb2NrZXJJbWFnZUZ1bmN0aW9uJyxcbiAgICAgIGRvY2tlckZpbGVQYXRoOiAnRG9ja2VyZmlsZScsXG4gICAgICBwcm9wZXJ0eTogJ0NvZGUuSW1hZ2VVcmknLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gU3BlYyBSZXN0IEFwaVxuICAgICAgaWQ6ICdTcGVjUmVzdEFQSTdENEIzQTM0JyxcbiAgICAgIGNka0lkOiAnU3BlY1Jlc3RBUEknLFxuICAgICAgcHJvcGVydHk6ICdCb2R5UzNMb2NhdGlvbicsXG4gICAgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGV4cGVjdGVkUmVzb3VyY2VzKSB7XG4gICAgZml4dHVyZS5vdXRwdXQud3JpdGUoYHZhbGlkYXRlIGFzc2V0cyBtZXRhZGF0YSBmb3IgcmVzb3VyY2UgJHtyZXNvdXJjZX1gKTtcbiAgICBleHBlY3QocmVzb3VyY2UuaWQgaW4gdGVtcGxhdGUuUmVzb3VyY2VzKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KHRlbXBsYXRlLlJlc291cmNlc1tyZXNvdXJjZS5pZF0pLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgJ2F3czpjZGs6cGF0aCc6IGAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnVGVzdFN0YWNrJyl9LyR7cmVzb3VyY2UuY2RrSWR9L1Jlc291cmNlYCxcbiAgICAgICAgJ2F3czphc3NldDpwYXRoJzogZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9hc3NldFxcLlswLTlhLXpBLVpdezY0fS8pLFxuICAgICAgICAnYXdzOmFzc2V0OmlzLWJ1bmRsZWQnOiByZXNvdXJjZS5pc0J1bmRsZWQsXG4gICAgICAgICdhd3M6YXNzZXQ6ZG9ja2VyZmlsZS1wYXRoJzogcmVzb3VyY2UuZG9ja2VyRmlsZVBhdGgsXG4gICAgICAgICdhd3M6YXNzZXQ6cHJvcGVydHknOiByZXNvdXJjZS5wcm9wZXJ0eSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gTmVzdGVkIFN0YWNrXG4gIGZpeHR1cmUub3V0cHV0LndyaXRlKCd2YWxpZGF0ZSBhc3NldHMgbWV0YWRhdGEgZm9yIG5lc3RlZCBzdGFjayByZXNvdXJjZScpO1xuICBleHBlY3QoJ05lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrUmVzb3VyY2VCNzA4MzRGRCcgaW4gdGVtcGxhdGUuUmVzb3VyY2VzKS50b0JlVHJ1dGh5KCk7XG4gIGV4cGVjdCh0ZW1wbGF0ZS5SZXNvdXJjZXMuTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tSZXNvdXJjZUI3MDgzNEZEKS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBNZXRhZGF0YToge1xuICAgICAgJ2F3czpjZGs6cGF0aCc6IGAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnVGVzdFN0YWNrJyl9L05lc3RlZFN0YWNrLk5lc3RlZFN0YWNrL05lc3RlZFN0YWNrLk5lc3RlZFN0YWNrUmVzb3VyY2VgLFxuICAgICAgJ2F3czphc3NldDpwYXRoJzogZXhwZWN0LnN0cmluZ01hdGNoaW5nKGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4LnJlcGxhY2UoLy0vLCAnJyl9VGVzdFN0YWNrTmVzdGVkU3RhY2tbMC05QS1aXXs4fVxcLm5lc3RlZFxcLnRlbXBsYXRlXFwuanNvbmApLFxuICAgICAgJ2F3czphc3NldDpwcm9wZXJ0eSc6ICdUZW1wbGF0ZVVSTCcsXG4gICAgfSxcbiAgfSkpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ0NESyBzeW50aCBidW5kbGVkIGZ1bmN0aW9ucyBhcyBleHBlY3RlZCcsIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gU3ludGggZmlyc3RcbiAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCgpO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gZml4dHVyZS50ZW1wbGF0ZSgnVGVzdFN0YWNrJyk7XG5cbiAgY29uc3QgZXhwZWN0ZWRCdW5kbGVkQXNzZXRzID0gW1xuICAgIHtcbiAgICAgIC8vIFB5dGhvbiBMYXllciBWZXJzaW9uXG4gICAgICBpZDogJ1B5dGhvbkxheWVyVmVyc2lvbjM5NDk1Q0VGJyxcbiAgICAgIGZpbGVzOiBbXG4gICAgICAgICdweXRob24vbGF5ZXJfdmVyc2lvbl9kZXBlbmRlbmN5LnB5JyxcbiAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JyxcbiAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbycsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gTGF5ZXIgVmVyc2lvblxuICAgICAgaWQ6ICdMYXllclZlcnNpb24zODc4REEzQScsXG4gICAgICBmaWxlczogW1xuICAgICAgICAnbGF5ZXJfdmVyc2lvbl9kZXBlbmRlbmN5LnB5JyxcbiAgICAgICAgJ3JlcXVpcmVtZW50cy50eHQnLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1bmRsZWQgbGF5ZXIgdmVyc2lvblxuICAgICAgaWQ6ICdCdW5kbGVkTGF5ZXJWZXJzaW9uUHl0aG9uUnVudGltZTZCQURCRDZFJyxcbiAgICAgIGZpbGVzOiBbXG4gICAgICAgICdweXRob24vbGF5ZXJfdmVyc2lvbl9kZXBlbmRlbmN5LnB5JyxcbiAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JyxcbiAgICAgICAgJ3B5dGhvbi9nZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbycsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gUHl0aG9uIEZ1bmN0aW9uXG4gICAgICBpZDogJ1B5dGhvbkZ1bmN0aW9uMEJDRjc3RkQnLFxuICAgICAgZmlsZXM6IFtcbiAgICAgICAgJ2FwcC5weScsXG4gICAgICAgICdnZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JyxcbiAgICAgICAgJ2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBGdW5jdGlvblxuICAgICAgaWQ6ICdGdW5jdGlvblB5dGhvblJ1bnRpbWUyOENCREEwNScsXG4gICAgICBmaWxlczogW1xuICAgICAgICAnYXBwLnB5JyxcbiAgICAgICAgJ3JlcXVpcmVtZW50cy50eHQnLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1bmRsZWQgRnVuY3Rpb25cbiAgICAgIGlkOiAnQnVuZGxlZEZ1bmN0aW9uUHl0aG9uUnVudGltZTREOUEwOTE4JyxcbiAgICAgIGZpbGVzOiBbXG4gICAgICAgICdhcHAucHknLFxuICAgICAgICAnZ2VvbmFtZXNjYWNoZS9fX2luaXRfXy5weScsXG4gICAgICAgICdnZW9uYW1lc2NhY2hlLTEuMy4wLmRpc3QtaW5mbycsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gTm9kZUpzIEZ1bmN0aW9uXG4gICAgICBpZDogJ05vZGVqc0Z1bmN0aW9uMDlDMUYyMEYnLFxuICAgICAgZmlsZXM6IFtcbiAgICAgICAgJ2luZGV4LmpzJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBHbyBGdW5jdGlvblxuICAgICAgaWQ6ICdHb0Z1bmN0aW9uQ0E5NUZCQUEnLFxuICAgICAgZmlsZXM6IFtcbiAgICAgICAgJ2Jvb3RzdHJhcCcsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gRG9ja2VyIEltYWdlIEZ1bmN0aW9uXG4gICAgICBpZDogJ0RvY2tlckltYWdlRnVuY3Rpb24yOEI3NzNFNicsXG4gICAgICBmaWxlczogW1xuICAgICAgICAnYXBwLmpzJyxcbiAgICAgICAgJ0RvY2tlcmZpbGUnLFxuICAgICAgICAncGFja2FnZS5qc29uJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGV4cGVjdGVkQnVuZGxlZEFzc2V0cykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IHRlbXBsYXRlLlJlc291cmNlc1tyZXNvdXJjZS5pZF0uTWV0YWRhdGFbJ2F3czphc3NldDpwYXRoJ107XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHJlc291cmNlLmZpbGVzKSB7XG4gICAgICBmaXh0dXJlLm91dHB1dC53cml0ZShgdmFsaWRhdGUgUGF0aCAke2ZpbGV9IGZvciByZXNvdXJjZSAke3Jlc291cmNlfWApO1xuICAgICAgZXhwZWN0KGV4aXN0c1N5bmMocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsIGFzc2V0UGF0aCwgZmlsZSkpKS50b0JlVHJ1dGh5KCk7XG4gICAgfVxuICB9XG59KSk7XG5cbmludGVnVGVzdCgnc2FtIGNhbiBsb2NhbGx5IHRlc3QgdGhlIHN5bnRoZXNpemVkIGNkayBhcHBsaWNhdGlvbicsIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gU3ludGggZmlyc3RcbiAgYXdhaXQgZml4dHVyZS5jZGtTeW50aCgpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpeHR1cmUuc2FtTG9jYWxTdGFydEFwaShcbiAgICAnVGVzdFN0YWNrJywgZmFsc2UsIHJhbmRvbUludGVnZXIoMzAwMDAsIDQwMDAwKSwgJy9yZXN0YXBpcy9zcGVjL3B5dGhvbkZ1bmN0aW9uJyk7XG4gIGV4cGVjdChyZXN1bHQuYWN0aW9uU3VjY2VlZGVkKS50b0JlVHJ1dGh5KCk7XG4gIGV4cGVjdChyZXN1bHQuYWN0aW9uT3V0cHV0KS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICBtZXNzYWdlOiAnSGVsbG8gV29ybGQnLFxuICB9KSk7XG59KSk7XG5cbmludGVnVGVzdCgnc2tpcHMgbm90aWNlIHJlZnJlc2gnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtTeW50aCh7XG4gICAgb3B0aW9uczogWyctLW5vLW5vdGljZXMnXSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXVzaW5nLWNvbnRleHQnLFxuICAgIH0sXG4gICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICB9KTtcblxuICAvLyBOZWl0aGVyIHN1Y2NlZWRzIG5vciBmYWlscywgYnV0IHNraXBzIHRoZSByZWZyZXNoXG4gIGF3YWl0IGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ05vdGljZXMgcmVmcmVzaGVkJyk7XG4gIGF3YWl0IGV4cGVjdChvdXRwdXQpLm5vdC50b0NvbnRhaW4oJ05vdGljZXMgcmVmcmVzaCBmYWlsZWQnKTtcbn0pKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBxdWV1ZSwgb3JwaGFuIHRoYXQgcXVldWUsIHRoZW4gaW1wb3J0IHRoZSBxdWV1ZS5cbiAqXG4gKiBXZSB3YW50IHRvIHRlc3Qgd2l0aCBhIGxhcmdlIHRlbXBsYXRlIHRvIG1ha2Ugc3VyZSBsYXJnZSB0ZW1wbGF0ZXMgY2FuIHdvcmsgd2l0aCBpbXBvcnQuXG4gKi9cbmludGVnVGVzdCgndGVzdCByZXNvdXJjZSBpbXBvcnQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgcmFuZG9tUHJlZml4ID0gcmFuZG9tU3RyaW5nKCk7XG4gIGNvbnN0IHVuaXF1ZU91dHB1dHNGaWxlTmFtZSA9IGAke3JhbmRvbVByZWZpeH1PdXRwdXRzLmpzb25gOyAvLyBvdGhlciB0ZXN0cyB1c2UgdGhlIG91dHB1dHMgZmlsZS4gTWFrZSBzdXJlIHdlIGRvbid0IGNvbGxpZGUuXG4gIGNvbnN0IG91dHB1dHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsIHVuaXF1ZU91dHB1dHNGaWxlTmFtZSk7XG4gIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShvdXRwdXRzRmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIEZpcnN0LCBjcmVhdGUgYSBzdGFjayB0aGF0IGluY2x1ZGVzIG1hbnkgcXVldWVzLCBhbmQgb25lIHF1ZXVlIHRoYXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHN0YWNrIGJ1dCBOT1QgZGVsZXRlZCBmcm9tIEFXUy5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgbW9kRW52OiB7IExBUkdFX1RFTVBMQVRFOiAnMScsIElOQ0xVREVfU0lOR0xFX1FVRVVFOiAnMScsIFJFVEFJTl9TSU5HTEVfUVVFVUU6ICcxJyB9LFxuICAgIG9wdGlvbnM6IFsnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gIH0pO1xuXG4gIHRyeSB7XG5cbiAgICAvLyBTZWNvbmQsIG5vdyB0aGUgcXVldWUgd2Ugd2lsbCByZW1vdmUgaXMgaW4gdGhlIHN0YWNrIGFuZCBoYXMgYSBsb2dpY2FsSWQuIFdlIGNhbiBub3cgbWFrZSB0aGUgcmVzb3VyY2UgbWFwcGluZyBmaWxlLlxuICAgIC8vIFRoaXMgcmVzb3VyY2UgbWFwcGluZyBmaWxlIHdpbGwgYmUgdXNlZCB0byB0ZWxsIHRoZSBpbXBvcnQgb3BlcmF0aW9uIHdoYXQgcXVldWUgdG8gYnJpbmcgaW50byB0aGUgc3RhY2suXG4gICAgY29uc3QgZnVsbFN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnaW1wb3J0YWJsZS1zdGFjaycpO1xuICAgIGNvbnN0IG91dHB1dHMgPSBKU09OLnBhcnNlKChhd2FpdCBmcy5yZWFkRmlsZShvdXRwdXRzRmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgcXVldWVMb2dpY2FsSWQgPSBvdXRwdXRzW2Z1bGxTdGFja05hbWVdLlF1ZXVlTG9naWNhbElkO1xuICAgIGNvbnN0IHF1ZXVlUmVzb3VyY2VNYXAgPSB7XG4gICAgICBbcXVldWVMb2dpY2FsSWRdOiB7IFF1ZXVlVXJsOiBvdXRwdXRzW2Z1bGxTdGFja05hbWVdLlF1ZXVlVXJsIH0sXG4gICAgfTtcbiAgICBjb25zdCBtYXBwaW5nRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCBgJHtyYW5kb21QcmVmaXh9TWFwcGluZy5qc29uYCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgbWFwcGluZ0ZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeShxdWV1ZVJlc291cmNlTWFwKSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSxcbiAgICApO1xuXG4gICAgLy8gVGhpcmQsIHJlbW92ZSB0aGUgcXVldWUgZnJvbSB0aGUgc3RhY2ssIGJ1dCBkb24ndCBkZWxldGUgdGhlIHF1ZXVlIGZyb20gQVdTLlxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnRhYmxlLXN0YWNrJywge1xuICAgICAgbW9kRW52OiB7IExBUkdFX1RFTVBMQVRFOiAnMScsIElOQ0xVREVfU0lOR0xFX1FVRVVFOiAnMCcsIFJFVEFJTl9TSU5HTEVfUVVFVUU6ICcwJyB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0ID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2dldFRlbXBsYXRlJywgeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSk7XG4gICAgZXhwZWN0KGNmblRlbXBsYXRlQmVmb3JlSW1wb3J0LlRlbXBsYXRlQm9keSkubm90LnRvQ29udGFpbihxdWV1ZUxvZ2ljYWxJZCk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgICBbJ2ltcG9ydCcsICctLXJlc291cmNlLW1hcHBpbmcnLCBtYXBwaW5nRmlsZSwgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyldLFxuICAgICAgeyBtb2RFbnY6IHsgTEFSR0VfVEVNUExBVEU6ICcxJywgSU5DTFVERV9TSU5HTEVfUVVFVUU6ICcxJywgUkVUQUlOX1NJTkdMRV9RVUVVRTogJzAnIH0gfSxcbiAgICApO1xuXG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KTtcbiAgICBjb25zdCBjZm5UZW1wbGF0ZUFmdGVySW1wb3J0ID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2dldFRlbXBsYXRlJywgeyBTdGFja05hbWU6IGZ1bGxTdGFja05hbWUgfSk7XG4gICAgZXhwZWN0KGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzIVswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnSU1QT1JUX0NPTVBMRVRFJyk7XG4gICAgZXhwZWN0KGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQuVGVtcGxhdGVCb2R5KS50b0NvbnRhaW4ocXVldWVMb2dpY2FsSWQpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENsZWFuIHVwXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gIH1cbn0pKTtcblxuaW50ZWdUZXN0KCd0ZXN0IG1pZ3JhdGUgZGVwbG95bWVudCBmb3IgYXBwIHdpdGggbG9jYWxmaWxlIHNvdXJjZSBpbiBtaWdyYXRlLmpzb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgJ291dHB1dHMuanNvbicpO1xuICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUob3V0cHV0c0ZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyBJbml0aWFsIGRlcGxveVxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbWlncmF0ZS1zdGFjaycsIHtcbiAgICBtb2RFbnY6IHsgT1JQSEFOX1RPUElDOiAnMScgfSxcbiAgICBvcHRpb25zOiBbJy0tb3V0cHV0cy1maWxlJywgb3V0cHV0c0ZpbGVdLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICBjb25zdCBzdGFja05hbWUgPSBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ21pZ3JhdGUtc3RhY2snKTtcbiAgY29uc3QgcXVldWVOYW1lID0gb3V0cHV0c1tzdGFja05hbWVdLlF1ZXVlTmFtZTtcbiAgY29uc3QgcXVldWVVcmwgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVVcmw7XG4gIGNvbnN0IHF1ZXVlTG9naWNhbElkID0gb3V0cHV0c1tzdGFja05hbWVdLlF1ZXVlTG9naWNhbElkO1xuICBmaXh0dXJlLmxvZyhgQ3JlYXRlZCBxdWV1ZSAke3F1ZXVlVXJsfSBpbiBzdGFjayAke2ZpeHR1cmUuZnVsbFN0YWNrTmFtZX1gKTtcblxuICAvLyBXcml0ZSB0aGUgbWlncmF0ZSBmaWxlIGJhc2VkIG9uIHRoZSBJRCBmcm9tIHN0ZXAgb25lLCB0aGVuIGRlcGxveSB0aGUgYXBwIHdpdGggbWlncmF0ZVxuICBjb25zdCBtaWdyYXRlRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ21pZ3JhdGUuanNvbicpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgbWlncmF0ZUZpbGUsIEpTT04uc3RyaW5naWZ5KFxuICAgICAgeyBTb3VyY2U6ICdsb2NhbGZpbGUnLCBSZXNvdXJjZXM6IFt7IFJlc291cmNlVHlwZTogJ0FXUzo6U1FTOjpRdWV1ZScsIExvZ2ljYWxSZXNvdXJjZUlkOiBxdWV1ZUxvZ2ljYWxJZCwgUmVzb3VyY2VJZGVudGlmaWVyOiB7IFF1ZXVlVXJsOiBxdWV1ZVVybCB9IH1dIH0sXG4gICAgKSxcbiAgICB7IGVuY29kaW5nOiAndXRmLTgnIH0sXG4gICk7XG5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4gIGZpeHR1cmUubG9nKGBEZWxldGVkIHN0YWNrICR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lfSwgb3JwaGFuaW5nICR7cXVldWVOYW1lfWApO1xuXG4gIC8vIENyZWF0ZSBuZXcgc3RhY2sgZnJvbSBleGlzdGluZyBxdWV1ZVxuICB0cnkge1xuICAgIGZpeHR1cmUubG9nKGBEZXBsb3lpbmcgbmV3IHN0YWNrICR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lfSwgbWlncmF0aW5nICR7cXVldWVOYW1lfSBpbnRvIHN0YWNrYCk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBDbGVhbnVwXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdtaWdyYXRlLXN0YWNrJyk7XG4gIH1cbn0pKTtcblxuaW50ZWdUZXN0KCdob3Rzd2FwIGRlcGxveW1lbnQgc3VwcG9ydHMgTGFtYmRhIGZ1bmN0aW9uXFwncyBkZXNjcmlwdGlvbiBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIG1vZEVudjoge1xuICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgbW9kRW52OiB7XG4gICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcblxuICAvLyBUSEVOXG5cbiAgLy8gVGhlIGRlcGxveW1lbnQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgZnVsbCBkZXBsb3ltZW50LCB0aHVzIHRoZSBzdGFjaydzIHN0YXR1cyBtdXN0IHJlbWFpbnNcbiAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xuICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYExhbWJkYSBGdW5jdGlvbiAnJHtmdW5jdGlvbk5hbWV9JyBob3Rzd2FwcGVkIWApO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBGbjo6SW1wb3J0VmFsdWUgaW50cmluc2ljJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHRyeSB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2V4cG9ydC12YWx1ZS1zdGFjaycpO1xuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgRFlOQU1JQ19MQU1CREFfUFJPUEVSVFlfVkFMVUU6ICdvcmlnaW5hbCB2YWx1ZScsXG4gICAgICAgIFVTRV9JTVBPUlRfVkFMVUVfTEFNQkRBX1BST1BFUlRZOiAndHJ1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgICAgIFVTRV9JTVBPUlRfVkFMVUVfTEFNQkRBX1BST1BFUlRZOiAndHJ1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICAgIH0pO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LlswXS5PdXRwdXRWYWx1ZTtcblxuICAgIC8vIFRIRU5cblxuICAgIC8vIFRoZSBkZXBsb3ltZW50IHNob3VsZCBub3QgdHJpZ2dlciBhIGZ1bGwgZGVwbG95bWVudCwgdGh1cyB0aGUgc3RhY2sncyBzdGF0dXMgbXVzdCByZW1haW5zXG4gICAgLy8gXCJDUkVBVEVfQ09NUExFVEVcIlxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKGBMYW1iZGEgRnVuY3Rpb24gJyR7ZnVuY3Rpb25OYW1lfScgaG90c3dhcHBlZCFgKTtcblxuICB9IGZpbmFsbHkge1xuICAgIC8vIEVuc3VyZSBjbGVhbnVwIGluIHJldmVyc2Ugb3JkZXIgZHVlIHRvIHVzZSBvZiBpbXBvcnQvZXhwb3J0XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdsYW1iZGEtaG90c3dhcCcpO1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnZXhwb3J0LXZhbHVlLXN0YWNrJyk7XG4gIH1cbn0pKTtcblxuaW50ZWdUZXN0KCdob3Rzd2FwIGRlcGxveW1lbnQgc3VwcG9ydHMgZWNzIHNlcnZpY2UnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgIG1vZEVudjoge1xuICAgICAgRFlOQU1JQ19FQ1NfUFJPUEVSVFlfVkFMVUU6ICduZXcgdmFsdWUnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHJlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQob3V0cHV0ID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ1NlcnZpY2VOYW1lJyk/Lk91dHB1dFZhbHVlO1xuXG4gIC8vIFRIRU5cblxuICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAvLyBcIkNSRUFURV9DT01QTEVURVwiXG4gIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihgRUNTIFNlcnZpY2UgJyR7c2VydmljZU5hbWV9JyBob3Rzd2FwcGVkIWApO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2hvdHN3YXAgZGVwbG95bWVudCBmb3IgZWNzIHNlcnZpY2Ugd2FpdHMgZm9yIGRlcGxveW1lbnQgdG8gY29tcGxldGUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJywge1xuICAgIG9wdGlvbnM6IFsnLS1ob3Rzd2FwJ10sXG4gICAgbW9kRW52OiB7XG4gICAgICBEWU5BTUlDX0VDU19QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgZGVzY3JpYmVTdGFja3NSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcbiAgY29uc3QgY2x1c3Rlck5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQob3V0cHV0ID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ0NsdXN0ZXJOYW1lJyk/Lk91dHB1dFZhbHVlITtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlLlN0YWNrcz8uWzBdLk91dHB1dHM/LmZpbmQob3V0cHV0ID0+IG91dHB1dC5PdXRwdXRLZXkgPT0gJ1NlcnZpY2VOYW1lJyk/Lk91dHB1dFZhbHVlITtcblxuICAvLyBUSEVOXG5cbiAgY29uc3QgZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuZWNzKCdkZXNjcmliZVNlcnZpY2VzJywge1xuICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgIHNlcnZpY2VzOiBbc2VydmljZU5hbWVdLFxuICB9KTtcbiAgZXhwZWN0KGRlc2NyaWJlU2VydmljZXNSZXNwb25zZS5zZXJ2aWNlcz8uWzBdLmRlcGxveW1lbnRzKS50b0hhdmVMZW5ndGgoMSk7IC8vIG9ubHkgb25lIGRlcGxveW1lbnQgcHJlc2VudFxuXG59KSk7XG5cbmludGVnVGVzdCgnaG90c3dhcCBkZXBsb3ltZW50IGZvciBlY3Mgc2VydmljZSBkZXRlY3RzIGZhaWxlZCBkZXBsb3ltZW50IGFuZCBlcnJvcnMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2Vjcy1ob3Rzd2FwJyk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIFVTRV9JTlZBTElEX0VDU19IT1RTV0FQX0lNQUdFOiAndHJ1ZScsXG4gICAgfSxcbiAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKGDinYwgICR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LWVjcy1ob3Rzd2FwIGZhaWxlZDogUmVzb3VyY2VOb3RSZWFkeTogUmVzb3VyY2UgaXMgbm90IGluIHRoZSBzdGF0ZSBkZXBsb3ltZW50Q29tcGxldGVkYCk7XG4gIGV4cGVjdChkZXBsb3lPdXRwdXQpLm5vdC50b0NvbnRhaW4oJ2hvdHN3YXBwZWQhJyk7XG59KSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RDaGlsZHJlbihwYXJlbnQ6IHN0cmluZywgcHJlZDogKHg6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPikge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGF3YWl0IGZzLnJlYWRkaXIocGFyZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4ocGFyZW50LCBjaGlsZC50b1N0cmluZygpKTtcbiAgICBpZiAoYXdhaXQgcHJlZChmdWxsUGF0aCkpIHtcbiAgICAgIHJldC5wdXNoKGZ1bGxQYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdENoaWxkRGlycyhwYXJlbnQ6IHN0cmluZykge1xuICByZXR1cm4gbGlzdENoaWxkcmVuKHBhcmVudCwgYXN5bmMgKGZ1bGxQYXRoOiBzdHJpbmcpID0+IChhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKSkuaXNEaXJlY3RvcnkoKSk7XG59XG4iXX0=
|
|
1539
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaS5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBZ0Q7QUFDaEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixtQ0FBeU47QUFFek4sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLElBQUEsZUFBUyxFQUFDLGtCQUFrQixFQUFFLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ2pFLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNILE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FB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cyBhcyBmcywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIGNsb25lRGlyZWN0b3J5LCBzaGVsbCwgd2l0aERlZmF1bHRGaXh0dXJlLCByZXRyeSwgc2xlZXAsIHJhbmRvbUludGVnZXIsIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUsIFJFU09VUkNFU19ESVIsIHdpdGhDREtNaWdyYXRlRml4dHVyZSwgd2l0aEV4dGVuZGVkVGltZW91dEZpeHR1cmUsIHJhbmRvbVN0cmluZyB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmRlc2NyaWJlKCdjaScsICgpID0+IHtcbiAgaW50ZWdUZXN0KCdvdXRwdXQgdG8gc3RkZXJyJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogdHJ1ZSwgb25seVN0ZGVycjogdHJ1ZSB9KTtcbiAgICBjb25zdCBkaWZmT3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHsgY2FwdHVyZVN0ZGVycjogdHJ1ZSwgb25seVN0ZGVycjogdHJ1ZSB9KTtcbiAgICBjb25zdCBkZXN0cm95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LTInLCB7IGNhcHR1cmVTdGRlcnI6IHRydWUsIG9ubHlTdGRlcnI6IHRydWUgfSk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvRXF1YWwoJycpO1xuICAgIGV4cGVjdChkZXN0cm95T3V0cHV0KS5ub3QudG9FcXVhbCgnJyk7XG4gICAgZXhwZWN0KGRpZmZPdXRwdXQpLm5vdC50b0VxdWFsKCcnKTtcbiAgfSkpO1xuICBkZXNjcmliZSgnY2k9dHJ1ZScsICgpID0+IHtcbiAgICBpbnRlZ1Rlc3QoJ291dHB1dCB0byBzdGRvdXQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcblxuICAgICAgY29uc3QgZXhlY09wdGlvbnMgPSB7XG4gICAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIENJOiAndHJ1ZScsXG4gICAgICAgICAgSlNJSV9TSUxFTkNFX1dBUk5JTkdfS05PV05fQlJPS0VOX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgIEpTSUlfU0lMRU5DRV9XQVJOSU5HX1VOVEVTVEVEX05PREVfVkVSU0lPTjogJ3RydWUnLFxuICAgICAgICAgIEpTSUlfU0lMRU5DRV9XQVJOSU5HX0RFUFJFQ0FURURfTk9ERV9WRVJTSU9OOiAndHJ1ZScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywgZXhlY09wdGlvbnMpO1xuICAgICAgY29uc3QgZGlmZk91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCBleGVjT3B0aW9ucyk7XG4gICAgICBjb25zdCBkZXN0cm95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LTInLCBleGVjT3B0aW9ucyk7XG4gICAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChkZXN0cm95T3V0cHV0KS50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChkaWZmT3V0cHV0KS50b0VxdWFsKCcnKTtcbiAgICB9KSk7XG4gIH0pO1xufSk7XG5cbmludGVnVGVzdCgnVlBDIExvb2t1cCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBmaXh0dXJlLmxvZygnTWFraW5nIHN1cmUgd2UgYXJlIGNsZWFuIGJlZm9yZSBzdGFydGluZy4nKTtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdkZWZpbmUtdnBjJywgeyBtb2RFbnY6IHsgRU5BQkxFX1ZQQ19URVNUSU5HOiAnREVGSU5FJyB9IH0pO1xuXG4gIGZpeHR1cmUubG9nKCdTZXR0aW5nIHVwOiBjcmVhdGluZyBhIFZQQyB3aXRoIGtub3duIHRhZ3MnKTtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RlZmluZS12cGMnLCB7IG1vZEVudjogeyBFTkFCTEVfVlBDX1RFU1RJTkc6ICdERUZJTkUnIH0gfSk7XG4gIGZpeHR1cmUubG9nKCdTZXR1cCBjb21wbGV0ZSEnKTtcblxuICBmaXh0dXJlLmxvZygnVmVyaWZ5aW5nIHdlIGNhbiBub3cgaW1wb3J0IHRoYXQgVlBDJyk7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdpbXBvcnQtdnBjJywgeyBtb2RFbnY6IHsgRU5BQkxFX1ZQQ19URVNUSU5HOiAnSU1QT1JUJyB9IH0pO1xufSkpO1xuXG4vLyB0ZXN0aW5nIGEgY29uc3RydWN0IHdpdGggYSBidWlsdGluIE5vZGVqcyBMYW1iZGEgRnVuY3Rpb24uXG4vLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIHRlc3RpbmcgdGhlIHMzLkJ1Y2tldCBjb25zdHJ1Y3Qgd2l0aCB0aGVcbi8vIGF1dG9EZWxldGVPYmplY3RzIHByb3Agc2V0IHRvIHRydWUsIHdoaWNoIGNyZWF0ZXMgYSBMYW1iZGEgYmFja2VkXG4vLyBDdXN0b21SZXNvdXJjZS4gU2luY2UgdGhlIGNvbXBpbGVkIExhbWJkYSBjb2RlIChlLmcuIF9fZW50cnlwb2ludF9fLmpzKVxuLy8gaXMgYnVuZGxlZCBhcyBwYXJ0IG9mIHRoZSBDREsgcGFja2FnZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Rcbi8vIGludHJvZHVjZSBjaGFuZ2VzIHRvIHRoZSBjb21waWxlZCBjb2RlIHRoYXQgY291bGQgcHJldmVudCB0aGUgTGFtYmRhIGZyb21cbi8vIGV4ZWN1dGluZy4gSWYgd2UgZG8sIHRoaXMgdGVzdCB3aWxsIHRpbWVvdXQgYW5kIGZhaWwuXG5pbnRlZ1Rlc3QoJ0NvbnN0cnVjdCB3aXRoIGJ1aWx0aW4gTGFtYmRhIGZ1bmN0aW9uJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdidWlsdGluLWxhbWJkYS1mdW5jdGlvbicpO1xuICBmaXh0dXJlLmxvZygnU2V0dXAgY29tcGxldGUhJyk7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnYnVpbHRpbi1sYW1iZGEtZnVuY3Rpb24nKTtcbn0pKTtcblxuLy8gdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhc3NldCBidW5kbGluZyBmb3IgYXBwcyB1bmRlciBhIHN0YWdlIGRvZXMgbm90IGJyZWFrXG5pbnRlZ1Rlc3QoJ1N0YWdlIHdpdGggYnVuZGxlZCBMYW1iZGEgZnVuY3Rpb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2J1bmRsaW5nLXN0YWdlL0J1bmRsaW5nU3RhY2snKTtcbiAgZml4dHVyZS5sb2coJ1NldHVwIGNvbXBsZXRlIScpO1xuICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2J1bmRsaW5nLXN0YWdlL0J1bmRsaW5nU3RhY2snKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdUd28gd2F5cyBvZiBzaG93aW5nIHRoZSB2ZXJzaW9uJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHZlcnNpb24xID0gYXdhaXQgZml4dHVyZS5jZGsoWyd2ZXJzaW9uJ10sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG4gIGNvbnN0IHZlcnNpb24yID0gYXdhaXQgZml4dHVyZS5jZGsoWyctLXZlcnNpb24nXSwgeyB2ZXJib3NlOiBmYWxzZSB9KTtcblxuICBleHBlY3QodmVyc2lvbjEpLnRvRXF1YWwodmVyc2lvbjIpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ1Rlcm1pbmF0aW9uIHByb3RlY3Rpb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tOYW1lID0gJ3Rlcm1pbmF0aW9uLXByb3RlY3Rpb24nO1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveShzdGFja05hbWUpO1xuXG4gIC8vIFRyeSBhIGRlc3Ryb3kgdGhhdCBzaG91bGQgZmFpbFxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtEZXN0cm95KHN0YWNrTmFtZSkpLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcblxuICAvLyBDYW4gdXBkYXRlIHRlcm1pbmF0aW9uIHByb3RlY3Rpb24gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBzZXQgZG9lc24ndCBjb250YWluIGNoYW5nZXNcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koc3RhY2tOYW1lLCB7IG1vZEVudjogeyBURVJNSU5BVElPTl9QUk9URUNUSU9OOiAnRkFMU0UnIH0gfSk7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveShzdGFja05hbWUpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBzeW50aCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICBleHBlY3QoZml4dHVyZS50ZW1wbGF0ZSgndGVzdC0xJykpLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgdG9waWM2OTgzMTQ5MToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMS90b3BpYy9SZXNvdXJjZWAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pKTtcblxuICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0sIHsgdmVyYm9zZTogZmFsc2UgfSk7XG4gIGV4cGVjdChmaXh0dXJlLnRlbXBsYXRlKCd0ZXN0LTInKSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICB0b3BpYzE1MkQ4NEEzNzoge1xuICAgICAgICBUeXBlOiAnQVdTOjpTTlM6OlRvcGljJyxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3QtMi90b3BpYzEvUmVzb3VyY2VgLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRvcGljMkE0RkI1NDdGOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNOUzo6VG9waWMnLFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yL3RvcGljMi9SZXNvdXJjZWAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdzc20gcGFyYW1ldGVyIHByb3ZpZGVyIGVycm9yJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ3N5bnRoJyxcbiAgICBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ21pc3Npbmctc3NtLXBhcmFtZXRlcicpLFxuICAgICctYycsICd0ZXN0OnNzbS1wYXJhbWV0ZXItbmFtZT0vZG9lcy9ub3QvZXhpc3QnXSwge1xuICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgfSkpLnJlc29sdmVzLnRvQ29udGFpbignU1NNIHBhcmFtZXRlciBub3QgYXZhaWxhYmxlIGluIGFjY291bnQnKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdhdXRvbWF0aWMgb3JkZXJpbmcnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gRGVwbG95IHRoZSBjb25zdW1pbmcgc3RhY2sgd2hpY2ggd2lsbCBpbmNsdWRlIHRoZSBwcm9kdWNpbmcgc3RhY2tcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ29yZGVyLWNvbnN1bWluZycpO1xuXG4gIC8vIERlc3Ryb3kgdGhlIHByb3ZpZGluZyBzdGFjayB3aGljaCB3aWxsIGluY2x1ZGUgdGhlIGNvbnN1bWluZyBzdGFja1xuICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ29yZGVyLXByb3ZpZGluZycpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2F1dG9tYXRpYyBvcmRlcmluZyB3aXRoIGNvbmN1cnJlbmN5Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIERlcGxveSB0aGUgY29uc3VtaW5nIHN0YWNrIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgcHJvZHVjaW5nIHN0YWNrXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdvcmRlci1jb25zdW1pbmcnLCB7IG9wdGlvbnM6IFsnLS1jb25jdXJyZW5jeScsICcyJ10gfSk7XG5cbiAgLy8gRGVzdHJveSB0aGUgcHJvdmlkaW5nIHN0YWNrIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgY29uc3VtaW5nIHN0YWNrXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnb3JkZXItcHJvdmlkaW5nJyk7XG59KSk7XG5cbmludGVnVGVzdCgnLS1leGNsdXNpdmVseSBzZWxlY3RzIG9ubHkgc2VsZWN0ZWQgc3RhY2snLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gRGVwbG95IHRoZSBcImRlcGVuZHMtb24tZmFpbGVkXCIgc3RhY2ssIHdpdGggLS1leGNsdXNpdmVseS4gSXQgd2lsbCBOT1QgZmFpbCAoYmVjYXVzZVxuICAvLyBvZiAtLWV4Y2x1c2l2ZWx5KSBhbmQgaXQgV0lMTCBjcmVhdGUgYW4gb3V0cHV0IHdlIGNhbiBjaGVjayBmb3IgdG8gY29uZmlybSB0aGF0IGl0IGRpZFxuICAvLyBnZXQgZGVwbG95ZWQuXG4gIGNvbnN0IG91dHB1dHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsICdvdXRwdXRzLmpzb24nKTtcbiAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2RlcGVuZHMtb24tZmFpbGVkJywge1xuICAgIG9wdGlvbnM6IFtcbiAgICAgICctLWV4Y2x1c2l2ZWx5JyxcbiAgICAgICctLW91dHB1dHMtZmlsZScsIG91dHB1dHNGaWxlLFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSB0aGUgb3V0cHV0IHRvIHNlZSB0aGF0IHRoZSBzdGFjayBkZXBsb3llZFxuICBjb25zdCBvdXRwdXRzID0gSlNPTi5wYXJzZSgoYXdhaXQgZnMucmVhZEZpbGUob3V0cHV0c0ZpbGUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpLnRvU3RyaW5nKCkpO1xuICBleHBlY3Qob3V0cHV0cykudG9FcXVhbCh7XG4gICAgW2Ake2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1kZXBlbmRzLW9uLWZhaWxlZGBdOiB7XG4gICAgICBUb3BpY05hbWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1kZXBlbmRzLW9uLWZhaWxlZE15VG9waWNgLFxuICAgIH0sXG4gIH0pO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NvbnRleHQgc2V0dGluZycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmNvbnRleHQuanNvbicpLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgY29udGV4dGtleTogJ3RoaXMgaXMgdGhlIGNvbnRleHQgdmFsdWUnLFxuICB9KSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnY29udGV4dCddKSkucmVzb2x2ZXMudG9Db250YWluKCd0aGlzIGlzIHRoZSBjb250ZXh0IHZhbHVlJyk7XG5cbiAgICAvLyBUZXN0IHRoYXQgZGVsZXRpbmcgdGhlIGNvbnRleHRrZXkgd29ya3NcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ2NvbnRleHQnLCAnLS1yZXNldCcsICdjb250ZXh0a2V5J10pO1xuICAgIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNkayhbJ2NvbnRleHQnXSkpLnJlc29sdmVzLm5vdC50b0NvbnRhaW4oJ3RoaXMgaXMgdGhlIGNvbnRleHQgdmFsdWUnKTtcblxuICAgIC8vIFRlc3QgdGhhdCBmb3JjZWQgZGVsZXRlIG9mIHRoZSBjb250ZXh0IGtleSBkb2VzIG5vdCB0aHJvd1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnY29udGV4dCcsICctZicsICctLXJlc2V0JywgJ2NvbnRleHRrZXknXSk7XG5cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy51bmxpbmsocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmNvbnRleHQuanNvbicpKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NvbnRleHQgaW4gc3RhZ2UgcHJvcGFnYXRlcyB0byB0b3AnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrU3ludGgoe1xuICAgIC8vIFRoaXMgd2lsbCBtYWtlIGl0IGVycm9yIHRvIHByb3ZlIHRoYXQgdGhlIGNvbnRleHQgYnViYmxlcyB1cCwgYW5kIGFsc28gdGhhdCB3ZSBjYW4gZmFpbCBvbiBjb21tYW5kXG4gICAgb3B0aW9uczogWyctLW5vLWxvb2t1cHMnXSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIElOVEVHX1NUQUNLX1NFVDogJ3N0YWdlLXVzaW5nLWNvbnRleHQnLFxuICAgIH0sXG4gICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICB9KSkucmVzb2x2ZXMudG9Db250YWluKCdDb250ZXh0IGxvb2t1cHMgaGF2ZSBiZWVuIGRpc2FibGVkJyk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgLy8gdmVyaWZ5IHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBzdGFja1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrUmVzb3VyY2VzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tSZXNvdXJjZXM/Lmxlbmd0aCkudG9FcXVhbCgyKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgLS1tZXRob2Q9ZGlyZWN0Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICBvcHRpb25zOiBbJy0tbWV0aG9kPWRpcmVjdCddLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcblxuICAvLyB2ZXJpZnkgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIHN0YWNrXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tSZXNvdXJjZXMnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG4gIGV4cGVjdChyZXNwb25zZS5TdGFja1Jlc291cmNlcz8ubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IGFsbCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBhcm5zID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtKicsIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgLy8gdmVyaWZ5IHRoYXQgd2Ugb25seSBkZXBsb3llZCBib3RoIHN0YWNrcyAodGhlcmUgYXJlIDIgQVJOcyBpbiB0aGUgb3V0cHV0KVxuICBleHBlY3QoYXJucy5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDIpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSBhbGwgY29uY3VycmVudGx5Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGFybnMgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0qJywge1xuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFsnLS1jb25jdXJyZW5jeScsICcyJ10sXG4gIH0pO1xuXG4gIC8vIHZlcmlmeSB0aGF0IHdlIG9ubHkgZGVwbG95ZWQgYm90aCBzdGFja3MgKHRoZXJlIGFyZSAyIEFSTnMgaW4gdGhlIG91dHB1dClcbiAgZXhwZWN0KGFybnMuc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgyKTtcbn0pKTtcblxuaW50ZWdUZXN0KCduZXN0ZWQgc3RhY2sgd2l0aCBwYXJhbWV0ZXJzJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIFNUQUNLX05BTUVfUFJFRklYIGlzIHVzZWQgaW4gTXlUb3BpY1BhcmFtIHRvIGFsbG93IG11bHRpcGxlIGluc3RhbmNlc1xuICAvLyBvZiB0aGlzIHRlc3QgdG8gcnVuIGluIHBhcmFsbGVsLCBvdGhld2lzZSB0aGV5IHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIHNhbWUgU05TIHRvcGljLlxuICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjay11c2luZy1wYXJhbWV0ZXJzJywge1xuICAgIG9wdGlvbnM6IFsnLS1wYXJhbWV0ZXJzJywgYE15VG9waWNQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fVRoZXJlSXNOb1Nwb29uYF0sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIHZlcmlmeSB0aGF0IHdlIG9ubHkgZGVwbG95ZWQgYSBzaW5nbGUgc3RhY2sgKHRoZXJlJ3MgYSBzaW5nbGUgQVJOIGluIHRoZSBvdXRwdXQpXG4gIGV4cGVjdChzdGFja0Fybi5zcGxpdCgnXFxuJykubGVuZ3RoKS50b0VxdWFsKDEpO1xuXG4gIC8vIHZlcmlmeSB0aGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgc3RhY2tcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja1Jlc291cmNlcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VzPy5sZW5ndGgpLnRvRXF1YWwoMSk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IHdpdGhvdXQgZXhlY3V0ZSBhIG5hbWVkIGNoYW5nZSBzZXQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgY2hhbmdlU2V0TmFtZSA9ICdjdXN0b20tY2hhbmdlLXNldC1uYW1lJztcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgIG9wdGlvbnM6IFsnLS1uby1leGVjdXRlJywgJy0tY2hhbmdlLXNldC1uYW1lJywgY2hhbmdlU2V0TmFtZV0sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuICAvLyB2ZXJpZnkgdGhhdCB3ZSBvbmx5IGRlcGxveWVkIGEgc2luZ2xlIHN0YWNrICh0aGVyZSdzIGEgc2luZ2xlIEFSTiBpbiB0aGUgb3V0cHV0KVxuICBleHBlY3Qoc3RhY2tBcm4uc3BsaXQoJ1xcbicpLmxlbmd0aCkudG9FcXVhbCgxKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdSRVZJRVdfSU5fUFJPR1JFU1MnKTtcblxuICAvL3ZlcmlmeSBhIGNoYW5nZSBzZXQgd2FzIGNyZWF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZVxuICBjb25zdCBjaGFuZ2VTZXRSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdsaXN0Q2hhbmdlU2V0cycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcbiAgY29uc3QgY2hhbmdlU2V0cyA9IGNoYW5nZVNldFJlc3BvbnNlLlN1bW1hcmllcyB8fCBbXTtcbiAgZXhwZWN0KGNoYW5nZVNldHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICBleHBlY3QoY2hhbmdlU2V0c1swXS5DaGFuZ2VTZXROYW1lKS50b0VxdWFsKGNoYW5nZVNldE5hbWUpO1xuICBleHBlY3QoY2hhbmdlU2V0c1swXS5TdGF0dXMpLnRvRXF1YWwoJ0NSRUFURV9DT01QTEVURScpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ3NlY3VyaXR5IHJlbGF0ZWQgY2hhbmdlcyB3aXRob3V0IGEgQ0xJIGFyZSBleHBlY3RlZCB0byBmYWlsJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIHJlZGlyZWN0IC9kZXYvbnVsbCB0byBzdGRpbiwgd2hpY2ggbWVhbnMgdGhlcmUgd2lsbCBub3QgYmUgdHR5IGF0dGFjaGVkXG4gIC8vIHNpbmNlIHRoaXMgc3RhY2sgaW5jbHVkZXMgc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzLCB0aGUgZGVwbG95bWVudCBzaG91bGRcbiAgLy8gaW1tZWRpYXRlbHkgZmFpbCBiZWNhdXNlIHdlIGNhbid0IGNvbmZpcm0gdGhlIGNoYW5nZXNcbiAgY29uc3Qgc3RhY2tOYW1lID0gJ2lhbS10ZXN0JztcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrRGVwbG95KHN0YWNrTmFtZSwge1xuICAgIG9wdGlvbnM6IFsnPCcsICcvZGV2L251bGwnXSwgLy8gSDR4LCB0aGlzIG9ubHkgd29ya3MgYmVjYXVzZSBJIGhhcHBlbiB0byBrbm93IHdlIHBhc3Mgc2hlbGw6IHRydWUuXG4gICAgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IGZhbHNlLFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gIC8vIEVuc3VyZSBzdGFjayB3YXMgbm90IGRlcGxveWVkXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lKSxcbiAgfSkpLnJlamVjdHMudG9UaHJvdygnZG9lcyBub3QgZXhpc3QnKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2lsZGNhcmQgd2l0aCBvdXRwdXRzJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IG91dHB1dHNGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsICdvdXRwdXRzLmpzb24nKTtcbiAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koWydvdXRwdXRzLXRlc3QtKiddLCB7XG4gICAgb3B0aW9uczogWyctLW91dHB1dHMtZmlsZScsIG91dHB1dHNGaWxlXSxcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoKGF3YWl0IGZzLnJlYWRGaWxlKG91dHB1dHNGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50b1N0cmluZygpKTtcbiAgZXhwZWN0KG91dHB1dHMpLnRvRXF1YWwoe1xuICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTFgXToge1xuICAgICAgVG9waWNOYW1lOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTFNeVRvcGljYCxcbiAgICB9LFxuICAgIFtgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTJgXToge1xuICAgICAgVG9waWNOYW1lOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tb3V0cHV0cy10ZXN0LTJNeU90aGVyVG9waWNgLFxuICAgIH0sXG4gIH0pO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIHBhcmFtZXRlcnMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgIG9wdGlvbnM6IFtcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgVG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICBdLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcblxuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoXG4gICAge1xuICAgICAgUGFyYW1ldGVyS2V5OiAnVG9waWNOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWJhemluZ2FgLFxuICAgIH0sXG4gICk7XG59KSk7XG5cbmludGVnVGVzdCgndXBkYXRlIHRvIHN0YWNrIGluIFJPTExCQUNLX0NPTVBMRVRFIHN0YXRlIHdpbGwgZGVsZXRlIHN0YWNrIGFuZCBjcmVhdGUgYSBuZXcgb25lJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNka0RlcGxveSgncGFyYW0tdGVzdC0xJywge1xuICAgIG9wdGlvbnM6IFtcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgVG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1AYXd3YCxcbiAgICBdLFxuICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdwYXJhbS10ZXN0LTEnKSxcbiAgfSk7XG5cbiAgY29uc3Qgc3RhY2tBcm4gPSByZXNwb25zZS5TdGFja3M/LlswXS5TdGFja0lkO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXMpLnRvRXF1YWwoJ1JPTExCQUNLX0NPTVBMRVRFJyk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBuZXdTdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIF0sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YWNrUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBuZXdTdGFja0FybixcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3Qoc3RhY2tBcm4pLm5vdC50b0VxdWFsKG5ld1N0YWNrQXJuKTsgLy8gbmV3IHN0YWNrIHdhcyBjcmVhdGVkXG4gIGV4cGVjdChuZXdTdGFja1Jlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgZXhwZWN0KG5ld1N0YWNrUmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoXG4gICAge1xuICAgICAgUGFyYW1ldGVyS2V5OiAnVG9waWNOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIH0sXG4gICk7XG59KSk7XG5cbmludGVnVGVzdCgnc3RhY2sgaW4gVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFIHN0YXRlIGNhbiBiZSB1cGRhdGVkJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9bmljZWAsXG4gICAgXSxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuXG4gIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG5cbiAgLy8gYmFkIHBhcmFtZXRlciBuYW1lIHdpdGggQCB3aWxsIHB1dCBzdGFjayBpbnRvIFVQREFURV9ST0xMQkFDS19DT01QTEVURVxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMScsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYFRvcGljTmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QGF3d2AsXG4gICAgXSxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSkpLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTs7XG5cbiAgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG5cbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUnKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LTEnLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tcGFyYW1ldGVycycsIGBUb3BpY05hbWVQYXJhbT0ke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fWFsbGdvb2RgLFxuICAgIF0sXG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gIH0pO1xuXG4gIHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdVUERBVEVfQ09NUExFVEUnKTtcbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKFxuICAgIHtcbiAgICAgIFBhcmFtZXRlcktleTogJ1RvcGljTmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1hbGxnb29kYCxcbiAgICB9LFxuICApO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSB3aXRoIHdpbGRjYXJkIGFuZCBwYXJhbWV0ZXJzJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdwYXJhbS10ZXN0LSonLCB7XG4gICAgb3B0aW9uczogW1xuICAgICAgJy0tcGFyYW1ldGVycycsIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTE6VG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYCxcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tcGFyYW0tdGVzdC0yOk90aGVyVG9waWNOYW1lUGFyYW09JHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1UaGF0c015U3BvdGAsXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXBhcmFtLXRlc3QtMzpEaXNwbGF5TmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9SGV5VGhlcmVgLFxuICAgICAgJy0tcGFyYW1ldGVycycsIGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS1wYXJhbS10ZXN0LTM6T3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9QW5vdGhlck9uZWAsXG4gICAgXSxcbiAgfSk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IHdpdGggcGFyYW1ldGVycyBtdWx0aScsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBwYXJhbVZhbDEgPSBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH1iYXppbmdhYDtcbiAgY29uc3QgcGFyYW1WYWwyID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9PWphZ3NoZW1hc2hgO1xuXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3BhcmFtLXRlc3QtMycsIHtcbiAgICBvcHRpb25zOiBbXG4gICAgICAnLS1wYXJhbWV0ZXJzJywgYERpc3BsYXlOYW1lUGFyYW09JHtwYXJhbVZhbDF9YCxcbiAgICAgICctLXBhcmFtZXRlcnMnLCBgT3RoZXJEaXNwbGF5TmFtZVBhcmFtPSR7cGFyYW1WYWwyfWAsXG4gICAgXSxcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG5cbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlBhcmFtZXRlcnMpLnRvQ29udGFpbkVxdWFsKFxuICAgIHtcbiAgICAgIFBhcmFtZXRlcktleTogJ0Rpc3BsYXlOYW1lUGFyYW0nLFxuICAgICAgUGFyYW1ldGVyVmFsdWU6IHBhcmFtVmFsMSxcbiAgICB9LFxuICApO1xuICBleHBlY3QocmVzcG9uc2UuU3RhY2tzPy5bMF0uUGFyYW1ldGVycykudG9Db250YWluRXF1YWwoXG4gICAge1xuICAgICAgUGFyYW1ldGVyS2V5OiAnT3RoZXJEaXNwbGF5TmFtZVBhcmFtJyxcbiAgICAgIFBhcmFtZXRlclZhbHVlOiBwYXJhbVZhbDIsXG4gICAgfSxcbiAgKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aCBub3RpZmljYXRpb24gQVJOJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHRvcGljTmFtZSA9IGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LXRvcGljYDtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLnNucygnY3JlYXRlVG9waWMnLCB7IE5hbWU6IHRvcGljTmFtZSB9KTtcbiAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5Ub3BpY0FybiE7XG4gIHRyeSB7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3Rlc3QtMicsIHtcbiAgICAgIG9wdGlvbnM6IFsnLS1ub3RpZmljYXRpb24tYXJucycsIHRvcGljQXJuXSxcbiAgICB9KTtcblxuICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBzdGFjayB3ZSBkZXBsb3llZCBoYXMgb3VyIG5vdGlmaWNhdGlvbiBBUk5cbiAgICBjb25zdCBkZXNjcmliZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgICAgU3RhY2tOYW1lOiBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpLFxuICAgIH0pO1xuICAgIGV4cGVjdChkZXNjcmliZVJlc3BvbnNlLlN0YWNrcz8uWzBdLk5vdGlmaWNhdGlvbkFSTnMpLnRvRXF1YWwoW3RvcGljQXJuXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZml4dHVyZS5hd3Muc25zKCdkZWxldGVUb3BpYycsIHtcbiAgICAgIFRvcGljQXJuOiB0b3BpY0FybixcbiAgICB9KTtcbiAgfVxufSkpO1xuXG4vLyBOT1RFOiB0aGlzIGRvZXNuJ3QgY3VycmVudGx5IHdvcmsgd2l0aCBtb2Rlcm4tc3R5bGUgc3ludGhlc2lzLCBhcyB0aGUgYm9vdHN0cmFwXG4vLyByb2xlIGJ5IGRlZmF1bHQgd2lsbCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGlhbTpQYXNzUm9sZSB0aGUgY3JlYXRlZCByb2xlLlxuaW50ZWdUZXN0KCdkZXBsb3kgd2l0aCByb2xlJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGlmIChmaXh0dXJlLnBhY2thZ2VzLm1ham9yVmVyc2lvbigpICE9PSAnMScpIHtcbiAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cbiAgfVxuXG4gIGNvbnN0IHJvbGVOYW1lID0gYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LXRlc3Qtcm9sZWA7XG5cbiAgYXdhaXQgZGVsZXRlUm9sZSgpO1xuXG4gIGNvbnN0IGNyZWF0ZVJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuaWFtKCdjcmVhdGVSb2xlJywge1xuICAgIFJvbGVOYW1lOiByb2xlTmFtZSxcbiAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgIFN0YXRlbWVudDogW3tcbiAgICAgICAgQWN0aW9uOiAnc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICBQcmluY2lwYWw6IHsgU2VydmljZTogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nIH0sXG4gICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgIH0sIHtcbiAgICAgICAgQWN0aW9uOiAnc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICBQcmluY2lwYWw6IHsgQVdTOiAoYXdhaXQgZml4dHVyZS5hd3Muc3RzKCdnZXRDYWxsZXJJZGVudGl0eScsIHt9KSkuQXJuIH0sXG4gICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgIH1dLFxuICAgIH0pLFxuICB9KTtcbiAgY29uc3Qgcm9sZUFybiA9IGNyZWF0ZVJlc3BvbnNlLlJvbGUuQXJuO1xuICB0cnkge1xuICAgIGF3YWl0IGZpeHR1cmUuYXdzLmlhbSgncHV0Um9sZVBvbGljeScsIHtcbiAgICAgIFJvbGVOYW1lOiByb2xlTmFtZSxcbiAgICAgIFBvbGljeU5hbWU6ICdEZWZhdWx0UG9saWN5JyxcbiAgICAgIFBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgU3RhdGVtZW50OiBbe1xuICAgICAgICAgIEFjdGlvbjogJyonLFxuICAgICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICB9XSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgcmV0cnkoZml4dHVyZS5vdXRwdXQsICdUcnlpbmcgdG8gYXNzdW1lIGZyZXNoIHJvbGUnLCByZXRyeS5mb3JTZWNvbmRzKDMwMCksIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLnN0cygnYXNzdW1lUm9sZScsIHtcbiAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAndGVzdGluZycsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEluIHByaW5jaXBsZSwgdGhlIHJvbGUgaGFzIHJlcGxpY2F0ZWQgZnJvbSAndXMtZWFzdC0xJyB0byB3aGVyZXZlciB3ZSdyZSB0ZXN0aW5nLlxuICAgIC8vIEdpdmUgaXQgYSBsaXR0bGUgbW9yZSBzbGVlcCB0byBtYWtlIHN1cmUgQ2xvdWRGb3JtYXRpb24gaXMgbm90IGhpdHRpbmcgYSBib3hcbiAgICAvLyB0aGF0IGRvZXNuJ3QgaGF2ZSBpdCB5ZXQuXG4gICAgYXdhaXQgc2xlZXAoNTAwMCk7XG5cbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0yJywge1xuICAgICAgb3B0aW9uczogWyctLXJvbGUtYXJuJywgcm9sZUFybl0sXG4gICAgfSk7XG5cbiAgICAvLyBJbW1lZGlhdGVseSBkZWxldGUgdGhlIHN0YWNrIGFnYWluIGJlZm9yZSB3ZSBkZWxldGUgdGhlIHJvbGUuXG4gICAgLy9cbiAgICAvLyBTaW5jZSByb2xlcyBhcmUgc3RpY2t5LCBpZiB3ZSBkZWxldGUgdGhlIHJvbGUgYmVmb3JlIHRoZSBzdGFjaywgc3Vic2VxdWVudCBEZWxldGVTdGFja1xuICAgIC8vIG9wZXJhdGlvbnMgd2lsbCBmYWlsIHdoZW4gQ2xvdWRGb3JtYXRpb24gdHJpZXMgdG8gYXNzdW1lIHRoZSByb2xlIHRoYXQncyBhbHJlYWR5IGdvbmUuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCd0ZXN0LTInKTtcblxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRlbGV0ZVJvbGUoKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVJvbGUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgcG9saWN5TmFtZSBvZiAoYXdhaXQgZml4dHVyZS5hd3MuaWFtKCdsaXN0Um9sZVBvbGljaWVzJywgeyBSb2xlTmFtZTogcm9sZU5hbWUgfSkpLlBvbGljeU5hbWVzKSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuYXdzLmlhbSgnZGVsZXRlUm9sZVBvbGljeScsIHtcbiAgICAgICAgICBSb2xlTmFtZTogcm9sZU5hbWUsXG4gICAgICAgICAgUG9saWN5TmFtZTogcG9saWN5TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBmaXh0dXJlLmF3cy5pYW0oJ2RlbGV0ZVJvbGUnLCB7IFJvbGVOYW1lOiByb2xlTmFtZSB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5kZXhPZignY2Fubm90IGJlIGZvdW5kJykgPiAtMSkgeyByZXR1cm47IH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59KSk7XG5cbi8vIFRPRE8gYWRkIG1vcmUgdGVzdGluZyB0aGF0IGVuc3VyZXMgdGhlIHN5bW1ldHJ5IG9mIHRoZSBnZW5lcmF0ZWQgY29uc3RydWN0cyB0byB0aGUgcmVzb3VyY2VzLlxuWyd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdjc2hhcnAnLCAnamF2YSddLmZvckVhY2gobGFuZ3VhZ2UgPT4ge1xuICBpbnRlZ1Rlc3QoYGNkayBtaWdyYXRlICR7bGFuZ3VhZ2V9IGRlcGxveXMgc3VjY2Vzc2Z1bGx5YCwgd2l0aENES01pZ3JhdGVGaXh0dXJlKGxhbmd1YWdlLCBhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSA9PT0gJ3B5dGhvbicpIHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydwaXAnLCAnaW5zdGFsbCcsICctcicsICdyZXF1aXJlbWVudHMudHh0J10pO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koZml4dHVyZS5zdGFja05hbWVQcmVmaXgsIHsgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sIHRydWUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgICB9KTtcblxuICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KGZpeHR1cmUuc3RhY2tOYW1lUHJlZml4KTtcbiAgfSkpO1xufSk7XG5cbmludGVnVGVzdCgnY2RrIG1pZ3JhdGUgZ2VuZXJhdGVzIG1pZ3JhdGUuanNvbicsIHdpdGhDREtNaWdyYXRlRml4dHVyZSgndHlwZXNjcmlwdCcsIGFzeW5jIChmaXh0dXJlKSA9PiB7XG5cbiAgY29uc3QgbWlncmF0ZUZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdtaWdyYXRlLmpzb24nKSwgJ3V0ZjgnKTtcbiAgY29uc3QgZXhwZWN0ZWRGaWxlID0gYHtcbiAgICBcXFwiLy9cXFwiOiBcXFwiVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBjZGsgbWlncmF0ZS4gSXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgZGVwbG95bWVudCBvZiB0aGlzIGFwcCB0byB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIG9yaWdpbmFsIHJlc291cmNlcy5cXFwiLFxuICAgIFxcXCJTb3VyY2VcXFwiOiBcXFwibG9jYWxmaWxlXFxcIlxuICB9YDtcbiAgZXhwZWN0KEpTT04ucGFyc2UobWlncmF0ZUZpbGUpKS50b0VxdWFsKEpTT04ucGFyc2UoZXhwZWN0ZWRGaWxlKSk7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveShmaXh0dXJlLnN0YWNrTmFtZVByZWZpeCk7XG59KSk7XG5cbi8vIGludGVnVGVzdCgnY2RrIG1pZ3JhdGUgLS1mcm9tLXNjYW4gd2l0aCBBTkQvT1IgZmlsdGVycyBjb3JyZWN0bHkgZmlsdGVycyByZXNvdXJjZXMnLCB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuLy8gICBjb25zdCBzdGFja05hbWUgPSBgY2RrLW1pZ3JhdGUtaW50ZWctJHtmaXh0dXJlLnJhbmRvbVN0cmluZ31gO1xuXG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuLy8gICAgIG1vZEVudjogeyBTQU1QTEVfUkVTT1VSQ0VTOiAnMScgfSxcbi8vICAgfSk7XG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrKFxuLy8gICAgIFsnbWlncmF0ZScsICctLXN0YWNrLW5hbWUnLCBzdGFja05hbWUsICctLWZyb20tc2NhbicsICduZXcnLCAnLS1maWx0ZXInLCAndHlwZT1BV1M6OlNOUzo6VG9waWMsdGFnLWtleT10YWcxJywgJ3R5cGU9QVdTOjpTUVM6OlF1ZXVlLHRhZy1rZXk9dGFnMyddLFxuLy8gICAgIHsgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLCB2ZXJib3NlOiB0cnVlLCBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9LFxuLy8gICApO1xuXG4vLyAgIHRyeSB7XG4vLyAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICAgIGNvbnN0IHJlc291cmNlTmFtZXMgPSBbXTtcbi8vICAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc3BvbnNlLlJlc291cmNlcyB8fCBbXSkge1xuLy8gICAgICAgaWYgKHJlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkKSB7XG4vLyAgICAgICAgIHJlc291cmNlTmFtZXMucHVzaChyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGZpeHR1cmUubG9nKGBSZXNvdXJjZXM6ICR7cmVzb3VyY2VOYW1lc31gKTtcbi8vICAgICBleHBlY3QocmVzb3VyY2VOYW1lcy5zb21lKGVsZSA9PiBlbGUgJiYgZWxlLmluY2x1ZGVzKCdtaWdyYXRldG9waWMxJykpKS50b0JlVHJ1dGh5KCk7XG4vLyAgICAgZXhwZWN0KHJlc291cmNlTmFtZXMuc29tZShlbGUgPT4gZWxlICYmIGVsZS5pbmNsdWRlcygnbWlncmF0ZXF1ZXVlMScpKSkudG9CZVRydXRoeSgpO1xuLy8gICB9IGZpbmFsbHkge1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyB9KSk7XG5cbi8vIGludGVnVGVzdCgnY2RrIG1pZ3JhdGUgLS1mcm9tLXNjYW4gZm9yIHJlc291cmNlcyB3aXRoIFdyaXRlIE9ubHkgUHJvcGVydGllcyBnZW5lcmF0ZXMgd2FybmluZ3MnLCB3aXRoRXh0ZW5kZWRUaW1lb3V0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuLy8gICBjb25zdCBzdGFja05hbWUgPSBgY2RrLW1pZ3JhdGUtaW50ZWctJHtmaXh0dXJlLnJhbmRvbVN0cmluZ31gO1xuXG4vLyAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuLy8gICAgIG1vZEVudjoge1xuLy8gICAgICAgTEFNQkRBX1JFU09VUkNFUzogJzEnLFxuLy8gICAgIH0sXG4vLyAgIH0pO1xuLy8gICBhd2FpdCBmaXh0dXJlLmNkayhcbi8vICAgICBbJ21pZ3JhdGUnLCAnLS1zdGFjay1uYW1lJywgc3RhY2tOYW1lLCAnLS1mcm9tLXNjYW4nLCAnbmV3JywgJy0tZmlsdGVyJywgJ3R5cGU9QVdTOjpMYW1iZGE6OkZ1bmN0aW9uLHRhZy1rZXk9bGFtYmRhLXRhZyddLFxuLy8gICAgIHsgbW9kRW52OiB7IE1JR1JBVEVfSU5URUdfVEVTVDogJzEnIH0sIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLCB2ZXJib3NlOiB0cnVlLCBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9LFxuLy8gICApO1xuXG4vLyAgIHRyeSB7XG5cbi8vICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlJywge1xuLy8gICAgICAgR2VuZXJhdGVkVGVtcGxhdGVOYW1lOiBzdGFja05hbWUsXG4vLyAgICAgfSk7XG4vLyAgICAgY29uc3QgcmVzb3VyY2VOYW1lcyA9IFtdO1xuLy8gICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzcG9uc2UuUmVzb3VyY2VzIHx8IFtdKSB7XG4vLyAgICAgICBpZiAocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQgJiYgcmVzb3VyY2UuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJykge1xuLy8gICAgICAgICByZXNvdXJjZU5hbWVzLnB1c2gocmVzb3VyY2UuTG9naWNhbFJlc291cmNlSWQpO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBmaXh0dXJlLmxvZyhgUmVzb3VyY2VzOiAke3Jlc291cmNlTmFtZXN9YCk7XG4vLyAgICAgY29uc3QgcmVhZG1lUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgc3RhY2tOYW1lLCAnUkVBRE1FLm1kJyk7XG4vLyAgICAgY29uc3QgcmVhZG1lID0gYXdhaXQgZnMucmVhZEZpbGUocmVhZG1lUGF0aCwgJ3V0ZjgnKTtcbi8vICAgICBleHBlY3QocmVhZG1lKS50b0NvbnRhaW4oJyMjIFdhcm5pbmdzJyk7XG4vLyAgICAgZm9yIChjb25zdCByZXNvdXJjZU5hbWUgb2YgcmVzb3VyY2VOYW1lcykge1xuLy8gICAgICAgZXhwZWN0KHJlYWRtZSkudG9Db250YWluKGAjIyMgJHtyZXNvdXJjZU5hbWV9YCk7XG4vLyAgICAgfVxuLy8gICB9IGZpbmFsbHkge1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuLy8gICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZScsIHtcbi8vICAgICAgIEdlbmVyYXRlZFRlbXBsYXRlTmFtZTogc3RhY2tOYW1lLFxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyB9KSk7XG5cblsndHlwZXNjcmlwdCcsICdweXRob24nLCAnY3NoYXJwJywgJ2phdmEnXS5mb3JFYWNoKGxhbmd1YWdlID0+IHtcbiAgaW50ZWdUZXN0KGBjZGsgbWlncmF0ZSAtLWZyb20tc3RhY2sgY3JlYXRlcyBkZXBsb3lhYmxlICR7bGFuZ3VhZ2V9IGFwcGAsIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3QgbWlncmF0ZVN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlncmF0ZS1zdGFjaycpO1xuICAgIGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdjcmVhdGVTdGFjaycsIHtcbiAgICAgIFN0YWNrTmFtZTogbWlncmF0ZVN0YWNrTmFtZSxcbiAgICAgIFRlbXBsYXRlQm9keTogYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ3Jlc291cmNlcycsICd0ZW1wbGF0ZXMnLCAnc3FzLXRlbXBsYXRlLmpzb24nKSwgJ3V0ZjgnKSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgbGV0IHN0YWNrU3RhdHVzID0gJ0NSRUFURV9JTl9QUk9HUkVTUyc7XG4gICAgICB3aGlsZSAoc3RhY2tTdGF0dXMgPT09ICdDUkVBVEVfSU5fUFJPR1JFU1MnKSB7XG4gICAgICAgIHN0YWNrU3RhdHVzID0gYXdhaXQgKGF3YWl0IChmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7IFN0YWNrTmFtZTogbWlncmF0ZVN0YWNrTmFtZSB9KSkpLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzITtcbiAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgICAgWydtaWdyYXRlJywgJy0tc3RhY2stbmFtZScsIG1pZ3JhdGVTdGFja05hbWUsICctLWZyb20tc3RhY2snXSxcbiAgICAgICAgeyBtb2RFbnY6IHsgTUlHUkFURV9JTlRFR19URVNUOiAnMScgfSwgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IHRydWUsIHZlcmJvc2U6IHRydWUsIGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0sXG4gICAgICApO1xuICAgICAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ2NkJywgcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCBtaWdyYXRlU3RhY2tOYW1lKV0pO1xuICAgICAgYXdhaXQgZml4dHVyZS5jZGsoWydkZXBsb3knLCBtaWdyYXRlU3RhY2tOYW1lXSwgeyBuZXZlclJlcXVpcmVBcHByb3ZhbDogdHJ1ZSwgdmVyYm9zZTogdHJ1ZSwgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICAgICAgU3RhY2tOYW1lOiBtaWdyYXRlU3RhY2tOYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnVVBEQVRFX0NPTVBMRVRFJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVzdHJveSgnbWlncmF0ZS1zdGFjaycpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgZGlmZjEgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG4gIGV4cGVjdChkaWZmMSkudG9Db250YWluKCdBV1M6OlNOUzo6VG9waWMnKTtcblxuICBjb25zdCBkaWZmMiA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldKTtcbiAgZXhwZWN0KGRpZmYyKS50b0NvbnRhaW4oJ0FXUzo6U05TOjpUb3BpYycpO1xuXG4gIC8vIFdlIGNhbiBtYWtlIGl0IGZhaWwgYnkgcGFzc2luZyAtLWZhaWxcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnZGlmZicsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSkpXG4gICAgLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdlbmFibGVEaWZmTm9GYWlsJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGRpZmZTaG91bGRTdWNjZWVkV2l0aCh7IGZhaWw6IGZhbHNlLCBlbmFibGVEaWZmTm9GYWlsOiBmYWxzZSB9KTtcbiAgYXdhaXQgZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHsgZmFpbDogZmFsc2UsIGVuYWJsZURpZmZOb0ZhaWw6IHRydWUgfSk7XG4gIGF3YWl0IGRpZmZTaG91bGRGYWlsV2l0aCh7IGZhaWw6IHRydWUsIGVuYWJsZURpZmZOb0ZhaWw6IGZhbHNlIH0pO1xuICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB0cnVlLCBlbmFibGVEaWZmTm9GYWlsOiB0cnVlIH0pO1xuICBhd2FpdCBkaWZmU2hvdWxkRmFpbFdpdGgoeyBmYWlsOiB1bmRlZmluZWQsIGVuYWJsZURpZmZOb0ZhaWw6IGZhbHNlIH0pO1xuICBhd2FpdCBkaWZmU2hvdWxkU3VjY2VlZFdpdGgoeyBmYWlsOiB1bmRlZmluZWQsIGVuYWJsZURpZmZOb0ZhaWw6IHRydWUgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlmZlNob3VsZFN1Y2NlZWRXaXRoKHByb3BzOiBEaWZmUGFyYW1ldGVycykge1xuICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVzb2x2ZXMubm90LnRvVGhyb3dFcnJvcigpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlmZlNob3VsZEZhaWxXaXRoKHByb3BzOiBEaWZmUGFyYW1ldGVycykge1xuICAgIGF3YWl0IGV4cGVjdChkaWZmKHByb3BzKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlmZihwcm9wczogRGlmZlBhcmFtZXRlcnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHVwZGF0ZUNvbnRleHQocHJvcHMuZW5hYmxlRGlmZk5vRmFpbCk7XG4gICAgY29uc3QgZmxhZyA9IHByb3BzLmZhaWwgIT0gbnVsbFxuICAgICAgPyAocHJvcHMuZmFpbCA/ICctLWZhaWwnIDogJy0tbm8tZmFpbCcpXG4gICAgICA6ICcnO1xuXG4gICAgcmV0dXJuIGZpeHR1cmUuY2RrKFsnZGlmZicsIGZsYWcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyldKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoZW5hYmxlRGlmZk5vRmFpbDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksICd1dGY4JykpO1xuICAgIGNka0pzb24uY29udGV4dCA9IHtcbiAgICAgIC4uLmNka0pzb24uY29udGV4dCxcbiAgICAgICdhd3MtY2RrOmVuYWJsZURpZmZOb0ZhaWwnOiBlbmFibGVEaWZmTm9GYWlsLFxuICAgIH07XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgfVxuXG4gIHR5cGUgRGlmZlBhcmFtZXRlcnMgPSB7IGZhaWw/OiBib29sZWFuOyBlbmFibGVEaWZmTm9GYWlsOiBib29sZWFuIH07XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1mYWlsIG9uIG11bHRpcGxlIHN0YWNrcyBleGl0cyB3aXRoIGVycm9yIGlmIGFueSBvZiB0aGUgc3RhY2tzIGNvbnRhaW5zIGEgZGlmZicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBkaWZmMSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGlmZicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyldKTtcbiAgZXhwZWN0KGRpZmYxKS50b0NvbnRhaW4oJ0FXUzo6U05TOjpUb3BpYycpO1xuXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd0ZXN0LTInKTtcbiAgY29uc3QgZGlmZjIgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ2RpZmYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSk7XG4gIGV4cGVjdChkaWZmMikudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG5cbiAgLy8gV0hFTiAvIFRIRU5cbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnZGlmZicsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSkpLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiAtLWZhaWwgd2l0aCBtdWx0aXBsZSBzdGFjayBleGl0cyB3aXRoIGlmIGFueSBvZiB0aGUgc3RhY2tzIGNvbnRhaW5zIGEgZGlmZicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBHSVZFTlxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG4gIGNvbnN0IGRpZmYxID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTEnKV0pO1xuICBleHBlY3QoZGlmZjEpLnRvQ29udGFpbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpO1xuXG4gIGNvbnN0IGRpZmYyID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICBleHBlY3QoZGlmZjIpLnRvQ29udGFpbignQVdTOjpTTlM6OlRvcGljJyk7XG5cbiAgLy8gV0hFTiAvIFRIRU5cbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnZGlmZicsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMicpXSkpLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgc3VjY2Vzc2Z1bGx5IG91dHB1dHMgc3NvLXBlcm1pc3Npb24tc2V0LXdpdGhvdXQtbWFuYWdlZC1wb2xpY3kgaW5mb3JtYXRpb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgZGlmZiA9IGF3YWl0IGZpeHR1cmUuY2RrKFxuICAgIFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5JyldLFxuICApO1xuICBg4pSM4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICDilIIgICDilIIgUmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgSW5zdGFuY2VBcm4gICAgICAgICAgICAgICAgICAgICAg4pSCIFBlcm1pc3Npb25TZXQgbmFtZSDilIIgUGVybWlzc2lvbnNCb3VuZGFyeSAgICAgICAgICAgICAgIOKUgiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7cGVybWlzc2lvbi1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeX0g4pSCIGFybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlIOKUgiB0ZXN0TmFtZSAgICAgICAgICAg4pSCIEN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZTogeyDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgIOKUgiAgIE5hbWU6IHdoeSwgUGF0aDogL2hvdy8gICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICDilIIgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuYDtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUmVzb3VyY2UnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbigncGVybWlzc2lvbi1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeScpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0luc3RhbmNlQXJuJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvblNldCBuYW1lJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ3Rlc3ROYW1lJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUGVybWlzc2lvbnNCb3VuZGFyeScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2U6IHsnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignTmFtZTogd2h5LCBQYXRoOiAvaG93LycpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCd9Jyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcycpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tcGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeSBpbmZvcm1hdGlvbicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knKV0sXG4gICk7XG4gIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgICAgICAgICAgICDilIIgUGVybWlzc2lvblNldCBuYW1lIOKUgiBQZXJtaXNzaW9uc0JvdW5kYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzIOKUglxuICAg4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICDilIIgKyDilIJcXCR7cGVybWlzc2lvbi1zZXQtd2l0aC1tYW5hZ2VkLXBvbGljeX0gICAg4pSCIGFybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlIOKUgiBuaWNlV29yayAgICAgICAgICAg4pSCIE1hbmFnZWRQb2xpY3lBcm46IGFybjphd3M6aWFtOjphd3M6cG9saWN5L0FkbWluaXN0cmF0b3JBY2Nlc3Mg4pSCIE5hbWU6IGZvclNTTywgUGF0aDogICAgICAgICAgICAg4pSCXG5gO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ3Blcm1pc3Npb24tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdJbnN0YW5jZUFybicpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdhcm46YXdzOnNzbzo6Omluc3RhbmNlL3Rlc3R2YWx1ZScpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25TZXQgbmFtZScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCduaWNlV29yaycpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Blcm1pc3Npb25zQm91bmRhcnknKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignTWFuYWdlZFBvbGljeUFybjogYXJuOmF3czppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2VzcycpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignTmFtZTogZm9yU1NPLCBQYXRoOicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSBzdWNjZXNzZnVsbHkgb3V0cHV0cyBzc28tYXNzaWdubWVudCBpbmZvcm1hdGlvbicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoXG4gICAgWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLWFzc2lnbm1lbnQnKV0sXG4gICk7XG4gIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgIOKUgiBJbnN0YW5jZUFybiAgICAgICAgICAgICAgICAgICAgICDilIIgUGVybWlzc2lvblNldEFybiAgICAgICAg4pSCIFByaW5jaXBhbElkICAgICAgICAgICAgICAgICAg4pSCIFByaW5jaXBhbFR5cGUg4pSCIFRhcmdldElkICAgICDilIIgVGFyZ2V0VHlwZSAg4pSCXG4gICDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgIOKUgiArIOKUglxcJHthc3NpZ25tZW50fSDilIIgYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUg4pSCIGFybjphd3M6c3NvOjo6dGVzdHZhbHVlIOKUgiAxMTExMTExMS0yMjIyLTMzMzMtNDQ0NC10ZXN0IOKUgiBVU0VSICAgICAgICAgIOKUgiAxMTExMTExMTExMTEg4pSCIEFXU19BQ0NPVU5UIOKUglxuICAg4pSU4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG5gO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdSZXNvdXJjZScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdhc3NpZ25tZW50Jyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignSW5zdGFuY2VBcm4nKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignYXJuOmF3czpzc286OjppbnN0YW5jZS90ZXN0dmFsdWUnKTtcblxuICBleHBlY3QoZGlmZikudG9Db250YWluKCdQZXJtaXNzaW9uU2V0QXJuJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6dGVzdHZhbHVlJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignUHJpbmNpcGFsSWQnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtdGVzdCcpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1ByaW5jaXBhbFR5cGUnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignVVNFUicpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RhcmdldElkJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJzExMTExMTExMTExMScpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1RhcmdldFR5cGUnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQVdTX0FDQ09VTlQnKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgc3VjY2Vzc2Z1bGx5IG91dHB1dHMgc3NvLWFjY2Vzcy1jb250cm9sIGluZm9ybWF0aW9uJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICBbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYWNjZXNzLWNvbnRyb2wnKV0sXG4gICk7XG4gIGDilIzilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgIOKUgiBSZXNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAg4pSCIEluc3RhbmNlQXJuICAgICAgICAgICAg4pSCIEFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVzICAgICAgICAg4pSCXG4gICDilJzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgIOKUgiArIOKUglxcJHtpbnN0YW5jZUFjY2Vzc0NvbnRyb2xDb25maWd9IOKUgiBhcm46YXdzOnRlc3Q6dGVzdHZhbHVlIOKUgiBLZXk6IGZpcnN0LCBWYWx1ZXM6IFthXSAgICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiBzZWNvbmQsIFZhbHVlczogW2JdICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogdGhpcmQsIFZhbHVlczogW2NdICAgICAgICAg4pSCXG4gICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBLZXk6IGZvdXJ0aCwgVmFsdWVzOiBbZF0gICAgICAgIOKUglxuICAg4pSCICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICDilIIgS2V5OiBmaWZ0aCwgVmFsdWVzOiBbZV0gICAgICAgICDilIJcbiAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEtleTogc2l4dGgsIFZhbHVlczogW2ZdICAgICAgICAg4pSCXG4gICDilJTilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbmA7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ1Jlc291cmNlJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2luc3RhbmNlQWNjZXNzQ29udHJvbENvbmZpZycpO1xuXG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0luc3RhbmNlQXJuJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ2Fybjphd3M6c3NvOjo6aW5zdGFuY2UvdGVzdHZhbHVlJyk7XG5cbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignQWNjZXNzQ29udHJvbEF0dHJpYnV0ZXMnKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBmaXJzdCwgVmFsdWVzOiBbYV0nKTtcbiAgZXhwZWN0KGRpZmYpLnRvQ29udGFpbignS2V5OiBzZWNvbmQsIFZhbHVlczogW2JdJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogdGhpcmQsIFZhbHVlczogW2NdJyk7XG4gIGV4cGVjdChkaWZmKS50b0NvbnRhaW4oJ0tleTogZm91cnRoLCBWYWx1ZXM6IFtkXScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IGZpZnRoLCBWYWx1ZXM6IFtlXScpO1xuICBleHBlY3QoZGlmZikudG9Db250YWluKCdLZXk6IHNpeHRoLCBWYWx1ZXM6IFtmXScpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28gYWNjZXNzIGNvbnRyb2wgY29uZmlnJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGV4cGVjdChcbiAgICBmaXh0dXJlLmNkayhcbiAgICAgIFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tYWNjZXNzLWNvbnRyb2wnKV0sXG4gICAgKSxcbiAgKS5yZWplY3RzXG4gICAgLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGRpZmYgZm9yIHNzby1wZXJtLXNldC13aXRob3V0LW1hbmFnZWQtcG9saWN5Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGV4cGVjdChcbiAgICBmaXh0dXJlLmNkayhcbiAgICAgIFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzc28tcGVybS1zZXQtd2l0aG91dC1tYW5hZ2VkLXBvbGljeScpXSxcbiAgICApLFxuICApLnJlamVjdHNcbiAgICAudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjZGsgZGlmZiAtLXNlY3VyaXR5LW9ubHkgLS1mYWlsIGV4aXRzIHdoZW4gc2VjdXJpdHkgZGlmZiBmb3Igc3NvLXBlcm0tc2V0LXdpdGgtbWFuYWdlZC1wb2xpY3knLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZXhwZWN0KFxuICAgIGZpeHR1cmUuY2RrKFxuICAgICAgWydkaWZmJywgJy0tc2VjdXJpdHktb25seScsICctLWZhaWwnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Nzby1wZXJtLXNldC13aXRoLW1hbmFnZWQtcG9saWN5JyldLFxuICAgICksXG4gICkucmVqZWN0c1xuICAgIC50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tc2VjdXJpdHktb25seSAtLWZhaWwgZXhpdHMgd2hlbiBzZWN1cml0eSBkaWZmIGZvciBzc28tYXNzaWdubWVudCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBhd2FpdCBleHBlY3QoXG4gICAgZml4dHVyZS5jZGsoXG4gICAgICBbJ2RpZmYnLCAnLS1zZWN1cml0eS1vbmx5JywgJy0tZmFpbCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc3NvLWFzc2lnbm1lbnQnKV0sXG4gICAgKSxcbiAgKS5yZWplY3RzXG4gICAgLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG59KSk7XG5cbmludGVnVGVzdCgnY2RrIGRpZmYgLS1zZWN1cml0eS1vbmx5IC0tZmFpbCBleGl0cyB3aGVuIHNlY3VyaXR5IGNoYW5nZXMgYXJlIHByZXNlbnQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tOYW1lID0gJ2lhbS10ZXN0JztcbiAgYXdhaXQgZXhwZWN0KGZpeHR1cmUuY2RrKFsnZGlmZicsICctLXNlY3VyaXR5LW9ubHknLCAnLS1mYWlsJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSldKSkucmVqZWN0cy50b1Rocm93KCdleGl0ZWQgd2l0aCBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBkaWZmIC0tcXVpZXQgZG9lcyBub3QgcHJpbnQgXFwnVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlc1xcJyBtZXNzYWdlIGZvciBzdGFja3Mgd2hpY2ggaGF2ZSBubyBkaWZmZXJlbmNlcycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBHSVZFTlxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgndGVzdC0xJyk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkaWZmID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgJy0tcXVpZXQnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpXSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGlmZikubm90LnRvQ29udGFpbignU3RhY2sgdGVzdC0xJyk7XG4gIGV4cGVjdChkaWZmKS5ub3QudG9Db250YWluKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzJyk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IHN0YWNrIHdpdGggZG9ja2VyIGFzc2V0Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkb2NrZXInKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdkZXBsb3kgYW5kIHRlc3Qgc3RhY2sgd2l0aCBsYW1iZGEgYXNzZXQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhJywgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcbiAgY29uc3QgbGFtYmRhQXJuID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uWzBdLk91dHB1dFZhbHVlO1xuICBpZiAobGFtYmRhQXJuID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YWNrIGRpZCBub3QgaGF2ZSBleHBlY3RlZCBMYW1iZGEgQVJOIG91dHB1dCcpO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5hd3MubGFtYmRhKCdpbnZva2UnLCB7XG4gICAgRnVuY3Rpb25OYW1lOiBsYW1iZGFBcm4sXG4gIH0pO1xuXG4gIGV4cGVjdChKU09OLnN0cmluZ2lmeShvdXRwdXQuUGF5bG9hZCkpLnRvQ29udGFpbignZGVhciBhc3NldCcpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBscycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBsaXN0aW5nID0gYXdhaXQgZml4dHVyZS5jZGsoWydscyddLCB7IGNhcHR1cmVTdGRlcnI6IGZhbHNlIH0pO1xuXG4gIGNvbnN0IGV4cGVjdGVkU3RhY2tzID0gW1xuICAgICdjb25kaXRpb25hbC1yZXNvdXJjZScsXG4gICAgJ2RvY2tlcicsXG4gICAgJ2RvY2tlci13aXRoLWN1c3RvbS1maWxlJyxcbiAgICAnZmFpbGVkJyxcbiAgICAnaWFtLXRlc3QnLFxuICAgICdsYW1iZGEnLFxuICAgICdtaXNzaW5nLXNzbS1wYXJhbWV0ZXInLFxuICAgICdvcmRlci1wcm92aWRpbmcnLFxuICAgICdvdXRwdXRzLXRlc3QtMScsXG4gICAgJ291dHB1dHMtdGVzdC0yJyxcbiAgICAncGFyYW0tdGVzdC0xJyxcbiAgICAncGFyYW0tdGVzdC0yJyxcbiAgICAncGFyYW0tdGVzdC0zJyxcbiAgICAndGVybWluYXRpb24tcHJvdGVjdGlvbicsXG4gICAgJ3Rlc3QtMScsXG4gICAgJ3Rlc3QtMicsXG4gICAgJ3dpdGgtbmVzdGVkLXN0YWNrJyxcbiAgICAnd2l0aC1uZXN0ZWQtc3RhY2stdXNpbmctcGFyYW1ldGVycycsXG4gICAgJ29yZGVyLWNvbnN1bWluZycsXG4gIF07XG5cbiAgZm9yIChjb25zdCBzdGFjayBvZiBleHBlY3RlZFN0YWNrcykge1xuICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKHN0YWNrKSk7XG4gIH1cbn0pKTtcblxuLyoqXG4gKiBUeXBlIHRvIHN0b3JlIHN0YWNrIGRlcGVuZGVuY2llcyByZWN1cnNpdmVseVxuICovXG50eXBlIERlcGVuZGVuY3lEZXRhaWxzID0ge1xuICBpZDogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lEZXRhaWxzW107XG59O1xuXG50eXBlIFN0YWNrRGV0YWlscyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5RGV0YWlsc1tdO1xufTtcblxuaW50ZWdUZXN0KCdjZGsgbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24nLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgbGlzdGluZyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24nXSwgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcblxuICBjb25zdCBleHBlY3RlZFN0YWNrcyA9IFtcbiAgICB7XG4gICAgICBpZDogJ3Rlc3QtMScsXG4gICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnb3JkZXItY29uc3VtaW5nJyxcbiAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd3aXRoLW5lc3RlZC1zdGFjaycsXG4gICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdsaXN0LXN0YWNrcycsXG4gICAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbGlzdC1zdGFja3MvRGVwZW5kZW50U3RhY2snLFxuICAgICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ2xpc3Qtc3RhY2tzL0RlcGVuZGVudFN0YWNrL0lubmVyRGVwZW5kZW50U3RhY2snLFxuICAgICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnbGlzdC1tdWx0aXBsZS1kZXBlbmRlbnQtc3RhY2tzJyxcbiAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaXN0LW11bHRpcGxlLWRlcGVuZGVudC1zdGFja3MvRGVwZW5kZW50U3RhY2sxJyxcbiAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaXN0LW11bHRpcGxlLWRlcGVuZGVudC1zdGFja3MvRGVwZW5kZW50U3RhY2syJyxcbiAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlU3RhY2tEZXBlbmRlbmNpZXMoc3RhY2s6IFN0YWNrRGV0YWlscykge1xuICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oc3RhY2suaWQpO1xuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5RGV0YWlsc1tdKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZGVwZW5kZW5jeS5pZCk7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5LmRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGVEZXBlbmRlbmNpZXMoZGVwZW5kZW5jeS5kZXBlbmRlbmNpZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLmRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0ZURlcGVuZGVuY2llcyhzdGFjay5kZXBlbmRlbmNpZXMpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgZXhwZWN0ZWRTdGFja3MpIHtcbiAgICB2YWxpZGF0ZVN0YWNrRGVwZW5kZW5jaWVzKHN0YWNrKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2NkayBscyAtLXNob3ctZGVwZW5kZW5jaWVzIC0tanNvbiAtLWxvbmcnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgbGlzdGluZyA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnbHMgLS1zaG93LWRlcGVuZGVuY2llcyAtLWpzb24gLS1sb25nJ10sIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG5cbiAgY29uc3QgZXhwZWN0ZWRTdGFja3MgPSBbXG4gICAge1xuICAgICAgaWQ6ICdvcmRlci1wcm92aWRpbmcnLFxuICAgICAgbmFtZTogJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICBlbnZpcm9tZW50OiB7XG4gICAgICAgIGFjY291bnQ6ICd1bmtub3duLWFjY291bnQnLFxuICAgICAgICByZWdpb246ICd1bmtub3duLXJlZ2lvbicsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly91bmtub3duLWFjY291bnQvdW5rbm93bi1yZWdpb24nLFxuICAgICAgfSxcbiAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ29yZGVyLWNvbnN1bWluZycsXG4gICAgICBuYW1lOiAnb3JkZXItY29uc3VtaW5nJyxcbiAgICAgIGVudmlyb21lbnQ6IHtcbiAgICAgICAgYWNjb3VudDogJ3Vua25vd24tYWNjb3VudCcsXG4gICAgICAgIHJlZ2lvbjogJ3Vua25vd24tcmVnaW9uJyxcbiAgICAgICAgbmFtZTogJ2F3czovL3Vua25vd24tYWNjb3VudC91bmtub3duLXJlZ2lvbicsXG4gICAgICB9LFxuICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ29yZGVyLXByb3ZpZGluZycsXG4gICAgICAgICAgZGVwZW5kZW5jaWVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IHN0YWNrIG9mIGV4cGVjdGVkU3RhY2tzKSB7XG4gICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihmaXh0dXJlLmZ1bGxTdGFja05hbWUoc3RhY2suaWQpKTtcbiAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShzdGFjay5uYW1lKSk7XG4gICAgZXhwZWN0KGxpc3RpbmcpLnRvQ29udGFpbihzdGFjay5lbnZpcm9tZW50LmFjY291bnQpO1xuICAgIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oc3RhY2suZW52aXJvbWVudC5uYW1lKTtcbiAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKHN0YWNrLmVudmlyb21lbnQucmVnaW9uKTtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2Ygc3RhY2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICBleHBlY3QobGlzdGluZykudG9Db250YWluKGZpeHR1cmUuZnVsbFN0YWNrTmFtZShkZXBlbmRlbmN5LmlkKSk7XG4gICAgfVxuICB9XG5cbn0pKTtcblxuaW50ZWdUZXN0KCdzeW50aGluZyBhIHN0YWdlIHdpdGggZXJyb3JzIGxlYWRzIHRvIGZhaWx1cmUnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCddLCB7XG4gICAgYWxsb3dFcnJFeGl0OiB0cnVlLFxuICAgIG1vZEVudjoge1xuICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1lcnJvcnMnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignVGhpcyBpcyBhbiBlcnJvcicpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ3N5bnRoaW5nIGEgc3RhZ2Ugd2l0aCBlcnJvcnMgY2FuIGJlIHN1cHByZXNzZWQnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgYXdhaXQgZml4dHVyZS5jZGsoWydzeW50aCcsICctLW5vLXZhbGlkYXRpb24nXSwge1xuICAgIG1vZEVudjoge1xuICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1lcnJvcnMnLFxuICAgIH0sXG4gIH0pO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ3N5bnRoIC0tcXVpZXQgY2FuIGJlIHNwZWNpZmllZCBpbiBjZGsuanNvbicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBsZXQgY2RrSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnY2RrLmpzb24nKSwgJ3V0ZjgnKSk7XG4gIGNka0pzb24gPSB7XG4gICAgLi4uY2RrSnNvbixcbiAgICBxdWlldDogdHJ1ZSxcbiAgfTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay5qc29uJyksIEpTT04uc3RyaW5naWZ5KGNka0pzb24pKTtcbiAgY29uc3Qgc3ludGhPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCd0ZXN0LTInKV0pO1xuICBleHBlY3Qoc3ludGhPdXRwdXQpLm5vdC50b0NvbnRhaW4oJ3RvcGljMTUyRDg0QTM3Jyk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IHN0YWNrIHdpdGhvdXQgcmVzb3VyY2UnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gRGVwbG95IHRoZSBzdGFjayB3aXRob3V0IHJlc291cmNlc1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnLCB7IG1vZEVudjogeyBOT19SRVNPVVJDRTogJ1RSVUUnIH0gfSk7XG5cbiAgLy8gVGhpcyBzaG91bGQgaGF2ZSBzdWNjZWVkZWQgYnV0IG5vdCBkZXBsb3llZCB0aGUgc3RhY2suXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7IFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdjb25kaXRpb25hbC1yZXNvdXJjZScpIH0pKVxuICAgIC5yZWplY3RzLnRvVGhyb3coJ2NvbmRpdGlvbmFsLXJlc291cmNlIGRvZXMgbm90IGV4aXN0Jyk7XG5cbiAgLy8gRGVwbG95IHRoZSBzdGFjayB3aXRoIHJlc291cmNlc1xuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnY29uZGl0aW9uYWwtcmVzb3VyY2UnKTtcblxuICAvLyBUaGVuIGFnYWluIFdJVEhPVVQgcmVzb3VyY2VzICh0aGlzIHNob3VsZCBkZXN0cm95IHRoZSBzdGFjaylcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2NvbmRpdGlvbmFsLXJlc291cmNlJywgeyBtb2RFbnY6IHsgTk9fUkVTT1VSQ0U6ICdUUlVFJyB9IH0pO1xuXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7IFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdjb25kaXRpb25hbC1yZXNvdXJjZScpIH0pKVxuICAgIC5yZWplY3RzLnRvVGhyb3coJ2NvbmRpdGlvbmFsLXJlc291cmNlIGRvZXMgbm90IGV4aXN0Jyk7XG59KSk7XG5cbmludGVnVGVzdCgnZGVwbG95IG5vIHN0YWNrcyB3aXRoIC0taWdub3JlLW5vLXN0YWNrcycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBlbXB0eSBhcnJheSBmb3Igc3RhY2sgbmFtZXNcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koW10sIHtcbiAgICBvcHRpb25zOiBbJy0taWdub3JlLW5vLXN0YWNrcyddLFxuICAgIG1vZEVudjoge1xuICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1uby1zdGFja3MnLFxuICAgIH0sXG4gIH0pO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2RlcGxveSBubyBzdGFja3MgZXJyb3InLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gZW1wdHkgYXJyYXkgZm9yIHN0YWNrIG5hbWVzXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNka0RlcGxveShbXSwge1xuICAgIG1vZEVudjoge1xuICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2Utd2l0aC1uby1zdGFja3MnLFxuICAgIH0sXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coJ2V4aXRlZCB3aXRoIGVycm9yJyk7XG59KSk7XG5cbmludGVnVGVzdCgnSUFNIGRpZmYnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoWydkaWZmJywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpYW0tdGVzdCcpXSk7XG5cbiAgLy8gUm91Z2hseSBjaGVjayBmb3IgYSB0YWJsZSBsaWtlIHRoaXM6XG4gIC8vXG4gIC8vIOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC3ilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCICAg4pSCIFJlc291cmNlICAgICAgICDilIIgRWZmZWN0IOKUgiBBY3Rpb24gICAgICAgICDilIIgUHJpbmNpcGFsICAgICAgICAgICAgICAgICAgICAg4pSCIENvbmRpdGlvbiDilIJcbiAgLy8g4pSc4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gIC8vIOKUgiArIOKUgiAke1NvbWVSb2xlLkFybn0g4pSCIEFsbG93ICDilIIgc3RzOkFzc3VtZVJvbGUg4pSCIFNlcnZpY2U6ZWMyLmFtYXpvbmF3cy5jb20gICAgIOKUgiAgICAgICAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuXG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignJHtTb21lUm9sZS5Bcm59Jyk7XG4gIGV4cGVjdChvdXRwdXQpLnRvQ29udGFpbignc3RzOkFzc3VtZVJvbGUnKTtcbiAgZXhwZWN0KG91dHB1dCkudG9Db250YWluKCdlYzIuYW1hem9uYXdzLmNvbScpO1xufSkpO1xuXG5pbnRlZ1Rlc3QoJ2Zhc3QgZGVwbG95Jywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIHdlIGFyZSB1c2luZyBhIHN0YWNrIHdpdGggYSBuZXN0ZWQgc3RhY2sgYmVjYXVzZSBDRk4gd2lsbCBhbHdheXMgYXR0ZW1wdCB0b1xuICAvLyB1cGRhdGUgYSBuZXN0ZWQgc3RhY2ssIHdoaWNoIHdpbGwgYWxsb3cgdXMgdG8gdmVyaWZ5IHRoYXQgdXBkYXRlcyBhcmUgYWN0dWFsbHlcbiAgLy8gc2tpcHBlZCB1bmxlc3MgLS1mb3JjZSBpcyBzcGVjaWZpZWQuXG4gIGNvbnN0IHN0YWNrQXJuID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJywgeyBjYXB0dXJlU3RkZXJyOiBmYWxzZSB9KTtcbiAgY29uc3QgY2hhbmdlU2V0MSA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuXG4gIC8vIERlcGxveSB0aGUgc2FtZSBzdGFjayBhZ2FpbiwgdGhlcmUgc2hvdWxkIGJlIG5vIG5ldyBjaGFuZ2Ugc2V0IGNyZWF0ZWRcbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJyk7XG4gIGNvbnN0IGNoYW5nZVNldDIgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgZXhwZWN0KGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpLnRvRXF1YWwoY2hhbmdlU2V0MS5DaGFuZ2VTZXRJZCk7XG5cbiAgLy8gRGVwbG95IHRoZSBzdGFjayBhZ2FpbiB3aXRoIC0tZm9yY2UsIG5vdyB3ZSBzaG91bGQgY3JlYXRlIGEgY2hhbmdlc2V0XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCd3aXRoLW5lc3RlZC1zdGFjaycsIHsgb3B0aW9uczogWyctLWZvcmNlJ10gfSk7XG4gIGNvbnN0IGNoYW5nZVNldDMgPSBhd2FpdCBnZXRMYXRlc3RDaGFuZ2VTZXQoKTtcbiAgZXhwZWN0KGNoYW5nZVNldDMuQ2hhbmdlU2V0SWQpLm5vdC50b0VxdWFsKGNoYW5nZVNldDIuQ2hhbmdlU2V0SWQpO1xuXG4gIC8vIERlcGxveSB0aGUgc3RhY2sgYWdhaW4gd2l0aCB0YWdzLCBleHBlY3RlZCB0byBjcmVhdGUgYSBuZXcgY2hhbmdlc2V0XG4gIC8vIGV2ZW4gdGhvdWdoIHRoZSByZXNvdXJjZXMgZGlkbid0IGNoYW5nZS5cbiAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ3dpdGgtbmVzdGVkLXN0YWNrJywgeyBvcHRpb25zOiBbJy0tdGFncycsICdrZXk9dmFsdWUnXSB9KTtcbiAgY29uc3QgY2hhbmdlU2V0NCA9IGF3YWl0IGdldExhdGVzdENoYW5nZVNldCgpO1xuICBleHBlY3QoY2hhbmdlU2V0NC5DaGFuZ2VTZXRJZCkubm90LnRvRXF1YWwoY2hhbmdlU2V0My5DaGFuZ2VTZXRJZCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0Q2hhbmdlU2V0KCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywgeyBTdGFja05hbWU6IHN0YWNrQXJuIH0pO1xuICAgIGlmICghcmVzcG9uc2UuU3RhY2tzPy5bMF0pIHsgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGdldCBhIENoYW5nZVNldCBhdCBhbGwnKTsgfVxuICAgIGZpeHR1cmUubG9nKGBGb3VuZCBDaGFuZ2UgU2V0ICR7cmVzcG9uc2UuU3RhY2tzPy5bMF0uQ2hhbmdlU2V0SWR9YCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLlN0YWNrcz8uWzBdO1xuICB9XG59KSk7XG5cbmludGVnVGVzdCgnZmFpbGVkIGRlcGxveSBkb2VzIG5vdCBoYW5nJywgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIHRoaXMgd2lsbCBoYW5nIGlmIHdlIGludHJvZHVjZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzY0MDMgYWdhaW4uXG4gIGF3YWl0IGV4cGVjdChmaXh0dXJlLmNka0RlcGxveSgnZmFpbGVkJykpLnJlamVjdHMudG9UaHJvdygnZXhpdGVkIHdpdGggZXJyb3InKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjYW4gc3RpbGwgbG9hZCBvbGQgYXNzZW1ibGllcycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBjeEFzbURpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1pbnRlZy1jeCcpO1xuXG4gIGNvbnN0IHRlc3RBc3NlbWJsaWVzRGlyZWN0b3J5ID0gcGF0aC5qb2luKFJFU09VUkNFU19ESVIsICdjbG91ZC1hc3NlbWJsaWVzJyk7XG4gIGZvciAoY29uc3QgYXNtZGlyIG9mIGF3YWl0IGxpc3RDaGlsZERpcnModGVzdEFzc2VtYmxpZXNEaXJlY3RvcnkpKSB7XG4gICAgZml4dHVyZS5sb2coYEFTU0VNQkxZICR7YXNtZGlyfWApO1xuICAgIGF3YWl0IGNsb25lRGlyZWN0b3J5KGFzbWRpciwgY3hBc21EaXIpO1xuXG4gICAgLy8gU29tZSBmaWxlcyBpbiB0aGUgYXNtIGRpcmVjdG9yeSB0aGF0IGhhdmUgYSAuanMgZXh0ZW5zaW9uIGFyZVxuICAgIC8vIGFjdHVhbGx5IHRyZWF0ZWQgYXMgdGVtcGxhdGVzLiBFdmFsdWF0ZSB0aGVtIHVzaW5nIE5vZGVKUy5cbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBsaXN0Q2hpbGRyZW4oY3hBc21EaXIsIGZ1bGxQYXRoID0+IFByb21pc2UucmVzb2x2ZShmdWxsUGF0aC5lbmRzV2l0aCgnLmpzJykpKTtcbiAgICBmb3IgKGNvbnN0IHRlbXBsYXRlIG9mIHRlbXBsYXRlcykge1xuICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRlbXBsYXRlLnJlcGxhY2UoLy5qcyQvLCAnJyk7XG4gICAgICBhd2FpdCBzaGVsbChbcHJvY2Vzcy5leGVjUGF0aCwgdGVtcGxhdGUsICc+JywgdGFyZ2V0TmFtZV0sIHtcbiAgICAgICAgY3dkOiBjeEFzbURpcixcbiAgICAgICAgb3V0cHV0OiBmaXh0dXJlLm91dHB1dCxcbiAgICAgICAgbW9kRW52OiB7XG4gICAgICAgICAgVEVTVF9BQ0NPVU5UOiBhd2FpdCBmaXh0dXJlLmF3cy5hY2NvdW50KCksXG4gICAgICAgICAgVEVTVF9SRUdJT046IGZpeHR1cmUuYXdzLnJlZ2lvbixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGlzIGRpcmVjdG9yeSBhcyBhIENsb3VkIEFzc2VtYmx5XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGsoW1xuICAgICAgJy0tYXBwJywgY3hBc21EaXIsXG4gICAgICAnLXYnLFxuICAgICAgJ3N5bnRoJyxcbiAgICBdKTtcblxuICAgIC8vIEFzc2VydCB0aGF0IHRoZXJlIHdhcyBubyBwcm92aWRlckVycm9yIGluIENESydzIHN0ZGVyclxuICAgIC8vIEJlY2F1c2Ugd2UgcmVseSBvbiB0aGUgYXBwL2ZyYW1ld29yayB0byBhY3R1YWxseSBlcnJvciBpbiBjYXNlIHRoZVxuICAgIC8vIHByb3ZpZGVyIGZhaWxzLCB3ZSBpbnNwZWN0IHRoZSBsb2dzIGhlcmUuXG4gICAgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignJHByb3ZpZGVyRXJyb3InKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2dlbmVyYXRpbmcgYW5kIGxvYWRpbmcgYXNzZW1ibHknLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgY29uc3QgYXNtT3V0cHV0RGlyID0gYCR7Zml4dHVyZS5pbnRlZ1Rlc3REaXJ9LWNkay1pbnRlZy1hc21gO1xuICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsncm0nLCAnLXJmJywgYXNtT3V0cHV0RGlyXSk7XG5cbiAgLy8gU3ludGhlc2l6ZSBhIENsb3VkIEFzc2VtYmx5IHRvdGhlIGRlZmF1bHQgZGlyZWN0b3J5IChjZGsub3V0KSBhbmQgYSBzcGVjaWZpYyBkaXJlY3RvcnkuXG4gIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnXSk7XG4gIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCAnLS1vdXRwdXQnLCBhc21PdXRwdXREaXJdKTtcblxuICAvLyBjZGsub3V0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgdGhlIGluZGljYXRlZCAtLW91dHB1dCBzaG91bGQgYmUgdGhlIHNhbWVcbiAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ2RpZmYnLCAnY2RrLm91dCcsIGFzbU91dHB1dERpcl0pO1xuXG4gIC8vIENoZWNrIHRoYXQgd2UgY2FuICdscycgdGhlIHN5bnRoZXNpemVkIGFzbS5cbiAgLy8gQ2hhbmdlIHRvIHNvbWUgcmFuZG9tIGRpcmVjdG9yeSB0byBtYWtlIHN1cmUgd2UncmUgbm90IGFjY2lkZW50YWxseSBsb2FkaW5nIGNkay5qc29uXG4gIGNvbnN0IGxpc3QgPSBhd2FpdCBmaXh0dXJlLmNkayhbJy0tYXBwJywgYXNtT3V0cHV0RGlyLCAnbHMnXSwgeyBjd2Q6IG9zLnRtcGRpcigpIH0pO1xuICAvLyBTYW1lIHN0YWNrcyB3ZSBrbm93IGFyZSBpbiB0aGUgYXBwXG4gIGV4cGVjdChsaXN0KS50b0NvbnRhaW4oYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXh9LWxhbWJkYWApO1xuICBleHBlY3QobGlzdCkudG9Db250YWluKGAke2ZpeHR1cmUuc3RhY2tOYW1lUHJlZml4fS10ZXN0LTFgKTtcbiAgZXhwZWN0KGxpc3QpLnRvQ29udGFpbihgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tdGVzdC0yYCk7XG5cbiAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gdXNlICcuJyBhbmQganVzdCBzeW50aCAsdGhlIGdlbmVyYXRlZCBhc21cbiAgY29uc3Qgc3RhY2tUZW1wbGF0ZSA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnLS1hcHAnLCAnLicsICdzeW50aCcsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0yJyldLCB7XG4gICAgY3dkOiBhc21PdXRwdXREaXIsXG4gIH0pO1xuICBleHBlY3Qoc3RhY2tUZW1wbGF0ZSkudG9Db250YWluKCd0b3BpYzE1MkQ4NEEzNycpO1xuXG4gIC8vIERlcGxveSBhIExhbWJkYSBmcm9tIHRoZSBjb3BpZWQgYXNtXG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEnLCB7IG9wdGlvbnM6IFsnLWEnLCAnLiddLCBjd2Q6IGFzbU91dHB1dERpciB9KTtcblxuICAvLyBSZW1vdmUgKHJlbmFtZSkgdGhlIG9yaWdpbmFsIGN1c3RvbSBkb2NrZXIgZmlsZSB0aGF0IHdhcyB1c2VkIGR1cmluZyBzeW50aC5cbiAgLy8gdGhpcyB2ZXJpZmllcyB0aGF0IHRoZSBhc3NlbWx5IGhhcyBhIGNvcHkgb2YgaXQgYW5kIHRoYXQgdGhlIG1hbmlmZXN0IHVzZXNcbiAgLy8gcmVsYXRpdmUgcGF0aHMgdG8gcmVmZXJlbmNlIHRvIGl0LlxuICBjb25zdCBjdXN0b21Eb2NrZXJGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnZG9ja2VyJywgJ0RvY2tlcmZpbGUuQ3VzdG9tJyk7XG4gIGF3YWl0IGZzLnJlbmFtZShjdXN0b21Eb2NrZXJGaWxlLCBgJHtjdXN0b21Eb2NrZXJGaWxlfX5gKTtcbiAgdHJ5IHtcblxuICAgIC8vIGRlcGxveSBhIGRvY2tlciBpbWFnZSB3aXRoIGN1c3RvbSBmaWxlIHdpdGhvdXQgc3ludGggKHVzZXMgYXNzZXRzKVxuICAgIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdkb2NrZXItd2l0aC1jdXN0b20tZmlsZScsIHsgb3B0aW9uczogWyctYScsICcuJ10sIGN3ZDogYXNtT3V0cHV0RGlyIH0pO1xuXG4gIH0gZmluYWxseSB7XG4gICAgLy8gUmVuYW1lIGJhY2sgdG8gcmVzdG9yZSBmaXh0dXJlIHRvIG9yaWdpbmFsIHN0YXRlXG4gICAgYXdhaXQgZnMucmVuYW1lKGAke2N1c3RvbURvY2tlckZpbGV9fmAsIGN1c3RvbURvY2tlckZpbGUpO1xuICB9XG59KSk7XG5cbmludGVnVGVzdCgndGVtcGxhdGVzIG9uIGRpc2sgY29udGFpbiBtZXRhZGF0YSByZXNvdXJjZSwgYWxzbyBpbiBuZXN0ZWQgYXNzZW1ibGllcycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBTeW50aCBmaXJzdCwgYW5kIHN3aXRjaCBvbiB2ZXJzaW9uIHJlcG9ydGluZyBiZWNhdXNlIGNkay5qc29uIGlzIGRpc2FibGluZyBpdFxuICBhd2FpdCBmaXh0dXJlLmNkayhbJ3N5bnRoJywgJy0tdmVyc2lvbi1yZXBvcnRpbmc9dHJ1ZSddKTtcblxuICAvLyBMb2FkIHRlbXBsYXRlIGZyb20gZGlzayBmcm9tIHJvb3QgYXNzZW1ibHlcbiAgY29uc3QgdGVtcGxhdGVDb250ZW50cyA9IGF3YWl0IGZpeHR1cmUuc2hlbGwoWydjYXQnLCAnY2RrLm91dC8qLWxhbWJkYS50ZW1wbGF0ZS5qc29uJ10pO1xuXG4gIGV4cGVjdChKU09OLnBhcnNlKHRlbXBsYXRlQ29udGVudHMpLlJlc291cmNlcy5DREtNZXRhZGF0YSkudG9CZVRydXRoeSgpO1xuXG4gIC8vIExvYWQgdGVtcGxhdGUgZnJvbSBuZXN0ZWQgYXNzZW1ibHlcbiAgY29uc3QgbmVzdGVkVGVtcGxhdGVDb250ZW50cyA9IGF3YWl0IGZpeHR1cmUuc2hlbGwoWydjYXQnLCAnY2RrLm91dC9hc3NlbWJseS0qLXN0YWdlLypTdGFja0luU3RhZ2UqLnRlbXBsYXRlLmpzb24nXSk7XG5cbiAgZXhwZWN0KEpTT04ucGFyc2UobmVzdGVkVGVtcGxhdGVDb250ZW50cykuUmVzb3VyY2VzLkNES01ldGFkYXRhKS50b0JlVHJ1dGh5KCk7XG59KSk7XG5cbmludGVnVGVzdCgnQ0RLIHN5bnRoIGFkZCB0aGUgbWV0YWRhdGEgcHJvcGVydGllcyBleHBlY3RlZCBieSBzYW0nLCB3aXRoU2FtSW50ZWdyYXRpb25GaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIC8vIFN5bnRoIGZpcnN0XG4gIGF3YWl0IGZpeHR1cmUuY2RrU3ludGgoKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IGZpeHR1cmUudGVtcGxhdGUoJ1Rlc3RTdGFjaycpO1xuXG4gIGNvbnN0IGV4cGVjdGVkUmVzb3VyY2VzID0gW1xuICAgIHtcbiAgICAgIC8vIFB5dGhvbiBMYXllciBWZXJzaW9uXG4gICAgICBpZDogJ1B5dGhvbkxheWVyVmVyc2lvbjM5NDk1Q0VGJyxcbiAgICAgIGNka0lkOiAnUHl0aG9uTGF5ZXJWZXJzaW9uJyxcbiAgICAgIGlzQnVuZGxlZDogdHJ1ZSxcbiAgICAgIHByb3BlcnR5OiAnQ29udGVudCcsXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBMYXllciBWZXJzaW9uXG4gICAgICBpZDogJ0xheWVyVmVyc2lvbjM4NzhEQTNBJyxcbiAgICAgIGNka0lkOiAnTGF5ZXJWZXJzaW9uJyxcbiAgICAgIGlzQnVuZGxlZDogZmFsc2UsXG4gICAgICBwcm9wZXJ0eTogJ0NvbnRlbnQnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVuZGxlZCBsYXllciB2ZXJzaW9uXG4gICAgICBpZDogJ0J1bmRsZWRMYXllclZlcnNpb25QeXRob25SdW50aW1lNkJBREJENkUnLFxuICAgICAgY2RrSWQ6ICdCdW5kbGVkTGF5ZXJWZXJzaW9uUHl0aG9uUnVudGltZScsXG4gICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICBwcm9wZXJ0eTogJ0NvbnRlbnQnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gUHl0aG9uIEZ1bmN0aW9uXG4gICAgICBpZDogJ1B5dGhvbkZ1bmN0aW9uMEJDRjc3RkQnLFxuICAgICAgY2RrSWQ6ICdQeXRob25GdW5jdGlvbicsXG4gICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gTG9nIFJldGVudGlvbiBGdW5jdGlvblxuICAgICAgaWQ6ICdMb2dSZXRlbnRpb25hYWUwYWEzYzViNGQ0Zjg3YjAyZDg1YjIwMWVmZGQ4YUZENEJGQzhBJyxcbiAgICAgIGNka0lkOiAnTG9nUmV0ZW50aW9uYWFlMGFhM2M1YjRkNGY4N2IwMmQ4NWIyMDFlZmRkOGEnLFxuICAgICAgaXNCdW5kbGVkOiBmYWxzZSxcbiAgICAgIHByb3BlcnR5OiAnQ29kZScsXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBGdW5jdGlvblxuICAgICAgaWQ6ICdGdW5jdGlvblB5dGhvblJ1bnRpbWUyOENCREEwNScsXG4gICAgICBjZGtJZDogJ0Z1bmN0aW9uUHl0aG9uUnVudGltZScsXG4gICAgICBpc0J1bmRsZWQ6IGZhbHNlLFxuICAgICAgcHJvcGVydHk6ICdDb2RlJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1bmRsZWQgRnVuY3Rpb25cbiAgICAgIGlkOiAnQnVuZGxlZEZ1bmN0aW9uUHl0aG9uUnVudGltZTREOUEwOTE4JyxcbiAgICAgIGNka0lkOiAnQnVuZGxlZEZ1bmN0aW9uUHl0aG9uUnVudGltZScsXG4gICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gTm9kZUpzIEZ1bmN0aW9uXG4gICAgICBpZDogJ05vZGVqc0Z1bmN0aW9uMDlDMUYyMEYnLFxuICAgICAgY2RrSWQ6ICdOb2RlanNGdW5jdGlvbicsXG4gICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gR28gRnVuY3Rpb25cbiAgICAgIGlkOiAnR29GdW5jdGlvbkNBOTVGQkFBJyxcbiAgICAgIGNka0lkOiAnR29GdW5jdGlvbicsXG4gICAgICBpc0J1bmRsZWQ6IHRydWUsXG4gICAgICBwcm9wZXJ0eTogJ0NvZGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gRG9ja2VyIEltYWdlIEZ1bmN0aW9uXG4gICAgICBpZDogJ0RvY2tlckltYWdlRnVuY3Rpb24yOEI3NzNFNicsXG4gICAgICBjZGtJZDogJ0RvY2tlckltYWdlRnVuY3Rpb24nLFxuICAgICAgZG9ja2VyRmlsZVBhdGg6ICdEb2NrZXJmaWxlJyxcbiAgICAgIHByb3BlcnR5OiAnQ29kZS5JbWFnZVVyaScsXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBTcGVjIFJlc3QgQXBpXG4gICAgICBpZDogJ1NwZWNSZXN0QVBJN0Q0QjNBMzQnLFxuICAgICAgY2RrSWQ6ICdTcGVjUmVzdEFQSScsXG4gICAgICBwcm9wZXJ0eTogJ0JvZHlTM0xvY2F0aW9uJyxcbiAgICB9LFxuICBdO1xuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZXhwZWN0ZWRSZXNvdXJjZXMpIHtcbiAgICBmaXh0dXJlLm91dHB1dC53cml0ZShgdmFsaWRhdGUgYXNzZXRzIG1ldGFkYXRhIGZvciByZXNvdXJjZSAke3Jlc291cmNlfWApO1xuICAgIGV4cGVjdChyZXNvdXJjZS5pZCBpbiB0ZW1wbGF0ZS5SZXNvdXJjZXMpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QodGVtcGxhdGUuUmVzb3VyY2VzW3Jlc291cmNlLmlkXSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lKCdUZXN0U3RhY2snKX0vJHtyZXNvdXJjZS5jZGtJZH0vUmVzb3VyY2VgLFxuICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL2Fzc2V0XFwuWzAtOWEtekEtWl17NjR9LyksXG4gICAgICAgICdhd3M6YXNzZXQ6aXMtYnVuZGxlZCc6IHJlc291cmNlLmlzQnVuZGxlZCxcbiAgICAgICAgJ2F3czphc3NldDpkb2NrZXJmaWxlLXBhdGgnOiByZXNvdXJjZS5kb2NrZXJGaWxlUGF0aCxcbiAgICAgICAgJ2F3czphc3NldDpwcm9wZXJ0eSc6IHJlc291cmNlLnByb3BlcnR5LFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBOZXN0ZWQgU3RhY2tcbiAgZml4dHVyZS5vdXRwdXQud3JpdGUoJ3ZhbGlkYXRlIGFzc2V0cyBtZXRhZGF0YSBmb3IgbmVzdGVkIHN0YWNrIHJlc291cmNlJyk7XG4gIGV4cGVjdCgnTmVzdGVkU3RhY2tOZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tSZXNvdXJjZUI3MDgzNEZEJyBpbiB0ZW1wbGF0ZS5SZXNvdXJjZXMpLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KHRlbXBsYXRlLlJlc291cmNlcy5OZXN0ZWRTdGFja05lc3RlZFN0YWNrTmVzdGVkU3RhY2tOZXN0ZWRTdGFja1Jlc291cmNlQjcwODM0RkQpLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIE1ldGFkYXRhOiB7XG4gICAgICAnYXdzOmNkazpwYXRoJzogYCR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lKCdUZXN0U3RhY2snKX0vTmVzdGVkU3RhY2suTmVzdGVkU3RhY2svTmVzdGVkU3RhY2suTmVzdGVkU3RhY2tSZXNvdXJjZWAsXG4gICAgICAnYXdzOmFzc2V0OnBhdGgnOiBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoYCR7Zml4dHVyZS5zdGFja05hbWVQcmVmaXgucmVwbGFjZSgvLS8sICcnKX1UZXN0U3RhY2tOZXN0ZWRTdGFja1swLTlBLVpdezh9XFwubmVzdGVkXFwudGVtcGxhdGVcXC5qc29uYCksXG4gICAgICAnYXdzOmFzc2V0OnByb3BlcnR5JzogJ1RlbXBsYXRlVVJMJyxcbiAgICB9LFxuICB9KSk7XG59KSk7XG5cbmludGVnVGVzdCgnQ0RLIHN5bnRoIGJ1bmRsZWQgZnVuY3Rpb25zIGFzIGV4cGVjdGVkJywgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBTeW50aCBmaXJzdFxuICBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKCk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBmaXh0dXJlLnRlbXBsYXRlKCdUZXN0U3RhY2snKTtcblxuICBjb25zdCBleHBlY3RlZEJ1bmRsZWRBc3NldHMgPSBbXG4gICAge1xuICAgICAgLy8gUHl0aG9uIExheWVyIFZlcnNpb25cbiAgICAgIGlkOiAnUHl0aG9uTGF5ZXJWZXJzaW9uMzk0OTVDRUYnLFxuICAgICAgZmlsZXM6IFtcbiAgICAgICAgJ3B5dGhvbi9sYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLFxuICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLFxuICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBMYXllciBWZXJzaW9uXG4gICAgICBpZDogJ0xheWVyVmVyc2lvbjM4NzhEQTNBJyxcbiAgICAgIGZpbGVzOiBbXG4gICAgICAgICdsYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLFxuICAgICAgICAncmVxdWlyZW1lbnRzLnR4dCcsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVuZGxlZCBsYXllciB2ZXJzaW9uXG4gICAgICBpZDogJ0J1bmRsZWRMYXllclZlcnNpb25QeXRob25SdW50aW1lNkJBREJENkUnLFxuICAgICAgZmlsZXM6IFtcbiAgICAgICAgJ3B5dGhvbi9sYXllcl92ZXJzaW9uX2RlcGVuZGVuY3kucHknLFxuICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLFxuICAgICAgICAncHl0aG9uL2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBQeXRob24gRnVuY3Rpb25cbiAgICAgIGlkOiAnUHl0aG9uRnVuY3Rpb24wQkNGNzdGRCcsXG4gICAgICBmaWxlczogW1xuICAgICAgICAnYXBwLnB5JyxcbiAgICAgICAgJ2dlb25hbWVzY2FjaGUvX19pbml0X18ucHknLFxuICAgICAgICAnZ2VvbmFtZXNjYWNoZS0xLjMuMC5kaXN0LWluZm8nLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEZ1bmN0aW9uXG4gICAgICBpZDogJ0Z1bmN0aW9uUHl0aG9uUnVudGltZTI4Q0JEQTA1JyxcbiAgICAgIGZpbGVzOiBbXG4gICAgICAgICdhcHAucHknLFxuICAgICAgICAncmVxdWlyZW1lbnRzLnR4dCcsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQnVuZGxlZCBGdW5jdGlvblxuICAgICAgaWQ6ICdCdW5kbGVkRnVuY3Rpb25QeXRob25SdW50aW1lNEQ5QTA5MTgnLFxuICAgICAgZmlsZXM6IFtcbiAgICAgICAgJ2FwcC5weScsXG4gICAgICAgICdnZW9uYW1lc2NhY2hlL19faW5pdF9fLnB5JyxcbiAgICAgICAgJ2dlb25hbWVzY2FjaGUtMS4zLjAuZGlzdC1pbmZvJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBOb2RlSnMgRnVuY3Rpb25cbiAgICAgIGlkOiAnTm9kZWpzRnVuY3Rpb24wOUMxRjIwRicsXG4gICAgICBmaWxlczogW1xuICAgICAgICAnaW5kZXguanMnLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEdvIEZ1bmN0aW9uXG4gICAgICBpZDogJ0dvRnVuY3Rpb25DQTk1RkJBQScsXG4gICAgICBmaWxlczogW1xuICAgICAgICAnYm9vdHN0cmFwJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBEb2NrZXIgSW1hZ2UgRnVuY3Rpb25cbiAgICAgIGlkOiAnRG9ja2VySW1hZ2VGdW5jdGlvbjI4Qjc3M0U2JyxcbiAgICAgIGZpbGVzOiBbXG4gICAgICAgICdhcHAuanMnLFxuICAgICAgICAnRG9ja2VyZmlsZScsXG4gICAgICAgICdwYWNrYWdlLmpzb24nLFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZXhwZWN0ZWRCdW5kbGVkQXNzZXRzKSB7XG4gICAgY29uc3QgYXNzZXRQYXRoID0gdGVtcGxhdGUuUmVzb3VyY2VzW3Jlc291cmNlLmlkXS5NZXRhZGF0YVsnYXdzOmFzc2V0OnBhdGgnXTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgcmVzb3VyY2UuZmlsZXMpIHtcbiAgICAgIGZpeHR1cmUub3V0cHV0LndyaXRlKGB2YWxpZGF0ZSBQYXRoICR7ZmlsZX0gZm9yIHJlc291cmNlICR7cmVzb3VyY2V9YCk7XG4gICAgICBleHBlY3QoZXhpc3RzU3luYyhwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JywgYXNzZXRQYXRoLCBmaWxlKSkpLnRvQmVUcnV0aHkoKTtcbiAgICB9XG4gIH1cbn0pKTtcblxuaW50ZWdUZXN0KCdzYW0gY2FuIGxvY2FsbHkgdGVzdCB0aGUgc3ludGhlc2l6ZWQgY2RrIGFwcGxpY2F0aW9uJywgd2l0aFNhbUludGVncmF0aW9uRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBTeW50aCBmaXJzdFxuICBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKCk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZml4dHVyZS5zYW1Mb2NhbFN0YXJ0QXBpKFxuICAgICdUZXN0U3RhY2snLCBmYWxzZSwgcmFuZG9tSW50ZWdlcigzMDAwMCwgNDAwMDApLCAnL3Jlc3RhcGlzL3NwZWMvcHl0aG9uRnVuY3Rpb24nKTtcbiAgZXhwZWN0KHJlc3VsdC5hY3Rpb25TdWNjZWVkZWQpLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KHJlc3VsdC5hY3Rpb25PdXRwdXQpLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIG1lc3NhZ2U6ICdIZWxsbyBXb3JsZCcsXG4gIH0pKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdza2lwcyBub3RpY2UgcmVmcmVzaCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka1N5bnRoKHtcbiAgICBvcHRpb25zOiBbJy0tbm8tbm90aWNlcyddLFxuICAgIG1vZEVudjoge1xuICAgICAgSU5URUdfU1RBQ0tfU0VUOiAnc3RhZ2UtdXNpbmctY29udGV4dCcsXG4gICAgfSxcbiAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gIH0pO1xuXG4gIC8vIE5laXRoZXIgc3VjY2VlZHMgbm9yIGZhaWxzLCBidXQgc2tpcHMgdGhlIHJlZnJlc2hcbiAgYXdhaXQgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignTm90aWNlcyByZWZyZXNoZWQnKTtcbiAgYXdhaXQgZXhwZWN0KG91dHB1dCkubm90LnRvQ29udGFpbignTm90aWNlcyByZWZyZXNoIGZhaWxlZCcpO1xufSkpO1xuXG4vKipcbiAqIENyZWF0ZSBhIHF1ZXVlLCBvcnBoYW4gdGhhdCBxdWV1ZSwgdGhlbiBpbXBvcnQgdGhlIHF1ZXVlLlxuICpcbiAqIFdlIHdhbnQgdG8gdGVzdCB3aXRoIGEgbGFyZ2UgdGVtcGxhdGUgdG8gbWFrZSBzdXJlIGxhcmdlIHRlbXBsYXRlcyBjYW4gd29yayB3aXRoIGltcG9ydC5cbiAqL1xuaW50ZWdUZXN0KCd0ZXN0IHJlc291cmNlIGltcG9ydCcsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCByYW5kb21QcmVmaXggPSByYW5kb21TdHJpbmcoKTtcbiAgY29uc3QgdW5pcXVlT3V0cHV0c0ZpbGVOYW1lID0gYCR7cmFuZG9tUHJlZml4fU91dHB1dHMuanNvbmA7IC8vIG90aGVyIHRlc3RzIHVzZSB0aGUgb3V0cHV0cyBmaWxlLiBNYWtlIHN1cmUgd2UgZG9uJ3QgY29sbGlkZS5cbiAgY29uc3Qgb3V0cHV0c0ZpbGUgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdvdXRwdXRzJywgdW5pcXVlT3V0cHV0c0ZpbGVOYW1lKTtcbiAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKG91dHB1dHNGaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgLy8gRmlyc3QsIGNyZWF0ZSBhIHN0YWNrIHRoYXQgaW5jbHVkZXMgbWFueSBxdWV1ZXMsIGFuZCBvbmUgcXVldWUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgYnV0IE5PVCBkZWxldGVkIGZyb20gQVdTLlxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnaW1wb3J0YWJsZS1zdGFjaycsIHtcbiAgICBtb2RFbnY6IHsgTEFSR0VfVEVNUExBVEU6ICcxJywgSU5DTFVERV9TSU5HTEVfUVVFVUU6ICcxJywgUkVUQUlOX1NJTkdMRV9RVUVVRTogJzEnIH0sXG4gICAgb3B0aW9uczogWyctLW91dHB1dHMtZmlsZScsIG91dHB1dHNGaWxlXSxcbiAgfSk7XG5cbiAgdHJ5IHtcblxuICAgIC8vIFNlY29uZCwgbm93IHRoZSBxdWV1ZSB3ZSB3aWxsIHJlbW92ZSBpcyBpbiB0aGUgc3RhY2sgYW5kIGhhcyBhIGxvZ2ljYWxJZC4gV2UgY2FuIG5vdyBtYWtlIHRoZSByZXNvdXJjZSBtYXBwaW5nIGZpbGUuXG4gICAgLy8gVGhpcyByZXNvdXJjZSBtYXBwaW5nIGZpbGUgd2lsbCBiZSB1c2VkIHRvIHRlbGwgdGhlIGltcG9ydCBvcGVyYXRpb24gd2hhdCBxdWV1ZSB0byBicmluZyBpbnRvIHRoZSBzdGFjay5cbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdpbXBvcnRhYmxlLXN0YWNrJyk7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoKGF3YWl0IGZzLnJlYWRGaWxlKG91dHB1dHNGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50b1N0cmluZygpKTtcbiAgICBjb25zdCBxdWV1ZUxvZ2ljYWxJZCA9IG91dHB1dHNbZnVsbFN0YWNrTmFtZV0uUXVldWVMb2dpY2FsSWQ7XG4gICAgY29uc3QgcXVldWVSZXNvdXJjZU1hcCA9IHtcbiAgICAgIFtxdWV1ZUxvZ2ljYWxJZF06IHsgUXVldWVVcmw6IG91dHB1dHNbZnVsbFN0YWNrTmFtZV0uUXVldWVVcmwgfSxcbiAgICB9O1xuICAgIGNvbnN0IG1hcHBpbmdGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnb3V0cHV0cycsIGAke3JhbmRvbVByZWZpeH1NYXBwaW5nLmpzb25gKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBtYXBwaW5nRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHF1ZXVlUmVzb3VyY2VNYXApLFxuICAgICAgeyBlbmNvZGluZzogJ3V0Zi04JyB9LFxuICAgICk7XG5cbiAgICAvLyBUaGlyZCwgcmVtb3ZlIHRoZSBxdWV1ZSBmcm9tIHRoZSBzdGFjaywgYnV0IGRvbid0IGRlbGV0ZSB0aGUgcXVldWUgZnJvbSBBV1MuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2ltcG9ydGFibGUtc3RhY2snLCB7XG4gICAgICBtb2RFbnY6IHsgTEFSR0VfVEVNUExBVEU6ICcxJywgSU5DTFVERV9TSU5HTEVfUVVFVUU6ICcwJywgUkVUQUlOX1NJTkdMRV9RVUVVRTogJzAnIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2ZuVGVtcGxhdGVCZWZvcmVJbXBvcnQgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZ2V0VGVtcGxhdGUnLCB7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KTtcbiAgICBleHBlY3QoY2ZuVGVtcGxhdGVCZWZvcmVJbXBvcnQuVGVtcGxhdGVCb2R5KS5ub3QudG9Db250YWluKHF1ZXVlTG9naWNhbElkKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBmaXh0dXJlLmNkayhcbiAgICAgIFsnaW1wb3J0JywgJy0tcmVzb3VyY2UtbWFwcGluZycsIG1hcHBpbmdGaWxlLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ2ltcG9ydGFibGUtc3RhY2snKV0sXG4gICAgICB7IG1vZEVudjogeyBMQVJHRV9URU1QTEFURTogJzEnLCBJTkNMVURFX1NJTkdMRV9RVUVVRTogJzEnLCBSRVRBSU5fU0lOR0xFX1FVRVVFOiAnMCcgfSB9LFxuICAgICk7XG5cbiAgICAvLyBUSEVOXG4gICAgY29uc3QgZGVzY3JpYmVTdGFja3NSZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHsgU3RhY2tOYW1lOiBmdWxsU3RhY2tOYW1lIH0pO1xuICAgIGNvbnN0IGNmblRlbXBsYXRlQWZ0ZXJJbXBvcnQgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZ2V0VGVtcGxhdGUnLCB7IFN0YWNrTmFtZTogZnVsbFN0YWNrTmFtZSB9KTtcbiAgICBleHBlY3QoZGVzY3JpYmVTdGFja3NSZXNwb25zZS5TdGFja3MhWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdJTVBPUlRfQ09NUExFVEUnKTtcbiAgICBleHBlY3QoY2ZuVGVtcGxhdGVBZnRlckltcG9ydC5UZW1wbGF0ZUJvZHkpLnRvQ29udGFpbihxdWV1ZUxvZ2ljYWxJZCk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYW4gdXBcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2ltcG9ydGFibGUtc3RhY2snKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ3Rlc3QgbWlncmF0ZSBkZXBsb3ltZW50IGZvciBhcHAgd2l0aCBsb2NhbGZpbGUgc291cmNlIGluIG1pZ3JhdGUuanNvbicsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBvdXRwdXRzRmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ291dHB1dHMnLCAnb3V0cHV0cy5qc29uJyk7XG4gIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShvdXRwdXRzRmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIEluaXRpYWwgZGVwbG95XG4gIGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdtaWdyYXRlLXN0YWNrJywge1xuICAgIG1vZEVudjogeyBPUlBIQU5fVE9QSUM6ICcxJyB9LFxuICAgIG9wdGlvbnM6IFsnLS1vdXRwdXRzLWZpbGUnLCBvdXRwdXRzRmlsZV0sXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dHMgPSBKU09OLnBhcnNlKChhd2FpdCBmcy5yZWFkRmlsZShvdXRwdXRzRmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkudG9TdHJpbmcoKSk7XG4gIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnbWlncmF0ZS1zdGFjaycpO1xuICBjb25zdCBxdWV1ZU5hbWUgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVOYW1lO1xuICBjb25zdCBxdWV1ZVVybCA9IG91dHB1dHNbc3RhY2tOYW1lXS5RdWV1ZVVybDtcbiAgY29uc3QgcXVldWVMb2dpY2FsSWQgPSBvdXRwdXRzW3N0YWNrTmFtZV0uUXVldWVMb2dpY2FsSWQ7XG4gIGZpeHR1cmUubG9nKGBDcmVhdGVkIHF1ZXVlICR7cXVldWVVcmx9IGluIHN0YWNrICR7Zml4dHVyZS5mdWxsU3RhY2tOYW1lfWApO1xuXG4gIC8vIFdyaXRlIHRoZSBtaWdyYXRlIGZpbGUgYmFzZWQgb24gdGhlIElEIGZyb20gc3RlcCBvbmUsIHRoZW4gZGVwbG95IHRoZSBhcHAgd2l0aCBtaWdyYXRlXG4gIGNvbnN0IG1pZ3JhdGVGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnbWlncmF0ZS5qc29uJyk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICBtaWdyYXRlRmlsZSwgSlNPTi5zdHJpbmdpZnkoXG4gICAgICB7IFNvdXJjZTogJ2xvY2FsZmlsZScsIFJlc291cmNlczogW3sgUmVzb3VyY2VUeXBlOiAnQVdTOjpTUVM6OlF1ZXVlJywgTG9naWNhbFJlc291cmNlSWQ6IHF1ZXVlTG9naWNhbElkLCBSZXNvdXJjZUlkZW50aWZpZXI6IHsgUXVldWVVcmw6IHF1ZXVlVXJsIH0gfV0gfSxcbiAgICApLFxuICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSxcbiAgKTtcblxuICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgZml4dHVyZS5sb2coYERlbGV0ZWQgc3RhY2sgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWV9LCBvcnBoYW5pbmcgJHtxdWV1ZU5hbWV9YCk7XG5cbiAgLy8gQ3JlYXRlIG5ldyBzdGFjayBmcm9tIGV4aXN0aW5nIHF1ZXVlXG4gIHRyeSB7XG4gICAgZml4dHVyZS5sb2coYERlcGxveWluZyBuZXcgc3RhY2sgJHtmaXh0dXJlLmZ1bGxTdGFja05hbWV9LCBtaWdyYXRpbmcgJHtxdWV1ZU5hbWV9IGludG8gc3RhY2tgKTtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbWlncmF0ZS1zdGFjaycpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENsZWFudXBcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ21pZ3JhdGUtc3RhY2snKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBMYW1iZGEgZnVuY3Rpb25cXCdzIGRlc2NyaXB0aW9uIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgY2FwdHVyZVN0ZGVycjogZmFsc2UsXG4gICAgbW9kRW52OiB7XG4gICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ29yaWdpbmFsIHZhbHVlJyxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdsYW1iZGEtaG90c3dhcCcsIHtcbiAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgb25seVN0ZGVycjogdHJ1ZSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAnbmV3IHZhbHVlJyxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICBTdGFja05hbWU6IHN0YWNrQXJuLFxuICB9KTtcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uWzBdLk91dHB1dFZhbHVlO1xuXG4gIC8vIFRIRU5cblxuICAvLyBUaGUgZGVwbG95bWVudCBzaG91bGQgbm90IHRyaWdnZXIgYSBmdWxsIGRlcGxveW1lbnQsIHRodXMgdGhlIHN0YWNrJ3Mgc3RhdHVzIG11c3QgcmVtYWluc1xuICAvLyBcIkNSRUFURV9DT01QTEVURVwiXG4gIGV4cGVjdChyZXNwb25zZS5TdGFja3M/LlswXS5TdGFja1N0YXR1cykudG9FcXVhbCgnQ1JFQVRFX0NPTVBMRVRFJyk7XG4gIGV4cGVjdChkZXBsb3lPdXRwdXQpLnRvQ29udGFpbihgTGFtYmRhIEZ1bmN0aW9uICcke2Z1bmN0aW9uTmFtZX0nIGhvdHN3YXBwZWQhYCk7XG59KSk7XG5cbmludGVnVGVzdCgnaG90c3dhcCBkZXBsb3ltZW50IHN1cHBvcnRzIEZuOjpJbXBvcnRWYWx1ZSBpbnRyaW5zaWMnLCB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgLy8gR0lWRU5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZXhwb3J0LXZhbHVlLXN0YWNrJyk7XG4gICAgY29uc3Qgc3RhY2tBcm4gPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnbGFtYmRhLWhvdHN3YXAnLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICBEWU5BTUlDX0xBTUJEQV9QUk9QRVJUWV9WQUxVRTogJ29yaWdpbmFsIHZhbHVlJyxcbiAgICAgICAgVVNFX0lNUE9SVF9WQUxVRV9MQU1CREFfUFJPUEVSVFk6ICd0cnVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2xhbWJkYS1ob3Rzd2FwJywge1xuICAgICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IHRydWUsXG4gICAgICBvbmx5U3RkZXJyOiB0cnVlLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIERZTkFNSUNfTEFNQkRBX1BST1BFUlRZX1ZBTFVFOiAnbmV3IHZhbHVlJyxcbiAgICAgICAgVVNFX0lNUE9SVF9WQUxVRV9MQU1CREFfUFJPUEVSVFk6ICd0cnVlJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpeHR1cmUuYXdzLmNsb3VkRm9ybWF0aW9uKCdkZXNjcmliZVN0YWNrcycsIHtcbiAgICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gICAgfSk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uWzBdLk91dHB1dFZhbHVlO1xuXG4gICAgLy8gVEhFTlxuXG4gICAgLy8gVGhlIGRlcGxveW1lbnQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgZnVsbCBkZXBsb3ltZW50LCB0aHVzIHRoZSBzdGFjaydzIHN0YXR1cyBtdXN0IHJlbWFpbnNcbiAgICAvLyBcIkNSRUFURV9DT01QTEVURVwiXG4gICAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYExhbWJkYSBGdW5jdGlvbiAnJHtmdW5jdGlvbk5hbWV9JyBob3Rzd2FwcGVkIWApO1xuXG4gIH0gZmluYWxseSB7XG4gICAgLy8gRW5zdXJlIGNsZWFudXAgaW4gcmV2ZXJzZSBvcmRlciBkdWUgdG8gdXNlIG9mIGltcG9ydC9leHBvcnRcbiAgICBhd2FpdCBmaXh0dXJlLmNka0Rlc3Ryb3koJ2xhbWJkYS1ob3Rzd2FwJyk7XG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXN0cm95KCdleHBvcnQtdmFsdWUtc3RhY2snKTtcbiAgfVxufSkpO1xuXG5pbnRlZ1Rlc3QoJ2hvdHN3YXAgZGVwbG95bWVudCBzdXBwb3J0cyBlY3Mgc2VydmljZScsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICBjYXB0dXJlU3RkZXJyOiB0cnVlLFxuICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgbW9kRW52OiB7XG4gICAgICBEWU5BTUlDX0VDU19QUk9QRVJUWV9WQUxVRTogJ25ldyB2YWx1ZScsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja3MnLCB7XG4gICAgU3RhY2tOYW1lOiBzdGFja0FybixcbiAgfSk7XG4gIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnU2VydmljZU5hbWUnKT8uT3V0cHV0VmFsdWU7XG5cbiAgLy8gVEhFTlxuXG4gIC8vIFRoZSBkZXBsb3ltZW50IHNob3VsZCBub3QgdHJpZ2dlciBhIGZ1bGwgZGVwbG95bWVudCwgdGh1cyB0aGUgc3RhY2sncyBzdGF0dXMgbXVzdCByZW1haW5zXG4gIC8vIFwiQ1JFQVRFX0NPTVBMRVRFXCJcbiAgZXhwZWN0KHJlc3BvbnNlLlN0YWNrcz8uWzBdLlN0YWNrU3RhdHVzKS50b0VxdWFsKCdDUkVBVEVfQ09NUExFVEUnKTtcbiAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKGBFQ1MgU2VydmljZSAnJHtzZXJ2aWNlTmFtZX0nIGhvdHN3YXBwZWQhYCk7XG59KSk7XG5cbmludGVnVGVzdCgnaG90c3dhcCBkZXBsb3ltZW50IGZvciBlY3Mgc2VydmljZSB3YWl0cyBmb3IgZGVwbG95bWVudCB0byBjb21wbGV0ZScsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFja0FybiA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnLCB7XG4gICAgb3B0aW9uczogWyctLWhvdHN3YXAnXSxcbiAgICBtb2RFbnY6IHtcbiAgICAgIERZTkFNSUNfRUNTX1BST1BFUlRZX1ZBTFVFOiAnbmV3IHZhbHVlJyxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBkZXNjcmliZVN0YWNrc1Jlc3BvbnNlID0gYXdhaXQgZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogc3RhY2tBcm4sXG4gIH0pO1xuICBjb25zdCBjbHVzdGVyTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnQ2x1c3Rlck5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IGRlc2NyaWJlU3RhY2tzUmVzcG9uc2UuU3RhY2tzPy5bMF0uT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PSAnU2VydmljZU5hbWUnKT8uT3V0cHV0VmFsdWUhO1xuXG4gIC8vIFRIRU5cblxuICBjb25zdCBkZXNjcmliZVNlcnZpY2VzUmVzcG9uc2UgPSBhd2FpdCBmaXh0dXJlLmF3cy5lY3MoJ2Rlc2NyaWJlU2VydmljZXMnLCB7XG4gICAgY2x1c3RlcjogY2x1c3Rlck5hbWUsXG4gICAgc2VydmljZXM6IFtzZXJ2aWNlTmFtZV0sXG4gIH0pO1xuICBleHBlY3QoZGVzY3JpYmVTZXJ2aWNlc1Jlc3BvbnNlLnNlcnZpY2VzPy5bMF0uZGVwbG95bWVudHMpLnRvSGF2ZUxlbmd0aCgxKTsgLy8gb25seSBvbmUgZGVwbG95bWVudCBwcmVzZW50XG5cbn0pKTtcblxuaW50ZWdUZXN0KCdob3Rzd2FwIGRlcGxveW1lbnQgZm9yIGVjcyBzZXJ2aWNlIGRldGVjdHMgZmFpbGVkIGRlcGxveW1lbnQgYW5kIGVycm9ycycsIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAvLyBHSVZFTlxuICBhd2FpdCBmaXh0dXJlLmNka0RlcGxveSgnZWNzLWhvdHN3YXAnKTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdlY3MtaG90c3dhcCcsIHtcbiAgICBvcHRpb25zOiBbJy0taG90c3dhcCddLFxuICAgIG1vZEVudjoge1xuICAgICAgVVNFX0lOVkFMSURfRUNTX0hPVFNXQVBfSU1BR0U6ICd0cnVlJyxcbiAgICB9LFxuICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oYOKdjCAgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tZWNzLWhvdHN3YXAgZmFpbGVkOiBSZXNvdXJjZU5vdFJlYWR5OiBSZXNvdXJjZSBpcyBub3QgaW4gdGhlIHN0YXRlIGRlcGxveW1lbnRDb21wbGV0ZWRgKTtcbiAgZXhwZWN0KGRlcGxveU91dHB1dCkubm90LnRvQ29udGFpbignaG90c3dhcHBlZCEnKTtcbn0pKTtcblxuYXN5bmMgZnVuY3Rpb24gbGlzdENoaWxkcmVuKHBhcmVudDogc3RyaW5nLCBwcmVkOiAoeDogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+KSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgYXdhaXQgZnMucmVhZGRpcihwYXJlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwYXJlbnQsIGNoaWxkLnRvU3RyaW5nKCkpO1xuICAgIGlmIChhd2FpdCBwcmVkKGZ1bGxQYXRoKSkge1xuICAgICAgcmV0LnB1c2goZnVsbFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0Q2hpbGREaXJzKHBhcmVudDogc3RyaW5nKSB7XG4gIHJldHVybiBsaXN0Q2hpbGRyZW4ocGFyZW50LCBhc3luYyAoZnVsbFBhdGg6IHN0cmluZykgPT4gKGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpKS5pc0RpcmVjdG9yeSgpKTtcbn1cbiJdfQ==
|