aws-cdk 2.5.0 → 2.9.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/README.md +8 -1
- package/bin/cdk.js +22 -6
- package/build-info.json +2 -2
- package/lib/api/aws-auth/sdk-provider.d.ts +26 -1
- package/lib/api/aws-auth/sdk-provider.js +4 -4
- package/lib/api/aws-auth/sdk.d.ts +2 -0
- package/lib/api/aws-auth/sdk.js +4 -1
- package/lib/api/bootstrap/deploy-bootstrap.js +14 -3
- package/lib/api/cloudformation-deployments.d.ts +63 -1
- package/lib/api/cloudformation-deployments.js +74 -4
- package/lib/api/cxapp/cloud-assembly.js +5 -5
- package/lib/api/deploy-stack.d.ts +0 -1
- package/lib/api/deploy-stack.js +8 -9
- package/lib/api/{hotswap/evaluate-cloudformation-template.d.ts → evaluate-cloudformation-template.d.ts} +14 -1
- package/lib/api/evaluate-cloudformation-template.js +289 -0
- package/lib/api/hotswap/code-build-projects.d.ts +1 -1
- package/lib/api/hotswap/code-build-projects.js +2 -2
- package/lib/api/hotswap/common.d.ts +0 -6
- package/lib/api/hotswap/common.js +2 -19
- package/lib/api/hotswap/ecs-services.d.ts +1 -1
- package/lib/api/hotswap/ecs-services.js +2 -2
- package/lib/api/hotswap/lambda-functions.d.ts +1 -1
- package/lib/api/hotswap/lambda-functions.js +69 -3
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +1 -1
- package/lib/api/hotswap/s3-bucket-deployments.js +1 -1
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +1 -1
- package/lib/api/hotswap/stepfunctions-state-machines.js +1 -1
- package/lib/api/hotswap-deployments.js +9 -35
- package/lib/api/logs/find-cloudwatch-logs.d.ts +24 -0
- package/lib/api/logs/find-cloudwatch-logs.js +84 -0
- package/lib/api/logs/logs-monitor.d.ts +53 -0
- package/lib/api/logs/logs-monitor.js +163 -0
- package/lib/api/toolkit-info.d.ts +5 -5
- package/lib/api/toolkit-info.js +10 -10
- package/lib/api/util/cloudformation/stack-activity-monitor.js +22 -22
- package/lib/assets.js +3 -3
- package/lib/cdk-toolkit.d.ts +15 -0
- package/lib/cdk-toolkit.js +30 -20
- package/lib/commands/context.js +7 -7
- package/lib/commands/docs.js +4 -4
- package/lib/commands/doctor.js +6 -6
- package/lib/context-providers/ami.js +2 -2
- package/lib/context-providers/availability-zones.js +2 -2
- package/lib/context-providers/endpoint-service-availability-zones.js +2 -2
- package/lib/context-providers/hosted-zones.js +2 -2
- package/lib/context-providers/keys.js +2 -2
- package/lib/context-providers/load-balancers.js +3 -3
- package/lib/context-providers/security-groups.js +2 -2
- package/lib/context-providers/ssm-parameters.js +2 -2
- package/lib/context-providers/vpcs.js +2 -2
- package/lib/diff.js +3 -3
- package/lib/init.js +14 -14
- package/lib/logging.js +7 -7
- package/lib/os.js +3 -3
- package/lib/plugin.js +4 -4
- package/lib/util/asset-publishing.js +3 -3
- package/lib/util/console-formatters.js +4 -3
- package/lib/version.js +3 -3
- package/npm-shrinkwrap.json +90 -95
- package/package.json +22 -21
- package/test/api/bootstrap2.test.js +2 -3
- package/test/api/cloudformation-deployments.test.js +2 -2
- package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +64 -0
- package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.js +139 -0
- package/test/api/logs/find-cloudwatch-logs.test.d.ts +1 -0
- package/test/api/logs/find-cloudwatch-logs.test.js +264 -0
- package/test/api/logs/logs-monitor.test.d.ts +1 -0
- package/test/api/logs/logs-monitor.test.js +59 -0
- package/test/api/sdk-provider.test.js +11 -11
- package/test/api/stack-activity-monitor.test.js +13 -13
- package/test/cdk-toolkit.test.js +271 -10
- package/test/context-providers/load-balancers.test.js +4 -4
- package/test/util/cloudformation.test.js +2 -2
- package/test/util/console-formatters.test.js +6 -6
- package/test/util/mock-sdk.d.ts +8 -2
- package/test/util/mock-sdk.js +12 -2
- package/test/util/mock-toolkitinfo.js +2 -2
- package/lib/api/hotswap/evaluate-cloudformation-template.js +0 -247
|
@@ -90,7 +90,7 @@ class SdkProvider {
|
|
|
90
90
|
if (baseCreds.source === 'incorrectDefault') {
|
|
91
91
|
throw new Error(fmtObtainCredentialsError(env.account, baseCreds));
|
|
92
92
|
}
|
|
93
|
-
return new sdk_1.SDK(baseCreds.credentials, env.region, this.sdkOptions);
|
|
93
|
+
return { sdk: new sdk_1.SDK(baseCreds.credentials, env.region, this.sdkOptions), didAssumeRole: false };
|
|
94
94
|
}
|
|
95
95
|
// We will proceed to AssumeRole using whatever we've been given.
|
|
96
96
|
const sdk = await this.withAssumedRole(baseCreds, options.assumeRoleArn, options.assumeRoleExternalId, env.region);
|
|
@@ -98,7 +98,7 @@ class SdkProvider {
|
|
|
98
98
|
// we can determine whether the AssumeRole call succeeds or not.
|
|
99
99
|
try {
|
|
100
100
|
await sdk.forceCredentialRetrieval();
|
|
101
|
-
return sdk;
|
|
101
|
+
return { sdk, didAssumeRole: true };
|
|
102
102
|
}
|
|
103
103
|
catch (e) {
|
|
104
104
|
// AssumeRole failed. Proceed and warn *if and only if* the baseCredentials were already for the right account
|
|
@@ -108,7 +108,7 @@ class SdkProvider {
|
|
|
108
108
|
if (baseCreds.source === 'correctDefault' || baseCreds.source === 'plugin') {
|
|
109
109
|
logging_1.debug(e.message);
|
|
110
110
|
logging_1.warning(`${fmtObtainedCredentials(baseCreds)} could not be used to assume '${options.assumeRoleArn}', but are for the right account. Proceeding anyway.`);
|
|
111
|
-
return new sdk_1.SDK(baseCreds.credentials, env.region, this.sdkOptions);
|
|
111
|
+
return { sdk: new sdk_1.SDK(baseCreds.credentials, env.region, this.sdkOptions), didAssumeRole: false };
|
|
112
112
|
}
|
|
113
113
|
throw e;
|
|
114
114
|
}
|
|
@@ -375,4 +375,4 @@ function fmtObtainedCredentials(obtainResult) {
|
|
|
375
375
|
return msg.join('');
|
|
376
376
|
}
|
|
377
377
|
}
|
|
378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUUvQiwrQkFBK0I7QUFDL0IsMkNBQStDO0FBQy9DLG9EQUE4QztBQUM5Qyx1RUFBbUU7QUFFbkUsMkRBQXVEO0FBQ3ZELCtCQUFrQztBQUdsQywwREFBMEQ7QUFDMUQseUJBQXlCO0FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBMkR0RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNoRCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBRXhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBYSxXQUFXO0lBMEJ0QixZQUNtQixZQUF5QztJQUMxRDs7T0FFRztJQUNhLGFBQXFCLEVBQ3BCLGFBQW1DLEVBQUU7UUFMckMsaUJBQVksR0FBWixZQUFZLENBQTZCO1FBSTFDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3BCLGVBQVUsR0FBVixVQUFVLENBQTJCO1FBUnZDLFlBQU8sR0FBRyxJQUFJLHNDQUFpQixFQUFFLENBQUM7SUFTbkQsQ0FBQztJQWhDRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsVUFBOEIsRUFBRTs7UUFDL0UsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLE9BQUMsT0FBTyxDQUFDLFdBQVcsbUNBQUksRUFBRSxDQUFDLENBQUM7UUFFL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxvQ0FBZ0IsQ0FBQyxlQUFlLENBQUM7WUFDbkQsT0FBTyxFQUFFLE9BQU8s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LENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyw2REFBNkQsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hIO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVkLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN2QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbk9wdGlvbnMgfSBmcm9tICdhd3Mtc2RrL2xpYi9jb25maWctYmFzZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkZWJ1Zywgd2FybmluZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgY2FjaGVkIH0gZnJvbSAnLi4vLi4vdXRpbC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbFBsdWdpbnMgfSBmcm9tICcuLi9hd3MtYXV0aC9jcmVkZW50aWFsLXBsdWdpbnMnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL2F3cy1hdXRoL2NyZWRlbnRpYWxzJztcbmltcG9ydCB7IEF3c0NsaUNvbXBhdGlibGUgfSBmcm9tICcuL2F3c2NsaS1jb21wYXRpYmxlJztcbmltcG9ydCB7IElTREssIFNESyB9IGZyb20gJy4vc2RrJztcblxuXG4vLyBTb21lIGNvbmZpZ3VyYXRpb24gdGhhdCBjYW4gb25seSBiZSBhY2hpZXZlZCBieSBzZXR0aW5nXG4vLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG5wcm9jZXNzLmVudi5BV1NfU1RTX1JFR0lPTkFMX0VORFBPSU5UUyA9ICdyZWdpb25hbCc7XG5wcm9jZXNzLmVudi5BV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRCA9ICcxJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZGVmYXVsdCBTREsgcHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZGtQcm92aWRlck9wdGlvbnMge1xuICAvKipcbiAgICogUHJvZmlsZSB0byByZWFkIGZyb20gfi8uYXdzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBzaG91bGQgY2hlY2sgZm9yIEVDMiBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF1dG9kZXRlY3RcbiAgICovXG4gIHJlYWRvbmx5IGVjMmNyZWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBzaG91bGQgY2hlY2sgZm9yIGNvbnRhaW5lciBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF1dG9kZXRlY3RcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckNyZWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSFRUUCBvcHRpb25zIGZvciBTREtcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBPcHRpb25zPzogU2RrSHR0cE9wdGlvbnM7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgaW5kaXZpZHVhbCBTREtzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrSHR0cE9wdGlvbnMge1xuICAvKipcbiAgICogUHJveHkgYWRkcmVzcyB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5QWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwYXRoIHRvIGEgY2VydGlmaWNhdGUgYnVuZGxlIHRoYXQgY29udGFpbnMgYSBjZXJ0IHRvIGJlIHRydXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGNlcnRpZmljYXRlIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHVzZXIgYWdlbnQgdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDxwYWNrYWdlLW5hbWU+LzxwYWNrYWdlLXZlcnNpb24+XG4gICAqL1xuICByZWFkb25seSB1c2VyQWdlbnQ/OiBzdHJpbmc7XG59XG5cbmNvbnN0IENBQ0hFRF9BQ0NPVU5UID0gU3ltYm9sKCdjYWNoZWRfYWNjb3VudCcpO1xuY29uc3QgQ0FDSEVEX0RFRkFVTFRfQ1JFREVOVElBTFMgPSBTeW1ib2woJ2NhY2hlZF9kZWZhdWx0X2NyZWRlbnRpYWxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBpbnN0YW5jZXMgb2YgdGhlIEFXUyBTREsgYXBwcm9wcmlhdGUgZm9yIGEgZ2l2ZW4gYWNjb3VudC9yZWdpb24uXG4gKlxuICogQmVoYXZpb3IgaXMgYXMgZm9sbG93czpcbiAqXG4gKiAtIEZpcnN0LCBhIHNldCBvZiBcImJhc2VcIiBjcmVkZW50aWFscyBhcmUgZXN0YWJsaXNoZWRcbiAqICAgLSBJZiBhIHRhcmdldCBlbnZpcm9ubWVudCBpcyBnaXZlbiBhbmQgdGhlIGRlZmF1bHQgKFwiY3VycmVudFwiKSBTREsgY3JlZGVudGlhbHMgYXJlIGZvclxuICogICAgIHRoYXQgYWNjb3VudCwgcmV0dXJuIHRob3NlOyBvdGhlcndpc2VcbiAqICAgLSBJZiBhIHRhcmdldCBlbnZpcm9ubWVudCBpcyBnaXZlbiwgc2NhbiBhbGwgY3JlZGVudGlhbCBwcm92aWRlciBwbHVnaW5zXG4gKiAgICAgZm9yIGNyZWRlbnRpYWxzLCBhbmQgcmV0dXJuIHRob3NlIGlmIGZvdW5kOyBvdGhlcndpc2VcbiAqICAgLSBSZXR1cm4gZGVmYXVsdCAoXCJjdXJyZW50XCIpIFNESyBjcmVkZW50aWFscywgbm90aW5nIHRoYXQgdGhleSBtaWdodCBiZSB3cm9uZy5cbiAqXG4gKiAtIFNlY29uZCwgYSByb2xlIG1heSBvcHRpb25hbGx5IG5lZWQgdG8gYmUgYXNzdW1lZC4gVXNlIHRoZSBiYXNlIGNyZWRlbnRpYWxzXG4gKiAgIGVzdGFibGlzaGVkIGluIHRoZSBwcmV2aW91cyBwcm9jZXNzIHRvIGFzc3VtZSB0aGF0IHJvbGUuXG4gKiAgIC0gSWYgYXNzdW1pbmcgdGhlIHJvbGUgZmFpbHMgYW5kIHRoZSBiYXNlIGNyZWRlbnRpYWxzIGFyZSBmb3IgdGhlIGNvcnJlY3RcbiAqICAgICBhY2NvdW50LCByZXR1cm4gdGhvc2UuIFRoaXMgaXMgYSBmYWxsYmFjayBmb3IgcGVvcGxlIHdobyBhcmUgdHJ5aW5nIHRvIGludGVyYWN0XG4gKiAgICAgd2l0aCBhIERlZmF1bHQgU3ludGhlc2l6ZWQgc3RhY2sgYW5kIGFscmVhZHkgaGF2ZSByaWdodCBjcmVkZW50aWFscyBzZXR1cC5cbiAqXG4gKiAgICAgVHlwaWNhbCBjYXNlcyB3ZSBzZWUgaW4gdGhlIHdpbGQ6XG4gKiAgICAgLSBDcmVkZW50aWFsIHBsdWdpbiBzZXR1cCB0aGF0LCBhbHRob3VnaCBub3QgcmVjb21tZW5kZWQsIHdvcmtzIGZvciB0aGVtXG4gKiAgICAgLSBTZWVkZWQgdGVybWluYWwgd2l0aCBgUmVhZE9ubHlgIGNyZWRlbnRpYWxzIGluIG9yZGVyIHRvIGRvIGBjZGsgZGlmZmAtLXRoZSBgUmVhZE9ubHlgXG4gKiAgICAgICByb2xlIGRvZXNuJ3QgaGF2ZSBgc3RzOkFzc3VtZVJvbGVgIGFuZCB3aWxsIGZhaWwgZm9yIG5vIHJlYWwgZ29vZCByZWFzb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBTZGtQcm92aWRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgU2RrUHJvdmlkZXIgd2hpY2ggZ2V0cyBpdHMgZGVmYXVsdHMgaW4gYSB3YXkgdGhhdCBiZWhhdmVzIGxpa2UgdGhlIEFXUyBDTEkgZG9lc1xuICAgKlxuICAgKiBUaGUgQVdTIFNESyBmb3IgSlMgYmVoYXZlcyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBBV1MgQ0xJIGluIGEgbnVtYmVyIG9mIHdheXM7IHNlZSB0aGVcbiAgICogY2xhc3MgYEF3c0NsaUNvbXBhdGlibGVgIGZvciB0aGUgZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgd2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyhvcHRpb25zOiBTZGtQcm92aWRlck9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHNka09wdGlvbnMgPSBwYXJzZUh0dHBPcHRpb25zKG9wdGlvbnMuaHR0cE9wdGlvbnMgPz8ge30pO1xuXG4gICAgY29uc3QgY2hhaW4gPSBhd2FpdCBBd3NDbGlDb21wYXRpYmxlLmNyZWRlbnRpYWxDaGFpbih7XG4gICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICBlYzJpbnN0YW5jZTogb3B0aW9ucy5lYzJjcmVkcyxcbiAgICAgIGNvbnRhaW5lckNyZWRzOiBvcHRpb25zLmNvbnRhaW5lckNyZWRzLFxuICAgICAgaHR0cE9wdGlvbnM6IHNka09wdGlvbnMuaHR0cE9wdGlvbnMsXG4gICAgfSk7XG4gICAgY29uc3QgcmVnaW9uID0gYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5yZWdpb24oe1xuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgZWMyaW5zdGFuY2U6IG9wdGlvbnMuZWMyY3JlZHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFNka1Byb3ZpZGVyKGNoYWluLCByZWdpb24sIHNka09wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5zID0gbmV3IENyZWRlbnRpYWxQbHVnaW5zKCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENoYWluOiBBV1MuQ3JlZGVudGlhbFByb3ZpZGVyQ2hhaW4sXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCByZWdpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJlZ2lvbjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2RrT3B0aW9uczogQ29uZmlndXJhdGlvbk9wdGlvbnMgPSB7fSkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBTREsgd2hpY2ggY2FuIGRvIG9wZXJhdGlvbnMgaW4gdGhlIGdpdmVuIGVudmlyb25tZW50XG4gICAqXG4gICAqIFRoZSBgZW52aXJvbm1lbnRgIHBhcmFtZXRlciBpcyByZXNvbHZlZCBmaXJzdCAoc2VlIGByZXNvbHZlRW52aXJvbm1lbnQoKWApLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCwgbW9kZTogTW9kZSwgb3B0aW9ucz86IENyZWRlbnRpYWxzT3B0aW9ucyk6IFByb21pc2U8SVNESz4ge1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMucmVzb2x2ZUVudmlyb25tZW50KGVudmlyb25tZW50KTtcbiAgICBjb25zdCBiYXNlQ3JlZHMgPSBhd2FpdCB0aGlzLm9idGFpbkJhc2VDcmVkZW50aWFscyhlbnYuYWNjb3VudCwgbW9kZSk7XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIGF0IGxlYXN0IFNPTUUgY3JlZGVudGlhbHNcbiAgICBpZiAoYmFzZUNyZWRzLnNvdXJjZSA9PT0gJ25vbmUnKSB7IHRocm93IG5ldyBFcnJvcihmbXRPYnRhaW5DcmVkZW50aWFsc0Vycm9yKGVudi5hY2NvdW50LCBiYXNlQ3JlZHMpKTsgfVxuXG4gICAgLy8gU2ltcGxlIGNhc2UgaXMgaWYgd2UgZG9uJ3QgbmVlZCB0byBcImFzc3VtZVJvbGVcIiBoZXJlLiBJZiBzbywgd2UgbXVzdCBub3cgaGF2ZSBjcmVkZW50aWFscyBmb3IgdGhlIHJpZ2h0XG4gICAgLy8gYWNjb3VudC5cbiAgICBpZiAob3B0aW9ucz8uYXNzdW1lUm9sZUFybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYmFzZUNyZWRzLnNvdXJjZSA9PT0gJ2luY29ycmVjdERlZmF1bHQnKSB7IHRocm93IG5ldyBFcnJvcihmbXRPYnRhaW5DcmVkZW50aWFsc0Vycm9yKGVudi5hY2NvdW50LCBiYXNlQ3JlZHMpKTsgfVxuICAgICAgcmV0dXJuIG5ldyBTREsoYmFzZUNyZWRzLmNyZWRlbnRpYWxzLCBlbnYucmVnaW9uLCB0aGlzLnNka09wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIFdlIHdpbGwgcHJvY2VlZCB0byBBc3N1bWVSb2xlIHVzaW5nIHdoYXRldmVyIHdlJ3ZlIGJlZW4gZ2l2ZW4uXG4gICAgY29uc3Qgc2RrID0gYXdhaXQgdGhpcy53aXRoQXNzdW1lZFJvbGUoYmFzZUNyZWRzLCBvcHRpb25zLmFzc3VtZVJvbGVBcm4sIG9wdGlvbnMuYXNzdW1lUm9sZUV4dGVybmFsSWQsIGVudi5yZWdpb24pO1xuXG4gICAgLy8gRXhlcmNpc2UgdGhlIEFzc3VtZVJvbGVDcmVkZW50aWFsc1Byb3ZpZGVyIHdlJ3ZlIGdvdHRlbiBhdCBsZWFzdCBvbmNlIHNvXG4gICAgLy8gd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIHRoZSBBc3N1bWVSb2xlIGNhbGwgc3VjY2VlZHMgb3Igbm90LlxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZGsuZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCk7XG4gICAgICByZXR1cm4gc2RrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEFzc3VtZVJvbGUgZmFpbGVkLiBQcm9jZWVkIGFuZCB3YXJuICppZiBhbmQgb25seSBpZiogdGhlIGJhc2VDcmVkZW50aWFscyB3ZXJlIGFscmVhZHkgZm9yIHRoZSByaWdodCBhY2NvdW50XG4gICAgICAvLyBvciByZXR1cm5lZCBmcm9tIGEgcGx1Z2luLiBUaGlzIGlzIHRvIGNvdmVyIHNvbWUgY3VycmVudCBzZXR1cHMgZm9yIHBlb3BsZSB1c2luZyBwbHVnaW5zIG9yIHByZWZlcnJpbmcgdG9cbiAgICAgIC8vIGZlZWQgdGhlIENMSSBjcmVkZW50aWFscyB3aGljaCBhcmUgc3VmZmljaWVudCBieSB0aGVtc2VsdmVzLiBQcmVmZXIgdG8gYXNzdW1lIHRoZSBjb3JyZWN0IHJvbGUgaWYgd2UgY2FuLFxuICAgICAgLy8gYnV0IGlmIHdlIGNhbid0IHRoZW4gbGV0J3MganVzdCB0cnkgd2l0aCBhdmFpbGFibGUgY3JlZGVudGlhbHMgYW55d2F5LlxuICAgICAgaWYgKGJhc2VDcmVkcy5zb3VyY2UgPT09ICdjb3JyZWN0RGVmYXVsdCcgfHwgYmFzZUNyZWRzLnNvdXJjZSA9PT0gJ3BsdWdpbicpIHtcbiAgICAgICAgZGVidWcoZS5tZXNzYWdlKTtcbiAgICAgICAgd2FybmluZyhgJHtmbXRPYnRhaW5lZENyZWRlbnRpYWxzKGJhc2VDcmVkcyl9IGNvdWxkIG5vdCBiZSB1c2VkIHRvIGFzc3VtZSAnJHtvcHRpb25zLmFzc3VtZVJvbGVBcm59JywgYnV0IGFyZSBmb3IgdGhlIHJpZ2h0IGFjY291bnQuIFByb2NlZWRpbmcgYW55d2F5LmApO1xuICAgICAgICByZXR1cm4gbmV3IFNESyhiYXNlQ3JlZHMuY3JlZGVudGlhbHMsIGVudi5yZWdpb24sIHRoaXMuc2RrT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcGFydGl0aW9uIHRoYXQgYmFzZSBjcmVkZW50aWFscyBhcmUgZm9yXG4gICAqXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlcmUgYXJlIG5vIGJhc2UgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYmFzZUNyZWRlbnRpYWxzUGFydGl0aW9uKGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCwgbW9kZTogTW9kZSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5yZXNvbHZlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IGJhc2VDcmVkcyA9IGF3YWl0IHRoaXMub2J0YWluQmFzZUNyZWRlbnRpYWxzKGVudi5hY2NvdW50LCBtb2RlKTtcbiAgICBpZiAoYmFzZUNyZWRzLnNvdXJjZSA9PT0gJ25vbmUnKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICByZXR1cm4gKGF3YWl0IG5ldyBTREsoYmFzZUNyZWRzLmNyZWRlbnRpYWxzLCBlbnYucmVnaW9uLCB0aGlzLnNka09wdGlvbnMpLmN1cnJlbnRBY2NvdW50KCkpLnBhcnRpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzdGFja1xuICAgKlxuICAgKiBSZXBsYWNlcyB0aGUgbWFnaWMgdmFsdWVzIGBVTktOT1dOX1JFR0lPTmAgYW5kIGBVTktOT1dOX0FDQ09VTlRgXG4gICAqIHdpdGggdGhlIGRlZmF1bHRzIGZvciB0aGUgY3VycmVudCBTREsgY29uZmlndXJhdGlvbiAoYH4vLmF3cy9jb25maWdgIG9yXG4gICAqIG90aGVyd2lzZSkuXG4gICAqXG4gICAqIEl0IGlzIGFuIGVycm9yIGlmIGBVTktOT1dOX0FDQ09VTlRgIGlzIHVzZWQgYnV0IHRoZSB1c2VyIGhhc24ndCBjb25maWd1cmVkXG4gICAqIGFueSBTREsgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUVudmlyb25tZW50KGVudjogY3hhcGkuRW52aXJvbm1lbnQpOiBQcm9taXNlPGN4YXBpLkVudmlyb25tZW50PiB7XG4gICAgY29uc3QgcmVnaW9uID0gZW52LnJlZ2lvbiAhPT0gY3hhcGkuVU5LTk9XTl9SRUdJT04gPyBlbnYucmVnaW9uIDogdGhpcy5kZWZhdWx0UmVnaW9uO1xuICAgIGNvbnN0IGFjY291bnQgPSBlbnYuYWNjb3VudCAhPT0gY3hhcGkuVU5LTk9XTl9BQ0NPVU5UID8gZW52LmFjY291bnQgOiAoYXdhaXQgdGhpcy5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkO1xuXG4gICAgaWYgKCFhY2NvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIEFXUyBhY2NvdW50IHRvIHVzZS4gSXQgbXVzdCBiZSBlaXRoZXIgY29uZmlndXJlZCB3aGVuIHlvdSBkZWZpbmUgeW91ciBDREsgU3RhY2ssIG9yIHRocm91Z2ggdGhlIGVudmlyb25tZW50Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFjY291bnQsXG4gICAgICBuYW1lOiBjeGFwaS5FbnZpcm9ubWVudFV0aWxzLmZvcm1hdChhY2NvdW50LCByZWdpb24pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFjY291bnQgd2UnZCBhdXRoIGludG8gaWYgd2UgdXNlZCBkZWZhdWx0IGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBEZWZhdWx0IGNyZWRlbnRpYWxzIGFyZSB0aGUgc2V0IG9mIGFtYmllbnRseSBjb25maWd1cmVkIGNyZWRlbnRpYWxzIHVzaW5nXG4gICAqIG9uZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBvciB+Ly5hd3MvY3JlZGVudGlhbHMsIG9yIHRoZSAqb25lKlxuICAgKiBwcm9maWxlIHRoYXQgd2FzIHBhc3NlZCBpbnRvIHRoZSBDTEkuXG4gICAqXG4gICAqIE1pZ2h0IHJldHVybiB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIGRlZmF1bHQvYW1iaWVudCBjcmVkZW50aWFsc1xuICAgKiBhdmFpbGFibGUgKGluIHdoaWNoIGNhc2UgdGhlIHVzZXIgc2hvdWxkIGJldHRlciBob3BlIHRoZXkgaGF2ZVxuICAgKiBjcmVkZW50aWFsIHBsdWdpbnMgY29uZmlndXJlZCkuXG4gICAqXG4gICAqIFVzZXMgYSBjYWNoZSB0byBhdm9pZCBTVFMgY2FsbHMgaWYgd2UgZG9uJ3QgbmVlZCAnZW0uXG4gICAqL1xuICBwdWJsaWMgZGVmYXVsdEFjY291bnQoKTogUHJvbWlzZTxBY2NvdW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIGNhY2hlZCh0aGlzLCBDQUNIRURfQUNDT1VOVCwgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCB0aGlzLmRlZmF1bHRDcmVkZW50aWFscygpO1xuXG4gICAgICAgIGNvbnN0IGFjY2Vzc0tleUlkID0gY3JlZHMuYWNjZXNzS2V5SWQ7XG4gICAgICAgIGlmICghYWNjZXNzS2V5SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIEFXUyBjcmVkZW50aWFscyAoc2V0dXAgd2l0aCBcImF3cyBjb25maWd1cmVcIiknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXcgU0RLKGNyZWRzLCB0aGlzLmRlZmF1bHRSZWdpb24sIHRoaXMuc2RrT3B0aW9ucykuY3VycmVudEFjY291bnQoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVidWcoJ1VuYWJsZSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgQVdTIGFjY291bnQ6JywgZSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzIGZvciB0aGUgZ2l2ZW4gYWNjb3VudCBJRCBpbiB0aGUgZ2l2ZW4gbW9kZVxuICAgKlxuICAgKiAxLiBVc2UgdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMgaWYgdGhlIGRlc3RpbmF0aW9uIGFjY291bnQgbWF0Y2hlcyB0aGVcbiAgICogICAgY3VycmVudCBjcmVkZW50aWFscycgYWNjb3VudC5cbiAgICogMi4gT3RoZXJ3aXNlIHRyeSBhbGwgY3JlZGVudGlhbCBwbHVnaW5zLlxuICAgKiAzLiBGYWlsIGlmIG5laXRoZXIgb2YgdGhlc2UgeWllbGQgYW55IGNyZWRlbnRpYWxzLlxuICAgKiA0LiBSZXR1cm4gYSBmYWlsdXJlIGlmIGFueSBvZiB0aGVtIHJldHVybmVkIGNyZWRlbnRpYWxzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIG9idGFpbkJhc2VDcmVkZW50aWFscyhhY2NvdW50SWQ6IHN0cmluZywgbW9kZTogTW9kZSk6IFByb21pc2U8T2J0YWluQmFzZUNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgLy8gRmlyc3QgdHJ5ICdjdXJyZW50JyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IGRlZmF1bHRBY2NvdW50SWQgPSAoYXdhaXQgdGhpcy5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkO1xuICAgIGlmIChkZWZhdWx0QWNjb3VudElkID09PSBhY2NvdW50SWQpIHtcbiAgICAgIHJldHVybiB7IHNvdXJjZTogJ2NvcnJlY3REZWZhdWx0JywgY3JlZGVudGlhbHM6IGF3YWl0IHRoaXMuZGVmYXVsdENyZWRlbnRpYWxzKCkgfTtcbiAgICB9XG5cbiAgICAvLyBUaGVuIHRyeSB0aGUgcGx1Z2luc1xuICAgIGNvbnN0IHBsdWdpbkNyZWRzID0gYXdhaXQgdGhpcy5wbHVnaW5zLmZldGNoQ3JlZGVudGlhbHNGb3IoYWNjb3VudElkLCBtb2RlKTtcbiAgICBpZiAocGx1Z2luQ3JlZHMpIHtcbiAgICAgIHJldHVybiB7IHNvdXJjZTogJ3BsdWdpbicsIC4uLnBsdWdpbkNyZWRzIH07XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHQgY3JlZGVudGlhbHMgd2l0aCBhIG5vdGUgdGhhdCB0aGV5J3JlIG5vdCB0aGUgcmlnaHQgb25lcyB5ZXRcbiAgICBpZiAoZGVmYXVsdEFjY291bnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6ICdpbmNvcnJlY3REZWZhdWx0JyxcbiAgICAgICAgYWNjb3VudElkOiBkZWZhdWx0QWNjb3VudElkLFxuICAgICAgICBjcmVkZW50aWFsczogYXdhaXQgdGhpcy5kZWZhdWx0Q3JlZGVudGlhbHMoKSxcbiAgICAgICAgdW51c2VkUGx1Z2luczogdGhpcy5wbHVnaW5zLmF2YWlsYWJsZVBsdWdpbk5hbWVzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBcHBhcmVudGx5IHdlIGRpZG4ndCBmaW5kIGFueSBhdCBhbGxcbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiAnbm9uZScsXG4gICAgICB1bnVzZWRQbHVnaW5zOiB0aGlzLnBsdWdpbnMuYXZhaWxhYmxlUGx1Z2luTmFtZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBkZWZhdWx0IGNoYWluIHRvIHRoZSBmaXJzdCBzZXQgb2YgY3JlZGVudGlhbHMgdGhhdCBpcyBhdmFpbGFibGVcbiAgICovXG4gIHByaXZhdGUgZGVmYXVsdENyZWRlbnRpYWxzKCk6IFByb21pc2U8QVdTLkNyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIGNhY2hlZCh0aGlzLCBDQUNIRURfREVGQVVMVF9DUkVERU5USUFMUywgKCkgPT4ge1xuICAgICAgZGVidWcoJ1Jlc29sdmluZyBkZWZhdWx0IGNyZWRlbnRpYWxzJyk7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q2hhaW4ucmVzb2x2ZVByb21pc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gU0RLIHdoaWNoIHVzZXMgYXNzdW1lZCByb2xlIGNyZWRlbnRpYWxzXG4gICAqXG4gICAqIFRoZSBiYXNlIGNyZWRlbnRpYWxzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGFzc3VtZWQgcm9sZSBjcmVkZW50aWFscyB3aWxsIGJlIHRoZVxuICAgKiBzYW1lIGNyZWRlbnRpYWxzIHJldHVybmVkIGJ5IG9idGFpbkNyZWRlbnRpYWxzIGlmIGFuIGVudmlyb25tZW50IGFuZCBtb2RlIGlzIHBhc3NlZCxcbiAgICogb3RoZXJ3aXNlIGl0IHdpbGwgYmUgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdpdGhBc3N1bWVkUm9sZShcbiAgICBtYXN0ZXJDcmVkZW50aWFsczogRXhjbHVkZTxPYnRhaW5CYXNlQ3JlZGVudGlhbHNSZXN1bHQsIHsgc291cmNlOiAnbm9uZScgfT4sXG4gICAgcm9sZUFybjogc3RyaW5nLFxuICAgIGV4dGVybmFsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZWdpb246IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKGBBc3N1bWluZyByb2xlICcke3JvbGVBcm59Jy5gKTtcblxuICAgIHJlZ2lvbiA9IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb247XG5cbiAgICBjb25zdCBjcmVkcyA9IG5ldyBBV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMoe1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIFJvbGVBcm46IHJvbGVBcm4sXG4gICAgICAgIC4uLmV4dGVybmFsSWQgPyB7IEV4dGVybmFsSWQ6IGV4dGVybmFsSWQgfSA6IHt9LFxuICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6IGBhd3MtY2RrLSR7c2FmZVVzZXJuYW1lKCl9YCxcbiAgICAgIH0sXG4gICAgICBzdHNDb25maWc6IHtcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICAuLi50aGlzLnNka09wdGlvbnMsXG4gICAgICB9LFxuICAgICAgbWFzdGVyQ3JlZGVudGlhbHM6IG1hc3RlckNyZWRlbnRpYWxzLmNyZWRlbnRpYWxzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBTREsoY3JlZHMsIHJlZ2lvbiwgdGhpcy5zZGtPcHRpb25zLCB7XG4gICAgICBhc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbjogZm10T2J0YWluZWRDcmVkZW50aWFscyhtYXN0ZXJDcmVkZW50aWFscyksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBBV1MgYWNjb3VudFxuICpcbiAqIEFuIEFXUyBhY2NvdW50IGFsd2F5cyBleGlzdHMgaW4gb25seSBvbmUgcGFydGl0aW9uLiBVc3VhbGx5IHdlIGRvbid0IGNhcmUgYWJvdXRcbiAqIHRoZSBwYXJ0aXRpb24sIGJ1dCB3aGVuIHdlIG5lZWQgdG8gZm9ybSBBUk5zIHdlIGRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnQge1xuICAvKipcbiAgICogVGhlIGFjY291bnQgbnVtYmVyXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnRpdGlvbiAoJ2F3cycgb3IgJ2F3cy1jbicgb3Igb3RoZXJ3aXNlKVxuICAgKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VUID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDA7XG5cbi8qKlxuICogR2V0IEhUVFAgb3B0aW9ucyBmb3IgdGhlIFNES1xuICpcbiAqIFJlYWQgZnJvbSB1c2VyIGlucHV0IG9yIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBSZXR1cm5zIGEgY29tcGxldGUgYENvbmZpZ3VyYXRpb25PcHRpb25zYCBvYmplY3QgYmVjYXVzZSB0aGF0J3Mgd2hlcmVcbiAqIGBjdXN0b21Vc2VyQWdlbnRgIGxpdmVzLCBidXQgYGh0dHBPcHRpb25zYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgYXR0cmlidXRlLlxuICovXG5mdW5jdGlvbiBwYXJzZUh0dHBPcHRpb25zKG9wdGlvbnM6IFNka0h0dHBPcHRpb25zKSB7XG4gIGNvbnN0IGNvbmZpZzogQ29uZmlndXJhdGlvbk9wdGlvbnMgPSB7fTtcbiAgY29uZmlnLmh0dHBPcHRpb25zID0ge307XG5cbiAgY29uZmlnLmh0dHBPcHRpb25zLmNvbm5lY3RUaW1lb3V0ID0gREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQ7XG4gIGNvbmZpZy5odHRwT3B0aW9ucy50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUO1xuXG4gIGxldCB1c2VyQWdlbnQgPSBvcHRpb25zLnVzZXJBZ2VudDtcbiAgaWYgKHVzZXJBZ2VudCA9PSBudWxsKSB7XG4gICAgLy8gRmluZCB0aGUgcGFja2FnZS5qc29uIGZyb20gdGhlIG1haW4gdG9vbGtpdFxuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZElmUG9zc2libGUocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ3BhY2thZ2UuanNvbicpKSA/PyAne30nKTtcbiAgICB1c2VyQWdlbnQgPSBgJHtwa2cubmFtZX0vJHtwa2cudmVyc2lvbn1gO1xuICB9XG4gIGNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG5cbiAgY29uc3QgY2FCdW5kbGVQYXRoID0gb3B0aW9ucy5jYUJ1bmRsZVBhdGggfHwgY2FCdW5kbGVQYXRoRnJvbUVudmlyb25tZW50KCk7XG4gIGlmIChjYUJ1bmRsZVBhdGgpIHtcbiAgICBkZWJ1ZygnVXNpbmcgQ0EgYnVuZGxlIHBhdGg6ICVzJywgY2FCdW5kbGVQYXRoKTtcbiAgICAoY29uZmlnLmh0dHBPcHRpb25zIGFzIGFueSkuY2EgPSByZWFkSWZQb3NzaWJsZShjYUJ1bmRsZVBhdGgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucHJveHlBZGRyZXNzKSB7XG4gICAgZGVidWcoJ1Byb3h5IHNlcnZlciBmcm9tIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6ICVzJywgb3B0aW9ucy5wcm94eUFkZHJlc3MpO1xuICB9XG5cbiAgLy8gQ29uZmlndXJlIHRoZSBwcm94eSBhZ2VudC4gQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHVzZSBIVFRQUz9fUFJPWFkgYW5kXG4gIC8vIE5PX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBkZXRlcm1pbmUgd2hpY2ggcHJveHkgdG8gdXNlIGZvciBlYWNoXG4gIC8vIHJlcXVlc3QuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gIGNvbnN0IFByb3h5QWdlbnQgPSByZXF1aXJlKCdwcm94eS1hZ2VudCcpO1xuICBjb25maWcuaHR0cE9wdGlvbnMuYWdlbnQgPSBuZXcgUHJveHlBZ2VudChvcHRpb25zLnByb3h5QWRkcmVzcyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBGaW5kIGFuZCByZXR1cm4gYSBDQSBjZXJ0aWZpY2F0ZSBidW5kbGUgcGF0aCB0byBiZSBwYXNzZWQgaW50byB0aGUgU0RLLlxuICovXG5mdW5jdGlvbiBjYUJ1bmRsZVBhdGhGcm9tRW52aXJvbm1lbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHByb2Nlc3MuZW52LmF3c19jYV9idW5kbGUpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuYXdzX2NhX2J1bmRsZTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuQVdTX0NBX0JVTkRMRSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BV1NfQ0FfQlVORExFO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVhZCBhIGZpbGUgaWYgaXQgZXhpc3RzLCBvciByZXR1cm4gdW5kZWZpbmVkXG4gKlxuICogTm90IGFzeW5jIGJlY2F1c2UgaXQgaXMgdXNlZCBpbiB0aGUgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gcmVhZElmUG9zc2libGUoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhmaWxlbmFtZSkpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1ZyhlKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB1c2VybmFtZSB3aXRoIGNoYXJhY3RlcnMgaW52YWxpZCBmb3IgYSBSb2xlU2Vzc2lvbk5hbWUgcmVtb3ZlZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1NUUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Bc3N1bWVSb2xlLmh0bWwjQVBJX0Fzc3VtZVJvbGVfUmVxdWVzdFBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gc2FmZVVzZXJuYW1lKCkge1xuICByZXR1cm4gb3MudXNlckluZm8oKS51c2VybmFtZS5yZXBsYWNlKC9bXlxcdys9LC5ALV0vZywgJ0AnKTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBvYnRhaW5pbmcgY3JlZGVudGlhbHMgZm9yIGFuIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJvbGUgdGhhdCBuZWVkcyB0byBiZSBhc3N1bWVkLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIElEIHJlcXVpcmVkIHRvIGFzc3VtZSB0aGUgZ2l2ZW4gcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVFeHRlcm5hbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBvYnRhaW5pbmcgYmFzZSBjcmVkZW50aWFsc1xuICovXG50eXBlIE9idGFpbkJhc2VDcmVkZW50aWFsc1Jlc3VsdCA9XG4gIHsgc291cmNlOiAnY29ycmVjdERlZmF1bHQnOyBjcmVkZW50aWFsczogQVdTLkNyZWRlbnRpYWxzIH1cbiAgfCB7IHNvdXJjZTogJ3BsdWdpbic7IHBsdWdpbk5hbWU6IHN0cmluZywgY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFscyB9XG4gIHwgeyBzb3VyY2U6ICdpbmNvcnJlY3REZWZhdWx0JzsgY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFsczsgYWNjb3VudElkOiBzdHJpbmc7IHVudXNlZFBsdWdpbnM6IHN0cmluZ1tdIH1cbiAgfCB7IHNvdXJjZTogJ25vbmUnOyB1bnVzZWRQbHVnaW5zOiBzdHJpbmdbXSB9O1xuXG4vKipcbiAqIElzb2xhdGluZyB0aGUgY29kZSB0aGF0IHRyYW5zbGF0ZXMgY2FsY3VsYXRpb24gZXJyb3JzIGludG8gaHVtYW4gZXJyb3IgbWVzc2FnZXNcbiAqXG4gKiBXZSBjb3ZlciB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICpcbiAqIC0gTm8gY3JlZGVudGlhbHMgYXJlIGF2YWlsYWJsZSBhdCBhbGxcbiAqIC0gRGVmYXVsdCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSB3cm9uZyBhY2NvdW50XG4gKi9cbmZ1bmN0aW9uIGZtdE9idGFpbkNyZWRlbnRpYWxzRXJyb3IodGFyZ2V0QWNjb3VudElkOiBzdHJpbmcsIG9idGFpblJlc3VsdDogT2J0YWluQmFzZUNyZWRlbnRpYWxzUmVzdWx0ICYgeyBzb3VyY2U6ICdub25lJyB8ICdpbmNvcnJlY3REZWZhdWx0JyB9KTogc3RyaW5nIHtcbiAgY29uc3QgbXNnID0gW2BOZWVkIHRvIHBlcmZvcm0gQVdTIGNhbGxzIGZvciBhY2NvdW50ICR7dGFyZ2V0QWNjb3VudElkfWBdO1xuICBzd2l0Y2ggKG9idGFpblJlc3VsdC5zb3VyY2UpIHtcbiAgICBjYXNlICdpbmNvcnJlY3REZWZhdWx0JzpcbiAgICAgIG1zZy5wdXNoKGBidXQgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciAke29idGFpblJlc3VsdC5hY2NvdW50SWR9YCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdub25lJzpcbiAgICAgIG1zZy5wdXNoKCdidXQgbm8gY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQnKTtcbiAgfVxuICBpZiAob2J0YWluUmVzdWx0LnVudXNlZFBsdWdpbnMubGVuZ3RoID4gMCkge1xuICAgIG1zZy5wdXNoKGBhbmQgbm9uZSBvZiB0aGVzZSBwbHVnaW5zIGZvdW5kIGFueTogJHtvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5qb2luKCcsICcpfWApO1xuICB9XG4gIHJldHVybiBtc2cuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBtZXNzYWdlIGluZGljYXRpbmcgd2hlcmUgd2UgZ290IGJhc2UgY3JlZGVudGlhbHMgZm9yIHRoZSBhc3N1bWUgcm9sZVxuICpcbiAqIFdlIGNvdmVyIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gKlxuICogLSBEZWZhdWx0IGNyZWRlbnRpYWxzIGZvciB0aGUgcmlnaHQgYWNjb3VudFxuICogLSBEZWZhdWx0IGNyZWRlbnRpYWxzIGZvciB0aGUgd3JvbmcgYWNjb3VudFxuICogLSBDcmVkZW50aWFscyByZXR1cm5lZCBmcm9tIGEgcGx1Z2luXG4gKi9cbmZ1bmN0aW9uIGZtdE9idGFpbmVkQ3JlZGVudGlhbHMoXG4gIG9idGFpblJlc3VsdDogRXhjbHVkZTxPYnRhaW5CYXNlQ3JlZGVudGlhbHNSZXN1bHQsIHsgc291cmNlOiAnbm9uZScgfT4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9idGFpblJlc3VsdC5zb3VyY2UpIHtcbiAgICBjYXNlICdjb3JyZWN0RGVmYXVsdCc6XG4gICAgICByZXR1cm4gJ2N1cnJlbnQgY3JlZGVudGlhbHMnO1xuICAgIGNhc2UgJ3BsdWdpbic6XG4gICAgICByZXR1cm4gYGNyZWRlbnRpYWxzIHJldHVybmVkIGJ5IHBsdWdpbiAnJHtvYnRhaW5SZXN1bHQucGx1Z2luTmFtZX0nYDtcbiAgICBjYXNlICdpbmNvcnJlY3REZWZhdWx0JzpcbiAgICAgIGNvbnN0IG1zZyA9IFtdO1xuICAgICAgbXNnLnB1c2goYGN1cnJlbnQgY3JlZGVudGlhbHMgKHdoaWNoIGFyZSBmb3IgYWNjb3VudCAke29idGFpblJlc3VsdC5hY2NvdW50SWR9YCk7XG5cbiAgICAgIGlmIChvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1zZy5wdXNoKGAsIGFuZCBub25lIG9mIHRoZSBmb2xsb3dpbmcgcGx1Z2lucyBwcm92aWRlZCBjcmVkZW50aWFsczogJHtvYnRhaW5SZXN1bHQudW51c2VkUGx1Z2lucy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgbXNnLnB1c2goJyknKTtcblxuICAgICAgcmV0dXJuIG1zZy5qb2luKCcnKTtcbiAgfVxufVxuIl19
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUUvQiwrQkFBK0I7QUFDL0IsMkNBQStDO0FBQy9DLG9EQUE4QztBQUM5Qyx1RUFBbUU7QUFFbkUsMkRBQXVEO0FBQ3ZELCtCQUFrQztBQUdsQywwREFBMEQ7QUFDMUQseUJBQXlCO0FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBMkR0RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNoRCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBNkJ4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQWEsV0FBVztJQTBCdEIsWUFDbUIsWUFBeUM7SUFDMUQ7O09BRUc7SUFDYSxhQUFxQixFQUNwQixhQUFtQyxFQUFFO1FBTHJDLGlCQUFZLEdBQVosWUFBWSxDQUE2QjtRQUkxQyxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUEyQjtRQVJ2QyxZQUFPLEdBQUcsSUFBSSxzQ0FBaUIsRUFBRSxDQUFDO0lBU25ELENBQUM7SUFoQ0Q7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFVBQThCLEVBQUU7O1FBQy9FLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixPQUFDLE9BQU8sQ0FBQyxXQUFXLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sb0NBQWdCLENBQUMsZUFBZSxDQUFDO1lBQ25ELE9BQU8sRUFBRSxPQUFP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QixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDZixHQUFHLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUVqRixJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyw2REFBNkQsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2hIO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVkLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN2QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbk9wdGlvbnMgfSBmcm9tICdhd3Mtc2RrL2xpYi9jb25maWctYmFzZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkZWJ1Zywgd2FybmluZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgY2FjaGVkIH0gZnJvbSAnLi4vLi4vdXRpbC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbFBsdWdpbnMgfSBmcm9tICcuLi9hd3MtYXV0aC9jcmVkZW50aWFsLXBsdWdpbnMnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL2F3cy1hdXRoL2NyZWRlbnRpYWxzJztcbmltcG9ydCB7IEF3c0NsaUNvbXBhdGlibGUgfSBmcm9tICcuL2F3c2NsaS1jb21wYXRpYmxlJztcbmltcG9ydCB7IElTREssIFNESyB9IGZyb20gJy4vc2RrJztcblxuXG4vLyBTb21lIGNvbmZpZ3VyYXRpb24gdGhhdCBjYW4gb25seSBiZSBhY2hpZXZlZCBieSBzZXR0aW5nXG4vLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG5wcm9jZXNzLmVudi5BV1NfU1RTX1JFR0lPTkFMX0VORFBPSU5UUyA9ICdyZWdpb25hbCc7XG5wcm9jZXNzLmVudi5BV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRCA9ICcxJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZGVmYXVsdCBTREsgcHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZGtQcm92aWRlck9wdGlvbnMge1xuICAvKipcbiAgICogUHJvZmlsZSB0byByZWFkIGZyb20gfi8uYXdzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBzaG91bGQgY2hlY2sgZm9yIEVDMiBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF1dG9kZXRlY3RcbiAgICovXG4gIHJlYWRvbmx5IGVjMmNyZWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBzaG91bGQgY2hlY2sgZm9yIGNvbnRhaW5lciBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF1dG9kZXRlY3RcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckNyZWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSFRUUCBvcHRpb25zIGZvciBTREtcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBPcHRpb25zPzogU2RrSHR0cE9wdGlvbnM7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgaW5kaXZpZHVhbCBTREtzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrSHR0cE9wdGlvbnMge1xuICAvKipcbiAgICogUHJveHkgYWRkcmVzcyB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5QWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwYXRoIHRvIGEgY2VydGlmaWNhdGUgYnVuZGxlIHRoYXQgY29udGFpbnMgYSBjZXJ0IHRvIGJlIHRydXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGNlcnRpZmljYXRlIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHVzZXIgYWdlbnQgdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDxwYWNrYWdlLW5hbWU+LzxwYWNrYWdlLXZlcnNpb24+XG4gICAqL1xuICByZWFkb25seSB1c2VyQWdlbnQ/OiBzdHJpbmc7XG59XG5cbmNvbnN0IENBQ0hFRF9BQ0NPVU5UID0gU3ltYm9sKCdjYWNoZWRfYWNjb3VudCcpO1xuY29uc3QgQ0FDSEVEX0RFRkFVTFRfQ1JFREVOVElBTFMgPSBTeW1ib2woJ2NhY2hlZF9kZWZhdWx0X2NyZWRlbnRpYWxzJyk7XG5cbi8qKlxuICogU0RLIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gZW52aXJvbm1lbnRcbiAqICdmb3JFbnZpcm9ubWVudCcgd2lsbCBhdHRlbXB0IHRvIGFzc3VtZSBhIHJvbGUgYW5kIGlmIGl0XG4gKiBpcyBub3Qgc3VjY2Vzc2Z1bCwgdGhlbiBpdCB3aWxsIGVpdGhlcjpcbiAqICAgMS4gQ2hlY2sgdG8gc2VlIGlmIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzIChsb2NhbCBjcmVkZW50aWFscyB0aGUgQ0xJIHdhcyBleGVjdXRlZCB3aXRoKVxuICogICAgICBhcmUgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudC4gSWYgdGhleSBhcmUgdGhlbiByZXR1cm4gdGhvc2UuXG4gKiAgIDIuIElmIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzIGFyZSBub3QgZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB0aGVuXG4gKiAgICAgIHRocm93IGFuIGVycm9yXG4gKlxuICogJ2RpZEFzc3VtZVJvbGUnIGFsbG93cyBjYWxsZXJzIHRvIHdoZXRoZXIgdGhleSBhcmUgcmVjZWl2aW5nIHRoZSBhc3N1bWUgcm9sZVxuICogY3JlZGVudGlhbHMgb3IgdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrRm9yRW52aXJvbm1lbnQge1xuICAvKipcbiAgICogVGhlIFNESyBmb3IgdGhlIGdpdmVuIGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBzZGs6IElTREs7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBhc3N1bWUgcm9sZSB3YXMgc3VjY2Vzc2Z1bC5cbiAgICogSWYgdGhlIGFzc3VtZSByb2xlIHdhcyBub3Qgc3VjY2Vzc2Z1bCAoZmFsc2UpXG4gICAqIHRoZW4gdGhhdCBtZWFucyB0aGF0IHRoZSAnc2RrJyByZXR1cm5lZCBjb250YWluc1xuICAgKiB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyAobm90IHRoZSBhc3N1bWUgcm9sZSBjcmVkZW50aWFscylcbiAgICovXG4gIHJlYWRvbmx5IGRpZEFzc3VtZVJvbGU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBpbnN0YW5jZXMgb2YgdGhlIEFXUyBTREsgYXBwcm9wcmlhdGUgZm9yIGEgZ2l2ZW4gYWNjb3VudC9yZWdpb24uXG4gKlxuICogQmVoYXZpb3IgaXMgYXMgZm9sbG93czpcbiAqXG4gKiAtIEZpcnN0LCBhIHNldCBvZiBcImJhc2VcIiBjcmVkZW50aWFscyBhcmUgZXN0YWJsaXNoZWRcbiAqICAgLSBJZiBhIHRhcmdldCBlbnZpcm9ubWVudCBpcyBnaXZlbiBhbmQgdGhlIGRlZmF1bHQgKFwiY3VycmVudFwiKSBTREsgY3JlZGVudGlhbHMgYXJlIGZvclxuICogICAgIHRoYXQgYWNjb3VudCwgcmV0dXJuIHRob3NlOyBvdGhlcndpc2VcbiAqICAgLSBJZiBhIHRhcmdldCBlbnZpcm9ubWVudCBpcyBnaXZlbiwgc2NhbiBhbGwgY3JlZGVudGlhbCBwcm92aWRlciBwbHVnaW5zXG4gKiAgICAgZm9yIGNyZWRlbnRpYWxzLCBhbmQgcmV0dXJuIHRob3NlIGlmIGZvdW5kOyBvdGhlcndpc2VcbiAqICAgLSBSZXR1cm4gZGVmYXVsdCAoXCJjdXJyZW50XCIpIFNESyBjcmVkZW50aWFscywgbm90aW5nIHRoYXQgdGhleSBtaWdodCBiZSB3cm9uZy5cbiAqXG4gKiAtIFNlY29uZCwgYSByb2xlIG1heSBvcHRpb25hbGx5IG5lZWQgdG8gYmUgYXNzdW1lZC4gVXNlIHRoZSBiYXNlIGNyZWRlbnRpYWxzXG4gKiAgIGVzdGFibGlzaGVkIGluIHRoZSBwcmV2aW91cyBwcm9jZXNzIHRvIGFzc3VtZSB0aGF0IHJvbGUuXG4gKiAgIC0gSWYgYXNzdW1pbmcgdGhlIHJvbGUgZmFpbHMgYW5kIHRoZSBiYXNlIGNyZWRlbnRpYWxzIGFyZSBmb3IgdGhlIGNvcnJlY3RcbiAqICAgICBhY2NvdW50LCByZXR1cm4gdGhvc2UuIFRoaXMgaXMgYSBmYWxsYmFjayBmb3IgcGVvcGxlIHdobyBhcmUgdHJ5aW5nIHRvIGludGVyYWN0XG4gKiAgICAgd2l0aCBhIERlZmF1bHQgU3ludGhlc2l6ZWQgc3RhY2sgYW5kIGFscmVhZHkgaGF2ZSByaWdodCBjcmVkZW50aWFscyBzZXR1cC5cbiAqXG4gKiAgICAgVHlwaWNhbCBjYXNlcyB3ZSBzZWUgaW4gdGhlIHdpbGQ6XG4gKiAgICAgLSBDcmVkZW50aWFsIHBsdWdpbiBzZXR1cCB0aGF0LCBhbHRob3VnaCBub3QgcmVjb21tZW5kZWQsIHdvcmtzIGZvciB0aGVtXG4gKiAgICAgLSBTZWVkZWQgdGVybWluYWwgd2l0aCBgUmVhZE9ubHlgIGNyZWRlbnRpYWxzIGluIG9yZGVyIHRvIGRvIGBjZGsgZGlmZmAtLXRoZSBgUmVhZE9ubHlgXG4gKiAgICAgICByb2xlIGRvZXNuJ3QgaGF2ZSBgc3RzOkFzc3VtZVJvbGVgIGFuZCB3aWxsIGZhaWwgZm9yIG5vIHJlYWwgZ29vZCByZWFzb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBTZGtQcm92aWRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgU2RrUHJvdmlkZXIgd2hpY2ggZ2V0cyBpdHMgZGVmYXVsdHMgaW4gYSB3YXkgdGhhdCBiZWhhdmVzIGxpa2UgdGhlIEFXUyBDTEkgZG9lc1xuICAgKlxuICAgKiBUaGUgQVdTIFNESyBmb3IgSlMgYmVoYXZlcyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBBV1MgQ0xJIGluIGEgbnVtYmVyIG9mIHdheXM7IHNlZSB0aGVcbiAgICogY2xhc3MgYEF3c0NsaUNvbXBhdGlibGVgIGZvciB0aGUgZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgd2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyhvcHRpb25zOiBTZGtQcm92aWRlck9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHNka09wdGlvbnMgPSBwYXJzZUh0dHBPcHRpb25zKG9wdGlvbnMuaHR0cE9wdGlvbnMgPz8ge30pO1xuXG4gICAgY29uc3QgY2hhaW4gPSBhd2FpdCBBd3NDbGlDb21wYXRpYmxlLmNyZWRlbnRpYWxDaGFpbih7XG4gICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICBlYzJpbnN0YW5jZTogb3B0aW9ucy5lYzJjcmVkcyxcbiAgICAgIGNvbnRhaW5lckNyZWRzOiBvcHRpb25zLmNvbnRhaW5lckNyZWRzLFxuICAgICAgaHR0cE9wdGlvbnM6IHNka09wdGlvbnMuaHR0cE9wdGlvbnMsXG4gICAgfSk7XG4gICAgY29uc3QgcmVnaW9uID0gYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5yZWdpb24oe1xuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgZWMyaW5zdGFuY2U6IG9wdGlvbnMuZWMyY3JlZHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFNka1Byb3ZpZGVyKGNoYWluLCByZWdpb24sIHNka09wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5zID0gbmV3IENyZWRlbnRpYWxQbHVnaW5zKCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENoYWluOiBBV1MuQ3JlZGVudGlhbFByb3ZpZGVyQ2hhaW4sXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCByZWdpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJlZ2lvbjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2RrT3B0aW9uczogQ29uZmlndXJhdGlvbk9wdGlvbnMgPSB7fSkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBTREsgd2hpY2ggY2FuIGRvIG9wZXJhdGlvbnMgaW4gdGhlIGdpdmVuIGVudmlyb25tZW50XG4gICAqXG4gICAqIFRoZSBgZW52aXJvbm1lbnRgIHBhcmFtZXRlciBpcyByZXNvbHZlZCBmaXJzdCAoc2VlIGByZXNvbHZlRW52aXJvbm1lbnQoKWApLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbiAgICBtb2RlOiBNb2RlLFxuICAgIG9wdGlvbnM/OiBDcmVkZW50aWFsc09wdGlvbnMsXG4gICk6IFByb21pc2U8U2RrRm9yRW52aXJvbm1lbnQ+IHtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLnJlc29sdmVFbnZpcm9ubWVudChlbnZpcm9ubWVudCk7XG4gICAgY29uc3QgYmFzZUNyZWRzID0gYXdhaXQgdGhpcy5vYnRhaW5CYXNlQ3JlZGVudGlhbHMoZW52LmFjY291bnQsIG1vZGUpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbmVlZCBhdCBsZWFzdCBTT01FIGNyZWRlbnRpYWxzXG4gICAgaWYgKGJhc2VDcmVkcy5zb3VyY2UgPT09ICdub25lJykgeyB0aHJvdyBuZXcgRXJyb3IoZm10T2J0YWluQ3JlZGVudGlhbHNFcnJvcihlbnYuYWNjb3VudCwgYmFzZUNyZWRzKSk7IH1cblxuICAgIC8vIFNpbXBsZSBjYXNlIGlzIGlmIHdlIGRvbid0IG5lZWQgdG8gXCJhc3N1bWVSb2xlXCIgaGVyZS4gSWYgc28sIHdlIG11c3Qgbm93IGhhdmUgY3JlZGVudGlhbHMgZm9yIHRoZSByaWdodFxuICAgIC8vIGFjY291bnQuXG4gICAgaWYgKG9wdGlvbnM/LmFzc3VtZVJvbGVBcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGJhc2VDcmVkcy5zb3VyY2UgPT09ICdpbmNvcnJlY3REZWZhdWx0JykgeyB0aHJvdyBuZXcgRXJyb3IoZm10T2J0YWluQ3JlZGVudGlhbHNFcnJvcihlbnYuYWNjb3VudCwgYmFzZUNyZWRzKSk7IH1cbiAgICAgIHJldHVybiB7IHNkazogbmV3IFNESyhiYXNlQ3JlZHMuY3JlZGVudGlhbHMsIGVudi5yZWdpb24sIHRoaXMuc2RrT3B0aW9ucyksIGRpZEFzc3VtZVJvbGU6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gV2Ugd2lsbCBwcm9jZWVkIHRvIEFzc3VtZVJvbGUgdXNpbmcgd2hhdGV2ZXIgd2UndmUgYmVlbiBnaXZlbi5cbiAgICBjb25zdCBzZGsgPSBhd2FpdCB0aGlzLndpdGhBc3N1bWVkUm9sZShiYXNlQ3JlZHMsIG9wdGlvbnMuYXNzdW1lUm9sZUFybiwgb3B0aW9ucy5hc3N1bWVSb2xlRXh0ZXJuYWxJZCwgZW52LnJlZ2lvbik7XG5cbiAgICAvLyBFeGVyY2lzZSB0aGUgQXNzdW1lUm9sZUNyZWRlbnRpYWxzUHJvdmlkZXIgd2UndmUgZ290dGVuIGF0IGxlYXN0IG9uY2Ugc29cbiAgICAvLyB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEFzc3VtZVJvbGUgY2FsbCBzdWNjZWVkcyBvciBub3QuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNkay5mb3JjZUNyZWRlbnRpYWxSZXRyaWV2YWwoKTtcbiAgICAgIHJldHVybiB7IHNkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEFzc3VtZVJvbGUgZmFpbGVkLiBQcm9jZWVkIGFuZCB3YXJuICppZiBhbmQgb25seSBpZiogdGhlIGJhc2VDcmVkZW50aWFscyB3ZXJlIGFscmVhZHkgZm9yIHRoZSByaWdodCBhY2NvdW50XG4gICAgICAvLyBvciByZXR1cm5lZCBmcm9tIGEgcGx1Z2luLiBUaGlzIGlzIHRvIGNvdmVyIHNvbWUgY3VycmVudCBzZXR1cHMgZm9yIHBlb3BsZSB1c2luZyBwbHVnaW5zIG9yIHByZWZlcnJpbmcgdG9cbiAgICAgIC8vIGZlZWQgdGhlIENMSSBjcmVkZW50aWFscyB3aGljaCBhcmUgc3VmZmljaWVudCBieSB0aGVtc2VsdmVzLiBQcmVmZXIgdG8gYXNzdW1lIHRoZSBjb3JyZWN0IHJvbGUgaWYgd2UgY2FuLFxuICAgICAgLy8gYnV0IGlmIHdlIGNhbid0IHRoZW4gbGV0J3MganVzdCB0cnkgd2l0aCBhdmFpbGFibGUgY3JlZGVudGlhbHMgYW55d2F5LlxuICAgICAgaWYgKGJhc2VDcmVkcy5zb3VyY2UgPT09ICdjb3JyZWN0RGVmYXVsdCcgfHwgYmFzZUNyZWRzLnNvdXJjZSA9PT0gJ3BsdWdpbicpIHtcbiAgICAgICAgZGVidWcoZS5tZXNzYWdlKTtcbiAgICAgICAgd2FybmluZyhgJHtmbXRPYnRhaW5lZENyZWRlbnRpYWxzKGJhc2VDcmVkcyl9IGNvdWxkIG5vdCBiZSB1c2VkIHRvIGFzc3VtZSAnJHtvcHRpb25zLmFzc3VtZVJvbGVBcm59JywgYnV0IGFyZSBmb3IgdGhlIHJpZ2h0IGFjY291bnQuIFByb2NlZWRpbmcgYW55d2F5LmApO1xuICAgICAgICByZXR1cm4geyBzZGs6IG5ldyBTREsoYmFzZUNyZWRzLmNyZWRlbnRpYWxzLCBlbnYucmVnaW9uLCB0aGlzLnNka09wdGlvbnMpLCBkaWRBc3N1bWVSb2xlOiBmYWxzZSB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHBhcnRpdGlvbiB0aGF0IGJhc2UgY3JlZGVudGlhbHMgYXJlIGZvclxuICAgKlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZXJlIGFyZSBubyBiYXNlIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJhc2VDcmVkZW50aWFsc1BhcnRpdGlvbihlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsIG1vZGU6IE1vZGUpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMucmVzb2x2ZUVudmlyb25tZW50KGVudmlyb25tZW50KTtcbiAgICBjb25zdCBiYXNlQ3JlZHMgPSBhd2FpdCB0aGlzLm9idGFpbkJhc2VDcmVkZW50aWFscyhlbnYuYWNjb3VudCwgbW9kZSk7XG4gICAgaWYgKGJhc2VDcmVkcy5zb3VyY2UgPT09ICdub25lJykgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgcmV0dXJuIChhd2FpdCBuZXcgU0RLKGJhc2VDcmVkcy5jcmVkZW50aWFscywgZW52LnJlZ2lvbiwgdGhpcy5zZGtPcHRpb25zKS5jdXJyZW50QWNjb3VudCgpKS5wYXJ0aXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgZW52aXJvbm1lbnQgZm9yIGEgc3RhY2tcbiAgICpcbiAgICogUmVwbGFjZXMgdGhlIG1hZ2ljIHZhbHVlcyBgVU5LTk9XTl9SRUdJT05gIGFuZCBgVU5LTk9XTl9BQ0NPVU5UYFxuICAgKiB3aXRoIHRoZSBkZWZhdWx0cyBmb3IgdGhlIGN1cnJlbnQgU0RLIGNvbmZpZ3VyYXRpb24gKGB+Ly5hd3MvY29uZmlnYCBvclxuICAgKiBvdGhlcndpc2UpLlxuICAgKlxuICAgKiBJdCBpcyBhbiBlcnJvciBpZiBgVU5LTk9XTl9BQ0NPVU5UYCBpcyB1c2VkIGJ1dCB0aGUgdXNlciBoYXNuJ3QgY29uZmlndXJlZFxuICAgKiBhbnkgU0RLIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlc29sdmVFbnZpcm9ubWVudChlbnY6IGN4YXBpLkVudmlyb25tZW50KTogUHJvbWlzZTxjeGFwaS5FbnZpcm9ubWVudD4ge1xuICAgIGNvbnN0IHJlZ2lvbiA9IGVudi5yZWdpb24gIT09IGN4YXBpLlVOS05PV05fUkVHSU9OID8gZW52LnJlZ2lvbiA6IHRoaXMuZGVmYXVsdFJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gZW52LmFjY291bnQgIT09IGN4YXBpLlVOS05PV05fQUNDT1VOVCA/IGVudi5hY2NvdW50IDogKGF3YWl0IHRoaXMuZGVmYXVsdEFjY291bnQoKSk/LmFjY291bnRJZDtcblxuICAgIGlmICghYWNjb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBBV1MgYWNjb3VudCB0byB1c2UuIEl0IG11c3QgYmUgZWl0aGVyIGNvbmZpZ3VyZWQgd2hlbiB5b3UgZGVmaW5lIHlvdXIgQ0RLIFN0YWNrLCBvciB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWdpb24sXG4gICAgICBhY2NvdW50LFxuICAgICAgbmFtZTogY3hhcGkuRW52aXJvbm1lbnRVdGlscy5mb3JtYXQoYWNjb3VudCwgcmVnaW9uKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50IHdlJ2QgYXV0aCBpbnRvIGlmIHdlIHVzZWQgZGVmYXVsdCBjcmVkZW50aWFscy5cbiAgICpcbiAgICogRGVmYXVsdCBjcmVkZW50aWFscyBhcmUgdGhlIHNldCBvZiBhbWJpZW50bHkgY29uZmlndXJlZCBjcmVkZW50aWFscyB1c2luZ1xuICAgKiBvbmUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcywgb3Igfi8uYXdzL2NyZWRlbnRpYWxzLCBvciB0aGUgKm9uZSpcbiAgICogcHJvZmlsZSB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgQ0xJLlxuICAgKlxuICAgKiBNaWdodCByZXR1cm4gdW5kZWZpbmVkIGlmIHRoZXJlIGFyZSBubyBkZWZhdWx0L2FtYmllbnQgY3JlZGVudGlhbHNcbiAgICogYXZhaWxhYmxlIChpbiB3aGljaCBjYXNlIHRoZSB1c2VyIHNob3VsZCBiZXR0ZXIgaG9wZSB0aGV5IGhhdmVcbiAgICogY3JlZGVudGlhbCBwbHVnaW5zIGNvbmZpZ3VyZWQpLlxuICAgKlxuICAgKiBVc2VzIGEgY2FjaGUgdG8gYXZvaWQgU1RTIGNhbGxzIGlmIHdlIGRvbid0IG5lZWQgJ2VtLlxuICAgKi9cbiAgcHVibGljIGRlZmF1bHRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBjYWNoZWQodGhpcywgQ0FDSEVEX0FDQ09VTlQsIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWRzID0gYXdhaXQgdGhpcy5kZWZhdWx0Q3JlZGVudGlhbHMoKTtcblxuICAgICAgICBjb25zdCBhY2Nlc3NLZXlJZCA9IGNyZWRzLmFjY2Vzc0tleUlkO1xuICAgICAgICBpZiAoIWFjY2Vzc0tleUlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBBV1MgY3JlZGVudGlhbHMgKHNldHVwIHdpdGggXCJhd3MgY29uZmlndXJlXCIpJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFNESyhjcmVkcywgdGhpcy5kZWZhdWx0UmVnaW9uLCB0aGlzLnNka09wdGlvbnMpLmN1cnJlbnRBY2NvdW50KCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlYnVnKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IEFXUyBhY2NvdW50OicsIGUpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscyBmb3IgdGhlIGdpdmVuIGFjY291bnQgSUQgaW4gdGhlIGdpdmVuIG1vZGVcbiAgICpcbiAgICogMS4gVXNlIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzIGlmIHRoZSBkZXN0aW5hdGlvbiBhY2NvdW50IG1hdGNoZXMgdGhlXG4gICAqICAgIGN1cnJlbnQgY3JlZGVudGlhbHMnIGFjY291bnQuXG4gICAqIDIuIE90aGVyd2lzZSB0cnkgYWxsIGNyZWRlbnRpYWwgcGx1Z2lucy5cbiAgICogMy4gRmFpbCBpZiBuZWl0aGVyIG9mIHRoZXNlIHlpZWxkIGFueSBjcmVkZW50aWFscy5cbiAgICogNC4gUmV0dXJuIGEgZmFpbHVyZSBpZiBhbnkgb2YgdGhlbSByZXR1cm5lZCBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBvYnRhaW5CYXNlQ3JlZGVudGlhbHMoYWNjb3VudElkOiBzdHJpbmcsIG1vZGU6IE1vZGUpOiBQcm9taXNlPE9idGFpbkJhc2VDcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIC8vIEZpcnN0IHRyeSAnY3VycmVudCcgY3JlZGVudGlhbHNcbiAgICBjb25zdCBkZWZhdWx0QWNjb3VudElkID0gKGF3YWl0IHRoaXMuZGVmYXVsdEFjY291bnQoKSk/LmFjY291bnRJZDtcbiAgICBpZiAoZGVmYXVsdEFjY291bnRJZCA9PT0gYWNjb3VudElkKSB7XG4gICAgICByZXR1cm4geyBzb3VyY2U6ICdjb3JyZWN0RGVmYXVsdCcsIGNyZWRlbnRpYWxzOiBhd2FpdCB0aGlzLmRlZmF1bHRDcmVkZW50aWFscygpIH07XG4gICAgfVxuXG4gICAgLy8gVGhlbiB0cnkgdGhlIHBsdWdpbnNcbiAgICBjb25zdCBwbHVnaW5DcmVkcyA9IGF3YWl0IHRoaXMucGx1Z2lucy5mZXRjaENyZWRlbnRpYWxzRm9yKGFjY291bnRJZCwgbW9kZSk7XG4gICAgaWYgKHBsdWdpbkNyZWRzKSB7XG4gICAgICByZXR1cm4geyBzb3VyY2U6ICdwbHVnaW4nLCAuLi5wbHVnaW5DcmVkcyB9O1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBkZWZhdWx0IGNyZWRlbnRpYWxzIHdpdGggYSBub3RlIHRoYXQgdGhleSdyZSBub3QgdGhlIHJpZ2h0IG9uZXMgeWV0XG4gICAgaWYgKGRlZmF1bHRBY2NvdW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiAnaW5jb3JyZWN0RGVmYXVsdCcsXG4gICAgICAgIGFjY291bnRJZDogZGVmYXVsdEFjY291bnRJZCxcbiAgICAgICAgY3JlZGVudGlhbHM6IGF3YWl0IHRoaXMuZGVmYXVsdENyZWRlbnRpYWxzKCksXG4gICAgICAgIHVudXNlZFBsdWdpbnM6IHRoaXMucGx1Z2lucy5hdmFpbGFibGVQbHVnaW5OYW1lcyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQXBwYXJlbnRseSB3ZSBkaWRuJ3QgZmluZCBhbnkgYXQgYWxsXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogJ25vbmUnLFxuICAgICAgdW51c2VkUGx1Z2luczogdGhpcy5wbHVnaW5zLmF2YWlsYWJsZVBsdWdpbk5hbWVzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgZGVmYXVsdCBjaGFpbiB0byB0aGUgZmlyc3Qgc2V0IG9mIGNyZWRlbnRpYWxzIHRoYXQgaXMgYXZhaWxhYmxlXG4gICAqL1xuICBwcml2YXRlIGRlZmF1bHRDcmVkZW50aWFscygpOiBQcm9taXNlPEFXUy5DcmVkZW50aWFscz4ge1xuICAgIHJldHVybiBjYWNoZWQodGhpcywgQ0FDSEVEX0RFRkFVTFRfQ1JFREVOVElBTFMsICgpID0+IHtcbiAgICAgIGRlYnVnKCdSZXNvbHZpbmcgZGVmYXVsdCBjcmVkZW50aWFscycpO1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENoYWluLnJlc29sdmVQcm9taXNlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIFNESyB3aGljaCB1c2VzIGFzc3VtZWQgcm9sZSBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBUaGUgYmFzZSBjcmVkZW50aWFscyB1c2VkIHRvIHJldHJpZXZlIHRoZSBhc3N1bWVkIHJvbGUgY3JlZGVudGlhbHMgd2lsbCBiZSB0aGVcbiAgICogc2FtZSBjcmVkZW50aWFscyByZXR1cm5lZCBieSBvYnRhaW5DcmVkZW50aWFscyBpZiBhbiBlbnZpcm9ubWVudCBhbmQgbW9kZSBpcyBwYXNzZWQsXG4gICAqIG90aGVyd2lzZSBpdCB3aWxsIGJlIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3aXRoQXNzdW1lZFJvbGUoXG4gICAgbWFzdGVyQ3JlZGVudGlhbHM6IEV4Y2x1ZGU8T2J0YWluQmFzZUNyZWRlbnRpYWxzUmVzdWx0LCB7IHNvdXJjZTogJ25vbmUnIH0+LFxuICAgIHJvbGVBcm46IHN0cmluZyxcbiAgICBleHRlcm5hbElkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcmVnaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZyhgQXNzdW1pbmcgcm9sZSAnJHtyb2xlQXJufScuYCk7XG5cbiAgICByZWdpb24gPSByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uO1xuXG4gICAgY29uc3QgY3JlZHMgPSBuZXcgQVdTLkNoYWluYWJsZVRlbXBvcmFyeUNyZWRlbnRpYWxzKHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBSb2xlQXJuOiByb2xlQXJuLFxuICAgICAgICAuLi5leHRlcm5hbElkID8geyBFeHRlcm5hbElkOiBleHRlcm5hbElkIH0gOiB7fSxcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiBgYXdzLWNkay0ke3NhZmVVc2VybmFtZSgpfWAsXG4gICAgICB9LFxuICAgICAgc3RzQ29uZmlnOiB7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgLi4udGhpcy5zZGtPcHRpb25zLFxuICAgICAgfSxcbiAgICAgIG1hc3RlckNyZWRlbnRpYWxzOiBtYXN0ZXJDcmVkZW50aWFscy5jcmVkZW50aWFscyxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgU0RLKGNyZWRzLCByZWdpb24sIHRoaXMuc2RrT3B0aW9ucywge1xuICAgICAgYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb246IGZtdE9idGFpbmVkQ3JlZGVudGlhbHMobWFzdGVyQ3JlZGVudGlhbHMpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQW4gQVdTIGFjY291bnRcbiAqXG4gKiBBbiBBV1MgYWNjb3VudCBhbHdheXMgZXhpc3RzIGluIG9ubHkgb25lIHBhcnRpdGlvbi4gVXN1YWxseSB3ZSBkb24ndCBjYXJlIGFib3V0XG4gKiB0aGUgcGFydGl0aW9uLCBidXQgd2hlbiB3ZSBuZWVkIHRvIGZvcm0gQVJOcyB3ZSBkby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50IHtcbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50IG51bWJlclxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJ0aXRpb24gKCdhd3MnIG9yICdhd3MtY24nIG9yIG90aGVyd2lzZSlcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX0NPTk5FQ1RJT05fVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgREVGQVVMVF9USU1FT1VUID0gMzAwMDAwO1xuXG4vKipcbiAqIEdldCBIVFRQIG9wdGlvbnMgZm9yIHRoZSBTREtcbiAqXG4gKiBSZWFkIGZyb20gdXNlciBpbnB1dCBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogUmV0dXJucyBhIGNvbXBsZXRlIGBDb25maWd1cmF0aW9uT3B0aW9uc2Agb2JqZWN0IGJlY2F1c2UgdGhhdCdzIHdoZXJlXG4gKiBgY3VzdG9tVXNlckFnZW50YCBsaXZlcywgYnV0IGBodHRwT3B0aW9uc2AgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGF0dHJpYnV0ZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VIdHRwT3B0aW9ucyhvcHRpb25zOiBTZGtIdHRwT3B0aW9ucykge1xuICBjb25zdCBjb25maWc6IENvbmZpZ3VyYXRpb25PcHRpb25zID0ge307XG4gIGNvbmZpZy5odHRwT3B0aW9ucyA9IHt9O1xuXG4gIGNvbmZpZy5odHRwT3B0aW9ucy5jb25uZWN0VGltZW91dCA9IERFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VUO1xuICBjb25maWcuaHR0cE9wdGlvbnMudGltZW91dCA9IERFRkFVTFRfVElNRU9VVDtcblxuICBsZXQgdXNlckFnZW50ID0gb3B0aW9ucy51c2VyQWdlbnQ7XG4gIGlmICh1c2VyQWdlbnQgPT0gbnVsbCkge1xuICAgIC8vIEZpbmQgdGhlIHBhY2thZ2UuanNvbiBmcm9tIHRoZSBtYWluIHRvb2xraXRcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRJZlBvc3NpYmxlKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdwYWNrYWdlLmpzb24nKSkgPz8gJ3t9Jyk7XG4gICAgdXNlckFnZW50ID0gYCR7cGtnLm5hbWV9LyR7cGtnLnZlcnNpb259YDtcbiAgfVxuICBjb25maWcuY3VzdG9tVXNlckFnZW50ID0gdXNlckFnZW50O1xuXG4gIGNvbnN0IGNhQnVuZGxlUGF0aCA9IG9wdGlvbnMuY2FCdW5kbGVQYXRoIHx8IGNhQnVuZGxlUGF0aEZyb21FbnZpcm9ubWVudCgpO1xuICBpZiAoY2FCdW5kbGVQYXRoKSB7XG4gICAgZGVidWcoJ1VzaW5nIENBIGJ1bmRsZSBwYXRoOiAlcycsIGNhQnVuZGxlUGF0aCk7XG4gICAgKGNvbmZpZy5odHRwT3B0aW9ucyBhcyBhbnkpLmNhID0gcmVhZElmUG9zc2libGUoY2FCdW5kbGVQYXRoKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnByb3h5QWRkcmVzcykge1xuICAgIGRlYnVnKCdQcm94eSBzZXJ2ZXIgZnJvbSBjb21tYW5kLWxpbmUgYXJndW1lbnRzOiAlcycsIG9wdGlvbnMucHJveHlBZGRyZXNzKTtcbiAgfVxuXG4gIC8vIENvbmZpZ3VyZSB0aGUgcHJveHkgYWdlbnQuIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCB1c2UgSFRUUFM/X1BST1hZIGFuZFxuICAvLyBOT19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IHRvIHVzZSBmb3IgZWFjaFxuICAvLyByZXF1ZXN0LlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICBjb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgncHJveHktYWdlbnQnKTtcbiAgY29uZmlnLmh0dHBPcHRpb25zLmFnZW50ID0gbmV3IFByb3h5QWdlbnQob3B0aW9ucy5wcm94eUFkZHJlc3MpO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qKlxuICogRmluZCBhbmQgcmV0dXJuIGEgQ0EgY2VydGlmaWNhdGUgYnVuZGxlIHBhdGggdG8gYmUgcGFzc2VkIGludG8gdGhlIFNESy5cbiAqL1xuZnVuY3Rpb24gY2FCdW5kbGVQYXRoRnJvbUVudmlyb25tZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChwcm9jZXNzLmVudi5hd3NfY2FfYnVuZGxlKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LmF3c19jYV9idW5kbGU7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkFXU19DQV9CVU5ETEUpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQVdTX0NBX0JVTkRMRTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlYWQgYSBmaWxlIGlmIGl0IGV4aXN0cywgb3IgcmV0dXJuIHVuZGVmaW5lZFxuICpcbiAqIE5vdCBhc3luYyBiZWNhdXNlIGl0IGlzIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIHJlYWRJZlBvc3NpYmxlKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZGVidWcoZSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdXNlcm5hbWUgd2l0aCBjaGFyYWN0ZXJzIGludmFsaWQgZm9yIGEgUm9sZVNlc3Npb25OYW1lIHJlbW92ZWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9TVFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXNzdW1lUm9sZS5odG1sI0FQSV9Bc3N1bWVSb2xlX1JlcXVlc3RQYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIHNhZmVVc2VybmFtZSgpIHtcbiAgcmV0dXJuIG9zLnVzZXJJbmZvKCkudXNlcm5hbWUucmVwbGFjZSgvW15cXHcrPSwuQC1dL2csICdAJyk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igb2J0YWluaW5nIGNyZWRlbnRpYWxzIGZvciBhbiBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSByb2xlIHRoYXQgbmVlZHMgdG8gYmUgYXNzdW1lZCwgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBJRCByZXF1aXJlZCB0byBhc3N1bWUgdGhlIGdpdmVuIHJvbGUuXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlRXh0ZXJuYWxJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygb2J0YWluaW5nIGJhc2UgY3JlZGVudGlhbHNcbiAqL1xudHlwZSBPYnRhaW5CYXNlQ3JlZGVudGlhbHNSZXN1bHQgPVxuICB7IHNvdXJjZTogJ2NvcnJlY3REZWZhdWx0JzsgY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFscyB9XG4gIHwgeyBzb3VyY2U6ICdwbHVnaW4nOyBwbHVnaW5OYW1lOiBzdHJpbmcsIGNyZWRlbnRpYWxzOiBBV1MuQ3JlZGVudGlhbHMgfVxuICB8IHsgc291cmNlOiAnaW5jb3JyZWN0RGVmYXVsdCc7IGNyZWRlbnRpYWxzOiBBV1MuQ3JlZGVudGlhbHM7IGFjY291bnRJZDogc3RyaW5nOyB1bnVzZWRQbHVnaW5zOiBzdHJpbmdbXSB9XG4gIHwgeyBzb3VyY2U6ICdub25lJzsgdW51c2VkUGx1Z2luczogc3RyaW5nW10gfTtcblxuLyoqXG4gKiBJc29sYXRpbmcgdGhlIGNvZGUgdGhhdCB0cmFuc2xhdGVzIGNhbGN1bGF0aW9uIGVycm9ycyBpbnRvIGh1bWFuIGVycm9yIG1lc3NhZ2VzXG4gKlxuICogV2UgY292ZXIgdGhlIGZvbGxvd2luZyBjYXNlczpcbiAqXG4gKiAtIE5vIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgYXQgYWxsXG4gKiAtIERlZmF1bHQgY3JlZGVudGlhbHMgYXJlIGZvciB0aGUgd3JvbmcgYWNjb3VudFxuICovXG5mdW5jdGlvbiBmbXRPYnRhaW5DcmVkZW50aWFsc0Vycm9yKHRhcmdldEFjY291bnRJZDogc3RyaW5nLCBvYnRhaW5SZXN1bHQ6IE9idGFpbkJhc2VDcmVkZW50aWFsc1Jlc3VsdCAmIHsgc291cmNlOiAnbm9uZScgfCAnaW5jb3JyZWN0RGVmYXVsdCcgfSk6IHN0cmluZyB7XG4gIGNvbnN0IG1zZyA9IFtgTmVlZCB0byBwZXJmb3JtIEFXUyBjYWxscyBmb3IgYWNjb3VudCAke3RhcmdldEFjY291bnRJZH1gXTtcbiAgc3dpdGNoIChvYnRhaW5SZXN1bHQuc291cmNlKSB7XG4gICAgY2FzZSAnaW5jb3JyZWN0RGVmYXVsdCc6XG4gICAgICBtc2cucHVzaChgYnV0IHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgJHtvYnRhaW5SZXN1bHQuYWNjb3VudElkfWApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICBtc2cucHVzaCgnYnV0IG5vIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb25maWd1cmVkJyk7XG4gIH1cbiAgaWYgKG9idGFpblJlc3VsdC51bnVzZWRQbHVnaW5zLmxlbmd0aCA+IDApIHtcbiAgICBtc2cucHVzaChgYW5kIG5vbmUgb2YgdGhlc2UgcGx1Z2lucyBmb3VuZCBhbnk6ICR7b2J0YWluUmVzdWx0LnVudXNlZFBsdWdpbnMuam9pbignLCAnKX1gKTtcbiAgfVxuICByZXR1cm4gbXNnLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogRm9ybWF0IGEgbWVzc2FnZSBpbmRpY2F0aW5nIHdoZXJlIHdlIGdvdCBiYXNlIGNyZWRlbnRpYWxzIGZvciB0aGUgYXNzdW1lIHJvbGVcbiAqXG4gKiBXZSBjb3ZlciB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICpcbiAqIC0gRGVmYXVsdCBjcmVkZW50aWFscyBmb3IgdGhlIHJpZ2h0IGFjY291bnRcbiAqIC0gRGVmYXVsdCBjcmVkZW50aWFscyBmb3IgdGhlIHdyb25nIGFjY291bnRcbiAqIC0gQ3JlZGVudGlhbHMgcmV0dXJuZWQgZnJvbSBhIHBsdWdpblxuICovXG5mdW5jdGlvbiBmbXRPYnRhaW5lZENyZWRlbnRpYWxzKFxuICBvYnRhaW5SZXN1bHQ6IEV4Y2x1ZGU8T2J0YWluQmFzZUNyZWRlbnRpYWxzUmVzdWx0LCB7IHNvdXJjZTogJ25vbmUnIH0+KTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYnRhaW5SZXN1bHQuc291cmNlKSB7XG4gICAgY2FzZSAnY29ycmVjdERlZmF1bHQnOlxuICAgICAgcmV0dXJuICdjdXJyZW50IGNyZWRlbnRpYWxzJztcbiAgICBjYXNlICdwbHVnaW4nOlxuICAgICAgcmV0dXJuIGBjcmVkZW50aWFscyByZXR1cm5lZCBieSBwbHVnaW4gJyR7b2J0YWluUmVzdWx0LnBsdWdpbk5hbWV9J2A7XG4gICAgY2FzZSAnaW5jb3JyZWN0RGVmYXVsdCc6XG4gICAgICBjb25zdCBtc2cgPSBbXTtcbiAgICAgIG1zZy5wdXNoKGBjdXJyZW50IGNyZWRlbnRpYWxzICh3aGljaCBhcmUgZm9yIGFjY291bnQgJHtvYnRhaW5SZXN1bHQuYWNjb3VudElkfWApO1xuXG4gICAgICBpZiAob2J0YWluUmVzdWx0LnVudXNlZFBsdWdpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cucHVzaChgLCBhbmQgbm9uZSBvZiB0aGUgZm9sbG93aW5nIHBsdWdpbnMgcHJvdmlkZWQgY3JlZGVudGlhbHM6ICR7b2J0YWluUmVzdWx0LnVudXNlZFBsdWdpbnMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cbiAgICAgIG1zZy5wdXNoKCcpJyk7XG5cbiAgICAgIHJldHVybiBtc2cuam9pbignJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -39,6 +39,7 @@ export interface ISDK {
|
|
|
39
39
|
kms(): AWS.KMS;
|
|
40
40
|
stepFunctions(): AWS.StepFunctions;
|
|
41
41
|
codeBuild(): AWS.CodeBuild;
|
|
42
|
+
cloudWatchLogs(): AWS.CloudWatchLogs;
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
44
45
|
* Additional SDK configuration options
|
|
@@ -87,6 +88,7 @@ export declare class SDK implements ISDK {
|
|
|
87
88
|
kms(): AWS.KMS;
|
|
88
89
|
stepFunctions(): AWS.StepFunctions;
|
|
89
90
|
codeBuild(): AWS.CodeBuild;
|
|
91
|
+
cloudWatchLogs(): AWS.CloudWatchLogs;
|
|
90
92
|
currentAccount(): Promise<Account>;
|
|
91
93
|
/**
|
|
92
94
|
* Return the current credentials
|
package/lib/api/aws-auth/sdk.js
CHANGED
|
@@ -98,6 +98,9 @@ class SDK {
|
|
|
98
98
|
codeBuild() {
|
|
99
99
|
return this.wrapServiceErrorHandling(new AWS.CodeBuild(this.config));
|
|
100
100
|
}
|
|
101
|
+
cloudWatchLogs() {
|
|
102
|
+
return this.wrapServiceErrorHandling(new AWS.CloudWatchLogs(this.config));
|
|
103
|
+
}
|
|
101
104
|
async currentAccount() {
|
|
102
105
|
// Get/refresh if necessary before we can access `accessKeyId`
|
|
103
106
|
await this.forceCredentialRetrieval();
|
|
@@ -269,4 +272,4 @@ function allChainedExceptionMessages(e) {
|
|
|
269
272
|
}
|
|
270
273
|
return ret.join(': ');
|
|
271
274
|
}
|
|
272
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQiwyQ0FBNkM7QUFDN0Msb0RBQThDO0FBQzlDLG1EQUF3RDtBQUd4RCw0RkFBNEY7QUFDNUYsc0VBQXNFO0FBQ3RFLEVBQUU7QUFDRiwwRkFBMEY7QUFDMUYsc0JBQXNCO0FBRXRCLDBEQUEwRDtBQUMxRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUN4RCx5REFBeUQ7QUFFekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtJQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUM7Q0FDckc7QUEyREQ7O0dBRUc7QUFDSCxNQUFhLEdBQUc7SUFvQmQsWUFDbUIsWUFBNkIsRUFDOUMsTUFBYyxFQUNkLGNBQW9DLEVBQUUsRUFDckIsYUFBeUIsRUFBRTtRQUgzQixpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFHN0IsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFqQjlDOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUVwRjs7Ozs7V0FLRztRQUNjLCtCQUEwQixHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFLLEVBQUUsRUFBRSxDQUFDO1FBUW5HLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQ3BCLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLE1BQU07WUFDTixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUN4RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVNLHFCQUFxQixDQUFDLGFBQXNCO1FBQ2pELElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBRUQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxzQkFBc0I7WUFDbEQsQ0FBQyxDQUFDLEdBQUcsc0JBQXNCLElBQUksYUFBYSxFQUFFO1lBQzlDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDcEIsQ0FBQztJQUVNLHFCQUFxQixDQUFDLGFBQXFCOztRQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsU0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsMENBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDMUQsR0FBRyxJQUFJLENBQUMsTUFBTTtZQUNkLEdBQUcsSUFBSSxDQUFDLDBCQUEwQjtTQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTSxFQUFFO1FBQ1AsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTSxLQUFLO1FBQ1YsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLDhEQUE4RDtRQUM5RCxNQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRXRDLE9BQU8sa0JBQU0sQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUcsNkRBQTZEO1lBQzdELGVBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7YUFDckQ7WUFDRCxlQUFLLENBQUMscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsa0JBQWtCO1FBQzdCLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsd0JBQXdCO1FBQ25DLElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLGVBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQztnQkFDZCx5Q0FBeUM7Z0JBQ3pDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQ0FBc0M7b0JBQ3ZELENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDO29CQUNyRSxDQUFDLENBQUMsRUFBRTtnQkFDTixDQUFDLENBQUMsT0FBTztnQkFDVCxnSEFBZ0g7b0JBQ2hILHNFQUFzRTthQUN2RSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRU0saUJBQWlCLENBQUMsTUFBYztRQUNyQyxPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FzQkc7SUFDSyx3QkFBd0IsQ0FBbUIsYUFBZ0I7UUFDakUsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWxCLE9BQU8sSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQzlCLEdBQUcsQ0FBQyxHQUFNLEVBQUUsSUFBWTtnQkFDdEIsTUFBTSxJQUFJLEdBQUksR0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxxQ0FBcUM7Z0JBQ3JDLG9DQUFvQztnQkFDcEMsc0dBQXNHO2dCQUN0RyxtR0FBbUc7Z0JBQ25HLElBQUksSUFBSSxLQUFLLGFBQWEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQUUsT0FBTyxJQUFJLENBQUM7aUJBQUU7Z0JBRXRHLHFEQUFxRDtnQkFDckQsMEVBQTBFO2dCQUMxRSwrQ0FBK0M7Z0JBQy9DLE9BQU87b0JBQ0wseUVBQXlFO29CQUN6RSw0Q0FBNEM7b0JBQzVDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBRXhDLG1GQUFtRjtvQkFDbkYsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7d0JBQUUsT0FBTyxRQUFRLENBQUM7cUJBQUU7b0JBQ25FLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsRUFBRTt3QkFBRSxPQUFPLFFBQVEsQ0FBQztxQkFBRTtvQkFFbEQsOEVBQThFO29CQUM5RSxrQ0FBa0M7b0JBQ2xDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUM1QyxPQUFPOzRCQUNMLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQTRCLEVBQUUsRUFBRTtnQ0FDL0QsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDbEMsZUFBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dDQUMzRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7NEJBQ3ZELENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUM7cUJBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxxQkFBcUIsQ0FBQyxDQUFRO1FBQ3BDLDZGQUE2RjtRQUM3Riw2R0FBNkc7UUFDN0csSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLCtCQUErQixDQUFDLEVBQUU7WUFDMUYsTUFBTSxRQUFRLEdBQUksQ0FBUyxDQUFDLGFBQWEsQ0FBQztZQUMxQyxJQUFJLFFBQVEsRUFBRTtnQkFDWiwrRUFBK0U7Z0JBQy9FLDJGQUEyRjtnQkFDM0YsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMxQztTQUNGO1FBRUQsMkZBQTJGO1FBQzNGLHlGQUF5RjtRQUN6RixxRkFBcUY7UUFDckYsbUZBQW1GO1FBQ25GLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSywrREFBK0QsRUFBRTtZQUNqRixDQUFDLENBQUMsT0FBTyxHQUFHO2dCQUNWLHlDQUF5QztnQkFDekMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHNDQUFzQztvQkFDdkQsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsVUFBVSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7b0JBQ3JFLENBQUMsQ0FBQyxFQUFFO2dCQUNOLGtFQUFrRTthQUNuRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNiO1FBRUQsc0ZBQXNGO1FBQ3RGLDRDQUE0QztRQUM1QyxDQUFDLENBQUMsT0FBTyxHQUFHLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7QUF2UUgsa0JBd1FDO0FBdlF5QixnQkFBWSxHQUFHLElBQUkscUNBQXFCLEVBQUUsQ0FBQztBQXlRckUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUxRCxTQUFTLFVBQVUsQ0FBQyxDQUFNO0lBQ3hCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixDQUFDO0FBQzFELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsMkJBQTJCLENBQUMsQ0FBb0I7SUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUNoQyxPQUFPLENBQUMsRUFBRTtRQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BCLENBQUMsR0FBSSxDQUFTLENBQUMsYUFBYSxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSAnYXdzLXNkay9saWIvY29uZmlnLWJhc2UnO1xuaW1wb3J0IHsgZGVidWcsIHRyYWNlIH0gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQgeyBjYWNoZWQgfSBmcm9tICcuLi8uLi91dGlsL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBBY2NvdW50QWNjZXNzS2V5Q2FjaGUgfSBmcm9tICcuL2FjY291bnQtY2FjaGUnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4vc2RrLXByb3ZpZGVyJztcblxuLy8gV2UgbmVlZCB0byBtYXAgcmVnaW9ucyB0byBkb21haW4gc3VmZml4ZXMsIGFuZCB0aGUgU0RLIGFscmVhZHkgaGFzIGEgZnVuY3Rpb24gdG8gZG8gdGhpcy5cbi8vIEl0J3Mgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIGJ1dCBpdCdzIGFsc28gdW5saWtlbHkgdG8gZ28gYXdheS5cbi8vXG4vLyBSZXVzZSB0aGF0IGZ1bmN0aW9uLCBhbmQgYWRkIGEgc2FmZXR5IGNoZWNrIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBicmVhayBpZiB0aGV5IGV2ZXJcbi8vIHJlZmFjdG9yIHRoYXQgYXdheS5cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuY29uc3QgcmVnaW9uVXRpbCA9IHJlcXVpcmUoJ2F3cy1zZGsvbGliL3JlZ2lvbl9jb25maWcnKTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuXG5pZiAoIXJlZ2lvblV0aWwuZ2V0RW5kcG9pbnRTdWZmaXgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHZlcnNpb24gb2YgQVdTIFNESyBmb3IgSlMgZG9lcyBub3QgaGF2ZSB0aGUgXFwnZ2V0RW5kcG9pbnRTdWZmaXhcXCcgZnVuY3Rpb24hJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNESyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoaXMgU0RLIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBmb3JcbiAgICpcbiAgICogKEFzIGRpc3RpbmN0IGZyb20gdGhlIGBkZWZhdWx0UmVnaW9uKClgIG9uIFNka1Byb3ZpZGVyIHdoaWNoXG4gICAqIHJlcHJlc2VudHMgdGhlIHJlZ2lvbiBjb25maWd1cmVkIGluIHRoZSBkZWZhdWx0IGNvbmZpZykuXG4gICAqL1xuICByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBY2NvdW50IHRoaXMgU0RLIGhhcyBiZWVuIGluc3RhbnRpYXRlZCBmb3JcbiAgICpcbiAgICogKEFzIGRpc3RpbmN0IGZyb20gdGhlIGBkZWZhdWx0QWNjb3VudCgpYCBvbiBTZGtQcm92aWRlciB3aGljaFxuICAgKiByZXByZXNlbnRzIHRoZSBhY2NvdW50IGF2YWlsYWJsZSBieSB1c2luZyBkZWZhdWx0IGNyZWRlbnRpYWxzKS5cbiAgICovXG4gIGN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD47XG5cbiAgZ2V0RW5kcG9pbnRTdWZmaXgocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gcHV0IGludG8gdGhlIFVzZXItQWdlbnQgaGVhZGVyIGZvciBhbnkgcmVxdWVzdHMgaW52b2tlZCBieSB0aGlzIFNESy5cbiAgICogSWYgdGhlIHN0cmluZyBpcyAndW5kZWZpbmVkJywgdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC5cbiAgICovXG4gIGFwcGVuZEN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhPzogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gc3RyaW5nIGZyb20gdGhlIGV4dHJhIFVzZXItQWdlbnQgaGVhZGVyIGRhdGEgdXNlZCBmb3IgcmVxdWVzdHMgaW52b2tlZCBieSB0aGlzIFNESy5cbiAgICovXG4gIHJlbW92ZUN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGxhbWJkYSgpOiBBV1MuTGFtYmRhO1xuICBjbG91ZEZvcm1hdGlvbigpOiBBV1MuQ2xvdWRGb3JtYXRpb247XG4gIGVjMigpOiBBV1MuRUMyO1xuICBzc20oKTogQVdTLlNTTTtcbiAgczMoKTogQVdTLlMzO1xuICByb3V0ZTUzKCk6IEFXUy5Sb3V0ZTUzO1xuICBlY3IoKTogQVdTLkVDUjtcbiAgZWNzKCk6IEFXUy5FQ1M7XG4gIGVsYnYyKCk6IEFXUy5FTEJ2MjtcbiAgc2VjcmV0c01hbmFnZXIoKTogQVdTLlNlY3JldHNNYW5hZ2VyO1xuICBrbXMoKTogQVdTLktNUztcbiAgc3RlcEZ1bmN0aW9ucygpOiBBV1MuU3RlcEZ1bmN0aW9ucztcbiAgY29kZUJ1aWxkKCk6IEFXUy5Db2RlQnVpbGRcbn1cblxuLyoqXG4gKiBBZGRpdGlvbmFsIFNESyBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZGtPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZGVzY3JpcHRpdmUgc3RyaW5ncyB0aGF0IGluZGljYXRlIHdoZXJlIHRoZSBcIkFzc3VtZVJvbGVcIiBjcmVkZW50aWFscyBhcmUgY29taW5nIGZyb21cbiAgICpcbiAgICogV2lsbCBiZSBwcmludGVkIGluIGFuIGVycm9yIG1lc3NhZ2UgdG8gaGVscCB1c2VycyBkaWFnbm9zZSBhdXRoIHByb2JsZW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBmdW5jdGlvbmFsaXR5IG9mIFNESyB3aXRob3V0IGNyZWRlbnRpYWwgZmV0Y2hpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY2NvdW50Q2FjaGUgPSBuZXcgQWNjb3VudEFjY2Vzc0tleUNhY2hlKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRSZWdpb246IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcmV0cnkgb3B0aW9ucyBmb3IgU0RLIGNsaWVudHMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJldHJ5T3B0aW9ucyA9IHsgbWF4UmV0cmllczogNiwgcmV0cnlEZWxheU9wdGlvbnM6IHsgYmFzZTogMzAwIH0gfTtcblxuICAvKipcbiAgICogVGhlIG1vcmUgZ2VuZXJvdXMgcmV0cnkgcG9saWN5IGZvciBDbG91ZEZvcm1hdGlvbiwgd2hpY2ggaGFzIGEgMSBUUE0gbGltaXQgb24gY2VydGFpbiBBUElzLFxuICAgKiB3aGljaCBhcmUgYWJ1bmRhbnRseSB1c2VkIGZvciBkZXBsb3ltZW50IHRyYWNraW5nLCAuLi5cbiAgICpcbiAgICogU28gd2UncmUgYWxsb3dpbmcgd2F5IG1vcmUgcmV0cmllcywgYnV0IHdhaXRpbmcgYSBiaXQgbW9yZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb25SZXRyeU9wdGlvbnMgPSB7IG1heFJldHJpZXM6IDEwLCByZXRyeURlbGF5T3B0aW9uczogeyBiYXNlOiAxXzAwMCB9IH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFscyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBodHRwT3B0aW9uczogQ29uZmlndXJhdGlvbk9wdGlvbnMgPSB7fSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNka09wdGlvbnM6IFNka09wdGlvbnMgPSB7fSkge1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi5odHRwT3B0aW9ucyxcbiAgICAgIC4uLnRoaXMucmV0cnlPcHRpb25zLFxuICAgICAgY3JlZGVudGlhbHM6IF9jcmVkZW50aWFscyxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGxvZ2dlcjogeyBsb2c6ICguLi5tZXNzYWdlcykgPT4gbWVzc2FnZXMuZm9yRWFjaChtID0+IHRyYWNlKCclcycsIG0pKSB9LFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50UmVnaW9uID0gcmVnaW9uO1xuICB9XG5cbiAgcHVibGljIGFwcGVuZEN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1c2VyQWdlbnREYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudDtcbiAgICB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSBjdXJyZW50Q3VzdG9tVXNlckFnZW50XG4gICAgICA/IGAke2N1cnJlbnRDdXN0b21Vc2VyQWdlbnR9ICR7dXNlckFnZW50RGF0YX1gXG4gICAgICA6IHVzZXJBZ2VudERhdGE7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudD8ucmVwbGFjZSh1c2VyQWdlbnREYXRhLCAnJyk7XG4gIH1cblxuICBwdWJsaWMgbGFtYmRhKCk6IEFXUy5MYW1iZGEge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkxhbWJkYSh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGNsb3VkRm9ybWF0aW9uKCk6IEFXUy5DbG91ZEZvcm1hdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAuLi50aGlzLmNsb3VkRm9ybWF0aW9uUmV0cnlPcHRpb25zLFxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBlYzIoKTogQVdTLkVDMiB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuRUMyKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgc3NtKCk6IEFXUy5TU00ge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLlNTTSh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIHMzKCk6IEFXUy5TMyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuUzModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyByb3V0ZTUzKCk6IEFXUy5Sb3V0ZTUzIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5Sb3V0ZTUzKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgZWNyKCk6IEFXUy5FQ1Ige1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkVDUih0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGVjcygpOiBBV1MuRUNTIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5FQ1ModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBlbGJ2MigpOiBBV1MuRUxCdjIge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkVMQnYyKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgc2VjcmV0c01hbmFnZXIoKTogQVdTLlNlY3JldHNNYW5hZ2VyIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5TZWNyZXRzTWFuYWdlcih0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGttcygpOiBBV1MuS01TIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5LTVModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGVwRnVuY3Rpb25zKCk6IEFXUy5TdGVwRnVuY3Rpb25zIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5TdGVwRnVuY3Rpb25zKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgY29kZUJ1aWxkKCk6IEFXUy5Db2RlQnVpbGQge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkNvZGVCdWlsZCh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIC8vIEdldC9yZWZyZXNoIGlmIG5lY2Vzc2FyeSBiZWZvcmUgd2UgY2FuIGFjY2VzcyBgYWNjZXNzS2V5SWRgXG4gICAgYXdhaXQgdGhpcy5mb3JjZUNyZWRlbnRpYWxSZXRyaWV2YWwoKTtcblxuICAgIHJldHVybiBjYWNoZWQodGhpcywgQ1VSUkVOVF9BQ0NPVU5UX0tFWSwgKCkgPT4gU0RLLmFjY291bnRDYWNoZS5mZXRjaCh0aGlzLl9jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBvbmUsIHJlc29sdmUgZnJvbSBTVFMgYW5kIHN0b3JlIGluIGNhY2hlLlxuICAgICAgZGVidWcoJ0xvb2tpbmcgdXAgZGVmYXVsdCBhY2NvdW50IElEIGZyb20gU1RTJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBuZXcgQVdTLlNUUyh0aGlzLmNvbmZpZykuZ2V0Q2FsbGVySWRlbnRpdHkoKS5wcm9taXNlKCk7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPSByZXN1bHQuQWNjb3VudDtcbiAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IHJlc3VsdC5Bcm4hLnNwbGl0KCc6JylbMV07XG4gICAgICBpZiAoIWFjY291bnRJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NUUyBkaWRuXFwndCByZXR1cm4gYW4gYWNjb3VudCBJRCcpO1xuICAgICAgfVxuICAgICAgZGVidWcoJ0RlZmF1bHQgYWNjb3VudCBJRDonLCBhY2NvdW50SWQpO1xuICAgICAgcmV0dXJuIHsgYWNjb3VudElkLCBwYXJ0aXRpb24gfTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IGNyZWRlbnRpYWxzXG4gICAqXG4gICAqIERvbid0IHVzZSAtLSBvbmx5IHVzZWQgdG8gd3JpdGUgdGVzdHMgYXJvdW5kIGFzc3VtaW5nIHJvbGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGN1cnJlbnRDcmVkZW50aWFscygpOiBQcm9taXNlPEFXUy5DcmVkZW50aWFscz4ge1xuICAgIGF3YWl0IHRoaXMuZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCk7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWRlbnRpYWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHJldHJpZXZhbCBvZiB0aGUgY3VycmVudCBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBSZWxldmFudCBpZiB0aGUgY3VycmVudCBjcmVkZW50aWFscyBhcmUgQXNzdW1lUm9sZSBjcmVkZW50aWFscyAtLSBkbyB0aGUgYWN0dWFsXG4gICAqIGxvb2t1cCwgYW5kIHRyYW5zbGF0ZSBhbnkgZXJyb3IgaW50byBhIHVzZWZ1bCBlcnJvciBtZXNzYWdlICh0YWtpbmcgaW50b1xuICAgKiBhY2NvdW50IGNyZWRlbnRpYWwgcHJvdmVuYW5jZSkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jcmVkZW50aWFscy5nZXRQcm9taXNlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoYEFzc3VtaW5nIHJvbGUgZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihbXG4gICAgICAgICdDb3VsZCBub3QgYXNzdW1lIHJvbGUgaW4gdGFyZ2V0IGFjY291bnQnLFxuICAgICAgICAuLi50aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb25cbiAgICAgICAgICA/IFtgdXNpbmcgJHt0aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb259YF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgICBlLm1lc3NhZ2UsXG4gICAgICAgICcuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGlzIHJvbGUgZXhpc3RzIGluIHRoZSBhY2NvdW50LiBJZiBpdCBkb2VzblxcJ3QgZXhpc3QsIChyZSktYm9vdHN0cmFwIHRoZSBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ3dpdGggdGhlIHJpZ2h0IFxcJy0tdHJ1c3RcXCcsIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ0RLIENMSS4nLFxuICAgICAgXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFbmRwb2ludFN1ZmZpeChyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlZ2lvblV0aWwuZ2V0RW5kcG9pbnRTdWZmaXgocmVnaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB3cmFwcGluZyBvYmplY3QgZm9yIHRoZSB1bmRlcmx5aW5nIHNlcnZpY2Ugb2JqZWN0XG4gICAqXG4gICAqIFJlc3BvbmRzIHRvIGZhaWx1cmVzIGluIHRoZSB1bmRlcmx5aW5nIHNlcnZpY2UgY2FsbHMsIGluIHR3byBkaWZmZXJlbnRcbiAgICogd2F5czpcbiAgICpcbiAgICogLSBXaGVuIGVycm9ycyBhcmUgZW5jb3VudGVyZWQsIGxvZyB0aGUgZmFpbGluZyBjYWxsIGFuZCB0aGUgZXJyb3IgdGhhdFxuICAgKiAgIGl0IHRyaWdnZXJlZCAoYXQgZGVidWcgbGV2ZWwpLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBsYWNrIG9mXG4gICAqICAgc3RhY2sgdHJhY2VzIGluIE5vZGVKUyBvdGhlcndpc2UgbWFrZXMgaXQgdmVyeSBoYXJkIHRvIHN1c3Mgb3V0IHdoZXJlXG4gICAqICAgYSBjZXJ0YWluIEFXUyBlcnJvciBvY2N1cnJlZC5cbiAgICogLSBUaGUgSlMgU0RLIGhhcyBhIGZ1bm55IGJ1c2luZXNzIG9mIHdyYXBwaW5nIGFueSBjcmVkZW50aWFsLWJhc2VkIGVycm9yXG4gICAqICAgaW4gYSBzdXBlci1nZW5lcmljIChhbmQgaW4gb3VyIGNhc2Ugd3JvbmcpIGV4Y2VwdGlvbi4gSWYgd2UgdGhlbiB1c2UgYVxuICAgKiAgICdDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscycgYW5kIHRoZSB0YXJnZXQgcm9sZSBkb2Vzbid0IGV4aXN0LFxuICAgKiAgIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgc2hvd3MgdXAgYnkgZGVmYXVsdCBpcyBzdXBlciBtaXNsZWFkaW5nXG4gICAqICAgKGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9pc3N1ZXMvMzI3MikuIFdlIGNhbiBmaXggdGhpcyBiZWNhdXNlXG4gICAqICAgdGhlIGV4Y2VwdGlvbiBjb250YWlucyB0aGUgXCJpbm5lciBleGNlcHRpb25cIiwgc28gd2UgdW53cmFwIGFuZCB0aHJvd1xuICAgKiAgIHRoZSBjb3JyZWN0IGVycm9yIChcImNhbm5vdCBhc3N1bWUgcm9sZVwiKS5cbiAgICpcbiAgICogVGhlIHdyYXBwaW5nIGJ1c2luZXNzIGJlbG93IGlzIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB5b3UnZCB0aGlua1xuICAgKiBiZWNhdXNlIHdlIG11c3QgaG9vayBpbnRvIHRoZSBgcHJvbWlzZSgpYCBtZXRob2Qgb2YgdGhlIG9iamVjdCB0aGF0J3MgYmVpbmdcbiAgICogcmV0dXJuZWQgZnJvbSB0aGUgbWV0aG9kcyBvZiB0aGUgb2JqZWN0IHRoYXQgd2Ugd3JhcCwgc28gdGhlcmUncyB0d29cbiAgICogbGV2ZWxzIG9mIHdyYXBwaW5nIGdvaW5nIG9uLCBhbmQgYWxzbyBzb21lIGV4Y2VwdGlvbnMgdG8gdGhlIHdyYXBwaW5nIG1hZ2ljLlxuICAgKi9cbiAgcHJpdmF0ZSB3cmFwU2VydmljZUVycm9ySGFuZGxpbmc8QSBleHRlbmRzIG9iamVjdD4oc2VydmljZU9iamVjdDogQSk6IEEge1xuICAgIGNvbnN0IGNsYXNzT2JqZWN0ID0gc2VydmljZU9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbmV3IFByb3h5KHNlcnZpY2VPYmplY3QsIHtcbiAgICAgIGdldChvYmo6IEEsIHByb3A6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZWFsID0gKG9iaiBhcyBhbnkpW3Byb3BdO1xuICAgICAgICAvLyBUaGluZ3Mgd2UgZG9uJ3Qgd2FudCB0byBpbnRlcmNlcHQ6XG4gICAgICAgIC8vIC0gQW55dGhpbmcgdGhhdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICAgICAgICAvLyAtICdjb25zdHJ1Y3RvcicsIHMzLnVwbG9hZCgpIHdpbGwgdXNlIHRoaXMgdG8gZG8gc29tZSBtYWdpYyBhbmQgd2UgbmVlZCB0aGUgdW5kZXJseWluZyBjb25zdHJ1Y3Rvci5cbiAgICAgICAgLy8gLSBBbnkgbWV0aG9kIHRoYXQncyBub3Qgb24gdGhlIHNlcnZpY2UgY2xhc3MgKGRvIG5vdCBpbnRlcmNlcHQgJ21ha2VSZXF1ZXN0JyBhbmQgb3RoZXIgaGVscGVycykuXG4gICAgICAgIGlmIChwcm9wID09PSAnY29uc3RydWN0b3InIHx8ICFjbGFzc09iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCAhaXNGdW5jdGlvbihyZWFsKSkgeyByZXR1cm4gcmVhbDsgfVxuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgbXVzdCBiZSBhIGZ1bmN0aW9uKCkgYW5kIG5vdCBhbiAoKSA9PiB7XG4gICAgICAgIC8vIGJlY2F1c2UgSSBuZWVkICd0aGlzJyB0byBiZSBkeW5hbWljYWxseSBib3VuZCBhbmQgbm90IHN0YXRpY2FsbHkgYm91bmQuXG4gICAgICAgIC8vIElmIHlvdXIgbGludGVyIGNvbXBsYWlucyBkb24ndCBsaXN0ZW4gdG8gaXQhXG4gICAgICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBhbnkpIHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLiBJZiBpdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgcHJvbWlzZSgpXG4gICAgICAgICAgLy8gbWV0aG9kIG9uIGl0LCB3cmFwIHRoYXQgJ3Byb21pc2UnIG1ldGhvZC5cbiAgICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVhbC5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgICAgICAgIC8vIERvbid0IGludGVyY2VwdCB1bmxlc3MgdGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhICcucHJvbWlzZSgpJyBtZXRob2QuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZSAhPT0gJ29iamVjdCcgfHwgIXJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZTsgfVxuICAgICAgICAgIGlmICghKCdwcm9taXNlJyBpbiByZXNwb25zZSkpIHsgcmV0dXJuIHJlc3BvbnNlOyB9XG5cbiAgICAgICAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb21pc2UgbWV0aG9kIHJlcGxhY2VkIHdpdGggYSB3cmFwcGVyIHdoaWNoIHdpbGxcbiAgICAgICAgICAvLyBkbyBhZGRpdGlvbmFsIHRoaW5ncyB0byBlcnJvcnMuXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShyZXNwb25zZSksIHtcbiAgICAgICAgICAgIHByb21pc2UoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5wcm9taXNlKCkuY2F0Y2goKGU6IEVycm9yICYgeyBjb2RlPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBlID0gc2VsZi5tYWtlRGV0YWlsZWRFeGNlcHRpb24oZSk7XG4gICAgICAgICAgICAgICAgZGVidWcoYENhbGwgZmFpbGVkOiAke3Byb3B9KCR7SlNPTi5zdHJpbmdpZnkoYXJnc1swXSl9KSA9PiAke2UubWVzc2FnZX0gKGNvZGU9JHtlLmNvZGV9KWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgLy8gUmUtJ3Rocm93JyB0aGUgbmV3IGVycm9yXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhIG1vcmUgZGV0YWlsZWQgZXJyb3Igb3V0IG9mIGEgZ2VuZXJpYyBlcnJvciBpZiB3ZSBjYW5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBhbiBlcnJvciBhYm91dCBBc3N1bWluZyBSb2xlcywgYWRkIGluIHRoZSBjb250ZXh0IHNob3dpbmcgdGhlXG4gICAqIGNoYWluIG9mIGNyZWRlbnRpYWxzIHdlIHVzZWQgdG8gdHJ5IHRvIGFzc3VtZSB0aGUgcm9sZS5cbiAgICovXG4gIHByaXZhdGUgbWFrZURldGFpbGVkRXhjZXB0aW9uKGU6IEVycm9yKTogRXJyb3Ige1xuICAgIC8vIFRoaXMgaXMgdGhlIHN1cGVyLWdlbmVyaWMgXCJzb21ldGhpbmcncyB3cm9uZ1wiIGVycm9yIHRoYXQgdGhlIEpTIFNESyB3cmFwcyBvdGhlciBlcnJvcnMgaW4uXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzL2Jsb2IvZjBhYzJlNTM0NTdjNzUxMjg4M2QwNjc3MDEzZWFjYWFkNmNkOGExOS9saWIvZXZlbnRfbGlzdGVuZXJzLmpzI0w4NFxuICAgIGlmICh0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnTWlzc2luZyBjcmVkZW50aWFscyBpbiBjb25maWcnKSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSAoZSBhcyBhbnkpLm9yaWdpbmFsRXJyb3I7XG4gICAgICBpZiAob3JpZ2luYWwpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgU0RLIGRvZXMgYSAndXRpbC5jb3B5JywgdGhleSBsb3NlIHRoZSBFcnJvci1uZXNzIG9mIHRoZSBpbm5lciBlcnJvclxuICAgICAgICAvLyAodGhleSBjb3B5IHRoZSBFcnJvcidzIHByb3BlcnRpZXMgaW50byBhIHBsYWluIG9iamVjdCkgc28gbWFrZSBpdCBhbiBFcnJvciBvYmplY3QgYWdhaW4uXG4gICAgICAgIGUgPSBPYmplY3QuYXNzaWduKG5ldyBFcnJvcigpLCBvcmlnaW5hbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIGVycm9yIG1pZ2h0IHN0aWxsIGJlIGEgZ2VuZXJpYyBcIkNoYWluYWJsZVRlbXBvcmFyeUNyZWRlbnRpYWxzIGZhaWxlZFwiXG4gICAgLy8gZXJyb3Igd2hpY2ggd3JhcHMgdGhlIFJFQUwgZXJyb3IgKEFzc3VtZVJvbGUgZmFpbGVkKS4gV2UncmUgZ29pbmcgdG8gcmVwbGFjZSB0aGUgZXJyb3JcbiAgICAvLyBtZXNzYWdlIHdpdGggb25lIHRoYXQncyBtb3JlIGxpa2VseSB0byBoZWxwIHVzZXJzLCBhbmQgdGVsbCB0aGVtIHRoZSBtb3N0IHByb2JhYmxlXG4gICAgLy8gZml4IChib290c3RyYXBwaW5nKS4gVGhlIHVuZGVybHlpbmcgc2VydmljZSBjYWxsIGZhaWx1cmUgd2lsbCBiZSBhcHBlbmRlZCBiZWxvdy5cbiAgICBpZiAoZS5tZXNzYWdlID09PSAnQ291bGQgbm90IGxvYWQgY3JlZGVudGlhbHMgZnJvbSBDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscycpIHtcbiAgICAgIGUubWVzc2FnZSA9IFtcbiAgICAgICAgJ0NvdWxkIG5vdCBhc3N1bWUgcm9sZSBpbiB0YXJnZXQgYWNjb3VudCcsXG4gICAgICAgIC4uLnRoaXMuc2RrT3B0aW9ucy5hc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvblxuICAgICAgICAgID8gW2B1c2luZyAke3RoaXMuc2RrT3B0aW9ucy5hc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbn1gXVxuICAgICAgICAgIDogW10sXG4gICAgICAgICcoZGlkIHlvdSBib290c3RyYXAgdGhlIGVudmlyb25tZW50IHdpdGggdGhlIHJpZ2h0IFxcJy0tdHJ1c3RcXCdzPyknLFxuICAgICAgXS5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLy8gUmVwbGFjZSB0aGUgbWVzc2FnZSBvbiB0aGlzIGVycm9yIHdpdGggYSBjb25jYXRlbmF0aW9uIG9mIGFsbCBpbm5lciBlcnJvciBtZXNzYWdlcy5cbiAgICAvLyBNdXN0IG1vcmUgY2xlYXIgd2hhdCdzIGdvaW5nIG9uIHRoYXQgd2F5LlxuICAgIGUubWVzc2FnZSA9IGFsbENoYWluZWRFeGNlcHRpb25NZXNzYWdlcyhlKTtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5jb25zdCBDVVJSRU5UX0FDQ09VTlRfS0VZID0gU3ltYm9sKCdjdXJyZW50X2FjY291bnRfa2V5Jyk7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeDogYW55KTogeCBpcyAoLi4uYXJnczogYW55W10pID0+IGFueSB7XG4gIHJldHVybiB4ICYmIHt9LnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBjb25jYXRlbmF0ZWQgbWVzc2FnZSBvZiBhbGwgZXhjZXB0aW9ucyBpbiB0aGUgQVdTIGV4Y2VwdGlvbiBjaGFpblxuICovXG5mdW5jdGlvbiBhbGxDaGFpbmVkRXhjZXB0aW9uTWVzc2FnZXMoZTogRXJyb3IgfCB1bmRlZmluZWQpIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgd2hpbGUgKGUpIHtcbiAgICByZXQucHVzaChlLm1lc3NhZ2UpO1xuICAgIGUgPSAoZSBhcyBhbnkpLm9yaWdpbmFsRXJyb3I7XG4gIH1cbiAgcmV0dXJuIHJldC5qb2luKCc6ICcpO1xufVxuIl19
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQiwyQ0FBNkM7QUFDN0Msb0RBQThDO0FBQzlDLG1EQUF3RDtBQUd4RCw0RkFBNEY7QUFDNUYsc0VBQXNFO0FBQ3RFLEVBQUU7QUFDRiwwRkFBMEY7QUFDMUYsc0JBQXNCO0FBRXRCLDBEQUEwRDtBQUMxRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUN4RCx5REFBeUQ7QUFFekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtJQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUM7Q0FDckc7QUE0REQ7O0dBRUc7QUFDSCxNQUFhLEdBQUc7SUFvQmQsWUFDbUIsWUFBNkIsRUFDOUMsTUFBYyxFQUNkLGNBQW9DLEVBQUUsRUFDckIsYUFBeUIsRUFBRTtRQUgzQixpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFHN0IsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFqQjlDOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUVwRjs7Ozs7V0FLRztRQUNjLCtCQUEwQixHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFLLEVBQUUsRUFBRSxDQUFDO1FBUW5HLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLFdBQVc7WUFDZCxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQ3BCLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLE1BQU07WUFDTixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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MkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7O0FBM1FILGtCQTRRQztBQTNReUIsZ0JBQVksR0FBRyxJQUFJLHFDQUFxQixFQUFFLENBQUM7QUE2UXJFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFMUQsU0FBUyxVQUFVLENBQUMsQ0FBTTtJQUN4QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxtQkFBbUIsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLENBQW9CO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFDaEMsT0FBTyxDQUFDLEVBQUU7UUFDUixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQixDQUFDLEdBQUksQ0FBUyxDQUFDLGFBQWEsQ0FBQztLQUM5QjtJQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1zZGsvbGliL2NvbmZpZy1iYXNlJztcbmltcG9ydCB7IGRlYnVnLCB0cmFjZSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgY2FjaGVkIH0gZnJvbSAnLi4vLi4vdXRpbC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQWNjb3VudEFjY2Vzc0tleUNhY2hlIH0gZnJvbSAnLi9hY2NvdW50LWNhY2hlJztcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tICcuL3Nkay1wcm92aWRlcic7XG5cbi8vIFdlIG5lZWQgdG8gbWFwIHJlZ2lvbnMgdG8gZG9tYWluIHN1ZmZpeGVzLCBhbmQgdGhlIFNESyBhbHJlYWR5IGhhcyBhIGZ1bmN0aW9uIHRvIGRvIHRoaXMuXG4vLyBJdCdzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBidXQgaXQncyBhbHNvIHVubGlrZWx5IHRvIGdvIGF3YXkuXG4vL1xuLy8gUmV1c2UgdGhhdCBmdW5jdGlvbiwgYW5kIGFkZCBhIHNhZmV0eSBjaGVjayBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgYnJlYWsgaWYgdGhleSBldmVyXG4vLyByZWZhY3RvciB0aGF0IGF3YXkuXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmNvbnN0IHJlZ2lvblV0aWwgPSByZXF1aXJlKCdhd3Mtc2RrL2xpYi9yZWdpb25fY29uZmlnJyk7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cblxuaWYgKCFyZWdpb25VdGlsLmdldEVuZHBvaW50U3VmZml4KSB7XG4gIHRocm93IG5ldyBFcnJvcignVGhpcyB2ZXJzaW9uIG9mIEFXUyBTREsgZm9yIEpTIGRvZXMgbm90IGhhdmUgdGhlIFxcJ2dldEVuZHBvaW50U3VmZml4XFwnIGZ1bmN0aW9uIScpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTREsge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbiB0aGlzIFNESyBoYXMgYmVlbiBpbnN0YW50aWF0ZWQgZm9yXG4gICAqXG4gICAqIChBcyBkaXN0aW5jdCBmcm9tIHRoZSBgZGVmYXVsdFJlZ2lvbigpYCBvbiBTZGtQcm92aWRlciB3aGljaFxuICAgKiByZXByZXNlbnRzIHRoZSByZWdpb24gY29uZmlndXJlZCBpbiB0aGUgZGVmYXVsdCBjb25maWcpLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQWNjb3VudCB0aGlzIFNESyBoYXMgYmVlbiBpbnN0YW50aWF0ZWQgZm9yXG4gICAqXG4gICAqIChBcyBkaXN0aW5jdCBmcm9tIHRoZSBgZGVmYXVsdEFjY291bnQoKWAgb24gU2RrUHJvdmlkZXIgd2hpY2hcbiAgICogcmVwcmVzZW50cyB0aGUgYWNjb3VudCBhdmFpbGFibGUgYnkgdXNpbmcgZGVmYXVsdCBjcmVkZW50aWFscykuXG4gICAqL1xuICBjdXJyZW50QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQ+O1xuXG4gIGdldEVuZHBvaW50U3VmZml4KHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcHBlbmRzIHRoZSBnaXZlbiBzdHJpbmcgYXMgdGhlIGV4dHJhIGluZm9ybWF0aW9uIHRvIHB1dCBpbnRvIHRoZSBVc2VyLUFnZW50IGhlYWRlciBmb3IgYW55IHJlcXVlc3RzIGludm9rZWQgYnkgdGhpcyBTREsuXG4gICAqIElmIHRoZSBzdHJpbmcgaXMgJ3VuZGVmaW5lZCcsIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuXG4gICAqL1xuICBhcHBlbmRDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YT86IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdpdmVuIHN0cmluZyBmcm9tIHRoZSBleHRyYSBVc2VyLUFnZW50IGhlYWRlciBkYXRhIHVzZWQgZm9yIHJlcXVlc3RzIGludm9rZWQgYnkgdGhpcyBTREsuXG4gICAqL1xuICByZW1vdmVDdXN0b21Vc2VyQWdlbnQodXNlckFnZW50RGF0YTogc3RyaW5nKTogdm9pZDtcblxuICBsYW1iZGEoKTogQVdTLkxhbWJkYTtcbiAgY2xvdWRGb3JtYXRpb24oKTogQVdTLkNsb3VkRm9ybWF0aW9uO1xuICBlYzIoKTogQVdTLkVDMjtcbiAgc3NtKCk6IEFXUy5TU007XG4gIHMzKCk6IEFXUy5TMztcbiAgcm91dGU1MygpOiBBV1MuUm91dGU1MztcbiAgZWNyKCk6IEFXUy5FQ1I7XG4gIGVjcygpOiBBV1MuRUNTO1xuICBlbGJ2MigpOiBBV1MuRUxCdjI7XG4gIHNlY3JldHNNYW5hZ2VyKCk6IEFXUy5TZWNyZXRzTWFuYWdlcjtcbiAga21zKCk6IEFXUy5LTVM7XG4gIHN0ZXBGdW5jdGlvbnMoKTogQVdTLlN0ZXBGdW5jdGlvbnM7XG4gIGNvZGVCdWlsZCgpOiBBV1MuQ29kZUJ1aWxkXG4gIGNsb3VkV2F0Y2hMb2dzKCk6IEFXUy5DbG91ZFdhdGNoTG9ncztcbn1cblxuLyoqXG4gKiBBZGRpdGlvbmFsIFNESyBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZGtPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZGVzY3JpcHRpdmUgc3RyaW5ncyB0aGF0IGluZGljYXRlIHdoZXJlIHRoZSBcIkFzc3VtZVJvbGVcIiBjcmVkZW50aWFscyBhcmUgY29taW5nIGZyb21cbiAgICpcbiAgICogV2lsbCBiZSBwcmludGVkIGluIGFuIGVycm9yIG1lc3NhZ2UgdG8gaGVscCB1c2VycyBkaWFnbm9zZSBhdXRoIHByb2JsZW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBmdW5jdGlvbmFsaXR5IG9mIFNESyB3aXRob3V0IGNyZWRlbnRpYWwgZmV0Y2hpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY2NvdW50Q2FjaGUgPSBuZXcgQWNjb3VudEFjY2Vzc0tleUNhY2hlKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRSZWdpb246IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcmV0cnkgb3B0aW9ucyBmb3IgU0RLIGNsaWVudHMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJldHJ5T3B0aW9ucyA9IHsgbWF4UmV0cmllczogNiwgcmV0cnlEZWxheU9wdGlvbnM6IHsgYmFzZTogMzAwIH0gfTtcblxuICAvKipcbiAgICogVGhlIG1vcmUgZ2VuZXJvdXMgcmV0cnkgcG9saWN5IGZvciBDbG91ZEZvcm1hdGlvbiwgd2hpY2ggaGFzIGEgMSBUUE0gbGltaXQgb24gY2VydGFpbiBBUElzLFxuICAgKiB3aGljaCBhcmUgYWJ1bmRhbnRseSB1c2VkIGZvciBkZXBsb3ltZW50IHRyYWNraW5nLCAuLi5cbiAgICpcbiAgICogU28gd2UncmUgYWxsb3dpbmcgd2F5IG1vcmUgcmV0cmllcywgYnV0IHdhaXRpbmcgYSBiaXQgbW9yZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb25SZXRyeU9wdGlvbnMgPSB7IG1heFJldHJpZXM6IDEwLCByZXRyeURlbGF5T3B0aW9uczogeyBiYXNlOiAxXzAwMCB9IH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY3JlZGVudGlhbHM6IEFXUy5DcmVkZW50aWFscyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBodHRwT3B0aW9uczogQ29uZmlndXJhdGlvbk9wdGlvbnMgPSB7fSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNka09wdGlvbnM6IFNka09wdGlvbnMgPSB7fSkge1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi5odHRwT3B0aW9ucyxcbiAgICAgIC4uLnRoaXMucmV0cnlPcHRpb25zLFxuICAgICAgY3JlZGVudGlhbHM6IF9jcmVkZW50aWFscyxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGxvZ2dlcjogeyBsb2c6ICguLi5tZXNzYWdlcykgPT4gbWVzc2FnZXMuZm9yRWFjaChtID0+IHRyYWNlKCclcycsIG0pKSB9LFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50UmVnaW9uID0gcmVnaW9uO1xuICB9XG5cbiAgcHVibGljIGFwcGVuZEN1c3RvbVVzZXJBZ2VudCh1c2VyQWdlbnREYXRhPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1c2VyQWdlbnREYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudDtcbiAgICB0aGlzLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSBjdXJyZW50Q3VzdG9tVXNlckFnZW50XG4gICAgICA/IGAke2N1cnJlbnRDdXN0b21Vc2VyQWdlbnR9ICR7dXNlckFnZW50RGF0YX1gXG4gICAgICA6IHVzZXJBZ2VudERhdGE7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudD8ucmVwbGFjZSh1c2VyQWdlbnREYXRhLCAnJyk7XG4gIH1cblxuICBwdWJsaWMgbGFtYmRhKCk6IEFXUy5MYW1iZGEge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkxhbWJkYSh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGNsb3VkRm9ybWF0aW9uKCk6IEFXUy5DbG91ZEZvcm1hdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAuLi50aGlzLmNsb3VkRm9ybWF0aW9uUmV0cnlPcHRpb25zLFxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBlYzIoKTogQVdTLkVDMiB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuRUMyKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgc3NtKCk6IEFXUy5TU00ge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLlNTTSh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIHMzKCk6IEFXUy5TMyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuUzModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyByb3V0ZTUzKCk6IEFXUy5Sb3V0ZTUzIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5Sb3V0ZTUzKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgZWNyKCk6IEFXUy5FQ1Ige1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkVDUih0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGVjcygpOiBBV1MuRUNTIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5FQ1ModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBlbGJ2MigpOiBBV1MuRUxCdjIge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkVMQnYyKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgc2VjcmV0c01hbmFnZXIoKTogQVdTLlNlY3JldHNNYW5hZ2VyIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5TZWNyZXRzTWFuYWdlcih0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGttcygpOiBBV1MuS01TIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5LTVModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGVwRnVuY3Rpb25zKCk6IEFXUy5TdGVwRnVuY3Rpb25zIHtcbiAgICByZXR1cm4gdGhpcy53cmFwU2VydmljZUVycm9ySGFuZGxpbmcobmV3IEFXUy5TdGVwRnVuY3Rpb25zKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICBwdWJsaWMgY29kZUJ1aWxkKCk6IEFXUy5Db2RlQnVpbGQge1xuICAgIHJldHVybiB0aGlzLndyYXBTZXJ2aWNlRXJyb3JIYW5kbGluZyhuZXcgQVdTLkNvZGVCdWlsZCh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgcHVibGljIGNsb3VkV2F0Y2hMb2dzKCk6IEFXUy5DbG91ZFdhdGNoTG9ncyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nKG5ldyBBV1MuQ2xvdWRXYXRjaExvZ3ModGhpcy5jb25maWcpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjdXJyZW50QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICAvLyBHZXQvcmVmcmVzaCBpZiBuZWNlc3NhcnkgYmVmb3JlIHdlIGNhbiBhY2Nlc3MgYGFjY2Vzc0tleUlkYFxuICAgIGF3YWl0IHRoaXMuZm9yY2VDcmVkZW50aWFsUmV0cmlldmFsKCk7XG5cbiAgICByZXR1cm4gY2FjaGVkKHRoaXMsIENVUlJFTlRfQUNDT1VOVF9LRVksICgpID0+IFNESy5hY2NvdW50Q2FjaGUuZmV0Y2godGhpcy5fY3JlZGVudGlhbHMuYWNjZXNzS2V5SWQsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgb25lLCByZXNvbHZlIGZyb20gU1RTIGFuZCBzdG9yZSBpbiBjYWNoZS5cbiAgICAgIGRlYnVnKCdMb29raW5nIHVwIGRlZmF1bHQgYWNjb3VudCBJRCBmcm9tIFNUUycpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IEFXUy5TVFModGhpcy5jb25maWcpLmdldENhbGxlcklkZW50aXR5KCkucHJvbWlzZSgpO1xuICAgICAgY29uc3QgYWNjb3VudElkID0gcmVzdWx0LkFjY291bnQ7XG4gICAgICBjb25zdCBwYXJ0aXRpb24gPSByZXN1bHQuQXJuIS5zcGxpdCgnOicpWzFdO1xuICAgICAgaWYgKCFhY2NvdW50SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTVFMgZGlkblxcJ3QgcmV0dXJuIGFuIGFjY291bnQgSUQnKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdEZWZhdWx0IGFjY291bnQgSUQ6JywgYWNjb3VudElkKTtcbiAgICAgIHJldHVybiB7IGFjY291bnRJZCwgcGFydGl0aW9uIH07XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBEb24ndCB1c2UgLS0gb25seSB1c2VkIHRvIHdyaXRlIHRlc3RzIGFyb3VuZCBhc3N1bWluZyByb2xlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjdXJyZW50Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxBV1MuQ3JlZGVudGlhbHM+IHtcbiAgICBhd2FpdCB0aGlzLmZvcmNlQ3JlZGVudGlhbFJldHJpZXZhbCgpO1xuICAgIHJldHVybiB0aGlzLl9jcmVkZW50aWFscztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSByZXRyaWV2YWwgb2YgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHNcbiAgICpcbiAgICogUmVsZXZhbnQgaWYgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIEFzc3VtZVJvbGUgY3JlZGVudGlhbHMgLS0gZG8gdGhlIGFjdHVhbFxuICAgKiBsb29rdXAsIGFuZCB0cmFuc2xhdGUgYW55IGVycm9yIGludG8gYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSAodGFraW5nIGludG9cbiAgICogYWNjb3VudCBjcmVkZW50aWFsIHByb3ZlbmFuY2UpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZvcmNlQ3JlZGVudGlhbFJldHJpZXZhbCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY3JlZGVudGlhbHMuZ2V0UHJvbWlzZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGRlYnVnKGBBc3N1bWluZyByb2xlIGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgICAnQ291bGQgbm90IGFzc3VtZSByb2xlIGluIHRhcmdldCBhY2NvdW50JyxcbiAgICAgICAgLi4udGhpcy5zZGtPcHRpb25zLmFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9uXG4gICAgICAgICAgPyBbYHVzaW5nICR7dGhpcy5zZGtPcHRpb25zLmFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9ufWBdXG4gICAgICAgICAgOiBbXSxcbiAgICAgICAgZS5tZXNzYWdlLFxuICAgICAgICAnLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhpcyByb2xlIGV4aXN0cyBpbiB0aGUgYWNjb3VudC4gSWYgaXQgZG9lc25cXCd0IGV4aXN0LCAocmUpLWJvb3RzdHJhcCB0aGUgZW52aXJvbm1lbnQgJyArXG4gICAgICAgICd3aXRoIHRoZSByaWdodCBcXCctLXRydXN0XFwnLCB1c2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIENESyBDTEkuJyxcbiAgICAgIF0uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RW5kcG9pbnRTdWZmaXgocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByZWdpb25VdGlsLmdldEVuZHBvaW50U3VmZml4KHJlZ2lvbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgd3JhcHBpbmcgb2JqZWN0IGZvciB0aGUgdW5kZXJseWluZyBzZXJ2aWNlIG9iamVjdFxuICAgKlxuICAgKiBSZXNwb25kcyB0byBmYWlsdXJlcyBpbiB0aGUgdW5kZXJseWluZyBzZXJ2aWNlIGNhbGxzLCBpbiB0d28gZGlmZmVyZW50XG4gICAqIHdheXM6XG4gICAqXG4gICAqIC0gV2hlbiBlcnJvcnMgYXJlIGVuY291bnRlcmVkLCBsb2cgdGhlIGZhaWxpbmcgY2FsbCBhbmQgdGhlIGVycm9yIHRoYXRcbiAgICogICBpdCB0cmlnZ2VyZWQgKGF0IGRlYnVnIGxldmVsKS4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgbGFjayBvZlxuICAgKiAgIHN0YWNrIHRyYWNlcyBpbiBOb2RlSlMgb3RoZXJ3aXNlIG1ha2VzIGl0IHZlcnkgaGFyZCB0byBzdXNzIG91dCB3aGVyZVxuICAgKiAgIGEgY2VydGFpbiBBV1MgZXJyb3Igb2NjdXJyZWQuXG4gICAqIC0gVGhlIEpTIFNESyBoYXMgYSBmdW5ueSBidXNpbmVzcyBvZiB3cmFwcGluZyBhbnkgY3JlZGVudGlhbC1iYXNlZCBlcnJvclxuICAgKiAgIGluIGEgc3VwZXItZ2VuZXJpYyAoYW5kIGluIG91ciBjYXNlIHdyb25nKSBleGNlcHRpb24uIElmIHdlIHRoZW4gdXNlIGFcbiAgICogICAnQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMnIGFuZCB0aGUgdGFyZ2V0IHJvbGUgZG9lc24ndCBleGlzdCxcbiAgICogICB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0IHNob3dzIHVwIGJ5IGRlZmF1bHQgaXMgc3VwZXIgbWlzbGVhZGluZ1xuICAgKiAgIChodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzMyNzIpLiBXZSBjYW4gZml4IHRoaXMgYmVjYXVzZVxuICAgKiAgIHRoZSBleGNlcHRpb24gY29udGFpbnMgdGhlIFwiaW5uZXIgZXhjZXB0aW9uXCIsIHNvIHdlIHVud3JhcCBhbmQgdGhyb3dcbiAgICogICB0aGUgY29ycmVjdCBlcnJvciAoXCJjYW5ub3QgYXNzdW1lIHJvbGVcIikuXG4gICAqXG4gICAqIFRoZSB3cmFwcGluZyBidXNpbmVzcyBiZWxvdyBpcyBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4geW91J2QgdGhpbmtcbiAgICogYmVjYXVzZSB3ZSBtdXN0IGhvb2sgaW50byB0aGUgYHByb21pc2UoKWAgbWV0aG9kIG9mIHRoZSBvYmplY3QgdGhhdCdzIGJlaW5nXG4gICAqIHJldHVybmVkIGZyb20gdGhlIG1ldGhvZHMgb2YgdGhlIG9iamVjdCB0aGF0IHdlIHdyYXAsIHNvIHRoZXJlJ3MgdHdvXG4gICAqIGxldmVscyBvZiB3cmFwcGluZyBnb2luZyBvbiwgYW5kIGFsc28gc29tZSBleGNlcHRpb25zIHRvIHRoZSB3cmFwcGluZyBtYWdpYy5cbiAgICovXG4gIHByaXZhdGUgd3JhcFNlcnZpY2VFcnJvckhhbmRsaW5nPEEgZXh0ZW5kcyBvYmplY3Q+KHNlcnZpY2VPYmplY3Q6IEEpOiBBIHtcbiAgICBjb25zdCBjbGFzc09iamVjdCA9IHNlcnZpY2VPYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm94eShzZXJ2aWNlT2JqZWN0LCB7XG4gICAgICBnZXQob2JqOiBBLCBwcm9wOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVhbCA9IChvYmogYXMgYW55KVtwcm9wXTtcbiAgICAgICAgLy8gVGhpbmdzIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJjZXB0OlxuICAgICAgICAvLyAtIEFueXRoaW5nIHRoYXQncyBub3QgYSBmdW5jdGlvbi5cbiAgICAgICAgLy8gLSAnY29uc3RydWN0b3InLCBzMy51cGxvYWQoKSB3aWxsIHVzZSB0aGlzIHRvIGRvIHNvbWUgbWFnaWMgYW5kIHdlIG5lZWQgdGhlIHVuZGVybHlpbmcgY29uc3RydWN0b3IuXG4gICAgICAgIC8vIC0gQW55IG1ldGhvZCB0aGF0J3Mgbm90IG9uIHRoZSBzZXJ2aWNlIGNsYXNzIChkbyBub3QgaW50ZXJjZXB0ICdtYWtlUmVxdWVzdCcgYW5kIG90aGVyIGhlbHBlcnMpLlxuICAgICAgICBpZiAocHJvcCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhY2xhc3NPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgIWlzRnVuY3Rpb24ocmVhbCkpIHsgcmV0dXJuIHJlYWw7IH1cblxuICAgICAgICAvLyBOT1RFOiBUaGlzIG11c3QgYmUgYSBmdW5jdGlvbigpIGFuZCBub3QgYW4gKCkgPT4ge1xuICAgICAgICAvLyBiZWNhdXNlIEkgbmVlZCAndGhpcycgdG8gYmUgZHluYW1pY2FsbHkgYm91bmQgYW5kIG5vdCBzdGF0aWNhbGx5IGJvdW5kLlxuICAgICAgICAvLyBJZiB5b3VyIGxpbnRlciBjb21wbGFpbnMgZG9uJ3QgbGlzdGVuIHRvIGl0IVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgICAgICAgLy8gQ2FsbCB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi4gSWYgaXQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIHByb21pc2UoKVxuICAgICAgICAgIC8vIG1ldGhvZCBvbiBpdCwgd3JhcCB0aGF0ICdwcm9taXNlJyBtZXRob2QuXG4gICAgICAgICAgY29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICAgICAgICAvLyBEb24ndCBpbnRlcmNlcHQgdW5sZXNzIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYSAnLnByb21pc2UoKScgbWV0aG9kLlxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UgIT09ICdvYmplY3QnIHx8ICFyZXNwb25zZSkgeyByZXR1cm4gcmVzcG9uc2U7IH1cbiAgICAgICAgICBpZiAoISgncHJvbWlzZScgaW4gcmVzcG9uc2UpKSB7IHJldHVybiByZXNwb25zZTsgfVxuXG4gICAgICAgICAgLy8gUmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9taXNlIG1ldGhvZCByZXBsYWNlZCB3aXRoIGEgd3JhcHBlciB3aGljaCB3aWxsXG4gICAgICAgICAgLy8gZG8gYWRkaXRpb25hbCB0aGluZ3MgdG8gZXJyb3JzLlxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocmVzcG9uc2UpLCB7XG4gICAgICAgICAgICBwcm9taXNlKCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucHJvbWlzZSgpLmNhdGNoKChlOiBFcnJvciAmIHsgY29kZT86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgZSA9IHNlbGYubWFrZURldGFpbGVkRXhjZXB0aW9uKGUpO1xuICAgICAgICAgICAgICAgIGRlYnVnKGBDYWxsIGZhaWxlZDogJHtwcm9wfSgke0pTT04uc3RyaW5naWZ5KGFyZ3NbMF0pfSkgPT4gJHtlLm1lc3NhZ2V9IChjb2RlPSR7ZS5jb2RlfSlgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IC8vIFJlLSd0aHJvdycgdGhlIG5ldyBlcnJvclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgYSBtb3JlIGRldGFpbGVkIGVycm9yIG91dCBvZiBhIGdlbmVyaWMgZXJyb3IgaWYgd2UgY2FuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYW4gZXJyb3IgYWJvdXQgQXNzdW1pbmcgUm9sZXMsIGFkZCBpbiB0aGUgY29udGV4dCBzaG93aW5nIHRoZVxuICAgKiBjaGFpbiBvZiBjcmVkZW50aWFscyB3ZSB1c2VkIHRvIHRyeSB0byBhc3N1bWUgdGhlIHJvbGUuXG4gICAqL1xuICBwcml2YXRlIG1ha2VEZXRhaWxlZEV4Y2VwdGlvbihlOiBFcnJvcik6IEVycm9yIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzdXBlci1nZW5lcmljIFwic29tZXRoaW5nJ3Mgd3JvbmdcIiBlcnJvciB0aGF0IHRoZSBKUyBTREsgd3JhcHMgb3RoZXIgZXJyb3JzIGluLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9ibG9iL2YwYWMyZTUzNDU3Yzc1MTI4ODNkMDY3NzAxM2VhY2FhZDZjZDhhMTkvbGliL2V2ZW50X2xpc3RlbmVycy5qcyNMODRcbiAgICBpZiAodHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ01pc3NpbmcgY3JlZGVudGlhbHMgaW4gY29uZmlnJykpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gKGUgYXMgYW55KS5vcmlnaW5hbEVycm9yO1xuICAgICAgaWYgKG9yaWdpbmFsKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIFNESyBkb2VzIGEgJ3V0aWwuY29weScsIHRoZXkgbG9zZSB0aGUgRXJyb3ItbmVzcyBvZiB0aGUgaW5uZXIgZXJyb3JcbiAgICAgICAgLy8gKHRoZXkgY29weSB0aGUgRXJyb3IncyBwcm9wZXJ0aWVzIGludG8gYSBwbGFpbiBvYmplY3QpIHNvIG1ha2UgaXQgYW4gRXJyb3Igb2JqZWN0IGFnYWluLlxuICAgICAgICBlID0gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoKSwgb3JpZ2luYWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBlcnJvciBtaWdodCBzdGlsbCBiZSBhIGdlbmVyaWMgXCJDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyBmYWlsZWRcIlxuICAgIC8vIGVycm9yIHdoaWNoIHdyYXBzIHRoZSBSRUFMIGVycm9yIChBc3N1bWVSb2xlIGZhaWxlZCkuIFdlJ3JlIGdvaW5nIHRvIHJlcGxhY2UgdGhlIGVycm9yXG4gICAgLy8gbWVzc2FnZSB3aXRoIG9uZSB0aGF0J3MgbW9yZSBsaWtlbHkgdG8gaGVscCB1c2VycywgYW5kIHRlbGwgdGhlbSB0aGUgbW9zdCBwcm9iYWJsZVxuICAgIC8vIGZpeCAoYm9vdHN0cmFwcGluZykuIFRoZSB1bmRlcmx5aW5nIHNlcnZpY2UgY2FsbCBmYWlsdXJlIHdpbGwgYmUgYXBwZW5kZWQgYmVsb3cuXG4gICAgaWYgKGUubWVzc2FnZSA9PT0gJ0NvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMnKSB7XG4gICAgICBlLm1lc3NhZ2UgPSBbXG4gICAgICAgICdDb3VsZCBub3QgYXNzdW1lIHJvbGUgaW4gdGFyZ2V0IGFjY291bnQnLFxuICAgICAgICAuLi50aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb25cbiAgICAgICAgICA/IFtgdXNpbmcgJHt0aGlzLnNka09wdGlvbnMuYXNzdW1lUm9sZUNyZWRlbnRpYWxzU291cmNlRGVzY3JpcHRpb259YF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgICAnKGRpZCB5b3UgYm9vdHN0cmFwIHRoZSBlbnZpcm9ubWVudCB3aXRoIHRoZSByaWdodCBcXCctLXRydXN0XFwncz8pJyxcbiAgICAgIF0uam9pbignICcpO1xuICAgIH1cblxuICAgIC8vIFJlcGxhY2UgdGhlIG1lc3NhZ2Ugb24gdGhpcyBlcnJvciB3aXRoIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgaW5uZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgLy8gTXVzdCBtb3JlIGNsZWFyIHdoYXQncyBnb2luZyBvbiB0aGF0IHdheS5cbiAgICBlLm1lc3NhZ2UgPSBhbGxDaGFpbmVkRXhjZXB0aW9uTWVzc2FnZXMoZSk7XG4gICAgcmV0dXJuIGU7XG4gIH1cbn1cblxuY29uc3QgQ1VSUkVOVF9BQ0NPVU5UX0tFWSA9IFN5bWJvbCgnY3VycmVudF9hY2NvdW50X2tleScpO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHg6IGFueSk6IHggaXMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuICByZXR1cm4geCAmJiB7fS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgY29uY2F0ZW5hdGVkIG1lc3NhZ2Ugb2YgYWxsIGV4Y2VwdGlvbnMgaW4gdGhlIEFXUyBleGNlcHRpb24gY2hhaW5cbiAqL1xuZnVuY3Rpb24gYWxsQ2hhaW5lZEV4Y2VwdGlvbk1lc3NhZ2VzKGU6IEVycm9yIHwgdW5kZWZpbmVkKSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHdoaWxlIChlKSB7XG4gICAgcmV0LnB1c2goZS5tZXNzYWdlKTtcbiAgICBlID0gKGUgYXMgYW55KS5vcmlnaW5hbEVycm9yO1xuICB9XG4gIHJldHVybiByZXQuam9pbignOiAnKTtcbn1cbiJdfQ==
|
|
@@ -6,6 +6,7 @@ const path = require("path");
|
|
|
6
6
|
const cxschema = require("@aws-cdk/cloud-assembly-schema");
|
|
7
7
|
const cxapi = require("@aws-cdk/cx-api");
|
|
8
8
|
const fs = require("fs-extra");
|
|
9
|
+
const logging = require("../../logging");
|
|
9
10
|
const aws_auth_1 = require("../aws-auth");
|
|
10
11
|
const deploy_stack_1 = require("../deploy-stack");
|
|
11
12
|
const toolkit_info_1 = require("../toolkit-info");
|
|
@@ -35,7 +36,7 @@ class BootstrapStack {
|
|
|
35
36
|
static async lookup(sdkProvider, environment, toolkitStackName) {
|
|
36
37
|
toolkitStackName = toolkitStackName !== null && toolkitStackName !== void 0 ? toolkitStackName : toolkit_info_1.DEFAULT_TOOLKIT_STACK_NAME;
|
|
37
38
|
const resolvedEnvironment = await sdkProvider.resolveEnvironment(environment);
|
|
38
|
-
const sdk = await sdkProvider.forEnvironment(resolvedEnvironment, aws_auth_1.Mode.ForWriting);
|
|
39
|
+
const sdk = (await sdkProvider.forEnvironment(resolvedEnvironment, aws_auth_1.Mode.ForWriting)).sdk;
|
|
39
40
|
const currentToolkitInfo = await toolkit_info_1.ToolkitInfo.lookup(resolvedEnvironment, sdk, toolkitStackName);
|
|
40
41
|
return new BootstrapStack(sdkProvider, sdk, resolvedEnvironment, toolkitStackName, currentToolkitInfo);
|
|
41
42
|
}
|
|
@@ -55,7 +56,17 @@ class BootstrapStack {
|
|
|
55
56
|
var _a;
|
|
56
57
|
const newVersion = bootstrapVersionFromTemplate(template);
|
|
57
58
|
if (this.currentToolkitInfo.found && newVersion < this.currentToolkitInfo.version && !options.force) {
|
|
58
|
-
|
|
59
|
+
logging.warning(`Bootstrap stack already at version '${this.currentToolkitInfo.version}'. Not downgrading it to version '${newVersion}' (use --force if you intend to downgrade)`);
|
|
60
|
+
if (newVersion === 0) {
|
|
61
|
+
// A downgrade with 0 as target version means we probably have a new-style bootstrap in the account,
|
|
62
|
+
// and an old-style bootstrap as current target, which means the user probably forgot to put this flag in.
|
|
63
|
+
logging.warning('(Did you set the \'@aws-cdk/core:newStyleStackSynthesis\' feature flag in cdk.json?)');
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
noOp: true,
|
|
67
|
+
outputs: {},
|
|
68
|
+
stackArn: this.currentToolkitInfo.bootstrapStack.stackId,
|
|
69
|
+
};
|
|
59
70
|
}
|
|
60
71
|
const outdir = await fs.mkdtemp(path.join(os.tmpdir(), 'cdk-bootstrap'));
|
|
61
72
|
const builder = new cxapi.CloudAssemblyBuilder(outdir);
|
|
@@ -104,4 +115,4 @@ function bootstrapVersionFromTemplate(template) {
|
|
|
104
115
|
return 0;
|
|
105
116
|
}
|
|
106
117
|
exports.bootstrapVersionFromTemplate = bootstrapVersionFromTemplate;
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWJvb3RzdHJhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlcGxveS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQiwwQ0FBc0Q7QUFDdEQsa0RBQWlFO0FBQ2pFLGtEQUEwRTtBQUMxRSx1REFBc0g7QUFFdEg7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQWEsY0FBYztJQVl6QixZQUNtQixXQUF3QixFQUN4QixHQUFTLEVBQ1QsbUJBQXNDLEVBQ3RDLGdCQUF3QixFQUN4QixrQkFBK0I7UUFKL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBTTtRQUNULHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBbUI7UUFDdEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBYTtJQUNsRCxDQUFDO0lBakJNLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQXdCLEVBQUUsV0FBOEIsRUFBRSxnQkFBeUI7UUFDNUcsZ0JBQWdCLEdBQUcsZ0JBQWdCLGFBQWhCLGdCQUFnQixjQUFoQixnQkFBZ0IsR0FBSSx5Q0FBMEIsQ0FBQztRQUVsRSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sR0FBRyxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxlQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbkYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLDBCQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhHLE9BQU8sSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFF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QUFJO1lBQzNCLHdFQUF3RTtZQUN4RSxXQUFXLEVBQUUsMEJBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2hFLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTdFRCx3Q0E2RUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FBQyxRQUFhOztJQUN4RCxNQUFNLGNBQWMsR0FBRztvQkFDckIsUUFBUSxDQUFDLE9BQU8sMENBQUcsMENBQXdCLDJDQUFHLEtBQUs7MEJBQ25ELFFBQVEsQ0FBQyxTQUFTLDBDQUFHLDRDQUEwQiwyQ0FBRyxVQUFVLDBDQUFFLEtBQUs7S0FDcEUsQ0FBQztJQUVGLEtBQUssTUFBTSxFQUFFLElBQUksY0FBYyxFQUFFO1FBQy9CLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7U0FBRTtRQUMxQyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDdEQsT0FBTyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3pCO0tBQ0Y7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFiRCxvRUFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IE1vZGUsIFNka1Byb3ZpZGVyLCBJU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgZGVwbG95U3RhY2ssIERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FLCBUb29sa2l0SW5mbyB9IGZyb20gJy4uL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQgeyBCT09UU1RSQVBfVkVSU0lPTl9PVVRQVVQsIEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucywgQk9PVFNUUkFQX1ZFUlNJT05fUkVTT1VSQ0UgfSBmcm9tICcuL2Jvb3RzdHJhcC1wcm9wcyc7XG5cbi8qKlxuICogQSBjbGFzcyB0byBob2xkIHN0YXRlIGFyb3VuZCBzdGFjayBib290c3RyYXBwaW5nXG4gKlxuICogVGhpcyBjbGFzcyBleGlzdHMgc28gd2UgY2FuIGJyZWFrIGJvb3RzdHJhcHBpbmcgaW50byAyIHBoYXNlczpcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3VycmVudCA9IEJvb3RzdHJhcFN0YWNrLmxvb2t1cCguLi4pO1xuICogLy8gLi4uXG4gKiBjdXJyZW50LnVwZGF0ZShuZXdUZW1wbGF0ZSwgLi4uKTtcbiAqIGBgYFxuICpcbiAqIEFuZCBkbyBzb21ldGhpbmcgaW4gYmV0d2VlbiB0aGUgdHdvIHBoYXNlcyAoc3VjaCBhcyBsb29rIGF0IHRoZVxuICogY3VycmVudCBib290c3RyYXAgc3RhY2sgYW5kIGRvaW5nIHNvbWV0aGluZyBpbnRlbGxpZ2VudCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBCb290c3RyYXBTdGFjayB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbG9va3VwKHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlciwgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LCB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nKSB7XG4gICAgdG9vbGtpdFN0YWNrTmFtZSA9IHRvb2xraXRTdGFja05hbWUgPz8gREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUU7XG5cbiAgICBjb25zdCByZXNvbHZlZEVudmlyb25tZW50ID0gYXdhaXQgc2RrUHJvdmlkZXIucmVzb2x2ZUVudmlyb25tZW50KGVudmlyb25tZW50KTtcbiAgICBjb25zdCBzZGsgPSBhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChyZXNvbHZlZEVudmlyb25tZW50LCBNb2RlLkZvcldyaXRpbmcpO1xuXG4gICAgY29uc3QgY3VycmVudFRvb2xraXRJbmZvID0gYXdhaXQgVG9vbGtpdEluZm8ubG9va3VwKHJlc29sdmVkRW52aXJvbm1lbnQsIHNkaywgdG9vbGtpdFN0YWNrTmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEJvb3RzdHJhcFN0YWNrKHNka1Byb3ZpZGVyLCBzZGssIHJlc29sdmVkRW52aXJvbm1lbnQsIHRvb2xraXRTdGFja05hbWUsIGN1cnJlbnRUb29sa2l0SW5mbyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZGs6IElTREssXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZEVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xraXRTdGFja05hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRUb29sa2l0SW5mbzogVG9vbGtpdEluZm8pIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgPyB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5ib290c3RyYXBTdGFjay5wYXJhbWV0ZXJzIDoge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgPyB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5ib290c3RyYXBTdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGFydGl0aW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnNkay5jdXJyZW50QWNjb3VudCgpKS5wYXJ0aXRpb247XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgYWN0dWFsIGRlcGxveW1lbnQgb2YgYSBib290c3RyYXAgc3RhY2ssIGdpdmVuIGEgdGVtcGxhdGUgYW5kIHNvbWUgcGFyYW1ldGVyc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZShcbiAgICB0ZW1wbGF0ZTogYW55LFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgb3B0aW9uczogT21pdDxCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMsICdwYXJhbWV0ZXJzJz4sXG4gICk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcblxuICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBib290c3RyYXBWZXJzaW9uRnJvbVRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICBpZiAodGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgJiYgbmV3VmVyc2lvbiA8IHRoaXMuY3VycmVudFRvb2xraXRJbmZvLnZlcnNpb24gJiYgIW9wdGlvbnMuZm9yY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGRvd25ncmFkaW5nIGV4aXN0aW5nIGJvb3RzdHJhcCBzdGFjayBmcm9tIHZlcnNpb24gJyR7dGhpcy5jdXJyZW50VG9vbGtpdEluZm8udmVyc2lvbn0nIHRvIHZlcnNpb24gJyR7bmV3VmVyc2lvbn0nLiBVc2UgLS1mb3JjZSB0byBmb3JjZSBvciBzZXQgdGhlICdAYXdzLWNkay9jb3JlOm5ld1N0eWxlU3RhY2tTeW50aGVzaXMnIGZlYXR1cmUgZmxhZyBpbiBjZGsuanNvbiB0byB1c2UgdGhlIGxhdGVzdCBib290c3RyYXAgdmVyc2lvbi5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRkaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2Nkay1ib290c3RyYXAnKSk7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBjeGFwaS5DbG91ZEFzc2VtYmx5QnVpbGRlcihvdXRkaXIpO1xuICAgIGNvbnN0IHRlbXBsYXRlRmlsZSA9IGAke3RoaXMudG9vbGtpdFN0YWNrTmFtZX0udGVtcGxhdGUuanNvbmA7XG4gICAgYXdhaXQgZnMud3JpdGVKc29uKHBhdGguam9pbihidWlsZGVyLm91dGRpciwgdGVtcGxhdGVGaWxlKSwgdGVtcGxhdGUsIHsgc3BhY2VzOiAyIH0pO1xuXG4gICAgYnVpbGRlci5hZGRBcnRpZmFjdCh0aGlzLnRvb2xraXRTdGFja05hbWUsIHtcbiAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0VHlwZS5BV1NfQ0xPVURGT1JNQVRJT05fU1RBQ0ssXG4gICAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnRVdGlscy5mb3JtYXQodGhpcy5yZXNvbHZlZEVudmlyb25tZW50LmFjY291bnQsIHRoaXMucmVzb2x2ZWRFbnZpcm9ubWVudC5yZWdpb24pLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB0ZW1wbGF0ZUZpbGUsXG4gICAgICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbjogb3B0aW9ucy50ZXJtaW5hdGlvblByb3RlY3Rpb24gPz8gZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXNzZW1ibHkgPSBidWlsZGVyLmJ1aWxkQXNzZW1ibHkoKTtcblxuICAgIHJldHVybiBkZXBsb3lTdGFjayh7XG4gICAgICBzdGFjazogYXNzZW1ibHkuZ2V0U3RhY2tCeU5hbWUodGhpcy50b29sa2l0U3RhY2tOYW1lKSxcbiAgICAgIHJlc29sdmVkRW52aXJvbm1lbnQ6IHRoaXMucmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICAgIHNkazogdGhpcy5zZGssXG4gICAgICBzZGtQcm92aWRlcjogdGhpcy5zZGtQcm92aWRlcixcbiAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlLFxuICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgdGFnczogb3B0aW9ucy50YWdzLFxuICAgICAgZXhlY3V0ZTogb3B0aW9ucy5leGVjdXRlLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogdHJ1ZSxcbiAgICAgIC8vIE9idmlvdXNseSB3ZSBjYW4ndCBuZWVkIGEgYm9vdHN0cmFwIHN0YWNrIHRvIGRlcGxveSBhIGJvb3RzdHJhcCBzdGFja1xuICAgICAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvLmJvb3RzdHJhcGxlc3NEZXBsb3ltZW50c09ubHkodGhpcy5zZGspLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXBWZXJzaW9uRnJvbVRlbXBsYXRlKHRlbXBsYXRlOiBhbnkpOiBudW1iZXIge1xuICBjb25zdCB2ZXJzaW9uU291cmNlcyA9IFtcbiAgICB0ZW1wbGF0ZS5PdXRwdXRzPy5bQk9PVFNUUkFQX1ZFUlNJT05fT1VUUFVUXT8uVmFsdWUsXG4gICAgdGVtcGxhdGUuUmVzb3VyY2VzPy5bQk9PVFNUUkFQX1ZFUlNJT05fUkVTT1VSQ0VdPy5Qcm9wZXJ0aWVzPy5WYWx1ZSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IHZzIG9mIHZlcnNpb25Tb3VyY2VzKSB7XG4gICAgaWYgKHR5cGVvZiB2cyA9PT0gJ251bWJlcicpIHsgcmV0dXJuIHZzOyB9XG4gICAgaWYgKHR5cGVvZiB2cyA9PT0gJ3N0cmluZycgJiYgIWlzTmFOKHBhcnNlSW50KHZzLCAxMCkpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodnMsIDEwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG4iXX0=
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWJvb3RzdHJhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlcGxveS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsMENBQXNEO0FBQ3RELGtEQUFpRTtBQUNqRSxrREFBMEU7QUFDMUUsdURBQXNIO0FBRXRIOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLGNBQWM7SUFZekIsWUFDbUIsV0FBd0IsRUFDeEIsR0FBUyxFQUNULG1CQUFzQyxFQUN0QyxnQkFBd0IsRUFDeEIsa0JBQStCO1FBSi9CLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQU07UUFDVCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW1CO1FBQ3RDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUN4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWE7SUFDbEQsQ0FBQztJQWpCTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUF3QixFQUFFLFdBQThCLEVBQUUsZ0JBQXlCO1FBQzVHLGdCQUFnQixHQUFHLGdCQUFnQixhQUFoQixnQkFBZ0IsY0FBaEIsZ0JBQWdCLEdBQUkseUNBQTBCLENBQUM7UUFFbEUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxlQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFFekYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLDBCQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FB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Z0IsQ0FBQztZQUNyRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQzdDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsVUFBVTtZQUNWLHFCQUFxQixFQUFFLElBQUk7WUFDM0Isd0VBQXdFO1lBQ3hFLFdBQVcsRUFBRSwwQkFBVyxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDaEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBeEZELHdDQXdGQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLFFBQWE7O0lBQ3hELE1BQU0sY0FBYyxHQUFHO29CQUNyQixRQUFRLENBQUMsT0FBTywwQ0FBRywwQ0FBd0IsMkNBQUcsS0FBSzswQkFDbkQsUUFBUSxDQUFDLFNBQVMsMENBQUcsNENBQTBCLDJDQUFHLFVBQVUsMENBQUUsS0FBSztLQUNwRSxDQUFDO0lBRUYsS0FBSyxNQUFNLEVBQUUsSUFBSSxjQUFjLEVBQUU7UUFDL0IsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztTQUFFO1FBQzFDLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUN0RCxPQUFPLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDekI7S0FDRjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQWJELG9FQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7IE1vZGUsIFNka1Byb3ZpZGVyLCBJU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgZGVwbG95U3RhY2ssIERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IERFRkFVTFRfVE9PTEtJVF9TVEFDS19OQU1FLCBUb29sa2l0SW5mbyB9IGZyb20gJy4uL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQgeyBCT09UU1RSQVBfVkVSU0lPTl9PVVRQVVQsIEJvb3RzdHJhcEVudmlyb25tZW50T3B0aW9ucywgQk9PVFNUUkFQX1ZFUlNJT05fUkVTT1VSQ0UgfSBmcm9tICcuL2Jvb3RzdHJhcC1wcm9wcyc7XG5cbi8qKlxuICogQSBjbGFzcyB0byBob2xkIHN0YXRlIGFyb3VuZCBzdGFjayBib290c3RyYXBwaW5nXG4gKlxuICogVGhpcyBjbGFzcyBleGlzdHMgc28gd2UgY2FuIGJyZWFrIGJvb3RzdHJhcHBpbmcgaW50byAyIHBoYXNlczpcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3VycmVudCA9IEJvb3RzdHJhcFN0YWNrLmxvb2t1cCguLi4pO1xuICogLy8gLi4uXG4gKiBjdXJyZW50LnVwZGF0ZShuZXdUZW1wbGF0ZSwgLi4uKTtcbiAqIGBgYFxuICpcbiAqIEFuZCBkbyBzb21ldGhpbmcgaW4gYmV0d2VlbiB0aGUgdHdvIHBoYXNlcyAoc3VjaCBhcyBsb29rIGF0IHRoZVxuICogY3VycmVudCBib290c3RyYXAgc3RhY2sgYW5kIGRvaW5nIHNvbWV0aGluZyBpbnRlbGxpZ2VudCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBCb290c3RyYXBTdGFjayB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbG9va3VwKHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlciwgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LCB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nKSB7XG4gICAgdG9vbGtpdFN0YWNrTmFtZSA9IHRvb2xraXRTdGFja05hbWUgPz8gREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUU7XG5cbiAgICBjb25zdCByZXNvbHZlZEVudmlyb25tZW50ID0gYXdhaXQgc2RrUHJvdmlkZXIucmVzb2x2ZUVudmlyb25tZW50KGVudmlyb25tZW50KTtcbiAgICBjb25zdCBzZGsgPSAoYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQocmVzb2x2ZWRFbnZpcm9ubWVudCwgTW9kZS5Gb3JXcml0aW5nKSkuc2RrO1xuXG4gICAgY29uc3QgY3VycmVudFRvb2xraXRJbmZvID0gYXdhaXQgVG9vbGtpdEluZm8ubG9va3VwKHJlc29sdmVkRW52aXJvbm1lbnQsIHNkaywgdG9vbGtpdFN0YWNrTmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEJvb3RzdHJhcFN0YWNrKHNka1Byb3ZpZGVyLCBzZGssIHJlc29sdmVkRW52aXJvbm1lbnQsIHRvb2xraXRTdGFja05hbWUsIGN1cnJlbnRUb29sa2l0SW5mbyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZGs6IElTREssXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZEVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xraXRTdGFja05hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRUb29sa2l0SW5mbzogVG9vbGtpdEluZm8pIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgPyB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5ib290c3RyYXBTdGFjay5wYXJhbWV0ZXJzIDoge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRlcm1pbmF0aW9uUHJvdGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgPyB0aGlzLmN1cnJlbnRUb29sa2l0SW5mby5ib290c3RyYXBTdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGFydGl0aW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnNkay5jdXJyZW50QWNjb3VudCgpKS5wYXJ0aXRpb247XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgYWN0dWFsIGRlcGxveW1lbnQgb2YgYSBib290c3RyYXAgc3RhY2ssIGdpdmVuIGEgdGVtcGxhdGUgYW5kIHNvbWUgcGFyYW1ldGVyc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZShcbiAgICB0ZW1wbGF0ZTogYW55LFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gICAgb3B0aW9uczogT21pdDxCb290c3RyYXBFbnZpcm9ubWVudE9wdGlvbnMsICdwYXJhbWV0ZXJzJz4sXG4gICk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcblxuICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBib290c3RyYXBWZXJzaW9uRnJvbVRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICBpZiAodGhpcy5jdXJyZW50VG9vbGtpdEluZm8uZm91bmQgJiYgbmV3VmVyc2lvbiA8IHRoaXMuY3VycmVudFRvb2xraXRJbmZvLnZlcnNpb24gJiYgIW9wdGlvbnMuZm9yY2UpIHtcbiAgICAgIGxvZ2dpbmcud2FybmluZyhgQm9vdHN0cmFwIHN0YWNrIGFscmVhZHkgYXQgdmVyc2lvbiAnJHt0aGlzLmN1cnJlbnRUb29sa2l0SW5mby52ZXJzaW9ufScuIE5vdCBkb3duZ3JhZGluZyBpdCB0byB2ZXJzaW9uICcke25ld1ZlcnNpb259JyAodXNlIC0tZm9yY2UgaWYgeW91IGludGVuZCB0byBkb3duZ3JhZGUpYCk7XG4gICAgICBpZiAobmV3VmVyc2lvbiA9PT0gMCkge1xuICAgICAgICAvLyBBIGRvd25ncmFkZSB3aXRoIDAgYXMgdGFyZ2V0IHZlcnNpb24gbWVhbnMgd2UgcHJvYmFibHkgaGF2ZSBhIG5ldy1zdHlsZSBib290c3RyYXAgaW4gdGhlIGFjY291bnQsXG4gICAgICAgIC8vIGFuZCBhbiBvbGQtc3R5bGUgYm9vdHN0cmFwIGFzIGN1cnJlbnQgdGFyZ2V0LCB3aGljaCBtZWFucyB0aGUgdXNlciBwcm9iYWJseSBmb3Jnb3QgdG8gcHV0IHRoaXMgZmxhZyBpbi5cbiAgICAgICAgbG9nZ2luZy53YXJuaW5nKCcoRGlkIHlvdSBzZXQgdGhlIFxcJ0Bhd3MtY2RrL2NvcmU6bmV3U3R5bGVTdGFja1N5bnRoZXNpc1xcJyBmZWF0dXJlIGZsYWcgaW4gY2RrLmpzb24/KScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBub09wOiB0cnVlLFxuICAgICAgICBvdXRwdXRzOiB7fSxcbiAgICAgICAgc3RhY2tBcm46IHRoaXMuY3VycmVudFRvb2xraXRJbmZvLmJvb3RzdHJhcFN0YWNrLnN0YWNrSWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG91dGRpciA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrLWJvb3RzdHJhcCcpKTtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IGN4YXBpLkNsb3VkQXNzZW1ibHlCdWlsZGVyKG91dGRpcik7XG4gICAgY29uc3QgdGVtcGxhdGVGaWxlID0gYCR7dGhpcy50b29sa2l0U3RhY2tOYW1lfS50ZW1wbGF0ZS5qc29uYDtcbiAgICBhd2FpdCBmcy53cml0ZUpzb24ocGF0aC5qb2luKGJ1aWxkZXIub3V0ZGlyLCB0ZW1wbGF0ZUZpbGUpLCB0ZW1wbGF0ZSwgeyBzcGFjZXM6IDIgfSk7XG5cbiAgICBidWlsZGVyLmFkZEFydGlmYWN0KHRoaXMudG9vbGtpdFN0YWNrTmFtZSwge1xuICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RUeXBlLkFXU19DTE9VREZPUk1BVElPTl9TVEFDSyxcbiAgICAgIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudFV0aWxzLmZvcm1hdCh0aGlzLnJlc29sdmVkRW52aXJvbm1lbnQuYWNjb3VudCwgdGhpcy5yZXNvbHZlZEVudmlyb25tZW50LnJlZ2lvbiksXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHRlbXBsYXRlRmlsZSxcbiAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBvcHRpb25zLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiA/PyBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBhc3NlbWJseSA9IGJ1aWxkZXIuYnVpbGRBc3NlbWJseSgpO1xuXG4gICAgcmV0dXJuIGRlcGxveVN0YWNrKHtcbiAgICAgIHN0YWNrOiBhc3NlbWJseS5nZXRTdGFja0J5TmFtZSh0aGlzLnRvb2xraXRTdGFja05hbWUpLFxuICAgICAgcmVzb2x2ZWRFbnZpcm9ubWVudDogdGhpcy5yZXNvbHZlZEVudmlyb25tZW50LFxuICAgICAgc2RrOiB0aGlzLnNkayxcbiAgICAgIHNka1Byb3ZpZGVyOiB0aGlzLnNka1Byb3ZpZGVyLFxuICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2UsXG4gICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICB0YWdzOiBvcHRpb25zLnRhZ3MsXG4gICAgICBleGVjdXRlOiBvcHRpb25zLmV4ZWN1dGUsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgdXNlUHJldmlvdXNQYXJhbWV0ZXJzOiB0cnVlLFxuICAgICAgLy8gT2J2aW91c2x5IHdlIGNhbid0IG5lZWQgYSBib290c3RyYXAgc3RhY2sgdG8gZGVwbG95IGEgYm9vdHN0cmFwIHN0YWNrXG4gICAgICB0b29sa2l0SW5mbzogVG9vbGtpdEluZm8uYm9vdHN0cmFwbGVzc0RlcGxveW1lbnRzT25seSh0aGlzLnNkayksXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcFZlcnNpb25Gcm9tVGVtcGxhdGUodGVtcGxhdGU6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IHZlcnNpb25Tb3VyY2VzID0gW1xuICAgIHRlbXBsYXRlLk91dHB1dHM/LltCT09UU1RSQVBfVkVSU0lPTl9PVVRQVVRdPy5WYWx1ZSxcbiAgICB0ZW1wbGF0ZS5SZXNvdXJjZXM/LltCT09UU1RSQVBfVkVSU0lPTl9SRVNPVVJDRV0/LlByb3BlcnRpZXM/LlZhbHVlLFxuICBdO1xuXG4gIGZvciAoY29uc3QgdnMgb2YgdmVyc2lvblNvdXJjZXMpIHtcbiAgICBpZiAodHlwZW9mIHZzID09PSAnbnVtYmVyJykgeyByZXR1cm4gdnM7IH1cbiAgICBpZiAodHlwZW9mIHZzID09PSAnc3RyaW5nJyAmJiAhaXNOYU4ocGFyc2VJbnQodnMsIDEwKSkpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2cywgMTApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as cxapi from '@aws-cdk/cx-api';
|
|
2
2
|
import { Tag } from '../cdk-toolkit';
|
|
3
|
-
import { SdkProvider } from './aws-auth';
|
|
3
|
+
import { SdkProvider, ISDK } from './aws-auth';
|
|
4
4
|
import { DeployStackResult } from './deploy-stack';
|
|
5
5
|
import { Template } from './util/cloudformation';
|
|
6
6
|
import { StackActivityProgress } from './util/cloudformation/stack-activity-monitor';
|
|
@@ -8,6 +8,47 @@ import { StackActivityProgress } from './util/cloudformation/stack-activity-moni
|
|
|
8
8
|
* Replace the {ACCOUNT} and {REGION} placeholders in all strings found in a complex object.
|
|
9
9
|
*/
|
|
10
10
|
export declare function replaceEnvPlaceholders<A extends {}>(object: A, env: cxapi.Environment, sdkProvider: SdkProvider): Promise<A>;
|
|
11
|
+
/**
|
|
12
|
+
* SDK obtained by assuming the lookup role
|
|
13
|
+
* for a given environment
|
|
14
|
+
*/
|
|
15
|
+
export interface PreparedSdkWithLookupRoleForEnvironment {
|
|
16
|
+
/**
|
|
17
|
+
* The SDK for the given environment
|
|
18
|
+
*/
|
|
19
|
+
readonly sdk: ISDK;
|
|
20
|
+
/**
|
|
21
|
+
* The resolved environment for the stack
|
|
22
|
+
* (no more 'unknown-account/unknown-region')
|
|
23
|
+
*/
|
|
24
|
+
readonly resolvedEnvironment: cxapi.Environment;
|
|
25
|
+
/**
|
|
26
|
+
* Whether or not the assume role was successful.
|
|
27
|
+
* If the assume role was not successful (false)
|
|
28
|
+
* then that means that the 'sdk' returned contains
|
|
29
|
+
* the default credentials (not the assume role credentials)
|
|
30
|
+
*/
|
|
31
|
+
readonly didAssumeRole: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Try to use the bootstrap lookupRole. There are two scenarios that are handled here
|
|
35
|
+
* 1. The lookup role may not exist (it was added in bootstrap stack version 7)
|
|
36
|
+
* 2. The lookup role may not have the correct permissions (ReadOnlyAccess was added in
|
|
37
|
+
* bootstrap stack version 8)
|
|
38
|
+
*
|
|
39
|
+
* In the case of 1 (lookup role doesn't exist) `forEnvironment` will either:
|
|
40
|
+
* 1. Return the default credentials if the default credentials are for the stack account
|
|
41
|
+
* 2. Throw an error if the default credentials are not for the stack account.
|
|
42
|
+
*
|
|
43
|
+
* If we successfully assume the lookup role we then proceed to 2 and check whether the bootstrap
|
|
44
|
+
* stack version is valid. If it is not we throw an error which should be handled in the calling
|
|
45
|
+
* function (and fallback to use a different role, etc)
|
|
46
|
+
*
|
|
47
|
+
* If we do not successfully assume the lookup role, but do get back the default credentials
|
|
48
|
+
* then return those and note that we are returning the default credentials. The calling
|
|
49
|
+
* function can then decide to use them or fallback to another role.
|
|
50
|
+
*/
|
|
51
|
+
export declare function prepareSdkWithLookupRoleFor(sdkProvider: SdkProvider, stack: cxapi.CloudFormationStackArtifact): Promise<PreparedSdkWithLookupRoleForEnvironment>;
|
|
11
52
|
export interface DeployStackOptions {
|
|
12
53
|
/**
|
|
13
54
|
* Stack to deploy
|
|
@@ -125,6 +166,27 @@ export interface StackExistsOptions {
|
|
|
125
166
|
export interface ProvisionerProps {
|
|
126
167
|
sdkProvider: SdkProvider;
|
|
127
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* SDK obtained by assuming the deploy role
|
|
171
|
+
* for a given environment
|
|
172
|
+
*/
|
|
173
|
+
export interface PreparedSdkForEnvironment {
|
|
174
|
+
/**
|
|
175
|
+
* The SDK for the given environment
|
|
176
|
+
*/
|
|
177
|
+
readonly stackSdk: ISDK;
|
|
178
|
+
/**
|
|
179
|
+
* The resolved environment for the stack
|
|
180
|
+
* (no more 'unknown-account/unknown-region')
|
|
181
|
+
*/
|
|
182
|
+
readonly resolvedEnvironment: cxapi.Environment;
|
|
183
|
+
/**
|
|
184
|
+
* The Execution Role that should be passed to CloudFormation.
|
|
185
|
+
*
|
|
186
|
+
* @default - no execution role is used
|
|
187
|
+
*/
|
|
188
|
+
readonly cloudFormationRoleArn?: string;
|
|
189
|
+
}
|
|
128
190
|
/**
|
|
129
191
|
* Helper class for CloudFormation deployments
|
|
130
192
|
*
|