@aws-cdk/aws-glue-alpha 2.265.0-alpha.0 → 2.266.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +504 -436
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +25 -33
- package/README.md +111 -43
- package/awslint.json +2 -1
- package/lib/catalog.js +3 -3
- package/lib/code.js +3 -3
- package/lib/connection.js +2 -2
- package/lib/data-format.d.ts +2 -2
- package/lib/data-format.js +8 -8
- package/lib/data-quality-ruleset.d.ts +28 -3
- package/lib/data-quality-ruleset.js +37 -5
- package/lib/database.d.ts +1 -1
- package/lib/database.js +2 -2
- package/lib/external-table.js +6 -4
- package/lib/jobs/job.d.ts +1 -24
- package/lib/jobs/job.js +3 -3
- package/lib/jobs/pyspark-etl-job.d.ts +2 -1
- package/lib/jobs/pyspark-etl-job.js +10 -5
- package/lib/jobs/pyspark-flex-etl-job.d.ts +3 -2
- package/lib/jobs/pyspark-flex-etl-job.js +7 -6
- package/lib/jobs/pyspark-streaming-job.d.ts +2 -1
- package/lib/jobs/pyspark-streaming-job.js +6 -5
- package/lib/jobs/python-shell-job.js +1 -1
- package/lib/jobs/ray-job.d.ts +8 -0
- package/lib/jobs/ray-job.js +3 -7
- package/lib/jobs/scala-spark-etl-job.js +4 -8
- package/lib/jobs/scala-spark-flex-etl-job.js +4 -4
- package/lib/jobs/scala-spark-streaming-job.js +4 -8
- package/lib/jobs/spark-job.d.ts +26 -0
- package/lib/jobs/spark-job.js +2 -2
- package/lib/partition-projection.js +1 -1
- package/lib/s3-table.d.ts +2 -1
- package/lib/s3-table.js +5 -3
- package/lib/schema.js +3 -8
- package/lib/security-configuration.d.ts +41 -47
- package/lib/security-configuration.js +83 -25
- package/lib/storage-parameter.js +1 -1
- package/lib/table-base.d.ts +33 -0
- package/lib/table-base.js +33 -2
- package/lib/table-deprecated.js +1 -1
- package/lib/triggers/trigger-options.js +1 -1
- package/lib/triggers/workflow.js +2 -2
- package/package.json +7 -7
package/lib/table-base.js
CHANGED
|
@@ -48,7 +48,7 @@ const partition_index_provider_generated_1 = require("../custom-resource-handler
|
|
|
48
48
|
* A Glue table.
|
|
49
49
|
*/
|
|
50
50
|
class TableBase extends core_1.Resource {
|
|
51
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableBase", version: "2.
|
|
51
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableBase", version: "2.266.0-alpha.0" };
|
|
52
52
|
static fromTableArn(scope, id, tableArn) {
|
|
53
53
|
const tableName = core_1.Fn.select(1, core_1.Fn.split('/', core_1.Stack.of(scope).splitArn(tableArn, core_1.ArnFormat.SLASH_RESOURCE_NAME).resourceName));
|
|
54
54
|
return TableBase.fromTableAttributes(scope, id, {
|
|
@@ -112,6 +112,11 @@ class TableBase extends core_1.Resource {
|
|
|
112
112
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html#cfn-glue-table-tableinput-parameters
|
|
113
113
|
*/
|
|
114
114
|
parameters;
|
|
115
|
+
/**
|
|
116
|
+
* Whether the data stored in the table is encrypted. Emitted as the
|
|
117
|
+
* `has_encrypted_data` table parameter.
|
|
118
|
+
*/
|
|
119
|
+
hasEncryptedData;
|
|
115
120
|
/**
|
|
116
121
|
* Partition indexes must be created one at a time. To avoid
|
|
117
122
|
* race conditions, we store the resource and add dependencies
|
|
@@ -142,6 +147,8 @@ class TableBase extends core_1.Resource {
|
|
|
142
147
|
this.storageParameters = props.storageParameters;
|
|
143
148
|
this.partitionProjection = props.partitionProjection;
|
|
144
149
|
this.parameters = props.parameters ?? {};
|
|
150
|
+
this.hasEncryptedData = props.hasEncryptedData ?? true;
|
|
151
|
+
this.reconcileHasEncryptedData();
|
|
145
152
|
this.compressed = props.compressed ?? false;
|
|
146
153
|
this.validateAndGeneratePartitionProjection();
|
|
147
154
|
}
|
|
@@ -242,6 +249,30 @@ class TableBase extends core_1.Resource {
|
|
|
242
249
|
const hash = (0, helpers_internal_1.md5hash)(uniqueId + '-' + keys.join('-')).slice(0, 8);
|
|
243
250
|
return prefix.substring(0, maxIndexLength - hash.length - 1) + '-' + hash;
|
|
244
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Reconcile a `has_encrypted_data` value supplied through the free-form
|
|
254
|
+
* `parameters` map with the typed `hasEncryptedData` property.
|
|
255
|
+
*
|
|
256
|
+
* `has_encrypted_data` is managed by this construct and emitted authoritatively
|
|
257
|
+
* from `hasEncryptedData`. Supplying it through `parameters` as well is only
|
|
258
|
+
* tolerated when the value is identical; a differing (or unresolved) value is
|
|
259
|
+
* rejected so the two inputs can never silently disagree. On success the key is
|
|
260
|
+
* removed from the free-form map so the managed value is the single source of
|
|
261
|
+
* truth.
|
|
262
|
+
*/
|
|
263
|
+
reconcileHasEncryptedData() {
|
|
264
|
+
const key = 'has_encrypted_data';
|
|
265
|
+
if (!(key in this.parameters)) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const supplied = this.parameters[key];
|
|
269
|
+
const managed = String(this.hasEncryptedData);
|
|
270
|
+
if (core_1.Token.isUnresolved(supplied) || supplied !== managed) {
|
|
271
|
+
throw new core_1.ValidationError((0, helpers_internal_1.lit) `HasEncryptedDataConflict`, `the \`${key}\` table parameter is managed by the \`hasEncryptedData\` property; ` +
|
|
272
|
+
`remove it from \`parameters\` and use the boolean \`hasEncryptedData\` property instead (got ${JSON.stringify(supplied)}, expected ${JSON.stringify(managed)})`, this);
|
|
273
|
+
}
|
|
274
|
+
delete this.parameters[key];
|
|
275
|
+
}
|
|
245
276
|
validatePartitionIndex(index) {
|
|
246
277
|
if (index.indexName !== undefined && !core_1.Token.isUnresolved(index.indexName) && (index.indexName.length < 1 || index.indexName.length > 255)) {
|
|
247
278
|
throw new core_1.ValidationError((0, helpers_internal_1.lit) `IndexNameLengthInvalid`, `Index name must be between 1 and 255 characters, but got ${index.indexName.length}`, this);
|
|
@@ -406,4 +437,4 @@ function validateSchema(columns, partitionKeys) {
|
|
|
406
437
|
names.add(column.name);
|
|
407
438
|
});
|
|
408
439
|
}
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRhYmxlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx5REFBMkM7QUFDM0MsaURBQWdEO0FBR2hELDJDQUEwSjtBQUMxSiw0RUFBcUU7QUFDckUsaUVBQW1EO0FBQ25ELDJDQUF1QztBQUd2QyxpRUFBeUc7QUFHekcsMklBQXFLO0FBb0tySzs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxlQUFROztJQUN2QyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQWdCO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLFNBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQztRQUUvSCxPQUFPLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzlDLFFBQVE7WUFDUixTQUFTO1NBQ1YsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7Ozs7Ozs7Ozs7UUFDcEYsTUFBTSxNQUFPLFNBQVEsZUFBUTtZQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUI7SUFPRDs7T0FFRztJQUNhLFFBQVEsQ0FBWTtJQUVwQzs7T0FFRztJQUNhLFVBQVUs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QztJQUNuSCxDQUFDO0lBQ0QsdUZBQXVGO0lBQ3ZGLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDaEMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyRCxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSxxQkFBcUIsRUFBRSx5REFBeUQsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQztRQUN0SixDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDZm5UYWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEtleUdyYW50cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHR5cGUgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgdHlwZSB7IElSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQXJuRm9ybWF0LCBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIEZuLCBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbGl0LCBtZDVoYXNoIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgKiBhcyBjciBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhRm9ybWF0IH0gZnJvbSAnLi9kYXRhLWZvcm1hdCc7XG5pbXBvcnQgdHlwZSB7IElEYXRhYmFzZSB9IGZyb20gJy4vZGF0YWJhc2UnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uUGFyYW1ldGVycywgdHlwZSBQYXJ0aXRpb25Qcm9qZWN0aW9uIH0gZnJvbSAnLi9wYXJ0aXRpb24tcHJvamVjdGlvbic7XG5pbXBvcnQgdHlwZSB7IENvbHVtbiB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgU3RvcmFnZVBhcmFtZXRlciB9IGZyb20gJy4vc3RvcmFnZS1wYXJhbWV0ZXInO1xuaW1wb3J0IHsgUGFydGl0aW9uSW5kZXhJc0NvbXBsZXRlRnVuY3Rpb24sIFBhcnRpdGlvbkluZGV4T25FdmVudEZ1bmN0aW9uIH0gZnJvbSAnLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL2Rpc3QvYXdzLWdsdWUtYWxwaGEvcGFydGl0aW9uLWluZGV4LXByb3ZpZGVyLmdlbmVyYXRlZCc7XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIFBhcnRpdGlvbiBJbmRleC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJ0aXRpb25JbmRleCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGFydGl0aW9uIGluZGV4LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydGl0aW9uIGtleSBuYW1lcyB0aGF0IGNvbXByaXNlIHRoZSBwYXJ0aXRpb25cbiAgICogaW5kZXguIFRoZSBuYW1lcyBtdXN0IGNvcnJlc3BvbmQgdG8gYSBuYW1lIGluIHRoZVxuICAgKiB0YWJsZSdzIHBhcnRpdGlvbiBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5TmFtZXM6IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBJVGFibGUgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVBdHRyaWJ1dGVzIHtcbiAgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcbiAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVCYXNlUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZ2VuZXJhdGVkIGJ5IENESy5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEYXRhYmFzZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZTogSURhdGFiYXNlO1xuXG4gIC8qKlxuICAgKiBDb2x1bW5zIG9mIHRoZSB0YWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbltdO1xuXG4gIC8qKlxuICAgKiBQYXJ0aXRpb24gY29sdW1ucyBvZiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRhYmxlIGlzIG5vdCBwYXJ0aXRpb25lZFxuICAgKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uS2V5cz86IENvbHVtbltdO1xuXG4gIC8qKlxuICAgKiBQYXJ0aXRpb24gaW5kZXhlcyBvbiB0aGUgdGFibGUuIEEgbWF4aW11bSBvZiAzIGluZGV4ZXNcbiAgICogYXJlIGFsbG93ZWQgb24gYSB0YWJsZS4gS2V5cyBpbiB0aGUgaW5kZXggbXVzdCBiZSBwYXJ0XG4gICAqIG9mIHRoZSB0YWJsZSdzIHBhcnRpdGlvbiBrZXlzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0YWJsZSBoYXMgbm8gcGFydGl0aW9uIGluZGV4ZXNcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbkluZGV4ZXM/OiBQYXJ0aXRpb25JbmRleFtdO1xuXG4gIC8qKlxuICAgKiBTdG9yYWdlIHR5cGUgb2YgdGhlIHRhYmxlJ3MgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFGb3JtYXQ6IERhdGFGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSdzIGRhdGEgaXMgY29tcHJlc3NlZCBvciBub3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjb21wcmVzc2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRhYmxlIGRhdGEgaXMgc3RvcmVkIGluIHN1YmRpcmVjdG9yaWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVkQXNTdWJEaXJlY3Rvcmllcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFydGl0aW9uIGZpbHRlcmluZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9nbHVlLWJlc3QtcHJhY3RpY2VzLmh0bWwjZ2x1ZS1iZXN0LXByYWN0aWNlcy1wYXJ0aXRpb24taW5kZXhcbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgcGFyYW1ldGVyIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVQYXJ0aXRpb25GaWx0ZXJpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlci1zdXBwbGllZCBwcm9wZXJ0aWVzIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHBoeXNpY2FsIHN0b3JhZ2Ugb2YgdGhpcyB0YWJsZS4gVGhlc2UgcHJvcGVydGllcyBoZWxwIGRlc2NyaWJlIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgdGhhdCBpcyBzdG9yZWQgd2l0aGluIHRoZSBjcmF3bGVkIGRhdGEgc291cmNlcy5cbiAgICpcbiAgICogVGhlIGtleS92YWx1ZSBwYWlycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHN1Ym1pdHRlZCBhcmUgbm90IGxpbWl0ZWQsIGhvd2V2ZXIgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBub3QgZ3VhcmFudGVlZC5cbiAgICpcbiAgICogU29tZSBrZXlzIHdpbGwgYmUgYXV0by1wb3B1bGF0ZWQgYnkgZ2x1ZSBjcmF3bGVycywgaG93ZXZlciwgeW91IGNhbiBvdmVycmlkZSB0aGVtIGJ5IHNwZWNpZnlpbmcgdGhlIGtleSBhbmQgdmFsdWUgaW4gdGhpcyBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvdGFibGUtcHJvcGVydGllcy1jcmF3bGVyLmh0bWxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL3JfQ1JFQVRFX0VYVEVSTkFMX1RBQkxFLmh0bWwjcl9DUkVBVEVfRVhURVJOQUxfVEFCTEUtcGFyYW1ldGVycyAtIHVuZGVyIF9cIlRBQkxFIFBST1BFUlRJRVNcIl9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICAgZGVjbGFyZSBjb25zdCBnbHVlRGF0YWJhc2U6IGdsdWUuSURhdGFiYXNlO1xuICAgKiAgICBjb25zdCB0YWJsZSA9IG5ldyBnbHVlLlRhYmxlKHRoaXMsICdUYWJsZScsIHtcbiAgICogICAgICBzdG9yYWdlUGFyYW1ldGVyczogW1xuICAgKiAgICAgICAgICBnbHVlLlN0b3JhZ2VQYXJhbWV0ZXIuc2tpcEhlYWRlckxpbmVDb3VudCgxKSxcbiAgICogICAgICAgICAgZ2x1ZS5TdG9yYWdlUGFyYW1ldGVyLmNvbXByZXNzaW9uVHlwZShnbHVlLkNvbXByZXNzaW9uVHlwZS5HWklQKSxcbiAgICogICAgICAgICAgZ2x1ZS5TdG9yYWdlUGFyYW1ldGVyLmN1c3RvbSgnZm9vJywgJ2JhcicpLCAvLyBXaWxsIGhhdmUgbm8gZWZmZWN0XG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jdXN0b20oJ3NlcGFyYXRvckNoYXInLCAnLCcpLCAvLyBXaWxsIGRlc2NyaWJlIHRoZSBzZXBhcmF0b3IgY2hhciB1c2VkIGluIHRoZSBkYXRhXG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jdXN0b20oZ2x1ZS5TdG9yYWdlUGFyYW1ldGVycy5XUklURV9QQVJBTExFTCwgJ29mZicpLFxuICAgKiAgICAgIF0sXG4gICAqICAgICAgLy8gLi4uXG4gICAqICAgICAgZGF0YWJhc2U6IGdsdWVEYXRhYmFzZSxcbiAgICogICAgICBjb2x1bW5zOiBbe1xuICAgKiAgICAgICAgICBuYW1lOiAnY29sMScsXG4gICAqICAgICAgICAgIHR5cGU6IGdsdWUuU2NoZW1hLlNUUklORyxcbiAgICogICAgICB9XSxcbiAgICogICAgICBkYXRhRm9ybWF0OiBnbHVlLkRhdGFGb3JtYXQuQ1NWLFxuICAgKiAgICB9KTtcbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgcGFyYW1ldGVyIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlUGFyYW1ldGVycz86IFN0b3JhZ2VQYXJhbWV0ZXJbXTtcblxuICAvKipcbiAgICogVGhlIGtleS92YWx1ZSBwYWlycyBkZWZpbmUgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlLlxuICAgKiBUaGUga2V5L3ZhbHVlIHBhaXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgc3VibWl0dGVkIGFyZSBub3QgbGltaXRlZCwgaG93ZXZlciB0aGVpciBmdW5jdGlvbmFsaXR5IGlzIG5vdCBndWFyYW50ZWVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWdsdWUtdGFibGUtdGFibGVpbnB1dC5odG1sI2Nmbi1nbHVlLXRhYmxlLXRhYmxlaW5wdXQtcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBwYXJhbWV0ZXIgaXMgbm90IGRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBQYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGlzIHRhYmxlLlxuICAgKlxuICAgKiBQYXJ0aXRpb24gcHJvamVjdGlvbiBhbGxvd3MgQXRoZW5hIHRvIGF1dG9tYXRpY2FsbHkgYWRkIG5ldyBwYXJ0aXRpb25zXG4gICAqIHdpdGhvdXQgcmVxdWlyaW5nIGBBTFRFUiBUQUJMRSBBREQgUEFSVElUSU9OYCBzdGF0ZW1lbnRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL3BhcnRpdGlvbi1wcm9qZWN0aW9uLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwYXJ0aXRpb24gcHJvamVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGFydGl0aW9uUHJvamVjdGlvbj86IFBhcnRpdGlvblByb2plY3Rpb247XG59XG5cbi8qKlxuICogQSBHbHVlIHRhYmxlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFibGVCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVGFibGUge1xuICBwdWJsaWMgc3RhdGljIGZyb21UYWJsZUFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB0YWJsZUFybjogc3RyaW5nKTogSVRhYmxlIHtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBGbi5zZWxlY3QoMSwgRm4uc3BsaXQoJy8nLCBTdGFjay5vZihzY29wZSkuc3BsaXRBcm4odGFibGVBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWUhKSk7XG5cbiAgICByZXR1cm4gVGFibGVCYXNlLmZyb21UYWJsZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICB0YWJsZUFybixcbiAgICAgIHRhYmxlTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVGFibGUgY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBpZC5cbiAgICogQHBhcmFtIGF0dHJzIEltcG9ydCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21UYWJsZUF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFRhYmxlQXR0cmlidXRlcyk6IElUYWJsZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVGFibGUge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlQXJuID0gYXR0cnMudGFibGVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVOYW1lID0gYXR0cnMudGFibGVOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVSZXNvdXJjZTogQ2ZuVGFibGU7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwYXJ0aXRpb25JbmRleGVzPzogUGFydGl0aW9uSW5kZXhbXTtcblxuICAvKipcbiAgICogRGF0YWJhc2UgdGhpcyB0YWJsZSBiZWxvbmdzIHRvLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlOiBJRGF0YWJhc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSdzIGRhdGEgaXMgY29tcHJlc3NlZCBvciBub3QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcHJlc3NlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogRm9ybWF0IG9mIHRoaXMgdGFibGUncyBkYXRhIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFGb3JtYXQ6IERhdGFGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIFRoaXMgdGFibGUncyBjb2x1bW5zLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbltdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHRhYmxlJ3MgcGFydGl0aW9uIGtleXMgaWYgdGhlIHRhYmxlIGlzIHBhcnRpdGlvbmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvbktleXM/OiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogVGhlIHRhYmxlcycgc3RvcmFnZSBkZXNjcmlwdG9yIHByb3BlcnRpZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RvcmFnZVBhcmFtZXRlcnM/OiBTdG9yYWdlUGFyYW1ldGVyW107XG5cbiAgLyoqXG4gICAqIFRoaXMgdGFibGUncyBwYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uIGlmIGVuYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFydGl0aW9uUHJvamVjdGlvbj86IFBhcnRpdGlvblByb2plY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZXMnIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1nbHVlLXRhYmxlLXRhYmxlaW5wdXQuaHRtbCNjZm4tZ2x1ZS10YWJsZS10YWJsZWlucHV0LXBhcmFtZXRlcnNcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwYXJhbWV0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBQYXJ0aXRpb24gaW5kZXhlcyBtdXN0IGJlIGNyZWF0ZWQgb25lIGF0IGEgdGltZS4gVG8gYXZvaWRcbiAgICogcmFjZSBjb25kaXRpb25zLCB3ZSBzdG9yZSB0aGUgcmVzb3VyY2UgYW5kIGFkZCBkZXBlbmRlbmNpZXNcbiAgICogZWFjaCB0aW1lIGEgbmV3IHBhcnRpdGlvbiBpbmRleCBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlczogQ3VzdG9tUmVzb3VyY2VbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUYWJsZUJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy50YWJsZU5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7fSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gcHJvcHMuZGF0YWJhc2U7XG4gICAgdGhpcy5kYXRhRm9ybWF0ID0gcHJvcHMuZGF0YUZvcm1hdDtcblxuICAgIHZhbGlkYXRlU2NoZW1hKHByb3BzLmNvbHVtbnMsIHByb3BzLnBhcnRpdGlvbktleXMpO1xuICAgIHRoaXMuY29sdW1ucyA9IHByb3BzLmNvbHVtbnM7XG4gICAgdGhpcy5wYXJ0aXRpb25LZXlzID0gcHJvcHMucGFydGl0aW9uS2V5cztcbiAgICB0aGlzLnN0b3JhZ2VQYXJhbWV0ZXJzID0gcHJvcHMuc3RvcmFnZVBhcmFtZXRlcnM7XG4gICAgdGhpcy5wYXJ0aXRpb25Qcm9qZWN0aW9uID0gcHJvcHMucGFydGl0aW9uUHJvamVjdGlvbjtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwcm9wcy5wYXJhbWV0ZXJzID8/IHt9O1xuXG4gICAgdGhpcy5jb21wcmVzc2VkID0gcHJvcHMuY29tcHJlc3NlZCA/PyBmYWxzZTtcblxuICAgIHRoaXMudmFsaWRhdGVBbmRHZW5lcmF0ZVBhcnRpdGlvblByb2plY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBncmFudFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICBwdWJsaWMgYWJzdHJhY3QgZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEFkZCBhIHBhcnRpdGlvbiBpbmRleCB0byB0aGUgdGFibGUuIFlvdSBjYW4gaGF2ZSBhIG1heGltdW0gb2YgMyBwYXJ0aXRpb25cbiAgICogaW5kZXhlcyB0byBhIHRhYmxlLiBQYXJ0aXRpb24gaW5kZXgga2V5cyBtdXN0IGJlIGEgc3Vic2V0IG9mIHRoZSB0YWJsZSdzXG4gICAqIHBhcnRpdGlvbiBrZXlzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9wYXJ0aXRpb24taW5kZXhlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgYWRkUGFydGl0aW9uSW5kZXgoaW5kZXg6IFBhcnRpdGlvbkluZGV4KSB7XG4gICAgY29uc3QgbnVtUGFydGl0aW9ucyA9IHRoaXMucGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZXMubGVuZ3RoO1xuICAgIGlmIChudW1QYXJ0aXRpb25zID49IDMpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YE1heFBhcnRpdGlvbkluZGV4ZXNFeGNlZWRlZGAsICdNYXhpbXVtIG51bWJlciBvZiBwYXJ0aXRpb24gaW5kZXhlcyBhbGxvd2VkIGlzIDMnLCB0aGlzKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVBhcnRpdGlvbkluZGV4KGluZGV4KTtcblxuICAgIGNvbnN0IGluZGV4TmFtZSA9IGluZGV4LmluZGV4TmFtZSA/PyB0aGlzLmdlbmVyYXRlSW5kZXhOYW1lKGluZGV4LmtleU5hbWVzKTtcbiAgICBjb25zdCBwcm92aWRlciA9IFBhcnRpdGlvbkluZGV4UHJvdmlkZXIuZ2V0T3JDcmVhdGUodGhpcyk7XG5cbiAgICAvLyBUaGUgZ3JhbnRzIGFyZSBpZGVudGljYWwgZm9yIGV2ZXJ5IGluZGV4IG9uIHRoaXMgdGFibGUsIHNvIG9ubHkgYWRkIHRoZW1cbiAgICAvLyBvbmNlLlxuICAgIGlmIChudW1QYXJ0aXRpb25zID09PSAwKSB7XG4gICAgICAvLyBBZGQgc2NvcGVkIHBlcm1pc3Npb25zIGZvciB0aGlzIHRhYmxlJ3MgR2x1ZSByZXNvdXJjZXNcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2F3c2dsdWUuaHRtbFxuICAgICAgY29uc3QgcmVzb3VyY2VzID0gW3RoaXMudGFibGVBcm4sIHRoaXMuZGF0YWJhc2UuZGF0YWJhc2VBcm4sIHRoaXMuZGF0YWJhc2UuY2F0YWxvZy5jYXRhbG9nQXJuXTtcblxuICAgICAgLy8gVGhlIGNhdGFsb2cncyBlbmNyeXB0aW9uIGlzIGZpeGVkIGF0IGNvbnN0cnVjdGlvbiwgc28gdGhlIGVuY3J5cHRpb24ga2V5XG4gICAgICAvLyAoaWYgYW55KSBpcyBrbm93biBoZXJlLiBHcmFudCB0aGUgaGFuZGxlcnMgYWNjZXNzIHRvIGl0LiBOby1vcCB3aGVuIHRoZVxuICAgICAgLy8gY2F0YWxvZyB1c2VzIGFuIEFXUy1tYW5hZ2VkIGtleSBvciBubyBlbmNyeXB0aW9uLlxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5kYXRhYmFzZS5jYXRhbG9nLmVuY3J5cHRpb25LZXk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IGdyYW50cyA9IEtleUdyYW50cy5mcm9tS2V5KGtleSk7XG4gICAgICAgIGdyYW50cy5kZWNyeXB0KHByb3ZpZGVyLm9uRXZlbnRIYW5kbGVyKTtcbiAgICAgICAgZ3JhbnRzLmRlY3J5cHQocHJvdmlkZXIuaXNDb21wbGV0ZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyBCb3RoIGhhbmRsZXJzIGNyZWF0ZSwgZGVsZXRlLCBhbmQgaW5zcGVjdCBpbmRleGVzOiBvbkV2ZW50IGNyZWF0ZXMvZGVsZXRlcyBvblxuICAgICAgLy8gQ3JlYXRlL0RlbGV0ZS9VcGRhdGUsIGFuZCBpc0NvbXBsZXRlIHJlY3JlYXRlcyB0aGUgaW5kZXggd2hpbGUgZHJpdmluZyBhXG4gICAgICAvLyBrZXktY2hhbmdlIHVwZGF0ZSAoZGVsZXRlIC0+IHJlY3JlYXRlIC0+IEFDVElWRSkuIFVwZGF0ZVRhYmxlL0dldFRhYmxlIGFyZVxuICAgICAgLy8gcmVxdWlyZWQgYnkgdGhlIENyZWF0ZVBhcnRpdGlvbkluZGV4L0RlbGV0ZVBhcnRpdGlvbkluZGV4IEFQSXMuXG4gICAgICBjb25zdCBhY3Rpb25zID0gW1xuICAgICAgICAnZ2x1ZTpHZXRQYXJ0aXRpb25JbmRleGVzJyxcbiAgICAgICAgJ2dsdWU6Q3JlYXRlUGFydGl0aW9uSW5kZXgnLFxuICAgICAgICAnZ2x1ZTpEZWxldGVQYXJ0aXRpb25JbmRleCcsXG4gICAgICAgICdnbHVlOkdldFRhYmxlJyxcbiAgICAgICAgJ2dsdWU6VXBkYXRlVGFibGUnLFxuICAgICAgXTtcbiAgICAgIHByb3ZpZGVyLm9uRXZlbnRIYW5kbGVyLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7IGFjdGlvbnMsIHJlc291cmNlcyB9KSk7XG4gICAgICBwcm92aWRlci5pc0NvbXBsZXRlSGFuZGxlci5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoeyBhY3Rpb25zLCByZXNvdXJjZXMgfSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2UgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgYHBhcnRpdGlvbi1pbmRleC0ke2luZGV4TmFtZX1gLCB7XG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkdsdWVQYXJ0aXRpb25JbmRleCcsXG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgRGF0YWJhc2VOYW1lOiB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgVGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgICAgSW5kZXhOYW1lOiBpbmRleE5hbWUsXG4gICAgICAgIEtleXM6IGluZGV4LmtleU5hbWVzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEVuc3VyZSBJQU0gcG9saWNpZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBjdXN0b20gcmVzb3VyY2UgaW52b2tlcyB0aGUgaGFuZGxlcnNcbiAgICBwYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShwcm92aWRlci5vbkV2ZW50SGFuZGxlci5yb2xlISk7XG4gICAgcGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kocHJvdmlkZXIuaXNDb21wbGV0ZUhhbmRsZXIucm9sZSEpO1xuXG4gICAgLy8gRGVwZW5kIG9uIHByZXZpb3VzIHBhcnRpdGlvbiBpbmRleCB0byBhdm9pZCByYWNlIGNvbmRpdGlvblxuICAgIGlmIChudW1QYXJ0aXRpb25zID4gMCkge1xuICAgICAgcGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5wYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlc1tudW1QYXJ0aXRpb25zLTFdKTtcbiAgICB9XG4gICAgdGhpcy5wYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlcy5wdXNoKHBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUluZGV4TmFtZShrZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF4SW5kZXhMZW5ndGggPSA4MDtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleXMpIHx8IGtleXMuc29tZShrID0+IFRva2VuLmlzVW5yZXNvbHZlZChrKSkpIHtcbiAgICAgIC8vIFRoZSBpbmRleCBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUga2V5IG5hbWVzLCBzbyB0b2tlbml6ZWQga2V5cyBsZWF2ZVxuICAgICAgLy8gbm90aGluZyBzdGFibGUgdG8gZ2VuZXJhdGUgZnJvbTogYW55IGF1dG8tZ2VuZXJhdGVkIG5hbWUgd291bGQgaGF2ZSB0b1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBpbmRleCdzIHBvc2l0aW9uIG9uIHRoZSB0YWJsZSwgd2hpY2ggc2hpZnRzIGlmIGluZGV4ZXNcbiAgICAgIC8vIGFyZSBhZGRlZCwgcmVtb3ZlZCwgb3IgcmVvcmRlcmVkIC0gc2lsZW50bHkgcmVwbGFjaW5nIGluZGV4ZXMgdGhhdCBkaWRcbiAgICAgIC8vIG5vdCBhY3R1YWxseSBjaGFuZ2UuIFJlcXVpcmUgYW4gZXhwbGljaXQsIHN0YWJsZSBuYW1lIGluc3RlYWQuXG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgVG9rZW5pemVkSW5kZXhLZXlzUmVxdWlyZU5hbWVgLFxuICAgICAgICAnY2Fubm90IGF1dG8tZ2VuZXJhdGUgYSBzdGFibGUgcGFydGl0aW9uIGluZGV4IG5hbWUgZnJvbSB0b2tlbml6ZWQga2V5IG5hbWVzOyAnICtcbiAgICAgICAgICAnc3BlY2lmeSBgaW5kZXhOYW1lYCBleHBsaWNpdGx5IHdoZW4gaW5kZXgga2V5cyBhcmUgbm90IGtub3duIGF0IHN5bnRoZXNpcyB0aW1lJyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeCA9IGtleXMuam9pbignLScpICsgJy0nO1xuICAgIGNvbnN0IHVuaXF1ZUlkID0gTmFtZXMudW5pcXVlSWQodGhpcyk7XG4gICAgaWYgKHByZWZpeC5sZW5ndGggPCBtYXhJbmRleExlbmd0aCkge1xuICAgICAgLy8gQ29tbW9uIGNhc2U6IHRyaW0gdGhlIHVuaXF1ZUlkIHRhaWwgc28gdGhlIHdob2xlIG5hbWUgZml0cyB1bmRlciB0aGUgY2FwLlxuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IE1hdGgubWF4KDAsIHVuaXF1ZUlkLmxlbmd0aCAtIChtYXhJbmRleExlbmd0aCAtIHByZWZpeC5sZW5ndGgpKTtcbiAgICAgIHJldHVybiBwcmVmaXggKyB1bmlxdWVJZC5zdWJzdHJpbmcoc3RhcnRJbmRleCk7XG4gICAgfVxuICAgIC8vIFRoZSBqb2luZWQga2V5IG5hbWVzIGFsb25lIGV4Y2VlZCB0aGUgYnVkZ2V0IChsb25nIGtleSBuYW1lcyksIHNvIHRyaW1taW5nXG4gICAgLy8gdGhlIHVuaXF1ZUlkIGlzIG5vdCBlbm91Z2guIFRydW5jYXRlIHRoZSBwcmVmaXggYW5kIGFwcGVuZCBhIGhhc2ggb2YgdGhlXG4gICAgLy8gdGFibGUgcGF0aCBwbHVzIHRoZSBmdWxsIGtleSBsaXN0LCBzbyB0d28gZGlmZmVyZW50IChsb25nKSBrZXkgc2V0cyBjYW5ub3RcbiAgICAvLyBjb2xsaWRlIGFmdGVyIHRydW5jYXRpb24uXG4gICAgY29uc3QgaGFzaCA9IG1kNWhhc2godW5pcXVlSWQgKyAnLScgKyBrZXlzLmpvaW4oJy0nKSkuc2xpY2UoMCwgOCk7XG4gICAgcmV0dXJuIHByZWZpeC5zdWJzdHJpbmcoMCwgbWF4SW5kZXhMZW5ndGggLSBoYXNoLmxlbmd0aCAtIDEpICsgJy0nICsgaGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQYXJ0aXRpb25JbmRleChpbmRleDogUGFydGl0aW9uSW5kZXgpIHtcbiAgICBpZiAoaW5kZXguaW5kZXhOYW1lICE9PSB1bmRlZmluZWQgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChpbmRleC5pbmRleE5hbWUpICYmIChpbmRleC5pbmRleE5hbWUubGVuZ3RoIDwgMSB8fCBpbmRleC5pbmRleE5hbWUubGVuZ3RoID4gMjU1KSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW5kZXhOYW1lTGVuZ3RoSW52YWxpZGAsIGBJbmRleCBuYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycywgYnV0IGdvdCAke2luZGV4LmluZGV4TmFtZS5sZW5ndGh9YCwgdGhpcyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5wYXJ0aXRpb25LZXlzIHx8IHRoaXMucGFydGl0aW9uS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YE5vUGFydGl0aW9uS2V5c0ZvckluZGV4YCwgJ1RoZSB0YWJsZSBtdXN0IGhhdmUgcGFydGl0aW9uIGtleXMgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGluZGV4JywgdGhpcyk7XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKGluZGV4LmtleU5hbWVzKSkge1xuICAgICAgY29uc3Qga2V5TmFtZXMgPSB0aGlzLnBhcnRpdGlvbktleXMubWFwKHBrID0+IHBrLm5hbWUpO1xuICAgICAgY29uc3QgY29uY3JldGVLZXlzID0gaW5kZXgua2V5TmFtZXMuZmlsdGVyKGsgPT4gIVRva2VuLmlzVW5yZXNvbHZlZChrKSk7XG4gICAgICBpZiAoY29uY3JldGVLZXlzLmxlbmd0aCA+IDAgJiYgIWNvbmNyZXRlS2V5cy5ldmVyeShrID0+IGtleU5hbWVzLmluY2x1ZGVzKGspKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbmRleEtleXNOb3RQYXJ0aXRpb25LZXlzYCwgYEFsbCBpbmRleCBrZXlzIG11c3QgYWxzbyBiZSBwYXJ0aXRpb24ga2V5cy4gR290ICR7aW5kZXgua2V5TmFtZXN9IGJ1dCBwYXJ0aXRpb24ga2V5IG5hbWVzIGFyZSAke2tleU5hbWVzfWAsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uIGFuZCBtZXJnZSBnZW5lcmF0ZWQgcGFyYW1ldGVycyBpbnRvIHRoaXMucGFyYW1ldGVycy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBbmRHZW5lcmF0ZVBhcnRpdGlvblByb2plY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcnRpdGlvblByb2plY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHBhcnRpdGlvbiBrZXlzIGV4aXN0XG4gICAgaWYgKCF0aGlzLnBhcnRpdGlvbktleXMgfHwgdGhpcy5wYXJ0aXRpb25LZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YE5vUGFydGl0aW9uS2V5c0ZvclByb2plY3Rpb25gLFxuICAgICAgICAnVGhlIHRhYmxlIG11c3QgaGF2ZSBwYXJ0aXRpb24ga2V5cyB0byB1c2UgcGFydGl0aW9uIHByb2plY3Rpb24nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aXRpb25LZXlOYW1lcyA9IHRoaXMucGFydGl0aW9uS2V5cy5tYXAocGsgPT4gcGsubmFtZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGFydGl0aW9uUHJvamVjdGlvbikpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgY29sdW1uIGlzIGEgcGFydGl0aW9uIGtleVxuICAgICAgaWYgKCFwYXJ0aXRpb25LZXlOYW1lcy5pbmNsdWRlcyhjb2x1bW5OYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBQcm9qZWN0aW9uQ29sdW1uTm90UGFydGl0aW9uS2V5YCxcbiAgICAgICAgICBgUGFydGl0aW9uIHByb2plY3Rpb24gY29sdW1uIFwiJHtjb2x1bW5OYW1lfVwiIG11c3QgYmUgYSBwYXJ0aXRpb24ga2V5LiBgICtcbiAgICAgICAgICBgUGFydGl0aW9uIGtleXMgYXJlOiAke3BhcnRpdGlvbktleU5hbWVzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBHZW5lcmF0ZSBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCBnZW5lcmF0ZWRQYXJhbXMgPSBnZW5lcmF0ZVBhcnRpdGlvblByb2plY3Rpb25QYXJhbWV0ZXJzKGNvbHVtbk5hbWUsIGNvbmZpZyk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBjb25mbGljdHMgd2l0aCBtYW51YWxseSBzcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgICAgY29uc3QgY29uZmxpY3RpbmdLZXlzID0gT2JqZWN0LmtleXMoZ2VuZXJhdGVkUGFyYW1zKS5maWx0ZXIoa2V5ID0+IGtleSBpbiB0aGlzLnBhcmFtZXRlcnMpO1xuICAgICAgaWYgKGNvbmZsaWN0aW5nS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFByb2plY3Rpb25QYXJhbWV0ZXJzQ29uZmxpY3RgLFxuICAgICAgICAgIGBQYXJ0aXRpb24gcHJvamVjdGlvbiBwYXJhbWV0ZXJzIGNvbmZsaWN0IHdpdGggbWFudWFsbHkgc3BlY2lmaWVkIHBhcmFtZXRlcnM6ICR7Y29uZmxpY3RpbmdLZXlzLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgICAnVXNlIHRoZSBwYXJ0aXRpb25Qcm9qZWN0aW9uIHByb3BlcnR5IGluc3RlYWQgb2YgbWFudWFsbHkgc3BlY2lmeWluZyBwcm9qZWN0aW9uIHBhcmFtZXRlcnMuJyxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBNZXJnZSBpbnRvIHRoaXMucGFyYW1ldGVyc1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtZXRlcnMsIGdlbmVyYXRlZFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGNvbmZsaWN0IHdpdGggcHJvamVjdGlvbi5lbmFibGVkXG4gICAgaWYgKCdwcm9qZWN0aW9uLmVuYWJsZWQnIGluIHRoaXMucGFyYW1ldGVycykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFByb2plY3Rpb25FbmFibGVkQ29uZmxpY3RgLFxuICAgICAgICAnUGFyYW1ldGVyIFwicHJvamVjdGlvbi5lbmFibGVkXCIgY29uZmxpY3RzIHdpdGggcGFydGl0aW9uUHJvamVjdGlvbiBjb25maWd1cmF0aW9uLiAnICtcbiAgICAgICAgJ1VzZSB0aGUgcGFydGl0aW9uUHJvamVjdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIG1hbnVhbGx5IHNwZWNpZnlpbmcgcHJvamVjdGlvbi5lbmFibGVkLicsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSBwYXJ0aXRpb24gcHJvamVjdGlvbiBnbG9iYWxseVxuICAgIHRoaXMucGFyYW1ldGVyc1sncHJvamVjdGlvbi5lbmFibGVkJ10gPSAndHJ1ZSc7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIGlkZW50aXR5IGN1c3RvbSBwZXJtaXNzaW9ucyBvbiB0aGlzIHRhYmxlLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgbG93LWxldmVsIGVzY2FwZSBoYXRjaDogdGhlIGBhY3Rpb25zYCBhcmUgYXBwbGllZCB2ZXJiYXRpbSxcbiAgICogc2NvcGVkIHRvIHRoaXMgdGFibGUncyBBUk4uIFByZWZlciB0aGUgaW50ZW50LWJhc2VkIGBncmFudFJlYWRgIC9cbiAgICogYGdyYW50V3JpdGVgIC8gYGdyYW50UmVhZFdyaXRlYCBtZXRob2RzLCB3aGljaCBncmFudCBhIGN1cmF0ZWQgc2V0IG9mXG4gICAqIGFjdGlvbnMgYW5kIGFsc28gY292ZXIgdGhlIHVuZGVybHlpbmcgUzMgZGF0YS4gT25seSBwYXNzIHRoZSBzcGVjaWZpY1xuICAgKiBhY3Rpb25zIHRoZSBncmFudGVlIG5lZWRzIC0gYXZvaWQgc2VydmljZSB3aWxkY2FyZHMgc3VjaCBhcyBgZ2x1ZToqYC5cbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIHRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgdGhlIHNldCBvZiBHbHVlIGFjdGlvbnMgdG8gYWxsb3cgKGZvciBleGFtcGxlIGBnbHVlOkdldFRhYmxlYClcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgYWN0aW9uczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLnRhYmxlQXJuXSxcbiAgICAgIGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIGlkZW50aXR5IGN1c3RvbSBwZXJtaXNzaW9ucyBvbiB0aGlzIHRhYmxlIEFORCBpdHMgcGFyZW50XG4gICAqIGNhdGFsb2cgYW5kIGRhdGFiYXNlLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgbG93LWxldmVsIGVzY2FwZSBoYXRjaCBmb3IgYWN0aW9ucyAoc3VjaCBhcyBjZXJ0YWluIExha2VcbiAgICogRm9ybWF0aW9uIG9yIGNyYXdsZXIgb3BlcmF0aW9ucykgdGhhdCBtdXN0IGJlIGF1dGhvcml6ZWQgYWdhaW5zdCB0aGVcbiAgICogY2F0YWxvZyBhbmQgZGF0YWJhc2UgaW4gYWRkaXRpb24gdG8gdGhlIHRhYmxlLiBUaGUgYGFjdGlvbnNgIGFyZSBhcHBsaWVkXG4gICAqIHZlcmJhdGltIHRvIGFsbCB0aHJlZSBBUk5zICh0YWJsZSwgY2F0YWxvZywgZGF0YWJhc2UpLCBzbyBzY29wZSB0aGVtXG4gICAqIHRpZ2h0bHk6IHBhc3Mgb25seSB0aGUgc3BlY2lmaWMgYWN0aW9ucyB0aGUgZ3JhbnRlZSBuZWVkcyBhbmQgYXZvaWRcbiAgICogc2VydmljZSB3aWxkY2FyZHMgc3VjaCBhcyBgZ2x1ZToqYCwgd2hpY2ggd291bGQgZ3JhbnQgYnJvYWQgYWNjZXNzIGFjcm9zc1xuICAgKiBldmVyeSByZXNvdXJjZSBpbiB0aGUgY2F0YWxvZyBhbmQgZGF0YWJhc2UuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSB0aGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIHRoZSBzZXQgb2YgR2x1ZSBhY3Rpb25zIHRvIGFsbG93IChmb3IgZXhhbXBsZSBgZ2x1ZTpHZXRUYWJsZWApXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRUb1VuZGVybHlpbmdSZXNvdXJjZXMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIGFjdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbXG4gICAgICAgIHRoaXMudGFibGVBcm4sXG4gICAgICAgIHRoaXMuZGF0YWJhc2UuY2F0YWxvZy5jYXRhbG9nQXJuLFxuICAgICAgICB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlQXJuLFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHN0YWNrLXNpbmdsZXRvbiBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIgdGhhdCBtYW5hZ2VzIEdsdWUgcGFydGl0aW9uIGluZGV4ZXMuXG4gKlxuICogQWxsIHBhcnRpdGlvbi1pbmRleGVkIHRhYmxlcyBpbiBhIHN0YWNrIHNoYXJlIGEgc2luZ2xlIHByb3ZpZGVyIChhbmQgaXRzIHR3b1xuICogTGFtYmRhIGhhbmRsZXJzKSB0byBhdm9pZCBwcm92aXNpb25pbmcgYSBwcm92aWRlciBmcmFtZXdvcmsgcGVyIHRhYmxlLiBUaGVcbiAqIHByb3ZpZGVyIGFuZCBoYW5kbGVycyBhcmUgZ3JvdXBlZCB1bmRlciB0aGlzIHNpbmdsZSBjb25zdHJ1Y3Qgc28gb25seSBvbmVcbiAqIGlkIGlzIHBsYWNlZCBhdCBzdGFjayBzY29wZS5cbiAqL1xuY2xhc3MgUGFydGl0aW9uSW5kZXhQcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFjay1zaW5nbGV0b24gcHJvdmlkZXIsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXMgbm90IHlldCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0T3JDcmVhdGUoc2NvcGU6IENvbnN0cnVjdCk6IFBhcnRpdGlvbkluZGV4UHJvdmlkZXIge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIC8vIEEgZml4ZWQsIG5hbWVzcGFjZWQgaWQgbWFrZXMgdGhpcyBhIHN0YWNrIHNpbmdsZXRvbjogZXZlcnkgY2FsbCB3aXRoaW4gdGhlXG4gICAgLy8gc2FtZSBzdGFjayByZXNvbHZlcyB0byB0aGUgc2FtZSBjaGlsZCB2aWEgYHRyeUZpbmRDaGlsZGAuXG4gICAgY29uc3QgaWQgPSAnQGF3cy1jZGsvYXdzLWdsdWUtYWxwaGEuUGFydGl0aW9uSW5kZXhQcm92aWRlcic7XG4gICAgcmV0dXJuIChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgUGFydGl0aW9uSW5kZXhQcm92aWRlcikgPz8gbmV3IFBhcnRpdGlvbkluZGV4UHJvdmlkZXIoc3RhY2ssIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBvbkV2ZW50SGFuZGxlcjogbGFtYmRhLkZ1bmN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNDb21wbGV0ZUhhbmRsZXI6IGxhbWJkYS5GdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlcjogY3IuUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBUaGUgaGFuZGxlciBzb3VyY2UgbGl2ZXMgaW4gYEBhd3MtY2RrL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVyc2AgYW5kIGlzIGNvZGVcbiAgICAvLyBnZW5lcmF0ZWQgKyBhaXJsaWZ0ZWQgaW50byB0aGlzIHBhY2thZ2UgYXQgYnVpbGQgdGltZSAoc2VlXG4gICAgLy8gc2NyaXB0cy9haXJsaWZ0LWN1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy5zaCksIGZvbGxvd2luZyB0aGUgcGF0dGVybiB1c2VkIGJ5IHRoZVxuICAgIC8vIG90aGVyIGFscGhhIG1vZHVsZXMgKGF3cy1hbXBsaWZ5LWFscGhhLCBhd3MtcmVkc2hpZnQtYWxwaGEpLiBUaGUgQGF3cy1zZGsvY2xpZW50LWdsdWVcbiAgICAvLyBtb2R1bGUgaXMgcHJvdmlkZWQgYnkgdGhlIExhbWJkYSBydW50aW1lIHJhdGhlciB0aGFuIGJ1bmRsZWQgaW50byB0aGUgYXNzZXQuXG4gICAgdGhpcy5vbkV2ZW50SGFuZGxlciA9IG5ldyBQYXJ0aXRpb25JbmRleE9uRXZlbnRGdW5jdGlvbih0aGlzLCAnSGFuZGxlcicsIHtcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgfSk7XG4gICAgdGhpcy5pc0NvbXBsZXRlSGFuZGxlciA9IG5ldyBQYXJ0aXRpb25JbmRleElzQ29tcGxldGVGdW5jdGlvbih0aGlzLCAnSXNDb21wbGV0ZScsIHtcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb3ZpZGVyID0gbmV3IGNyLlByb3ZpZGVyKHRoaXMsICdQcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLm9uRXZlbnRIYW5kbGVyLFxuICAgICAgaXNDb21wbGV0ZUhhbmRsZXI6IHRoaXMuaXNDb21wbGV0ZUhhbmRsZXIsXG4gICAgICBxdWVyeUludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgIHRvdGFsVGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgdG9rZW4gdG8gd2lyZSBpbnRvIHBhcnRpdGlvbiBpbmRleCBjdXN0b20gcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXJ2aWNlVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlci5zZXJ2aWNlVG9rZW47XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoY29sdW1uczogQ29sdW1uW10sIHBhcnRpdGlvbktleXM/OiBDb2x1bW5bXSk6IHZvaWQge1xuICBpZiAoY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE5vQ29sdW1uc1NwZWNpZmllZGAsICd5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBjb2x1bW4gZm9yIHRoZSB0YWJsZScpO1xuICB9XG4gIC8vIENoZWNrIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gYW5kIG5vIGR1cGxpY2F0ZWQgY29sdW1uIG5hbWVzIG9yIHBhcnRpdGlvbiBrZXlzLlxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAoY29sdW1ucy5jb25jYXQocGFydGl0aW9uS2V5cyB8fCBbXSkpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBpZiAobmFtZXMuaGFzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBEdXBsaWNhdGVDb2x1bW5OYW1lYCwgYGNvbHVtbiBuYW1lcyBhbmQgcGFydGl0aW9uIGtleXMgbXVzdCBiZSB1bmlxdWUsIGJ1dCBcXCcke2NvbHVtbi5uYW1lfVxcJyBpcyBkdXBsaWNhdGVkYCk7XG4gICAgfVxuICAgIG5hbWVzLmFkZChjb2x1bW4ubmFtZSk7XG4gIH0pO1xufVxuIl19
|
|
440
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRhYmxlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx5REFBMkM7QUFDM0MsaURBQWdEO0FBR2hELDJDQUEwSjtBQUMxSiw0RUFBcUU7QUFDckUsaUVBQW1EO0FBQ25ELDJDQUF1QztBQUd2QyxpRUFBeUc7QUFHekcsMklBQXFLO0FBcUxySzs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxlQUFROztJQUN2QyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQWdCO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLFNBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQztRQUUvSCxPQUFPLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzlDLFFBQVE7WUFDUixTQUFTO1NBQ1YsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7Ozs7Ozs7Ozs7UUFDcEYsTUFBTSxNQUFPLFNBQVEsZUFBUTtZQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUI7SUFPRDs7T0FFRztJQUNhLFFBQVEsQ0FBWTtJQUVwQzs7T0FFRztJQUNhLFVBQVUs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RSxDQUFDO1lBQzNCLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEscUJBQXFCLEVBQUUseURBQXlELE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUM7UUFDdEosQ0FBQztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2ZuVGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXlHcmFudHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IEFybkZvcm1hdCwgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uLCBGbiwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGxpdCwgbWQ1aGFzaCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0ICogYXMgY3IgZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgRGF0YUZvcm1hdCB9IGZyb20gJy4vZGF0YS1mb3JtYXQnO1xuaW1wb3J0IHR5cGUgeyBJRGF0YWJhc2UgfSBmcm9tICcuL2RhdGFiYXNlJztcbmltcG9ydCB7IGdlbmVyYXRlUGFydGl0aW9uUHJvamVjdGlvblBhcmFtZXRlcnMsIHR5cGUgUGFydGl0aW9uUHJvamVjdGlvbiB9IGZyb20gJy4vcGFydGl0aW9uLXByb2plY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBDb2x1bW4gfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFN0b3JhZ2VQYXJhbWV0ZXIgfSBmcm9tICcuL3N0b3JhZ2UtcGFyYW1ldGVyJztcbmltcG9ydCB7IFBhcnRpdGlvbkluZGV4SXNDb21wbGV0ZUZ1bmN0aW9uLCBQYXJ0aXRpb25JbmRleE9uRXZlbnRGdW5jdGlvbiB9IGZyb20gJy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9kaXN0L2F3cy1nbHVlLWFscGhhL3BhcnRpdGlvbi1pbmRleC1wcm92aWRlci5nZW5lcmF0ZWQnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBQYXJ0aXRpb24gSW5kZXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGl0aW9uSW5kZXgge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBhcnRpdGlvbiBpbmRleC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHlvdS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnRpdGlvbiBrZXkgbmFtZXMgdGhhdCBjb21wcmlzZSB0aGUgcGFydGl0aW9uXG4gICAqIGluZGV4LiBUaGUgbmFtZXMgbXVzdCBjb3JyZXNwb25kIHRvIGEgbmFtZSBpbiB0aGVcbiAgICogdGFibGUncyBwYXJ0aXRpb24ga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGtleU5hbWVzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGdlbmVyYXRlZCBieSBDREsuXG4gICAqL1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWJhc2UgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U6IElEYXRhYmFzZTtcblxuICAvKipcbiAgICogQ29sdW1ucyBvZiB0aGUgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBjb2x1bW5zOiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGNvbHVtbnMgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0YWJsZSBpcyBub3QgcGFydGl0aW9uZWRcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbktleXM/OiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGluZGV4ZXMgb24gdGhlIHRhYmxlLiBBIG1heGltdW0gb2YgMyBpbmRleGVzXG4gICAqIGFyZSBhbGxvd2VkIG9uIGEgdGFibGUuIEtleXMgaW4gdGhlIGluZGV4IG11c3QgYmUgcGFydFxuICAgKiBvZiB0aGUgdGFibGUncyBwYXJ0aXRpb24ga2V5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGFibGUgaGFzIG5vIHBhcnRpdGlvbiBpbmRleGVzXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb25JbmRleGVzPzogUGFydGl0aW9uSW5kZXhbXTtcblxuICAvKipcbiAgICogU3RvcmFnZSB0eXBlIG9mIHRoZSB0YWJsZSdzIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBkYXRhRm9ybWF0OiBEYXRhRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUncyBkYXRhIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHJlc3NlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSBkYXRhIGlzIHN0b3JlZCBpbiBzdWJkaXJlY3Rvcmllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlZEFzU3ViRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnRpdGlvbiBmaWx0ZXJpbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvZ2x1ZS1iZXN0LXByYWN0aWNlcy5odG1sI2dsdWUtYmVzdC1wcmFjdGljZXMtcGFydGl0aW9uLWluZGV4XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHBhcmFtZXRlciBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUGFydGl0aW9uRmlsdGVyaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHVzZXItc3VwcGxpZWQgcHJvcGVydGllcyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwaHlzaWNhbCBzdG9yYWdlIG9mIHRoaXMgdGFibGUuIFRoZXNlIHByb3BlcnRpZXMgaGVscCBkZXNjcmliZSB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIHRoYXQgaXMgc3RvcmVkIHdpdGhpbiB0aGUgY3Jhd2xlZCBkYXRhIHNvdXJjZXMuXG4gICAqXG4gICAqIFRoZSBrZXkvdmFsdWUgcGFpcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBzdWJtaXR0ZWQgYXJlIG5vdCBsaW1pdGVkLCBob3dldmVyIHRoZWlyIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGd1YXJhbnRlZWQuXG4gICAqXG4gICAqIFNvbWUga2V5cyB3aWxsIGJlIGF1dG8tcG9wdWxhdGVkIGJ5IGdsdWUgY3Jhd2xlcnMsIGhvd2V2ZXIsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlbSBieSBzcGVjaWZ5aW5nIHRoZSBrZXkgYW5kIHZhbHVlIGluIHRoaXMgcHJvcGVydHkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL3RhYmxlLXByb3BlcnRpZXMtY3Jhd2xlci5odG1sXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX0NSRUFURV9FWFRFUk5BTF9UQUJMRS5odG1sI3JfQ1JFQVRFX0VYVEVSTkFMX1RBQkxFLXBhcmFtZXRlcnMgLSB1bmRlciBfXCJUQUJMRSBQUk9QRVJUSUVTXCJfXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIGRlY2xhcmUgY29uc3QgZ2x1ZURhdGFiYXNlOiBnbHVlLklEYXRhYmFzZTtcbiAgICogICAgY29uc3QgdGFibGUgPSBuZXcgZ2x1ZS5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAqICAgICAgc3RvcmFnZVBhcmFtZXRlcnM6IFtcbiAgICogICAgICAgICAgZ2x1ZS5TdG9yYWdlUGFyYW1ldGVyLnNraXBIZWFkZXJMaW5lQ291bnQoMSksXG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jb21wcmVzc2lvblR5cGUoZ2x1ZS5Db21wcmVzc2lvblR5cGUuR1pJUCksXG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jdXN0b20oJ2ZvbycsICdiYXInKSwgLy8gV2lsbCBoYXZlIG5vIGVmZmVjdFxuICAgKiAgICAgICAgICBnbHVlLlN0b3JhZ2VQYXJhbWV0ZXIuY3VzdG9tKCdzZXBhcmF0b3JDaGFyJywgJywnKSwgLy8gV2lsbCBkZXNjcmliZSB0aGUgc2VwYXJhdG9yIGNoYXIgdXNlZCBpbiB0aGUgZGF0YVxuICAgKiAgICAgICAgICBnbHVlLlN0b3JhZ2VQYXJhbWV0ZXIuY3VzdG9tKGdsdWUuU3RvcmFnZVBhcmFtZXRlcnMuV1JJVEVfUEFSQUxMRUwsICdvZmYnKSxcbiAgICogICAgICBdLFxuICAgKiAgICAgIC8vIC4uLlxuICAgKiAgICAgIGRhdGFiYXNlOiBnbHVlRGF0YWJhc2UsXG4gICAqICAgICAgY29sdW1uczogW3tcbiAgICogICAgICAgICAgbmFtZTogJ2NvbDEnLFxuICAgKiAgICAgICAgICB0eXBlOiBnbHVlLlNjaGVtYS5TVFJJTkcsXG4gICAqICAgICAgfV0sXG4gICAqICAgICAgZGF0YUZvcm1hdDogZ2x1ZS5EYXRhRm9ybWF0LkNTVixcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHBhcmFtZXRlciBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZVBhcmFtZXRlcnM/OiBTdG9yYWdlUGFyYW1ldGVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkvdmFsdWUgcGFpcnMgZGVmaW5lIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZS5cbiAgICogVGhlIGtleS92YWx1ZSBwYWlycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHN1Ym1pdHRlZCBhcmUgbm90IGxpbWl0ZWQsIGhvd2V2ZXIgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBub3QgZ3VhcmFudGVlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1nbHVlLXRhYmxlLXRhYmxlaW5wdXQuaHRtbCNjZm4tZ2x1ZS10YWJsZS10YWJsZWlucHV0LXBhcmFtZXRlcnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgcGFyYW1ldGVyIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIHRhYmxlIGlzIGVuY3J5cHRlZC5cbiAgICpcbiAgICogVGhpcyBzZXRzIHRoZSBgaGFzX2VuY3J5cHRlZF9kYXRhYCB0YWJsZSBwYXJhbWV0ZXIuIEF0aGVuYSByZWFkcyBpdCB3aGVuXG4gICAqIHF1ZXJ5aW5nIGNsaWVudC1zaWRlIChDU0UtS01TKSBlbmNyeXB0ZWQgZGF0YXNldHM7IGZvciBzZXJ2ZXItc2lkZVxuICAgKiBlbmNyeXB0ZWQgKFNTRS1TMyAvIFNTRS1LTVMpIG9yIHVuZW5jcnlwdGVkIGRhdGEgaXQgaGFzIG5vIGVmZmVjdCwgc2luY2VcbiAgICogQW1hem9uIFMzIGRlY3J5cHRzIHNlcnZlci1zaWRlIGVuY3J5cHRlZCBvYmplY3RzIHRyYW5zcGFyZW50bHkuXG4gICAqXG4gICAqIERvIG5vdCBhbHNvIHNldCBgaGFzX2VuY3J5cHRlZF9kYXRhYCB0aHJvdWdoIGBwYXJhbWV0ZXJzYCAtIHVzZSB0aGlzXG4gICAqIHByb3BlcnR5IGluc3RlYWQuIEEgY29uZmxpY3RpbmcgdmFsdWUgaW4gYHBhcmFtZXRlcnNgIGlzIHJlamVjdGVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2NyZWF0aW5nLXRhYmxlcy1iYXNlZC1vbi1lbmNyeXB0ZWQtZGF0YXNldHMtaW4tczMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBmb3IgdGhpcyB0YWJsZS5cbiAgICpcbiAgICogUGFydGl0aW9uIHByb2plY3Rpb24gYWxsb3dzIEF0aGVuYSB0byBhdXRvbWF0aWNhbGx5IGFkZCBuZXcgcGFydGl0aW9uc1xuICAgKiB3aXRob3V0IHJlcXVpcmluZyBgQUxURVIgVEFCTEUgQUREIFBBUlRJVElPTmAgc3RhdGVtZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9wYXJ0aXRpb24tcHJvamVjdGlvbi5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcGFydGl0aW9uIHByb2plY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvblByb2plY3Rpb24/OiBQYXJ0aXRpb25Qcm9qZWN0aW9uO1xufVxuXG4vKipcbiAqIEEgR2x1ZSB0YWJsZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhYmxlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRhYmxlIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgdGFibGVBcm46IHN0cmluZyk6IElUYWJsZSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gRm4uc2VsZWN0KDEsIEZuLnNwbGl0KCcvJywgU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKHRhYmxlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lISkpO1xuXG4gICAgcmV0dXJuIFRhYmxlQmFzZS5mcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgdGFibGVBcm4sXG4gICAgICB0YWJsZU5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRhYmxlIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgaWQuXG4gICAqIEBwYXJhbSBhdHRycyBJbXBvcnQgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBUYWJsZUF0dHJpYnV0ZXMpOiBJVGFibGUge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRhYmxlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB0YWJsZUFybiA9IGF0dHJzLnRhYmxlQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlTmFtZSA9IGF0dHJzLnRhYmxlTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IHRhYmxlUmVzb3VyY2U6IENmblRhYmxlO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcGFydGl0aW9uSW5kZXhlcz86IFBhcnRpdGlvbkluZGV4W107XG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHRoaXMgdGFibGUgYmVsb25ncyB0by5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZTogSURhdGFiYXNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUncyBkYXRhIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXByZXNzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBvZiB0aGlzIHRhYmxlJ3MgZGF0YSBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhRm9ybWF0OiBEYXRhRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBUaGlzIHRhYmxlJ3MgY29sdW1ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zOiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogVGhpcyB0YWJsZSdzIHBhcnRpdGlvbiBrZXlzIGlmIHRoZSB0YWJsZSBpcyBwYXJ0aXRpb25lZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXJ0aXRpb25LZXlzPzogQ29sdW1uW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZXMnIHN0b3JhZ2UgZGVzY3JpcHRvciBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2VQYXJhbWV0ZXJzPzogU3RvcmFnZVBhcmFtZXRlcltdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHRhYmxlJ3MgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBpZiBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvblByb2plY3Rpb24/OiBQYXJ0aXRpb25Qcm9qZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGVzJyBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZ2x1ZS10YWJsZS10YWJsZWlucHV0Lmh0bWwjY2ZuLWdsdWUtdGFibGUtdGFibGVpbnB1dC1wYXJhbWV0ZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIHRhYmxlIGlzIGVuY3J5cHRlZC4gRW1pdHRlZCBhcyB0aGVcbiAgICogYGhhc19lbmNyeXB0ZWRfZGF0YWAgdGFibGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc0VuY3J5cHRlZERhdGE6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhcnRpdGlvbiBpbmRleGVzIG11c3QgYmUgY3JlYXRlZCBvbmUgYXQgYSB0aW1lLiBUbyBhdm9pZFxuICAgKiByYWNlIGNvbmRpdGlvbnMsIHdlIHN0b3JlIHRoZSByZXNvdXJjZSBhbmQgYWRkIGRlcGVuZGVuY2llc1xuICAgKiBlYWNoIHRpbWUgYSBuZXcgcGFydGl0aW9uIGluZGV4IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBwcml2YXRlIHBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2VzOiBDdXN0b21SZXNvdXJjZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFRhYmxlQmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnRhYmxlTmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHt9KS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YWJhc2UgPSBwcm9wcy5kYXRhYmFzZTtcbiAgICB0aGlzLmRhdGFGb3JtYXQgPSBwcm9wcy5kYXRhRm9ybWF0O1xuXG4gICAgdmFsaWRhdGVTY2hlbWEocHJvcHMuY29sdW1ucywgcHJvcHMucGFydGl0aW9uS2V5cyk7XG4gICAgdGhpcy5jb2x1bW5zID0gcHJvcHMuY29sdW1ucztcbiAgICB0aGlzLnBhcnRpdGlvbktleXMgPSBwcm9wcy5wYXJ0aXRpb25LZXlzO1xuICAgIHRoaXMuc3RvcmFnZVBhcmFtZXRlcnMgPSBwcm9wcy5zdG9yYWdlUGFyYW1ldGVycztcbiAgICB0aGlzLnBhcnRpdGlvblByb2plY3Rpb24gPSBwcm9wcy5wYXJ0aXRpb25Qcm9qZWN0aW9uO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IHByb3BzLnBhcmFtZXRlcnMgPz8ge307XG5cbiAgICB0aGlzLmhhc0VuY3J5cHRlZERhdGEgPSBwcm9wcy5oYXNFbmNyeXB0ZWREYXRhID8/IHRydWU7XG4gICAgdGhpcy5yZWNvbmNpbGVIYXNFbmNyeXB0ZWREYXRhKCk7XG5cbiAgICB0aGlzLmNvbXByZXNzZWQgPSBwcm9wcy5jb21wcmVzc2VkID8/IGZhbHNlO1xuXG4gICAgdGhpcy52YWxpZGF0ZUFuZEdlbmVyYXRlUGFydGl0aW9uUHJvamVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgcHVibGljIGFic3RyYWN0IGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBncmFudFJlYWRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogQWRkIGEgcGFydGl0aW9uIGluZGV4IHRvIHRoZSB0YWJsZS4gWW91IGNhbiBoYXZlIGEgbWF4aW11bSBvZiAzIHBhcnRpdGlvblxuICAgKiBpbmRleGVzIHRvIGEgdGFibGUuIFBhcnRpdGlvbiBpbmRleCBrZXlzIG11c3QgYmUgYSBzdWJzZXQgb2YgdGhlIHRhYmxlJ3NcbiAgICogcGFydGl0aW9uIGtleXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL3BhcnRpdGlvbi1pbmRleGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBhZGRQYXJ0aXRpb25JbmRleChpbmRleDogUGFydGl0aW9uSW5kZXgpIHtcbiAgICBjb25zdCBudW1QYXJ0aXRpb25zID0gdGhpcy5wYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlcy5sZW5ndGg7XG4gICAgaWYgKG51bVBhcnRpdGlvbnMgPj0gMykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgTWF4UGFydGl0aW9uSW5kZXhlc0V4Y2VlZGVkYCwgJ01heGltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbiBpbmRleGVzIGFsbG93ZWQgaXMgMycsIHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlUGFydGl0aW9uSW5kZXgoaW5kZXgpO1xuXG4gICAgY29uc3QgaW5kZXhOYW1lID0gaW5kZXguaW5kZXhOYW1lID8/IHRoaXMuZ2VuZXJhdGVJbmRleE5hbWUoaW5kZXgua2V5TmFtZXMpO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gUGFydGl0aW9uSW5kZXhQcm92aWRlci5nZXRPckNyZWF0ZSh0aGlzKTtcblxuICAgIC8vIFRoZSBncmFudHMgYXJlIGlkZW50aWNhbCBmb3IgZXZlcnkgaW5kZXggb24gdGhpcyB0YWJsZSwgc28gb25seSBhZGQgdGhlbVxuICAgIC8vIG9uY2UuXG4gICAgaWYgKG51bVBhcnRpdGlvbnMgPT09IDApIHtcbiAgICAgIC8vIEFkZCBzY29wZWQgcGVybWlzc2lvbnMgZm9yIHRoaXMgdGFibGUncyBHbHVlIHJlc291cmNlc1xuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYXdzZ2x1ZS5odG1sXG4gICAgICBjb25zdCByZXNvdXJjZXMgPSBbdGhpcy50YWJsZUFybiwgdGhpcy5kYXRhYmFzZS5kYXRhYmFzZUFybiwgdGhpcy5kYXRhYmFzZS5jYXRhbG9nLmNhdGFsb2dBcm5dO1xuXG4gICAgICAvLyBUaGUgY2F0YWxvZydzIGVuY3J5cHRpb24gaXMgZml4ZWQgYXQgY29uc3RydWN0aW9uLCBzbyB0aGUgZW5jcnlwdGlvbiBrZXlcbiAgICAgIC8vIChpZiBhbnkpIGlzIGtub3duIGhlcmUuIEdyYW50IHRoZSBoYW5kbGVycyBhY2Nlc3MgdG8gaXQuIE5vLW9wIHdoZW4gdGhlXG4gICAgICAvLyBjYXRhbG9nIHVzZXMgYW4gQVdTLW1hbmFnZWQga2V5IG9yIG5vIGVuY3J5cHRpb24uXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmRhdGFiYXNlLmNhdGFsb2cuZW5jcnlwdGlvbktleTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgZ3JhbnRzID0gS2V5R3JhbnRzLmZyb21LZXkoa2V5KTtcbiAgICAgICAgZ3JhbnRzLmRlY3J5cHQocHJvdmlkZXIub25FdmVudEhhbmRsZXIpO1xuICAgICAgICBncmFudHMuZGVjcnlwdChwcm92aWRlci5pc0NvbXBsZXRlSGFuZGxlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIEJvdGggaGFuZGxlcnMgY3JlYXRlLCBkZWxldGUsIGFuZCBpbnNwZWN0IGluZGV4ZXM6IG9uRXZlbnQgY3JlYXRlcy9kZWxldGVzIG9uXG4gICAgICAvLyBDcmVhdGUvRGVsZXRlL1VwZGF0ZSwgYW5kIGlzQ29tcGxldGUgcmVjcmVhdGVzIHRoZSBpbmRleCB3aGlsZSBkcml2aW5nIGFcbiAgICAgIC8vIGtleS1jaGFuZ2UgdXBkYXRlIChkZWxldGUgLT4gcmVjcmVhdGUgLT4gQUNUSVZFKS4gVXBkYXRlVGFibGUvR2V0VGFibGUgYXJlXG4gICAgICAvLyByZXF1aXJlZCBieSB0aGUgQ3JlYXRlUGFydGl0aW9uSW5kZXgvRGVsZXRlUGFydGl0aW9uSW5kZXggQVBJcy5cbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBbXG4gICAgICAgICdnbHVlOkdldFBhcnRpdGlvbkluZGV4ZXMnLFxuICAgICAgICAnZ2x1ZTpDcmVhdGVQYXJ0aXRpb25JbmRleCcsXG4gICAgICAgICdnbHVlOkRlbGV0ZVBhcnRpdGlvbkluZGV4JyxcbiAgICAgICAgJ2dsdWU6R2V0VGFibGUnLFxuICAgICAgICAnZ2x1ZTpVcGRhdGVUYWJsZScsXG4gICAgICBdO1xuICAgICAgcHJvdmlkZXIub25FdmVudEhhbmRsZXIuYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHsgYWN0aW9ucywgcmVzb3VyY2VzIH0pKTtcbiAgICAgIHByb3ZpZGVyLmlzQ29tcGxldGVIYW5kbGVyLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7IGFjdGlvbnMsIHJlc291cmNlcyB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBgcGFydGl0aW9uLWluZGV4LSR7aW5kZXhOYW1lfWAsIHtcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6R2x1ZVBhcnRpdGlvbkluZGV4JyxcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBEYXRhYmFzZU5hbWU6IHRoaXMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lLFxuICAgICAgICBUYWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICBJbmRleE5hbWU6IGluZGV4TmFtZSxcbiAgICAgICAgS2V5czogaW5kZXgua2V5TmFtZXMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIElBTSBwb2xpY2llcyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIGN1c3RvbSByZXNvdXJjZSBpbnZva2VzIHRoZSBoYW5kbGVyc1xuICAgIHBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHByb3ZpZGVyLm9uRXZlbnRIYW5kbGVyLnJvbGUhKTtcbiAgICBwYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShwcm92aWRlci5pc0NvbXBsZXRlSGFuZGxlci5yb2xlISk7XG5cbiAgICAvLyBEZXBlbmQgb24gcHJldmlvdXMgcGFydGl0aW9uIGluZGV4IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uXG4gICAgaWYgKG51bVBhcnRpdGlvbnMgPiAwKSB7XG4gICAgICBwYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2VzW251bVBhcnRpdGlvbnMtMV0pO1xuICAgIH1cbiAgICB0aGlzLnBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2VzLnB1c2gocGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlSW5kZXhOYW1lKGtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXhJbmRleExlbmd0aCA9IDgwO1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoa2V5cykgfHwga2V5cy5zb21lKGsgPT4gVG9rZW4uaXNVbnJlc29sdmVkKGspKSkge1xuICAgICAgLy8gVGhlIGluZGV4IG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBrZXkgbmFtZXMsIHNvIHRva2VuaXplZCBrZXlzIGxlYXZlXG4gICAgICAvLyBub3RoaW5nIHN0YWJsZSB0byBnZW5lcmF0ZSBmcm9tOiBhbnkgYXV0by1nZW5lcmF0ZWQgbmFtZSB3b3VsZCBoYXZlIHRvXG4gICAgICAvLyBmYWxsIGJhY2sgdG8gdGhlIGluZGV4J3MgcG9zaXRpb24gb24gdGhlIHRhYmxlLCB3aGljaCBzaGlmdHMgaWYgaW5kZXhlc1xuICAgICAgLy8gYXJlIGFkZGVkLCByZW1vdmVkLCBvciByZW9yZGVyZWQgLSBzaWxlbnRseSByZXBsYWNpbmcgaW5kZXhlcyB0aGF0IGRpZFxuICAgICAgLy8gbm90IGFjdHVhbGx5IGNoYW5nZS4gUmVxdWlyZSBhbiBleHBsaWNpdCwgc3RhYmxlIG5hbWUgaW5zdGVhZC5cbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBUb2tlbml6ZWRJbmRleEtleXNSZXF1aXJlTmFtZWAsXG4gICAgICAgICdjYW5ub3QgYXV0by1nZW5lcmF0ZSBhIHN0YWJsZSBwYXJ0aXRpb24gaW5kZXggbmFtZSBmcm9tIHRva2VuaXplZCBrZXkgbmFtZXM7ICcgK1xuICAgICAgICAgICdzcGVjaWZ5IGBpbmRleE5hbWVgIGV4cGxpY2l0bHkgd2hlbiBpbmRleCBrZXlzIGFyZSBub3Qga25vd24gYXQgc3ludGhlc2lzIHRpbWUnLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZml4ID0ga2V5cy5qb2luKCctJykgKyAnLSc7XG4gICAgY29uc3QgdW5pcXVlSWQgPSBOYW1lcy51bmlxdWVJZCh0aGlzKTtcbiAgICBpZiAocHJlZml4Lmxlbmd0aCA8IG1heEluZGV4TGVuZ3RoKSB7XG4gICAgICAvLyBDb21tb24gY2FzZTogdHJpbSB0aGUgdW5pcXVlSWQgdGFpbCBzbyB0aGUgd2hvbGUgbmFtZSBmaXRzIHVuZGVyIHRoZSBjYXAuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gTWF0aC5tYXgoMCwgdW5pcXVlSWQubGVuZ3RoIC0gKG1heEluZGV4TGVuZ3RoIC0gcHJlZml4Lmxlbmd0aCkpO1xuICAgICAgcmV0dXJuIHByZWZpeCArIHVuaXF1ZUlkLnN1YnN0cmluZyhzdGFydEluZGV4KTtcbiAgICB9XG4gICAgLy8gVGhlIGpvaW5lZCBrZXkgbmFtZXMgYWxvbmUgZXhjZWVkIHRoZSBidWRnZXQgKGxvbmcga2V5IG5hbWVzKSwgc28gdHJpbW1pbmdcbiAgICAvLyB0aGUgdW5pcXVlSWQgaXMgbm90IGVub3VnaC4gVHJ1bmNhdGUgdGhlIHByZWZpeCBhbmQgYXBwZW5kIGEgaGFzaCBvZiB0aGVcbiAgICAvLyB0YWJsZSBwYXRoIHBsdXMgdGhlIGZ1bGwga2V5IGxpc3QsIHNvIHR3byBkaWZmZXJlbnQgKGxvbmcpIGtleSBzZXRzIGNhbm5vdFxuICAgIC8vIGNvbGxpZGUgYWZ0ZXIgdHJ1bmNhdGlvbi5cbiAgICBjb25zdCBoYXNoID0gbWQ1aGFzaCh1bmlxdWVJZCArICctJyArIGtleXMuam9pbignLScpKS5zbGljZSgwLCA4KTtcbiAgICByZXR1cm4gcHJlZml4LnN1YnN0cmluZygwLCBtYXhJbmRleExlbmd0aCAtIGhhc2gubGVuZ3RoIC0gMSkgKyAnLScgKyBoYXNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZSBhIGBoYXNfZW5jcnlwdGVkX2RhdGFgIHZhbHVlIHN1cHBsaWVkIHRocm91Z2ggdGhlIGZyZWUtZm9ybVxuICAgKiBgcGFyYW1ldGVyc2AgbWFwIHdpdGggdGhlIHR5cGVkIGBoYXNFbmNyeXB0ZWREYXRhYCBwcm9wZXJ0eS5cbiAgICpcbiAgICogYGhhc19lbmNyeXB0ZWRfZGF0YWAgaXMgbWFuYWdlZCBieSB0aGlzIGNvbnN0cnVjdCBhbmQgZW1pdHRlZCBhdXRob3JpdGF0aXZlbHlcbiAgICogZnJvbSBgaGFzRW5jcnlwdGVkRGF0YWAuIFN1cHBseWluZyBpdCB0aHJvdWdoIGBwYXJhbWV0ZXJzYCBhcyB3ZWxsIGlzIG9ubHlcbiAgICogdG9sZXJhdGVkIHdoZW4gdGhlIHZhbHVlIGlzIGlkZW50aWNhbDsgYSBkaWZmZXJpbmcgKG9yIHVucmVzb2x2ZWQpIHZhbHVlIGlzXG4gICAqIHJlamVjdGVkIHNvIHRoZSB0d28gaW5wdXRzIGNhbiBuZXZlciBzaWxlbnRseSBkaXNhZ3JlZS4gT24gc3VjY2VzcyB0aGUga2V5IGlzXG4gICAqIHJlbW92ZWQgZnJvbSB0aGUgZnJlZS1mb3JtIG1hcCBzbyB0aGUgbWFuYWdlZCB2YWx1ZSBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZlxuICAgKiB0cnV0aC5cbiAgICovXG4gIHByaXZhdGUgcmVjb25jaWxlSGFzRW5jcnlwdGVkRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSAnaGFzX2VuY3J5cHRlZF9kYXRhJztcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdXBwbGllZCA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xuICAgIGNvbnN0IG1hbmFnZWQgPSBTdHJpbmcodGhpcy5oYXNFbmNyeXB0ZWREYXRhKTtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHN1cHBsaWVkKSB8fCBzdXBwbGllZCAhPT0gbWFuYWdlZCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEhhc0VuY3J5cHRlZERhdGFDb25mbGljdGAsXG4gICAgICAgIGB0aGUgXFxgJHtrZXl9XFxgIHRhYmxlIHBhcmFtZXRlciBpcyBtYW5hZ2VkIGJ5IHRoZSBcXGBoYXNFbmNyeXB0ZWREYXRhXFxgIHByb3BlcnR5OyBgICtcbiAgICAgICAgICBgcmVtb3ZlIGl0IGZyb20gXFxgcGFyYW1ldGVyc1xcYCBhbmQgdXNlIHRoZSBib29sZWFuIFxcYGhhc0VuY3J5cHRlZERhdGFcXGAgcHJvcGVydHkgaW5zdGVhZCAoZ290ICR7SlNPTi5zdHJpbmdpZnkoc3VwcGxpZWQpfSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShtYW5hZ2VkKX0pYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQYXJ0aXRpb25JbmRleChpbmRleDogUGFydGl0aW9uSW5kZXgpIHtcbiAgICBpZiAoaW5kZXguaW5kZXhOYW1lICE9PSB1bmRlZmluZWQgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChpbmRleC5pbmRleE5hbWUpICYmIChpbmRleC5pbmRleE5hbWUubGVuZ3RoIDwgMSB8fCBpbmRleC5pbmRleE5hbWUubGVuZ3RoID4gMjU1KSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW5kZXhOYW1lTGVuZ3RoSW52YWxpZGAsIGBJbmRleCBuYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycywgYnV0IGdvdCAke2luZGV4LmluZGV4TmFtZS5sZW5ndGh9YCwgdGhpcyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5wYXJ0aXRpb25LZXlzIHx8IHRoaXMucGFydGl0aW9uS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YE5vUGFydGl0aW9uS2V5c0ZvckluZGV4YCwgJ1RoZSB0YWJsZSBtdXN0IGhhdmUgcGFydGl0aW9uIGtleXMgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGluZGV4JywgdGhpcyk7XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKGluZGV4LmtleU5hbWVzKSkge1xuICAgICAgY29uc3Qga2V5TmFtZXMgPSB0aGlzLnBhcnRpdGlvbktleXMubWFwKHBrID0+IHBrLm5hbWUpO1xuICAgICAgY29uc3QgY29uY3JldGVLZXlzID0gaW5kZXgua2V5TmFtZXMuZmlsdGVyKGsgPT4gIVRva2VuLmlzVW5yZXNvbHZlZChrKSk7XG4gICAgICBpZiAoY29uY3JldGVLZXlzLmxlbmd0aCA+IDAgJiYgIWNvbmNyZXRlS2V5cy5ldmVyeShrID0+IGtleU5hbWVzLmluY2x1ZGVzKGspKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbmRleEtleXNOb3RQYXJ0aXRpb25LZXlzYCwgYEFsbCBpbmRleCBrZXlzIG11c3QgYWxzbyBiZSBwYXJ0aXRpb24ga2V5cy4gR290ICR7aW5kZXgua2V5TmFtZXN9IGJ1dCBwYXJ0aXRpb24ga2V5IG5hbWVzIGFyZSAke2tleU5hbWVzfWAsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uIGFuZCBtZXJnZSBnZW5lcmF0ZWQgcGFyYW1ldGVycyBpbnRvIHRoaXMucGFyYW1ldGVycy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBbmRHZW5lcmF0ZVBhcnRpdGlvblByb2plY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcnRpdGlvblByb2plY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHBhcnRpdGlvbiBrZXlzIGV4aXN0XG4gICAgaWYgKCF0aGlzLnBhcnRpdGlvbktleXMgfHwgdGhpcy5wYXJ0aXRpb25LZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YE5vUGFydGl0aW9uS2V5c0ZvclByb2plY3Rpb25gLFxuICAgICAgICAnVGhlIHRhYmxlIG11c3QgaGF2ZSBwYXJ0aXRpb24ga2V5cyB0byB1c2UgcGFydGl0aW9uIHByb2plY3Rpb24nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aXRpb25LZXlOYW1lcyA9IHRoaXMucGFydGl0aW9uS2V5cy5tYXAocGsgPT4gcGsubmFtZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGFydGl0aW9uUHJvamVjdGlvbikpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgY29sdW1uIGlzIGEgcGFydGl0aW9uIGtleVxuICAgICAgaWYgKCFwYXJ0aXRpb25LZXlOYW1lcy5pbmNsdWRlcyhjb2x1bW5OYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBQcm9qZWN0aW9uQ29sdW1uTm90UGFydGl0aW9uS2V5YCxcbiAgICAgICAgICBgUGFydGl0aW9uIHByb2plY3Rpb24gY29sdW1uIFwiJHtjb2x1bW5OYW1lfVwiIG11c3QgYmUgYSBwYXJ0aXRpb24ga2V5LiBgICtcbiAgICAgICAgICBgUGFydGl0aW9uIGtleXMgYXJlOiAke3BhcnRpdGlvbktleU5hbWVzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBHZW5lcmF0ZSBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCBnZW5lcmF0ZWRQYXJhbXMgPSBnZW5lcmF0ZVBhcnRpdGlvblByb2plY3Rpb25QYXJhbWV0ZXJzKGNvbHVtbk5hbWUsIGNvbmZpZyk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBjb25mbGljdHMgd2l0aCBtYW51YWxseSBzcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgICAgY29uc3QgY29uZmxpY3RpbmdLZXlzID0gT2JqZWN0LmtleXMoZ2VuZXJhdGVkUGFyYW1zKS5maWx0ZXIoa2V5ID0+IGtleSBpbiB0aGlzLnBhcmFtZXRlcnMpO1xuICAgICAgaWYgKGNvbmZsaWN0aW5nS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFByb2plY3Rpb25QYXJhbWV0ZXJzQ29uZmxpY3RgLFxuICAgICAgICAgIGBQYXJ0aXRpb24gcHJvamVjdGlvbiBwYXJhbWV0ZXJzIGNvbmZsaWN0IHdpdGggbWFudWFsbHkgc3BlY2lmaWVkIHBhcmFtZXRlcnM6ICR7Y29uZmxpY3RpbmdLZXlzLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgICAnVXNlIHRoZSBwYXJ0aXRpb25Qcm9qZWN0aW9uIHByb3BlcnR5IGluc3RlYWQgb2YgbWFudWFsbHkgc3BlY2lmeWluZyBwcm9qZWN0aW9uIHBhcmFtZXRlcnMuJyxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBNZXJnZSBpbnRvIHRoaXMucGFyYW1ldGVyc1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtZXRlcnMsIGdlbmVyYXRlZFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGNvbmZsaWN0IHdpdGggcHJvamVjdGlvbi5lbmFibGVkXG4gICAgaWYgKCdwcm9qZWN0aW9uLmVuYWJsZWQnIGluIHRoaXMucGFyYW1ldGVycykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFByb2plY3Rpb25FbmFibGVkQ29uZmxpY3RgLFxuICAgICAgICAnUGFyYW1ldGVyIFwicHJvamVjdGlvbi5lbmFibGVkXCIgY29uZmxpY3RzIHdpdGggcGFydGl0aW9uUHJvamVjdGlvbiBjb25maWd1cmF0aW9uLiAnICtcbiAgICAgICAgJ1VzZSB0aGUgcGFydGl0aW9uUHJvamVjdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIG1hbnVhbGx5IHNwZWNpZnlpbmcgcHJvamVjdGlvbi5lbmFibGVkLicsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSBwYXJ0aXRpb24gcHJvamVjdGlvbiBnbG9iYWxseVxuICAgIHRoaXMucGFyYW1ldGVyc1sncHJvamVjdGlvbi5lbmFibGVkJ10gPSAndHJ1ZSc7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIGlkZW50aXR5IGN1c3RvbSBwZXJtaXNzaW9ucyBvbiB0aGlzIHRhYmxlLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgbG93LWxldmVsIGVzY2FwZSBoYXRjaDogdGhlIGBhY3Rpb25zYCBhcmUgYXBwbGllZCB2ZXJiYXRpbSxcbiAgICogc2NvcGVkIHRvIHRoaXMgdGFibGUncyBBUk4uIFByZWZlciB0aGUgaW50ZW50LWJhc2VkIGBncmFudFJlYWRgIC9cbiAgICogYGdyYW50V3JpdGVgIC8gYGdyYW50UmVhZFdyaXRlYCBtZXRob2RzLCB3aGljaCBncmFudCBhIGN1cmF0ZWQgc2V0IG9mXG4gICAqIGFjdGlvbnMgYW5kIGFsc28gY292ZXIgdGhlIHVuZGVybHlpbmcgUzMgZGF0YS4gT25seSBwYXNzIHRoZSBzcGVjaWZpY1xuICAgKiBhY3Rpb25zIHRoZSBncmFudGVlIG5lZWRzIC0gYXZvaWQgc2VydmljZSB3aWxkY2FyZHMgc3VjaCBhcyBgZ2x1ZToqYC5cbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIHRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgdGhlIHNldCBvZiBHbHVlIGFjdGlvbnMgdG8gYWxsb3cgKGZvciBleGFtcGxlIGBnbHVlOkdldFRhYmxlYClcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgYWN0aW9uczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLnRhYmxlQXJuXSxcbiAgICAgIGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIGlkZW50aXR5IGN1c3RvbSBwZXJtaXNzaW9ucyBvbiB0aGlzIHRhYmxlIEFORCBpdHMgcGFyZW50XG4gICAqIGNhdGFsb2cgYW5kIGRhdGFiYXNlLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgbG93LWxldmVsIGVzY2FwZSBoYXRjaCBmb3IgYWN0aW9ucyAoc3VjaCBhcyBjZXJ0YWluIExha2VcbiAgICogRm9ybWF0aW9uIG9yIGNyYXdsZXIgb3BlcmF0aW9ucykgdGhhdCBtdXN0IGJlIGF1dGhvcml6ZWQgYWdhaW5zdCB0aGVcbiAgICogY2F0YWxvZyBhbmQgZGF0YWJhc2UgaW4gYWRkaXRpb24gdG8gdGhlIHRhYmxlLiBUaGUgYGFjdGlvbnNgIGFyZSBhcHBsaWVkXG4gICAqIHZlcmJhdGltIHRvIGFsbCB0aHJlZSBBUk5zICh0YWJsZSwgY2F0YWxvZywgZGF0YWJhc2UpLCBzbyBzY29wZSB0aGVtXG4gICAqIHRpZ2h0bHk6IHBhc3Mgb25seSB0aGUgc3BlY2lmaWMgYWN0aW9ucyB0aGUgZ3JhbnRlZSBuZWVkcyBhbmQgYXZvaWRcbiAgICogc2VydmljZSB3aWxkY2FyZHMgc3VjaCBhcyBgZ2x1ZToqYCwgd2hpY2ggd291bGQgZ3JhbnQgYnJvYWQgYWNjZXNzIGFjcm9zc1xuICAgKiBldmVyeSByZXNvdXJjZSBpbiB0aGUgY2F0YWxvZyBhbmQgZGF0YWJhc2UuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSB0aGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIHRoZSBzZXQgb2YgR2x1ZSBhY3Rpb25zIHRvIGFsbG93IChmb3IgZXhhbXBsZSBgZ2x1ZTpHZXRUYWJsZWApXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRUb1VuZGVybHlpbmdSZXNvdXJjZXMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIGFjdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbXG4gICAgICAgIHRoaXMudGFibGVBcm4sXG4gICAgICAgIHRoaXMuZGF0YWJhc2UuY2F0YWxvZy5jYXRhbG9nQXJuLFxuICAgICAgICB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlQXJuLFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHN0YWNrLXNpbmdsZXRvbiBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIgdGhhdCBtYW5hZ2VzIEdsdWUgcGFydGl0aW9uIGluZGV4ZXMuXG4gKlxuICogQWxsIHBhcnRpdGlvbi1pbmRleGVkIHRhYmxlcyBpbiBhIHN0YWNrIHNoYXJlIGEgc2luZ2xlIHByb3ZpZGVyIChhbmQgaXRzIHR3b1xuICogTGFtYmRhIGhhbmRsZXJzKSB0byBhdm9pZCBwcm92aXNpb25pbmcgYSBwcm92aWRlciBmcmFtZXdvcmsgcGVyIHRhYmxlLiBUaGVcbiAqIHByb3ZpZGVyIGFuZCBoYW5kbGVycyBhcmUgZ3JvdXBlZCB1bmRlciB0aGlzIHNpbmdsZSBjb25zdHJ1Y3Qgc28gb25seSBvbmVcbiAqIGlkIGlzIHBsYWNlZCBhdCBzdGFjayBzY29wZS5cbiAqL1xuY2xhc3MgUGFydGl0aW9uSW5kZXhQcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFjay1zaW5nbGV0b24gcHJvdmlkZXIsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXMgbm90IHlldCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0T3JDcmVhdGUoc2NvcGU6IENvbnN0cnVjdCk6IFBhcnRpdGlvbkluZGV4UHJvdmlkZXIge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIC8vIEEgZml4ZWQsIG5hbWVzcGFjZWQgaWQgbWFrZXMgdGhpcyBhIHN0YWNrIHNpbmdsZXRvbjogZXZlcnkgY2FsbCB3aXRoaW4gdGhlXG4gICAgLy8gc2FtZSBzdGFjayByZXNvbHZlcyB0byB0aGUgc2FtZSBjaGlsZCB2aWEgYHRyeUZpbmRDaGlsZGAuXG4gICAgY29uc3QgaWQgPSAnQGF3cy1jZGsvYXdzLWdsdWUtYWxwaGEuUGFydGl0aW9uSW5kZXhQcm92aWRlcic7XG4gICAgcmV0dXJuIChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgUGFydGl0aW9uSW5kZXhQcm92aWRlcikgPz8gbmV3IFBhcnRpdGlvbkluZGV4UHJvdmlkZXIoc3RhY2ssIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBvbkV2ZW50SGFuZGxlcjogbGFtYmRhLkZ1bmN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNDb21wbGV0ZUhhbmRsZXI6IGxhbWJkYS5GdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlcjogY3IuUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBUaGUgaGFuZGxlciBzb3VyY2UgbGl2ZXMgaW4gYEBhd3MtY2RrL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVyc2AgYW5kIGlzIGNvZGVcbiAgICAvLyBnZW5lcmF0ZWQgKyBhaXJsaWZ0ZWQgaW50byB0aGlzIHBhY2thZ2UgYXQgYnVpbGQgdGltZSAoc2VlXG4gICAgLy8gc2NyaXB0cy9haXJsaWZ0LWN1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy5zaCksIGZvbGxvd2luZyB0aGUgcGF0dGVybiB1c2VkIGJ5IHRoZVxuICAgIC8vIG90aGVyIGFscGhhIG1vZHVsZXMgKGF3cy1hbXBsaWZ5LWFscGhhLCBhd3MtcmVkc2hpZnQtYWxwaGEpLiBUaGUgQGF3cy1zZGsvY2xpZW50LWdsdWVcbiAgICAvLyBtb2R1bGUgaXMgcHJvdmlkZWQgYnkgdGhlIExhbWJkYSBydW50aW1lIHJhdGhlciB0aGFuIGJ1bmRsZWQgaW50byB0aGUgYXNzZXQuXG4gICAgdGhpcy5vbkV2ZW50SGFuZGxlciA9IG5ldyBQYXJ0aXRpb25JbmRleE9uRXZlbnRGdW5jdGlvbih0aGlzLCAnSGFuZGxlcicsIHtcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgfSk7XG4gICAgdGhpcy5pc0NvbXBsZXRlSGFuZGxlciA9IG5ldyBQYXJ0aXRpb25JbmRleElzQ29tcGxldGVGdW5jdGlvbih0aGlzLCAnSXNDb21wbGV0ZScsIHtcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb3ZpZGVyID0gbmV3IGNyLlByb3ZpZGVyKHRoaXMsICdQcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLm9uRXZlbnRIYW5kbGVyLFxuICAgICAgaXNDb21wbGV0ZUhhbmRsZXI6IHRoaXMuaXNDb21wbGV0ZUhhbmRsZXIsXG4gICAgICBxdWVyeUludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgIHRvdGFsVGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgdG9rZW4gdG8gd2lyZSBpbnRvIHBhcnRpdGlvbiBpbmRleCBjdXN0b20gcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXJ2aWNlVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlci5zZXJ2aWNlVG9rZW47XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoY29sdW1uczogQ29sdW1uW10sIHBhcnRpdGlvbktleXM/OiBDb2x1bW5bXSk6IHZvaWQge1xuICBpZiAoY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE5vQ29sdW1uc1NwZWNpZmllZGAsICd5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBjb2x1bW4gZm9yIHRoZSB0YWJsZScpO1xuICB9XG4gIC8vIENoZWNrIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gYW5kIG5vIGR1cGxpY2F0ZWQgY29sdW1uIG5hbWVzIG9yIHBhcnRpdGlvbiBrZXlzLlxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAoY29sdW1ucy5jb25jYXQocGFydGl0aW9uS2V5cyB8fCBbXSkpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBpZiAobmFtZXMuaGFzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBEdXBsaWNhdGVDb2x1bW5OYW1lYCwgYGNvbHVtbiBuYW1lcyBhbmQgcGFydGl0aW9uIGtleXMgbXVzdCBiZSB1bmlxdWUsIGJ1dCBcXCcke2NvbHVtbi5uYW1lfVxcJyBpcyBkdXBsaWNhdGVkYCk7XG4gICAgfVxuICAgIG5hbWVzLmFkZChjb2x1bW4ubmFtZSk7XG4gIH0pO1xufVxuIl19
|
package/lib/table-deprecated.js
CHANGED
|
@@ -57,7 +57,7 @@ let Table = (() => {
|
|
|
57
57
|
Table = _classThis = _classDescriptor.value;
|
|
58
58
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
59
59
|
}
|
|
60
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Table", version: "2.
|
|
60
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Table", version: "2.266.0-alpha.0" };
|
|
61
61
|
/** Uniquely identifies this class. */
|
|
62
62
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Table';
|
|
63
63
|
static {
|
|
@@ -41,7 +41,7 @@ const events = __importStar(require("aws-cdk-lib/aws-events"));
|
|
|
41
41
|
*/
|
|
42
42
|
class TriggerSchedule {
|
|
43
43
|
expressionString;
|
|
44
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TriggerSchedule", version: "2.
|
|
44
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TriggerSchedule", version: "2.266.0-alpha.0" };
|
|
45
45
|
/**
|
|
46
46
|
* Creates a new TriggerSchedule instance with a cron expression.
|
|
47
47
|
*
|
package/lib/triggers/workflow.js
CHANGED
|
@@ -83,7 +83,7 @@ const trigger_options_1 = require("./trigger-options");
|
|
|
83
83
|
* @see https://docs.aws.amazon.com/glue/latest/dg/about-triggers.html
|
|
84
84
|
*/
|
|
85
85
|
class WorkflowBase extends cdk.Resource {
|
|
86
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.WorkflowBase", version: "2.
|
|
86
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.WorkflowBase", version: "2.266.0-alpha.0" };
|
|
87
87
|
/**
|
|
88
88
|
* Extract workflowName from arn
|
|
89
89
|
*/
|
|
@@ -388,7 +388,7 @@ let Workflow = (() => {
|
|
|
388
388
|
Workflow = _classThis = _classDescriptor.value;
|
|
389
389
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
390
390
|
}
|
|
391
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Workflow", version: "2.
|
|
391
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Workflow", version: "2.266.0-alpha.0" };
|
|
392
392
|
/** Uniquely identifies this class. */
|
|
393
393
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Workflow';
|
|
394
394
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-glue-alpha",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.266.0-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The CDK Construct Library for AWS::Glue",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -85,19 +85,19 @@
|
|
|
85
85
|
},
|
|
86
86
|
"license": "Apache-2.0",
|
|
87
87
|
"devDependencies": {
|
|
88
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
88
|
+
"@aws-cdk/cdk-build-tools": "2.266.0-alpha.0",
|
|
89
89
|
"@aws-cdk/integ-runner": "^2.202.3",
|
|
90
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
91
|
-
"@aws-cdk/custom-resource-handlers": "2.
|
|
92
|
-
"@aws-cdk/pkglint": "2.
|
|
90
|
+
"@aws-cdk/integ-tests-alpha": "2.266.0-alpha.0",
|
|
91
|
+
"@aws-cdk/custom-resource-handlers": "2.266.0-alpha.0",
|
|
92
|
+
"@aws-cdk/pkglint": "2.266.0-alpha.0",
|
|
93
93
|
"@types/jest": "^29.5.14",
|
|
94
|
-
"aws-cdk-lib": "2.
|
|
94
|
+
"aws-cdk-lib": "2.266.0",
|
|
95
95
|
"constructs": "^10.5.0",
|
|
96
96
|
"jest": "^29.7.0"
|
|
97
97
|
},
|
|
98
98
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
99
99
|
"peerDependencies": {
|
|
100
|
-
"aws-cdk-lib": "^2.
|
|
100
|
+
"aws-cdk-lib": "^2.266.0",
|
|
101
101
|
"constructs": "^10.5.0"
|
|
102
102
|
},
|
|
103
103
|
"engines": {
|