cdk-dms-replication 0.2.2 → 0.2.3
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 +3 -3
- package/lib/dms-roles.js +36 -3
- package/lib/endpoint.js +58 -20
- package/lib/migration-pipeline.js +60 -6
- package/lib/replication-instance.js +49 -8
- package/lib/replication-task.js +41 -6
- package/lib/serverless-pipeline.js +66 -9
- package/lib/table-mappings.js +4 -8
- package/lib/task-settings.js +9 -13
- package/package.json +6 -8
|
@@ -1,13 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
3
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
36
|
exports.DmsServerlessPipeline = void 0;
|
|
5
37
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const cdk = require("aws-cdk-lib");
|
|
7
|
-
const dms = require("aws-cdk-lib/aws-dms");
|
|
8
|
-
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
9
|
-
const kms = require("aws-cdk-lib/aws-kms");
|
|
10
|
-
const logs = require("aws-cdk-lib/aws-logs");
|
|
38
|
+
const cdk = __importStar(require("aws-cdk-lib"));
|
|
39
|
+
const dms = __importStar(require("aws-cdk-lib/aws-dms"));
|
|
40
|
+
const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
|
|
41
|
+
const kms = __importStar(require("aws-cdk-lib/aws-kms"));
|
|
42
|
+
const logs = __importStar(require("aws-cdk-lib/aws-logs"));
|
|
11
43
|
const constructs_1 = require("constructs");
|
|
12
44
|
const dms_roles_1 = require("./dms-roles");
|
|
13
45
|
const endpoint_1 = require("./endpoint");
|
|
@@ -61,6 +93,33 @@ const VALID_CAPACITY_UNITS = new Set([1, 2, 4, 8, 16, 32, 64, 128, 192, 256, 384
|
|
|
61
93
|
* });
|
|
62
94
|
*/
|
|
63
95
|
class DmsServerlessPipeline extends constructs_1.Construct {
|
|
96
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-dms-replication.DmsServerlessPipeline", version: "0.2.3" };
|
|
97
|
+
/** The underlying `CfnReplicationConfig` resource. */
|
|
98
|
+
cfnReplicationConfig;
|
|
99
|
+
/** The ARN of the replication config. */
|
|
100
|
+
replicationConfigArn;
|
|
101
|
+
/** The source endpoint used by this pipeline. */
|
|
102
|
+
source;
|
|
103
|
+
/** The target endpoint used by this pipeline. */
|
|
104
|
+
target;
|
|
105
|
+
/** The replication subnet group created for this pipeline. */
|
|
106
|
+
subnetGroup;
|
|
107
|
+
/** The KMS key used for storage encryption. */
|
|
108
|
+
encryptionKey;
|
|
109
|
+
/** The security group attached to this pipeline. */
|
|
110
|
+
securityGroup;
|
|
111
|
+
/** CloudWatch log group for the replication config (if enableCloudWatchLogs is true). */
|
|
112
|
+
logGroup;
|
|
113
|
+
/**
|
|
114
|
+
* Construct wrapping the custom resources that created the `dms-cloudwatch-logs-role`.
|
|
115
|
+
* `undefined` when `createDmsServiceRoles` is `false`.
|
|
116
|
+
*/
|
|
117
|
+
dmsCloudWatchRole;
|
|
118
|
+
/**
|
|
119
|
+
* Construct wrapping the custom resources that created the `dms-vpc-role`.
|
|
120
|
+
* `undefined` when `createDmsServiceRoles` is `false`.
|
|
121
|
+
*/
|
|
122
|
+
dmsVpcRole;
|
|
64
123
|
constructor(scope, id, props) {
|
|
65
124
|
super(scope, id);
|
|
66
125
|
this.validateProps(props);
|
|
@@ -268,6 +327,4 @@ class DmsServerlessPipeline extends constructs_1.Construct {
|
|
|
268
327
|
}
|
|
269
328
|
}
|
|
270
329
|
exports.DmsServerlessPipeline = DmsServerlessPipeline;
|
|
271
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
272
|
-
DmsServerlessPipeline[_a] = { fqn: "cdk-dms-replication.DmsServerlessPipeline", version: "0.2.2" };
|
|
273
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1waXBlbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2ZXJsZXNzLXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3QywyQ0FBdUM7QUFDdkMsMkNBQXdFO0FBQ3hFLHlDQUF1RDtBQUN2RCxtQ0FBc0Q7QUFFdEQscURBQWlEO0FBRWpELDhFQUE4RTtBQUM5RSxtRUFBbUU7QUFDbkUsOEVBQThFO0FBQzlFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQXNMbkYsOEVBQThFO0FBQzlFLFlBQVk7QUFDWiw4RUFBOEU7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFxQ2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQztRQUV4RCwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLDBFQUEwRTtRQUMxRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUks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SUFBSSxTQUFTLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQzs7QUFuUkgsc0RBb1JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGRtcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZG1zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBlbnN1cmVEbXNDbG91ZFdhdGNoUm9sZSwgZW5zdXJlRG1zVnBjUm9sZSB9IGZyb20gJy4vZG1zLXJvbGVzJztcbmltcG9ydCB7IERtc0VuZHBvaW50LCBJRG1zRW5kcG9pbnQgfSBmcm9tICcuL2VuZHBvaW50JztcbmltcG9ydCB7IEVuZHBvaW50VHlwZSwgTWlncmF0aW9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgU291cmNlRW5kcG9pbnRPcHRpb25zLCBUYXJnZXRFbmRwb2ludE9wdGlvbnMgfSBmcm9tICcuL21pZ3JhdGlvbi1waXBlbGluZSc7XG5pbXBvcnQgeyBUYWJsZU1hcHBpbmdzIH0gZnJvbSAnLi90YWJsZS1tYXBwaW5ncyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmFsaWQgY2FwYWNpdHkgdW5pdCB2YWx1ZXMg4oCUIGRvY3VtZW50ZWQgaW4gdGhlIERNUyBBUEkgcmVmZXJlbmNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNvbnN0IFZBTElEX0NBUEFDSVRZX1VOSVRTID0gbmV3IFNldChbMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAxOTIsIDI1NiwgMzg0XSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJvcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUHJvcHMgZm9yIHtAbGluayBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmVQcm9wcyB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTmV0d29ya2luZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFZQQyBpbiB3aGljaCB0byBwbGFjZSB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBjb25maWcuXG4gICAqIFRoZSBjb25maWcgaXMgcGxhY2VkIGluIHByaXZhdGUgc3VibmV0cy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldCBzZWxlY3Rpb24gZm9yIHRoZSByZXBsaWNhdGlvbiBzdWJuZXQgZ3JvdXAuXG4gICAqIEBkZWZhdWx0IHByaXZhdGUgc3VibmV0cyB3aXRoIGVncmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwcyB0byBhdHRhY2ggdG8gdGhlIHNlcnZlcmxlc3MgcmVwbGljYXRpb24gY29uZmlnLlxuICAgKiBBIG5ldyBzZWN1cml0eSBncm91cCBpcyBjcmVhdGVkIGlmIG5vbmUgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIENvbXB1dGUgY29uZmlnXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgRE1TIENhcGFjaXR5IFVuaXRzIChEQ1VzKSB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBtYXlcbiAgICogc2NhbGUgdXAgdG8uXG4gICAqXG4gICAqIFZhbGlkIHZhbHVlczogMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAxOTIsIDI1NiwgMzg0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHlVbml0czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiBEQ1VzIERNUyB3aWxsIHByb3Zpc2lvbiBhdCBzdGFydC11cC5cbiAgICogQGRlZmF1bHQgRE1TIGF1dG8tZGV0ZXJtaW5lcyBiYXNlZCBvbiB3b3JrbG9hZFxuICAgKi9cbiAgcmVhZG9ubHkgbWluQ2FwYWNpdHlVbml0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBpcyBNdWx0aS1BWi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG11bHRpQXo/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93LCBlLmcuIFwic3VuOjA0OjAwLXN1bjowNDozMFwiLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFbmNyeXB0aW9uXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgcmVwbGljYXRpb24gc3RvcmFnZSBhdCByZXN0LlxuICAgKiBBIG5ldyBrZXkgaXMgY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVuZHBvaW50c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFNvdXJjZSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICAgKiBQcm92aWRlIHRoaXMgT1IgYGV4aXN0aW5nU291cmNlRW5kcG9pbnRgIOKAlCBub3QgYm90aC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUVuZHBvaW50PzogU291cmNlRW5kcG9pbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBbiBleGlzdGluZyB7QGxpbmsgSURtc0VuZHBvaW50fSB0byB1c2UgYXMgdGhlIHNvdXJjZS5cbiAgICogUHJvdmlkZSB0aGlzIE9SIGBzb3VyY2VFbmRwb2ludGAg4oCUIG5vdCBib3RoLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdTb3VyY2VFbmRwb2ludD86IElEbXNFbmRwb2ludDtcblxuICAvKipcbiAgICogVGFyZ2V0IGVuZHBvaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIFByb3ZpZGUgdGhpcyBPUiBgZXhpc3RpbmdUYXJnZXRFbmRwb2ludGAg4oCUIG5vdCBib3RoLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0RW5kcG9pbnQ/OiBUYXJnZXRFbmRwb2ludE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFuIGV4aXN0aW5nIHtAbGluayBJRG1zRW5kcG9pbnR9IHRvIHVzZSBhcyB0aGUgdGFyZ2V0LlxuICAgKiBQcm92aWRlIHRoaXMgT1IgYHRhcmdldEVuZHBvaW50YCDigJQgbm90IGJvdGguXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1RhcmdldEVuZHBvaW50PzogSURtc0VuZHBvaW50O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWlncmF0aW9uIGNvbmZpZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFRoZSB0eXBlIG9mIG1pZ3JhdGlvbiB0byBwZXJmb3JtLiAqL1xuICByZWFkb25seSBtaWdyYXRpb25UeXBlOiBNaWdyYXRpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUYWJsZSBtYXBwaW5ncyBKU09OIHN0cmluZy5cbiAgICogVXNlIHtAbGluayBUYWJsZU1hcHBpbmdzfSB0byBidWlsZCB0aGlzLlxuICAgKiBEZWZhdWx0cyB0byBcImluY2x1ZGUgYWxsIHRhYmxlcyBpbiBhbGwgc2NoZW1hc1wiIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTWFwcGluZ3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlcGxpY2F0aW9uIHNldHRpbmdzIEpTT04gc3RyaW5nIChlcXVpdmFsZW50IHRvIHRhc2sgc2V0dGluZ3MgZm9yIGNsYXNzaWMgRE1TKS5cbiAgICogVXNlIHtAbGluayBUYXNrU2V0dGluZ3N9IHRvIGJ1aWxkIHRoaXMuXG4gICAqIFNlbnNpYmxlIGRlZmF1bHRzIGFyZSBhcHBsaWVkIGJ5IERNUyBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEByZW1hcmtzIERNUyBTZXJ2ZXJsZXNzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBDREMgc3RhcnQvc3RvcCBwb3NpdGlvbnNcbiAgICogdmlhIENsb3VkRm9ybWF0aW9uLiBUbyBzdGFydCByZXBsaWNhdGlvbiBmcm9tIGEgc3BlY2lmaWMgTFNOIG9yIHRpbWVzdGFtcFxuICAgKiBhZnRlciB0aGUgcmVwbGljYXRpb24gY29uZmlnIGhhcyBiZWVuIGNyZWF0ZWQsIGNhbGwgdGhlXG4gICAqIGBTdGFydFJlcGxpY2F0aW9uYCBBUEkgd2l0aCBgU3RhcnRSZXBsaWNhdGlvblRhc2tUeXBlYCBzZXQgdG9cbiAgICogYHN0YXJ0LXJlcGxpY2F0aW9uYCBhbmQgc3VwcGx5IGBDZGNTdGFydFBvc2l0aW9uYCBvciBgQ2RjU3RhcnRUaW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHRhc2tTZXR0aW5ncz86IHN0cmluZztcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE9ic2VydmFiaWxpdHlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSBhIENsb3VkV2F0Y2ggbG9nIGdyb3VwIGZvciB0aGUgcmVwbGljYXRpb24gY29uZmlnLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVDbG91ZFdhdGNoTG9ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJldGVudGlvbiBwZXJpb2QgZm9yIHRoZSBDbG91ZFdhdGNoIGxvZyBncm91cC5cbiAgICogQGRlZmF1bHQgbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSUFNIC8gc2VydmljZSByb2xlc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIHRoZSB0d28gYWNjb3VudC1sZXZlbCBETVMgc2VydmljZSByb2xlcyAoYGRtcy12cGMtcm9sZWBcbiAgICogYW5kIGBkbXMtY2xvdWR3YXRjaC1sb2dzLXJvbGVgKSByZXF1aXJlZCBieSBETVMuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcm9sZXMgYXJlIGNyZWF0ZWQgaWRlbXBvdGVudGx5IHZpYSBhIGN1c3RvbSByZXNvdXJjZTogaWZcbiAgICogZWl0aGVyIHJvbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGFjY291bnQgKGNyZWF0ZWQgYnkgYW5vdGhlciBzdGFjayBvclxuICAgKiBtYW51YWxseSksIHRoZSBleGlzdGluZyByb2xlIGlzIHNpbGVudGx5IHJldXNlZCBhbmQgaXRzIHRydXN0IHBvbGljeSBpc1xuICAgKiBjb3JyZWN0ZWQgaWYgbmVjZXNzYXJ5LiBUaGUgcm9sZXMgYXJlIGNyZWF0ZWQgd2l0aCBgUmVtb3ZhbFBvbGljeS5SRVRBSU5gXG4gICAqIGFuZCBhcmUgKipub3QqKiBsaWZlY3ljbGUtbWFuYWdlZCBieSB0aGlzIHN0YWNrIOKAlCB0aGV5IHdpbGwgbm90IGJlIGRlbGV0ZWRcbiAgICogd2hlbiB0aGUgc3RhY2sgaXMgZGVzdHJveWVkLiBJZiB5b3UgcmVxdWlyZSB0aGUgcm9sZXMgdG8gYmVcbiAgICogbGlmZWN5Y2xlLW1hbmFnZWQsIGNyZWF0ZSB0aGVtIGluIGEgZGVkaWNhdGVkIHN0YWNrIGFuZCBzZXQgdGhpcyB0b1xuICAgKiBgZmFsc2VgLCB0aGVuIHBhc3MgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCwgdGhlIGNvbnN0cnVjdCBleHBlY3RzIHRoZSByb2xlcyB0byBhbHJlYWR5IGJlIHByZXNlbnQgYW5kXG4gICAqIHNraXBzIGNyZWF0aW5nIHRoZW0uIFRoZSBgZG1zVnBjUm9sZWAgYW5kIGBkbXNDbG91ZFdhdGNoUm9sZWAgcHJvcGVydGllc1xuICAgKiB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVEbXNTZXJ2aWNlUm9sZXM/OiBib29sZWFuO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTmFtaW5nIC8gbGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTG9naWNhbCBpZGVudGlmaWVyIGZvciB0aGUgcmVwbGljYXRpb24gY29uZmlnIHJlc291cmNlLlxuICAgKiBAZGVmYXVsdCB1bmlxdWUgbmFtZSBkZXJpdmVkIGZyb20gdGhlIGNvbnN0cnVjdCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25Db25maWdJZGVudGlmaWVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBhcHBsaWVkIHRvIGFsbCByZXNvdXJjZXMgaW4gdGhlIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RydWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBbiBMMyBDREsgcGF0dGVybiBjb25zdHJ1Y3QgdGhhdCBwcm92aXNpb25zIGEgRE1TIFNlcnZlcmxlc3MgcmVwbGljYXRpb25cbiAqIHBpcGVsaW5lOlxuICpcbiAqIC0gKipSZXBsaWNhdGlvbiBjb25maWcqKiDigJQgYmFja2VkIGJ5IGBDZm5SZXBsaWNhdGlvbkNvbmZpZ2A7IERNUyBhdXRvLXNjYWxlc1xuICogICBjYXBhY2l0eSBiZXR3ZWVuIGBtaW5DYXBhY2l0eVVuaXRzYCBhbmQgYG1heENhcGFjaXR5VW5pdHNgLlxuICogLSAqKlNvdXJjZSBlbmRwb2ludCoqIOKAlCBzdXBwb3J0cyBldmVyeSBlbmdpbmUgRE1TIHN1cHBvcnRzLlxuICogLSAqKlRhcmdldCBlbmRwb2ludCoqIOKAlCBzdXBwb3J0cyBldmVyeSBlbmdpbmUgRE1TIHN1cHBvcnRzLlxuICogLSAqKlN1Ym5ldCBncm91cCoqIOKAlCBwcml2YXRlIHN1Ym5ldCBwbGFjZW1lbnQuXG4gKiAtICoqS01TIGtleSoqIOKAlCBzdG9yYWdlIGVuY3J5cHRpb24gYXQgcmVzdCAoY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQpLlxuICogLSAqKlNlY3VyaXR5IGdyb3VwKiog4oCUIGRlZGljYXRlZCBncm91cCAoY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQpLlxuICogLSAqKklBTSByb2xlcyoqIOKAlCBgZG1zLXZwYy1yb2xlYCBhbmQgYGRtcy1jbG91ZHdhdGNoLWxvZ3Mtcm9sZWAuXG4gKiAtICoqQ2xvdWRXYXRjaCBsb2cgZ3JvdXAqKiDigJQgKG9wdGlvbmFsKSByZXRhaW5zIHJlcGxpY2F0aW9uIGxvZ3MuXG4gKlxuICogPiAqKkNEQyBzdGFydC9zdG9wIHBvc2l0aW9uIGxpbWl0YXRpb24qKjogYENmblJlcGxpY2F0aW9uQ29uZmlnYCBkb2VzIG5vdFxuICogPiBleHBvc2UgYGNkY1N0YXJ0VGltZWAgLyBgY2RjU3RhcnRQb3NpdGlvbmAgLyBgY2RjU3RvcFBvc2l0aW9uYC4gVG8gc3RhcnRcbiAqID4gZnJvbSBhIHNwZWNpZmljIHBvc2l0aW9uLCBjYWxsIHRoZSBgU3RhcnRSZXBsaWNhdGlvbmAgQVBJIGRpcmVjdGx5IGFmdGVyXG4gKiA+IHRoZSBjb25maWcgaXMgY3JlYXRlZCAoZS5nLiBmcm9tIGEgTGFtYmRhIGN1c3RvbSByZXNvdXJjZSBvciBDTEkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwaXBlbGluZSA9IG5ldyBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmUodGhpcywgJ1NlcnZlcmxlc3NQaXBlbGluZScsIHtcbiAqICAgdnBjLFxuICogICBtYXhDYXBhY2l0eVVuaXRzOiA4LFxuICogICBtaWdyYXRpb25UeXBlOiBNaWdyYXRpb25UeXBlLkZVTExfTE9BRF9BTkRfQ0RDLFxuICogICBzb3VyY2VFbmRwb2ludDoge1xuICogICAgIGVuZ2luZTogRW5kcG9pbnRFbmdpbmUuTVlTUUwsXG4gKiAgICAgc2VydmVyTmFtZTogJ215c3FsLmV4YW1wbGUuY29tJyxcbiAqICAgICBwb3J0OiAzMzA2LFxuICogICAgIHVzZXJuYW1lOiAnZG1zX3VzZXInLFxuICogICAgIHBhc3N3b3JkOiBjZGsuU2VjcmV0VmFsdWUuc2VjcmV0c01hbmFnZXIoJ215c3FsLWRtcy1zZWNyZXQnKSxcbiAqICAgfSxcbiAqICAgdGFyZ2V0RW5kcG9pbnQ6IHtcbiAqICAgICBlbmdpbmU6IEVuZHBvaW50RW5naW5lLkFVUk9SQV9QT1NUR1JFU1FMLFxuICogICAgIHNlcnZlck5hbWU6IGNsdXN0ZXIuY2x1c3RlckVuZHBvaW50Lmhvc3RuYW1lLFxuICogICAgIHBvcnQ6IDU0MzIsXG4gKiAgICAgdXNlcm5hbWU6ICdkbXNfdXNlcicsXG4gKiAgICAgcGFzc3dvcmQ6IGNkay5TZWNyZXRWYWx1ZS5zZWNyZXRzTWFuYWdlcignYXVyb3JhLWRtcy1zZWNyZXQnKSxcbiAqICAgfSxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgRG1zU2VydmVybGVzc1BpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIFRoZSB1bmRlcmx5aW5nIGBDZm5SZXBsaWNhdGlvbkNvbmZpZ2AgcmVzb3VyY2UuICovXG4gIHJlYWRvbmx5IGNmblJlcGxpY2F0aW9uQ29uZmlnOiBkbXMuQ2ZuUmVwbGljYXRpb25Db25maWc7XG5cbiAgLyoqIFRoZSBBUk4gb2YgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZy4gKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25Db25maWdBcm46IHN0cmluZztcblxuICAvKiogVGhlIHNvdXJjZSBlbmRwb2ludCB1c2VkIGJ5IHRoaXMgcGlwZWxpbmUuICovXG4gIHJlYWRvbmx5IHNvdXJjZTogSURtc0VuZHBvaW50O1xuXG4gIC8qKiBUaGUgdGFyZ2V0IGVuZHBvaW50IHVzZWQgYnkgdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBJRG1zRW5kcG9pbnQ7XG5cbiAgLyoqIFRoZSByZXBsaWNhdGlvbiBzdWJuZXQgZ3JvdXAgY3JlYXRlZCBmb3IgdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgc3VibmV0R3JvdXA6IGRtcy5DZm5SZXBsaWNhdGlvblN1Ym5ldEdyb3VwO1xuXG4gIC8qKiBUaGUgS01TIGtleSB1c2VkIGZvciBzdG9yYWdlIGVuY3J5cHRpb24uICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk6IGttcy5JS2V5O1xuXG4gIC8qKiBUaGUgc2VjdXJpdHkgZ3JvdXAgYXR0YWNoZWQgdG8gdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuXG4gIC8qKiBDbG91ZFdhdGNoIGxvZyBncm91cCBmb3IgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZyAoaWYgZW5hYmxlQ2xvdWRXYXRjaExvZ3MgaXMgdHJ1ZSkuICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKipcbiAgICogQ29uc3RydWN0IHdyYXBwaW5nIHRoZSBjdXN0b20gcmVzb3VyY2VzIHRoYXQgY3JlYXRlZCB0aGUgYGRtcy1jbG91ZHdhdGNoLWxvZ3Mtcm9sZWAuXG4gICAqIGB1bmRlZmluZWRgIHdoZW4gYGNyZWF0ZURtc1NlcnZpY2VSb2xlc2AgaXMgYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRtc0Nsb3VkV2F0Y2hSb2xlPzogQ29uc3RydWN0O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Qgd3JhcHBpbmcgdGhlIGN1c3RvbSByZXNvdXJjZXMgdGhhdCBjcmVhdGVkIHRoZSBgZG1zLXZwYy1yb2xlYC5cbiAgICogYHVuZGVmaW5lZGAgd2hlbiBgY3JlYXRlRG1zU2VydmljZVJvbGVzYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG1zVnBjUm9sZT86IENvbnN0cnVjdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG1zU2VydmVybGVzc1BpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKHByb3BzKTtcblxuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1k7XG4gICAgY29uc3QgY3JlYXRlUm9sZXMgPSBwcm9wcy5jcmVhdGVEbXNTZXJ2aWNlUm9sZXMgPz8gdHJ1ZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZG1zLXZwYy1yb2xlIOKAlCByZXF1aXJlZCBieSBETVMgdG8gcGxhY2UgdGhlIGNvbmZpZyBpbnNpZGUgYSBWUEMuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAoY3JlYXRlUm9sZXMpIHtcbiAgICAgIHRoaXMuZG1zVnBjUm9sZSA9IGVuc3VyZURtc1ZwY1JvbGUoY2RrLlN0YWNrLm9mKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENsb3VkV2F0Y2ggbG9nIGdyb3VwICYgSUFNIHJvbGVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGVuYWJsZUxvZ3MgPSBwcm9wcy5lbmFibGVDbG91ZFdhdGNoTG9ncyA/PyB0cnVlO1xuXG4gICAgaWYgKGVuYWJsZUxvZ3MpIHtcbiAgICAgIHRoaXMubG9nR3JvdXAgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnTG9nR3JvdXAnLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvZG1zL3NlcnZlcmxlc3MvJHtpZH1gLFxuICAgICAgICByZXRlbnRpb246IHByb3BzLmxvZ1JldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjcmVhdGVSb2xlcykge1xuICAgICAgICB0aGlzLmRtc0Nsb3VkV2F0Y2hSb2xlID0gZW5zdXJlRG1zQ2xvdWRXYXRjaFJvbGUoY2RrLlN0YWNrLm9mKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEtNUyBrZXlcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9XG4gICAgICBwcm9wcy5rbXNLZXkgPz9cbiAgICAgIG5ldyBrbXMuS2V5KHRoaXMsICdFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgICBkZXNjcmlwdGlvbjogYERNUyBzZXJ2ZXJsZXNzIHJlcGxpY2F0aW9uIGVuY3J5cHRpb24ga2V5IGZvciAke2lkfWAsXG4gICAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNlY3VyaXR5IGdyb3VwXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBwcm92aWRlZFNncyA9IHByb3BzLnNlY3VyaXR5R3JvdXBzID8/IFtdO1xuICAgIGlmIChwcm92aWRlZFNncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCAnU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRE1TIHNlcnZlcmxlc3MgcmVwbGljYXRpb24gc2VjdXJpdHkgZ3JvdXAgZm9yICR7aWR9YCxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSBwcm92aWRlZFNnc1swXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwSWRzID1cbiAgICAgIHByb3ZpZGVkU2dzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBwcm92aWRlZFNncy5tYXAoKHNnKSA9PiBzZy5zZWN1cml0eUdyb3VwSWQpXG4gICAgICAgIDogW3RoaXMuc2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWRdO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTdWJuZXQgZ3JvdXBcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHN1Ym5ldFNlbGVjdGlvbiA9IHByb3BzLnZwY1N1Ym5ldHMgPz8ge1xuICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICB9O1xuICAgIGNvbnN0IHN1Ym5ldHMgPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyhzdWJuZXRTZWxlY3Rpb24pO1xuXG4gICAgdGhpcy5zdWJuZXRHcm91cCA9IG5ldyBkbXMuQ2ZuUmVwbGljYXRpb25TdWJuZXRHcm91cCh0aGlzLCAnU3VibmV0R3JvdXAnLCB7XG4gICAgICByZXBsaWNhdGlvblN1Ym5ldEdyb3VwRGVzY3JpcHRpb246IGBETVMgc2VydmVybGVzcyBzdWJuZXQgZ3JvdXAgZm9yICR7aWR9YCxcbiAgICAgIHN1Ym5ldElkczogc3VibmV0cy5zdWJuZXRJZHMsXG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNvdXJjZSBlbmRwb2ludFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgaWYgKHByb3BzLmV4aXN0aW5nU291cmNlRW5kcG9pbnQpIHtcbiAgICAgIHRoaXMuc291cmNlID0gcHJvcHMuZXhpc3RpbmdTb3VyY2VFbmRwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc291cmNlT3B0cyA9IHByb3BzLnNvdXJjZUVuZHBvaW50ITtcbiAgICAgIHRoaXMuc291cmNlID0gbmV3IERtc0VuZHBvaW50KHRoaXMsICdTb3VyY2VFbmRwb2ludCcsIHtcbiAgICAgICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGUuU09VUkNFLFxuICAgICAgICBlbmdpbmU6IHNvdXJjZU9wdHMuZW5naW5lLFxuICAgICAgICBlbmRwb2ludElkZW50aWZpZXI6IHNvdXJjZU9wdHMuZW5kcG9pbnRJZGVudGlmaWVyLFxuICAgICAgICBzZXJ2ZXJOYW1lOiBzb3VyY2VPcHRzLnNlcnZlck5hbWUsXG4gICAgICAgIHBvcnQ6IHNvdXJjZU9wdHMucG9ydCxcbiAgICAgICAgdXNlcm5hbWU6IHNvdXJjZU9wdHMudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBzb3VyY2VPcHRzLnBhc3N3b3JkLFxuICAgICAgICBkYXRhYmFzZU5hbWU6IHNvdXJjZU9wdHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBleHRyYUNvbm5lY3Rpb25BdHRyaWJ1dGVzOiBzb3VyY2VPcHRzLmV4dHJhQ29ubmVjdGlvbkF0dHJpYnV0ZXMsXG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBzb3VyY2VPcHRzLmNlcnRpZmljYXRlQXJuLFxuICAgICAgICBzc2xNb2RlOiBzb3VyY2VPcHRzLnNzbE1vZGUsXG4gICAgICAgIG15U3FsU2V0dGluZ3M6IHNvdXJjZU9wdHMubXlTcWxTZXR0aW5ncyxcbiAgICAgICAgcG9zdGdyZVNxbFNldHRpbmdzOiBzb3VyY2VPcHRzLnBvc3RncmVTcWxTZXR0aW5ncyxcbiAgICAgICAgb3JhY2xlU2V0dGluZ3M6IHNvdXJjZU9wdHMub3JhY2xlU2V0dGluZ3MsXG4gICAgICAgIHNxbFNlcnZlclNldHRpbmdzOiBzb3VyY2VPcHRzLnNxbFNlcnZlclNldHRpbmdzLFxuICAgICAgICBzYXBBc2VTZXR0aW5nczogc291cmNlT3B0cy5zYXBBc2VTZXR0aW5ncyxcbiAgICAgICAgZGIyU2V0dGluZ3M6IHNvdXJjZU9wdHMuZGIyU2V0dGluZ3MsXG4gICAgICAgIG1vbmdvRGJTZXR0aW5nczogc291cmNlT3B0cy5tb25nb0RiU2V0dGluZ3MsXG4gICAgICAgIHMzU2V0dGluZ3M6IHNvdXJjZU9wdHMuczNTZXR0aW5ncyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVGFyZ2V0IGVuZHBvaW50XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAocHJvcHMuZXhpc3RpbmdUYXJnZXRFbmRwb2ludCkge1xuICAgICAgdGhpcy50YXJnZXQgPSBwcm9wcy5leGlzdGluZ1RhcmdldEVuZHBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXRPcHRzID0gcHJvcHMudGFyZ2V0RW5kcG9pbnQhO1xuICAgICAgdGhpcy50YXJnZXQgPSBuZXcgRG1zRW5kcG9pbnQodGhpcywgJ1RhcmdldEVuZHBvaW50Jywge1xuICAgICAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZS5UQVJHRVQsXG4gICAgICAgIGVuZ2luZTogdGFyZ2V0T3B0cy5lbmdpbmUsXG4gICAgICAgIGVuZHBvaW50SWRlbnRpZmllcjogdGFyZ2V0T3B0cy5lbmRwb2ludElkZW50aWZpZXIsXG4gICAgICAgIHNlcnZlck5hbWU6IHRhcmdldE9wdHMuc2VydmVyTmFtZSxcbiAgICAgICAgcG9ydDogdGFyZ2V0T3B0cy5wb3J0LFxuICAgICAgICB1c2VybmFtZTogdGFyZ2V0T3B0cy51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IHRhcmdldE9wdHMucGFzc3dvcmQsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogdGFyZ2V0T3B0cy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIGV4dHJhQ29ubmVjdGlvbkF0dHJpYnV0ZXM6IHRhcmdldE9wdHMuZXh0cmFDb25uZWN0aW9uQXR0cmlidXRlcyxcbiAgICAgICAgY2VydGlmaWNhdGVBcm46IHRhcmdldE9wdHMuY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIHNzbE1vZGU6IHRhcmdldE9wdHMuc3NsTW9kZSxcbiAgICAgICAgbXlTcWxTZXR0aW5nczogdGFyZ2V0T3B0cy5teVNxbFNldHRpbmdzLFxuICAgICAgICBwb3N0Z3JlU3FsU2V0dGluZ3M6IHRhcmdldE9wdHMucG9zdGdyZVNxbFNldHRpbmdzLFxuICAgICAgICBvcmFjbGVTZXR0aW5nczogdGFyZ2V0T3B0cy5vcmFjbGVTZXR0aW5ncyxcbiAgICAgICAgc3FsU2VydmVyU2V0dGluZ3M6IHRhcmdldE9wdHMuc3FsU2VydmVyU2V0dGluZ3MsXG4gICAgICAgIHNhcEFzZVNldHRpbmdzOiB0YXJnZXRPcHRzLnNhcEFzZVNldHRpbmdzLFxuICAgICAgICBkYjJTZXR0aW5nczogdGFyZ2V0T3B0cy5kYjJTZXR0aW5ncyxcbiAgICAgICAgbW9uZ29EYlNldHRpbmdzOiB0YXJnZXRPcHRzLm1vbmdvRGJTZXR0aW5ncyxcbiAgICAgICAgczNTZXR0aW5nczogdGFyZ2V0T3B0cy5zM1NldHRpbmdzLFxuICAgICAgICBkeW5hbW9EYlNldHRpbmdzOiB0YXJnZXRPcHRzLmR5bmFtb0RiU2V0dGluZ3MsXG4gICAgICAgIHJlZHNoaWZ0U2V0dGluZ3M6IHRhcmdldE9wdHMucmVkc2hpZnRTZXR0aW5ncyxcbiAgICAgICAga2luZXNpc1NldHRpbmdzOiB0YXJnZXRPcHRzLmtpbmVzaXNTZXR0aW5ncyxcbiAgICAgICAga2Fma2FTZXR0aW5nczogdGFyZ2V0T3B0cy5rYWZrYVNldHRpbmdzLFxuICAgICAgICBvcGVuU2VhcmNoU2V0dGluZ3M6IHRhcmdldE9wdHMub3BlblNlYXJjaFNldHRpbmdzLFxuICAgICAgICBuZXB0dW5lU2V0dGluZ3M6IHRhcmdldE9wdHMubmVwdHVuZVNldHRpbmdzLFxuICAgICAgICByZWRpc1NldHRpbmdzOiB0YXJnZXRPcHRzLnJlZGlzU2V0dGluZ3MsXG4gICAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFRhYmxlIG1hcHBpbmdzIOKAlCBkZWZhdWx0IHRvIFwiaW5jbHVkZSBldmVyeXRoaW5nXCJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHRhYmxlTWFwcGluZ3NKc29uID1cbiAgICAgIHByb3BzLnRhYmxlTWFwcGluZ3MgPz8gbmV3IFRhYmxlTWFwcGluZ3MoKS5pbmNsdWRlU2NoZW1hKCclJykudG9Kc29uKCk7XG4gICAgLy8gQ2ZuUmVwbGljYXRpb25Db25maWcudGFibGVNYXBwaW5ncyBleHBlY3RzIGEgSlNPTiBvYmplY3QsIG5vdCBhIHN0cmluZy5cbiAgICBjb25zdCB0YWJsZU1hcHBpbmdzT2JqID0gSlNPTi5wYXJzZSh0YWJsZU1hcHBpbmdzSnNvbik7XG5cbiAgICBjb25zdCByZXBsaWNhdGlvblNldHRpbmdzT2JqID1cbiAgICAgIHByb3BzLnRhc2tTZXR0aW5ncyAhPT0gdW5kZWZpbmVkID8gSlNPTi5wYXJzZShwcm9wcy50YXNrU2V0dGluZ3MpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBSZXBsaWNhdGlvbiBjb25maWcgaWRlbnRpZmllclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgY29uZmlnSWRlbnRpZmllciA9XG4gICAgICBwcm9wcy5yZXBsaWNhdGlvbkNvbmZpZ0lkZW50aWZpZXIgPz9cbiAgICAgIGNkay5OYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDYzIH0pLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENmblJlcGxpY2F0aW9uQ29uZmlnXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnID0gbmV3IGRtcy5DZm5SZXBsaWNhdGlvbkNvbmZpZyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICByZXBsaWNhdGlvbkNvbmZpZ0lkZW50aWZpZXI6IGNvbmZpZ0lkZW50aWZpZXIsXG4gICAgICByZXBsaWNhdGlvblR5cGU6IHByb3BzLm1pZ3JhdGlvblR5cGUsXG4gICAgICBzb3VyY2VFbmRwb2ludEFybjogdGhpcy5zb3VyY2UuZW5kcG9pbnRBcm4sXG4gICAgICB0YXJnZXRFbmRwb2ludEFybjogdGhpcy50YXJnZXQuZW5kcG9pbnRBcm4sXG4gICAgICB0YWJsZU1hcHBpbmdzOiB0YWJsZU1hcHBpbmdzT2JqLFxuICAgICAgcmVwbGljYXRpb25TZXR0aW5nczogcmVwbGljYXRpb25TZXR0aW5nc09iaixcbiAgICAgIGNvbXB1dGVDb25maWc6IHtcbiAgICAgICAgbWF4Q2FwYWNpdHlVbml0czogcHJvcHMubWF4Q2FwYWNpdHlVbml0cyxcbiAgICAgICAgbWluQ2FwYWNpdHlVbml0czogcHJvcHMubWluQ2FwYWNpdHlVbml0cyxcbiAgICAgICAgbXVsdGlBejogcHJvcHMubXVsdGlBeiA/PyBmYWxzZSxcbiAgICAgICAga21zS2V5SWQ6IHRoaXMuZW5jcnlwdGlvbktleS5rZXlBcm4sXG4gICAgICAgIHJlcGxpY2F0aW9uU3VibmV0R3JvdXBJZDogdGhpcy5zdWJuZXRHcm91cC5yZWYsXG4gICAgICAgIHZwY1NlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBJZHMsXG4gICAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5jZm5SZXBsaWNhdGlvbkNvbmZpZy5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG5cbiAgICAvLyBkbXMtdnBjLXJvbGUgbXVzdCBleGlzdCBiZWZvcmUgRE1TIGNhbiBkZXNjcmliZSBWUEMgc3VibmV0cyAoc3VibmV0IGdyb3VwKVxuICAgIC8vIG9yIHBsYWNlIHRoZSByZXBsaWNhdGlvbiBjb25maWcgaW5zaWRlIGEgVlBDLlxuICAgIGlmICh0aGlzLmRtc1ZwY1JvbGUpIHtcbiAgICAgIHRoaXMuc3VibmV0R3JvdXAubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuZG1zVnBjUm9sZSk7XG4gICAgICB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmRtc1ZwY1JvbGUpO1xuICAgIH1cblxuICAgIHRoaXMucmVwbGljYXRpb25Db25maWdBcm4gPSB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnLnJlZjtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YXRlIGhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BzKHByb3BzOiBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmVQcm9wcyk6IHZvaWQge1xuICAgIGlmICghVkFMSURfQ0FQQUNJVFlfVU5JVFMuaGFzKHByb3BzLm1heENhcGFjaXR5VW5pdHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtYXhDYXBhY2l0eVVuaXRzIG11c3QgYmUgb25lIG9mICR7Wy4uLlZBTElEX0NBUEFDSVRZX1VOSVRTXS5qb2luKCcsICcpfS4gR290OiAke3Byb3BzLm1heENhcGFjaXR5VW5pdHN9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHByb3BzLm1pbkNhcGFjaXR5VW5pdHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIVZBTElEX0NBUEFDSVRZX1VOSVRTLmhhcyhwcm9wcy5taW5DYXBhY2l0eVVuaXRzKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWluQ2FwYWNpdHlVbml0cyBtdXN0IGJlIG9uZSBvZiAke1suLi5WQUxJRF9DQVBBQ0lUWV9VTklUU10uam9pbignLCAnKX0uIEdvdDogJHtwcm9wcy5taW5DYXBhY2l0eVVuaXRzfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcm9wcy5taW5DYXBhY2l0eVVuaXRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm1pbkNhcGFjaXR5VW5pdHMgPiBwcm9wcy5tYXhDYXBhY2l0eVVuaXRzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtaW5DYXBhY2l0eVVuaXRzICgke3Byb3BzLm1pbkNhcGFjaXR5VW5pdHN9KSBtdXN0IGJlIDw9IG1heENhcGFjaXR5VW5pdHMgKCR7cHJvcHMubWF4Q2FwYWNpdHlVbml0c30pLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1NvdXJjZSA9ICEhcHJvcHMuc291cmNlRW5kcG9pbnQ7XG4gICAgY29uc3QgaGFzRXhpc3RpbmdTb3VyY2UgPSAhIXByb3BzLmV4aXN0aW5nU291cmNlRW5kcG9pbnQ7XG4gICAgaWYgKGhhc1NvdXJjZSAmJiBoYXNFeGlzdGluZ1NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGVpdGhlciBgc291cmNlRW5kcG9pbnRgIG9yIGBleGlzdGluZ1NvdXJjZUVuZHBvaW50YCwgbm90IGJvdGguJyk7XG4gICAgfVxuICAgIGlmICghaGFzU291cmNlICYmICFoYXNFeGlzdGluZ1NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgb2YgYHNvdXJjZUVuZHBvaW50YCBvciBgZXhpc3RpbmdTb3VyY2VFbmRwb2ludGAgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVGFyZ2V0ID0gISFwcm9wcy50YXJnZXRFbmRwb2ludDtcbiAgICBjb25zdCBoYXNFeGlzdGluZ1RhcmdldCA9ICEhcHJvcHMuZXhpc3RpbmdUYXJnZXRFbmRwb2ludDtcbiAgICBpZiAoaGFzVGFyZ2V0ICYmIGhhc0V4aXN0aW5nVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGUgZWl0aGVyIGB0YXJnZXRFbmRwb2ludGAgb3IgYGV4aXN0aW5nVGFyZ2V0RW5kcG9pbnRgLCBub3QgYm90aC4nKTtcbiAgICB9XG4gICAgaWYgKCFoYXNUYXJnZXQgJiYgIWhhc0V4aXN0aW5nVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBvZiBgdGFyZ2V0RW5kcG9pbnRgIG9yIGBleGlzdGluZ1RhcmdldEVuZHBvaW50YCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1waXBlbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2ZXJsZXNzLXBpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFDbkMseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsMkRBQTZDO0FBQzdDLDJDQUF1QztBQUN2QywyQ0FBd0U7QUFDeEUseUNBQXVEO0FBQ3ZELG1DQUFzRDtBQUV0RCxxREFBaUQ7QUFFakQsOEVBQThFO0FBQzlFLG1FQUFtRTtBQUNuRSw4RUFBOEU7QUFDOUUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBc0xuRiw4RUFBOEU7QUFDOUUsWUFBWTtBQUNaLDhFQUE4RTtBQUU5RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxzQkFBUzs7SUFDbEQsc0RBQXNEO0lBQzdDLG9CQUFvQixDQUEyQjtJQUV4RCx5Q0FBeUM7SUFDaEMsb0JBQW9CLENBQVM7SUFFdEMsaURBQWlEO0lBQ3hDLE1BQU0sQ0FBZTtJQUU5QixpREFBaUQ7SUFDeEMsTUFBTSxDQUFlO0lBRTlCLDhEQUE4RDtJQUNyRCxXQUFXLENBQWdDO0lBRXBELCtDQUErQztJQUN0QyxhQUFhLENBQVc7SUFFakMsb0RBQW9EO0lBQzNDLGFBQWEsQ0FBcUI7SUFFM0MseUZBQXlGO0lBQ2hGLFFBQVEsQ0FBaUI7SUFFbEM7OztPQUdHO0lBQ00saUJBQWlCLENBQWE7SUFFdkM7OztPQUdHO0lBQ00s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QUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztRQUN6RCxJQUFJLFNBQVMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDekQsSUFBSSxTQUFTLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQzs7QUFuUkgsc0RBb1JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGRtcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZG1zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBlbnN1cmVEbXNDbG91ZFdhdGNoUm9sZSwgZW5zdXJlRG1zVnBjUm9sZSB9IGZyb20gJy4vZG1zLXJvbGVzJztcbmltcG9ydCB7IERtc0VuZHBvaW50LCBJRG1zRW5kcG9pbnQgfSBmcm9tICcuL2VuZHBvaW50JztcbmltcG9ydCB7IEVuZHBvaW50VHlwZSwgTWlncmF0aW9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgU291cmNlRW5kcG9pbnRPcHRpb25zLCBUYXJnZXRFbmRwb2ludE9wdGlvbnMgfSBmcm9tICcuL21pZ3JhdGlvbi1waXBlbGluZSc7XG5pbXBvcnQgeyBUYWJsZU1hcHBpbmdzIH0gZnJvbSAnLi90YWJsZS1tYXBwaW5ncyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmFsaWQgY2FwYWNpdHkgdW5pdCB2YWx1ZXMg4oCUIGRvY3VtZW50ZWQgaW4gdGhlIERNUyBBUEkgcmVmZXJlbmNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNvbnN0IFZBTElEX0NBUEFDSVRZX1VOSVRTID0gbmV3IFNldChbMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAxOTIsIDI1NiwgMzg0XSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJvcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUHJvcHMgZm9yIHtAbGluayBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmVQcm9wcyB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTmV0d29ya2luZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFZQQyBpbiB3aGljaCB0byBwbGFjZSB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBjb25maWcuXG4gICAqIFRoZSBjb25maWcgaXMgcGxhY2VkIGluIHByaXZhdGUgc3VibmV0cy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldCBzZWxlY3Rpb24gZm9yIHRoZSByZXBsaWNhdGlvbiBzdWJuZXQgZ3JvdXAuXG4gICAqIEBkZWZhdWx0IHByaXZhdGUgc3VibmV0cyB3aXRoIGVncmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGdyb3VwcyB0byBhdHRhY2ggdG8gdGhlIHNlcnZlcmxlc3MgcmVwbGljYXRpb24gY29uZmlnLlxuICAgKiBBIG5ldyBzZWN1cml0eSBncm91cCBpcyBjcmVhdGVkIGlmIG5vbmUgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIENvbXB1dGUgY29uZmlnXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgRE1TIENhcGFjaXR5IFVuaXRzIChEQ1VzKSB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBtYXlcbiAgICogc2NhbGUgdXAgdG8uXG4gICAqXG4gICAqIFZhbGlkIHZhbHVlczogMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4LCAxOTIsIDI1NiwgMzg0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHlVbml0czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiBEQ1VzIERNUyB3aWxsIHByb3Zpc2lvbiBhdCBzdGFydC11cC5cbiAgICogQGRlZmF1bHQgRE1TIGF1dG8tZGV0ZXJtaW5lcyBiYXNlZCBvbiB3b3JrbG9hZFxuICAgKi9cbiAgcmVhZG9ubHkgbWluQ2FwYWNpdHlVbml0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VydmVybGVzcyByZXBsaWNhdGlvbiBpcyBNdWx0aS1BWi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG11bHRpQXo/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93LCBlLmcuIFwic3VuOjA0OjAwLXN1bjowNDozMFwiLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFbmNyeXB0aW9uXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgcmVwbGljYXRpb24gc3RvcmFnZSBhdCByZXN0LlxuICAgKiBBIG5ldyBrZXkgaXMgY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVuZHBvaW50c1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFNvdXJjZSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICAgKiBQcm92aWRlIHRoaXMgT1IgYGV4aXN0aW5nU291cmNlRW5kcG9pbnRgIOKAlCBub3QgYm90aC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUVuZHBvaW50PzogU291cmNlRW5kcG9pbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBbiBleGlzdGluZyB7QGxpbmsgSURtc0VuZHBvaW50fSB0byB1c2UgYXMgdGhlIHNvdXJjZS5cbiAgICogUHJvdmlkZSB0aGlzIE9SIGBzb3VyY2VFbmRwb2ludGAg4oCUIG5vdCBib3RoLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdTb3VyY2VFbmRwb2ludD86IElEbXNFbmRwb2ludDtcblxuICAvKipcbiAgICogVGFyZ2V0IGVuZHBvaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIFByb3ZpZGUgdGhpcyBPUiBgZXhpc3RpbmdUYXJnZXRFbmRwb2ludGAg4oCUIG5vdCBib3RoLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0RW5kcG9pbnQ/OiBUYXJnZXRFbmRwb2ludE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFuIGV4aXN0aW5nIHtAbGluayBJRG1zRW5kcG9pbnR9IHRvIHVzZSBhcyB0aGUgdGFyZ2V0LlxuICAgKiBQcm92aWRlIHRoaXMgT1IgYHRhcmdldEVuZHBvaW50YCDigJQgbm90IGJvdGguXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1RhcmdldEVuZHBvaW50PzogSURtc0VuZHBvaW50O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWlncmF0aW9uIGNvbmZpZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFRoZSB0eXBlIG9mIG1pZ3JhdGlvbiB0byBwZXJmb3JtLiAqL1xuICByZWFkb25seSBtaWdyYXRpb25UeXBlOiBNaWdyYXRpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUYWJsZSBtYXBwaW5ncyBKU09OIHN0cmluZy5cbiAgICogVXNlIHtAbGluayBUYWJsZU1hcHBpbmdzfSB0byBidWlsZCB0aGlzLlxuICAgKiBEZWZhdWx0cyB0byBcImluY2x1ZGUgYWxsIHRhYmxlcyBpbiBhbGwgc2NoZW1hc1wiIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTWFwcGluZ3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlcGxpY2F0aW9uIHNldHRpbmdzIEpTT04gc3RyaW5nIChlcXVpdmFsZW50IHRvIHRhc2sgc2V0dGluZ3MgZm9yIGNsYXNzaWMgRE1TKS5cbiAgICogVXNlIHtAbGluayBUYXNrU2V0dGluZ3N9IHRvIGJ1aWxkIHRoaXMuXG4gICAqIFNlbnNpYmxlIGRlZmF1bHRzIGFyZSBhcHBsaWVkIGJ5IERNUyBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEByZW1hcmtzIERNUyBTZXJ2ZXJsZXNzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBDREMgc3RhcnQvc3RvcCBwb3NpdGlvbnNcbiAgICogdmlhIENsb3VkRm9ybWF0aW9uLiBUbyBzdGFydCByZXBsaWNhdGlvbiBmcm9tIGEgc3BlY2lmaWMgTFNOIG9yIHRpbWVzdGFtcFxuICAgKiBhZnRlciB0aGUgcmVwbGljYXRpb24gY29uZmlnIGhhcyBiZWVuIGNyZWF0ZWQsIGNhbGwgdGhlXG4gICAqIGBTdGFydFJlcGxpY2F0aW9uYCBBUEkgd2l0aCBgU3RhcnRSZXBsaWNhdGlvblRhc2tUeXBlYCBzZXQgdG9cbiAgICogYHN0YXJ0LXJlcGxpY2F0aW9uYCBhbmQgc3VwcGx5IGBDZGNTdGFydFBvc2l0aW9uYCBvciBgQ2RjU3RhcnRUaW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHRhc2tTZXR0aW5ncz86IHN0cmluZztcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE9ic2VydmFiaWxpdHlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSBhIENsb3VkV2F0Y2ggbG9nIGdyb3VwIGZvciB0aGUgcmVwbGljYXRpb24gY29uZmlnLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVDbG91ZFdhdGNoTG9ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJldGVudGlvbiBwZXJpb2QgZm9yIHRoZSBDbG91ZFdhdGNoIGxvZyBncm91cC5cbiAgICogQGRlZmF1bHQgbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSUFNIC8gc2VydmljZSByb2xlc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIHRoZSB0d28gYWNjb3VudC1sZXZlbCBETVMgc2VydmljZSByb2xlcyAoYGRtcy12cGMtcm9sZWBcbiAgICogYW5kIGBkbXMtY2xvdWR3YXRjaC1sb2dzLXJvbGVgKSByZXF1aXJlZCBieSBETVMuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgcm9sZXMgYXJlIGNyZWF0ZWQgaWRlbXBvdGVudGx5IHZpYSBhIGN1c3RvbSByZXNvdXJjZTogaWZcbiAgICogZWl0aGVyIHJvbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGFjY291bnQgKGNyZWF0ZWQgYnkgYW5vdGhlciBzdGFjayBvclxuICAgKiBtYW51YWxseSksIHRoZSBleGlzdGluZyByb2xlIGlzIHNpbGVudGx5IHJldXNlZCBhbmQgaXRzIHRydXN0IHBvbGljeSBpc1xuICAgKiBjb3JyZWN0ZWQgaWYgbmVjZXNzYXJ5LiBUaGUgcm9sZXMgYXJlIGNyZWF0ZWQgd2l0aCBgUmVtb3ZhbFBvbGljeS5SRVRBSU5gXG4gICAqIGFuZCBhcmUgKipub3QqKiBsaWZlY3ljbGUtbWFuYWdlZCBieSB0aGlzIHN0YWNrIOKAlCB0aGV5IHdpbGwgbm90IGJlIGRlbGV0ZWRcbiAgICogd2hlbiB0aGUgc3RhY2sgaXMgZGVzdHJveWVkLiBJZiB5b3UgcmVxdWlyZSB0aGUgcm9sZXMgdG8gYmVcbiAgICogbGlmZWN5Y2xlLW1hbmFnZWQsIGNyZWF0ZSB0aGVtIGluIGEgZGVkaWNhdGVkIHN0YWNrIGFuZCBzZXQgdGhpcyB0b1xuICAgKiBgZmFsc2VgLCB0aGVuIHBhc3MgY3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCwgdGhlIGNvbnN0cnVjdCBleHBlY3RzIHRoZSByb2xlcyB0byBhbHJlYWR5IGJlIHByZXNlbnQgYW5kXG4gICAqIHNraXBzIGNyZWF0aW5nIHRoZW0uIFRoZSBgZG1zVnBjUm9sZWAgYW5kIGBkbXNDbG91ZFdhdGNoUm9sZWAgcHJvcGVydGllc1xuICAgKiB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVEbXNTZXJ2aWNlUm9sZXM/OiBib29sZWFuO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTmFtaW5nIC8gbGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogTG9naWNhbCBpZGVudGlmaWVyIGZvciB0aGUgcmVwbGljYXRpb24gY29uZmlnIHJlc291cmNlLlxuICAgKiBAZGVmYXVsdCB1bmlxdWUgbmFtZSBkZXJpdmVkIGZyb20gdGhlIGNvbnN0cnVjdCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25Db25maWdJZGVudGlmaWVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBhcHBsaWVkIHRvIGFsbCByZXNvdXJjZXMgaW4gdGhlIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RydWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBbiBMMyBDREsgcGF0dGVybiBjb25zdHJ1Y3QgdGhhdCBwcm92aXNpb25zIGEgRE1TIFNlcnZlcmxlc3MgcmVwbGljYXRpb25cbiAqIHBpcGVsaW5lOlxuICpcbiAqIC0gKipSZXBsaWNhdGlvbiBjb25maWcqKiDigJQgYmFja2VkIGJ5IGBDZm5SZXBsaWNhdGlvbkNvbmZpZ2A7IERNUyBhdXRvLXNjYWxlc1xuICogICBjYXBhY2l0eSBiZXR3ZWVuIGBtaW5DYXBhY2l0eVVuaXRzYCBhbmQgYG1heENhcGFjaXR5VW5pdHNgLlxuICogLSAqKlNvdXJjZSBlbmRwb2ludCoqIOKAlCBzdXBwb3J0cyBldmVyeSBlbmdpbmUgRE1TIHN1cHBvcnRzLlxuICogLSAqKlRhcmdldCBlbmRwb2ludCoqIOKAlCBzdXBwb3J0cyBldmVyeSBlbmdpbmUgRE1TIHN1cHBvcnRzLlxuICogLSAqKlN1Ym5ldCBncm91cCoqIOKAlCBwcml2YXRlIHN1Ym5ldCBwbGFjZW1lbnQuXG4gKiAtICoqS01TIGtleSoqIOKAlCBzdG9yYWdlIGVuY3J5cHRpb24gYXQgcmVzdCAoY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQpLlxuICogLSAqKlNlY3VyaXR5IGdyb3VwKiog4oCUIGRlZGljYXRlZCBncm91cCAoY3JlYXRlZCBpZiBub3QgcHJvdmlkZWQpLlxuICogLSAqKklBTSByb2xlcyoqIOKAlCBgZG1zLXZwYy1yb2xlYCBhbmQgYGRtcy1jbG91ZHdhdGNoLWxvZ3Mtcm9sZWAuXG4gKiAtICoqQ2xvdWRXYXRjaCBsb2cgZ3JvdXAqKiDigJQgKG9wdGlvbmFsKSByZXRhaW5zIHJlcGxpY2F0aW9uIGxvZ3MuXG4gKlxuICogPiAqKkNEQyBzdGFydC9zdG9wIHBvc2l0aW9uIGxpbWl0YXRpb24qKjogYENmblJlcGxpY2F0aW9uQ29uZmlnYCBkb2VzIG5vdFxuICogPiBleHBvc2UgYGNkY1N0YXJ0VGltZWAgLyBgY2RjU3RhcnRQb3NpdGlvbmAgLyBgY2RjU3RvcFBvc2l0aW9uYC4gVG8gc3RhcnRcbiAqID4gZnJvbSBhIHNwZWNpZmljIHBvc2l0aW9uLCBjYWxsIHRoZSBgU3RhcnRSZXBsaWNhdGlvbmAgQVBJIGRpcmVjdGx5IGFmdGVyXG4gKiA+IHRoZSBjb25maWcgaXMgY3JlYXRlZCAoZS5nLiBmcm9tIGEgTGFtYmRhIGN1c3RvbSByZXNvdXJjZSBvciBDTEkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwaXBlbGluZSA9IG5ldyBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmUodGhpcywgJ1NlcnZlcmxlc3NQaXBlbGluZScsIHtcbiAqICAgdnBjLFxuICogICBtYXhDYXBhY2l0eVVuaXRzOiA4LFxuICogICBtaWdyYXRpb25UeXBlOiBNaWdyYXRpb25UeXBlLkZVTExfTE9BRF9BTkRfQ0RDLFxuICogICBzb3VyY2VFbmRwb2ludDoge1xuICogICAgIGVuZ2luZTogRW5kcG9pbnRFbmdpbmUuTVlTUUwsXG4gKiAgICAgc2VydmVyTmFtZTogJ215c3FsLmV4YW1wbGUuY29tJyxcbiAqICAgICBwb3J0OiAzMzA2LFxuICogICAgIHVzZXJuYW1lOiAnZG1zX3VzZXInLFxuICogICAgIHBhc3N3b3JkOiBjZGsuU2VjcmV0VmFsdWUuc2VjcmV0c01hbmFnZXIoJ215c3FsLWRtcy1zZWNyZXQnKSxcbiAqICAgfSxcbiAqICAgdGFyZ2V0RW5kcG9pbnQ6IHtcbiAqICAgICBlbmdpbmU6IEVuZHBvaW50RW5naW5lLkFVUk9SQV9QT1NUR1JFU1FMLFxuICogICAgIHNlcnZlck5hbWU6IGNsdXN0ZXIuY2x1c3RlckVuZHBvaW50Lmhvc3RuYW1lLFxuICogICAgIHBvcnQ6IDU0MzIsXG4gKiAgICAgdXNlcm5hbWU6ICdkbXNfdXNlcicsXG4gKiAgICAgcGFzc3dvcmQ6IGNkay5TZWNyZXRWYWx1ZS5zZWNyZXRzTWFuYWdlcignYXVyb3JhLWRtcy1zZWNyZXQnKSxcbiAqICAgfSxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgRG1zU2VydmVybGVzc1BpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIFRoZSB1bmRlcmx5aW5nIGBDZm5SZXBsaWNhdGlvbkNvbmZpZ2AgcmVzb3VyY2UuICovXG4gIHJlYWRvbmx5IGNmblJlcGxpY2F0aW9uQ29uZmlnOiBkbXMuQ2ZuUmVwbGljYXRpb25Db25maWc7XG5cbiAgLyoqIFRoZSBBUk4gb2YgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZy4gKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25Db25maWdBcm46IHN0cmluZztcblxuICAvKiogVGhlIHNvdXJjZSBlbmRwb2ludCB1c2VkIGJ5IHRoaXMgcGlwZWxpbmUuICovXG4gIHJlYWRvbmx5IHNvdXJjZTogSURtc0VuZHBvaW50O1xuXG4gIC8qKiBUaGUgdGFyZ2V0IGVuZHBvaW50IHVzZWQgYnkgdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBJRG1zRW5kcG9pbnQ7XG5cbiAgLyoqIFRoZSByZXBsaWNhdGlvbiBzdWJuZXQgZ3JvdXAgY3JlYXRlZCBmb3IgdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgc3VibmV0R3JvdXA6IGRtcy5DZm5SZXBsaWNhdGlvblN1Ym5ldEdyb3VwO1xuXG4gIC8qKiBUaGUgS01TIGtleSB1c2VkIGZvciBzdG9yYWdlIGVuY3J5cHRpb24uICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk6IGttcy5JS2V5O1xuXG4gIC8qKiBUaGUgc2VjdXJpdHkgZ3JvdXAgYXR0YWNoZWQgdG8gdGhpcyBwaXBlbGluZS4gKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuXG4gIC8qKiBDbG91ZFdhdGNoIGxvZyBncm91cCBmb3IgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZyAoaWYgZW5hYmxlQ2xvdWRXYXRjaExvZ3MgaXMgdHJ1ZSkuICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKipcbiAgICogQ29uc3RydWN0IHdyYXBwaW5nIHRoZSBjdXN0b20gcmVzb3VyY2VzIHRoYXQgY3JlYXRlZCB0aGUgYGRtcy1jbG91ZHdhdGNoLWxvZ3Mtcm9sZWAuXG4gICAqIGB1bmRlZmluZWRgIHdoZW4gYGNyZWF0ZURtc1NlcnZpY2VSb2xlc2AgaXMgYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGRtc0Nsb3VkV2F0Y2hSb2xlPzogQ29uc3RydWN0O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Qgd3JhcHBpbmcgdGhlIGN1c3RvbSByZXNvdXJjZXMgdGhhdCBjcmVhdGVkIHRoZSBgZG1zLXZwYy1yb2xlYC5cbiAgICogYHVuZGVmaW5lZGAgd2hlbiBgY3JlYXRlRG1zU2VydmljZVJvbGVzYCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG1zVnBjUm9sZT86IENvbnN0cnVjdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG1zU2VydmVybGVzc1BpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKHByb3BzKTtcblxuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1k7XG4gICAgY29uc3QgY3JlYXRlUm9sZXMgPSBwcm9wcy5jcmVhdGVEbXNTZXJ2aWNlUm9sZXMgPz8gdHJ1ZTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZG1zLXZwYy1yb2xlIOKAlCByZXF1aXJlZCBieSBETVMgdG8gcGxhY2UgdGhlIGNvbmZpZyBpbnNpZGUgYSBWUEMuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAoY3JlYXRlUm9sZXMpIHtcbiAgICAgIHRoaXMuZG1zVnBjUm9sZSA9IGVuc3VyZURtc1ZwY1JvbGUoY2RrLlN0YWNrLm9mKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENsb3VkV2F0Y2ggbG9nIGdyb3VwICYgSUFNIHJvbGVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGVuYWJsZUxvZ3MgPSBwcm9wcy5lbmFibGVDbG91ZFdhdGNoTG9ncyA/PyB0cnVlO1xuXG4gICAgaWYgKGVuYWJsZUxvZ3MpIHtcbiAgICAgIHRoaXMubG9nR3JvdXAgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnTG9nR3JvdXAnLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvZG1zL3NlcnZlcmxlc3MvJHtpZH1gLFxuICAgICAgICByZXRlbnRpb246IHByb3BzLmxvZ1JldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjcmVhdGVSb2xlcykge1xuICAgICAgICB0aGlzLmRtc0Nsb3VkV2F0Y2hSb2xlID0gZW5zdXJlRG1zQ2xvdWRXYXRjaFJvbGUoY2RrLlN0YWNrLm9mKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEtNUyBrZXlcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9XG4gICAgICBwcm9wcy5rbXNLZXkgPz9cbiAgICAgIG5ldyBrbXMuS2V5KHRoaXMsICdFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgICBkZXNjcmlwdGlvbjogYERNUyBzZXJ2ZXJsZXNzIHJlcGxpY2F0aW9uIGVuY3J5cHRpb24ga2V5IGZvciAke2lkfWAsXG4gICAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNlY3VyaXR5IGdyb3VwXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBwcm92aWRlZFNncyA9IHByb3BzLnNlY3VyaXR5R3JvdXBzID8/IFtdO1xuICAgIGlmIChwcm92aWRlZFNncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCAnU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRE1TIHNlcnZlcmxlc3MgcmVwbGljYXRpb24gc2VjdXJpdHkgZ3JvdXAgZm9yICR7aWR9YCxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSBwcm92aWRlZFNnc1swXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwSWRzID1cbiAgICAgIHByb3ZpZGVkU2dzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBwcm92aWRlZFNncy5tYXAoKHNnKSA9PiBzZy5zZWN1cml0eUdyb3VwSWQpXG4gICAgICAgIDogW3RoaXMuc2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWRdO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTdWJuZXQgZ3JvdXBcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHN1Ym5ldFNlbGVjdGlvbiA9IHByb3BzLnZwY1N1Ym5ldHMgPz8ge1xuICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICB9O1xuICAgIGNvbnN0IHN1Ym5ldHMgPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyhzdWJuZXRTZWxlY3Rpb24pO1xuXG4gICAgdGhpcy5zdWJuZXRHcm91cCA9IG5ldyBkbXMuQ2ZuUmVwbGljYXRpb25TdWJuZXRHcm91cCh0aGlzLCAnU3VibmV0R3JvdXAnLCB7XG4gICAgICByZXBsaWNhdGlvblN1Ym5ldEdyb3VwRGVzY3JpcHRpb246IGBETVMgc2VydmVybGVzcyBzdWJuZXQgZ3JvdXAgZm9yICR7aWR9YCxcbiAgICAgIHN1Ym5ldElkczogc3VibmV0cy5zdWJuZXRJZHMsXG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNvdXJjZSBlbmRwb2ludFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgaWYgKHByb3BzLmV4aXN0aW5nU291cmNlRW5kcG9pbnQpIHtcbiAgICAgIHRoaXMuc291cmNlID0gcHJvcHMuZXhpc3RpbmdTb3VyY2VFbmRwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc291cmNlT3B0cyA9IHByb3BzLnNvdXJjZUVuZHBvaW50ITtcbiAgICAgIHRoaXMuc291cmNlID0gbmV3IERtc0VuZHBvaW50KHRoaXMsICdTb3VyY2VFbmRwb2ludCcsIHtcbiAgICAgICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGUuU09VUkNFLFxuICAgICAgICBlbmdpbmU6IHNvdXJjZU9wdHMuZW5naW5lLFxuICAgICAgICBlbmRwb2ludElkZW50aWZpZXI6IHNvdXJjZU9wdHMuZW5kcG9pbnRJZGVudGlmaWVyLFxuICAgICAgICBzZXJ2ZXJOYW1lOiBzb3VyY2VPcHRzLnNlcnZlck5hbWUsXG4gICAgICAgIHBvcnQ6IHNvdXJjZU9wdHMucG9ydCxcbiAgICAgICAgdXNlcm5hbWU6IHNvdXJjZU9wdHMudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBzb3VyY2VPcHRzLnBhc3N3b3JkLFxuICAgICAgICBkYXRhYmFzZU5hbWU6IHNvdXJjZU9wdHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBleHRyYUNvbm5lY3Rpb25BdHRyaWJ1dGVzOiBzb3VyY2VPcHRzLmV4dHJhQ29ubmVjdGlvbkF0dHJpYnV0ZXMsXG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBzb3VyY2VPcHRzLmNlcnRpZmljYXRlQXJuLFxuICAgICAgICBzc2xNb2RlOiBzb3VyY2VPcHRzLnNzbE1vZGUsXG4gICAgICAgIG15U3FsU2V0dGluZ3M6IHNvdXJjZU9wdHMubXlTcWxTZXR0aW5ncyxcbiAgICAgICAgcG9zdGdyZVNxbFNldHRpbmdzOiBzb3VyY2VPcHRzLnBvc3RncmVTcWxTZXR0aW5ncyxcbiAgICAgICAgb3JhY2xlU2V0dGluZ3M6IHNvdXJjZU9wdHMub3JhY2xlU2V0dGluZ3MsXG4gICAgICAgIHNxbFNlcnZlclNldHRpbmdzOiBzb3VyY2VPcHRzLnNxbFNlcnZlclNldHRpbmdzLFxuICAgICAgICBzYXBBc2VTZXR0aW5nczogc291cmNlT3B0cy5zYXBBc2VTZXR0aW5ncyxcbiAgICAgICAgZGIyU2V0dGluZ3M6IHNvdXJjZU9wdHMuZGIyU2V0dGluZ3MsXG4gICAgICAgIG1vbmdvRGJTZXR0aW5nczogc291cmNlT3B0cy5tb25nb0RiU2V0dGluZ3MsXG4gICAgICAgIHMzU2V0dGluZ3M6IHNvdXJjZU9wdHMuczNTZXR0aW5ncyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVGFyZ2V0IGVuZHBvaW50XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAocHJvcHMuZXhpc3RpbmdUYXJnZXRFbmRwb2ludCkge1xuICAgICAgdGhpcy50YXJnZXQgPSBwcm9wcy5leGlzdGluZ1RhcmdldEVuZHBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXRPcHRzID0gcHJvcHMudGFyZ2V0RW5kcG9pbnQhO1xuICAgICAgdGhpcy50YXJnZXQgPSBuZXcgRG1zRW5kcG9pbnQodGhpcywgJ1RhcmdldEVuZHBvaW50Jywge1xuICAgICAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZS5UQVJHRVQsXG4gICAgICAgIGVuZ2luZTogdGFyZ2V0T3B0cy5lbmdpbmUsXG4gICAgICAgIGVuZHBvaW50SWRlbnRpZmllcjogdGFyZ2V0T3B0cy5lbmRwb2ludElkZW50aWZpZXIsXG4gICAgICAgIHNlcnZlck5hbWU6IHRhcmdldE9wdHMuc2VydmVyTmFtZSxcbiAgICAgICAgcG9ydDogdGFyZ2V0T3B0cy5wb3J0LFxuICAgICAgICB1c2VybmFtZTogdGFyZ2V0T3B0cy51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IHRhcmdldE9wdHMucGFzc3dvcmQsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogdGFyZ2V0T3B0cy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIGV4dHJhQ29ubmVjdGlvbkF0dHJpYnV0ZXM6IHRhcmdldE9wdHMuZXh0cmFDb25uZWN0aW9uQXR0cmlidXRlcyxcbiAgICAgICAgY2VydGlmaWNhdGVBcm46IHRhcmdldE9wdHMuY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIHNzbE1vZGU6IHRhcmdldE9wdHMuc3NsTW9kZSxcbiAgICAgICAgbXlTcWxTZXR0aW5nczogdGFyZ2V0T3B0cy5teVNxbFNldHRpbmdzLFxuICAgICAgICBwb3N0Z3JlU3FsU2V0dGluZ3M6IHRhcmdldE9wdHMucG9zdGdyZVNxbFNldHRpbmdzLFxuICAgICAgICBvcmFjbGVTZXR0aW5nczogdGFyZ2V0T3B0cy5vcmFjbGVTZXR0aW5ncyxcbiAgICAgICAgc3FsU2VydmVyU2V0dGluZ3M6IHRhcmdldE9wdHMuc3FsU2VydmVyU2V0dGluZ3MsXG4gICAgICAgIHNhcEFzZVNldHRpbmdzOiB0YXJnZXRPcHRzLnNhcEFzZVNldHRpbmdzLFxuICAgICAgICBkYjJTZXR0aW5nczogdGFyZ2V0T3B0cy5kYjJTZXR0aW5ncyxcbiAgICAgICAgbW9uZ29EYlNldHRpbmdzOiB0YXJnZXRPcHRzLm1vbmdvRGJTZXR0aW5ncyxcbiAgICAgICAgczNTZXR0aW5nczogdGFyZ2V0T3B0cy5zM1NldHRpbmdzLFxuICAgICAgICBkeW5hbW9EYlNldHRpbmdzOiB0YXJnZXRPcHRzLmR5bmFtb0RiU2V0dGluZ3MsXG4gICAgICAgIHJlZHNoaWZ0U2V0dGluZ3M6IHRhcmdldE9wdHMucmVkc2hpZnRTZXR0aW5ncyxcbiAgICAgICAga2luZXNpc1NldHRpbmdzOiB0YXJnZXRPcHRzLmtpbmVzaXNTZXR0aW5ncyxcbiAgICAgICAga2Fma2FTZXR0aW5nczogdGFyZ2V0T3B0cy5rYWZrYVNldHRpbmdzLFxuICAgICAgICBvcGVuU2VhcmNoU2V0dGluZ3M6IHRhcmdldE9wdHMub3BlblNlYXJjaFNldHRpbmdzLFxuICAgICAgICBuZXB0dW5lU2V0dGluZ3M6IHRhcmdldE9wdHMubmVwdHVuZVNldHRpbmdzLFxuICAgICAgICByZWRpc1NldHRpbmdzOiB0YXJnZXRPcHRzLnJlZGlzU2V0dGluZ3MsXG4gICAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFRhYmxlIG1hcHBpbmdzIOKAlCBkZWZhdWx0IHRvIFwiaW5jbHVkZSBldmVyeXRoaW5nXCJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHRhYmxlTWFwcGluZ3NKc29uID1cbiAgICAgIHByb3BzLnRhYmxlTWFwcGluZ3MgPz8gbmV3IFRhYmxlTWFwcGluZ3MoKS5pbmNsdWRlU2NoZW1hKCclJykudG9Kc29uKCk7XG4gICAgLy8gQ2ZuUmVwbGljYXRpb25Db25maWcudGFibGVNYXBwaW5ncyBleHBlY3RzIGEgSlNPTiBvYmplY3QsIG5vdCBhIHN0cmluZy5cbiAgICBjb25zdCB0YWJsZU1hcHBpbmdzT2JqID0gSlNPTi5wYXJzZSh0YWJsZU1hcHBpbmdzSnNvbik7XG5cbiAgICBjb25zdCByZXBsaWNhdGlvblNldHRpbmdzT2JqID1cbiAgICAgIHByb3BzLnRhc2tTZXR0aW5ncyAhPT0gdW5kZWZpbmVkID8gSlNPTi5wYXJzZShwcm9wcy50YXNrU2V0dGluZ3MpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBSZXBsaWNhdGlvbiBjb25maWcgaWRlbnRpZmllclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgY29uZmlnSWRlbnRpZmllciA9XG4gICAgICBwcm9wcy5yZXBsaWNhdGlvbkNvbmZpZ0lkZW50aWZpZXIgPz9cbiAgICAgIGNkay5OYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDYzIH0pLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIENmblJlcGxpY2F0aW9uQ29uZmlnXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnID0gbmV3IGRtcy5DZm5SZXBsaWNhdGlvbkNvbmZpZyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICByZXBsaWNhdGlvbkNvbmZpZ0lkZW50aWZpZXI6IGNvbmZpZ0lkZW50aWZpZXIsXG4gICAgICByZXBsaWNhdGlvblR5cGU6IHByb3BzLm1pZ3JhdGlvblR5cGUsXG4gICAgICBzb3VyY2VFbmRwb2ludEFybjogdGhpcy5zb3VyY2UuZW5kcG9pbnRBcm4sXG4gICAgICB0YXJnZXRFbmRwb2ludEFybjogdGhpcy50YXJnZXQuZW5kcG9pbnRBcm4sXG4gICAgICB0YWJsZU1hcHBpbmdzOiB0YWJsZU1hcHBpbmdzT2JqLFxuICAgICAgcmVwbGljYXRpb25TZXR0aW5nczogcmVwbGljYXRpb25TZXR0aW5nc09iaixcbiAgICAgIGNvbXB1dGVDb25maWc6IHtcbiAgICAgICAgbWF4Q2FwYWNpdHlVbml0czogcHJvcHMubWF4Q2FwYWNpdHlVbml0cyxcbiAgICAgICAgbWluQ2FwYWNpdHlVbml0czogcHJvcHMubWluQ2FwYWNpdHlVbml0cyxcbiAgICAgICAgbXVsdGlBejogcHJvcHMubXVsdGlBeiA/PyBmYWxzZSxcbiAgICAgICAga21zS2V5SWQ6IHRoaXMuZW5jcnlwdGlvbktleS5rZXlBcm4sXG4gICAgICAgIHJlcGxpY2F0aW9uU3VibmV0R3JvdXBJZDogdGhpcy5zdWJuZXRHcm91cC5yZWYsXG4gICAgICAgIHZwY1NlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBJZHMsXG4gICAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5jZm5SZXBsaWNhdGlvbkNvbmZpZy5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG5cbiAgICAvLyBkbXMtdnBjLXJvbGUgbXVzdCBleGlzdCBiZWZvcmUgRE1TIGNhbiBkZXNjcmliZSBWUEMgc3VibmV0cyAoc3VibmV0IGdyb3VwKVxuICAgIC8vIG9yIHBsYWNlIHRoZSByZXBsaWNhdGlvbiBjb25maWcgaW5zaWRlIGEgVlBDLlxuICAgIGlmICh0aGlzLmRtc1ZwY1JvbGUpIHtcbiAgICAgIHRoaXMuc3VibmV0R3JvdXAubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuZG1zVnBjUm9sZSk7XG4gICAgICB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmRtc1ZwY1JvbGUpO1xuICAgIH1cblxuICAgIHRoaXMucmVwbGljYXRpb25Db25maWdBcm4gPSB0aGlzLmNmblJlcGxpY2F0aW9uQ29uZmlnLnJlZjtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YXRlIGhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BzKHByb3BzOiBEbXNTZXJ2ZXJsZXNzUGlwZWxpbmVQcm9wcyk6IHZvaWQge1xuICAgIGlmICghVkFMSURfQ0FQQUNJVFlfVU5JVFMuaGFzKHByb3BzLm1heENhcGFjaXR5VW5pdHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtYXhDYXBhY2l0eVVuaXRzIG11c3QgYmUgb25lIG9mICR7Wy4uLlZBTElEX0NBUEFDSVRZX1VOSVRTXS5qb2luKCcsICcpfS4gR290OiAke3Byb3BzLm1heENhcGFjaXR5VW5pdHN9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHByb3BzLm1pbkNhcGFjaXR5VW5pdHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIVZBTElEX0NBUEFDSVRZX1VOSVRTLmhhcyhwcm9wcy5taW5DYXBhY2l0eVVuaXRzKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWluQ2FwYWNpdHlVbml0cyBtdXN0IGJlIG9uZSBvZiAke1suLi5WQUxJRF9DQVBBQ0lUWV9VTklUU10uam9pbignLCAnKX0uIEdvdDogJHtwcm9wcy5taW5DYXBhY2l0eVVuaXRzfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcm9wcy5taW5DYXBhY2l0eVVuaXRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm1pbkNhcGFjaXR5VW5pdHMgPiBwcm9wcy5tYXhDYXBhY2l0eVVuaXRzXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtaW5DYXBhY2l0eVVuaXRzICgke3Byb3BzLm1pbkNhcGFjaXR5VW5pdHN9KSBtdXN0IGJlIDw9IG1heENhcGFjaXR5VW5pdHMgKCR7cHJvcHMubWF4Q2FwYWNpdHlVbml0c30pLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1NvdXJjZSA9ICEhcHJvcHMuc291cmNlRW5kcG9pbnQ7XG4gICAgY29uc3QgaGFzRXhpc3RpbmdTb3VyY2UgPSAhIXByb3BzLmV4aXN0aW5nU291cmNlRW5kcG9pbnQ7XG4gICAgaWYgKGhhc1NvdXJjZSAmJiBoYXNFeGlzdGluZ1NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlIGVpdGhlciBgc291cmNlRW5kcG9pbnRgIG9yIGBleGlzdGluZ1NvdXJjZUVuZHBvaW50YCwgbm90IGJvdGguJyk7XG4gICAgfVxuICAgIGlmICghaGFzU291cmNlICYmICFoYXNFeGlzdGluZ1NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgb2YgYHNvdXJjZUVuZHBvaW50YCBvciBgZXhpc3RpbmdTb3VyY2VFbmRwb2ludGAgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVGFyZ2V0ID0gISFwcm9wcy50YXJnZXRFbmRwb2ludDtcbiAgICBjb25zdCBoYXNFeGlzdGluZ1RhcmdldCA9ICEhcHJvcHMuZXhpc3RpbmdUYXJnZXRFbmRwb2ludDtcbiAgICBpZiAoaGFzVGFyZ2V0ICYmIGhhc0V4aXN0aW5nVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGUgZWl0aGVyIGB0YXJnZXRFbmRwb2ludGAgb3IgYGV4aXN0aW5nVGFyZ2V0RW5kcG9pbnRgLCBub3QgYm90aC4nKTtcbiAgICB9XG4gICAgaWYgKCFoYXNUYXJnZXQgJiYgIWhhc0V4aXN0aW5nVGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBvZiBgdGFyZ2V0RW5kcG9pbnRgIG9yIGBleGlzdGluZ1RhcmdldEVuZHBvaW50YCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/lib/table-mappings.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.TableMappings = exports.ColumnDataType = exports.DynamoDbAttributeSubType = exports.RuleObjectLocator = exports.TransformationAction = exports.SelectionAction = void 0;
|
|
5
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
@@ -89,10 +88,9 @@ var ColumnDataType;
|
|
|
89
88
|
* .toJson();
|
|
90
89
|
*/
|
|
91
90
|
class TableMappings {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
91
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-dms-replication.TableMappings", version: "0.2.3" };
|
|
92
|
+
rules = [];
|
|
93
|
+
nextId = 1;
|
|
96
94
|
// -------------------------------------------------------------------------
|
|
97
95
|
// Selection rules
|
|
98
96
|
// -------------------------------------------------------------------------
|
|
@@ -403,6 +401,4 @@ class TableMappings {
|
|
|
403
401
|
}
|
|
404
402
|
}
|
|
405
403
|
exports.TableMappings = TableMappings;
|
|
406
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
407
|
-
TableMappings[_a] = { fqn: "cdk-dms-replication.TableMappings", version: "0.2.2" };
|
|
408
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFwcGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFibGUtbWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFFSCw4RUFBOEU7QUFDOUUsUUFBUTtBQUNSLDhFQUE4RTtBQUU5RSxvREFBb0Q7QUFDcEQsSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLHNDQUFtQixDQUFBO0lBQ25CLHdDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxlQUFlLCtCQUFmLGVBQWUsUUFJMUI7QUFFRCwwQ0FBMEM7QUFDMUMsSUFBWSxvQkFxQlg7QUFyQkQsV0FBWSxvQkFBb0I7SUFDOUIscUNBQXFDO0lBQ3JDLCtEQUF1QyxDQUFBO0lBQ3ZDLHFDQUFxQztJQUNyQywrREFBdUMsQ0FBQTtJQUN2QyxnQ0FBZ0M7SUFDaEMsaURBQXlCLENBQUE7SUFDekIscUNBQXFDO0lBQ3JDLHVEQUErQixDQUFBO0lBQy9CLGdDQUFnQztJQUNoQyxpREFBeUIsQ0FBQTtJQUN6QixxQ0FBcUM7SUFDckMsdURBQStCLENBQUE7SUFDL0IseUJBQXlCO0lBQ3pCLHlDQUFpQixDQUFBO0lBQ2pCLHlCQUF5QjtJQUN6Qix1REFBK0IsQ0FBQTtJQUMvQixvQkFBb0I7SUFDcEIsaURBQXlCLENBQUE7SUFDekIsMEJBQTBCO0lBQzFCLHlEQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFyQlcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFxQi9CO0FBRUQsc0NBQXNDO0FBQ3RDLElBQVksaUJBTVg7QUFORCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBZSxDQUFBO0lBQ2Ysc0NBQWlCLENBQUE7SUFDakIsMERBQXFDLENBQUE7SUFDckMsMERBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQU5XLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBTTVCO0FBRUQsNERBQTRE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QVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwQixhQUFhLEVBQUUsVUFBVTtZQUN6QixnQkFBZ0IsRUFBRSxhQUFhO1lBQy9CLGFBQWEsRUFBRSxNQUFNO1NBQ3RCLENBQUM7UUFDRixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLFNBQVM7SUFDVCw0RUFBNEU7SUFFNUU7Ozs7T0FJRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDOztBQXBlSCxzQ0FxZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRhYmxlIG1hcHBpbmdzIGRlZmluZSB3aGljaCBzY2hlbWFzL3RhYmxlcyBETVMgbWlncmF0ZXMgYW5kIGhvdyB0aGV5IGFyZVxuICogdHJhbnNmb3JtZWQuIFRoaXMgYnVpbGRlciBwcm9kdWNlcyB0aGUgSlNPTiBzdHJpbmcgdGhhdCBETVMgZXhwZWN0cyBmb3JcbiAqIHRoZSBgdGFibGVNYXBwaW5nc2AgcHJvcGVydHkgb2YgYSByZXBsaWNhdGlvbiB0YXNrLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rtcy9sYXRlc3QvdXNlcmd1aWRlL0NIQVBfVGFza3MuQ3VzdG9taXppbmdUYXNrcy5UYWJsZU1hcHBpbmcuaHRtbFxuICovXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW51bXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogV2hldGhlciB0aGUgcnVsZSBzZWxlY3RzIG9yIGV4Y2x1ZGVzIG9iamVjdHMuICovXG5leHBvcnQgZW51bSBTZWxlY3Rpb25BY3Rpb24ge1xuICBJTkNMVURFID0gJ2luY2x1ZGUnLFxuICBFWENMVURFID0gJ2V4Y2x1ZGUnLFxuICBFWFBMSUNJVCA9ICdleHBsaWNpdCcsXG59XG5cbi8qKiBUYWJsZS1sZXZlbCB0cmFuc2Zvcm1hdGlvbiBhY3Rpb25zLiAqL1xuZXhwb3J0IGVudW0gVHJhbnNmb3JtYXRpb25BY3Rpb24ge1xuICAvKiogQ29udmVydCB0aGUgbmFtZSB0byBsb3dlcmNhc2UuICovXG4gIENPTlZFUlRfTE9XRVJDQVNFID0gJ2NvbnZlcnQtbG93ZXJjYXNlJyxcbiAgLyoqIENvbnZlcnQgdGhlIG5hbWUgdG8gdXBwZXJjYXNlLiAqL1xuICBDT05WRVJUX1VQUEVSQ0FTRSA9ICdjb252ZXJ0LXVwcGVyY2FzZScsXG4gIC8qKiBBZGQgYSBwcmVmaXggdG8gdGhlIG5hbWUuICovXG4gIEFERF9QUkVGSVggPSAnYWRkLXByZWZpeCcsXG4gIC8qKiBSZW1vdmUgYSBwcmVmaXggZnJvbSB0aGUgbmFtZS4gKi9cbiAgUkVNT1ZFX1BSRUZJWCA9ICdyZW1vdmUtcHJlZml4JyxcbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byB0aGUgbmFtZS4gKi9cbiAgQUREX1NVRkZJWCA9ICdhZGQtc3VmZml4JyxcbiAgLyoqIFJlbW92ZSBhIHN1ZmZpeCBmcm9tIHRoZSBuYW1lLiAqL1xuICBSRU1PVkVfU1VGRklYID0gJ3JlbW92ZS1zdWZmaXgnLFxuICAvKiogUmVuYW1lIHRoZSBvYmplY3QuICovXG4gIFJFTkFNRSA9ICdyZW5hbWUnLFxuICAvKiogUmVtb3ZlIHRoZSBjb2x1bW4uICovXG4gIFJFTU9WRV9DT0xVTU4gPSAncmVtb3ZlLWNvbHVtbicsXG4gIC8qKiBBZGQgYSBjb2x1bW4uICovXG4gIEFERF9DT0xVTU4gPSAnYWRkLWNvbHVtbicsXG4gIC8qKiBJbmNsdWRlIHRoZSBjb2x1bW4uICovXG4gIElOQ0xVREVfQ09MVU1OID0gJ2luY2x1ZGUtY29sdW1uJyxcbn1cblxuLyoqIFRoZSBvYmplY3QgdHlwZSBhIHJ1bGUgdGFyZ2V0cy4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVPYmplY3RMb2NhdG9yIHtcbiAgU0NIRU1BID0gJ3NjaGVtYScsXG4gIFRBQkxFID0gJ3RhYmxlJyxcbiAgQ09MVU1OID0gJ2NvbHVtbicsXG4gIFRBQkxFX1RBQkxFU1BBQ0UgPSAndGFibGUtdGFibGVzcGFjZScsXG4gIElOREVYX1RBQkxFU1BBQ0UgPSAnaW5kZXgtdGFibGVzcGFjZScsXG59XG5cbi8qKiBEeW5hbW9EQiBhdHRyaWJ1dGUgc3ViLXR5cGUgZm9yIG9iamVjdC1tYXBwaW5nIHJ1bGVzLiAqL1xuZXhwb3J0IGVudW0gRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlIHtcbiAgU1RSSU5HID0gJ3N0cmluZycsXG4gIE5VTUJFUiA9ICdudW1iZXInLFxuICBCSU5BUlkgPSAnYmluYXJ5Jyxcbn1cblxuLyoqIERhdGEgdHlwZSBmb3IgYWRkZWQgY29sdW1ucy4gKi9cbmV4cG9ydCBlbnVtIENvbHVtbkRhdGFUeXBlIHtcbiAgU1RSSU5HID0gJ3N0cmluZycsXG4gIElOVDQgPSAnaW50NCcsXG4gIElOVDggPSAnaW50OCcsXG4gIEZMT0FUNCA9ICdmbG9hdDQnLFxuICBGTE9BVDggPSAnZmxvYXQ4JyxcbiAgTlVNRVJJQyA9ICdudW1lcmljJyxcbiAgREFURVRJTUUgPSAnZGF0ZXRpbWUnLFxuICBCWVRFUyA9ICdieXRlcycsXG4gIEJMT0IgPSAnYmxvYicsXG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSW50ZXJmYWNlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIGNvbHVtbiBhZGRlZCB2aWEgYW4gQUREX0NPTFVNTiB0cmFuc2Zvcm1hdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQ29sdW1uRGVmaW5pdGlvbiB7XG4gIC8qKiBOYW1lIG9mIHRoZSBuZXcgY29sdW1uLiAqL1xuICByZWFkb25seSBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gIC8qKiBEYXRhIHR5cGUgb2YgdGhlIG5ldyBjb2x1bW4uICovXG4gIHJlYWRvbmx5IGNvbHVtblR5cGU6IENvbHVtbkRhdGFUeXBlO1xuICAvKiogQ2hhcmFjdGVyIGxlbmd0aCBmb3Igc3RyaW5nIGNvbHVtbnMuICovXG4gIHJlYWRvbmx5IGNvbHVtbkxlbmd0aD86IG51bWJlcjtcbiAgLyoqIFByZWNpc2lvbiBmb3IgbnVtZXJpYyBjb2x1bW5zLiAqL1xuICByZWFkb25seSBjb2x1bW5QcmVjaXNpb24/OiBudW1iZXI7XG4gIC8qKiBTY2FsZSBmb3IgbnVtZXJpYyBjb2x1bW5zLiAqL1xuICByZWFkb25seSBjb2x1bW5TY2FsZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIENvbnN0YW50IHN0cmluZyB2YWx1ZSB0byBwb3B1bGF0ZSB0aGUgY29sdW1uIHdpdGguIEVtaXR0ZWQgYXMgYVxuICAgKiBzaW5nbGUtcXVvdGVkIERNUyBleHByZXNzaW9uIGxpdGVyYWwg4oCUIHVzZSBvbmx5IGZvciBzdHJpbmcgY29sdW1uIHR5cGVzLlxuICAgKiBGb3IgbnVtZXJpYyBvciBkYXRldGltZSB0eXBlcywgdXNlIGBleHByZXNzaW9uYCB3aXRoIGFuIHVucXVvdGVkIGxpdGVyYWxcbiAgICogKGUuZy4gYGV4cHJlc3Npb246ICc0MidgKS5cbiAgICogRXhhY3RseSBvbmUgb2YgYGNvbHVtblZhbHVlYCBvciBgZXhwcmVzc2lvbmAgbXVzdCBiZSBzZXQuXG4gICAqL1xuICByZWFkb25seSBjb2x1bW5WYWx1ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIERNUyBleHByZXNzaW9uIHRvIHBvcHVsYXRlIHRoZSBjb2x1bW4gKGUuZy4gYCR0aW1lc3RhbXBgLFxuICAgKiBgJ0VOVElUWSMnIHx8ICRpZGAsIG9yIGFuIHVucXVvdGVkIG51bWVyaWMgbGl0ZXJhbCBsaWtlIGA0MmApLlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgY29sdW1uVmFsdWVgIG9yIGBleHByZXNzaW9uYCBtdXN0IGJlIHNldC5cbiAgICovXG4gIHJlYWRvbmx5IGV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbi8qKiBPYmplY3QgbG9jYXRvciBpZGVudGlmeWluZyB0aGUgc2NoZW1hLCB0YWJsZSwgYW5kIG9wdGlvbmFsIGNvbHVtbiBhIHJ1bGUgdGFyZ2V0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU9iamVjdExvY2F0b3JWYWx1ZSB7XG4gIHJlYWRvbmx5IHNjaGVtYU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdGFibGVOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2x1bW5OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1hcHBpbmcgZnJvbSBhIHNvdXJjZSBjb2x1bW4gKG9yIERNUyBleHByZXNzaW9uKSB0byBhIER5bmFtb0RCIHBhcnRpdGlvbiBvclxuICogc29ydCBrZXkgYXR0cmlidXRlLiBFeGFjdGx5IG9uZSBvZiBgc291cmNlQ29sdW1uYCBvciBgdmFsdWVgIG11c3QgYmUgc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RiS2V5TWFwcGluZyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGEgc2luZ2xlIGNvbHVtbiBvbiB0aGUgcmVsYXRpb25hbCBzb3VyY2UuIFRoZSBidWlsZGVyIHdyYXBzIHRoaXNcbiAgICogaW4gdGhlIERNUyBleHByZXNzaW9uIGAke3NvdXJjZUNvbHVtbn1gLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgdmFsdWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlQ29sdW1uPzogc3RyaW5nO1xuICAvKipcbiAgICogUmF3IERNUyB2YWx1ZSBleHByZXNzaW9uLCB1c2VkIHZlcmJhdGltLiBVc2UgdGhpcyBmb3IgY29tcG9zaXRlIGtleXMgb3JcbiAgICogb3RoZXIgZXhwcmVzc2lvbnMgbGlrZSBgJ0NVU1RPTUVSIyR7Y3VzdG9tZXJfaWR9J2AuIE11dHVhbGx5IGV4Y2x1c2l2ZVxuICAgKiB3aXRoIGBzb3VyY2VDb2x1bW5gLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBOYW1lIG9mIHRoZSBwYXJ0aXRpb24vc29ydCBrZXkgYXR0cmlidXRlIG9uIHRoZSBEeW5hbW9EQiB0YXJnZXQgaXRlbS4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0QXR0cmlidXRlTmFtZTogc3RyaW5nO1xuICAvKiogRHluYW1vREIgYXR0cmlidXRlIHN1Yi10eXBlIChgc3RyaW5nYCwgYG51bWJlcmAsIG9yIGBiaW5hcnlgKS4gKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlU3ViVHlwZTogRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlO1xufVxuXG4vKipcbiAqIE1hcHBpbmcgZnJvbSBhIHNvdXJjZSBjb2x1bW4gKG9yIERNUyBleHByZXNzaW9uKSB0byBhIG5vbi1rZXkgYXR0cmlidXRlIG9uXG4gKiB0aGUgRHluYW1vREIgdGFyZ2V0LiBFeGFjdGx5IG9uZSBvZiBgc291cmNlQ29sdW1uYCBvciBgdmFsdWVgIG11c3QgYmUgc2V0LlxuICogU291cmNlIGNvbHVtbnMgbm90IGxpc3RlZCBpbiBgYXR0cmlidXRlTWFwcGluZ3NgIG9yIGBleGNsdWRlQ29sdW1uc2AgcGFzc1xuICogdGhyb3VnaCB3aXRoIHRoZSBzb3VyY2UgY29sdW1uIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1vRGJBdHRyaWJ1dGVNYXBwaW5nIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgYSBzaW5nbGUgY29sdW1uIG9uIHRoZSByZWxhdGlvbmFsIHNvdXJjZS4gVGhlIGJ1aWxkZXIgd3JhcHMgdGhpc1xuICAgKiBpbiB0aGUgRE1TIGV4cHJlc3Npb24gYCR7c291cmNlQ29sdW1ufWAuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGB2YWx1ZWAuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VDb2x1bW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSYXcgRE1TIHZhbHVlIGV4cHJlc3Npb24sIHVzZWQgdmVyYmF0aW0uIFVzZSB0aGlzIGZvciBjb21wb3NpdGUgdmFsdWVzIG9yXG4gICAqIG90aGVyIGV4cHJlc3Npb25zIGxpa2UgYCdTVEFUVVMjJHtzdGF0dXN9J2AuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXG4gICAqIGBzb3VyY2VDb2x1bW5gLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgb24gdGhlIER5bmFtb0RCIHRhcmdldCBpdGVtLiAqL1xuICByZWFkb25seSB0YXJnZXRBdHRyaWJ1dGVOYW1lOiBzdHJpbmc7XG4gIC8qKiBEeW5hbW9EQiBhdHRyaWJ1dGUgc3ViLXR5cGUgKGBzdHJpbmdgLCBgbnVtYmVyYCwgb3IgYGJpbmFyeWApLiAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVTdWJUeXBlOiBEeW5hbW9EYkF0dHJpYnV0ZVN1YlR5cGU7XG59XG5cbi8qKiBPcHRpb25zIGZvciBgVGFibGVNYXBwaW5ncy5tYXBUb0R5bmFtb0RiYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1vRGJPYmplY3RNYXBwaW5nT3B0aW9ucyB7XG4gIC8qKiBOYW1lIG9mIHRoZSB0YXJnZXQgRHluYW1vREIgdGFibGUuICovXG4gIHJlYWRvbmx5IHRhcmdldFRhYmxlTmFtZTogc3RyaW5nO1xuICAvKiogTWFwcGluZyBmb3IgdGhlIER5bmFtb0RCIHBhcnRpdGlvbiAoaGFzaCkga2V5LiBSZXF1aXJlZC4gKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uS2V5OiBEeW5hbW9EYktleU1hcHBpbmc7XG4gIC8qKiBNYXBwaW5nIGZvciB0aGUgRHluYW1vREIgc29ydCAocmFuZ2UpIGtleS4gT3B0aW9uYWwuICovXG4gIHJlYWRvbmx5IHNvcnRLZXk/OiBEeW5hbW9EYktleU1hcHBpbmc7XG4gIC8qKiBTb3VyY2UgY29sdW1ucyB0byBleGNsdWRlIGZyb20gdGhlIG1pZ3JhdGVkIGl0ZW0uICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVDb2x1bW5zPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbHVtbi10by1hdHRyaWJ1dGUgbWFwcGluZ3MuIFVzZSB0aGlzIHRvIHJlbmFtZSBub24ta2V5XG4gICAqIGNvbHVtbnMgb3IgY2hhbmdlIHRoZWlyIER5bmFtb0RCIHN1Yi10eXBlLiBDb2x1bW5zIG5vdCBsaXN0ZWQgaGVyZSBwYXNzXG4gICAqIHRocm91Z2ggd2l0aCB0aGUgc291cmNlIGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlTWFwcGluZ3M/OiBEeW5hbW9EYkF0dHJpYnV0ZU1hcHBpbmdbXTtcbn1cblxuLyoqIFJlcHJlc2VudHMgYSBzaW5nbGUsIGZ1bGx5IGJ1aWx0IHJ1bGUgaW4gdGhlIHRhYmxlLW1hcHBpbmdzIEpTT04uICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlTWFwcGluZ1J1bGUge1xuICByZWFkb25seSBydWxlVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBydWxlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgb2JqZWN0TG9jYXRvcjogUnVsZU9iamVjdExvY2F0b3JWYWx1ZTtcbiAgcmVhZG9ubHkgcnVsZUFjdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgb2xkVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQnVpbGRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRmx1ZW50IGJ1aWxkZXIgZm9yIERNUyB0YWJsZSBtYXBwaW5ncy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWFwcGluZ3MgPSBuZXcgVGFibGVNYXBwaW5ncygpXG4gKiAgIC5pbmNsdWRlU2NoZW1hKCdwdWJsaWMnKVxuICogICAuaW5jbHVkZVRhYmxlKCdwdWJsaWMnLCAnb3JkZXJzJylcbiAqICAgLmV4Y2x1ZGVUYWJsZSgncHVibGljJywgJ2F1ZGl0X2xvZycpXG4gKiAgIC5yZW5hbWVTY2hlbWEoJ3B1YmxpYycsICdwcm9kJylcbiAqICAgLnRvTG93ZXJDYXNlVGFibGUoJ3B1YmxpYycsICclJylcbiAqICAgLnRvSnNvbigpO1xuICovXG5leHBvcnQgY2xhc3MgVGFibGVNYXBwaW5ncyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgcHJpdmF0ZSBuZXh0SWQ6IG51bWJlciA9IDE7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTZWxlY3Rpb24gcnVsZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGFsbCB0YWJsZXMgaW4gYSBzY2hlbWEuXG4gICAqIFVzZSBgJWAgYXMgYSB3aWxkY2FyZCBmb3IgYHNjaGVtYU5hbWVgIHRvIGluY2x1ZGUgYWxsIHNjaGVtYXMuXG4gICAqL1xuICBpbmNsdWRlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgJyUnLCBTZWxlY3Rpb25BY3Rpb24uSU5DTFVERSk7XG4gIH1cblxuICAvKiogRXhjbHVkZSBhbGwgdGFibGVzIGluIGEgc2NoZW1hLiAqL1xuICBleGNsdWRlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgJyUnLCBTZWxlY3Rpb25BY3Rpb24uRVhDTFVERSk7XG4gIH1cblxuICAvKipcbiAgICogSW5jbHVkZSBhIHNwZWNpZmljIHRhYmxlIChvciBhIHdpbGRjYXJkIHBhdHRlcm4pIHdpdGhpbiBhIHNjaGVtYS5cbiAgICogVXNlIGAlYCBmb3IgYHRhYmxlTmFtZWAgdG8gbWF0Y2ggYWxsIHRhYmxlcyBpbiB0aGUgc2NoZW1hLlxuICAgKi9cbiAgaW5jbHVkZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsIHRhYmxlTmFtZSwgU2VsZWN0aW9uQWN0aW9uLklOQ0xVREUpO1xuICB9XG5cbiAgLyoqIEV4Y2x1ZGUgYSBzcGVjaWZpYyB0YWJsZSAob3Igd2lsZGNhcmQpIHdpdGhpbiBhIHNjaGVtYS4gKi9cbiAgZXhjbHVkZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsIHRhYmxlTmFtZSwgU2VsZWN0aW9uQWN0aW9uLkVYQ0xVREUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxpY2l0bHkgaW5jbHVkZSBhIHNpbmdsZSB0YWJsZS4gVW5saWtlIGBpbmNsdWRlYCwgYGV4cGxpY2l0YCBtZWFucyBETVNcbiAgICogb25seSBtaWdyYXRlcyB0aGlzIG9uZSB0YWJsZSByZWdhcmRsZXNzIG9mIG90aGVyIGBpbmNsdWRlYCBydWxlcy5cbiAgICovXG4gIGV4cGxpY2l0VGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFNlbGVjdGlvblJ1bGUoc2NoZW1hTmFtZSwgdGFibGVOYW1lLCBTZWxlY3Rpb25BY3Rpb24uRVhQTElDSVQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWxlY3Rpb25SdWxlKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBhY3Rpb246IFNlbGVjdGlvbkFjdGlvbixcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZCsrO1xuICAgIHRoaXMucnVsZXMucHVzaCh7XG4gICAgICAncnVsZS10eXBlJzogJ3NlbGVjdGlvbicsXG4gICAgICAncnVsZS1pZCc6IFN0cmluZyhpZCksXG4gICAgICAncnVsZS1uYW1lJzogYCR7aWR9YCxcbiAgICAgICdvYmplY3QtbG9jYXRvcic6IHtcbiAgICAgICAgJ3NjaGVtYS1uYW1lJzogc2NoZW1hTmFtZSxcbiAgICAgICAgJ3RhYmxlLW5hbWUnOiB0YWJsZU5hbWUsXG4gICAgICB9LFxuICAgICAgJ3J1bGUtYWN0aW9uJzogYWN0aW9uLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUcmFuc2Zvcm1hdGlvbiBydWxlcyDigJQgc2NoZW1hXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogUmVuYW1lIGEgc2NoZW1hLiAqL1xuICByZW5hbWVTY2hlbWEoc2NoZW1hTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgYWxsIHNjaGVtYSBuYW1lcyB0byBsb3dlcmNhc2UuICovXG4gIHRvTG93ZXJDYXNlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICAnJScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5TQ0hFTUEsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX0xPV0VSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgYWxsIHNjaGVtYSBuYW1lcyB0byB1cHBlcmNhc2UuICovXG4gIHRvVXBwZXJDYXNlU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICAnJScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5TQ0hFTUEsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX1VQUEVSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHByZWZpeCB0byBzY2hlbWEgbmFtZXMuICovXG4gIGFkZFByZWZpeFRvU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1BSRUZJWCxcbiAgICAgIHByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byBzY2hlbWEgbmFtZXMuICovXG4gIGFkZFN1ZmZpeFRvU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1NVRkZJWCxcbiAgICAgIHN1ZmZpeCxcbiAgICApO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUcmFuc2Zvcm1hdGlvbiBydWxlcyDigJQgdGFibGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBSZW5hbWUgYSB0YWJsZS4gKi9cbiAgcmVuYW1lVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlRBQkxFLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgdGFibGUgbmFtZXMgdG8gbG93ZXJjYXNlLiBVc2UgYCVgIHRvIG1hdGNoIGFsbCB0YWJsZXMuICovXG4gIHRvTG93ZXJDYXNlVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkNPTlZFUlRfTE9XRVJDQVNFLFxuICAgICk7XG4gIH1cblxuICAvKiogQ29udmVydCBtYXRjaGluZyB0YWJsZSBuYW1lcyB0byB1cHBlcmNhc2UuICovXG4gIHRvVXBwZXJDYXNlVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkNPTlZFUlRfVVBQRVJDQVNFLFxuICAgICk7XG4gIH1cblxuICAvKiogQWRkIGEgcHJlZml4IHRvIHRhYmxlIG5hbWVzLiAqL1xuICBhZGRQcmVmaXhUb1RhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlRBQkxFLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX1BSRUZJWCxcbiAgICAgIHByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHN1ZmZpeCB0byB0YWJsZSBuYW1lcy4gKi9cbiAgYWRkU3VmZml4VG9UYWJsZShzY2hlbWFOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkFERF9TVUZGSVgsXG4gICAgICBzdWZmaXgsXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVHJhbnNmb3JtYXRpb24gcnVsZXMg4oCUIGNvbHVtblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFJlbmFtZSBhIGNvbHVtbiBpbiBhIHRhYmxlLiAqL1xuICByZW5hbWVDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdOYW1lOiBzdHJpbmcsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICBjb2x1bW5OYW1lLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuQ09MVU1OLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uUkVOQU1FLFxuICAgICAgbmV3TmFtZSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIHRvIGxvd2VyY2FzZS4gKi9cbiAgdG9Mb3dlckNhc2VDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5DT0xVTU4sXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX0xPV0VSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIHRvIHVwcGVyY2FzZS4gKi9cbiAgdG9VcHBlckNhc2VDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5DT0xVTU4sXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX1VQUEVSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBhIGNvbHVtbiBmcm9tIGEgdGFibGUuICovXG4gIHJlbW92ZUNvbHVtbihcbiAgICBzY2hlbWFOYW1lOiBzdHJpbmcsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICApOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgY29sdW1uTmFtZSxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLkNPTFVNTixcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLlJFTU9WRV9DT0xVTU4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgY29sdW1uIHRvIGEgdGFibGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG1hcHBpbmdzLmFkZENvbHVtbigncHVibGljJywgJ29yZGVycycsIHtcbiAgICogICBjb2x1bW5OYW1lOiAnbWlncmF0aW9uX3RzJyxcbiAgICogICBjb2x1bW5UeXBlOiBDb2x1bW5EYXRhVHlwZS5EQVRFVElNRSxcbiAgICogICBleHByZXNzaW9uOiAnJHRpbWVzdGFtcCcsXG4gICAqIH0pO1xuICAgKi9cbiAgYWRkQ29sdW1uKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW46IEFkZENvbHVtbkRlZmluaXRpb24sXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0SWQrKztcbiAgICBjb25zdCBvYmplY3RMb2NhdG9yOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3NjaGVtYS1uYW1lJzogc2NoZW1hTmFtZSxcbiAgICAgICd0YWJsZS1uYW1lJzogdGFibGVOYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCBydWxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICdydWxlLXR5cGUnOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICAgJ3J1bGUtaWQnOiBTdHJpbmcoaWQpLFxuICAgICAgJ3J1bGUtbmFtZSc6IGAke2lkfWAsXG4gICAgICAnb2JqZWN0LWxvY2F0b3InOiBvYmplY3RMb2NhdG9yLFxuICAgICAgJ3J1bGUtYWN0aW9uJzogVHJhbnNmb3JtYXRpb25BY3Rpb24uQUREX0NPTFVNTixcbiAgICAgICdydWxlLXRhcmdldCc6ICdjb2x1bW4nLFxuICAgICAgJ3ZhbHVlJzogY29sdW1uLmNvbHVtbk5hbWUsXG4gICAgICAnZGF0YS10eXBlJzogdGhpcy5idWlsZERhdGFUeXBlKGNvbHVtbiksXG4gICAgfTtcblxuICAgIGlmIChjb2x1bW4uZXhwcmVzc2lvbikge1xuICAgICAgcnVsZS5leHByZXNzaW9uID0gY29sdW1uLmV4cHJlc3Npb247XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uY29sdW1uVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRE1TIGV4cHJlc3Npb24gc3ludGF4OiBzdHJpbmcgbGl0ZXJhbHMgdXNlIHNpbmdsZSBxdW90ZXMgKGVzY2FwZSAnIGFzICcnKVxuICAgICAgcnVsZS5leHByZXNzaW9uID0gYCcke2NvbHVtbi5jb2x1bW5WYWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERhdGFUeXBlKGNvbHVtbjogQWRkQ29sdW1uRGVmaW5pdGlvbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBkdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IHR5cGU6IGNvbHVtbi5jb2x1bW5UeXBlIH07XG4gICAgaWYgKGNvbHVtbi5jb2x1bW5MZW5ndGggIT09IHVuZGVmaW5lZCkgZHQubGVuZ3RoID0gY29sdW1uLmNvbHVtbkxlbmd0aDtcbiAgICBpZiAoY29sdW1uLmNvbHVtblByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSBkdC5wcmVjaXNpb24gPSBjb2x1bW4uY29sdW1uUHJlY2lzaW9uO1xuICAgIGlmIChjb2x1bW4uY29sdW1uU2NhbGUgIT09IHVuZGVmaW5lZCkgZHQuc2NhbGUgPSBjb2x1bW4uY29sdW1uU2NhbGU7XG4gICAgcmV0dXJuIGR0O1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBEeW5hbW9EQiBvYmplY3QgbWFwcGluZ1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIE1hcCBhIHJlbGF0aW9uYWwgc291cmNlIHRhYmxlIHRvIGEgRHluYW1vREIgdGFyZ2V0IHRhYmxlLlxuICAgKlxuICAgKiBFbWl0cyBhIERNUyBgb2JqZWN0LW1hcHBpbmdgIHJ1bGUgd2l0aCBgcnVsZS1hY3Rpb246IG1hcC1yZWNvcmQtdG8tcmVjb3JkYC5cbiAgICogRE1TIHJlcXVpcmVzIHRoaXMgcnVsZSB0eXBlIHdoZW4gdGhlIHRhcmdldCBlbmRwb2ludCBpcyBEeW5hbW9EQjsgdGhlXG4gICAqIHBhcnRpdGlvbiBrZXkgKGFuZCBvcHRpb25hbCBzb3J0IGtleSkgdGVsbCBETVMgaG93IHRvIGJ1aWxkIHRoZSBpdGVtIGtleVxuICAgKiBmcm9tIHNvdXJjZSBjb2x1bW5zLlxuICAgKlxuICAgKiBTb3VyY2UgY29sdW1ucyBub3QgbGlzdGVkIGluIGBhdHRyaWJ1dGVNYXBwaW5nc2Agb3IgYGV4Y2x1ZGVDb2x1bW5zYCBhcmVcbiAgICogbWlncmF0ZWQgd2l0aCB0aGUgc291cmNlIGNvbHVtbiBuYW1lIGFzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgICpcbiAgICogRm9yIGVhY2gga2V5IG9yIGF0dHJpYnV0ZSBtYXBwaW5nLCBzZXQgZWl0aGVyIGBzb3VyY2VDb2x1bW5gIChhIHNpbmdsZVxuICAgKiBjb2x1bW4gd3JhcHBlZCBhcyBgJHtjb2x9YCkgb3IgYHZhbHVlYCAoYSByYXcgRE1TIGV4cHJlc3Npb24sIGUuZy5cbiAgICogYCdDVVNUT01FUiMke2N1c3RvbWVyX2lkfSdgIGZvciBjb21wb3NpdGUga2V5cykuIEV4YWN0bHkgb25lIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHR3aWNlIHdpdGggdGhlIHNhbWUgYHNjaGVtYU5hbWVgL2B0YWJsZU5hbWVgIGVtaXRzIHR3b1xuICAgKiBzZXBhcmF0ZSBydWxlczsgRE1TIHdpbGwgcmVqZWN0IGR1cGxpY2F0ZSBvYmplY3QtbWFwcGluZyBydWxlcyBhdCBkZXBsb3lcbiAgICogdGltZS4gQ2FsbCBpdCBvbmNlIHBlciBzb3VyY2UgdGFibGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG1hcHBpbmdzID0gbmV3IFRhYmxlTWFwcGluZ3MoKVxuICAgKiAgIC5pbmNsdWRlVGFibGUoJ3B1YmxpYycsICdvcmRlcnMnKVxuICAgKiAgIC5tYXBUb0R5bmFtb0RiKCdwdWJsaWMnLCAnb3JkZXJzJywge1xuICAgKiAgICAgdGFyZ2V0VGFibGVOYW1lOiAnT3JkZXJzJyxcbiAgICogICAgIC8vIENvbXBvc2l0ZSBwYXJ0aXRpb24ga2V5IGZyb20gYSBsaXRlcmFsIHByZWZpeCArIHNvdXJjZSBjb2x1bW46XG4gICAqICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICogICAgICAgdmFsdWU6ICdDVVNUT01FUiMke2N1c3RvbWVyX2lkfScsXG4gICAqICAgICAgIHRhcmdldEF0dHJpYnV0ZU5hbWU6ICdQSycsXG4gICAqICAgICAgIGF0dHJpYnV0ZVN1YlR5cGU6IER5bmFtb0RiQXR0cmlidXRlU3ViVHlwZS5TVFJJTkcsXG4gICAqICAgICB9LFxuICAgKiAgICAgLy8gQmFyZSBzb3VyY2UgY29sdW1uIGZvciB0aGUgc29ydCBrZXk6XG4gICAqICAgICBzb3J0S2V5OiB7XG4gICAqICAgICAgIHNvdXJjZUNvbHVtbjogJ2NyZWF0ZWRfYXQnLFxuICAgKiAgICAgICB0YXJnZXRBdHRyaWJ1dGVOYW1lOiAnQ3JlYXRlZEF0JyxcbiAgICogICAgICAgYXR0cmlidXRlU3ViVHlwZTogRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlLlNUUklORyxcbiAgICogICAgIH0sXG4gICAqICAgICBleGNsdWRlQ29sdW1uczogWydpbnRlcm5hbF9mbGFnJ10sXG4gICAqICAgICBhdHRyaWJ1dGVNYXBwaW5nczogW1xuICAgKiAgICAgICB7XG4gICAqICAgICAgICAgc291cmNlQ29sdW1uOiAnY3VzdG9tZXJfaWQnLFxuICAgKiAgICAgICAgIHRhcmdldEF0dHJpYnV0ZU5hbWU6ICdDdXN0b21lcklkJyxcbiAgICogICAgICAgICBhdHRyaWJ1dGVTdWJUeXBlOiBEeW5hbW9EYkF0dHJpYnV0ZVN1YlR5cGUuU1RSSU5HLFxuICAgKiAgICAgICB9LFxuICAgKiAgICAgXSxcbiAgICogICB9KVxuICAgKiAgIC50b0pzb24oKTtcbiAgICovXG4gIG1hcFRvRHluYW1vRGIoXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IER5bmFtb0RiT2JqZWN0TWFwcGluZ09wdGlvbnMsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVDb2x1bW5zID8/IFtdKTtcbiAgICB0aGlzLmNoZWNrTm90RXhjbHVkZWQob3B0aW9ucy5wYXJ0aXRpb25LZXksIGV4Y2x1ZGVkKTtcbiAgICBpZiAob3B0aW9ucy5zb3J0S2V5KSB7XG4gICAgICB0aGlzLmNoZWNrTm90RXhjbHVkZWQob3B0aW9ucy5zb3J0S2V5LCBleGNsdWRlZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiBvcHRpb25zLmF0dHJpYnV0ZU1hcHBpbmdzID8/IFtdKSB7XG4gICAgICB0aGlzLmNoZWNrTm90RXhjbHVkZWQobWFwcGluZywgZXhjbHVkZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0SWQrKztcblxuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gPSBbXG4gICAgICB0aGlzLmJ1aWxkQXR0cmlidXRlTWFwcGluZyhvcHRpb25zLnBhcnRpdGlvbktleSksXG4gICAgXTtcbiAgICBpZiAob3B0aW9ucy5zb3J0S2V5KSB7XG4gICAgICBhdHRyaWJ1dGVNYXBwaW5ncy5wdXNoKHRoaXMuYnVpbGRBdHRyaWJ1dGVNYXBwaW5nKG9wdGlvbnMuc29ydEtleSkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVNYXBwaW5ncykge1xuICAgICAgZm9yIChjb25zdCBtYXBwaW5nIG9mIG9wdGlvbnMuYXR0cmlidXRlTWFwcGluZ3MpIHtcbiAgICAgICAgYXR0cmlidXRlTWFwcGluZ3MucHVzaCh0aGlzLmJ1aWxkQXR0cmlidXRlTWFwcGluZyhtYXBwaW5nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgJ3BhcnRpdGlvbi1rZXktbmFtZSc6IG9wdGlvbnMucGFydGl0aW9uS2V5LnRhcmdldEF0dHJpYnV0ZU5hbWUsXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5zb3J0S2V5KSB7XG4gICAgICBtYXBwaW5nUGFyYW1ldGVyc1snc29ydC1rZXktbmFtZSddID0gb3B0aW9ucy5zb3J0S2V5LnRhcmdldEF0dHJpYnV0ZU5hbWU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVDb2x1bW5zICYmIG9wdGlvbnMuZXhjbHVkZUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgbWFwcGluZ1BhcmFtZXRlcnNbJ2V4Y2x1ZGUtY29sdW1ucyddID0gb3B0aW9ucy5leGNsdWRlQ29sdW1ucztcbiAgICB9XG4gICAgbWFwcGluZ1BhcmFtZXRlcnNbJ2F0dHJpYnV0ZS1tYXBwaW5ncyddID0gYXR0cmlidXRlTWFwcGluZ3M7XG5cbiAgICB0aGlzLnJ1bGVzLnB1c2goe1xuICAgICAgJ3J1bGUtdHlwZSc6ICdvYmplY3QtbWFwcGluZycsXG4gICAgICAncnVsZS1pZCc6IFN0cmluZyhpZCksXG4gICAgICAncnVsZS1uYW1lJzogYCR7aWR9YCxcbiAgICAgICdydWxlLWFjdGlvbic6ICdtYXAtcmVjb3JkLXRvLXJlY29yZCcsXG4gICAgICAnb2JqZWN0LWxvY2F0b3InOiB7XG4gICAgICAgICdzY2hlbWEtbmFtZSc6IHNjaGVtYU5hbWUsXG4gICAgICAgICd0YWJsZS1uYW1lJzogdGFibGVOYW1lLFxuICAgICAgfSxcbiAgICAgICd0YXJnZXQtdGFibGUtbmFtZSc6IG9wdGlvbnMudGFyZ2V0VGFibGVOYW1lLFxuICAgICAgJ21hcHBpbmctcGFyYW1ldGVycyc6IG1hcHBpbmdQYXJhbWV0ZXJzLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja05vdEV4Y2x1ZGVkKFxuICAgIG1hcHBpbmc6IER5bmFtb0RiS2V5TWFwcGluZyB8IER5bmFtb0RiQXR0cmlidXRlTWFwcGluZyxcbiAgICBleGNsdWRlZDogU2V0PHN0cmluZz4sXG4gICk6IHZvaWQge1xuICAgIGlmIChtYXBwaW5nLnNvdXJjZUNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGV4Y2x1ZGVkLmhhcyhtYXBwaW5nLnNvdXJjZUNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER5bmFtb0RCIGF0dHJpYnV0ZSBtYXBwaW5nIGZvciAnJHttYXBwaW5nLnRhcmdldEF0dHJpYnV0ZU5hbWV9JyB1c2VzIGAgK1xuICAgICAgICBgc291cmNlQ29sdW1uICcke21hcHBpbmcuc291cmNlQ29sdW1ufScsIHdoaWNoIGFsc28gYXBwZWFycyBpbiBgICtcbiAgICAgICAgJ2V4Y2x1ZGVDb2x1bW5zLiBSZW1vdmUgaXQgZnJvbSBvbmUgb3IgdGhlIG90aGVyLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBdHRyaWJ1dGVNYXBwaW5nKFxuICAgIG1hcHBpbmc6IER5bmFtb0RiS2V5TWFwcGluZyB8IER5bmFtb0RiQXR0cmlidXRlTWFwcGluZyxcbiAgKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgaGFzU291cmNlID0gbWFwcGluZy5zb3VyY2VDb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IG1hcHBpbmcudmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzU291cmNlID09PSBoYXNWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRHluYW1vREIgYXR0cmlidXRlIG1hcHBpbmcgZm9yICcke21hcHBpbmcudGFyZ2V0QXR0cmlidXRlTmFtZX0nOiBgICtcbiAgICAgICAgJ2V4YWN0bHkgb25lIG9mIHNvdXJjZUNvbHVtbiBvciB2YWx1ZSBtdXN0IGJlIHNldC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBoYXNWYWx1ZSA/IG1hcHBpbmcudmFsdWUhIDogYFxcJHske21hcHBpbmcuc291cmNlQ29sdW1ufX1gO1xuICAgIHJldHVybiB7XG4gICAgICAndGFyZ2V0LWF0dHJpYnV0ZS1uYW1lJzogbWFwcGluZy50YXJnZXRBdHRyaWJ1dGVOYW1lLFxuICAgICAgJ2F0dHJpYnV0ZS10eXBlJzogJ3NjYWxhcicsXG4gICAgICAnYXR0cmlidXRlLXN1Yi10eXBlJzogbWFwcGluZy5hdHRyaWJ1dGVTdWJUeXBlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcnVsZVRhcmdldDogUnVsZU9iamVjdExvY2F0b3IsXG4gICAgYWN0aW9uOiBUcmFuc2Zvcm1hdGlvbkFjdGlvbixcbiAgICB2YWx1ZT86IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZCsrO1xuICAgIGNvbnN0IG9iamVjdExvY2F0b3I6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnc2NoZW1hLW5hbWUnOiBzY2hlbWFOYW1lLFxuICAgICAgJ3RhYmxlLW5hbWUnOiB0YWJsZU5hbWUsXG4gICAgfTtcbiAgICBpZiAoY29sdW1uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmplY3RMb2NhdG9yWydjb2x1bW4tbmFtZSddID0gY29sdW1uTmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICdydWxlLXR5cGUnOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICAgJ3J1bGUtaWQnOiBTdHJpbmcoaWQpLFxuICAgICAgJ3J1bGUtbmFtZSc6IGAke2lkfWAsXG4gICAgICAncnVsZS10YXJnZXQnOiBydWxlVGFyZ2V0LFxuICAgICAgJ29iamVjdC1sb2NhdG9yJzogb2JqZWN0TG9jYXRvcixcbiAgICAgICdydWxlLWFjdGlvbic6IGFjdGlvbixcbiAgICB9O1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBPdXRwdXRcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpc2UgdGhlIGFjY3VtdWxhdGVkIHJ1bGVzIHRvIHRoZSBKU09OIHN0cmluZyBleHBlY3RlZCBieSBETVMuXG4gICAqIFBhc3NlcyB0aGUgcmVzdWx0IGRpcmVjdGx5IHRvIGByZXBsaWNhdGlvblRhc2tTZXR0aW5nc2Agb3JcbiAgICogYERtc1JlcGxpY2F0aW9uVGFzay50YWJsZU1hcHBpbmdzYC5cbiAgICovXG4gIHRvSnNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IHJ1bGVzOiB0aGlzLnJ1bGVzIH0sIG51bGwsIDIpO1xuICB9XG59XG4iXX0=
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFwcGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFibGUtbWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7Ozs7R0FNRztBQUVILDhFQUE4RTtBQUM5RSxRQUFRO0FBQ1IsOEVBQThFO0FBRTlFLG9EQUFvRDtBQUNwRCxJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsc0NBQW1CLENBQUE7SUFDbkIsc0NBQW1CLENBQUE7SUFDbkIsd0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUpXLGVBQWUsK0JBQWYsZUFBZSxRQUkxQjtBQUVELDBDQUEwQztBQUMxQyxJQUFZLG9CQXFCWDtBQXJCRCxXQUFZLG9CQUFvQjtJQUM5QixxQ0FBcUM7SUFDckMsK0RBQXVDLENBQUE7SUFDdkMscUNBQXFDO0lBQ3JDLCtEQUF1QyxDQUFBO0lBQ3ZDLGdDQUFnQztJQUNoQyxpREFBeUIsQ0FBQTtJQUN6QixxQ0FBcUM7SUFDckMsdURBQStCLENBQUE7SUFDL0IsZ0NBQWdDO0lBQ2hDLGlEQUF5QixDQUFBO0lBQ3pCLHFDQUFxQztJQUNyQyx1REFBK0IsQ0FBQTtJQUMvQix5QkFBeUI7SUFDekIseUNBQWlCLENBQUE7SUFDakIseUJBQXlCO0lBQ3pCLHVEQUErQixDQUFBO0lBQy9CLG9CQUFvQjtJQUNwQixpREFBeUIsQ0FBQTtJQUN6QiwwQkFBMEI7SUFDMUIseURBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQXJCVyxvQkFBb0Isb0NBQXBCLG9CQUFvQixRQXFCL0I7QUFFRCxzQ0FBc0M7QUFDdEMsSUFBWSxpQkFNWDtBQU5ELFdBQVksaUJBQWlCO0lBQzNCLHNDQUFpQixDQUFBO0lBQ2pCLG9DQUFlLENBQUE7SUFDZixzQ0FBaUIsQ0FBQTtJQUNqQiwwREFBcUMsQ0FBQTtJQUNyQywwREFBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBTlcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFNNUI7QUFFRCw0REFBNEQ7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QUFDLEVBQUUsQ0FBQztZQUNyQixXQUFXLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDcEIsYUFBYSxFQUFFLFVBQVU7WUFDekIsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixhQUFhLEVBQUUsTUFBTTtTQUN0QixDQUFDO1FBQ0YsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxTQUFTO0lBQ1QsNEVBQTRFO0lBRTVFOzs7O09BSUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7QUFwZUgsc0NBcWVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUYWJsZSBtYXBwaW5ncyBkZWZpbmUgd2hpY2ggc2NoZW1hcy90YWJsZXMgRE1TIG1pZ3JhdGVzIGFuZCBob3cgdGhleSBhcmVcbiAqIHRyYW5zZm9ybWVkLiBUaGlzIGJ1aWxkZXIgcHJvZHVjZXMgdGhlIEpTT04gc3RyaW5nIHRoYXQgRE1TIGV4cGVjdHMgZm9yXG4gKiB0aGUgYHRhYmxlTWFwcGluZ3NgIHByb3BlcnR5IG9mIGEgcmVwbGljYXRpb24gdGFzay5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kbXMvbGF0ZXN0L3VzZXJndWlkZS9DSEFQX1Rhc2tzLkN1c3RvbWl6aW5nVGFza3MuVGFibGVNYXBwaW5nLmh0bWxcbiAqL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEVudW1zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFdoZXRoZXIgdGhlIHJ1bGUgc2VsZWN0cyBvciBleGNsdWRlcyBvYmplY3RzLiAqL1xuZXhwb3J0IGVudW0gU2VsZWN0aW9uQWN0aW9uIHtcbiAgSU5DTFVERSA9ICdpbmNsdWRlJyxcbiAgRVhDTFVERSA9ICdleGNsdWRlJyxcbiAgRVhQTElDSVQgPSAnZXhwbGljaXQnLFxufVxuXG4vKiogVGFibGUtbGV2ZWwgdHJhbnNmb3JtYXRpb24gYWN0aW9ucy4gKi9cbmV4cG9ydCBlbnVtIFRyYW5zZm9ybWF0aW9uQWN0aW9uIHtcbiAgLyoqIENvbnZlcnQgdGhlIG5hbWUgdG8gbG93ZXJjYXNlLiAqL1xuICBDT05WRVJUX0xPV0VSQ0FTRSA9ICdjb252ZXJ0LWxvd2VyY2FzZScsXG4gIC8qKiBDb252ZXJ0IHRoZSBuYW1lIHRvIHVwcGVyY2FzZS4gKi9cbiAgQ09OVkVSVF9VUFBFUkNBU0UgPSAnY29udmVydC11cHBlcmNhc2UnLFxuICAvKiogQWRkIGEgcHJlZml4IHRvIHRoZSBuYW1lLiAqL1xuICBBRERfUFJFRklYID0gJ2FkZC1wcmVmaXgnLFxuICAvKiogUmVtb3ZlIGEgcHJlZml4IGZyb20gdGhlIG5hbWUuICovXG4gIFJFTU9WRV9QUkVGSVggPSAncmVtb3ZlLXByZWZpeCcsXG4gIC8qKiBBZGQgYSBzdWZmaXggdG8gdGhlIG5hbWUuICovXG4gIEFERF9TVUZGSVggPSAnYWRkLXN1ZmZpeCcsXG4gIC8qKiBSZW1vdmUgYSBzdWZmaXggZnJvbSB0aGUgbmFtZS4gKi9cbiAgUkVNT1ZFX1NVRkZJWCA9ICdyZW1vdmUtc3VmZml4JyxcbiAgLyoqIFJlbmFtZSB0aGUgb2JqZWN0LiAqL1xuICBSRU5BTUUgPSAncmVuYW1lJyxcbiAgLyoqIFJlbW92ZSB0aGUgY29sdW1uLiAqL1xuICBSRU1PVkVfQ09MVU1OID0gJ3JlbW92ZS1jb2x1bW4nLFxuICAvKiogQWRkIGEgY29sdW1uLiAqL1xuICBBRERfQ09MVU1OID0gJ2FkZC1jb2x1bW4nLFxuICAvKiogSW5jbHVkZSB0aGUgY29sdW1uLiAqL1xuICBJTkNMVURFX0NPTFVNTiA9ICdpbmNsdWRlLWNvbHVtbicsXG59XG5cbi8qKiBUaGUgb2JqZWN0IHR5cGUgYSBydWxlIHRhcmdldHMuICovXG5leHBvcnQgZW51bSBSdWxlT2JqZWN0TG9jYXRvciB7XG4gIFNDSEVNQSA9ICdzY2hlbWEnLFxuICBUQUJMRSA9ICd0YWJsZScsXG4gIENPTFVNTiA9ICdjb2x1bW4nLFxuICBUQUJMRV9UQUJMRVNQQUNFID0gJ3RhYmxlLXRhYmxlc3BhY2UnLFxuICBJTkRFWF9UQUJMRVNQQUNFID0gJ2luZGV4LXRhYmxlc3BhY2UnLFxufVxuXG4vKiogRHluYW1vREIgYXR0cmlidXRlIHN1Yi10eXBlIGZvciBvYmplY3QtbWFwcGluZyBydWxlcy4gKi9cbmV4cG9ydCBlbnVtIER5bmFtb0RiQXR0cmlidXRlU3ViVHlwZSB7XG4gIFNUUklORyA9ICdzdHJpbmcnLFxuICBOVU1CRVIgPSAnbnVtYmVyJyxcbiAgQklOQVJZID0gJ2JpbmFyeScsXG59XG5cbi8qKiBEYXRhIHR5cGUgZm9yIGFkZGVkIGNvbHVtbnMuICovXG5leHBvcnQgZW51bSBDb2x1bW5EYXRhVHlwZSB7XG4gIFNUUklORyA9ICdzdHJpbmcnLFxuICBJTlQ0ID0gJ2ludDQnLFxuICBJTlQ4ID0gJ2ludDgnLFxuICBGTE9BVDQgPSAnZmxvYXQ0JyxcbiAgRkxPQVQ4ID0gJ2Zsb2F0OCcsXG4gIE5VTUVSSUMgPSAnbnVtZXJpYycsXG4gIERBVEVUSU1FID0gJ2RhdGV0aW1lJyxcbiAgQllURVMgPSAnYnl0ZXMnLFxuICBCTE9CID0gJ2Jsb2InLFxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEludGVyZmFjZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQSBjb2x1bW4gYWRkZWQgdmlhIGFuIEFERF9DT0xVTU4gdHJhbnNmb3JtYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogTmFtZSBvZiB0aGUgbmV3IGNvbHVtbi4gKi9cbiAgcmVhZG9ubHkgY29sdW1uTmFtZTogc3RyaW5nO1xuICAvKiogRGF0YSB0eXBlIG9mIHRoZSBuZXcgY29sdW1uLiAqL1xuICByZWFkb25seSBjb2x1bW5UeXBlOiBDb2x1bW5EYXRhVHlwZTtcbiAgLyoqIENoYXJhY3RlciBsZW5ndGggZm9yIHN0cmluZyBjb2x1bW5zLiAqL1xuICByZWFkb25seSBjb2x1bW5MZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBQcmVjaXNpb24gZm9yIG51bWVyaWMgY29sdW1ucy4gKi9cbiAgcmVhZG9ubHkgY29sdW1uUHJlY2lzaW9uPzogbnVtYmVyO1xuICAvKiogU2NhbGUgZm9yIG51bWVyaWMgY29sdW1ucy4gKi9cbiAgcmVhZG9ubHkgY29sdW1uU2NhbGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDb25zdGFudCBzdHJpbmcgdmFsdWUgdG8gcG9wdWxhdGUgdGhlIGNvbHVtbiB3aXRoLiBFbWl0dGVkIGFzIGFcbiAgICogc2luZ2xlLXF1b3RlZCBETVMgZXhwcmVzc2lvbiBsaXRlcmFsIOKAlCB1c2Ugb25seSBmb3Igc3RyaW5nIGNvbHVtbiB0eXBlcy5cbiAgICogRm9yIG51bWVyaWMgb3IgZGF0ZXRpbWUgdHlwZXMsIHVzZSBgZXhwcmVzc2lvbmAgd2l0aCBhbiB1bnF1b3RlZCBsaXRlcmFsXG4gICAqIChlLmcuIGBleHByZXNzaW9uOiAnNDInYCkuXG4gICAqIEV4YWN0bHkgb25lIG9mIGBjb2x1bW5WYWx1ZWAgb3IgYGV4cHJlc3Npb25gIG11c3QgYmUgc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29sdW1uVmFsdWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBETVMgZXhwcmVzc2lvbiB0byBwb3B1bGF0ZSB0aGUgY29sdW1uIChlLmcuIGAkdGltZXN0YW1wYCxcbiAgICogYCdFTlRJVFkjJyB8fCAkaWRgLCBvciBhbiB1bnF1b3RlZCBudW1lcmljIGxpdGVyYWwgbGlrZSBgNDJgKS5cbiAgICogRXhhY3RseSBvbmUgb2YgYGNvbHVtblZhbHVlYCBvciBgZXhwcmVzc2lvbmAgbXVzdCBiZSBzZXQuXG4gICAqL1xuICByZWFkb25seSBleHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogT2JqZWN0IGxvY2F0b3IgaWRlbnRpZnlpbmcgdGhlIHNjaGVtYSwgdGFibGUsIGFuZCBvcHRpb25hbCBjb2x1bW4gYSBydWxlIHRhcmdldHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVPYmplY3RMb2NhdG9yVmFsdWUge1xuICByZWFkb25seSBzY2hlbWFOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhYmxlTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29sdW1uTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gYSBzb3VyY2UgY29sdW1uIChvciBETVMgZXhwcmVzc2lvbikgdG8gYSBEeW5hbW9EQiBwYXJ0aXRpb24gb3JcbiAqIHNvcnQga2V5IGF0dHJpYnV0ZS4gRXhhY3RseSBvbmUgb2YgYHNvdXJjZUNvbHVtbmAgb3IgYHZhbHVlYCBtdXN0IGJlIHNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9EYktleU1hcHBpbmcge1xuICAvKipcbiAgICogTmFtZSBvZiBhIHNpbmdsZSBjb2x1bW4gb24gdGhlIHJlbGF0aW9uYWwgc291cmNlLiBUaGUgYnVpbGRlciB3cmFwcyB0aGlzXG4gICAqIGluIHRoZSBETVMgZXhwcmVzc2lvbiBgJHtzb3VyY2VDb2x1bW59YC4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHZhbHVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUNvbHVtbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFJhdyBETVMgdmFsdWUgZXhwcmVzc2lvbiwgdXNlZCB2ZXJiYXRpbS4gVXNlIHRoaXMgZm9yIGNvbXBvc2l0ZSBrZXlzIG9yXG4gICAqIG90aGVyIGV4cHJlc3Npb25zIGxpa2UgYCdDVVNUT01FUiMke2N1c3RvbWVyX2lkfSdgLiBNdXR1YWxseSBleGNsdXNpdmVcbiAgICogd2l0aCBgc291cmNlQ29sdW1uYC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuICAvKiogTmFtZSBvZiB0aGUgcGFydGl0aW9uL3NvcnQga2V5IGF0dHJpYnV0ZSBvbiB0aGUgRHluYW1vREIgdGFyZ2V0IGl0ZW0uICovXG4gIHJlYWRvbmx5IHRhcmdldEF0dHJpYnV0ZU5hbWU6IHN0cmluZztcbiAgLyoqIER5bmFtb0RCIGF0dHJpYnV0ZSBzdWItdHlwZSAoYHN0cmluZ2AsIGBudW1iZXJgLCBvciBgYmluYXJ5YCkuICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVN1YlR5cGU6IER5bmFtb0RiQXR0cmlidXRlU3ViVHlwZTtcbn1cblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gYSBzb3VyY2UgY29sdW1uIChvciBETVMgZXhwcmVzc2lvbikgdG8gYSBub24ta2V5IGF0dHJpYnV0ZSBvblxuICogdGhlIER5bmFtb0RCIHRhcmdldC4gRXhhY3RseSBvbmUgb2YgYHNvdXJjZUNvbHVtbmAgb3IgYHZhbHVlYCBtdXN0IGJlIHNldC5cbiAqIFNvdXJjZSBjb2x1bW5zIG5vdCBsaXN0ZWQgaW4gYGF0dHJpYnV0ZU1hcHBpbmdzYCBvciBgZXhjbHVkZUNvbHVtbnNgIHBhc3NcbiAqIHRocm91Z2ggd2l0aCB0aGUgc291cmNlIGNvbHVtbiBuYW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RiQXR0cmlidXRlTWFwcGluZyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGEgc2luZ2xlIGNvbHVtbiBvbiB0aGUgcmVsYXRpb25hbCBzb3VyY2UuIFRoZSBidWlsZGVyIHdyYXBzIHRoaXNcbiAgICogaW4gdGhlIERNUyBleHByZXNzaW9uIGAke3NvdXJjZUNvbHVtbn1gLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgdmFsdWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlQ29sdW1uPzogc3RyaW5nO1xuICAvKipcbiAgICogUmF3IERNUyB2YWx1ZSBleHByZXNzaW9uLCB1c2VkIHZlcmJhdGltLiBVc2UgdGhpcyBmb3IgY29tcG9zaXRlIHZhbHVlcyBvclxuICAgKiBvdGhlciBleHByZXNzaW9ucyBsaWtlIGAnU1RBVFVTIyR7c3RhdHVzfSdgLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgKiBgc291cmNlQ29sdW1uYC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuICAvKiogTmFtZSBvZiB0aGUgYXR0cmlidXRlIG9uIHRoZSBEeW5hbW9EQiB0YXJnZXQgaXRlbS4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0QXR0cmlidXRlTmFtZTogc3RyaW5nO1xuICAvKiogRHluYW1vREIgYXR0cmlidXRlIHN1Yi10eXBlIChgc3RyaW5nYCwgYG51bWJlcmAsIG9yIGBiaW5hcnlgKS4gKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlU3ViVHlwZTogRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgYFRhYmxlTWFwcGluZ3MubWFwVG9EeW5hbW9EYmAuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RiT2JqZWN0TWFwcGluZ09wdGlvbnMge1xuICAvKiogTmFtZSBvZiB0aGUgdGFyZ2V0IER5bmFtb0RCIHRhYmxlLiAqL1xuICByZWFkb25seSB0YXJnZXRUYWJsZU5hbWU6IHN0cmluZztcbiAgLyoqIE1hcHBpbmcgZm9yIHRoZSBEeW5hbW9EQiBwYXJ0aXRpb24gKGhhc2gpIGtleS4gUmVxdWlyZWQuICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbktleTogRHluYW1vRGJLZXlNYXBwaW5nO1xuICAvKiogTWFwcGluZyBmb3IgdGhlIER5bmFtb0RCIHNvcnQgKHJhbmdlKSBrZXkuIE9wdGlvbmFsLiAqL1xuICByZWFkb25seSBzb3J0S2V5PzogRHluYW1vRGJLZXlNYXBwaW5nO1xuICAvKiogU291cmNlIGNvbHVtbnMgdG8gZXhjbHVkZSBmcm9tIHRoZSBtaWdyYXRlZCBpdGVtLiAqL1xuICByZWFkb25seSBleGNsdWRlQ29sdW1ucz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb2x1bW4tdG8tYXR0cmlidXRlIG1hcHBpbmdzLiBVc2UgdGhpcyB0byByZW5hbWUgbm9uLWtleVxuICAgKiBjb2x1bW5zIG9yIGNoYW5nZSB0aGVpciBEeW5hbW9EQiBzdWItdHlwZS4gQ29sdW1ucyBub3QgbGlzdGVkIGhlcmUgcGFzc1xuICAgKiB0aHJvdWdoIHdpdGggdGhlIHNvdXJjZSBjb2x1bW4gbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZU1hcHBpbmdzPzogRHluYW1vRGJBdHRyaWJ1dGVNYXBwaW5nW107XG59XG5cbi8qKiBSZXByZXNlbnRzIGEgc2luZ2xlLCBmdWxseSBidWlsdCBydWxlIGluIHRoZSB0YWJsZS1tYXBwaW5ncyBKU09OLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZU1hcHBpbmdSdWxlIHtcbiAgcmVhZG9ubHkgcnVsZVR5cGU6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVsZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9iamVjdExvY2F0b3I6IFJ1bGVPYmplY3RMb2NhdG9yVmFsdWU7XG4gIHJlYWRvbmx5IHJ1bGVBY3Rpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9sZFZhbHVlPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJ1aWxkZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEZsdWVudCBidWlsZGVyIGZvciBETVMgdGFibGUgbWFwcGluZ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1hcHBpbmdzID0gbmV3IFRhYmxlTWFwcGluZ3MoKVxuICogICAuaW5jbHVkZVNjaGVtYSgncHVibGljJylcbiAqICAgLmluY2x1ZGVUYWJsZSgncHVibGljJywgJ29yZGVycycpXG4gKiAgIC5leGNsdWRlVGFibGUoJ3B1YmxpYycsICdhdWRpdF9sb2cnKVxuICogICAucmVuYW1lU2NoZW1hKCdwdWJsaWMnLCAncHJvZCcpXG4gKiAgIC50b0xvd2VyQ2FzZVRhYmxlKCdwdWJsaWMnLCAnJScpXG4gKiAgIC50b0pzb24oKTtcbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlTWFwcGluZ3Mge1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG4gIHByaXZhdGUgbmV4dElkOiBudW1iZXIgPSAxO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU2VsZWN0aW9uIHJ1bGVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogSW5jbHVkZSBhbGwgdGFibGVzIGluIGEgc2NoZW1hLlxuICAgKiBVc2UgYCVgIGFzIGEgd2lsZGNhcmQgZm9yIGBzY2hlbWFOYW1lYCB0byBpbmNsdWRlIGFsbCBzY2hlbWFzLlxuICAgKi9cbiAgaW5jbHVkZVNjaGVtYShzY2hlbWFOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsICclJywgU2VsZWN0aW9uQWN0aW9uLklOQ0xVREUpO1xuICB9XG5cbiAgLyoqIEV4Y2x1ZGUgYWxsIHRhYmxlcyBpbiBhIHNjaGVtYS4gKi9cbiAgZXhjbHVkZVNjaGVtYShzY2hlbWFOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsICclJywgU2VsZWN0aW9uQWN0aW9uLkVYQ0xVREUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYSBzcGVjaWZpYyB0YWJsZSAob3IgYSB3aWxkY2FyZCBwYXR0ZXJuKSB3aXRoaW4gYSBzY2hlbWEuXG4gICAqIFVzZSBgJWAgZm9yIGB0YWJsZU5hbWVgIHRvIG1hdGNoIGFsbCB0YWJsZXMgaW4gdGhlIHNjaGVtYS5cbiAgICovXG4gIGluY2x1ZGVUYWJsZShzY2hlbWFOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2VsZWN0aW9uUnVsZShzY2hlbWFOYW1lLCB0YWJsZU5hbWUsIFNlbGVjdGlvbkFjdGlvbi5JTkNMVURFKTtcbiAgfVxuXG4gIC8qKiBFeGNsdWRlIGEgc3BlY2lmaWMgdGFibGUgKG9yIHdpbGRjYXJkKSB3aXRoaW4gYSBzY2hlbWEuICovXG4gIGV4Y2x1ZGVUYWJsZShzY2hlbWFOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2VsZWN0aW9uUnVsZShzY2hlbWFOYW1lLCB0YWJsZU5hbWUsIFNlbGVjdGlvbkFjdGlvbi5FWENMVURFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsaWNpdGx5IGluY2x1ZGUgYSBzaW5nbGUgdGFibGUuIFVubGlrZSBgaW5jbHVkZWAsIGBleHBsaWNpdGAgbWVhbnMgRE1TXG4gICAqIG9ubHkgbWlncmF0ZXMgdGhpcyBvbmUgdGFibGUgcmVnYXJkbGVzcyBvZiBvdGhlciBgaW5jbHVkZWAgcnVsZXMuXG4gICAqL1xuICBleHBsaWNpdFRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTZWxlY3Rpb25SdWxlKHNjaGVtYU5hbWUsIHRhYmxlTmFtZSwgU2VsZWN0aW9uQWN0aW9uLkVYUExJQ0lUKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2VsZWN0aW9uUnVsZShcbiAgICBzY2hlbWFOYW1lOiBzdHJpbmcsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgYWN0aW9uOiBTZWxlY3Rpb25BY3Rpb24sXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0SWQrKztcbiAgICB0aGlzLnJ1bGVzLnB1c2goe1xuICAgICAgJ3J1bGUtdHlwZSc6ICdzZWxlY3Rpb24nLFxuICAgICAgJ3J1bGUtaWQnOiBTdHJpbmcoaWQpLFxuICAgICAgJ3J1bGUtbmFtZSc6IGAke2lkfWAsXG4gICAgICAnb2JqZWN0LWxvY2F0b3InOiB7XG4gICAgICAgICdzY2hlbWEtbmFtZSc6IHNjaGVtYU5hbWUsXG4gICAgICAgICd0YWJsZS1uYW1lJzogdGFibGVOYW1lLFxuICAgICAgfSxcbiAgICAgICdydWxlLWFjdGlvbic6IGFjdGlvbixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVHJhbnNmb3JtYXRpb24gcnVsZXMg4oCUIHNjaGVtYVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFJlbmFtZSBhIHNjaGVtYS4gKi9cbiAgcmVuYW1lU2NoZW1hKHNjaGVtYU5hbWU6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgICclJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlNDSEVNQSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLlJFTkFNRSxcbiAgICAgIG5ld05hbWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IGFsbCBzY2hlbWEgbmFtZXMgdG8gbG93ZXJjYXNlLiAqL1xuICB0b0xvd2VyQ2FzZVNjaGVtYShzY2hlbWFOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQ09OVkVSVF9MT1dFUkNBU0UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IGFsbCBzY2hlbWEgbmFtZXMgdG8gdXBwZXJjYXNlLiAqL1xuICB0b1VwcGVyQ2FzZVNjaGVtYShzY2hlbWFOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgJyUnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuU0NIRU1BLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQ09OVkVSVF9VUFBFUkNBU0UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBBZGQgYSBwcmVmaXggdG8gc2NoZW1hIG5hbWVzLiAqL1xuICBhZGRQcmVmaXhUb1NjaGVtYShzY2hlbWFOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgICclJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlNDSEVNQSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkFERF9QUkVGSVgsXG4gICAgICBwcmVmaXgsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBBZGQgYSBzdWZmaXggdG8gc2NoZW1hIG5hbWVzLiAqL1xuICBhZGRTdWZmaXhUb1NjaGVtYShzY2hlbWFOYW1lOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgICclJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLlNDSEVNQSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkFERF9TVUZGSVgsXG4gICAgICBzdWZmaXgsXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVHJhbnNmb3JtYXRpb24gcnVsZXMg4oCUIHRhYmxlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogUmVuYW1lIGEgdGFibGUuICovXG4gIHJlbmFtZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLlJFTkFNRSxcbiAgICAgIG5ld05hbWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IG1hdGNoaW5nIHRhYmxlIG5hbWVzIHRvIGxvd2VyY2FzZS4gVXNlIGAlYCB0byBtYXRjaCBhbGwgdGFibGVzLiAqL1xuICB0b0xvd2VyQ2FzZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuVEFCTEUsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX0xPV0VSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgbWF0Y2hpbmcgdGFibGUgbmFtZXMgdG8gdXBwZXJjYXNlLiAqL1xuICB0b1VwcGVyQ2FzZVRhYmxlKHNjaGVtYU5hbWU6IHN0cmluZywgdGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuVEFCTEUsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5DT05WRVJUX1VQUEVSQ0FTRSxcbiAgICApO1xuICB9XG5cbiAgLyoqIEFkZCBhIHByZWZpeCB0byB0YWJsZSBuYW1lcy4gKi9cbiAgYWRkUHJlZml4VG9UYWJsZShzY2hlbWFOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5UQUJMRSxcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLkFERF9QUkVGSVgsXG4gICAgICBwcmVmaXgsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBBZGQgYSBzdWZmaXggdG8gdGFibGUgbmFtZXMuICovXG4gIGFkZFN1ZmZpeFRvVGFibGUoc2NoZW1hTmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuVEFCTEUsXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5BRERfU1VGRklYLFxuICAgICAgc3VmZml4LFxuICAgICk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFRyYW5zZm9ybWF0aW9uIHJ1bGVzIOKAlCBjb2x1bW5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBSZW5hbWUgYSBjb2x1bW4gaW4gYSB0YWJsZS4gKi9cbiAgcmVuYW1lQ29sdW1uKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgbmV3TmFtZTogc3RyaW5nLFxuICApOiBUYWJsZU1hcHBpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFuc2Zvcm1hdGlvblJ1bGUoXG4gICAgICBzY2hlbWFOYW1lLFxuICAgICAgdGFibGVOYW1lLFxuICAgICAgY29sdW1uTmFtZSxcbiAgICAgIFJ1bGVPYmplY3RMb2NhdG9yLkNPTFVNTixcbiAgICAgIFRyYW5zZm9ybWF0aW9uQWN0aW9uLlJFTkFNRSxcbiAgICAgIG5ld05hbWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IG1hdGNoaW5nIGNvbHVtbiBuYW1lcyB0byBsb3dlcmNhc2UuICovXG4gIHRvTG93ZXJDYXNlQ29sdW1uKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICBjb2x1bW5OYW1lLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuQ09MVU1OLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQ09OVkVSVF9MT1dFUkNBU0UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IG1hdGNoaW5nIGNvbHVtbiBuYW1lcyB0byB1cHBlcmNhc2UuICovXG4gIHRvVXBwZXJDYXNlQ29sdW1uKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIHJldHVybiB0aGlzLmFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICAgIHNjaGVtYU5hbWUsXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICBjb2x1bW5OYW1lLFxuICAgICAgUnVsZU9iamVjdExvY2F0b3IuQ09MVU1OLFxuICAgICAgVHJhbnNmb3JtYXRpb25BY3Rpb24uQ09OVkVSVF9VUFBFUkNBU0UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgYSBjb2x1bW4gZnJvbSBhIHRhYmxlLiAqL1xuICByZW1vdmVDb2x1bW4oXG4gICAgc2NoZW1hTmFtZTogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgKTogVGFibGVNYXBwaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkVHJhbnNmb3JtYXRpb25SdWxlKFxuICAgICAgc2NoZW1hTmFtZSxcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBSdWxlT2JqZWN0TG9jYXRvci5DT0xVTU4sXG4gICAgICBUcmFuc2Zvcm1hdGlvbkFjdGlvbi5SRU1PVkVfQ09MVU1OLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGNvbHVtbiB0byBhIHRhYmxlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBtYXBwaW5ncy5hZGRDb2x1bW4oJ3B1YmxpYycsICdvcmRlcnMnLCB7XG4gICAqICAgY29sdW1uTmFtZTogJ21pZ3JhdGlvbl90cycsXG4gICAqICAgY29sdW1uVHlwZTogQ29sdW1uRGF0YVR5cGUuREFURVRJTUUsXG4gICAqICAgZXhwcmVzc2lvbjogJyR0aW1lc3RhbXAnLFxuICAgKiB9KTtcbiAgICovXG4gIGFkZENvbHVtbihcbiAgICBzY2hlbWFOYW1lOiBzdHJpbmcsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uOiBBZGRDb2x1bW5EZWZpbml0aW9uLFxuICApOiBUYWJsZU1hcHBpbmdzIHtcbiAgICBjb25zdCBpZCA9IHRoaXMubmV4dElkKys7XG4gICAgY29uc3Qgb2JqZWN0TG9jYXRvcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdzY2hlbWEtbmFtZSc6IHNjaGVtYU5hbWUsXG4gICAgICAndGFibGUtbmFtZSc6IHRhYmxlTmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcnVsZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAncnVsZS10eXBlJzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAgICdydWxlLWlkJzogU3RyaW5nKGlkKSxcbiAgICAgICdydWxlLW5hbWUnOiBgJHtpZH1gLFxuICAgICAgJ29iamVjdC1sb2NhdG9yJzogb2JqZWN0TG9jYXRvcixcbiAgICAgICdydWxlLWFjdGlvbic6IFRyYW5zZm9ybWF0aW9uQWN0aW9uLkFERF9DT0xVTU4sXG4gICAgICAncnVsZS10YXJnZXQnOiAnY29sdW1uJyxcbiAgICAgICd2YWx1ZSc6IGNvbHVtbi5jb2x1bW5OYW1lLFxuICAgICAgJ2RhdGEtdHlwZSc6IHRoaXMuYnVpbGREYXRhVHlwZShjb2x1bW4pLFxuICAgIH07XG5cbiAgICBpZiAoY29sdW1uLmV4cHJlc3Npb24pIHtcbiAgICAgIHJ1bGUuZXhwcmVzc2lvbiA9IGNvbHVtbi5leHByZXNzaW9uO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmNvbHVtblZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIERNUyBleHByZXNzaW9uIHN5bnRheDogc3RyaW5nIGxpdGVyYWxzIHVzZSBzaW5nbGUgcXVvdGVzIChlc2NhcGUgJyBhcyAnJylcbiAgICAgIHJ1bGUuZXhwcmVzc2lvbiA9IGAnJHtjb2x1bW4uY29sdW1uVmFsdWUucmVwbGFjZSgvJy9nLCBcIicnXCIpfSdgO1xuICAgIH1cblxuICAgIHRoaXMucnVsZXMucHVzaChydWxlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREYXRhVHlwZShjb2x1bW46IEFkZENvbHVtbkRlZmluaXRpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgZHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyB0eXBlOiBjb2x1bW4uY29sdW1uVHlwZSB9O1xuICAgIGlmIChjb2x1bW4uY29sdW1uTGVuZ3RoICE9PSB1bmRlZmluZWQpIGR0Lmxlbmd0aCA9IGNvbHVtbi5jb2x1bW5MZW5ndGg7XG4gICAgaWYgKGNvbHVtbi5jb2x1bW5QcmVjaXNpb24gIT09IHVuZGVmaW5lZCkgZHQucHJlY2lzaW9uID0gY29sdW1uLmNvbHVtblByZWNpc2lvbjtcbiAgICBpZiAoY29sdW1uLmNvbHVtblNjYWxlICE9PSB1bmRlZmluZWQpIGR0LnNjYWxlID0gY29sdW1uLmNvbHVtblNjYWxlO1xuICAgIHJldHVybiBkdDtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRHluYW1vREIgb2JqZWN0IG1hcHBpbmdcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBNYXAgYSByZWxhdGlvbmFsIHNvdXJjZSB0YWJsZSB0byBhIER5bmFtb0RCIHRhcmdldCB0YWJsZS5cbiAgICpcbiAgICogRW1pdHMgYSBETVMgYG9iamVjdC1tYXBwaW5nYCBydWxlIHdpdGggYHJ1bGUtYWN0aW9uOiBtYXAtcmVjb3JkLXRvLXJlY29yZGAuXG4gICAqIERNUyByZXF1aXJlcyB0aGlzIHJ1bGUgdHlwZSB3aGVuIHRoZSB0YXJnZXQgZW5kcG9pbnQgaXMgRHluYW1vREI7IHRoZVxuICAgKiBwYXJ0aXRpb24ga2V5IChhbmQgb3B0aW9uYWwgc29ydCBrZXkpIHRlbGwgRE1TIGhvdyB0byBidWlsZCB0aGUgaXRlbSBrZXlcbiAgICogZnJvbSBzb3VyY2UgY29sdW1ucy5cbiAgICpcbiAgICogU291cmNlIGNvbHVtbnMgbm90IGxpc3RlZCBpbiBgYXR0cmlidXRlTWFwcGluZ3NgIG9yIGBleGNsdWRlQ29sdW1uc2AgYXJlXG4gICAqIG1pZ3JhdGVkIHdpdGggdGhlIHNvdXJjZSBjb2x1bW4gbmFtZSBhcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gICAqXG4gICAqIEZvciBlYWNoIGtleSBvciBhdHRyaWJ1dGUgbWFwcGluZywgc2V0IGVpdGhlciBgc291cmNlQ29sdW1uYCAoYSBzaW5nbGVcbiAgICogY29sdW1uIHdyYXBwZWQgYXMgYCR7Y29sfWApIG9yIGB2YWx1ZWAgKGEgcmF3IERNUyBleHByZXNzaW9uLCBlLmcuXG4gICAqIGAnQ1VTVE9NRVIjJHtjdXN0b21lcl9pZH0nYCBmb3IgY29tcG9zaXRlIGtleXMpLiBFeGFjdGx5IG9uZSBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCB0d2ljZSB3aXRoIHRoZSBzYW1lIGBzY2hlbWFOYW1lYC9gdGFibGVOYW1lYCBlbWl0cyB0d29cbiAgICogc2VwYXJhdGUgcnVsZXM7IERNUyB3aWxsIHJlamVjdCBkdXBsaWNhdGUgb2JqZWN0LW1hcHBpbmcgcnVsZXMgYXQgZGVwbG95XG4gICAqIHRpbWUuIENhbGwgaXQgb25jZSBwZXIgc291cmNlIHRhYmxlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBtYXBwaW5ncyA9IG5ldyBUYWJsZU1hcHBpbmdzKClcbiAgICogICAuaW5jbHVkZVRhYmxlKCdwdWJsaWMnLCAnb3JkZXJzJylcbiAgICogICAubWFwVG9EeW5hbW9EYigncHVibGljJywgJ29yZGVycycsIHtcbiAgICogICAgIHRhcmdldFRhYmxlTmFtZTogJ09yZGVycycsXG4gICAqICAgICAvLyBDb21wb3NpdGUgcGFydGl0aW9uIGtleSBmcm9tIGEgbGl0ZXJhbCBwcmVmaXggKyBzb3VyY2UgY29sdW1uOlxuICAgKiAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAqICAgICAgIHZhbHVlOiAnQ1VTVE9NRVIjJHtjdXN0b21lcl9pZH0nLFxuICAgKiAgICAgICB0YXJnZXRBdHRyaWJ1dGVOYW1lOiAnUEsnLFxuICAgKiAgICAgICBhdHRyaWJ1dGVTdWJUeXBlOiBEeW5hbW9EYkF0dHJpYnV0ZVN1YlR5cGUuU1RSSU5HLFxuICAgKiAgICAgfSxcbiAgICogICAgIC8vIEJhcmUgc291cmNlIGNvbHVtbiBmb3IgdGhlIHNvcnQga2V5OlxuICAgKiAgICAgc29ydEtleToge1xuICAgKiAgICAgICBzb3VyY2VDb2x1bW46ICdjcmVhdGVkX2F0JyxcbiAgICogICAgICAgdGFyZ2V0QXR0cmlidXRlTmFtZTogJ0NyZWF0ZWRBdCcsXG4gICAqICAgICAgIGF0dHJpYnV0ZVN1YlR5cGU6IER5bmFtb0RiQXR0cmlidXRlU3ViVHlwZS5TVFJJTkcsXG4gICAqICAgICB9LFxuICAgKiAgICAgZXhjbHVkZUNvbHVtbnM6IFsnaW50ZXJuYWxfZmxhZyddLFxuICAgKiAgICAgYXR0cmlidXRlTWFwcGluZ3M6IFtcbiAgICogICAgICAge1xuICAgKiAgICAgICAgIHNvdXJjZUNvbHVtbjogJ2N1c3RvbWVyX2lkJyxcbiAgICogICAgICAgICB0YXJnZXRBdHRyaWJ1dGVOYW1lOiAnQ3VzdG9tZXJJZCcsXG4gICAqICAgICAgICAgYXR0cmlidXRlU3ViVHlwZTogRHluYW1vRGJBdHRyaWJ1dGVTdWJUeXBlLlNUUklORyxcbiAgICogICAgICAgfSxcbiAgICogICAgIF0sXG4gICAqICAgfSlcbiAgICogICAudG9Kc29uKCk7XG4gICAqL1xuICBtYXBUb0R5bmFtb0RiKFxuICAgIHNjaGVtYU5hbWU6IHN0cmluZyxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBEeW5hbW9EYk9iamVjdE1hcHBpbmdPcHRpb25zLFxuICApOiBUYWJsZU1hcHBpbmdzIHtcbiAgICBjb25zdCBleGNsdWRlZCA9IG5ldyBTZXQob3B0aW9ucy5leGNsdWRlQ29sdW1ucyA/PyBbXSk7XG4gICAgdGhpcy5jaGVja05vdEV4Y2x1ZGVkKG9wdGlvbnMucGFydGl0aW9uS2V5LCBleGNsdWRlZCk7XG4gICAgaWYgKG9wdGlvbnMuc29ydEtleSkge1xuICAgICAgdGhpcy5jaGVja05vdEV4Y2x1ZGVkKG9wdGlvbnMuc29ydEtleSwgZXhjbHVkZWQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG1hcHBpbmcgb2Ygb3B0aW9ucy5hdHRyaWJ1dGVNYXBwaW5ncyA/PyBbXSkge1xuICAgICAgdGhpcy5jaGVja05vdEV4Y2x1ZGVkKG1hcHBpbmcsIGV4Y2x1ZGVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMubmV4dElkKys7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVNYXBwaW5nczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW1xuICAgICAgdGhpcy5idWlsZEF0dHJpYnV0ZU1hcHBpbmcob3B0aW9ucy5wYXJ0aXRpb25LZXkpLFxuICAgIF07XG4gICAgaWYgKG9wdGlvbnMuc29ydEtleSkge1xuICAgICAgYXR0cmlidXRlTWFwcGluZ3MucHVzaCh0aGlzLmJ1aWxkQXR0cmlidXRlTWFwcGluZyhvcHRpb25zLnNvcnRLZXkpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYXR0cmlidXRlTWFwcGluZ3MpIHtcbiAgICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiBvcHRpb25zLmF0dHJpYnV0ZU1hcHBpbmdzKSB7XG4gICAgICAgIGF0dHJpYnV0ZU1hcHBpbmdzLnB1c2godGhpcy5idWlsZEF0dHJpYnV0ZU1hcHBpbmcobWFwcGluZykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmdQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICdwYXJ0aXRpb24ta2V5LW5hbWUnOiBvcHRpb25zLnBhcnRpdGlvbktleS50YXJnZXRBdHRyaWJ1dGVOYW1lLFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMuc29ydEtleSkge1xuICAgICAgbWFwcGluZ1BhcmFtZXRlcnNbJ3NvcnQta2V5LW5hbWUnXSA9IG9wdGlvbnMuc29ydEtleS50YXJnZXRBdHRyaWJ1dGVOYW1lO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5leGNsdWRlQ29sdW1ucyAmJiBvcHRpb25zLmV4Y2x1ZGVDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIG1hcHBpbmdQYXJhbWV0ZXJzWydleGNsdWRlLWNvbHVtbnMnXSA9IG9wdGlvbnMuZXhjbHVkZUNvbHVtbnM7XG4gICAgfVxuICAgIG1hcHBpbmdQYXJhbWV0ZXJzWydhdHRyaWJ1dGUtbWFwcGluZ3MnXSA9IGF0dHJpYnV0ZU1hcHBpbmdzO1xuXG4gICAgdGhpcy5ydWxlcy5wdXNoKHtcbiAgICAgICdydWxlLXR5cGUnOiAnb2JqZWN0LW1hcHBpbmcnLFxuICAgICAgJ3J1bGUtaWQnOiBTdHJpbmcoaWQpLFxuICAgICAgJ3J1bGUtbmFtZSc6IGAke2lkfWAsXG4gICAgICAncnVsZS1hY3Rpb24nOiAnbWFwLXJlY29yZC10by1yZWNvcmQnLFxuICAgICAgJ29iamVjdC1sb2NhdG9yJzoge1xuICAgICAgICAnc2NoZW1hLW5hbWUnOiBzY2hlbWFOYW1lLFxuICAgICAgICAndGFibGUtbmFtZSc6IHRhYmxlTmFtZSxcbiAgICAgIH0sXG4gICAgICAndGFyZ2V0LXRhYmxlLW5hbWUnOiBvcHRpb25zLnRhcmdldFRhYmxlTmFtZSxcbiAgICAgICdtYXBwaW5nLXBhcmFtZXRlcnMnOiBtYXBwaW5nUGFyYW1ldGVycyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tOb3RFeGNsdWRlZChcbiAgICBtYXBwaW5nOiBEeW5hbW9EYktleU1hcHBpbmcgfCBEeW5hbW9EYkF0dHJpYnV0ZU1hcHBpbmcsXG4gICAgZXhjbHVkZWQ6IFNldDxzdHJpbmc+LFxuICApOiB2b2lkIHtcbiAgICBpZiAobWFwcGluZy5zb3VyY2VDb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBleGNsdWRlZC5oYXMobWFwcGluZy5zb3VyY2VDb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEeW5hbW9EQiBhdHRyaWJ1dGUgbWFwcGluZyBmb3IgJyR7bWFwcGluZy50YXJnZXRBdHRyaWJ1dGVOYW1lfScgdXNlcyBgICtcbiAgICAgICAgYHNvdXJjZUNvbHVtbiAnJHttYXBwaW5nLnNvdXJjZUNvbHVtbn0nLCB3aGljaCBhbHNvIGFwcGVhcnMgaW4gYCArXG4gICAgICAgICdleGNsdWRlQ29sdW1ucy4gUmVtb3ZlIGl0IGZyb20gb25lIG9yIHRoZSBvdGhlci4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQXR0cmlidXRlTWFwcGluZyhcbiAgICBtYXBwaW5nOiBEeW5hbW9EYktleU1hcHBpbmcgfCBEeW5hbW9EYkF0dHJpYnV0ZU1hcHBpbmcsXG4gICk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhhc1NvdXJjZSA9IG1hcHBpbmcuc291cmNlQ29sdW1uICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaGFzVmFsdWUgPSBtYXBwaW5nLnZhbHVlICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKGhhc1NvdXJjZSA9PT0gaGFzVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER5bmFtb0RCIGF0dHJpYnV0ZSBtYXBwaW5nIGZvciAnJHttYXBwaW5nLnRhcmdldEF0dHJpYnV0ZU5hbWV9JzogYCArXG4gICAgICAgICdleGFjdGx5IG9uZSBvZiBzb3VyY2VDb2x1bW4gb3IgdmFsdWUgbXVzdCBiZSBzZXQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gaGFzVmFsdWUgPyBtYXBwaW5nLnZhbHVlISA6IGBcXCR7JHttYXBwaW5nLnNvdXJjZUNvbHVtbn19YDtcbiAgICByZXR1cm4ge1xuICAgICAgJ3RhcmdldC1hdHRyaWJ1dGUtbmFtZSc6IG1hcHBpbmcudGFyZ2V0QXR0cmlidXRlTmFtZSxcbiAgICAgICdhdHRyaWJ1dGUtdHlwZSc6ICdzY2FsYXInLFxuICAgICAgJ2F0dHJpYnV0ZS1zdWItdHlwZSc6IG1hcHBpbmcuYXR0cmlidXRlU3ViVHlwZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZFRyYW5zZm9ybWF0aW9uUnVsZShcbiAgICBzY2hlbWFOYW1lOiBzdHJpbmcsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHJ1bGVUYXJnZXQ6IFJ1bGVPYmplY3RMb2NhdG9yLFxuICAgIGFjdGlvbjogVHJhbnNmb3JtYXRpb25BY3Rpb24sXG4gICAgdmFsdWU/OiBzdHJpbmcsXG4gICk6IFRhYmxlTWFwcGluZ3Mge1xuICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0SWQrKztcbiAgICBjb25zdCBvYmplY3RMb2NhdG9yOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3NjaGVtYS1uYW1lJzogc2NoZW1hTmFtZSxcbiAgICAgICd0YWJsZS1uYW1lJzogdGFibGVOYW1lLFxuICAgIH07XG4gICAgaWYgKGNvbHVtbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqZWN0TG9jYXRvclsnY29sdW1uLW5hbWUnXSA9IGNvbHVtbk5hbWU7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAncnVsZS10eXBlJzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAgICdydWxlLWlkJzogU3RyaW5nKGlkKSxcbiAgICAgICdydWxlLW5hbWUnOiBgJHtpZH1gLFxuICAgICAgJ3J1bGUtdGFyZ2V0JzogcnVsZVRhcmdldCxcbiAgICAgICdvYmplY3QtbG9jYXRvcic6IG9iamVjdExvY2F0b3IsXG4gICAgICAncnVsZS1hY3Rpb24nOiBhY3Rpb24sXG4gICAgfTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcnVsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMucnVsZXMucHVzaChydWxlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gT3V0cHV0XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2VyaWFsaXNlIHRoZSBhY2N1bXVsYXRlZCBydWxlcyB0byB0aGUgSlNPTiBzdHJpbmcgZXhwZWN0ZWQgYnkgRE1TLlxuICAgKiBQYXNzZXMgdGhlIHJlc3VsdCBkaXJlY3RseSB0byBgcmVwbGljYXRpb25UYXNrU2V0dGluZ3NgIG9yXG4gICAqIGBEbXNSZXBsaWNhdGlvblRhc2sudGFibGVNYXBwaW5nc2AuXG4gICAqL1xuICB0b0pzb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyBydWxlczogdGhpcy5ydWxlcyB9LCBudWxsLCAyKTtcbiAgfVxufVxuIl19
|