@rio-cloud/cdk-v2-constructs 8.8.1-alpha.9 → 8.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -20,7 +20,7 @@
20
20
  "@datadog/datadog-api-client": "^1.29.0",
21
21
  "@smithy/util-retry": "^3.0.8",
22
22
  "@types/aws-lambda": "^8.10.145",
23
- "js-yaml": "~5.2.3",
23
+ "js-yaml": "~5.4.2",
24
24
  "zod": "^4.0.0"
25
25
  },
26
26
  "dependencies": {
@@ -16272,7 +16272,10 @@
16272
16272
  {
16273
16273
  "abstract": true,
16274
16274
  "docs": {
16275
- "remarks": "Defaults to `false`:\n- build and test of the artifact via command \"./gradlew clean build\"\n- license-check and upload of license-check-file via command \"./gradlew checkLicenses\"\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer\n- build the container image via command \"./gradlew jibBuildTar\"",
16275
+ "custom": {
16276
+ "rio-cloud": "/rio-license-checker.\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer\n- build the container image via command \"./gradlew jibBuildTar\""
16277
+ },
16278
+ "remarks": "Defaults to `false`:\n- build and test of the artifact via command \"./gradlew clean build\"\n- license-check and upload of license-check-file using",
16276
16279
  "stability": "stable",
16277
16280
  "summary": "Run a standard gradle build in the repository root."
16278
16281
  },
@@ -16784,7 +16787,10 @@
16784
16787
  "members": [
16785
16788
  {
16786
16789
  "docs": {
16787
- "remarks": "Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and\nbranch pipeline and includes the following steps\n- build and test of the artifact via command \"./gradlew clean build\".\n<p> This gradle command must be provided by the gradle project.\n- license-check and upload of license-check-file via command \"./gradlew checkLicenses\".\n<p> This gradle command must be provided by the gradle project.\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.\n- build the container image via command \"./gradlew jibBuildTar\".\n<p> This gradle command must be provided by the gradle project.",
16790
+ "custom": {
16791
+ "rio-cloud": "/rio-license-checker.\n<p> This gradle command must be provided by the gradle project.\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.\n- build the container image via command \"./gradlew jibBuildTar\".\n<p> This gradle command must be provided by the gradle project."
16792
+ },
16793
+ "remarks": "Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and\nbranch pipeline and includes the following steps\n- build and test of the artifact via command \"./gradlew clean build\".\n<p> This gradle command must be provided by the gradle project.\n- license-check and upload of license-check-file using",
16788
16794
  "stability": "stable",
16789
16795
  "summary": "Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka."
16790
16796
  },
@@ -16792,7 +16798,10 @@
16792
16798
  },
16793
16799
  {
16794
16800
  "docs": {
16795
- "remarks": "Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and\nbranch pipeline and includes the following steps\n- build and test of the artifact via command \"./gradlew clean build\".\n<p> This gradle command must be provided by the gradle project.\n- license-check and upload of license-check-file via command \"./gradlew checkLicenses\".\n<p> This gradle command must be provided by the gradle project.\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.\n- request a certificate to authenticate against Kafka via mutual TLS\n- build the container image via command \"./gradlew jibBuildTar\".\n<p> This gradle command must be provided by the gradle project.",
16801
+ "custom": {
16802
+ "rio-cloud": "/rio-license-checker.\n<p> This gradle command must be provided by the gradle project.\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.\n- request a certificate to authenticate against Kafka via mutual TLS\n- build the container image via command \"./gradlew jibBuildTar\".\n<p> This gradle command must be provided by the gradle project."
16803
+ },
16804
+ "remarks": "Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and\nbranch pipeline and includes the following steps\n- build and test of the artifact via command \"./gradlew clean build\".\n<p> This gradle command must be provided by the gradle project.\n- license-check and upload of license-check-file using",
16796
16805
  "stability": "stable",
16797
16806
  "summary": "Self-mutating codepipeline deploying the provided AppStack with additional steps needed to access Kafka."
16798
16807
  },
@@ -30092,5 +30101,5 @@
30092
30101
  }
30093
30102
  },
30094
30103
  "version": "0.0.0",
30095
- "fingerprint": "1XCesi84pY9c8aek8AC8ZwGvdbwgnvHV0LkGjOf5hVU="
30104
+ "fingerprint": "ZRE5ak/uOTcedtnuKwAtdldU//EvE/f6qhrY1d1+bXA="
30096
30105
  }
@@ -150,7 +150,7 @@ export interface PipelineFeatures {
150
150
  /**
151
151
  * Run a standard gradle build in the repository root. Defaults to `false`:
152
152
  * - build and test of the artifact via command "./gradlew clean build"
153
- * - license-check and upload of license-check-file via command "./gradlew checkLicenses"
153
+ * - license-check and upload of license-check-file using @rio-cloud/rio-license-checker.
154
154
  * - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer
155
155
  * - build the container image via command "./gradlew jibBuildTar"
156
156
  */
@@ -188,7 +188,7 @@ export declare enum PipelineType {
188
188
  * branch pipeline and includes the following steps
189
189
  * - build and test of the artifact via command "./gradlew clean build".
190
190
  * <p> This gradle command must be provided by the gradle project.
191
- * - license-check and upload of license-check-file via command "./gradlew checkLicenses".
191
+ * - license-check and upload of license-check-file using @rio-cloud/rio-license-checker.
192
192
  * <p> This gradle command must be provided by the gradle project.
193
193
  * - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
194
194
  * - build the container image via command "./gradlew jibBuildTar".
@@ -202,7 +202,7 @@ export declare enum PipelineType {
202
202
  * branch pipeline and includes the following steps
203
203
  * - build and test of the artifact via command "./gradlew clean build".
204
204
  * <p> This gradle command must be provided by the gradle project.
205
- * - license-check and upload of license-check-file via command "./gradlew checkLicenses".
205
+ * - license-check and upload of license-check-file using @rio-cloud/rio-license-checker.
206
206
  * <p> This gradle command must be provided by the gradle project.
207
207
  * - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
208
208
  * - request a certificate to authenticate against Kafka via mutual TLS
@@ -35,7 +35,7 @@ var PipelineType;
35
35
  * branch pipeline and includes the following steps
36
36
  * - build and test of the artifact via command "./gradlew clean build".
37
37
  * <p> This gradle command must be provided by the gradle project.
38
- * - license-check and upload of license-check-file via command "./gradlew checkLicenses".
38
+ * - license-check and upload of license-check-file using @rio-cloud/rio-license-checker.
39
39
  * <p> This gradle command must be provided by the gradle project.
40
40
  * - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
41
41
  * - build the container image via command "./gradlew jibBuildTar".
@@ -49,7 +49,7 @@ var PipelineType;
49
49
  * branch pipeline and includes the following steps
50
50
  * - build and test of the artifact via command "./gradlew clean build".
51
51
  * <p> This gradle command must be provided by the gradle project.
52
- * - license-check and upload of license-check-file via command "./gradlew checkLicenses".
52
+ * - license-check and upload of license-check-file using @rio-cloud/rio-license-checker.
53
53
  * <p> This gradle command must be provided by the gradle project.
54
54
  * - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
55
55
  * - request a certificate to authenticate against Kafka via mutual TLS
@@ -429,4 +429,4 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
429
429
  exports.PipelineStack = PipelineStack;
430
430
  _a = JSII_RTTI_SYMBOL_1;
431
431
  PipelineStack[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.PipelineStack", version: "0.0.0" };
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBbUY7QUFDbkYsNkRBQTRHO0FBQzVHLDZEQUE2RDtBQUM3RCw2RUFBNkU7QUFDN0UsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCxpREFBb0Q7QUFFcEQseUNBQXlDO0FBQ3pDLCtDQUFxRDtBQUNyRCwyQ0FBMkM7QUFFM0MsbURBQW1EO0FBQ25ELHFEQUEwRTtBQUUxRSx5QkFBeUI7QUFDekIsZ0NBQWdDO0FBQ2hDLDZCQUE2QjtBQUc3QixzQ0FBMkQ7QUFDM0Qsc0NBQXNDO0FBQ3RDLDBDQUFpRTtBQUNqRSwyREFBa0Q7QUFDbEQsbURBQXNEO0FBQ3RELDZDQUFpRjtBQUNqRix5REFBZ0g7QUFDaEgscUVBQTZFO0FBMkw3RSxJQUFZLFlBcUNYO0FBckNELFdBQVksWUFBWTtJQUN0Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxtREFBbUMsQ0FBQTtJQUNuQzs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsK0RBQStDLENBQUE7SUFDL0M7Ozs7O09BS0c7SUFDSCxtRUFBbUQsQ0FBQTtBQUNyRCxDQUFDLEVBckNXLFlBQVksNEJBQVosWUFBWSxRQXFDdkI7QUFpQkQsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFrQnRDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLCtCQUErQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxD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WUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixDQUFDLGdCQUFnQixDQUMvQix1QkFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUNuRyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEtBQUssQ0FDVCw4RUFBOEUsWUFBWSxDQUFDLEVBQUUsdUJBQXVCLENBQ3JILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLGFBQXNCO1FBQ2xELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyx5QkFBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQVcsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUFrQyxFQUFFLEdBQVcsRUFBRSxLQUFhO1FBQ3hGLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixrQkFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzs7QUEzZEgsc0NBNGRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIEZuLCBSZW1vdmFsUG9saWN5LCBTdGFjaywgU3RhY2tQcm9wcywgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEJ1aWxkRW52aXJvbm1lbnQsIEJ1aWxkU3BlYywgQ29tcHV0ZVR5cGUsIExpbnV4TGFtYmRhQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lX2FjdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElIb3N0ZWRab25lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEJ1Y2tldCwgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBJU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAsIENvZGVQaXBlbGluZVNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2cnO1xuaW1wb3J0IHsgSU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgeyBTb25hdHlwZU9zc0luZGV4Q3JlZGVudGlhbHMgfSBmcm9tICcuLi8uLi8uLi9pYW0nO1xuaW1wb3J0ICogYXMgcmlvIGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IENsYWlkb21ldGVyLCBDbGFpZG9tZXRlclByb2R1Y3QgfSBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gJy4vYXBwbGljYXRpb24tc3RhZ2UnO1xuaW1wb3J0IHsgUmlvQ29kZUJ1aWxkUHJvamVjdCB9IGZyb20gJy4vYnVpbGQtcHJvamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVNYWluQnVpbGRTcGVjLCBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjIH0gZnJvbSAnLi9idWlsZHNwZWNzJztcbmltcG9ydCB7IERhdGFEb2dQaXBlbGluZUVycm9yQWxlcnRGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzLCBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0IH0gZnJvbSAnLi9kYXRhZG9nLW1vbml0b3JzJztcbmltcG9ydCB7IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCB9IGZyb20gJy4vbW9uaXRvcmluZy1kZXBsb3ktc3RlcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTY2hlZHVsZXNQcm9wcyB7XG4gIHJlYWRvbmx5IG1haW5QaXBlbGluZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBpcGVsaW5lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBzdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhpcyBoYXMgdG8gYmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcmVwb3NpdG9yeSBhcyB0aGUgczMgdHJpZ2dlciBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJpdGJ1Y2tldC1pbnRlZ3JhdGlvbiB1c2VzIHRoaXMgYXMgYSBwcmVmaXhcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIFNFUlZJQ0VfTkFNRSBpbiB0aGUgQ29kZUJ1aWxkU3RlcFxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgaW4gdGhlIEFwcFN0YWNrUHJvcHMgaW4gdGhlIGFwcFN0YWNrRmFjdG9yeVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgYXMgc3RhY2tOYW1lIHByb3BlcnR5IGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnkuIEkuZS4gdGhlIHN0YWNrIGlzIG5hbWVkIGFmdGVyIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGhhbmRlZCBvdmVyIHRvIGFsbCBEYXRhZG9nIG1vbml0b3JzXG4gICAqIC0gUklPIGNvbnZlbnRpb24gaXMgdGhhdCB1cGxvYWRlZCBsaWNlbnNlLWNoZWNrLWZpbGVzIGFyZSBuYW1lZCBhZnRlciB0aGUgc2VydmljZSwgaS5lLiBzZXJ2aWNlTmFtZS50eHRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhcHBTdGFjayB0byBiZSBkZXBsb3llZC5cbiAgICpcbiAgICogVGhpcyBhY3RzIGFzIGEgd3JhcHBlciBmb3IgYWxsIHJlc291cmNlcyB5b3Ugd2FudCB0byBkZXBsb3kgdmlhIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFN0YWNrRmFjdG9yeTogSUFwcFN0YWNrRmFjdG9yeTtcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKlxuICAgKiBVc2UgdGhlIGZlYXR1cmVzIHRvIGNvbWJpbmUgZGlmZmVyZW50IG9waW5pb25hdGVkLCBSSU8tc3BlY2lmaWMgcGlwZWxpbmUgZmVhdHVyZXMgc3VjaCBhcyBhZGRpbmcgYSBicmFuY2ggcGlwZWxpbmUgb3Igc3VwcG9ydGluZyBLYWZrYS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzPzogUGlwZWxpbmVGZWF0dXJlcztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgZmVhdHVyZXNgIHByb3BlcnR5IGluc3RlYWQuIEZvciBub3csIHRoZSBwaXBlbGluZSB0eXBlcyBhcmUgbWFwcGVkIHRvIHRoZSBmZWF0dXJlcy5cbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVUeXBlPzogUGlwZWxpbmVUeXBlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGhvdyBvZnRlbiB0aGUgcGlwZWxpbmUgaXMgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkuIElzIGRlZmluZWQgdmlhIGEgY3JvbiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2V2ZW50cy9TY2hlZHVsZWRFdmVudHMuaHRtbFxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlczpcbiAgICogLSBtYWluIHBpcGVsaW5lOiBjcm9uKDAgOSA/ICogMiMxICopXG4gICAqIC0gdnVsbmVyYWJpbGl0eSBwaXBlbGluZTogY3JvbigwIDUgPyAqIE1PTi1GUkkgKilcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NoZWR1bGVzPzogUGlwZWxpbmVTY2hlZHVsZXNQcm9wcztcblxuICAvKipcbiAgICogUGF0aCB0byBzZWNyZXRzIGZpbGUgY29udGFpbmluZyBlbmNyeXB0ZWQgc2VjcmV0cy5cbiAgICpcbiAgICogVGhlIFJpb1NlY3JldHNEZXBsb3lTdGVwIGlzIGFkZGVkIHByaW9yIHRvIGRlcGxveW1lbnQgb2YgdGhlIEFwcFN0YWNrIGlmIGEgcGF0aCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogTm8gc2VjcmV0cyBhcmUgZGVwbG95ZWQgaWYgbm8gcGF0aCBpcyBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHNEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wcztcblxuICAvKipcbiAgICogQ29kZUJ1aWxkIG9wdGlvbnMgb3ZlcnJpZGluZyB0aGUgcmlvLXNwZWNpZmljIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUJ1aWxkT3B0aW9ucz86IENvZGVCdWlsZE9wdGlvbnM7XG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB0aGUgY2FwYWJpbGl0eSBtb25pdG9yaW5nIGRlcGxveSBzdGVwIGlzIGFkZGVkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcztcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgdGhlIGB2dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKiBJZiBgb3BzZ2VuaWVgIGlzIHNwZWNpZmllZCwgYW4gRXhjZXB0aW9uIGlzIHRocm93biwgYXMgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuXG4gICAqL1xuICByZWFkb25seSBkYXRhZG9nQWxlcnRUeXBlPzogRGF0YWRvZ0FsZXJ0VHlwZTtcbiAgLyoqXG4gICAqIE5vdGlmaWNhdGlvbiB0eXBlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSBtb25pdG9yLiBEZWZhdWx0cyB0byBzbGFjay5cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24/OiBJTm90aWZpY2F0aW9uO1xuICAvKipcbiAgICogQ29kZVBpcGVsaW5lIFBpcGVsaW5lVHlwZSAoVjEgb3IgVjIpLiBEZWZhdWx0cyB0byBWMS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVQaXBlbGluZVR5cGU/OiBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGludGVyZmFjZSB0byBjcmVhdGUgdGhlIEFwcFN0YWNrIHdpdGhpbiB0aGUgc3BlY2lmaWMgc2NvcGVcbiAqXG4gKiBTaW1wbHkgcGxhY2UgdGhlIEFwcFN0YWNrIGNyZWF0aW9uIGludG8gdGhlIGNyZWF0ZS1tZXRob2Q6XG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSBlLmcuIHdpdGhpbiBBcHBsaWNhdGlvblByb3BzIGFzIEpTT05PYmplY3Q6XG4gKiBcXHsgY3JlYXRlOiAoY29uc3RydWN0LCBwcm9wcykgPVxcPiBuZXcgU3RhY2soY29uc3RydWN0LCAnQXBwU3RhY2snLCBwcm9wcykgXFx9XG4gKlxuICogLy8gb3Igc2ltcGx5IGFzIGNsYXNzIGludGVyZmFjZSB3aXRoaW4geW91ciBzdGFjayBpbXBsZW1lbnRhdGlvbjpcbiAqIGNsYXNzIFBpcGVsaW5lU3RhZ2UgZXh0ZW5kcyBTdGFnZSBpbXBsZW1lbnRzIElBcHBTdGFja0ZhY3RvcnkgXFx7XG4gKiAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFnZVByb3BzKSBcXHtcbiAqICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAqICAgICAvLyB5b3VyIHN0YWdlIGRlZmluaXRpb25cbiAqICAgXFx9XG4gKlxuICogICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkIFxce1xuICogICAgIC8vIGFwcCBzdGFjayBpbml0aWF0aW9uIGdvZXMgaW4gaGVyZVxuICogICBcXH1cbiAqIFxcfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTdGFja0ZhY3Rvcnkge1xuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QsIGJlaW5nIGludm9rZWQgd2l0aCB0aGUgc3BlY2lmaWMgc2NvcGUgZHVyaW5nIHBpcGVsaW5lIGluc3RhbnRpYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHBhcmVudCBjb25zdHJ1Y3QgZm9yIHRoZSBhcHAgc3RhY2tcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIGFwcCBzdGFja3MgcHJvcGVydGllc1xuICAgKi9cbiAgY3JlYXRlKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBcHBTdGFja1Byb3BzKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RlZCBwcm9wZXJ0aWVzIGJlaW5nIGhhbmRlZCBvdmVyIHRvIFJpb1NlY3JldHNEZXBsb3lTdGVwLlxuICpcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMge1xuICByZWFkb25seSBzZWNyZXRzRmlsZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBNYXAgXFx7ZGlyZWN0b3J5OiBmaWxlbmFtZXNcXH0gY29udGFpbmluZyAgLmphciBvciAuemlwIGZpbGVzIGNyZWF0ZWQgaW4gbWFpbiBidWlsZCBzdGVwIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBtb25pdG9yaW5nLXRlc3RzdWl0ZS1ydW5uZXIgYnVja2V0LCBlLmcuXG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAnYXZhaWxhYmlsaXR5LW1vbml0b3JpbmcvYnVpbGQvbGlicyc6IFsnZm9vLWF2YWlsYWJpbGl0eS5qYXInXSxcbiAgICogICdwZXJmb3JtYW5jZS1tb25pdG9yaW5nL2J1aWxkL2xpYnMnOiBbJ2FwaS1jaGVjay56aXAnLCAnZm9vLXBlcmZvcm1hbmNlLmphciddLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZ0FydGlmYWN0czogeyBbZGlyZWN0b3J5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lRmVhdHVyZXMge1xuICAvKipcbiAgICogQ3JlYXRlIGEgYnJhbmNoIHBpcGVsaW5lIHVzZWQgYnkgcmVub3ZhdGUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaFBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUgdG8gc2NhbiBkZXBlbmRlbmNpZXMgZm9yIHZ1bG5lcmFiaWxpdGllcy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBhIHN0YW5kYXJkIGdyYWRsZSBidWlsZCBpbiB0aGUgcmVwb3NpdG9yeSByb290LiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjaGVja0xpY2Vuc2VzXCJcbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXJcbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCJcbiAgICovXG4gIHJlYWRvbmx5IGdyYWRsZUJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBhIHN0YW5kYXJkIG5wbSBidWlsZCBpbiB0aGUgcmVwb3NpdG9yeSByb290LiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiAtIHJ1biBsaW50ZXIgdmlhIGNvbW1hbmQgXCJucG0gcnVuIGxpbnRcIlxuICAgKiAtIHJ1biB0ZXN0cyB2aWEgY29tbWFuZCBcIm5wbSBydW4gdGVzdDpjaVwiXG4gICAqIC0gcnVuIGEgbGljZW5zZSBjaGVjayBieSBjYWxsaW5nIHRoZSBzY3JpcHQgXCJjaGVjay1vc3MtbGljZW5zZXMuc2hcIiAoZnJvbSB0aGUgUklPIGZyb250ZW5kIHRlbXBsYXRlKVxuICAgKiAtIGJ1aWxkIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIm5wbSBydW4gYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgbnBtQnVpbGQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQWRkIHJlcXVpcmVkIHN0ZXBzIGFuZCBwZXJtaXNzaW9ucyB0byBzdXBwb3J0IEthZmthLiBDdXJyZW50bHksIHRoaXMgcmVxdWlyZXMgYGdyYWRsZUJ1aWxkYCB0byBiZSBzZXQgdG8gYHRydWVgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkga2Fma2FJbnRlZ3JhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTMyBCdWNrZXQgdG8gZGVwbG95IGZyb250ZW5kIHRvLiBSZXF1aXJlcyBgbnBtQnVpbGRgIHRvIGJlIHNldCB0byBgdHJ1ZWAuIElmIHNldCwgdGhlIG91dHB1dCBvZiB0aGUgbnBtIGJ1aWxkIGlzIGRlcGxveWVkIHRvIHRoZSBwcm92aWRlZCBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBmcm9udGVuZEJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGNvbW1hbmRzIGZvciBtYWluIGFuZCBicmFuY2ggcGlwZWxpbmUuIFdpbGwgYmUgYWRkZWQgYWZ0ZXIgYWxsIGJ1aWxkICYgdGVzdCBjb21tYW5kcywgYmVmb3JlIHRoZSBpbmZyYXN0cnVjdHVyZSBidWlsZC4gRG9lcyBub3Qgd29yayB3aXRoIHBhcnRpYWxCdWlsZHNwZWMuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQnVpbGRDb21tYW5kcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogSWYgc2V0IHRvIGZhbHNlLCBubyBEYXRhZG9nIG1vbml0b3JzIGZvciBtYWluIGFuZCB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lcyB3aWxsIGJlIGNyZWF0ZWQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVQaXBlbGluZU1vbml0b3JzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gUGlwZWxpbmVUeXBlIHtcbiAgLyoqXG4gICAqIFNlbGYtbXV0YXRpbmcgY29kZXBpcGVsaW5lIGRlcGxveWluZyB0aGUgcHJvdmlkZWQgQXBwU3RhY2suIEJlIGF3YXJlOiBUaGUgcHJvdmlkZWQgc2VydmljZSB3b24ndCBoYXZlIGFjY2VzcyB0byBLYWZrYS5cbiAgICpcbiAgICogQ29tZXMgd2l0aCBhIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIGZvciBhIGdyYWRsZSBwcm9qZWN0LiBUaGlzIGJ1aWxkc3BlYy55YW1sIGlzIHVzZWQgZm9yIGJvdGggdGhlIG1haW4gYW5kXG4gICAqIGJyYW5jaCBwaXBlbGluZSBhbmQgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBzdGVwc1xuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBsaWNlbnNlLWNoZWNrIGFuZCB1cGxvYWQgb2YgbGljZW5zZS1jaGVjay1maWxlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNoZWNrTGljZW5zZXNcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gY3JlYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG8gbWFrZSBUTFMgY29tbXVuaWNhdGlvbiBwb3NzaWJsZSwgZS5nLiB3aXRoIGEgbG9hZGJhbGFuY2VyLlxuICAgKiAtIGJ1aWxkIHRoZSBjb250YWluZXIgaW1hZ2UgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgamliQnVpbGRUYXJcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqL1xuICBTVEFOREFSRF9HUkFETEUgPSAnU1RBTkRBUkRfR1JBRExFJyxcbiAgLyoqXG4gICAqIFNlbGYtbXV0YXRpbmcgY29kZXBpcGVsaW5lIGRlcGxveWluZyB0aGUgcHJvdmlkZWQgQXBwU3RhY2sgd2l0aCBhZGRpdGlvbmFsIHN0ZXBzIG5lZWRlZCB0byBhY2Nlc3MgS2Fma2EuXG4gICAqXG4gICAqIENvbWVzIHdpdGggYSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmb3IgYSBncmFkbGUgcHJvamVjdC4gVGhpcyBidWlsZHNwZWMueWFtbCBpcyB1c2VkIGZvciBib3RoIHRoZSBtYWluIGFuZFxuICAgKiBicmFuY2ggcGlwZWxpbmUgYW5kIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgc3RlcHNcbiAgICogLSBidWlsZCBhbmQgdGVzdCBvZiB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2xlYW4gYnVpbGRcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjaGVja0xpY2Vuc2VzXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGNyZWF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRvIG1ha2UgVExTIGNvbW11bmljYXRpb24gcG9zc2libGUsIGUuZy4gd2l0aCBhIGxvYWRiYWxhbmNlci5cbiAgICogLSByZXF1ZXN0IGEgY2VydGlmaWNhdGUgdG8gYXV0aGVudGljYXRlIGFnYWluc3QgS2Fma2EgdmlhIG11dHVhbCBUTFNcbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKi9cbiAgU1RBTkRBUkRfR1JBRExFX0tBRktBID0gJ1NUQU5EQVJEX0dSQURMRV9LQUZLQScsXG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgdG8gc3ludGhlc2l6ZSB0aGUgQXBwU3RhY2suXG4gICAqIE5vIGJyYW5jaCBvciB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lIGlzIGNyZWF0ZWQuXG4gICAqL1xuICBTVEFOREFSRF9JTkZSQVNUUlVDVFVSRSA9ICdTVEFOREFSRF9JTkZSQVNUUlVDVFVSRScsXG59XG5cbi8qKlxuICogQHBhcmFtIHBhcnRpYWxCdWlsZFNwZWNQYXRoIC0gUGF0aCB0byBhIGN1c3RvbSBidWlsZC1zcGVjIGZpbGUgdG8gdXNlIGZvciB0aGUgbWFpbiBhbmQgYnJhbmNoIHBpcGVsaW5lLlxuICogQSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmaXR0aW5nIHRoZSBwaXBlbGluZVR5cGUgaXMgdXNlZCBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcGFyYW0gdnVsbmVyYWJpbGl0eVBhcnRpYWxCdWlsZFNwZWNQYXRoIC0gUGF0aCB0byBhIGN1c3RvbSBidWlsZC1zcGVjIGZpbGUgdG8gdXNlIGZvciB0aGUgdnVsbmVyYWJpbGl0eSBwaXBlbGluZS5cbiAqIEEgcHJlLWRlZmluZWQgdnVsbmVyYWJpbGl0eSBidWlsZHNwZWMueWFtbCBmaXR0aW5nIHRoZSBwaXBlbGluZVR5cGUgaXMgdXNlZCBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcGFyYW0gYnVpbGRFbnZpcm9ubWVudCAtIEN1c3RvbSBDb2RlQnVpbGQgYnVpbGQgZW52aXJvbm1lbnQgb3ZlcnJpZGluZyB0aGUgcmlvLXNwZWNpZmljIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgYXJlOlxuICogICAgICAgICAgYnVpbGRJbWFnZTogQU1BWk9OX0xJTlVYXzJfNVxuICogICAgICAgICAgY29tcHV0ZVR5cGU6IExBUkdFXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcnRpYWxCdWlsZFNwZWNQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5UGFydGlhbEJ1aWxkU3BlY1BhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJ1aWxkRW52aXJvbm1lbnQ/OiBCdWlsZEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmVhdHVyZXM6IFBpcGVsaW5lRmVhdHVyZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21haW5Db2RlQnVpbGRQcm9qZWN0OiBDb2RlQnVpbGRTdGVwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9icmFuY2hDb2RlQnVpbGRQcm9qZWN0OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdDogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnVja2V0OiBJQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYWNoZUJ1Y2tldDogSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaG9zdGVkWm9uZTogSUhvc3RlZFpvbmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucHV0TWFzdGVyVHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRCcmFuY2hUcmlnZ2VyRmlsZTogQ29kZVBpcGVsaW5lU291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcjogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3NzTGljZW5zZXNCdWNrZXQ6IElCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY2NvdW50TmFtZVBhcmFtZXRlcjogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVhbUlkZW50aWZpZXJQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25pc3REYXRhTWlycm9yVXJsOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb2RlUGlwZWxpbmVUeXBlOiBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuX2ZlYXR1cmVzID0gdGhpcy5wYXJzZUZlYXR1cmVzKHByb3BzKTtcblxuICAgIC8vIHBvcHVsYXRlIGV4dGVybmFsIHBhcmFtZXRlcnNcbiAgICB0aGlzLl9idWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ1RyaWdnZXJCdWNrZXQnLCBGbi5pbXBvcnRWYWx1ZSgnYml0YnVja2V0LWludGVncmF0aW9uLXMzLWJ1Y2tldCcpKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0NhY2hlQnVja2V0Jywge1xuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gICAgICAgICAgYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQWZ0ZXI6IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHRoaXMuX2hvc3RlZFpvbmUgPSByaW8uUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdEhvc3RlZFpvbmUodGhpcyk7XG4gICAgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoXG4gICAgICB0aGlzLl9idWNrZXQsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5Lk1BU1RFUl9SRVBPfWAsXG4gICAgICB7IHRyaWdnZXI6IGNvZGVwaXBlbGluZV9hY3Rpb25zLlMzVHJpZ2dlci5FVkVOVFMgfVxuICAgICk7XG4gICAgdGhpcy5faW5wdXRCcmFuY2hUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoXG4gICAgICB0aGlzLl9idWNrZXQsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5LkJSQU5DSF9SRVBPfWAsXG4gICAgICB7IHRyaWdnZXI6IGNvZGVwaXBlbGluZV9hY3Rpb25zLlMzVHJpZ2dlci5FVkVOVFMgfVxuICAgICk7XG5cbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyJyxcbiAgICAgIHsgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyB9XG4gICAgKTtcbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnT3NzTGljZW5zZXNCdWNrZXQnLFxuICAgICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuc3RyaW5nVmFsdWVcbiAgICApO1xuICAgIHRoaXMuX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnS2V5c3RvcmVQYXNzd29yZCcsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6IGAvY29uZmlnLyR7cHJvcHMuc2VydmljZU5hbWV9L3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9KTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ0FjY291bnROYW1lUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL2FjY291bnQvbmFtZSdcbiAgICApO1xuICAgIHRoaXMuX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnVGVhbUlkZW50aWZpZXJQYXJhbWV0ZXInLFxuICAgICAgJy9jb25maWcvdGVhbS9pZGVudGlmaWVyJ1xuICAgICk7XG4gICAgdGhpcy5fbmlzdERhdGFNaXJyb3JVcmwgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdOaXN0RGF0YU1pcnJvclVybCcsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlID0gcHJvcHMuY29kZVBpcGVsaW5lVHlwZSA/PyBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlLlYxO1xuXG4gICAgdGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3QgPSB0aGlzLmNyZWF0ZU1haW5Db2RlQnVpbGRQcm9qZWN0KHByb3BzKTtcbiAgICB0aGlzLmFkZE1haW5QaXBlbGluZSh0aGlzLl9tYWluQ29kZUJ1aWxkUHJvamVjdCwgcHJvcHMpO1xuXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLmJyYW5jaFBpcGVsaW5lKSB7XG4gICAgICB0aGlzLl9icmFuY2hDb2RlQnVpbGRQcm9qZWN0ID0gdGhpcy5jcmVhdGVCcmFuY2hDb2RlQnVpbGRQcm9qZWN0KHByb3BzKTtcbiAgICAgIHRoaXMuYWRkQnJhbmNoUGlwZWxpbmUodGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mZWF0dXJlcy52dWxuZXJhYmlsaXR5UGlwZWxpbmUpIHtcbiAgICAgIHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0ID0gdGhpcy5jcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRQcm9qZWN0KHByb3BzKTtcbiAgICAgIHRoaXMuYWRkVnVsbmVyYWJpbGl0eVBpcGVsaW5lKHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0LCBwcm9wcyk7XG4gICAgfVxuXG4gICAgY29uc3QgW2ZlYXR1cmUsIHBhY2thZ2VOYW1lXSA9IF9fZGlybmFtZS5zcGxpdChwYXRoLnNlcCkucmV2ZXJzZSgpO1xuICAgIG5ldyBDbGFpZG9tZXRlcih0aGlzLCAnQ2xhaWRvbWV0ZXInLCB7XG4gICAgICBwcm9kdWN0OiBDbGFpZG9tZXRlclByb2R1Y3QuQ0RLX0NPTlRSSUJVVElPTixcbiAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgZmVhdHVyZSxcbiAgICAgIHZlcnNpb246ICcxLjUuMCcsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1haW5Db2RlYnVpbGRQcm9qZWN0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYWluQ29kZUJ1aWxkUHJvamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCgpOiBDb2RlQnVpbGRTdGVwIHtcbiAgICBpZiAodGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignVGhlIHBpcGVsaW5lIHR5cGUgeW91IGhhdmUgc2VsZWN0ZWQgZG9lcyBub3Qgc3VwcG9ydCBhIGJyYW5jaCBjb2RlYnVpbGQgcHJvamVjdCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdnVsbmVyYWJpbGl0eUNvZGVCdWlsZFByb2plY3QoKTogQ29kZUJ1aWxkU3RlcCB7XG4gICAgaWYgKHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdUaGUgcGlwZWxpbmUgdHlwZSB5b3UgaGF2ZSBzZWxlY3RlZCBkb2VzIG5vdCBzdXBwb3J0IGEgdnVsbmVyYWJpbGl0eSBjb2RlYnVpbGQgcHJvamVjdCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdnVsbmVyYWJpbGl0eUNvZGVCdWlsZFByb2plY3Q7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRmVhdHVyZXMocHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcyk6IFBpcGVsaW5lRmVhdHVyZXMge1xuICAgIGlmIChwcm9wcy5waXBlbGluZVR5cGUgJiYgcHJvcHMuZmVhdHVyZXMpIHtcbiAgICAgIHRocm93IEVycm9yKCdZb3UgY2Fubm90IHByb3ZpZGUgYm90aCBhIHBpcGVsaW5lVHlwZSBhbmQgZmVhdHVyZXMuIFBsZWFzZSB1c2UgZmVhdHVyZXMgb25seS4nKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzPy5rYWZrYUludGVncmF0aW9uICYmICFwcm9wcy5mZWF0dXJlcz8uZ3JhZGxlQnVpbGQpIHtcbiAgICAgIHRocm93IEVycm9yKCdLYWZrYSBpbnRlZ3JhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgcGlwZWxpbmVzIHdpdGggZ3JhZGxlIGJ1aWxkJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcz8uZnJvbnRlbmRCdWNrZXROYW1lICYmICFwcm9wcy5mZWF0dXJlcz8ubnBtQnVpbGQpIHtcbiAgICAgIHRocm93IEVycm9yKCdGcm9udGVuZCBidWNrZXQgbmFtZSBjYW4gb25seSBiZSBzZXQgd2hlbiBucG0gYnVpbGQgaXMgZW5hYmxlZCcpO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZmVhdHVyZXM/LmFkZGl0aW9uYWxCdWlsZENvbW1hbmRzICYmIHByb3BzLmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB7XG4gICAgICB0aHJvdyBFcnJvcignWW91IGNhbm5vdCBwcm92aWRlIGFkZGl0aW9uYWxCdWlsZENvbW1hbmRzIGlmIHlvdSB1c2UgYSBwYXJ0aWFsQnVpbGRTcGVjUGF0aC4nKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzICYmIHByb3BzLmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBwaXBlbGluZSBmZWF0dXJlcyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcGFydGlhbEJ1aWxkU3BlY1BhdGguIFBsZWFzZSBrZWVwIGluIG1pbmQsIHRoYXQgYWxsIGJ1aWxkc3BlYyByZWxhdGVkIGZlYXR1cmVzIGFyZSBpZ25vcmVkIGFuZCB0aGUgcGFydGlhbEJ1aWxkU3BlYyBpcyBhcHBsaWVkLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5waXBlbGluZVR5cGUpIHtcbiAgICAgIHN3aXRjaCAocHJvcHMucGlwZWxpbmVUeXBlKSB7XG4gICAgICAgIGNhc2UgUGlwZWxpbmVUeXBlLlNUQU5EQVJEX0dSQURMRTpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJhbmNoUGlwZWxpbmU6IHRydWUsXG4gICAgICAgICAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmU6IHRydWUsXG4gICAgICAgICAgICBncmFkbGVCdWlsZDogdHJ1ZSxcbiAgICAgICAgICAgIG5wbUJ1aWxkOiBmYWxzZSxcbiAgICAgICAgICAgIGthZmthSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlUGlwZWxpbmVNb25pdG9yczogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFBpcGVsaW5lVHlwZS5TVEFOREFSRF9HUkFETEVfS0FGS0E6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgZ3JhZGxlQnVpbGQ6IHRydWUsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgZW5hYmxlUGlwZWxpbmVNb25pdG9yczogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFBpcGVsaW5lVHlwZS5TVEFOREFSRF9JTkZSQVNUUlVDVFVSRTpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJhbmNoUGlwZWxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgIGdyYWRsZUJ1aWxkOiBmYWxzZSxcbiAgICAgICAgICAgIG5wbUJ1aWxkOiBmYWxzZSxcbiAgICAgICAgICAgIGthZmthSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlUGlwZWxpbmVNb25pdG9yczogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYnJhbmNoUGlwZWxpbmU6IHByb3BzLmZlYXR1cmVzPy5icmFuY2hQaXBlbGluZSA/PyB0cnVlLFxuICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiBwcm9wcy5mZWF0dXJlcz8udnVsbmVyYWJpbGl0eVBpcGVsaW5lID8/IHRydWUsXG4gICAgICBncmFkbGVCdWlsZDogcHJvcHMuZmVhdHVyZXM/LmdyYWRsZUJ1aWxkID8/IGZhbHNlLFxuICAgICAgbnBtQnVpbGQ6IHByb3BzLmZlYXR1cmVzPy5ucG1CdWlsZCA/PyBmYWxzZSxcbiAgICAgIGthZmthSW50ZWdyYXRpb246IHByb3BzLmZlYXR1cmVzPy5rYWZrYUludGVncmF0aW9uID8/IGZhbHNlLFxuICAgICAgZnJvbnRlbmRCdWNrZXROYW1lOiBwcm9wcy5mZWF0dXJlcz8uZnJvbnRlbmRCdWNrZXROYW1lLFxuICAgICAgYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHM6IHByb3BzLmZlYXR1cmVzPy5hZGRpdGlvbmFsQnVpbGRDb21tYW5kcyxcbiAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHByb3BzLmZlYXR1cmVzPy5lbmFibGVQaXBlbGluZU1vbml0b3JzID8/IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2RrT3V0cHV0RGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgdHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZSxcbiAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYyxcbiAgICBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzXG4gICkge1xuICAgIHJldHVybiBuZXcgUmlvQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCBuYW1lLCB7XG4gICAgICBpbnB1dDogdHJpZ2dlckZpbGUsXG4gICAgICBjZGtPdXREaXJlY3Rvcnk6IGNka091dHB1dERpcmVjdG9yeSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IGJ1aWxkU3BlYyxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5idWlsZEVudmlyb25tZW50LFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IHRoaXMuX2hvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5fY2FjaGVCdWNrZXQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1haW5Db2RlQnVpbGRQcm9qZWN0KHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCBidWlsZFNwZWMgPVxuICAgICAgdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB8fCBjcmVhdGVNYWluQnVpbGRTcGVjKHRoaXMuX2ZlYXR1cmVzKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSaW9Db2RlQnVpbGRQcm9qZWN0KFxuICAgICAgJ01haW5CdWlsZCcsXG4gICAgICAnaW5mcmFzdHJ1Y3R1cmUvY2RrLm91dCcsXG4gICAgICB0aGlzLl9pbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgYnVpbGRTcGVjLFxuICAgICAgcHJvcHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCcmFuY2hDb2RlQnVpbGRQcm9qZWN0KHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCBidWlsZFNwZWMgPVxuICAgICAgdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB8fCBjcmVhdGVNYWluQnVpbGRTcGVjKHRoaXMuX2ZlYXR1cmVzKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSaW9Db2RlQnVpbGRQcm9qZWN0KFxuICAgICAgJ0JyYW5jaEJ1aWxkJyxcbiAgICAgICdpbmZyYXN0cnVjdHVyZS9jZGsub3V0JyxcbiAgICAgIHRoaXMuX2lucHV0QnJhbmNoVHJpZ2dlckZpbGUsXG4gICAgICBidWlsZFNwZWMsXG4gICAgICBwcm9wc1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVZ1bG5lcmFiaWxpdHlCdWlsZFByb2plY3QocHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcykge1xuICAgIGNvbnN0IGJ1aWxkU3BlYyA9XG4gICAgICB0aGlzLmxvYWRCdWlsZFNwZWNGcm9tRmlsZShwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8udnVsbmVyYWJpbGl0eVBhcnRpYWxCdWlsZFNwZWNQYXRoKSB8fFxuICAgICAgY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdCgnVnVsbmVyYWJpbGl0eUNoZWNrcycsICcuLycsIHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUsIGJ1aWxkU3BlYywgcHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNYWluUGlwZWxpbmUobWFpbkJ1aWxkOiBDb2RlQnVpbGRTdGVwLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgY29kZXBpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBjb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZShwaXBlbGluZSwgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogcGlwZWxpbmUsXG4gICAgICBzeW50aDogbWFpbkJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uQ29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4TGFtYmRhQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMjAyM19OT0RFXzIwLFxuICAgICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQU1CREFfMUdCLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKHBpcGVsaW5lKS5hZGQoJ3BpcGVsaW5lX3R5cGUnLCAnYnVpbGQnKTtcblxuICAgIGNvbnN0IHN0cmlwQXNzZXRzU3RlcCA9IHRoaXMuY3JlYXRlU3RyaXBBc3NldHNTdGVwKGNvZGVQaXBlbGluZSk7XG4gICAgY29kZVBpcGVsaW5lLmFkZFdhdmUoJ0JlZm9yZURlcGxveScsIHsgcHJlOiBbc3RyaXBBc3NldHNTdGVwXSB9KTtcblxuICAgIGNvbnN0IGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCA9IHRoaXMuY3JlYXRlQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKG1haW5CdWlsZCwgcHJvcHMpO1xuICAgIGNvbnN0IHNlY3JldHNEZXBsb3lTdGVwUHJvcHMgPSB0aGlzLmNyZWF0ZVNlY3JldHNEZXBsb3lTdGVwKHByb3BzKTtcbiAgICBjb25zdCBmcm9udGVuZERlcGxveVN0ZXAgPSB0aGlzLmNyZWF0ZURlcGxveUZyb250ZW5kRGVwbG95U3RlcChtYWluQnVpbGQpO1xuICAgIGNvbnN0IHBvc3RTdGVwcyA9IFtdO1xuICAgIGlmIChjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXApIHtcbiAgICAgIHBvc3RTdGVwcy5wdXNoKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCk7XG4gICAgfVxuICAgIGlmIChmcm9udGVuZERlcGxveVN0ZXApIHtcbiAgICAgIHBvc3RTdGVwcy5wdXNoKGZyb250ZW5kRGVwbG95U3RlcCk7XG4gICAgfVxuXG4gICAgY29kZVBpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IEFwcGxpY2F0aW9uKHRoaXMsICdEZXBsb3lBcHBsaWNhdGlvblN0YWNrcycsIHtcbiAgICAgICAgYXBwU3RhY2tGYWN0b3J5OiBwcm9wcy5hcHBTdGFja0ZhY3RvcnksXG4gICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgdmVyc2lvbjogcHJvY2Vzcy5lbnYuUElQRUxJTkVfRVhFQ1VUSU9OX0lEID8/ICdQSVBFTElORV9FWEVDVVRJT05fSUQgbm90IHNldCcsXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBzZWNyZXRzRGVwbG95U3RlcFByb3BzID8gW3NlY3JldHNEZXBsb3lTdGVwUHJvcHNdIDogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0OiBwb3N0U3RlcHMsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvZGVQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3Qoc3RyaXBBc3NldHNTdGVwLCAncHJvamVjdF90eXBlJywgJ3N0cmlwX2Fzc2V0cycpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChzZWNyZXRzRGVwbG95U3RlcFByb3BzLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9zZWNyZXRzJyk7XG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KG1haW5CdWlsZCwgJ3Byb2plY3RfdHlwZScsICdidWlsZCcpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAsICdwcm9qZWN0X3R5cGUnLCAnZGVwbG95X2NhcGFiaWxpdHlfbW9uaXRvcmluZycpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChmcm9udGVuZERlcGxveVN0ZXAsICdwcm9qZWN0X3R5cGUnLCAnZGVwbG95X2Zyb250ZW5kJyk7XG5cbiAgICBpZiAoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKSB7XG4gICAgICBjb25zdCBtb25pdG9yaW5nVGVzdHN1aXRlUnVubmVyQnVja2V0ID0gQnVja2V0LmZyb21CdWNrZXROYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnTW9uaXRvcmluZ1Rlc3RzdWl0ZVJ1bm5lckJ1Y2tldCcsXG4gICAgICAgIGBtb25pdG9yaW5nLXRlc3RzdWl0ZS1ydW5uZXItJHt0aGlzLmFjY291bnR9YFxuICAgICAgKTtcbiAgICAgIG1vbml0b3JpbmdUZXN0c3VpdGVSdW5uZXJCdWNrZXQuZ3JhbnRXcml0ZShjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXApO1xuICAgIH1cbiAgICBpZiAoZnJvbnRlbmREZXBsb3lTdGVwKSB7XG4gICAgICBjb25zdCBmcm9udGVuZEJ1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnRnJvbnRlbmRCdWNrZXQnLCB0aGlzLl9mZWF0dXJlcy5mcm9udGVuZEJ1Y2tldE5hbWUhISk7XG4gICAgICBmcm9udGVuZEJ1Y2tldC5ncmFudFJlYWRXcml0ZShmcm9udGVuZERlcGxveVN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1BpcGVsaW5lU2NoZWR1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24ocHJvcHMucGlwZWxpbmVTY2hlZHVsZXM/Lm1haW5QaXBlbGluZSB8fCAnY3JvbigwIDkgPyAqIDIjMSAqKScpLFxuICAgIH0pO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZShjb2RlUGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKG1haW5CdWlsZCk7XG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuZ3JhbnRSZWFkKG1haW5CdWlsZCk7XG4gICAgdGhpcy5fc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKG1haW5CdWlsZCk7XG4gICAgdGhpcy5fYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKG1haW5CdWlsZCk7XG4gICAgdGhpcy5fdGVhbUlkZW50aWZpZXJQYXJhbWV0ZXIuZ3JhbnRSZWFkKG1haW5CdWlsZCk7XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24pIHtcbiAgICAgIHRoaXMuZ3JhbnRQZXJtaXNzaW9uc0ZvckthZmthSW50ZWdyYXRpb24obWFpbkJ1aWxkLCAnS2Fma2FJbnRlZ3JhdGlvblBvbGljeScpO1xuICAgIH1cbiAgICBjb2RlUGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoc3RyaXBBc3NldHNTdGVwLnByb2plY3QpO1xuXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzPy5lbmFibGVQaXBlbGluZU1vbml0b3JzKSB7XG4gICAgICBuZXcgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCh0aGlzLCAnRGF0YWRvZ1BpcGVsaW5lRXJyb3JNb25pdG9yJywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgIHBpcGVsaW5lTmFtZTogcGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQnJhbmNoUGlwZWxpbmUoYnJhbmNoQnVpbGQ6IENvZGVCdWlsZFN0ZXApIHtcbiAgICBjb25zdCBicmFuY2hQaXBlbGluZSA9IG5ldyBjb2RlcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ0JyYW5jaFBpcGVsaW5lJywge1xuICAgICAgYXJ0aWZhY3RCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgICAgcGlwZWxpbmVUeXBlOiB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IGJyYW5jaENvZGVQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKGJyYW5jaFBpcGVsaW5lLCAnQ29kZVBpcGVsaW5lJywge1xuICAgICAgY29kZVBpcGVsaW5lOiBicmFuY2hQaXBlbGluZSxcbiAgICAgIHN5bnRoOiBicmFuY2hCdWlsZCxcbiAgICAgIHNlbGZNdXRhdGlvbjogZmFsc2UsXG4gICAgfSk7XG4gICAgVGFncy5vZihicmFuY2hQaXBlbGluZSkuYWRkKCdwaXBlbGluZV90eXBlJywgJ2JyYW5jaCcpO1xuICAgIGJyYW5jaENvZGVQaXBlbGluZS5hZGRXYXZlKCdCcmFuY2hCdWlsZCcpLmFkZFBvc3QoYnJhbmNoQnVpbGQpO1xuICAgIGJyYW5jaENvZGVQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QoYnJhbmNoQnVpbGQsICdwcm9qZWN0X3R5cGUnLCAnYnJhbmNoX2J1aWxkJyk7XG5cbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZShicmFuY2hCdWlsZCk7XG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICB0aGlzLl9zZXJ2aWNlS2V5c3RvcmVQYXNzd29yZC5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX2FjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgdGhpcy5fdGVhbUlkZW50aWZpZXJQYXJhbWV0ZXIuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICBpZiAodGhpcy5fZmVhdHVyZXMua2Fma2FJbnRlZ3JhdGlvbikge1xuICAgICAgdGhpcy5ncmFudFBlcm1pc3Npb25zRm9yS2Fma2FJbnRlZ3JhdGlvbihicmFuY2hCdWlsZCwgJ0JyYW5jaEthZmthSW50ZWdyYXRpb25Qb2xpY3knKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFZ1bG5lcmFiaWxpdHlQaXBlbGluZSh2dWxuZXJhYmlsaXR5QnVpbGQ6IENvZGVCdWlsZFN0ZXAsIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5UGlwZWxpbmUgPSBuZXcgY29kZXBpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdWdWxuZXJhYmlsaXR5UGlwZWxpbmUnLCB7XG4gICAgICBhcnRpZmFjdEJ1Y2tldDogdGhpcy5fY2FjaGVCdWNrZXQsXG4gICAgICBwaXBlbGluZVR5cGU6IHRoaXMuX2NvZGVQaXBlbGluZVR5cGUsXG4gICAgICByZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGU6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eUNvZGVQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHZ1bG5lcmFiaWxpdHlQaXBlbGluZSwgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdnVsbmVyYWJpbGl0eVBpcGVsaW5lLFxuICAgICAgc3ludGg6IHZ1bG5lcmFiaWxpdHlCdWlsZCxcbiAgICAgIHNlbGZNdXRhdGlvbjogZmFsc2UsXG4gICAgfSk7XG4gICAgVGFncy5vZih2dWxuZXJhYmlsaXR5UGlwZWxpbmUpLmFkZCgncGlwZWxpbmVfdHlwZScsICd2dWxuZXJhYmlsaXR5Jyk7XG5cbiAgICB2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lLmFkZFdhdmUoJ1Z1bG5lcmFiaWxpdHlDaGVja3MnKS5hZGRQb3N0KHZ1bG5lcmFiaWxpdHlCdWlsZCk7XG4gICAgdnVsbmVyYWJpbGl0eUNvZGVQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG4gICAgVGFncy5vZih2dWxuZXJhYmlsaXR5QnVpbGQucHJvamVjdCkuYWRkKCdwcm9qZWN0X3R5cGUnLCAndnVsbmVyYWJpbGl0eV9jaGVjaycpO1xuICAgIHRoaXMuX25pc3REYXRhTWlycm9yVXJsLmdyYW50UmVhZCh2dWxuZXJhYmlsaXR5QnVpbGQpO1xuICAgIFNvbmF0eXBlT3NzSW5kZXhDcmVkZW50aWFscy5hbGxvd0FjY2Vzc1RvKHRoaXMsIHZ1bG5lcmFiaWxpdHlCdWlsZCk7XG5cbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5UnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnVnVsbmVyYWJpbGl0eVBpcGVsaW5lU2NoZWR1bGUnLCB7XG4gICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24ocHJvcHMucGlwZWxpbmVTY2hlZHVsZXM/LnZ1bG5lcmFiaWxpdHlQaXBlbGluZSB8fCAnY3JvbigwIDUgPyAqIE1PTi1GUkkgKiknKSxcbiAgICB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIGlmIChwcm9wcy5kYXRhZG9nQWxlcnRUeXBlID09PSAnb3BzZ2VuaWUnKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ1RoZSBPcHNHZW5pZSBhbGVydFR5cGUgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlLiBQbGVhc2UgdXNlIHRoZSB2dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uIHByb3BlcnR5IGluc3RlYWQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzPy5lbmFibGVQaXBlbGluZU1vbml0b3JzKSB7XG4gICAgICBuZXcgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3ModGhpcywgJ0RhdGFEb2dQaXBlbGluZUVycm9yRm9yVnVsbmVyYWJpbGl0eUNoZWNrc01vbml0b3InLCB7XG4gICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB2dWxuZXJhYmlsaXR5UGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICAgICAgbm90aWZpY2F0aW9uOiBwcm9wcy52dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdHJpcEFzc2V0c1N0ZXAocGlwZWxpbmU6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUpOiBDb2RlQnVpbGRTdGVwIHtcbiAgICAvLyBDbG91ZEFzc2VtYmx5QXJ0aWZhY3RzIG11c3QgYmUgc21hbGxlciB0aGFuIDI1Nk1CLiBEdWUgdG8gdGhlIGdyYWRsZSBhcnRpZmFjdCB3ZSBhcmUgZXhjZWVkaW5nIHRoaXMgbGltaXQgYW5kIHBpcGVsaW5lIGZhaWxzIGluIGRlcGxveW1lbnQgc3RlcC5cbiAgICAvLyBJc3N1ZSBpcyBrbm93biBhbmQgbm90IGZpeGVkIGZvciBhbHJlYWR5IHNvbWUgeWVhcnMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgLy8gRGlydHkgZml4OiBBc3NldHMgYXJlIGFscmVhZHkgdXBsb2FkZWQgYW5kIHRodXMgbm90IG5lZWRlZC4gUmVtb3ZlIHRoZW0gZnJvbSBwaXBlbGluZSBhcnRpZmFjdC5cbiAgICByZXR1cm4gbmV3IENvZGVCdWlsZFN0ZXAoJ1N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5Jywge1xuICAgICAgaW5wdXQ6IHBpcGVsaW5lLmNsb3VkQXNzZW1ibHlGaWxlU2V0LFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgJ1pJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpJyxcbiAgICAgICAgJ3JtIC1yZnYgYXNzZXQuKicsXG4gICAgICAgICd6aXAgLXIgLXEgLUEgJFpJUF9BUkNISVZFIConLFxuICAgICAgICAnYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIJyxcbiAgICAgIF0sXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4TGFtYmRhQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMjAyM19OT0RFXzIwLFxuICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFNQkRBXzFHQixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcChcbiAgICBtYWluQnVpbGQ6IENvZGVCdWlsZFN0ZXAsXG4gICAgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wc1xuICApOiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocHJvcHMubW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcykge1xuICAgICAgY29uc3QgbW9uaXRvcmluZ0FydGlmYWN0cyA9IE9iamVjdC5rZXlzKHByb3BzLm1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMubW9uaXRvcmluZ0FydGlmYWN0cykubWFwKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG1haW5CdWlsZC5hZGRPdXRwdXREaXJlY3Rvcnkoa2V5KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbnB1dDogb3V0cHV0LFxuICAgICAgICAgIGZpbGVzOiBwcm9wcy5tb25pdG9yaW5nRGVwbG95U3RlcFByb3BzIS5tb25pdG9yaW5nQXJ0aWZhY3RzW2tleV0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKHRoaXMsICdEZXBsb3lDYXBhYmlsaXR5TW9uaXRvcmluZycsIHtcbiAgICAgICAgbW9uaXRvcmluZ0FydGlmYWN0czogbW9uaXRvcmluZ0FydGlmYWN0cyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjcmV0c0RlcGxveVN0ZXAocHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcyk6IHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3BzLnNlY3JldHNEZXBsb3lTdGVwUHJvcHMpIHtcbiAgICAgIHJldHVybiBuZXcgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwKHRoaXMsICdEZXBsb3lTZWNyZXRzJywge1xuICAgICAgICAuLi5wcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzLFxuICAgICAgICBpbnB1dDogdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwbG95RnJvbnRlbmREZXBsb3lTdGVwKG1haW5CdWlsZDogQ29kZUJ1aWxkU3RlcCk6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmcm9udGVuZEJ1aWxkT3V0cHV0ID0gbWFpbkJ1aWxkLmFkZE91dHB1dERpcmVjdG9yeSgnYnVpbGQnKTtcbiAgICByZXR1cm4gbmV3IENvZGVCdWlsZFN0ZXAoJ0RlcGxveUZyb250ZW5kJywge1xuICAgICAgaW5wdXQ6IGZyb250ZW5kQnVpbGRPdXRwdXQsXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4TGFtYmRhQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMjAyM19OT0RFXzIwLFxuICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFNQkRBXzFHQixcbiAgICAgIH0sXG4gICAgICBjb21tYW5kczogW1xuICAgICAgICBgYXdzIHMzIHN5bmMgLS1leGNsdWRlIGluZGV4Lmh0bWwgLS1jYWNoZS1jb250cm9sIG1heC1hZ2U9MzE1MzYwMDAgLi8gJ3MzOi8vJHt0aGlzLl9mZWF0dXJlcy5mcm9udGVuZEJ1Y2tldE5hbWV9J2AsXG4gICAgICAgIGBhd3MgczMgY3AgLS1jYWNoZS1jb250cm9sIG5vLWNhY2hlIGluZGV4Lmh0bWwgJ3MzOi8vJHt0aGlzLl9mZWF0dXJlcy5mcm9udGVuZEJ1Y2tldE5hbWV9J2AsXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBncmFudFBlcm1pc3Npb25zRm9yS2Fma2FJbnRlZ3JhdGlvbihidWlsZFByb2plY3Q6IFJpb0NvZGVCdWlsZFByb2plY3QsIHBvbGljeUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWlsZFByb2plY3RSb2xlID0gYnVpbGRQcm9qZWN0LnByb2plY3Qucm9sZTtcbiAgICBpZiAoYnVpbGRQcm9qZWN0Um9sZSkge1xuICAgICAgYnVpbGRQcm9qZWN0Um9sZS5hZGRNYW5hZ2VkUG9saWN5KFxuICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21NYW5hZ2VkUG9saWN5QXJuKHRoaXMsIHBvbGljeUlkLCBGbi5pbXBvcnRWYWx1ZSgna2Fma2EtaW50ZWdyYXRpb24tcG9saWN5LWFybicpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgYWRkIG1hbmFnZWQgcG9saWN5IGZvciBrYWZrYS1pbnRlZ3JhdGlvbiB0byBDb2RlQnVpbGQgcHJvamVjdCBvZiAke2J1aWxkUHJvamVjdC5pZH0gZHVlIHRvIG1pc3Npbmcgcm9sZS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEJ1aWxkU3BlY0Zyb21GaWxlKGJ1aWxkU3BlY1BhdGg/OiBzdHJpbmcpOiBCdWlsZFNwZWMgfCB1bmRlZmluZWQge1xuICAgIGlmICghYnVpbGRTcGVjUGF0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHlhbWwubG9hZChmcy5yZWFkRmlsZVN5bmMoYnVpbGRTcGVjUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkgYXMgT2JqZWN0KTtcbiAgfVxuXG4gIHByaXZhdGUgdGFnQ29kZUJ1aWxkUHJvamVjdChwcm9qZWN0OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChwcm9qZWN0KSB7XG4gICAgICBUYWdzLm9mKHByb2plY3QucHJvamVjdCkuYWRkKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIl19
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBbUY7QUFDbkYsNkRBQTRHO0FBQzVHLDZEQUE2RDtBQUM3RCw2RUFBNkU7QUFDN0UsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCxpREFBb0Q7QUFFcEQseUNBQXlDO0FBQ3pDLCtDQUFxRDtBQUNyRCwyQ0FBMkM7QUFFM0MsbURBQW1EO0FBQ25ELHFEQUEwRTtBQUUxRSx5QkFBeUI7QUFDekIsZ0NBQWdDO0FBQ2hDLDZCQUE2QjtBQUc3QixzQ0FBMkQ7QUFDM0Qsc0NBQXNDO0FBQ3RDLDBDQUFpRTtBQUNqRSwyREFBa0Q7QUFDbEQsbURBQXNEO0FBQ3RELDZDQUFpRjtBQUNqRix5REFBZ0g7QUFDaEgscUVBQTZFO0FBMkw3RSxJQUFZLFlBcUNYO0FBckNELFdBQVksWUFBWTtJQUN0Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxtREFBbUMsQ0FBQTtJQUNuQzs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsK0RBQStDLENBQUE7SUFDL0M7Ozs7O09BS0c7SUFDSCxtRUFBbUQsQ0FBQTtBQUNyRCxDQUFDLEVBckNXLFlBQVksNEJBQVosWUFBWSxRQXFDdkI7QUFpQkQsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFrQnRDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLCtCQUErQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxD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WUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixDQUFDLGdCQUFnQixDQUMvQix1QkFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUNuRyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEtBQUssQ0FDVCw4RUFBOEUsWUFBWSxDQUFDLEVBQUUsdUJBQXVCLENBQ3JILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLGFBQXNCO1FBQ2xELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyx5QkFBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQVcsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUFrQyxFQUFFLEdBQVcsRUFBRSxLQUFhO1FBQ3hGLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixrQkFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzs7QUEzZEgsc0NBNGRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIEZuLCBSZW1vdmFsUG9saWN5LCBTdGFjaywgU3RhY2tQcm9wcywgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEJ1aWxkRW52aXJvbm1lbnQsIEJ1aWxkU3BlYywgQ29tcHV0ZVR5cGUsIExpbnV4TGFtYmRhQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lX2FjdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElIb3N0ZWRab25lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEJ1Y2tldCwgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBJU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAsIENvZGVQaXBlbGluZVNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2cnO1xuaW1wb3J0IHsgSU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgeyBTb25hdHlwZU9zc0luZGV4Q3JlZGVudGlhbHMgfSBmcm9tICcuLi8uLi8uLi9pYW0nO1xuaW1wb3J0ICogYXMgcmlvIGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IENsYWlkb21ldGVyLCBDbGFpZG9tZXRlclByb2R1Y3QgfSBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gJy4vYXBwbGljYXRpb24tc3RhZ2UnO1xuaW1wb3J0IHsgUmlvQ29kZUJ1aWxkUHJvamVjdCB9IGZyb20gJy4vYnVpbGQtcHJvamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVNYWluQnVpbGRTcGVjLCBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjIH0gZnJvbSAnLi9idWlsZHNwZWNzJztcbmltcG9ydCB7IERhdGFEb2dQaXBlbGluZUVycm9yQWxlcnRGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzLCBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0IH0gZnJvbSAnLi9kYXRhZG9nLW1vbml0b3JzJztcbmltcG9ydCB7IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCB9IGZyb20gJy4vbW9uaXRvcmluZy1kZXBsb3ktc3RlcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTY2hlZHVsZXNQcm9wcyB7XG4gIHJlYWRvbmx5IG1haW5QaXBlbGluZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBpcGVsaW5lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBzdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhpcyBoYXMgdG8gYmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcmVwb3NpdG9yeSBhcyB0aGUgczMgdHJpZ2dlciBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJpdGJ1Y2tldC1pbnRlZ3JhdGlvbiB1c2VzIHRoaXMgYXMgYSBwcmVmaXhcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIFNFUlZJQ0VfTkFNRSBpbiB0aGUgQ29kZUJ1aWxkU3RlcFxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgaW4gdGhlIEFwcFN0YWNrUHJvcHMgaW4gdGhlIGFwcFN0YWNrRmFjdG9yeVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgYXMgc3RhY2tOYW1lIHByb3BlcnR5IGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnkuIEkuZS4gdGhlIHN0YWNrIGlzIG5hbWVkIGFmdGVyIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGhhbmRlZCBvdmVyIHRvIGFsbCBEYXRhZG9nIG1vbml0b3JzXG4gICAqIC0gUklPIGNvbnZlbnRpb24gaXMgdGhhdCB1cGxvYWRlZCBsaWNlbnNlLWNoZWNrLWZpbGVzIGFyZSBuYW1lZCBhZnRlciB0aGUgc2VydmljZSwgaS5lLiBzZXJ2aWNlTmFtZS50eHRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhcHBTdGFjayB0byBiZSBkZXBsb3llZC5cbiAgICpcbiAgICogVGhpcyBhY3RzIGFzIGEgd3JhcHBlciBmb3IgYWxsIHJlc291cmNlcyB5b3Ugd2FudCB0byBkZXBsb3kgdmlhIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFN0YWNrRmFjdG9yeTogSUFwcFN0YWNrRmFjdG9yeTtcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKlxuICAgKiBVc2UgdGhlIGZlYXR1cmVzIHRvIGNvbWJpbmUgZGlmZmVyZW50IG9waW5pb25hdGVkLCBSSU8tc3BlY2lmaWMgcGlwZWxpbmUgZmVhdHVyZXMgc3VjaCBhcyBhZGRpbmcgYSBicmFuY2ggcGlwZWxpbmUgb3Igc3VwcG9ydGluZyBLYWZrYS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzPzogUGlwZWxpbmVGZWF0dXJlcztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgZmVhdHVyZXNgIHByb3BlcnR5IGluc3RlYWQuIEZvciBub3csIHRoZSBwaXBlbGluZSB0eXBlcyBhcmUgbWFwcGVkIHRvIHRoZSBmZWF0dXJlcy5cbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVUeXBlPzogUGlwZWxpbmVUeXBlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGhvdyBvZnRlbiB0aGUgcGlwZWxpbmUgaXMgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkuIElzIGRlZmluZWQgdmlhIGEgY3JvbiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2V2ZW50cy9TY2hlZHVsZWRFdmVudHMuaHRtbFxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlczpcbiAgICogLSBtYWluIHBpcGVsaW5lOiBjcm9uKDAgOSA/ICogMiMxICopXG4gICAqIC0gdnVsbmVyYWJpbGl0eSBwaXBlbGluZTogY3JvbigwIDUgPyAqIE1PTi1GUkkgKilcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NoZWR1bGVzPzogUGlwZWxpbmVTY2hlZHVsZXNQcm9wcztcblxuICAvKipcbiAgICogUGF0aCB0byBzZWNyZXRzIGZpbGUgY29udGFpbmluZyBlbmNyeXB0ZWQgc2VjcmV0cy5cbiAgICpcbiAgICogVGhlIFJpb1NlY3JldHNEZXBsb3lTdGVwIGlzIGFkZGVkIHByaW9yIHRvIGRlcGxveW1lbnQgb2YgdGhlIEFwcFN0YWNrIGlmIGEgcGF0aCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogTm8gc2VjcmV0cyBhcmUgZGVwbG95ZWQgaWYgbm8gcGF0aCBpcyBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHNEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wcztcblxuICAvKipcbiAgICogQ29kZUJ1aWxkIG9wdGlvbnMgb3ZlcnJpZGluZyB0aGUgcmlvLXNwZWNpZmljIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUJ1aWxkT3B0aW9ucz86IENvZGVCdWlsZE9wdGlvbnM7XG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB0aGUgY2FwYWJpbGl0eSBtb25pdG9yaW5nIGRlcGxveSBzdGVwIGlzIGFkZGVkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcztcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgdGhlIGB2dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKiBJZiBgb3BzZ2VuaWVgIGlzIHNwZWNpZmllZCwgYW4gRXhjZXB0aW9uIGlzIHRocm93biwgYXMgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuXG4gICAqL1xuICByZWFkb25seSBkYXRhZG9nQWxlcnRUeXBlPzogRGF0YWRvZ0FsZXJ0VHlwZTtcbiAgLyoqXG4gICAqIE5vdGlmaWNhdGlvbiB0eXBlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSBtb25pdG9yLiBEZWZhdWx0cyB0byBzbGFjay5cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24/OiBJTm90aWZpY2F0aW9uO1xuICAvKipcbiAgICogQ29kZVBpcGVsaW5lIFBpcGVsaW5lVHlwZSAoVjEgb3IgVjIpLiBEZWZhdWx0cyB0byBWMS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVQaXBlbGluZVR5cGU/OiBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGludGVyZmFjZSB0byBjcmVhdGUgdGhlIEFwcFN0YWNrIHdpdGhpbiB0aGUgc3BlY2lmaWMgc2NvcGVcbiAqXG4gKiBTaW1wbHkgcGxhY2UgdGhlIEFwcFN0YWNrIGNyZWF0aW9uIGludG8gdGhlIGNyZWF0ZS1tZXRob2Q6XG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSBlLmcuIHdpdGhpbiBBcHBsaWNhdGlvblByb3BzIGFzIEpTT05PYmplY3Q6XG4gKiBcXHsgY3JlYXRlOiAoY29uc3RydWN0LCBwcm9wcykgPVxcPiBuZXcgU3RhY2soY29uc3RydWN0LCAnQXBwU3RhY2snLCBwcm9wcykgXFx9XG4gKlxuICogLy8gb3Igc2ltcGx5IGFzIGNsYXNzIGludGVyZmFjZSB3aXRoaW4geW91ciBzdGFjayBpbXBsZW1lbnRhdGlvbjpcbiAqIGNsYXNzIFBpcGVsaW5lU3RhZ2UgZXh0ZW5kcyBTdGFnZSBpbXBsZW1lbnRzIElBcHBTdGFja0ZhY3RvcnkgXFx7XG4gKiAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFnZVByb3BzKSBcXHtcbiAqICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAqICAgICAvLyB5b3VyIHN0YWdlIGRlZmluaXRpb25cbiAqICAgXFx9XG4gKlxuICogICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkIFxce1xuICogICAgIC8vIGFwcCBzdGFjayBpbml0aWF0aW9uIGdvZXMgaW4gaGVyZVxuICogICBcXH1cbiAqIFxcfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTdGFja0ZhY3Rvcnkge1xuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QsIGJlaW5nIGludm9rZWQgd2l0aCB0aGUgc3BlY2lmaWMgc2NvcGUgZHVyaW5nIHBpcGVsaW5lIGluc3RhbnRpYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHBhcmVudCBjb25zdHJ1Y3QgZm9yIHRoZSBhcHAgc3RhY2tcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIGFwcCBzdGFja3MgcHJvcGVydGllc1xuICAgKi9cbiAgY3JlYXRlKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBcHBTdGFja1Byb3BzKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RlZCBwcm9wZXJ0aWVzIGJlaW5nIGhhbmRlZCBvdmVyIHRvIFJpb1NlY3JldHNEZXBsb3lTdGVwLlxuICpcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMge1xuICByZWFkb25seSBzZWNyZXRzRmlsZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBNYXAgXFx7ZGlyZWN0b3J5OiBmaWxlbmFtZXNcXH0gY29udGFpbmluZyAgLmphciBvciAuemlwIGZpbGVzIGNyZWF0ZWQgaW4gbWFpbiBidWlsZCBzdGVwIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBtb25pdG9yaW5nLXRlc3RzdWl0ZS1ydW5uZXIgYnVja2V0LCBlLmcuXG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAnYXZhaWxhYmlsaXR5LW1vbml0b3JpbmcvYnVpbGQvbGlicyc6IFsnZm9vLWF2YWlsYWJpbGl0eS5qYXInXSxcbiAgICogICdwZXJmb3JtYW5jZS1tb25pdG9yaW5nL2J1aWxkL2xpYnMnOiBbJ2FwaS1jaGVjay56aXAnLCAnZm9vLXBlcmZvcm1hbmNlLmphciddLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZ0FydGlmYWN0czogeyBbZGlyZWN0b3J5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lRmVhdHVyZXMge1xuICAvKipcbiAgICogQ3JlYXRlIGEgYnJhbmNoIHBpcGVsaW5lIHVzZWQgYnkgcmVub3ZhdGUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaFBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUgdG8gc2NhbiBkZXBlbmRlbmNpZXMgZm9yIHZ1bG5lcmFiaWxpdGllcy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBhIHN0YW5kYXJkIGdyYWRsZSBidWlsZCBpbiB0aGUgcmVwb3NpdG9yeSByb290LiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB1c2luZyBAcmlvLWNsb3VkL3Jpby1saWNlbnNlLWNoZWNrZXIuXG4gICAqIC0gY3JlYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG8gbWFrZSBUTFMgY29tbXVuaWNhdGlvbiBwb3NzaWJsZSwgZS5nLiB3aXRoIGEgbG9hZGJhbGFuY2VyXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiXG4gICAqL1xuICByZWFkb25seSBncmFkbGVCdWlsZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSdW4gYSBzdGFuZGFyZCBucG0gYnVpbGQgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdC4gRGVmYXVsdHMgdG8gYGZhbHNlYDpcbiAgICogLSBydW4gbGludGVyIHZpYSBjb21tYW5kIFwibnBtIHJ1biBsaW50XCJcbiAgICogLSBydW4gdGVzdHMgdmlhIGNvbW1hbmQgXCJucG0gcnVuIHRlc3Q6Y2lcIlxuICAgKiAtIHJ1biBhIGxpY2Vuc2UgY2hlY2sgYnkgY2FsbGluZyB0aGUgc2NyaXB0IFwiY2hlY2stb3NzLWxpY2Vuc2VzLnNoXCIgKGZyb20gdGhlIFJJTyBmcm9udGVuZCB0ZW1wbGF0ZSlcbiAgICogLSBidWlsZCB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCJucG0gcnVuIGJ1aWxkXCJcbiAgICovXG4gIHJlYWRvbmx5IG5wbUJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCByZXF1aXJlZCBzdGVwcyBhbmQgcGVybWlzc2lvbnMgdG8gc3VwcG9ydCBLYWZrYS4gQ3VycmVudGx5LCB0aGlzIHJlcXVpcmVzIGBncmFkbGVCdWlsZGAgdG8gYmUgc2V0IHRvIGB0cnVlYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGthZmthSW50ZWdyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogUzMgQnVja2V0IHRvIGRlcGxveSBmcm9udGVuZCB0by4gUmVxdWlyZXMgYG5wbUJ1aWxkYCB0byBiZSBzZXQgdG8gYHRydWVgLiBJZiBzZXQsIHRoZSBvdXRwdXQgb2YgdGhlIG5wbSBidWlsZCBpcyBkZXBsb3llZCB0byB0aGUgcHJvdmlkZWQgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRlbmRCdWNrZXROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBidWlsZCBjb21tYW5kcyBmb3IgbWFpbiBhbmQgYnJhbmNoIHBpcGVsaW5lLiBXaWxsIGJlIGFkZGVkIGFmdGVyIGFsbCBidWlsZCAmIHRlc3QgY29tbWFuZHMsIGJlZm9yZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgYnVpbGQuIERvZXMgbm90IHdvcmsgd2l0aCBwYXJ0aWFsQnVpbGRzcGVjLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgbm8gRGF0YWRvZyBtb25pdG9ycyBmb3IgbWFpbiBhbmQgdnVsbmVyYWJpbGl0eSBwaXBlbGluZXMgd2lsbCBiZSBjcmVhdGVkLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUGlwZWxpbmVNb25pdG9ycz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIFBpcGVsaW5lVHlwZSB7XG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrLiBCZSBhd2FyZTogVGhlIHByb3ZpZGVkIHNlcnZpY2Ugd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gS2Fma2EuXG4gICAqXG4gICAqIENvbWVzIHdpdGggYSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmb3IgYSBncmFkbGUgcHJvamVjdC4gVGhpcyBidWlsZHNwZWMueWFtbCBpcyB1c2VkIGZvciBib3RoIHRoZSBtYWluIGFuZFxuICAgKiBicmFuY2ggcGlwZWxpbmUgYW5kIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgc3RlcHNcbiAgICogLSBidWlsZCBhbmQgdGVzdCBvZiB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2xlYW4gYnVpbGRcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB1c2luZyBAcmlvLWNsb3VkL3Jpby1saWNlbnNlLWNoZWNrZXIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGNyZWF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRvIG1ha2UgVExTIGNvbW11bmljYXRpb24gcG9zc2libGUsIGUuZy4gd2l0aCBhIGxvYWRiYWxhbmNlci5cbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKi9cbiAgU1RBTkRBUkRfR1JBRExFID0gJ1NUQU5EQVJEX0dSQURMRScsXG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrIHdpdGggYWRkaXRpb25hbCBzdGVwcyBuZWVkZWQgdG8gYWNjZXNzIEthZmthLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZm9yIGEgZ3JhZGxlIHByb2plY3QuIFRoaXMgYnVpbGRzcGVjLnlhbWwgaXMgdXNlZCBmb3IgYm90aCB0aGUgbWFpbiBhbmRcbiAgICogYnJhbmNoIHBpcGVsaW5lIGFuZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzXG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdXNpbmcgQHJpby1jbG91ZC9yaW8tbGljZW5zZS1jaGVja2VyLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXIuXG4gICAqIC0gcmVxdWVzdCBhIGNlcnRpZmljYXRlIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IEthZmthIHZpYSBtdXR1YWwgVExTXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICovXG4gIFNUQU5EQVJEX0dSQURMRV9LQUZLQSA9ICdTVEFOREFSRF9HUkFETEVfS0FGS0EnLFxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjay5cbiAgICpcbiAgICogQ29tZXMgd2l0aCBhIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIHRvIHN5bnRoZXNpemUgdGhlIEFwcFN0YWNrLlxuICAgKiBObyBicmFuY2ggb3IgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkUgPSAnU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkUnLFxufVxuXG4vKipcbiAqIEBwYXJhbSBwYXJ0aWFsQnVpbGRTcGVjUGF0aCAtIFBhdGggdG8gYSBjdXN0b20gYnVpbGQtc3BlYyBmaWxlIHRvIHVzZSBmb3IgdGhlIG1haW4gYW5kIGJyYW5jaCBwaXBlbGluZS5cbiAqIEEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZml0dGluZyB0aGUgcGlwZWxpbmVUeXBlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIHZ1bG5lcmFiaWxpdHlQYXJ0aWFsQnVpbGRTcGVjUGF0aCAtIFBhdGggdG8gYSBjdXN0b20gYnVpbGQtc3BlYyBmaWxlIHRvIHVzZSBmb3IgdGhlIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUuXG4gKiBBIHByZS1kZWZpbmVkIHZ1bG5lcmFiaWxpdHkgYnVpbGRzcGVjLnlhbWwgZml0dGluZyB0aGUgcGlwZWxpbmVUeXBlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIGJ1aWxkRW52aXJvbm1lbnQgLSBDdXN0b20gQ29kZUJ1aWxkIGJ1aWxkIGVudmlyb25tZW50IG92ZXJyaWRpbmcgdGhlIHJpby1zcGVjaWZpYyBkZWZhdWx0cy4gVGhlIGRlZmF1bHRzIGFyZTpcbiAqICAgICAgICAgIGJ1aWxkSW1hZ2U6IEFNQVpPTl9MSU5VWF8yXzVcbiAqICAgICAgICAgIGNvbXB1dGVUeXBlOiBMQVJHRVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBwYXJ0aWFsQnVpbGRTcGVjUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBhcnRpYWxCdWlsZFNwZWNQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBidWlsZEVudmlyb25tZW50PzogQnVpbGRFbnZpcm9ubWVudDtcbn1cblxuZXhwb3J0IGNsYXNzIFBpcGVsaW5lU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYWluQ29kZUJ1aWxkUHJvamVjdDogQ29kZUJ1aWxkU3RlcDtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnJhbmNoQ29kZUJ1aWxkUHJvamVjdDogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfdnVsbmVyYWJpbGl0eUNvZGVCdWlsZFByb2plY3Q6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1Y2tldDogSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGVCdWNrZXQ6IElCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3RlZFpvbmU6IElIb3N0ZWRab25lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dE1hc3RlclRyaWdnZXJGaWxlOiBDb2RlUGlwZWxpbmVTb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucHV0QnJhbmNoVHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29zc0xpY2Vuc2VzQnVja2V0OiBJQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXJ2aWNlS2V5c3RvcmVQYXNzd29yZDogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWNjb3VudE5hbWVQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uaXN0RGF0YU1pcnJvclVybDogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29kZVBpcGVsaW5lVHlwZTogY29kZXBpcGVsaW5lLlBpcGVsaW5lVHlwZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLl9mZWF0dXJlcyA9IHRoaXMucGFyc2VGZWF0dXJlcyhwcm9wcyk7XG5cbiAgICAvLyBwb3B1bGF0ZSBleHRlcm5hbCBwYXJhbWV0ZXJzXG4gICAgdGhpcy5fYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdUcmlnZ2VyQnVja2V0JywgRm4uaW1wb3J0VmFsdWUoJ2JpdGJ1Y2tldC1pbnRlZ3JhdGlvbi1zMy1idWNrZXQnKSk7XG4gICAgdGhpcy5fY2FjaGVCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdDYWNoZUJ1Y2tldCcsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgIGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZEFmdGVyOiBEdXJhdGlvbi5kYXlzKDcpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLl9ob3N0ZWRab25lID0gcmlvLlJpb0xhbmRpbmdab25lLmdldERlZmF1bHRIb3N0ZWRab25lKHRoaXMpO1xuICAgIHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUgPSBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLnMzKFxuICAgICAgdGhpcy5fYnVja2V0LFxuICAgICAgYCR7cHJvcHMuc2VydmljZU5hbWV9L3RyaWdnZXIvJHtyaW8uVHJpZ2dlcktleS5NQVNURVJfUkVQT31gLFxuICAgICAgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH1cbiAgICApO1xuICAgIHRoaXMuX2lucHV0QnJhbmNoVHJpZ2dlckZpbGUgPSBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLnMzKFxuICAgICAgdGhpcy5fYnVja2V0LFxuICAgICAgYCR7cHJvcHMuc2VydmljZU5hbWV9L3RyaWdnZXIvJHtyaW8uVHJpZ2dlcktleS5CUkFOQ0hfUkVQT31gLFxuICAgICAgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH1cbiAgICApO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsXG4gICAgICB7IHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL29zcy1saWNlbnNlcy9idWNrZXQtbmFtZScgfVxuICAgICk7XG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlXG4gICAgKTtcbiAgICB0aGlzLl9zZXJ2aWNlS2V5c3RvcmVQYXNzd29yZCA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgJ0tleXN0b3JlUGFzc3dvcmQnLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBgL2NvbmZpZy8ke3Byb3BzLnNlcnZpY2VOYW1lfS9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkYCxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgfSk7XG4gICAgdGhpcy5fYWNjb3VudE5hbWVQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdBY2NvdW50TmFtZVBhcmFtZXRlcicsXG4gICAgICAnL2NvbmZpZy9hY2NvdW50L25hbWUnXG4gICAgKTtcbiAgICB0aGlzLl90ZWFtSWRlbnRpZmllclBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ1RlYW1JZGVudGlmaWVyUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL3RlYW0vaWRlbnRpZmllcidcbiAgICApO1xuICAgIHRoaXMuX25pc3REYXRhTWlycm9yVXJsID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnTmlzdERhdGFNaXJyb3JVcmwnLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiAnL2NvbmZpZy9uaXN0LWRhdGEtbWlycm9yL3VybCcsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fY29kZVBpcGVsaW5lVHlwZSA9IHByb3BzLmNvZGVQaXBlbGluZVR5cGUgPz8gY29kZXBpcGVsaW5lLlBpcGVsaW5lVHlwZS5WMTtcblxuICAgIHRoaXMuX21haW5Db2RlQnVpbGRQcm9qZWN0ID0gdGhpcy5jcmVhdGVNYWluQ29kZUJ1aWxkUHJvamVjdChwcm9wcyk7XG4gICAgdGhpcy5hZGRNYWluUGlwZWxpbmUodGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3QsIHByb3BzKTtcblxuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5icmFuY2hQaXBlbGluZSkge1xuICAgICAgdGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCA9IHRoaXMuY3JlYXRlQnJhbmNoQ29kZUJ1aWxkUHJvamVjdChwcm9wcyk7XG4gICAgICB0aGlzLmFkZEJyYW5jaFBpcGVsaW5lKHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3QpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZmVhdHVyZXMudnVsbmVyYWJpbGl0eVBpcGVsaW5lKSB7XG4gICAgICB0aGlzLl92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdCA9IHRoaXMuY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkUHJvamVjdChwcm9wcyk7XG4gICAgICB0aGlzLmFkZFZ1bG5lcmFiaWxpdHlQaXBlbGluZSh0aGlzLl92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdCwgcHJvcHMpO1xuICAgIH1cblxuICAgIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgICBuZXcgQ2xhaWRvbWV0ZXIodGhpcywgJ0NsYWlkb21ldGVyJywge1xuICAgICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICAgIGZlYXR1cmUsXG4gICAgICB2ZXJzaW9uOiAnMS41LjAnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBtYWluQ29kZWJ1aWxkUHJvamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJyYW5jaENvZGVCdWlsZFByb2plY3QoKTogQ29kZUJ1aWxkU3RlcCB7XG4gICAgaWYgKHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBwaXBlbGluZSB0eXBlIHlvdSBoYXZlIHNlbGVjdGVkIGRvZXMgbm90IHN1cHBvcnQgYSBicmFuY2ggY29kZWJ1aWxkIHByb2plY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZ1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0KCk6IENvZGVCdWlsZFN0ZXAge1xuICAgIGlmICh0aGlzLl92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignVGhlIHBpcGVsaW5lIHR5cGUgeW91IGhhdmUgc2VsZWN0ZWQgZG9lcyBub3Qgc3VwcG9ydCBhIHZ1bG5lcmFiaWxpdHkgY29kZWJ1aWxkIHByb2plY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUZlYXR1cmVzKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpOiBQaXBlbGluZUZlYXR1cmVzIHtcbiAgICBpZiAocHJvcHMucGlwZWxpbmVUeXBlICYmIHByb3BzLmZlYXR1cmVzKSB7XG4gICAgICB0aHJvdyBFcnJvcignWW91IGNhbm5vdCBwcm92aWRlIGJvdGggYSBwaXBlbGluZVR5cGUgYW5kIGZlYXR1cmVzLiBQbGVhc2UgdXNlIGZlYXR1cmVzIG9ubHkuJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcz8ua2Fma2FJbnRlZ3JhdGlvbiAmJiAhcHJvcHMuZmVhdHVyZXM/LmdyYWRsZUJ1aWxkKSB7XG4gICAgICB0aHJvdyBFcnJvcignS2Fma2EgaW50ZWdyYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIHBpcGVsaW5lcyB3aXRoIGdyYWRsZSBidWlsZCcpO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZmVhdHVyZXM/LmZyb250ZW5kQnVja2V0TmFtZSAmJiAhcHJvcHMuZmVhdHVyZXM/Lm5wbUJ1aWxkKSB7XG4gICAgICB0aHJvdyBFcnJvcignRnJvbnRlbmQgYnVja2V0IG5hbWUgY2FuIG9ubHkgYmUgc2V0IHdoZW4gbnBtIGJ1aWxkIGlzIGVuYWJsZWQnKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzPy5hZGRpdGlvbmFsQnVpbGRDb21tYW5kcyAmJiBwcm9wcy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBjYW5ub3QgcHJvdmlkZSBhZGRpdGlvbmFsQnVpbGRDb21tYW5kcyBpZiB5b3UgdXNlIGEgcGFydGlhbEJ1aWxkU3BlY1BhdGguJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcyAmJiBwcm9wcy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnWW91IGFyZSB1c2luZyB0aGUgcGlwZWxpbmUgZmVhdHVyZXMgaW4gY29tYmluYXRpb24gd2l0aCBhIHBhcnRpYWxCdWlsZFNwZWNQYXRoLiBQbGVhc2Uga2VlcCBpbiBtaW5kLCB0aGF0IGFsbCBidWlsZHNwZWMgcmVsYXRlZCBmZWF0dXJlcyBhcmUgaWdub3JlZCBhbmQgdGhlIHBhcnRpYWxCdWlsZFNwZWMgaXMgYXBwbGllZC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMucGlwZWxpbmVUeXBlKSB7XG4gICAgICBzd2l0Y2ggKHByb3BzLnBpcGVsaW5lVHlwZSkge1xuICAgICAgICBjYXNlIFBpcGVsaW5lVHlwZS5TVEFOREFSRF9HUkFETEU6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgZ3JhZGxlQnVpbGQ6IHRydWUsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfR1JBRExFX0tBRktBOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicmFuY2hQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIGdyYWRsZUJ1aWxkOiB0cnVlLFxuICAgICAgICAgICAgbnBtQnVpbGQ6IGZhbHNlLFxuICAgICAgICAgICAga2Fma2FJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkU6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogZmFsc2UsXG4gICAgICAgICAgICBncmFkbGVCdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJyYW5jaFBpcGVsaW5lOiBwcm9wcy5mZWF0dXJlcz8uYnJhbmNoUGlwZWxpbmUgPz8gdHJ1ZSxcbiAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogcHJvcHMuZmVhdHVyZXM/LnZ1bG5lcmFiaWxpdHlQaXBlbGluZSA/PyB0cnVlLFxuICAgICAgZ3JhZGxlQnVpbGQ6IHByb3BzLmZlYXR1cmVzPy5ncmFkbGVCdWlsZCA/PyBmYWxzZSxcbiAgICAgIG5wbUJ1aWxkOiBwcm9wcy5mZWF0dXJlcz8ubnBtQnVpbGQgPz8gZmFsc2UsXG4gICAgICBrYWZrYUludGVncmF0aW9uOiBwcm9wcy5mZWF0dXJlcz8ua2Fma2FJbnRlZ3JhdGlvbiA/PyBmYWxzZSxcbiAgICAgIGZyb250ZW5kQnVja2V0TmFtZTogcHJvcHMuZmVhdHVyZXM/LmZyb250ZW5kQnVja2V0TmFtZSxcbiAgICAgIGFkZGl0aW9uYWxCdWlsZENvbW1hbmRzOiBwcm9wcy5mZWF0dXJlcz8uYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHMsXG4gICAgICBlbmFibGVQaXBlbGluZU1vbml0b3JzOiBwcm9wcy5mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycyA/PyB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNka091dHB1dERpcmVjdG9yeTogc3RyaW5nLFxuICAgIHRyaWdnZXJGaWxlOiBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gICAgYnVpbGRTcGVjOiBCdWlsZFNwZWMsXG4gICAgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wc1xuICApIHtcbiAgICByZXR1cm4gbmV3IFJpb0NvZGVCdWlsZFByb2plY3QodGhpcywgbmFtZSwge1xuICAgICAgaW5wdXQ6IHRyaWdnZXJGaWxlLFxuICAgICAgY2RrT3V0RGlyZWN0b3J5OiBjZGtPdXRwdXREaXJlY3RvcnksXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiBidWlsZFNwZWMsXG4gICAgICBidWlsZEVudmlyb25tZW50OiBwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8uYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiB0aGlzLl9ob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNYWluQ29kZUJ1aWxkUHJvamVjdChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgYnVpbGRTcGVjID1cbiAgICAgIHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHwgY3JlYXRlTWFpbkJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdChcbiAgICAgICdNYWluQnVpbGQnLFxuICAgICAgJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIGJ1aWxkU3BlYyxcbiAgICAgIHByb3BzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnJhbmNoQ29kZUJ1aWxkUHJvamVjdChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgYnVpbGRTcGVjID1cbiAgICAgIHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHwgY3JlYXRlTWFpbkJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdChcbiAgICAgICdCcmFuY2hCdWlsZCcsXG4gICAgICAnaW5mcmFzdHJ1Y3R1cmUvY2RrLm91dCcsXG4gICAgICB0aGlzLl9pbnB1dEJyYW5jaFRyaWdnZXJGaWxlLFxuICAgICAgYnVpbGRTcGVjLFxuICAgICAgcHJvcHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRQcm9qZWN0KHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCBidWlsZFNwZWMgPVxuICAgICAgdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnZ1bG5lcmFiaWxpdHlQYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHxcbiAgICAgIGNyZWF0ZVZ1bG5lcmFiaWxpdHlCdWlsZFNwZWModGhpcy5fZmVhdHVyZXMpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QoJ1Z1bG5lcmFiaWxpdHlDaGVja3MnLCAnLi8nLCB0aGlzLl9pbnB1dE1hc3RlclRyaWdnZXJGaWxlLCBidWlsZFNwZWMsIHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWFpblBpcGVsaW5lKG1haW5CdWlsZDogQ29kZUJ1aWxkU3RlcCwgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcykge1xuICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3IGNvZGVwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnUGlwZWxpbmUnLCB7XG4gICAgICBhcnRpZmFjdEJ1Y2tldDogdGhpcy5fY2FjaGVCdWNrZXQsXG4gICAgICBwaXBlbGluZVR5cGU6IHRoaXMuX2NvZGVQaXBlbGluZVR5cGUsXG4gICAgICByZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGU6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgY29kZVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUocGlwZWxpbmUsICdDb2RlUGlwZWxpbmUnLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHBpcGVsaW5lLFxuICAgICAgc3ludGg6IG1haW5CdWlsZCxcbiAgICAgIHNlbGZNdXRhdGlvbkNvZGVCdWlsZERlZmF1bHRzOiB7XG4gICAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFNQkRBXzFHQixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgVGFncy5vZihwaXBlbGluZSkuYWRkKCdwaXBlbGluZV90eXBlJywgJ2J1aWxkJyk7XG5cbiAgICBjb25zdCBzdHJpcEFzc2V0c1N0ZXAgPSB0aGlzLmNyZWF0ZVN0cmlwQXNzZXRzU3RlcChjb2RlUGlwZWxpbmUpO1xuICAgIGNvZGVQaXBlbGluZS5hZGRXYXZlKCdCZWZvcmVEZXBsb3knLCB7IHByZTogW3N0cmlwQXNzZXRzU3RlcF0gfSk7XG5cbiAgICBjb25zdCBjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAgPSB0aGlzLmNyZWF0ZUNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcChtYWluQnVpbGQsIHByb3BzKTtcbiAgICBjb25zdCBzZWNyZXRzRGVwbG95U3RlcFByb3BzID0gdGhpcy5jcmVhdGVTZWNyZXRzRGVwbG95U3RlcChwcm9wcyk7XG4gICAgY29uc3QgZnJvbnRlbmREZXBsb3lTdGVwID0gdGhpcy5jcmVhdGVEZXBsb3lGcm9udGVuZERlcGxveVN0ZXAobWFpbkJ1aWxkKTtcbiAgICBjb25zdCBwb3N0U3RlcHMgPSBbXTtcbiAgICBpZiAoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKSB7XG4gICAgICBwb3N0U3RlcHMucHVzaChjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXApO1xuICAgIH1cbiAgICBpZiAoZnJvbnRlbmREZXBsb3lTdGVwKSB7XG4gICAgICBwb3N0U3RlcHMucHVzaChmcm9udGVuZERlcGxveVN0ZXApO1xuICAgIH1cblxuICAgIGNvZGVQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBBcHBsaWNhdGlvbih0aGlzLCAnRGVwbG95QXBwbGljYXRpb25TdGFja3MnLCB7XG4gICAgICAgIGFwcFN0YWNrRmFjdG9yeTogcHJvcHMuYXBwU3RhY2tGYWN0b3J5LFxuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgIHZlcnNpb246IHByb2Nlc3MuZW52LlBJUEVMSU5FX0VYRUNVVElPTl9JRCA/PyAnUElQRUxJTkVfRVhFQ1VUSU9OX0lEIG5vdCBzZXQnLFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIHByZTogc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyA/IFtzZWNyZXRzRGVwbG95U3RlcFByb3BzXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdDogcG9zdFN0ZXBzLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KHN0cmlwQXNzZXRzU3RlcCwgJ3Byb2plY3RfdHlwZScsICdzdHJpcF9hc3NldHMnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3Qoc2VjcmV0c0RlcGxveVN0ZXBQcm9wcywgJ3Byb2plY3RfdHlwZScsICdkZXBsb3lfc2VjcmV0cycpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChtYWluQnVpbGQsICdwcm9qZWN0X3R5cGUnLCAnYnVpbGQnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9jYXBhYmlsaXR5X21vbml0b3JpbmcnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QoZnJvbnRlbmREZXBsb3lTdGVwLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9mcm9udGVuZCcpO1xuXG4gICAgaWYgKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCkge1xuICAgICAgY29uc3QgbW9uaXRvcmluZ1Rlc3RzdWl0ZVJ1bm5lckJ1Y2tldCA9IEJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgJ01vbml0b3JpbmdUZXN0c3VpdGVSdW5uZXJCdWNrZXQnLFxuICAgICAgICBgbW9uaXRvcmluZy10ZXN0c3VpdGUtcnVubmVyLSR7dGhpcy5hY2NvdW50fWBcbiAgICAgICk7XG4gICAgICBtb25pdG9yaW5nVGVzdHN1aXRlUnVubmVyQnVja2V0LmdyYW50V3JpdGUoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKTtcbiAgICB9XG4gICAgaWYgKGZyb250ZW5kRGVwbG95U3RlcCkge1xuICAgICAgY29uc3QgZnJvbnRlbmRCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ0Zyb250ZW5kQnVja2V0JywgdGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lISEpO1xuICAgICAgZnJvbnRlbmRCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoZnJvbnRlbmREZXBsb3lTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdQaXBlbGluZVNjaGVkdWxlJywge1xuICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKHByb3BzLnBpcGVsaW5lU2NoZWR1bGVzPy5tYWluUGlwZWxpbmUgfHwgJ2Nyb24oMCA5ID8gKiAyIzEgKiknKSxcbiAgICB9KTtcbiAgICBydWxlLmFkZFRhcmdldChuZXcgdGFyZ2V0cy5Db2RlUGlwZWxpbmUoY29kZVBpcGVsaW5lLnBpcGVsaW5lKSk7XG5cbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZShtYWluQnVpbGQpO1xuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX2FjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgICB0aGlzLmdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKG1haW5CdWlsZCwgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knKTtcbiAgICB9XG4gICAgY29kZVBpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKHN0cmlwQXNzZXRzU3RlcC5wcm9qZWN0KTtcblxuICAgIGlmICh0aGlzLl9mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycykge1xuICAgICAgbmV3IERhdGFkb2dQaXBlbGluZUVycm9yQWxlcnQodGhpcywgJ0RhdGFkb2dQaXBlbGluZUVycm9yTW9uaXRvcicsIHtcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICBwaXBlbGluZU5hbWU6IHBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEJyYW5jaFBpcGVsaW5lKGJyYW5jaEJ1aWxkOiBDb2RlQnVpbGRTdGVwKSB7XG4gICAgY29uc3QgYnJhbmNoUGlwZWxpbmUgPSBuZXcgY29kZXBpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdCcmFuY2hQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBicmFuY2hDb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZShicmFuY2hQaXBlbGluZSwgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogYnJhbmNoUGlwZWxpbmUsXG4gICAgICBzeW50aDogYnJhbmNoQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YoYnJhbmNoUGlwZWxpbmUpLmFkZCgncGlwZWxpbmVfdHlwZScsICdicmFuY2gnKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYWRkV2F2ZSgnQnJhbmNoQnVpbGQnKS5hZGRQb3N0KGJyYW5jaEJ1aWxkKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KGJyYW5jaEJ1aWxkLCAncHJvamVjdF90eXBlJywgJ2JyYW5jaF9idWlsZCcpO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgdGhpcy5fc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24pIHtcbiAgICAgIHRoaXMuZ3JhbnRQZXJtaXNzaW9uc0ZvckthZmthSW50ZWdyYXRpb24oYnJhbmNoQnVpbGQsICdCcmFuY2hLYWZrYUludGVncmF0aW9uUG9saWN5Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRWdWxuZXJhYmlsaXR5UGlwZWxpbmUodnVsbmVyYWJpbGl0eUJ1aWxkOiBDb2RlQnVpbGRTdGVwLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVBpcGVsaW5lID0gbmV3IGNvZGVwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnVnVsbmVyYWJpbGl0eVBpcGVsaW5lJywge1xuICAgICAgYXJ0aWZhY3RCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgICAgcGlwZWxpbmVUeXBlOiB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUsICdDb2RlUGlwZWxpbmUnLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSxcbiAgICAgIHN5bnRoOiB2dWxuZXJhYmlsaXR5QnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YodnVsbmVyYWJpbGl0eVBpcGVsaW5lKS5hZGQoJ3BpcGVsaW5lX3R5cGUnLCAndnVsbmVyYWJpbGl0eScpO1xuXG4gICAgdnVsbmVyYWJpbGl0eUNvZGVQaXBlbGluZS5hZGRXYXZlKCdWdWxuZXJhYmlsaXR5Q2hlY2tzJykuYWRkUG9zdCh2dWxuZXJhYmlsaXR5QnVpbGQpO1xuICAgIHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgIFRhZ3Mub2YodnVsbmVyYWJpbGl0eUJ1aWxkLnByb2plY3QpLmFkZCgncHJvamVjdF90eXBlJywgJ3Z1bG5lcmFiaWxpdHlfY2hlY2snKTtcbiAgICB0aGlzLl9uaXN0RGF0YU1pcnJvclVybC5ncmFudFJlYWQodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICBTb25hdHlwZU9zc0luZGV4Q3JlZGVudGlhbHMuYWxsb3dBY2Nlc3NUbyh0aGlzLCB2dWxuZXJhYmlsaXR5QnVpbGQpO1xuXG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZVNjaGVkdWxlJywge1xuICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKHByb3BzLnBpcGVsaW5lU2NoZWR1bGVzPy52dWxuZXJhYmlsaXR5UGlwZWxpbmUgfHwgJ2Nyb24oMCA1ID8gKiBNT04tRlJJICopJyksXG4gICAgfSk7XG4gICAgdnVsbmVyYWJpbGl0eVJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZSh2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lLnBpcGVsaW5lKSk7XG5cbiAgICBpZiAocHJvcHMuZGF0YWRvZ0FsZXJ0VHlwZSA9PT0gJ29wc2dlbmllJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdUaGUgT3BzR2VuaWUgYWxlcnRUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4gUGxlYXNlIHVzZSB0aGUgdnVsbmVyYWJpbGl0eU5vdGlmaWNhdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycykge1xuICAgICAgbmV3IERhdGFEb2dQaXBlbGluZUVycm9yQWxlcnRGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzKHRoaXMsICdEYXRhRG9nUGlwZWxpbmVFcnJvckZvclZ1bG5lcmFiaWxpdHlDaGVja3NNb25pdG9yJywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgIHBpcGVsaW5lTmFtZTogdnVsbmVyYWJpbGl0eVBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICAgIG5vdGlmaWNhdGlvbjogcHJvcHMudnVsbmVyYWJpbGl0eU5vdGlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RyaXBBc3NldHNTdGVwKHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKTogQ29kZUJ1aWxkU3RlcCB7XG4gICAgLy8gQ2xvdWRBc3NlbWJseUFydGlmYWN0cyBtdXN0IGJlIHNtYWxsZXIgdGhhbiAyNTZNQi4gRHVlIHRvIHRoZSBncmFkbGUgYXJ0aWZhY3Qgd2UgYXJlIGV4Y2VlZGluZyB0aGlzIGxpbWl0IGFuZCBwaXBlbGluZSBmYWlscyBpbiBkZXBsb3ltZW50IHN0ZXAuXG4gICAgLy8gSXNzdWUgaXMga25vd24gYW5kIG5vdCBmaXhlZCBmb3IgYWxyZWFkeSBzb21lIHllYXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgIC8vIERpcnR5IGZpeDogQXNzZXRzIGFyZSBhbHJlYWR5IHVwbG9hZGVkIGFuZCB0aHVzIG5vdCBuZWVkZWQuIFJlbW92ZSB0aGVtIGZyb20gcGlwZWxpbmUgYXJ0aWZhY3QuXG4gICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRTdGVwKCdTdHJpcEFzc2V0c0Zyb21Bc3NlbWJseScsIHtcbiAgICAgIGlucHV0OiBwaXBlbGluZS5jbG91ZEFzc2VtYmx5RmlsZVNldCxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdTM19QQVRIPSR7Q09ERUJVSUxEX1NPVVJDRV9WRVJTSU9OI1wiYXJuOmF3czpzMzo6OlwifScsXG4gICAgICAgICdaSVBfQVJDSElWRT0kKGJhc2VuYW1lICRTM19QQVRIKScsXG4gICAgICAgICdybSAtcmZ2IGFzc2V0LionLFxuICAgICAgICAnemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqJyxcbiAgICAgICAgJ2F3cyBzMyBjcCAkWklQX0FSQ0hJVkUgczM6Ly8kUzNfUEFUSCcsXG4gICAgICBdLFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAoXG4gICAgbWFpbkJ1aWxkOiBDb2RlQnVpbGRTdGVwLFxuICAgIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHNcbiAgKTogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3BzLm1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMpIHtcbiAgICAgIGNvbnN0IG1vbml0b3JpbmdBcnRpZmFjdHMgPSBPYmplY3Qua2V5cyhwcm9wcy5tb25pdG9yaW5nRGVwbG95U3RlcFByb3BzLm1vbml0b3JpbmdBcnRpZmFjdHMpLm1hcChrZXkgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBtYWluQnVpbGQuYWRkT3V0cHV0RGlyZWN0b3J5KGtleSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5wdXQ6IG91dHB1dCxcbiAgICAgICAgICBmaWxlczogcHJvcHMubW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcyEubW9uaXRvcmluZ0FydGlmYWN0c1trZXldLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95Q2FwYWJpbGl0eU1vbml0b3JpbmcnLCB7XG4gICAgICAgIG1vbml0b3JpbmdBcnRpZmFjdHM6IG1vbml0b3JpbmdBcnRpZmFjdHMsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3JldHNEZXBsb3lTdGVwKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpOiByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzKSB7XG4gICAgICByZXR1cm4gbmV3IHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95U2VjcmV0cycsIHtcbiAgICAgICAgLi4ucHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyxcbiAgICAgICAgaW5wdXQ6IHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveUZyb250ZW5kRGVwbG95U3RlcChtYWluQnVpbGQ6IENvZGVCdWlsZFN0ZXApOiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZnJvbnRlbmRCdWlsZE91dHB1dCA9IG1haW5CdWlsZC5hZGRPdXRwdXREaXJlY3RvcnkoJ2J1aWxkJyk7XG4gICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRTdGVwKCdEZXBsb3lGcm9udGVuZCcsIHtcbiAgICAgIGlucHV0OiBmcm9udGVuZEJ1aWxkT3V0cHV0LFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICB9LFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgYGF3cyBzMyBzeW5jIC0tZXhjbHVkZSBpbmRleC5odG1sIC0tY2FjaGUtY29udHJvbCBtYXgtYWdlPTMxNTM2MDAwIC4vICdzMzovLyR7dGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lfSdgLFxuICAgICAgICBgYXdzIHMzIGNwIC0tY2FjaGUtY29udHJvbCBuby1jYWNoZSBpbmRleC5odG1sICdzMzovLyR7dGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lfSdgLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRQZXJtaXNzaW9uc0ZvckthZmthSW50ZWdyYXRpb24oYnVpbGRQcm9qZWN0OiBSaW9Db2RlQnVpbGRQcm9qZWN0LCBwb2xpY3lJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVpbGRQcm9qZWN0Um9sZSA9IGJ1aWxkUHJvamVjdC5wcm9qZWN0LnJvbGU7XG4gICAgaWYgKGJ1aWxkUHJvamVjdFJvbGUpIHtcbiAgICAgIGJ1aWxkUHJvamVjdFJvbGUuYWRkTWFuYWdlZFBvbGljeShcbiAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tTWFuYWdlZFBvbGljeUFybih0aGlzLCBwb2xpY3lJZCwgRm4uaW1wb3J0VmFsdWUoJ2thZmthLWludGVncmF0aW9uLXBvbGljeS1hcm4nKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGFkZCBtYW5hZ2VkIHBvbGljeSBmb3Iga2Fma2EtaW50ZWdyYXRpb24gdG8gQ29kZUJ1aWxkIHByb2plY3Qgb2YgJHtidWlsZFByb2plY3QuaWR9IGR1ZSB0byBtaXNzaW5nIHJvbGUuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRCdWlsZFNwZWNGcm9tRmlsZShidWlsZFNwZWNQYXRoPzogc3RyaW5nKTogQnVpbGRTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWJ1aWxkU3BlY1BhdGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBCdWlsZFNwZWMuZnJvbU9iamVjdCh5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKGJ1aWxkU3BlY1BhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIGFzIE9iamVjdCk7XG4gIH1cblxuICBwcml2YXRlIHRhZ0NvZGVCdWlsZFByb2plY3QocHJvamVjdDogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAocHJvamVjdCkge1xuICAgICAgVGFncy5vZihwcm9qZWN0LnByb2plY3QpLmFkZChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -236,6 +236,7 @@ function createUploadResources(scope, configuration, sourceAssets) {
236
236
  memorySize: 256,
237
237
  timeout: aws_cdk_lib_1.Duration.minutes(1),
238
238
  });
239
+ uploadFunction.permissionsNode.defaultChild.tags.setTag('Watchful', 'False');
239
240
  for (const asset of sourceAssets) {
240
241
  asset.grantRead(uploadFunction);
241
242
  }
@@ -355,4 +356,4 @@ function parseTagsWithValidUniqueKeys(tags, propertyName, allowManagedTags = fal
355
356
  function optionalTags(tags) {
356
357
  return tags === undefined ? {} : { tags };
357
358
  }
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBa0U7QUFDbEUsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwQ0FBMEM7QUFDMUMsMERBQXFEO0FBQ3JELDJDQUFzRDtBQVF0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0sb0JBQW9CLEdBQUcsc0NBQXNDLENBQUM7QUFDcEUsTUFBTSx1QkFBdUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNwRCxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBRXhEOzs7O0dBSUc7QUFDSCxJQUFZLGFBS1g7QUFMRCxXQUFZLGFBQWE7SUFDdkIsOEJBQWEsQ0FBQTtJQUNiLDRDQUEyQixDQUFBO0lBQzNCLDRDQUEyQixDQUFBO0lBQzNCLDhDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFMVyxhQUFhLDZCQUFiLGFBQWEsUUFLeEI7QUE0SEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFDekQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QztRQUNoRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZSxD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Q0FBQyxJQUFJLGNBQWMsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLFNBQVMsR0FBRyxnRUFBZ0UsQ0FBQyxDQUFDO1FBQy9HLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN6QyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFlBQVksa0NBQWtDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQWU7SUFDbkMsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblJlc291cmNlLCBEdXJhdGlvbiwgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgZXZlbnRzVGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzM0Fzc2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERFRkFVTFRfTk9ERV9SVU5USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIGRhdGFkb2d2MiBmcm9tICcuLi9kYXRhZG9ndjInO1xuaW1wb3J0IHsgUmlvTGFuZGluZ1pvbmUgfSBmcm9tICcuLi9yaW8tbGFuZGluZy16b25lJztcbmltcG9ydCB7IFNCT01fQ0FUQUxPR19CVUNLRVRfQVJOIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUge1xuICBBc3NldExvY2F0aW9uLFxuICBDYXRhbG9nVXBsb2FkQ29uZmlndXJhdGlvbixcbiAgU3RhbmRhbG9uZVVwbG9hZENvbmZpZ3VyYXRpb24sXG4gIFVwbG9hZENvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4vbGFtYmRhL3R5cGVzJztcblxuY29uc3QgREVGQVVMVF9WRVJTSU9OID0gJ21haW4nO1xuY29uc3QgTUFYX0NISUxEUkVOID0gMztcbmNvbnN0IE1BTkFHRURfVEFHX0tFWVMgPSBuZXcgU2V0KFsnYWNjb3VudF9pZCcsICd0ZWFtX2lkZW50aWZpZXInLCAnbGljZW5zZV9wb2xpY3knXSk7XG5jb25zdCBVUExPQURfRlVOQ1RJT05fVVVJRCA9ICdkMjBiOWY0Ni0wNzAyLTQ3ZGQtODljMi05ZWE0YmRkYWFjZmMnO1xuY29uc3QgVVBMT0FEX0ZVTkNUSU9OX1BVUlBPU0UgPSAnU2JvbUNhdGFsb2dVcGxvYWQnO1xuY29uc3QgVVBMT0FEX0xPR19HUk9VUF9JRCA9ICdTYm9tQ2F0YWxvZ1VwbG9hZExvZ0dyb3VwJztcblxuLyoqXG4gKiBFbnVtIHRvIHNwZWNpZnkgd2hpY2ggbGljZW5zZSBwb2xpY3kgc2hvdWxkIGFwcGxpZWQuXG4gKlxuICogQGJldGFcbiAqL1xuZXhwb3J0IGVudW0gTGljZW5zZVBvbGljeSB7XG4gIE5PTkUgPSAnbm9uZScsXG4gIEpWTV9CQUNLRU5EID0gJ2p2bS1iYWNrZW5kJyxcbiAgTlBNX0JBQ0tFTkQgPSAnbnBtLWJhY2tlbmQnLFxuICBOUE1fRlJPTlRFTkQgPSAnbnBtLWZyb250ZW5kJyxcbn1cblxuLyoqXG4gKiBOb3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgYW4gU0JPTSBjYXRhbG9nIHZ1bG5lcmFiaWxpdHkgbW9uaXRvci5cbiAqXG4gKiBAYmV0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNib21DYXRhbG9nVnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcyB7XG4gIC8qKiBOb3RpZmljYXRpb24gc2VudCB3aGVuIHRoZSB2dWxuZXJhYmlsaXR5IG1vbml0b3IgY2hhbmdlcyBzdGF0ZS4gKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uOiBkYXRhZG9ndjIuSU5vdGlmaWNhdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB7QGxpbmsgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdH0uXG4gKlxuICogQGJldGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFsb25lU2JvbUNhdGFsb2dQcm9qZWN0UHJvcHMge1xuICAvKiogTXVzdCBiZSBub24tZW1wdHkgYW5kIG11c3Qgbm90IGNvbnRhaW4gYC9gLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFByb2plY3QgdmVyc2lvbi4gRGVmYXVsdHMgdG8gYG1haW5gLiAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb2plY3QgdGFncyB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgYWRkZWQgZnJvbSB0aGUgUklPIExhbmRpbmcgWm9uZSBjb25maWd1cmF0aW9uLiBEbyBub3QgcHJvdmlkZSBgdGVhbV9pZGVudGlmaWVyYCBvclxuICAgKiBgYWNjb3VudF9pZGA7IGJvdGggYXJlIG1hbmFnZWQgdGFnIGtleXMuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsVGFncz86IHN0cmluZ1tdO1xuXG4gIC8qKiBKU09OIFNCT00gZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHNib206IHMzQXNzZXRzLkFzc2V0O1xuXG4gIC8qKiBPcHRpb25hbCBKU09OIFZFWCBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgdmV4PzogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIHRoZSBtb25pdG9yIHVzZXMge0BsaW5rIGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb259LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIEEgdnVsbmVyYWJpbGl0eSBtb25pdG9yIHVzaW5nIHtAbGluayBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9ufVxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcz86IFNib21DYXRhbG9nVnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYW5kYXRvcnkgbGljZW5zZSBwb2xpY3kgdG8gYmUgYXBwbGllZCB0byB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIFVzZSBgTGljZW5zZVBvbGljeS5OT05FYCBpbiBleGNlcHRpb25hbCBjYXNlcyBvbmx5IVxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZVBvbGljeTogTGljZW5zZVBvbGljeTtcbn1cblxuLyoqXG4gKiBBIGNoaWxkIHByb2plY3QgaW4gYW4gU0JPTSBjYXRhbG9nIGNvbGxlY3Rpb24uXG4gKlxuICogQGJldGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZCB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIG5vbi1lbXB0eSwgdW5pcXVlIHdpdGhpbiB0aGUgY29sbGVjdGlvbiwgYW5kIG11c3Qgbm90IGNvbnRhaW4gYC9gLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBDaGlsZCBwcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBhZGRlZCB0byB0aGlzIGNoaWxkLCB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBDaGlsZCB0YWdzIG92ZXJyaWRlIHNoYXJlZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgaW5oZXJpdGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmVcbiAgICogY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3IgYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1hbmRhdG9yeSBsaWNlbnNlIHBvbGljeSB0byBiZSBhcHBsaWVkIHRvIHRoaXMgcHJvamVjdC5cbiAgICpcbiAgICogVXNlIGBMaWNlbnNlUG9saWN5Lk5PTkVgIGluIGV4Y2VwdGlvbmFsIGNhc2VzIG9ubHkhXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlUG9saWN5OiBMaWNlbnNlUG9saWN5O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHtAbGluayBTYm9tQ2F0YWxvZ1Byb2plY3R9LlxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JvbUNhdGFsb2dQcm9qZWN0UHJvcHMge1xuICAvKiogQ29sbGVjdGlvbiBuYW1lIHN0b3JlZCBpbiB0aGUgbWFuaWZlc3QgYW5kIHVzZWQgaW4gdGhlIGRlc3RpbmF0aW9uIGtleS4gKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvbk5hbWU6IHN0cmluZztcblxuICAvKiogQ29sbGVjdGlvbiB2ZXJzaW9uLiBEZWZhdWx0cyB0byBgbWFpbmAuICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYWdzIGluaGVyaXRlZCBieSBldmVyeSBjaGlsZCwgdXNpbmcgdGhlIGBrZXk6dmFsdWVgIGZvcm1hdC5cbiAgICpcbiAgICogQSBjaGlsZCdzIGFkZGl0aW9uYWwgdGFncyBvdmVycmlkZSBzaGFyZWQgdGFncyB3aXRoIHRoZSBzYW1lIGtleS4gYHRlYW1faWRlbnRpZmllcmAgaXMgYWx3YXlzIGFkZGVkIGZyb20gdGhlIFJJT1xuICAgKiBMYW5kaW5nIFpvbmUgY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3IgYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcmVkVGFncz86IHN0cmluZ1tdO1xuXG4gIC8qKiBDaGlsZCBjYXRhbG9nIHByb2plY3RzLiBNdXN0IGNvbnRhaW4gYmV0d2VlbiBvbmUgYW5kIHRocmVlIHByb2plY3RzLiAqL1xuICByZWFkb25seSBjaGlsZHJlbjogU2JvbUNhdGFsb2dQcm9qZWN0Q2hpbGRbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdnVsbmVyYWJpbGl0eSBtb25pdG9yIGNvbmZpZ3VyYXRpb24gc2hhcmVkIGJ5IGFsbCBjaGlsZCBtb25pdG9ycy5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCB0aGUgbW9uaXRvcnMgdXNlIHtAbGluayBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9ufS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBWdWxuZXJhYmlsaXR5IG1vbml0b3JzIHVzaW5nIHtAbGluayBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9ufVxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcz86IFNib21DYXRhbG9nVnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcztcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgb25lIHByb2plY3QncyBTQk9NIGFuZCBvcHRpb25hbCBWRVggaW4gdGhlIGNlbnRyYWwgU0JPTSBjYXRhbG9nLlxuICpcbiAqIFVzZSB0aGlzIGNvbnN0cnVjdCB3aGVuIGEgc3RhY2sgb3ducyBvbmUgaW5kZXBlbmRlbnRseSB2ZXJzaW9uZWQgcHJvamVjdC4gVGhlIGZpbGVzIGFyZSB1cGxvYWRlZCBhZnRlciB0aGUgc3RhY2tcbiAqIHJlYWNoZXMgYENSRUFURV9DT01QTEVURWAgb3IgYFVQREFURV9DT01QTEVURWAuIFRoZSBFdmVudEJyaWRnZSBldmVudCB0aW1lIGFuZCBJRCBpZGVudGlmeSB0aGUgdXBsb2FkLlxuICpcbiAqIFRoZSBjb25zdHJ1Y3QgYXV0b21hdGljYWxseSBhZGRzIHRoZSBSSU8gTGFuZGluZyBab25lIGB0ZWFtX2lkZW50aWZpZXJgIHRhZyBhbmQgZ3JhbnRzIHRoZSBnZW5lcmF0ZWQgdXBsb2FkIExhbWJkYVxuICogcGVybWlzc2lvbiB0byByZWFkIHRoZSBzb3VyY2UgYXNzZXRzIGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBjZW50cmFsIGNhdGFsb2cgYnVja2V0LiBBbGwgU0JPTSBjYXRhbG9nIGNvbnN0cnVjdHMgaW5cbiAqIHRoZSBzYW1lIHN0YWNrIHJldXNlIG9uZSB1cGxvYWQgTGFtYmRhLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGB0c1xuICogY29uc3Qgc2JvbSA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnU2JvbUFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvc2JvbS5qc29uJyxcbiAqIH0pO1xuICogY29uc3QgdmV4ID0gbmV3IHMzQXNzZXRzLkFzc2V0KHRoaXMsICdWZXhBc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL3ZleC5qc29uJyxcbiAqIH0pO1xuICpcbiAqIG5ldyBTdGFuZGFsb25lU2JvbUNhdGFsb2dQcm9qZWN0KHRoaXMsICdDYXRhbG9nVXBsb2FkJywge1xuICogICBuYW1lOiAnYmlsbGluZy1hcGknLFxuICogICB2ZXJzaW9uOiAnMS40LjAnLFxuICogICBhZGRpdGlvbmFsVGFnczogWydjb21wb25lbnQ6YmFja2VuZCddLFxuICogICBzYm9tLFxuICogICB2ZXgsXG4gKiAgIHZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM6IHtcbiAqICAgICBub3RpZmljYXRpb246IG5ldyBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9uKCksXG4gKiAgIH0sXG4gKiAgIGxpY2Vuc2VQb2xpY3k6IGxpY2Vuc2VQb2xpY3kuSlZNX0JBQ0tFTkQsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFsb25lU2JvbUNhdGFsb2dQcm9qZWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcHJvcHMudmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT047XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCB0YWdzID1cbiAgICAgIG1lcmdlVGFncyhcbiAgICAgICAgYWRkTGljZW5zZVBvbGljeVRhZ0lmUmVxdWlyZWQoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMubGljZW5zZVBvbGljeSksXG4gICAgICAgIHByb3BzLmFkZGl0aW9uYWxUYWdzXG4gICAgICApID8/IFtdO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnbmFtZScsIHByb3BzLm5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbigndmVyc2lvbicsIHZlcnNpb24pO1xuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMocHJvcHMuYWRkaXRpb25hbFRhZ3MgPz8gW10sICdhZGRpdGlvbmFsVGFncycpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBTdGFuZGFsb25lVXBsb2FkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG9yaWdpbkFjY291bnRJZDogc3RhY2suYWNjb3VudCxcbiAgICAgIG9yaWdpbkFjY291bnROYW1lOiBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZSxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdGFncyxcbiAgICAgIHNib206IGFzc2V0TG9jYXRpb24ocHJvcHMuc2JvbSksXG4gICAgICAuLi4ocHJvcHMudmV4ID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdmV4OiBhc3NldExvY2F0aW9uKHByb3BzLnZleCkgfSksXG4gICAgfTtcblxuICAgIGNyZWF0ZVVwbG9hZFJlc291cmNlcyh0aGlzLCBjb25maWd1cmF0aW9uLCBbcHJvcHMuc2JvbSwgLi4uKHByb3BzLnZleCA9PT0gdW5kZWZpbmVkID8gW10gOiBbcHJvcHMudmV4XSldKTtcbiAgICBjcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvcih7XG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIHByb2plY3ROYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgYWNjb3VudE5hbWU6IGNvbmZpZ3VyYXRpb24ub3JpZ2luQWNjb3VudE5hbWUsXG4gICAgICBub3RpZmljYXRpb246IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHByb2plY3QgU0JPTXMgYW5kIG9wdGlvbmFsIFZFWCBmaWxlcyBpbiB0aGUgY2VudHJhbCBTQk9NIGNhdGFsb2cuXG4gKlxuICogVXNlIHRoaXMgY29uc3RydWN0IHdoZW4gb25lIHN0YWNrIHByb2R1Y2VzIGJldHdlZW4gb25lIGFuZCB0aHJlZSByZWxhdGVkIHByb2plY3RzIHRoYXQgc2hvdWxkIHNoYXJlIGEgY2F0YWxvZ1xuICogY29sbGVjdGlvbi4gU2hhcmVkIHRhZ3MgYXJlIGluaGVyaXRlZCBieSBldmVyeSBjaGlsZCwgd2hpbGUgY2hpbGQgdGFncyB3aXRoIHRoZSBzYW1lIGtleSBvdmVycmlkZSB0aGVtLiBUaGUgUklPXG4gKiBMYW5kaW5nIFpvbmUgYHRlYW1faWRlbnRpZmllcmAgdGFnIGlzIGFsd2F5cyBpbmNsdWRlZC5cbiAqXG4gKiBUaGUgZmlsZXMgYXJlIHVwbG9hZGVkIGFmdGVyIHRoZSBzdGFjayByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZVxuICogYW5kIElEIGlkZW50aWZ5IHRoZSB1cGxvYWQuIEFsbCBTQk9NIGNhdGFsb2cgY29uc3RydWN0cyBpbiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IGFwaVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0FwaVNib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL2FwaS1zYm9tLmpzb24nLFxuICogfSk7XG4gKiBjb25zdCBpbmZyYXN0cnVjdHVyZVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0luZnJhc3RydWN0dXJlU2JvbUFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvaW5mcmFzdHJ1Y3R1cmUtc2JvbS5qc29uJyxcbiAqIH0pO1xuICpcbiAqIG5ldyBTYm9tQ2F0YWxvZ1Byb2plY3QodGhpcywgJ0NhdGFsb2dVcGxvYWQnLCB7XG4gKiAgIGNvbGxlY3Rpb25OYW1lOiAnYmlsbGluZycsXG4gKiAgIGNvbGxlY3Rpb25WZXJzaW9uOiAnMS40LjAnLFxuICogICBzaGFyZWRUYWdzOiBbJ2RvbWFpbjpiaWxsaW5nJ10sXG4gKiAgIGNoaWxkcmVuOiBbXG4gKiAgICAge1xuICogICAgICAgbmFtZTogJ2FwaScsXG4gKiAgICAgICBzYm9tOiBhcGlTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgICAgIGxpY2Vuc2VQb2xpY3k6IExpY2Vuc2VQb2xpY3kuSlZNX0JBQ0tFTkQsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBuYW1lOiAnaW5mcmFzdHJ1Y3R1cmUnLFxuICogICAgICAgc2JvbTogaW5mcmFzdHJ1Y3R1cmVTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmluZnJhc3RydWN0dXJlJ10sXG4gKiAqICAgICAgIGxpY2Vuc2VQb2xpY3k6IExpY2Vuc2VQb2xpY3kuTlBNX0JBQ0tFTkQsXG4gKiAgICAgfSxcbiAqICAgXSxcbiAqICAgdnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wczoge1xuICogICAgIG5vdGlmaWNhdGlvbjogbmV3IGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb24oKSxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGJldGFcbiAqL1xuZXhwb3J0IGNsYXNzIFNib21DYXRhbG9nUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uVmVyc2lvbiA9IHByb3BzLmNvbGxlY3Rpb25WZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCB0ZWFtSWRlbnRpZmllciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY29sbGVjdGlvbk5hbWUnLCBwcm9wcy5jb2xsZWN0aW9uTmFtZSk7XG4gICAgYXNzZXJ0Tm9uRW1wdHlWZXJzaW9uKCdjb2xsZWN0aW9uVmVyc2lvbicsIGNvbGxlY3Rpb25WZXJzaW9uKTtcbiAgICB2YWxpZGF0ZUNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHByb3BzLnNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJyk7XG4gICAgY29uc3Qgc2hhcmVkVGFncyA9IG1lcmdlVGFncyhbYHRlYW1faWRlbnRpZmllcjoke3RlYW1JZGVudGlmaWVyfWBdLCBwcm9wcy5zaGFyZWRUYWdzKSA/PyBbXTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBvcmlnaW5BY2NvdW50SWQ6IHN0YWNrLmFjY291bnQsXG4gICAgICBvcmlnaW5BY2NvdW50TmFtZTogUmlvTGFuZGluZ1pvbmUuZ2V0QWNjb3VudE5hbWVQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWUsXG4gICAgICBjb2xsZWN0aW9uTmFtZTogcHJvcHMuY29sbGVjdGlvbk5hbWUsXG4gICAgICBjb2xsZWN0aW9uVmVyc2lvbixcbiAgICAgIHRhZ3M6IFtgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YF0sXG4gICAgICBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4ubWFwKGNoaWxkID0+ICh7XG4gICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICAgIHZlcnNpb246IGNoaWxkLnZlcnNpb24gPz8gREVGQVVMVF9WRVJTSU9OLFxuICAgICAgICAuLi5vcHRpb25hbFRhZ3MoXG4gICAgICAgICAgbWVyZ2VUYWdzKGFkZExpY2Vuc2VQb2xpY3lUYWdJZlJlcXVpcmVkKHNoYXJlZFRhZ3MsIGNoaWxkLmxpY2Vuc2VQb2xpY3kpLCBjaGlsZC5hZGRpdGlvbmFsVGFncylcbiAgICAgICAgKSxcbiAgICAgICAgc2JvbTogYXNzZXRMb2NhdGlvbihjaGlsZC5zYm9tKSxcbiAgICAgICAgLi4uKGNoaWxkLnZleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZleDogYXNzZXRMb2NhdGlvbihjaGlsZC52ZXgpIH0pLFxuICAgICAgfSkpLFxuICAgIH07XG5cbiAgICBjcmVhdGVVcGxvYWRSZXNvdXJjZXMoXG4gICAgICB0aGlzLFxuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHByb3BzLmNoaWxkcmVuLmZsYXRNYXAoY2hpbGQgPT4gW2NoaWxkLnNib20sIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IFtdIDogW2NoaWxkLnZleF0pXSlcbiAgICApO1xuXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gcHJvcHMudnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcz8ubm90aWZpY2F0aW9uID8/IG5ldyBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9uKCk7XG4gICAgcHJvcHMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PlxuICAgICAgY3JlYXRlVnVsbmVyYWJpbGl0eU1vbml0b3Ioe1xuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgICAgcHJvamVjdE5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICAgIGFjY291bnROYW1lOiBjb25maWd1cmF0aW9uLm9yaWdpbkFjY291bnROYW1lLFxuICAgICAgICBub3RpZmljYXRpb24sXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHMge1xuICByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuICByZWFkb25seSBwcm9qZWN0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhY2NvdW50TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBub3RpZmljYXRpb246IGRhdGFkb2d2Mi5JTm90aWZpY2F0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvcihwcm9wczogQ3JlYXRlVnVsbmVyYWJpbGl0eU1vbml0b3JQcm9wcyk6IHZvaWQge1xuICBjb25zdCBtb25pdG9yID0gbmV3IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvcihwcm9wcy5zY29wZSwgYCR7cHJvcHMucHJvamVjdE5hbWV9VnVsbmVyYWJpbGl0eU1vbml0b3JgLCB7XG4gICAgbmFtZTogYCR7cHJvcHMuYWNjb3VudE5hbWV9IFZ1bG5lcmFiaWxpdHlNb25pdG9yYCxcbiAgICBzZXJ2aWNlTmFtZTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgbW9uaXRvclR5cGU6IGRhdGFkb2d2Mi5EYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLk1FVFJJQ19BTEVSVCxcbiAgICAvLyBEZXBlbmRlbmN5LVRyYWNrIGVtaXRzIHNlcGFyYXRlIGdhdWdlIHZhbHVlcyBhZnRlciBCT00gYW5kIFZFWCBwcm9jZXNzaW5nOyBldmFsdWF0ZSBib3RoIGFmdGVyIHRoZXkgc2V0dGxlLlxuICAgIHF1ZXJ5OiBgbWluKGxhc3RfM20pOm1heDpzZXJ2aWNlLnZ1bG5lcmFiaWxpdGllc3twcm9qZWN0X25hbWU6JHtwcm9wcy5wcm9qZWN0TmFtZX19ID4gMGAsXG4gICAgbG93ZXJjYXNlUXVlcnk6IHRydWUsXG4gICAgbWVzc2FnZTogW1xuICAgICAgJ3t7I2lzX2FsZXJ0fX0nLFxuICAgICAgYFByb2plY3QgJHtwcm9wcy5wcm9qZWN0TmFtZX0gaGFzIHt7dmFsdWV9fSBrbm93biB2dWxuZXJhYmlsaXRpZXMuYCxcbiAgICAgICd7ey9pc19hbGVydH19JyxcbiAgICAgICcnLFxuICAgICAgJ3t7I2lzX3JlY292ZXJ5fX0nLFxuICAgICAgYFByb2plY3QgJHtwcm9wcy5wcm9qZWN0TmFtZX0gbm8gbG9uZ2VyIHJlcG9ydHMgdnVsbmVyYWJpbGl0aWVzLmAsXG4gICAgICAne3svaXNfcmVjb3Zlcnl9fScsXG4gICAgXS5qb2luKCdcXG4nKSxcbiAgICBub3RpZmljYXRpb246IHByb3BzLm5vdGlmaWNhdGlvbixcbiAgICBwcmlvcml0eTogMyxcbiAgICBleHRyYVRhZ3M6IFsnbW9uaXRvcl90eXBlOnZ1bG5lcmFiaWxpdHknXSxcbiAgICBvcHRpb25PdmVycmlkZXM6IHtcbiAgICAgIGV2YWx1YXRpb25EZWxheTogMTgwLFxuICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICBjcml0aWNhbDogMCxcbiAgICAgIH0sXG4gICAgICBvbk1pc3NpbmdEYXRhOiBkYXRhZG9ndjIuTW9uaXRvck9uTWlzc2luZ0RhdGEuREVGQVVMVCxcbiAgICAgIHJlcXVpcmVGdWxsV2luZG93OiBmYWxzZSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBgb25fbWlzc2luZ19kYXRhYCByZXBsYWNlcyB0aGUgbGVnYWN5IG5vLWRhdGEgb3B0aW9ucyBhbmQga2VlcHMgdGhlIGxhc3Qga25vd24gc3RhdHVzIGZvciBnYXVnZSBtZXRyaWNzLlxuICBjb25zdCBtb25pdG9yUmVzb3VyY2UgPSBtb25pdG9yLm5vZGUuZmluZENoaWxkKCdNb25pdG9yJykgYXMgQ2ZuUmVzb3VyY2U7XG4gIG1vbml0b3JSZXNvdXJjZS5hZGREZWxldGlvbk92ZXJyaWRlKCdQcm9wZXJ0aWVzLk9wdGlvbnMuTm90aWZ5Tm9EYXRhJyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFJlc291cmNlcyhcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgY29uZmlndXJhdGlvbjogVXBsb2FkQ29uZmlndXJhdGlvbixcbiAgc291cmNlQXNzZXRzOiBzM0Fzc2V0cy5Bc3NldFtdXG4pOiB2b2lkIHtcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgY29uc3QgdXBsb2FkRnVuY3Rpb24gPSBuZXcgbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uKHNjb3BlLCAnVXBsb2FkRnVuY3Rpb24nLCB7XG4gICAgdXVpZDogVVBMT0FEX0ZVTkNUSU9OX1VVSUQsXG4gICAgbGFtYmRhUHVycG9zZTogVVBMT0FEX0ZVTkNUSU9OX1BVUlBPU0UsXG4gICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICBoYW5kbGVyOiAnaGFuZGxlci5oYW5kbGVyJyxcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2xhbWJkYScpLCB7XG4gICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgfSksXG4gICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICBsb2dHcm91cDogZ2V0T3JDcmVhdGVVcGxvYWRMb2dHcm91cChzdGFjayksXG4gICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ3MzOlB1dE9iamVjdCddLFxuICAgICAgICByZXNvdXJjZXM6IFtgJHtTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTn0vKmBdLFxuICAgICAgfSksXG4gICAgXSxcbiAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBzb3VyY2VBc3NldHMpIHtcbiAgICBhc3NldC5ncmFudFJlYWQodXBsb2FkRnVuY3Rpb24pO1xuICB9XG5cbiAgbmV3IGV2ZW50cy5SdWxlKHNjb3BlLCAnU3RhY2tDb21wbGV0aW9uUnVsZScsIHtcbiAgICBldmVudFBhdHRlcm46IHtcbiAgICAgIHNvdXJjZTogWydhd3MuY2xvdWRmb3JtYXRpb24nXSxcbiAgICAgIGRldGFpbFR5cGU6IFsnQ2xvdWRGb3JtYXRpb24gU3RhY2sgU3RhdHVzIENoYW5nZSddLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgICdzdGFjay1pZCc6IFtzdGFjay5zdGFja0lkXSxcbiAgICAgICAgJ3N0YXR1cy1kZXRhaWxzJzoge1xuICAgICAgICAgIHN0YXR1czogWydDUkVBVEVfQ09NUExFVEUnLCAnVVBEQVRFX0NPTVBMRVRFJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgdGFyZ2V0czogW1xuICAgICAgbmV3IGV2ZW50c1RhcmdldHMuTGFtYmRhRnVuY3Rpb24odXBsb2FkRnVuY3Rpb24sIHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgZXZlbnRJZDogZXZlbnRzLkV2ZW50RmllbGQuZXZlbnRJZCxcbiAgICAgICAgICBldmVudFRpbWU6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckLnRpbWUnKSxcbiAgICAgICAgICBzdGFja0lkOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC5kZXRhaWwuc3RhY2staWQnKSxcbiAgICAgICAgICBzdGFja1N0YXR1czogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YXR1cy1kZXRhaWxzLnN0YXR1cycpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2s6IFN0YWNrKTogbG9ncy5Mb2dHcm91cCB7XG4gIGNvbnN0IGV4aXN0aW5nTG9nR3JvdXAgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChVUExPQURfTE9HX0dST1VQX0lEKTtcbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgaW5zdGFuY2VvZiBsb2dzLkxvZ0dyb3VwKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nTG9nR3JvdXA7XG4gIH1cbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgYWxyZWFkeSBjb250YWlucyBhIGNvbnN0cnVjdCBuYW1lZCAnJHtVUExPQURfTE9HX0dST1VQX0lEfSdgKTtcbiAgfVxuICByZXR1cm4gbmV3IGxvZ3MuTG9nR3JvdXAoc3RhY2ssIFVQTE9BRF9MT0dfR1JPVVBfSUQsIHtcbiAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2V0TG9jYXRpb24oYXNzZXQ6IHMzQXNzZXRzLkFzc2V0KTogQXNzZXRMb2NhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgYnVja2V0TmFtZTogYXNzZXQuczNCdWNrZXROYW1lLFxuICAgIG9iamVjdEtleTogYXNzZXQuczNPYmplY3RLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aG91dCAnLydgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZlcnNpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZFtdKTogdm9pZCB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkcmVuIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvamVjdCcpO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPiBNQVhfQ0hJTERSRU4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNoaWxkcmVuIG11c3QgY29udGFpbiBhdCBtb3N0ICR7TUFYX0NISUxEUkVOfSBwcm9qZWN0c2ApO1xuICB9XG5cbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY2hpbGQgbmFtZScsIGNoaWxkLm5hbWUpO1xuICAgIGlmIChjaGlsZC52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbihgdmVyc2lvbiBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCwgY2hpbGQudmVyc2lvbik7XG4gICAgfVxuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMoY2hpbGQuYWRkaXRpb25hbFRhZ3MgPz8gW10sIGBhZGRpdGlvbmFsVGFncyBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCk7XG4gICAgaWYgKG5hbWVzLmhhcyhjaGlsZC5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZCBuYW1lICcke2NoaWxkLm5hbWV9JyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb25gKTtcbiAgICB9XG4gICAgbmFtZXMuYWRkKGNoaWxkLm5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlVGFncyhzaGFyZWRUYWdzPzogc3RyaW5nW10sIGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaGFyZWRUYWdzID09PSB1bmRlZmluZWQgJiYgYWRkaXRpb25hbFRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaGFyZWQgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJywgdHJ1ZSk7XG4gIGNvbnN0IGFkZGl0aW9uYWwgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGFkZGl0aW9uYWxUYWdzID8/IFtdLCAnYWRkaXRpb25hbFRhZ3MnKTtcbiAgY29uc3QgbWVyZ2VkID0gbmV3IE1hcChzaGFyZWQpO1xuICBmb3IgKGNvbnN0IFtrZXksIHRhZ10gb2YgYWRkaXRpb25hbCkgbWVyZ2VkLnNldChrZXksIHRhZyk7XG4gIHJldHVybiBbLi4ubWVyZ2VkLnZhbHVlcygpXTtcbn1cblxuZnVuY3Rpb24gYWRkTGljZW5zZVBvbGljeVRhZ0lmUmVxdWlyZWQodGFnczogc3RyaW5nW10gfCB1bmRlZmluZWQsIHBvbGljeTogTGljZW5zZVBvbGljeSkge1xuICBpZiAocG9saWN5ICE9PSBMaWNlbnNlUG9saWN5Lk5PTkUpIHtcbiAgICByZXR1cm4gWy4uLih0YWdzID8/IFtdKSwgYGxpY2Vuc2VfcG9saWN5OiR7cG9saWN5fWBdO1xuICB9XG4gIHJldHVybiB0YWdzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKFxuICB0YWdzOiBzdHJpbmdbXSxcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gIGFsbG93TWFuYWdlZFRhZ3MgPSBmYWxzZVxuKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IHRhZy5pbmRleE9mKCc6Jyk7XG4gICAgaWYgKHNlcGFyYXRvckluZGV4IDw9IDAgfHwgc2VwYXJhdG9ySW5kZXggPT09IHRhZy5sZW5ndGggLSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvcGVydHlOYW1lfSB0YWcgJyR7dGFnfScgbXVzdCB1c2UgdGhlIGZvcm1hdCBrZXk6dmFsdWUgd2l0aCBhIG5vbi1lbXB0eSBrZXkgYW5kIHZhbHVlYCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGFnLnNsaWNlKDAsIHNlcGFyYXRvckluZGV4KTtcbiAgICBpZiAoTUFOQUdFRF9UQUdfS0VZUy5oYXMoa2V5KSAmJiAhYWxsb3dNYW5hZ2VkVGFncykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gbXVzdCBub3Qgc2V0IG1hbmFnZWQgdGFnIGtleSAnJHtrZXl9J2ApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvcGVydHlOYW1lfSBjb250YWlucyBkdXBsaWNhdGUgdGFnIGtleSAnJHtrZXl9J2ApO1xuICAgIH1cbiAgICByZXN1bHQuc2V0KGtleSwgdGFnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBvcHRpb25hbFRhZ3ModGFncz86IHN0cmluZ1tdKTogeyByZWFkb25seSB0YWdzPzogc3RyaW5nW10gfSB7XG4gIHJldHVybiB0YWdzID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdGFncyB9O1xufVxuIl19
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBa0U7QUFDbEUsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwQ0FBMEM7QUFDMUMsMERBQXFEO0FBQ3JELDJDQUFzRDtBQVF0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0sb0JBQW9CLEdBQUcsc0NBQXNDLENBQUM7QUFDcEUsTUFBTSx1QkFBdUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNwRCxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBRXhEOzs7O0dBSUc7QUFDSCxJQUFZLGFBS1g7QUFMRCxXQUFZLGFBQWE7SUFDdkIsOEJBQWEsQ0FBQTtJQUNiLDRDQUEyQixDQUFBO0lBQzNCLDRDQUEyQixDQUFBO0lBQzNCLDhDQUE2QixDQUFBO0FBQy9CLENBQUMsRUFMVyxhQUFhLDZCQUFiLGFBQWEsUUFLeEI7QUE0SEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFDekQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QztRQUNoRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZSxD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Q0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksY0FBYyxJQUFJLENBQUMsSUFBSSxjQUFjLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxTQUFTLEdBQUcsZ0VBQWdFLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFlO0lBQ25DLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5SZXNvdXJjZSwgRHVyYXRpb24sIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIGV2ZW50c1RhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgczNBc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfUlVOVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBkYXRhZG9ndjIgZnJvbSAnLi4vZGF0YWRvZ3YyJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5pbXBvcnQgeyBTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQXNzZXRMb2NhdGlvbixcbiAgQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24sXG4gIFN0YW5kYWxvbmVVcGxvYWRDb25maWd1cmF0aW9uLFxuICBVcGxvYWRDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2xhbWJkYS90eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTiA9ICdtYWluJztcbmNvbnN0IE1BWF9DSElMRFJFTiA9IDM7XG5jb25zdCBNQU5BR0VEX1RBR19LRVlTID0gbmV3IFNldChbJ2FjY291bnRfaWQnLCAndGVhbV9pZGVudGlmaWVyJywgJ2xpY2Vuc2VfcG9saWN5J10pO1xuY29uc3QgVVBMT0FEX0ZVTkNUSU9OX1VVSUQgPSAnZDIwYjlmNDYtMDcwMi00N2RkLTg5YzItOWVhNGJkZGFhY2ZjJztcbmNvbnN0IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFID0gJ1Nib21DYXRhbG9nVXBsb2FkJztcbmNvbnN0IFVQTE9BRF9MT0dfR1JPVVBfSUQgPSAnU2JvbUNhdGFsb2dVcGxvYWRMb2dHcm91cCc7XG5cbi8qKlxuICogRW51bSB0byBzcGVjaWZ5IHdoaWNoIGxpY2Vuc2UgcG9saWN5IHNob3VsZCBhcHBsaWVkLlxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBlbnVtIExpY2Vuc2VQb2xpY3kge1xuICBOT05FID0gJ25vbmUnLFxuICBKVk1fQkFDS0VORCA9ICdqdm0tYmFja2VuZCcsXG4gIE5QTV9CQUNLRU5EID0gJ25wbS1iYWNrZW5kJyxcbiAgTlBNX0ZST05URU5EID0gJ25wbS1mcm9udGVuZCcsXG59XG5cbi8qKlxuICogTm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGFuIFNCT00gY2F0YWxvZyB2dWxuZXJhYmlsaXR5IG1vbml0b3IuXG4gKlxuICogQGJldGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Z1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHMge1xuICAvKiogTm90aWZpY2F0aW9uIHNlbnQgd2hlbiB0aGUgdnVsbmVyYWJpbGl0eSBtb25pdG9yIGNoYW5nZXMgc3RhdGUuICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbjogZGF0YWRvZ3YyLklOb3RpZmljYXRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3Ige0BsaW5rIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3R9LlxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIE11c3QgYmUgbm9uLWVtcHR5IGFuZCBtdXN0IG5vdCBjb250YWluIGAvYC4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBQcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBwcm9qZWN0IHRhZ3MgdXNpbmcgdGhlIGBrZXk6dmFsdWVgIGZvcm1hdC5cbiAgICpcbiAgICogYHRlYW1faWRlbnRpZmllcmAgaXMgYWx3YXlzIGFkZGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmUgY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3JcbiAgICogYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB2dWxuZXJhYmlsaXR5IG1vbml0b3IgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCB0aGUgbW9uaXRvciB1c2VzIHtAbGluayBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9ufS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBBIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciB1c2luZyB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn1cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/OiBTYm9tQ2F0YWxvZ1Z1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWFuZGF0b3J5IGxpY2Vuc2UgcG9saWN5IHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBwcm9qZWN0LlxuICAgKlxuICAgKiBVc2UgYExpY2Vuc2VQb2xpY3kuTk9ORWAgaW4gZXhjZXB0aW9uYWwgY2FzZXMgb25seSFcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2VQb2xpY3k6IExpY2Vuc2VQb2xpY3k7XG59XG5cbi8qKlxuICogQSBjaGlsZCBwcm9qZWN0IGluIGFuIFNCT00gY2F0YWxvZyBjb2xsZWN0aW9uLlxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JvbUNhdGFsb2dQcm9qZWN0Q2hpbGQge1xuICAvKipcbiAgICogTXVzdCBiZSBub24tZW1wdHksIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb24sIGFuZCBtdXN0IG5vdCBjb250YWluIGAvYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogQ2hpbGQgcHJvamVjdCB2ZXJzaW9uLiBEZWZhdWx0cyB0byBgbWFpbmAuICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgYWRkZWQgdG8gdGhpcyBjaGlsZCwgdXNpbmcgdGhlIGBrZXk6dmFsdWVgIGZvcm1hdC5cbiAgICpcbiAgICogQ2hpbGQgdGFncyBvdmVycmlkZSBzaGFyZWQgdGFncyB3aXRoIHRoZSBzYW1lIGtleS4gYHRlYW1faWRlbnRpZmllcmAgaXMgYWx3YXlzIGluaGVyaXRlZCBmcm9tIHRoZSBSSU8gTGFuZGluZyBab25lXG4gICAqIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIEpTT04gU0JPTSBmaWxlIGFzc2V0IHRvIHVwbG9hZC4gKi9cbiAgcmVhZG9ubHkgc2JvbTogczNBc3NldHMuQXNzZXQ7XG5cbiAgLyoqIE9wdGlvbmFsIEpTT04gVkVYIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSB2ZXg/OiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYW5kYXRvcnkgbGljZW5zZSBwb2xpY3kgdG8gYmUgYXBwbGllZCB0byB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIFVzZSBgTGljZW5zZVBvbGljeS5OT05FYCBpbiBleGNlcHRpb25hbCBjYXNlcyBvbmx5IVxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZVBvbGljeTogTGljZW5zZVBvbGljeTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB7QGxpbmsgU2JvbUNhdGFsb2dQcm9qZWN0fS5cbiAqXG4gKiBAYmV0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIENvbGxlY3Rpb24gbmFtZSBzdG9yZWQgaW4gdGhlIG1hbmlmZXN0IGFuZCB1c2VkIGluIHRoZSBkZXN0aW5hdGlvbiBrZXkuICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqIENvbGxlY3Rpb24gdmVyc2lvbi4gRGVmYXVsdHMgdG8gYG1haW5gLiAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBpbmhlcml0ZWQgYnkgZXZlcnkgY2hpbGQsIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIEEgY2hpbGQncyBhZGRpdGlvbmFsIHRhZ3Mgb3ZlcnJpZGUgc2hhcmVkIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkuIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU9cbiAgICogTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogQ2hpbGQgY2F0YWxvZyBwcm9qZWN0cy4gTXVzdCBjb250YWluIGJldHdlZW4gb25lIGFuZCB0aHJlZSBwcm9qZWN0cy4gKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW46IFNib21DYXRhbG9nUHJvamVjdENoaWxkW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHZ1bG5lcmFiaWxpdHkgbW9uaXRvciBjb25maWd1cmF0aW9uIHNoYXJlZCBieSBhbGwgY2hpbGQgbW9uaXRvcnMuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgdGhlIG1vbml0b3JzIHVzZSB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn0uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgVnVsbmVyYWJpbGl0eSBtb25pdG9ycyB1c2luZyB7QGxpbmsgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbn1cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/OiBTYm9tQ2F0YWxvZ1Z1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIG9uZSBwcm9qZWN0J3MgU0JPTSBhbmQgb3B0aW9uYWwgVkVYIGluIHRoZSBjZW50cmFsIFNCT00gY2F0YWxvZy5cbiAqXG4gKiBVc2UgdGhpcyBjb25zdHJ1Y3Qgd2hlbiBhIHN0YWNrIG93bnMgb25lIGluZGVwZW5kZW50bHkgdmVyc2lvbmVkIHByb2plY3QuIFRoZSBmaWxlcyBhcmUgdXBsb2FkZWQgYWZ0ZXIgdGhlIHN0YWNrXG4gKiByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZSBhbmQgSUQgaWRlbnRpZnkgdGhlIHVwbG9hZC5cbiAqXG4gKiBUaGUgY29uc3RydWN0IGF1dG9tYXRpY2FsbHkgYWRkcyB0aGUgUklPIExhbmRpbmcgWm9uZSBgdGVhbV9pZGVudGlmaWVyYCB0YWcgYW5kIGdyYW50cyB0aGUgZ2VuZXJhdGVkIHVwbG9hZCBMYW1iZGFcbiAqIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc291cmNlIGFzc2V0cyBhbmQgd3JpdGUgdGhlbSB0byB0aGUgY2VudHJhbCBjYXRhbG9nIGJ1Y2tldC4gQWxsIFNCT00gY2F0YWxvZyBjb25zdHJ1Y3RzIGluXG4gKiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IHNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ1Nib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL3Nib20uanNvbicsXG4gKiB9KTtcbiAqIGNvbnN0IHZleCA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnVmV4QXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC92ZXguanNvbicsXG4gKiB9KTtcbiAqXG4gKiBuZXcgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdCh0aGlzLCAnQ2F0YWxvZ1VwbG9hZCcsIHtcbiAqICAgbmFtZTogJ2JpbGxpbmctYXBpJyxcbiAqICAgdmVyc2lvbjogJzEuNC4wJyxcbiAqICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgc2JvbSxcbiAqICAgdmV4LFxuICogICB2dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzOiB7XG4gKiAgICAgbm90aWZpY2F0aW9uOiBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpLFxuICogICB9LFxuICogICBsaWNlbnNlUG9saWN5OiBsaWNlbnNlUG9saWN5LkpWTV9CQUNLRU5ELFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAYmV0YVxuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFuZGFsb25lU2JvbUNhdGFsb2dQcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHByb3BzLnZlcnNpb24gPz8gREVGQVVMVF9WRVJTSU9OO1xuICAgIGNvbnN0IHRlYW1JZGVudGlmaWVyID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbUlkZW50aWZpZXJQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgdGFncyA9XG4gICAgICBtZXJnZVRhZ3MoXG4gICAgICAgIGFkZExpY2Vuc2VQb2xpY3lUYWdJZlJlcXVpcmVkKFtgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YF0sIHByb3BzLmxpY2Vuc2VQb2xpY3kpLFxuICAgICAgICBwcm9wcy5hZGRpdGlvbmFsVGFnc1xuICAgICAgKSA/PyBbXTtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ25hbWUnLCBwcm9wcy5uYW1lKTtcbiAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oJ3ZlcnNpb24nLCB2ZXJzaW9uKTtcbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHByb3BzLmFkZGl0aW9uYWxUYWdzID8/IFtdLCAnYWRkaXRpb25hbFRhZ3MnKTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogU3RhbmRhbG9uZVVwbG9hZENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBvcmlnaW5BY2NvdW50SWQ6IHN0YWNrLmFjY291bnQsXG4gICAgICBvcmlnaW5BY2NvdW50TmFtZTogUmlvTGFuZGluZ1pvbmUuZ2V0QWNjb3VudE5hbWVQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWUsXG4gICAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICAgIHRhZ3MsXG4gICAgICBzYm9tOiBhc3NldExvY2F0aW9uKHByb3BzLnNib20pLFxuICAgICAgLi4uKHByb3BzLnZleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZleDogYXNzZXRMb2NhdGlvbihwcm9wcy52ZXgpIH0pLFxuICAgIH07XG5cbiAgICBjcmVhdGVVcGxvYWRSZXNvdXJjZXModGhpcywgY29uZmlndXJhdGlvbiwgW3Byb3BzLnNib20sIC4uLihwcm9wcy52ZXggPT09IHVuZGVmaW5lZCA/IFtdIDogW3Byb3BzLnZleF0pXSk7XG4gICAgY3JlYXRlVnVsbmVyYWJpbGl0eU1vbml0b3Ioe1xuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICBwcm9qZWN0TmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGFjY291bnROYW1lOiBjb25maWd1cmF0aW9uLm9yaWdpbkFjY291bnROYW1lLFxuICAgICAgbm90aWZpY2F0aW9uOiBwcm9wcy52dWxuZXJhYmlsaXR5TW9uaXRvclByb3BzPy5ub3RpZmljYXRpb24gPz8gbmV3IGRhdGFkb2d2Mi5EZWZhdWx0U2xhY2tOb3RpZmljYXRpb24oKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGNvbGxlY3Rpb24gb2YgcmVsYXRlZCBwcm9qZWN0IFNCT01zIGFuZCBvcHRpb25hbCBWRVggZmlsZXMgaW4gdGhlIGNlbnRyYWwgU0JPTSBjYXRhbG9nLlxuICpcbiAqIFVzZSB0aGlzIGNvbnN0cnVjdCB3aGVuIG9uZSBzdGFjayBwcm9kdWNlcyBiZXR3ZWVuIG9uZSBhbmQgdGhyZWUgcmVsYXRlZCBwcm9qZWN0cyB0aGF0IHNob3VsZCBzaGFyZSBhIGNhdGFsb2dcbiAqIGNvbGxlY3Rpb24uIFNoYXJlZCB0YWdzIGFyZSBpbmhlcml0ZWQgYnkgZXZlcnkgY2hpbGQsIHdoaWxlIGNoaWxkIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkgb3ZlcnJpZGUgdGhlbS4gVGhlIFJJT1xuICogTGFuZGluZyBab25lIGB0ZWFtX2lkZW50aWZpZXJgIHRhZyBpcyBhbHdheXMgaW5jbHVkZWQuXG4gKlxuICogVGhlIGZpbGVzIGFyZSB1cGxvYWRlZCBhZnRlciB0aGUgc3RhY2sgcmVhY2hlcyBgQ1JFQVRFX0NPTVBMRVRFYCBvciBgVVBEQVRFX0NPTVBMRVRFYC4gVGhlIEV2ZW50QnJpZGdlIGV2ZW50IHRpbWVcbiAqIGFuZCBJRCBpZGVudGlmeSB0aGUgdXBsb2FkLiBBbGwgU0JPTSBjYXRhbG9nIGNvbnN0cnVjdHMgaW4gdGhlIHNhbWUgc3RhY2sgcmV1c2Ugb25lIHVwbG9hZCBMYW1iZGEuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHRzXG4gKiBjb25zdCBhcGlTYm9tID0gbmV3IHMzQXNzZXRzLkFzc2V0KHRoaXMsICdBcGlTYm9tQXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC9hcGktc2JvbS5qc29uJyxcbiAqIH0pO1xuICogY29uc3QgaW5mcmFzdHJ1Y3R1cmVTYm9tID0gbmV3IHMzQXNzZXRzLkFzc2V0KHRoaXMsICdJbmZyYXN0cnVjdHVyZVNib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL2luZnJhc3RydWN0dXJlLXNib20uanNvbicsXG4gKiB9KTtcbiAqXG4gKiBuZXcgU2JvbUNhdGFsb2dQcm9qZWN0KHRoaXMsICdDYXRhbG9nVXBsb2FkJywge1xuICogICBjb2xsZWN0aW9uTmFtZTogJ2JpbGxpbmcnLFxuICogICBjb2xsZWN0aW9uVmVyc2lvbjogJzEuNC4wJyxcbiAqICAgc2hhcmVkVGFnczogWydkb21haW46YmlsbGluZyddLFxuICogICBjaGlsZHJlbjogW1xuICogICAgIHtcbiAqICAgICAgIG5hbWU6ICdhcGknLFxuICogICAgICAgc2JvbTogYXBpU2JvbSxcbiAqICAgICAgIGFkZGl0aW9uYWxUYWdzOiBbJ2NvbXBvbmVudDpiYWNrZW5kJ10sXG4gKiAgICAgICBsaWNlbnNlUG9saWN5OiBMaWNlbnNlUG9saWN5LkpWTV9CQUNLRU5ELFxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgbmFtZTogJ2luZnJhc3RydWN0dXJlJyxcbiAqICAgICAgIHNib206IGluZnJhc3RydWN0dXJlU2JvbSxcbiAqICAgICAgIGFkZGl0aW9uYWxUYWdzOiBbJ2NvbXBvbmVudDppbmZyYXN0cnVjdHVyZSddLFxuICogKiAgICAgICBsaWNlbnNlUG9saWN5OiBMaWNlbnNlUG9saWN5Lk5QTV9CQUNLRU5ELFxuICogICAgIH0sXG4gKiAgIF0sXG4gKiAgIHZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM6IHtcbiAqICAgICBub3RpZmljYXRpb246IG5ldyBkYXRhZG9ndjIuRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9uKCksXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCBjbGFzcyBTYm9tQ2F0YWxvZ1Byb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2JvbUNhdGFsb2dQcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29sbGVjdGlvblZlcnNpb24gPSBwcm9wcy5jb2xsZWN0aW9uVmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT047XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ2NvbGxlY3Rpb25OYW1lJywgcHJvcHMuY29sbGVjdGlvbk5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbignY29sbGVjdGlvblZlcnNpb24nLCBjb2xsZWN0aW9uVmVyc2lvbik7XG4gICAgdmFsaWRhdGVDaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG4gICAgcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhwcm9wcy5zaGFyZWRUYWdzID8/IFtdLCAnc2hhcmVkVGFncycpO1xuICAgIGNvbnN0IHNoYXJlZFRhZ3MgPSBtZXJnZVRhZ3MoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMuc2hhcmVkVGFncykgPz8gW107XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IENhdGFsb2dVcGxvYWRDb25maWd1cmF0aW9uID0ge1xuICAgICAgb3JpZ2luQWNjb3VudElkOiBzdGFjay5hY2NvdW50LFxuICAgICAgb3JpZ2luQWNjb3VudE5hbWU6IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlLFxuICAgICAgY29sbGVjdGlvbk5hbWU6IHByb3BzLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgY29sbGVjdGlvblZlcnNpb24sXG4gICAgICB0YWdzOiBbYHRlYW1faWRlbnRpZmllcjoke3RlYW1JZGVudGlmaWVyfWBdLFxuICAgICAgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuLm1hcChjaGlsZCA9PiAoe1xuICAgICAgICBuYW1lOiBjaGlsZC5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBjaGlsZC52ZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTixcbiAgICAgICAgLi4ub3B0aW9uYWxUYWdzKFxuICAgICAgICAgIG1lcmdlVGFncyhhZGRMaWNlbnNlUG9saWN5VGFnSWZSZXF1aXJlZChzaGFyZWRUYWdzLCBjaGlsZC5saWNlbnNlUG9saWN5KSwgY2hpbGQuYWRkaXRpb25hbFRhZ3MpXG4gICAgICAgICksXG4gICAgICAgIHNib206IGFzc2V0TG9jYXRpb24oY2hpbGQuc2JvbSksXG4gICAgICAgIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IHt9IDogeyB2ZXg6IGFzc2V0TG9jYXRpb24oY2hpbGQudmV4KSB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgY3JlYXRlVXBsb2FkUmVzb3VyY2VzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBwcm9wcy5jaGlsZHJlbi5mbGF0TWFwKGNoaWxkID0+IFtjaGlsZC5zYm9tLCAuLi4oY2hpbGQudmV4ID09PSB1bmRlZmluZWQgPyBbXSA6IFtjaGlsZC52ZXhdKV0pXG4gICAgKTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHByb3BzLnZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHM/Lm5vdGlmaWNhdGlvbiA/PyBuZXcgZGF0YWRvZ3YyLkRlZmF1bHRTbGFja05vdGlmaWNhdGlvbigpO1xuICAgIHByb3BzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT5cbiAgICAgIGNyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yKHtcbiAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgIHByb2plY3ROYW1lOiBjaGlsZC5uYW1lLFxuICAgICAgICBhY2NvdW50TmFtZTogY29uZmlndXJhdGlvbi5vcmlnaW5BY2NvdW50TmFtZSxcbiAgICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmludGVyZmFjZSBDcmVhdGVWdWxuZXJhYmlsaXR5TW9uaXRvclByb3BzIHtcbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbiAgcmVhZG9ubHkgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uOiBkYXRhZG9ndjIuSU5vdGlmaWNhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVnVsbmVyYWJpbGl0eU1vbml0b3IocHJvcHM6IENyZWF0ZVZ1bG5lcmFiaWxpdHlNb25pdG9yUHJvcHMpOiB2b2lkIHtcbiAgY29uc3QgbW9uaXRvciA9IG5ldyBkYXRhZG9ndjIuRGF0YWRvZ01vbml0b3IocHJvcHMuc2NvcGUsIGAke3Byb3BzLnByb2plY3ROYW1lfVZ1bG5lcmFiaWxpdHlNb25pdG9yYCwge1xuICAgIG5hbWU6IGAke3Byb3BzLmFjY291bnROYW1lfSBWdWxuZXJhYmlsaXR5TW9uaXRvcmAsXG4gICAgc2VydmljZU5hbWU6IHByb3BzLnByb2plY3ROYW1lLFxuICAgIG1vbml0b3JUeXBlOiBkYXRhZG9ndjIuRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZS5NRVRSSUNfQUxFUlQsXG4gICAgLy8gRGVwZW5kZW5jeS1UcmFjayBlbWl0cyBzZXBhcmF0ZSBnYXVnZSB2YWx1ZXMgYWZ0ZXIgQk9NIGFuZCBWRVggcHJvY2Vzc2luZzsgZXZhbHVhdGUgYm90aCBhZnRlciB0aGV5IHNldHRsZS5cbiAgICBxdWVyeTogYG1pbihsYXN0XzNtKTptYXg6c2VydmljZS52dWxuZXJhYmlsaXRpZXN7cHJvamVjdF9uYW1lOiR7cHJvcHMucHJvamVjdE5hbWV9fSA+IDBgLFxuICAgIGxvd2VyY2FzZVF1ZXJ5OiB0cnVlLFxuICAgIG1lc3NhZ2U6IFtcbiAgICAgICd7eyNpc19hbGVydH19JyxcbiAgICAgIGBQcm9qZWN0ICR7cHJvcHMucHJvamVjdE5hbWV9IGhhcyB7e3ZhbHVlfX0ga25vd24gdnVsbmVyYWJpbGl0aWVzLmAsXG4gICAgICAne3svaXNfYWxlcnR9fScsXG4gICAgICAnJyxcbiAgICAgICd7eyNpc19yZWNvdmVyeX19JyxcbiAgICAgIGBQcm9qZWN0ICR7cHJvcHMucHJvamVjdE5hbWV9IG5vIGxvbmdlciByZXBvcnRzIHZ1bG5lcmFiaWxpdGllcy5gLFxuICAgICAgJ3t7L2lzX3JlY292ZXJ5fX0nLFxuICAgIF0uam9pbignXFxuJyksXG4gICAgbm90aWZpY2F0aW9uOiBwcm9wcy5ub3RpZmljYXRpb24sXG4gICAgcHJpb3JpdHk6IDMsXG4gICAgZXh0cmFUYWdzOiBbJ21vbml0b3JfdHlwZTp2dWxuZXJhYmlsaXR5J10sXG4gICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICBldmFsdWF0aW9uRGVsYXk6IDE4MCxcbiAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICB9LFxuICAgICAgb25NaXNzaW5nRGF0YTogZGF0YWRvZ3YyLk1vbml0b3JPbk1pc3NpbmdEYXRhLkRFRkFVTFQsXG4gICAgICByZXF1aXJlRnVsbFdpbmRvdzogZmFsc2UsXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gYG9uX21pc3NpbmdfZGF0YWAgcmVwbGFjZXMgdGhlIGxlZ2FjeSBuby1kYXRhIG9wdGlvbnMgYW5kIGtlZXBzIHRoZSBsYXN0IGtub3duIHN0YXR1cyBmb3IgZ2F1Z2UgbWV0cmljcy5cbiAgY29uc3QgbW9uaXRvclJlc291cmNlID0gbW9uaXRvci5ub2RlLmZpbmRDaGlsZCgnTW9uaXRvcicpIGFzIENmblJlc291cmNlO1xuICBtb25pdG9yUmVzb3VyY2UuYWRkRGVsZXRpb25PdmVycmlkZSgnUHJvcGVydGllcy5PcHRpb25zLk5vdGlmeU5vRGF0YScpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVcGxvYWRSZXNvdXJjZXMoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGNvbmZpZ3VyYXRpb246IFVwbG9hZENvbmZpZ3VyYXRpb24sXG4gIHNvdXJjZUFzc2V0czogczNBc3NldHMuQXNzZXRbXVxuKTogdm9pZCB7XG4gIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gIGNvbnN0IHVwbG9hZEZ1bmN0aW9uID0gbmV3IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbihzY29wZSwgJ1VwbG9hZEZ1bmN0aW9uJywge1xuICAgIHV1aWQ6IFVQTE9BRF9GVU5DVElPTl9VVUlELFxuICAgIGxhbWJkYVB1cnBvc2U6IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFLFxuICAgIHJ1bnRpbWU6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgaGFuZGxlcjogJ2hhbmRsZXIuaGFuZGxlcicsXG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICdsYW1iZGEnKSwge1xuICAgICAgZXhjbHVkZTogWycqLmpzJywgJyouZC50cyddLFxuICAgIH0pLFxuICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgbG9nR3JvdXA6IGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2spLFxuICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydzMzpQdXRPYmplY3QnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYCR7U0JPTV9DQVRBTE9HX0JVQ0tFVF9BUk59LypgXSxcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgbWVtb3J5U2l6ZTogMjU2LFxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gIH0pO1xuICAodXBsb2FkRnVuY3Rpb24ucGVybWlzc2lvbnNOb2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb24pLnRhZ3Muc2V0VGFnKCdXYXRjaGZ1bCcsICdGYWxzZScpO1xuXG4gIGZvciAoY29uc3QgYXNzZXQgb2Ygc291cmNlQXNzZXRzKSB7XG4gICAgYXNzZXQuZ3JhbnRSZWFkKHVwbG9hZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIG5ldyBldmVudHMuUnVsZShzY29wZSwgJ1N0YWNrQ29tcGxldGlvblJ1bGUnLCB7XG4gICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICBzb3VyY2U6IFsnYXdzLmNsb3VkZm9ybWF0aW9uJ10sXG4gICAgICBkZXRhaWxUeXBlOiBbJ0Nsb3VkRm9ybWF0aW9uIFN0YWNrIFN0YXR1cyBDaGFuZ2UnXSxcbiAgICAgIGRldGFpbDoge1xuICAgICAgICAnc3RhY2staWQnOiBbc3RhY2suc3RhY2tJZF0sXG4gICAgICAgICdzdGF0dXMtZGV0YWlscyc6IHtcbiAgICAgICAgICBzdGF0dXM6IFsnQ1JFQVRFX0NPTVBMRVRFJywgJ1VQREFURV9DT01QTEVURSddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRhcmdldHM6IFtcbiAgICAgIG5ldyBldmVudHNUYXJnZXRzLkxhbWJkYUZ1bmN0aW9uKHVwbG9hZEZ1bmN0aW9uLCB7XG4gICAgICAgIGV2ZW50OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIGV2ZW50SWQ6IGV2ZW50cy5FdmVudEZpZWxkLmV2ZW50SWQsXG4gICAgICAgICAgZXZlbnRUaW1lOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC50aW1lJyksXG4gICAgICAgICAgc3RhY2tJZDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YWNrLWlkJyksXG4gICAgICAgICAgc3RhY2tTdGF0dXM6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckLmRldGFpbC5zdGF0dXMtZGV0YWlscy5zdGF0dXMnKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRPckNyZWF0ZVVwbG9hZExvZ0dyb3VwKHN0YWNrOiBTdGFjayk6IGxvZ3MuTG9nR3JvdXAge1xuICBjb25zdCBleGlzdGluZ0xvZ0dyb3VwID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoVVBMT0FEX0xPR19HUk9VUF9JRCk7XG4gIGlmIChleGlzdGluZ0xvZ0dyb3VwIGluc3RhbmNlb2YgbG9ncy5Mb2dHcm91cCkge1xuICAgIHJldHVybiBleGlzdGluZ0xvZ0dyb3VwO1xuICB9XG4gIGlmIChleGlzdGluZ0xvZ0dyb3VwICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YWNrIGFscmVhZHkgY29udGFpbnMgYSBjb25zdHJ1Y3QgbmFtZWQgJyR7VVBMT0FEX0xPR19HUk9VUF9JRH0nYCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBsb2dzLkxvZ0dyb3VwKHN0YWNrLCBVUExPQURfTE9HX0dST1VQX0lELCB7XG4gICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NldExvY2F0aW9uKGFzc2V0OiBzM0Fzc2V0cy5Bc3NldCk6IEFzc2V0TG9jYXRpb24ge1xuICByZXR1cm4ge1xuICAgIGJ1Y2tldE5hbWU6IGFzc2V0LnMzQnVja2V0TmFtZSxcbiAgICBvYmplY3RLZXk6IGFzc2V0LnMzT2JqZWN0S2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUuaW5jbHVkZXMoJy8nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgbm9uLWVtcHR5IHZhbHVlIHdpdGhvdXQgJy8nYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm9uRW1wdHlWZXJzaW9uKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZHJlbihjaGlsZHJlbjogU2JvbUNhdGFsb2dQcm9qZWN0Q2hpbGRbXSk6IHZvaWQge1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZHJlbiBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHByb2plY3QnKTtcbiAgfVxuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gTUFYX0NISUxEUkVOKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZHJlbiBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke01BWF9DSElMRFJFTn0gcHJvamVjdHNgKTtcbiAgfVxuXG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ2NoaWxkIG5hbWUnLCBjaGlsZC5uYW1lKTtcbiAgICBpZiAoY2hpbGQudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oYHZlcnNpb24gZm9yIGNoaWxkICcke2NoaWxkLm5hbWV9J2AsIGNoaWxkLnZlcnNpb24pO1xuICAgIH1cbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGNoaWxkLmFkZGl0aW9uYWxUYWdzID8/IFtdLCBgYWRkaXRpb25hbFRhZ3MgZm9yIGNoaWxkICcke2NoaWxkLm5hbWV9J2ApO1xuICAgIGlmIChuYW1lcy5oYXMoY2hpbGQubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2hpbGQgbmFtZSAnJHtjaGlsZC5uYW1lfScgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBjb2xsZWN0aW9uYCk7XG4gICAgfVxuICAgIG5hbWVzLmFkZChjaGlsZC5uYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVRhZ3Moc2hhcmVkVGFncz86IHN0cmluZ1tdLCBhZGRpdGlvbmFsVGFncz86IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoc2hhcmVkVGFncyA9PT0gdW5kZWZpbmVkICYmIGFkZGl0aW9uYWxUYWdzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkID0gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhzaGFyZWRUYWdzID8/IFtdLCAnc2hhcmVkVGFncycsIHRydWUpO1xuICBjb25zdCBhZGRpdGlvbmFsID0gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhhZGRpdGlvbmFsVGFncyA/PyBbXSwgJ2FkZGl0aW9uYWxUYWdzJyk7XG4gIGNvbnN0IG1lcmdlZCA9IG5ldyBNYXAoc2hhcmVkKTtcbiAgZm9yIChjb25zdCBba2V5LCB0YWddIG9mIGFkZGl0aW9uYWwpIG1lcmdlZC5zZXQoa2V5LCB0YWcpO1xuICByZXR1cm4gWy4uLm1lcmdlZC52YWx1ZXMoKV07XG59XG5cbmZ1bmN0aW9uIGFkZExpY2Vuc2VQb2xpY3lUYWdJZlJlcXVpcmVkKHRhZ3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLCBwb2xpY3k6IExpY2Vuc2VQb2xpY3kpIHtcbiAgaWYgKHBvbGljeSAhPT0gTGljZW5zZVBvbGljeS5OT05FKSB7XG4gICAgcmV0dXJuIFsuLi4odGFncyA/PyBbXSksIGBsaWNlbnNlX3BvbGljeToke3BvbGljeX1gXTtcbiAgfVxuICByZXR1cm4gdGFncztcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhcbiAgdGFnczogc3RyaW5nW10sXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICBhbGxvd01hbmFnZWRUYWdzID0gZmFsc2Vcbik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWcuaW5kZXhPZignOicpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwIHx8IHNlcGFyYXRvckluZGV4ID09PSB0YWcubGVuZ3RoIC0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gdGFnICcke3RhZ30nIG11c3QgdXNlIHRoZSBmb3JtYXQga2V5OnZhbHVlIHdpdGggYSBub24tZW1wdHkga2V5IGFuZCB2YWx1ZWApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRhZy5zbGljZSgwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgaWYgKE1BTkFHRURfVEFHX0tFWVMuaGFzKGtleSkgJiYgIWFsbG93TWFuYWdlZFRhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IG11c3Qgbm90IHNldCBtYW5hZ2VkIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gY29udGFpbnMgZHVwbGljYXRlIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgcmVzdWx0LnNldChrZXksIHRhZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxUYWdzKHRhZ3M/OiBzdHJpbmdbXSk6IHsgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gdGFncyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRhZ3MgfTtcbn1cbiJdfQ==