igniteui-angular 17.2.17 → 17.2.18
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/esm2022/lib/data-operations/filtering-condition.mjs +8 -1
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +25 -29
- package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +7 -5
- package/esm2022/lib/grids/grid-base.directive.mjs +2 -2
- package/esm2022/lib/query-builder/query-builder.component.mjs +3 -3
- package/esm2022/lib/services/exporter-common/base-export-service.mjs +5 -3
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +4 -2
- package/fesm2022/igniteui-angular.mjs +47 -38
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/styles/components/input/_input-group-theme.scss +9 -9
- package/lib/core/styles/components/label/_label-theme.scss +19 -7
- package/lib/core/styles/typography/_bootstrap.scss +4 -0
- package/lib/core/styles/typography/_fluent.scss +4 -0
- package/lib/core/styles/typography/_indigo.scss +4 -0
- package/lib/core/styles/typography/_material.scss +2 -0
- package/lib/data-operations/filtering-condition.d.ts +1 -0
- package/lib/services/exporter-common/base-export-service.d.ts +1 -0
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -101,6 +101,7 @@ export class IgxBaseExporter {
|
|
|
101
101
|
}
|
|
102
102
|
this.options = options;
|
|
103
103
|
this.locale = grid.locale;
|
|
104
|
+
this.ownerGrid = grid;
|
|
104
105
|
let columns = grid.columns;
|
|
105
106
|
if (this.options.ignoreMultiColumnHeaders) {
|
|
106
107
|
columns = columns.filter(col => col.children === undefined);
|
|
@@ -257,7 +258,7 @@ export class IgxBaseExporter {
|
|
|
257
258
|
}
|
|
258
259
|
});
|
|
259
260
|
}
|
|
260
|
-
const targetCol = mapRecord.columns.filter(c => column.columnGroupParent !== null && c.columnGroup === column.columnGroupParent)[0];
|
|
261
|
+
const targetCol = mapRecord.columns.filter(c => column.columnGroupParent !== null && column.columnGroupParent !== undefined && c.columnGroup === column.columnGroupParent)[0];
|
|
261
262
|
if (targetCol !== undefined) {
|
|
262
263
|
targetCol.columnSpan -= span;
|
|
263
264
|
if (targetCol.columnGroupParent !== null) {
|
|
@@ -311,7 +312,8 @@ export class IgxBaseExporter {
|
|
|
311
312
|
const rowArgs = {
|
|
312
313
|
rowData: record.data,
|
|
313
314
|
rowIndex: index,
|
|
314
|
-
cancel: false
|
|
315
|
+
cancel: false,
|
|
316
|
+
owner: record.owner ?? this.ownerGrid
|
|
315
317
|
};
|
|
316
318
|
this.rowExporting.emit(rowArgs);
|
|
317
319
|
if (!rowArgs.cancel) {
|
|
@@ -1063,4 +1065,4 @@ export class IgxBaseExporter {
|
|
|
1063
1065
|
this.rowIslandCounter = 0;
|
|
1064
1066
|
}
|
|
1065
1067
|
}
|
|
1066
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFrQixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQXNCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3QixtREFBK0IsQ0FBQTtJQUMvQix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQVEzQjtBQUVELE1BQU0s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R0FBRyxDQUFDLEVBQUU7WUFDekQsS0FBSSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFDO2dCQUM1QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUU7b0JBQzVJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDcEM7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUE0QixDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lQXJyYXksIGNsb25lVmFsdWUsIElCYXNlRXZlbnRBcmdzLCByZXNvbHZlTmVzdGVkUGF0aCwgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUsIERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBFeHBvcnRVdGlsaXRpZXMgfSBmcm9tICcuL2V4cG9ydC11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSB9IGZyb20gJy4vZXhwb3J0ZXItb3B0aW9ucy1iYXNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uLy4uL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5maWx0ZXJpbmcuc3RyYXRlZ3knO1xuaW1wb3J0IHsgSUdyb3VwaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0SGllcmFyY2h5LCBpc0hpZXJhcmNoeU1hdGNoIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL29wZXJhdGlvbnMnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ1N0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIEZvcm1hdFdpZHRoLCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIGdldExvY2FsZURhdGVGb3JtYXQsIGdldExvY2FsZURhdGVUaW1lRm9ybWF0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSVBhdGhTZWdtZW50IH0gZnJvbSAnLi4vLi4vZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlclV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuLi8uLi9ncmlkcy9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlIH0gZnJvbSAnLi4vLi4vZ3JpZHMvY29tbW9uL2VudW1zJztcblxuZXhwb3J0IGVudW0gRXhwb3J0UmVjb3JkVHlwZSB7XG4gICAgR3JvdXBlZFJlY29yZCA9ICdHcm91cGVkUmVjb3JkJyxcbiAgICBUcmVlR3JpZFJlY29yZCA9ICdUcmVlR3JpZFJlY29yZCcsXG4gICAgRGF0YVJlY29yZCA9ICdEYXRhUmVjb3JkJyxcbiAgICBIaWVyYXJjaGljYWxHcmlkUmVjb3JkID0gJ0hpZXJhcmNoaWNhbEdyaWRSZWNvcmQnLFxuICAgIEhlYWRlclJlY29yZCA9ICdIZWFkZXJSZWNvcmQnLFxuICAgIFN1bW1hcnlSZWNvcmQgPSAnU3VtbWFyeVJlY29yZCcsXG4gICAgUGl2b3RHcmlkUmVjb3JkID0gJ1Bpdm90R3JpZFJlY29yZCdcbn1cblxuZXhwb3J0IGVudW0gRXhwb3J0SGVhZGVyVHlwZSB7XG4gICAgUm93SGVhZGVyID0gJ1Jvd0hlYWRlcicsXG4gICAgQ29sdW1uSGVhZGVyID0gJ0NvbHVtbkhlYWRlcicsXG4gICAgTXVsdGlSb3dIZWFkZXIgPSAnTXVsdGlSb3dIZWFkZXInLFxuICAgIE11bHRpQ29sdW1uSGVhZGVyID0gJ011bHRpQ29sdW1uSGVhZGVyJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXhwb3J0UmVjb3JkIHtcbiAgICBkYXRhOiBhbnk7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlO1xuICAgIG93bmVyPzogc3RyaW5nIHwgR3JpZFR5cGU7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBzdW1tYXJ5S2V5Pzogc3RyaW5nO1xuICAgIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5MaXN0IHtcbiAgICBjb2x1bW5zOiBJQ29sdW1uSW5mb1tdO1xuICAgIGNvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IG51bWJlcjtcbiAgICBtYXhMZXZlbD86IG51bWJlcjtcbiAgICBtYXhSb3dMZXZlbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uSW5mbyB7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBza2lwOiBib29sZWFuO1xuICAgIGRhdGFUeXBlPzogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIHNraXBGb3JtYXR0ZXI/OiBib29sZWFuO1xuICAgIGZvcm1hdHRlcj86IGFueTtcbiAgICBoZWFkZXJUeXBlPzogRXhwb3J0SGVhZGVyVHlwZTtcbiAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgIGNvbHVtblNwYW4/OiBudW1iZXI7XG4gICAgcm93U3Bhbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBleHBvcnRJbmRleD86IG51bWJlcjtcbiAgICBwaW5uZWRJbmRleD86IG51bWJlcjtcbiAgICBjb2x1bW5Hcm91cFBhcmVudD86IENvbHVtblR5cGUgfCBzdHJpbmc7XG4gICAgY29sdW1uR3JvdXA/OiBDb2x1bW5UeXBlIHwgc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG4gICAgZGlnaXRzSW5mbz86IHN0cmluZztcbn1cbi8qKlxuICogcm93RXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3dFeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyByb3cgZGF0YVxuICAgICAqL1xuICAgIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGluZGV4XG4gICAgICovXG4gICAgcm93SW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyByb3cgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBjb2x1bW5FeHBvcnRpbmcgZXZlbnQgYXJndW1lbnRzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmV4cG9ydGVyU2VydmljZS5jb2x1bW5FeHBvcnRpbmcuc3Vic2NyaWJlKChhcmdzOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSA9PiB7XG4gKiAvLyBzZXQgYXJncyBwcm9wZXJ0aWVzIGhlcmVcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBoZWFkZXJcbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBmaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaW5kZXhcbiAgICAgKi9cbiAgICBjb2x1bW5JbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2tpcCB0aGUgZXhwb3J0aW5nIGNvbHVtbiB3aGVuIHNldCB0byB0cnVlXG4gICAgICovXG4gICAgY2FuY2VsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXhwb3J0IHRoZSBjb2x1bW4ncyBkYXRhIHdpdGhvdXQgYXBwbHlpbmcgaXRzIGZvcm1hdHRlciwgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIHNraXBGb3JtYXR0ZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBvd25lci5cbiAgICAgKi9cbiAgICBncmlkPzogR3JpZFR5cGU7XG59XG5cbi8qKmhpZGRlblxuICogQSBoZWxwZXIgY2xhc3MgdXNlZCB0byBpZGVudGlmeSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBzZXQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleFxuICogZHVyaW5nIGNvbHVtbkV4cG9ydGluZywgc28gd2UgY2FuIGhvbm9yIGl0IGF0IHRoZSBleHBvcnRlZCBmaWxlLlxuKi9cbmNsYXNzIElneENvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBpbXBsZW1lbnRzIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3Mge1xuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2FuY2VsOiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBncmlkPzogR3JpZFR5cGU7XG4gICAgcHVibGljIG93bmVyPzogYW55O1xuICAgIHB1YmxpYyB1c2VyU2V0SW5kZXg/ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9jb2x1bW5JbmRleD86IG51bWJlcjtcblxuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jb2x1bW5JbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVzZXJTZXRJbmRleCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWw6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBvcmlnaW5hbC5oZWFkZXI7XG4gICAgICAgIHRoaXMuZmllbGQgPSBvcmlnaW5hbC5maWVsZDtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBvcmlnaW5hbC5jYW5jZWw7XG4gICAgICAgIHRoaXMuc2tpcEZvcm1hdHRlciA9IG9yaWdpbmFsLnNraXBGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZ3JpZCA9IG9yaWdpbmFsLmdyaWQ7XG4gICAgICAgIHRoaXMub3duZXIgPSBvcmlnaW5hbC5vd25lcjtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSBvcmlnaW5hbC5jb2x1bW5JbmRleDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09XTkVSID0gJ2RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IEdSSURfUk9PVF9TVU1NQVJZID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG5leHBvcnQgY29uc3QgR1JJRF9QQVJFTlQgPSAnZ3JpZC1wYXJlbnQnO1xuZXhwb3J0IGNvbnN0IEdSSURfTEVWRUxfQ09MID0gJ0dSSURfTEVWRUxfQ09MJztcbmNvbnN0IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gOC40MztcbmNvbnN0IEdSSURfQ0hJTEQgPSAnZ3JpZC1jaGlsZC0nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWd4QmFzZUV4cG9ydGVyIHtcblxuICAgIHB1YmxpYyBleHBvcnRFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJvdyBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyByb3dFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dFeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5FeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBudWxsO1xuICAgIHByb3RlY3RlZCBwaXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfb3duZXJzTWFwOiBNYXA8YW55LCBJQ29sdW1uTGlzdD4gPSBuZXcgTWFwPGFueSwgSUNvbHVtbkxpc3Q+KCk7XG5cbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nXG4gICAgcHJpdmF0ZSBfc2V0Q2hpbGRTdW1tYXJpZXMgPSBmYWxzZVxuICAgIHByaXZhdGUgaXNQaXZvdEdyaWRFeHBvcnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgIHByaXZhdGUgc3VtbWFyaWVzOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG4gICAgcHJpdmF0ZSByb3dJc2xhbmRDb3VudGVyID0gLTE7XG4gICAgcHJpdmF0ZSBmbGF0UmVjb3JkczogSUV4cG9ydFJlY29yZFtdID0gW107XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRDb2x1bW5zOiBJQ29sdW1uSW5mb1tdID0gW11cbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRLZXlWYWx1ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBJZ3hHcmlkIGNvbXBvbmVudCdzIGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLmlneEdyaWRGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydChncmlkOiBhbnksIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubG9jYWxlID0gZ3JpZC5sb2NhbGU7XG4gICAgICAgIGxldCBjb2x1bW5zID0gZ3JpZC5jb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbkxpc3QgPSB0aGlzLmdldENvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJykge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChncmlkLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kLCBncmlkLmRhdGFbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkQ29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc1Bpdm90R3JpZEV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MuZmlsdGVyKHIgPT4gci5lbmFibGVkKS5mb3JFYWNoKHJvd0RpbWVuc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLCByb3dEaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1bW1hcmllcyA9IHRoaXMucHJlcGFyZVN1bW1hcmllcyhncmlkKTtcbiAgICAgICAgdGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMgPSAgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDEgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5O1xuXG4gICAgICAgIHRoaXMuYWRkTGV2ZWxDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZURhdGEoZ3JpZCk7XG4gICAgICAgIHRoaXMuYWRkTGV2ZWxEYXRhKCk7XG4gICAgICAgIHRoaXMuYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkKTtcbiAgICAgICAgdGhpcy5leHBvcnRHcmlkUmVjb3Jkc0RhdGEodGhpcy5mbGF0UmVjb3JkcywgZ3JpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGZvciBleHBvcnRpbmcgYW55IGtpbmQgb2YgYXJyYXkgZGF0YS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuZXhwb3J0RGF0YSh0aGlzLmFycmF5Rm9yRXhwb3J0LCB0aGlzLmV4cG9ydE9wdGlvbnMpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBleHBvcnREYXRhKGRhdGE6IGFueVtdLCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlKTogdm9pZCB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIG9wdGlvbnMgcHJvdmlkZWQhJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSBkYXRhLm1hcChkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5leHBvcnRHcmlkUmVjb3Jkc0RhdGEocmVjb3Jkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uOiBhbnksIHJvb3RQYXJlbnROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwW3Jvd0RpbWVuc2lvbi5tZW1iZXJOYW1lXSA9IHJvb3RQYXJlbnROYW1lO1xuICAgICAgICBpZiAocm93RGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9Sb3dEaW1lbnNpb25zTWFwKHJvd0RpbWVuc2lvbi5jaGlsZExldmVsLCByb290UGFyZW50TmFtZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwb3J0R3JpZFJlY29yZHNEYXRhKHJlY29yZHM6IElFeHBvcnRSZWNvcmRbXSwgZ3JpZD86IEdyaWRUeXBlKSB7XG4gICAgICAgIGlmICh0aGlzLl9vd25lcnNNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcmVjb3Jkc0RhdGEgPSByZWNvcmRzLmZpbHRlcihyID0+IHIudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkKS5tYXAociA9PiByLmRhdGEpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEV4cG9ydFV0aWxpdGllcy5nZXRLZXlzRnJvbURhdGEocmVjb3Jkc0RhdGEpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IGtleXMubWFwKChrKSA9PlxuICAgICAgICAgICAgICAgICh7IGhlYWRlcjogaywgZmllbGQ6IGssIHNraXA6IGZhbHNlLCBoZWFkZXJUeXBlOiBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlciwgbGV2ZWw6IDAsIGNvbHVtblNwYW46IDEgfSkpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGhzID0gbmV3IEFycmF5PG51bWJlcj4oa2V5cy5sZW5ndGgpLmZpbGwoREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXBSZWNvcmQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uV2lkdGhzLFxuICAgICAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uOiAtMSxcbiAgICAgICAgICAgICAgICBtYXhMZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBtYXBSZWNvcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNob3VsZFJlb3JkZXJDb2x1bW5zID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbWFwUmVjb3JkXSBvZiB0aGlzLl9vd25lcnNNYXApIHtcbiAgICAgICAgICAgIGxldCBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgICAgIGxldCBjb2x1bW5zV2l0aG91dEhlYWRlckNvdW50ID0gMTtcbiAgICAgICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IG1hcFJlY29yZC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbjtcblxuICAgICAgICAgICAgbWFwUmVjb3JkLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRXhwb3J0QXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogIUV4cG9ydFV0aWxpdGllcy5pc051bGxPcldoaXRlc3BhY2VzKGNvbHVtbi5oZWFkZXIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29sdW1uJyArIGNvbHVtbnNXaXRob3V0SGVhZGVyQ291bnQrKyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBrZXkgPT09IERFRkFVTFRfT1dORVIgPyBncmlkIDoga2V5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1uRXhwb3J0QXJncyA9IG5ldyBJZ3hDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MoY29sdW1uRXhwb3J0QXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRXhwb3J0aW5nLmVtaXQobmV3Q29sdW1uRXhwb3J0QXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcEZvcm1hdHRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3Muc2tpcEZvcm1hdHRlcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q29sdW1uRXhwb3J0QXJncy51c2VyU2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5leHBvcnRJbmRleCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY29sdW1uSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZW9yZGVyQ29sdW1ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8PSBpbmRleE9mTGFzdFBpbm5lZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyhjb2x1bW4sIG1hcFJlY29yZCwgY29sdW1uLmNvbHVtblNwYW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub25Ta2lwcGVkQ29sdW1ucyA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9uU2tpcHBlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5nZXQoa2V5KS5tYXhMZXZlbCA9IG5vblNraXBwZWRDb2x1bW5zLnNvcnQoKGEsIGIpID0+IGIubGV2ZWwgLSBhLmxldmVsKVswXS5sZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0ICYmIHRoaXMuX3NvcnQuZmllbGROYW1lID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0LmZpZWxkTmFtZSA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gLT0gc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudDtcblxuICAgICAgICAgICAgLy8gUmVvcmRlciBjb2x1bW5zIG9ubHkgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYXNzaWduZWQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleCBkdXJpbmcgY29sdW1uRXhwb3J0aW5nIGV2ZW50XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVvcmRlckNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBtYXBSZWNvcmQuY29sdW1ucyA9IHRoaXMucmVvcmRlckNvbHVtbnMobWFwUmVjb3JkLmNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gbmV3IEFycmF5PElFeHBvcnRSZWNvcmQ+KCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbERhdGEgPSByZWNvcmRzWzBdPy5kYXRhO1xuICAgICAgICBjb25zdCBpc1NwZWNpYWxEYXRhID0gRXhwb3J0VXRpbGl0aWVzLmlzU3BlY2lhbERhdGEoYWN0dWFsRGF0YSk7XG5cbiAgICAgICAgeWllbGRpbmdMb29wKHJlY29yZHMubGVuZ3RoLCAxMDAsIChpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSByZWNvcmRzW2ldO1xuICAgICAgICAgICAgdGhpcy5leHBvcnRSb3coZGF0YVRvRXhwb3J0LCByb3csIGksIGlzU3BlY2lhbERhdGEpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhVG9FeHBvcnQsIHRoaXMub3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXREZWZhdWx0cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlQ29sdW1uU3BhbnMoY29sdW1uOiBJQ29sdW1uSW5mbywgbWFwUmVjb3JkOiBJQ29sdW1uTGlzdCwgc3BhbjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW4uaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiBjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXBDaGlsZHJlbiA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+IGMuY29sdW1uR3JvdXBQYXJlbnQgPT09IGNvbHVtbi5jb2x1bW5Hcm91cCk7XG5cbiAgICAgICAgICAgIGNvbHVtbkdyb3VwQ2hpbGRyZW4uZm9yRWFjaChjZ2MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjZ2MuaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBjZ2MuY29sdW1uU3BhbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5jb2x1bW5Hcm91cFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5za2lwID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtblNwYW5zKGNnYywgbWFwUmVjb3JkLCBjZ2MuY29sdW1uU3Bhbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2djLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sID0gbWFwUmVjb3JkLmNvbHVtbnMuZmlsdGVyKGMgPT4gY29sdW1uLmNvbHVtbkdyb3VwUGFyZW50ICE9PSBudWxsICYmIGMuY29sdW1uR3JvdXAgPT09IGNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudClbMF07XG4gICAgICAgIGlmICh0YXJnZXRDb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFyZ2V0Q29sLmNvbHVtblNwYW4gLT0gc3BhbjtcblxuICAgICAgICAgICAgaWYgKHRhcmdldENvbC5jb2x1bW5Hcm91cFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnModGFyZ2V0Q29sLCBtYXBSZWNvcmQsIHNwYW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29sLmNvbHVtblNwYW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRDb2wuc2tpcCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydFJvdyhkYXRhOiBJRXhwb3J0UmVjb3JkW10sIHJlY29yZDogSUV4cG9ydFJlY29yZCwgaW5kZXg6IG51bWJlciwgaXNTcGVjaWFsRGF0YTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWlzU3BlY2lhbERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyID0gcmVjb3JkLm93bmVyID09PSB1bmRlZmluZWQgPyBERUZBVUxUX09XTkVSIDogcmVjb3JkLm93bmVyO1xuICAgICAgICAgICAgY29uc3Qgb3duZXJDb2xzID0gdGhpcy5fb3duZXJzTWFwLmdldChvd25lcikuY29sdW1ucztcblxuICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBvd25lckNvbHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgICAgIHJlY29yZC5kYXRhID0gY29sdW1ucy5yZWR1Y2UoKGEsIGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByYXdWYWx1ZSA9IHJlc29sdmVOZXN0ZWRQYXRoKHJlY29yZC5kYXRhLCBlLmZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQXBwbHlGb3JtYXR0ZXIgPSBlLmZvcm1hdHRlciAmJiAhZS5za2lwRm9ybWF0dGVyICYmIHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09mRGF0ZVR5cGUgPSBlLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgZS5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJyB8fCBlLmRhdGFUeXBlID09PSAndGltZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09mRGF0ZVR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEocmF3VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzaG91bGRBcHBseUZvcm1hdHRlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlID0gbmV3IERhdGUocmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmRhdGFUeXBlID09PSAnc3RyaW5nJyAmJiByYXdWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSA9IHJhd1ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IHNob3VsZEFwcGx5Rm9ybWF0dGVyID8gZS5mb3JtYXR0ZXIocmF3VmFsdWUsIHJlY29yZC5kYXRhKSA6IHJhd1ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Bpdm90R3JpZEV4cG9ydCAmJiAhaXNOYU4ocGFyc2VGbG9hdChmb3JtYXR0ZWRWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBwYXJzZUZsb2F0KGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYVtlLmZpZWxkXSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRIZWFkZXJzID0gb3duZXJDb2xzLmZpbHRlcihjID0+IGMuc2tpcCkubWFwKGMgPT4gYy5oZWFkZXIgPyBjLmhlYWRlciA6IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHJlY29yZC5kYXRhID0gcmVjb3JkLmRhdGEuZmlsdGVyKGQgPT4gZmlsdGVyZWRIZWFkZXJzLmluZGV4T2YoZCkgPT09IC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7XG4gICAgICAgICAgICByb3dEYXRhOiByZWNvcmQuZGF0YSxcbiAgICAgICAgICAgIHJvd0luZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJvd0V4cG9ydGluZy5lbWl0KHJvd0FyZ3MpO1xuXG4gICAgICAgIGlmICghcm93QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW9yZGVyQ29sdW1ucyhjb2x1bW5zOiBJQ29sdW1uSW5mb1tdKTogSUNvbHVtbkluZm9bXSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGZpbHRlcmVkQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljSW5kaWNlc0NvbHVtbnMgPSBmaWx0ZXJlZENvbHVtbnMuZmlsdGVyKChjb2wpID0+ICFpc05hTihjb2wuZXhwb3J0SW5kZXgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsYikgPT4gYS5leHBvcnRJbmRleCAtIGIuZXhwb3J0SW5kZXgpO1xuICAgICAgICBjb25zdCBpbmRpY2VzID0gc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5tYXAoY29sID0+IGNvbC5leHBvcnRJbmRleCk7XG5cbiAgICAgICAgc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMuc3BsaWNlKGZpbHRlcmVkQ29sdW1ucy5pbmRleE9mKGNvbCksIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW9yZGVyZWRDb2x1bW5zID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHNwZWNpZmljSW5kaWNlc0NvbHVtbnMubGVuZ3RoID4gTWF0aC5tYXgoLi4uaW5kaWNlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBzcGVjaWZpY0luZGljZXNDb2x1bW5zLmNvbmNhdChmaWx0ZXJlZENvbHVtbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kaWNlcy5mb3JFYWNoKChpLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMucHVzaChzcGVjaWZpY0luZGljZXNDb2x1bW5zW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGsgPSBpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoayA8IGxlbmd0aCAmJiByZW9yZGVyZWRDb2x1bW5zW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsraztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5zW2tdID0gc3BlY2lmaWNJbmRpY2VzQ29sdW1uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocmVvcmRlcmVkQ29sdW1uc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlb3JkZXJlZENvbHVtbnNbaV0gPSBmaWx0ZXJlZENvbHVtbnMuc3BsaWNlKDAsIDEpWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW9yZGVyZWRDb2x1bW5zO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZURhdGEoZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgdGhpcy5mbGF0UmVjb3JkcyA9IFtdO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmIGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAoZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApO1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5jb25jYXQoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgfHwgW10pIDogZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgIGNvbnN0IGhhc1NvcnRpbmcgPSBleHByZXNzaW9ucyAmJiBleHByZXNzaW9ucy5sZW5ndGggPiAwO1xuICAgICAgICBsZXQgc2V0U3VtbWFyeU93bmVyID0gZmFsc2U7XG5cbiAgICAgICAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdpZ3gtcGl2b3QtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVQaXZvdEdyaWREYXRhKGdyaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJzoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgc2V0U3VtbWFyeU93bmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2lneC10cmVlLWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlVHJlZUdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlR3JpZERhdGEoZ3JpZCwgaGFzRmlsdGVyaW5nLCBoYXNTb3J0aW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN1bW1hcmllcy5zaXplID4gMCAmJiBncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLmNoaWxkTGV2ZWxzT25seSkge1xuICAgICAgICAgICAgc2V0U3VtbWFyeU93bmVyID9cbiAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhHUklEX1JPT1RfU1VNTUFSWSwgMCwgZmFsc2UsIGdyaWQpIDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhHUklEX1JPT1RfU1VNTUFSWSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVQaXZvdEdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmREYXRhID0gT2JqZWN0LmZyb21FbnRyaWVzKHJlY29yZC5hZ2dyZWdhdGlvblZhbHVlcyk7XG4gICAgICAgICAgICByZWNvcmQuZGltZW5zaW9uVmFsdWVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxLZXkgPSB0aGlzLnBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXBba2V5XTtcbiAgICAgICAgICAgICAgICByZWNvcmREYXRhW2FjdHVhbEtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwaXZvdEdyaWRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVjb3JkRGF0YSxcbiAgICAgICAgICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuUGl2b3RHcmlkUmVjb3JkXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2gocGl2b3RHcmlkUmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCBoYXNGaWx0ZXJpbmc6IGJvb2xlYW4sIGhhc1NvcnRpbmc6IGJvb2xlYW4pIHtcblxuICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhO1xuICAgICAgICAgICAgdGhpcy5hZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gZ3JpZC5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBncmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGRhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihkYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcblxuICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBncmlkLnNvcnRTdHJhdGVneSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCByZWNvcmRzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjaGlsZExheW91dExpc3QgPSBncmlkLmNoaWxkTGF5b3V0TGlzdDtcbiAgICAgICAgY29uc3QgY29sdW1uRmllbGRzID0gdGhpcy5fb3duZXJzTWFwLmdldChncmlkKS5jb2x1bW5zLm1hcChjb2wgPT4gY29sLmZpZWxkKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlVmFsID0gZ3JpZC5leHBhbnNpb25TdGF0ZXMuaGFzKGVudHJ5KSA/IGdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChlbnRyeSkgOiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YVdpdGhvdXRDaGlsZHJlbiA9IE9iamVjdC5rZXlzKGVudHJ5KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBjb2x1bW5GaWVsZHMuaW5jbHVkZXMoaykpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBlbnRyeVtrZXldO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsR3JpZFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhV2l0aG91dENoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZ3JpZCxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lcjogR1JJRF9QQVJFTlRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChoaWVyYXJjaGljYWxHcmlkUmVjb3JkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpc2xhbmQgb2YgY2hpbGRMYXlvdXRMaXN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aDogSVBhdGhTZWdtZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3dJRDogaXNsYW5kLnByaW1hcnlLZXkgPyBlbnRyeVtpc2xhbmQucHJpbWFyeUtleV0gOiBlbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgcm93S2V5OiBpc2xhbmQucHJpbWFyeUtleSA/IGVudHJ5W2lzbGFuZC5wcmltYXJ5S2V5XSA6IGVudHJ5LFxuICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRLZXk6IGlzbGFuZC5rZXlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNsYW5kR3JpZCA9IGdyaWQ/LmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoXSk7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkRGF0YSA9IHRoaXMucHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kLCBpc2xhbmRHcmlkLCBlbnRyeVtpc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kLCBrZXlSZWNvcmREYXRhLCBleHBhbnNpb25TdGF0ZVZhbCwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVTdW1tYXJpZXMoZ3JpZDogYW55KTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPj4ge1xuICAgICAgICBsZXQgc3VtbWFyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgZ3JpZC5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlDYWNoZU1hcCA9IGdyaWQuc3VtbWFyeVNlcnZpY2Uuc3VtbWFyeUNhY2hlTWFwO1xuXG4gICAgICAgICAgICBzd2l0Y2goZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5jaGlsZExldmVsc09ubHk6XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlDYWNoZU1hcC5kZWxldGUoR1JJRF9ST09UX1NVTU1BUlkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHk6XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBzdW1tYXJ5Q2FjaGVNYXAua2V5cygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoayAhPT0gR1JJRF9ST09UX1NVTU1BUlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKGspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdW1tYXJpZXMgPSBzdW1tYXJ5Q2FjaGVNYXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VtbWFyaWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kOiBhbnksIGlzbGFuZEdyaWQ6IEdyaWRUeXBlLCBkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgaWYgKGlzbGFuZEdyaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpc2xhbmRHcmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZEdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZEdyaWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZEdyaWQuc29ydFN0cmF0ZWd5LCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoYXNGaWx0ZXJpbmcgPSAoaXNsYW5kLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgICAgIGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmICghc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihkYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucywgaXNsYW5kLnNvcnRTdHJhdGVneSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kOiBhbnksXG4gICAgICAgIGNoaWxkRGF0YTogYW55W10sIGV4cGFuc2lvblN0YXRlVmFsOiBib29sZWFuLCBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gO1xuICAgICAgICBjb25zdCBjb2x1bW5MaXN0ID0gdGhpcy5fb3duZXJzTWFwLmdldChpc2xhbmQpLmNvbHVtbnM7XG4gICAgICAgIGNvbnN0IGNvbHVtbkhlYWRlciA9IGNvbHVtbkxpc3RcbiAgICAgICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcilcbiAgICAgICAgICAgIC5tYXAoY29sID0+IGNvbC5oZWFkZXIgPyBjb2wuaGVhZGVyIDogY29sLmZpZWxkKTtcblxuICAgICAgICBjb25zdCBoZWFkZXJSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW5IZWFkZXIsXG4gICAgICAgICAgICBsZXZlbDogaXNsYW5kLmxldmVsLFxuICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQsXG4gICAgICAgICAgICBvd25lcjogaXNsYW5kLFxuICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWwsXG4gICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjaGlsZERhdGEgJiYgY2hpbGREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChoZWFkZXJSZWNvcmQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlYyBvZiBjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBvcnRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlYyxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGlzbGFuZC5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICBvd25lcjogaXNsYW5kLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICFleHBhbnNpb25TdGF0ZVZhbCxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0UmVjb3JkLnN1bW1hcnlLZXkgPSBpc2xhbmQua2V5O1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChleHBvcnRSZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzbGFuZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFuZEV4cGFuc2lvblN0YXRlVmFsID0gZ3JpZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhyZWMpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocmVjKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJRDogY2hpbGRJc2xhbmQucHJpbWFyeUtleSA/IHJlY1tjaGlsZElzbGFuZC5wcmltYXJ5S2V5XSA6IHJlYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dLZXk6IGNoaWxkSXNsYW5kLnByaW1hcnlLZXkgPyByZWNbY2hpbGRJc2xhbmQucHJpbWFyeUtleV0gOiByZWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiBjaGlsZElzbGFuZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgZGVmaW5lZCB3aGVuIHJvdyBpcyBleHBhbmRlZCBpbiBVSVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRJc2xhbmRHcmlkID0gZ3JpZD8uZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZERhdGEgPSB0aGlzLnByZXBhcmVJc2xhbmREYXRhKGlzbGFuZCwgY2hpbGRJc2xhbmRHcmlkLCByZWNbY2hpbGRJc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hpbGRDb2x1bW5zQW5kRGF0YShjaGlsZElzbGFuZCwga2V5UmVjb3JkRGF0YSwgaXNsYW5kRXhwYW5zaW9uU3RhdGVWYWwsIGNoaWxkSXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChncmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gdGhpcy5wcmVwYXJlU3VtbWFyaWVzKGdyaWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBzdW1tYXJpZXMua2V5cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBzdW1tYXJpZXMuZ2V0KGspO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhpc2xhbmQua2V5LCBpc2xhbmQubGV2ZWwsICFleHBhbnNpb25TdGF0ZVZhbCwgaXNsYW5kLCBzdW1tYXJ5LCBoaWVyYXJjaGljYWxPd25lcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZTogSUdyb3VwaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICBleHByZXNzaW9uczogZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLFxuICAgICAgICAgICAgZXhwYW5zaW9uOiBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUsXG4gICAgICAgICAgICBkZWZhdWx0RXhwYW5kZWQ6IGdyaWQuZ3JvdXBzRXhwYW5kZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFzR3JvdXBpbmcgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykgJiZcbiAgICAgICAgICAgICghaGFzR3JvdXBpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWQuZ3JvdXBzUmVjb3JkcywgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGbGF0RGF0YShncmlkLmZpbHRlcmVkU29ydGVkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ3JpZERhdGEgPSBncmlkLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgZHJvcCBzdXBwb3J0IGZvciB0aGlzIHNpbmNlIGluIGEgZ3JvdXBlZCBncmlkIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NvcnQgPSAhaXNHcm91cGVkR3JpZCA/XG4gICAgICAgICAgICAgICAgLy8gICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pIDpcbiAgICAgICAgICAgICAgICAvLyAgICAgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzFdKSA6XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5jb25jYXQoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgfHwgW10pIDogZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBEYXRhVXRpbC5zb3J0KGdyaWREYXRhLCBleHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICBEYXRhVXRpbC5ncm91cChjbG9uZUFycmF5KGdyaWREYXRhKSwgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCBncmlkLmdyb3VwU3RyYXRlZ3ksIGdyaWQsIGdyb3Vwc1JlY29yZHMpO1xuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZ3JvdXBzUmVjb3JkcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWREYXRhLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZsYXREYXRhKGdyaWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVRyZWVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkLnByb2Nlc3NlZFJvb3RSZWNvcmRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBncmlkRGF0YSA9IGdyaWQucm9vdFJlY29yZHM7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IChncmlkLmZpbHRlclN0cmF0ZWd5KSA/IGdyaWQuZmlsdGVyU3RyYXRlZ3kgOiBuZXcgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSgpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZmlsdGVyaW5nU3RhdGUuc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUuZXhwcmVzc2lvbnNUcmVlLCBmaWx0ZXJpbmdTdGF0ZS5hZHZhbmNlZEV4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRGF0YVV0aWwudHJlZUdyaWRTb3J0KGdyaWREYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3kpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRyZWVHcmlkRGF0YShyZWNvcmRzOiBJVHJlZUdyaWRSZWNvcmRbXSwgcGFyZW50RXhwYW5kZWQgPSB0cnVlLCBoaWVyYXJjaGljYWxPd25lcj86IHN0cmluZykge1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZC5kYXRhLFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5S2V5OiByZWNvcmQua2V5LFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyOiByZWNvcmQubGV2ZWwgPT09IDAgPyBHUklEX1BBUkVOVCA6IGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2godHJlZUdyaWRSZWNvcmQpO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlR3JpZENoaWxkRGF0YShyZWNvcmQuY2hpbGRyZW4sIHJlY29yZC5rZXksIHJlY29yZC5sZXZlbCwgcmVjb3JkLmV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmVlR3JpZENoaWxkRGF0YShyZWNvcmRDaGlsZHJlbjogSVRyZWVHcmlkUmVjb3JkW10sIGtleTogc3RyaW5nLCBsZXZlbDpudW1iZXIsIHBhcmVudEV4cGFuZGVkID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gXG4gICAgICAgIGxldCBzdW1tYXJ5TGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgbGV0IHN1bW1hcnlIaWRkZW4gPSAhcGFyZW50RXhwYW5kZWQ7XG5cbiAgICAgICAgZm9yIChjb25zdCByYyBvZiByZWNvcmRDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHJjLmNoaWxkcmVuICYmIHJjLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShbcmNdLCBwYXJlbnRFeHBhbmRlZCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlMZXZlbCA9IHJjLmxldmVsO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJjLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiByYy5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWNvcmQuc3VtbWFyeUtleSA9IGtleTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goY3VycmVudFJlY29yZCk7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUxldmVsID0gcmMubGV2ZWw7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUhpZGRlbiA9ICFwYXJlbnRFeHBhbmRlZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhrZXksIHN1bW1hcnlMZXZlbCwgc3VtbWFyeUhpZGRlbiwgbnVsbCwgbnVsbCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGbGF0RGF0YShyZWNvcmRzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFN1bW1hcmllcyhzdW1tYXJ5S2V5OiBzdHJpbmcsIGxldmVsID0gMCwgaGlkZGVuID0gZmFsc2UsIG93bmVyPzogYW55LCBzdW1tYXJ5PzogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiwgaGllcmFyY2hpY2FsT3duZXI/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm9vdFN1bW1hcnkgPSBzdW1tYXJ5ID8/IHRoaXMuc3VtbWFyaWVzLmdldChzdW1tYXJ5S2V5KTtcblxuICAgICAgICBpZiAocm9vdFN1bW1hcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IFsuLi5yb290U3VtbWFyeS52YWx1ZXMoKV07XG4gICAgICAgICAgICBjb25zdCBiaWdnZXN0ID0gdmFsdWVzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpWzBdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpZ2dlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7fVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygcm9vdFN1bW1hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gdmFsdWUubWFwKHMgPT4gKHtsYWJlbDogcy5sYWJlbCwgdmFsdWU6IHMuc3VtbWFyeVJlc3VsdH0pKVxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHN1bW1hcmllc1tpXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBvYmosXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeUtleSxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlSZWNvcmQub3duZXIgPSBvd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goc3VtbWFyeVJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwZWREYXRhKGdyaWQ6IEdyaWRUeXBlLCByZWNvcmRzOiBJR3JvdXBCeVJlY29yZFtdLCBncm91cGluZ1N0YXRlOiBJR3JvdXBpbmdTdGF0ZSwgc2V0R3JpZFBhcmVudDogYm9vbGVhbiwgcGFyZW50RXhwYW5kZWQgPSB0cnVlLCBzdW1tYXJ5S2V5c0Fycjogc3RyaW5nW10gPSBbXSkge1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcmV2aW91c0tleSA9ICcnXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sID0gdGhpcy5fb3duZXJzTWFwLmdldChERUZBVUxUX09XTkVSKS5jb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlciAmJiAhYy5za2lwKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleClbMF0uZmllbGQ7XG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgbGV0IHJlY29yZFZhbCA9IHJlY29yZC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbE93bmVyID0gc2V0R3JpZFBhcmVudCA/IEdSSURfUEFSRU5UIDogYCR7R1JJRF9DSElMRH0keysrdGhpcy5yb3dJc2xhbmRDb3VudGVyfWA7XG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaHkgPSBnZXRIaWVyYXJjaHkocmVjb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZFN0YXRlOiBJR3JvdXBCeUV4cGFuZFN0YXRlID0gZ3JvdXBpbmdTdGF0ZS5leHBhbnNpb24uZmluZCgocykgPT5cbiAgICAgICAgICAgICAgICBpc0hpZXJhcmNoeU1hdGNoKHMuaGllcmFyY2h5IHx8IFt7IGZpZWxkTmFtZTogcmVjb3JkLmV4cHJlc3Npb24uZmllbGROYW1lLCB2YWx1ZTogcmVjb3JkVmFsIH1dLFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoeSxcbiAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kU3RhdGUgPyBleHBhbmRTdGF0ZS5leHBhbmRlZCA6IGdyb3VwaW5nU3RhdGUuZGVmYXVsdEV4cGFuZGVkO1xuXG4gICAgICAgICAgICBjb25zdCBpc0RhdGUgPSByZWNvcmRWYWwgaW5zdGFuY2VvZiBEYXRlO1xuXG4gICAgICAgICAgICBpZiAoaXNEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZVpvbmVPZmZzZXQgPSByZWNvcmRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzb1N0cmluZyA9IChuZXcgRGF0ZShyZWNvcmRWYWwgLSB0aW1lWm9uZU9mZnNldCkpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBEYXRlUGlwZShncmlkLmxvY2FsZSk7XG4gICAgICAgICAgICAgICAgcmVjb3JkVmFsID0gcGlwZS50cmFuc2Zvcm0oaXNvU3RyaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByZXNzaW9uTmFtZSA9IHJlY29yZC5jb2x1bW4gJiYgcmVjb3JkLmNvbHVtbi5oZWFkZXIgP1xuICAgICAgICAgICAgICAgIHJlY29yZC5jb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICByZWNvcmQuZXhwcmVzc2lvbi5maWVsZE5hbWU7XG5cbiAgICAgICAgICAgIHJlY29yZFZhbCA9IHJlY29yZFZhbCAhPT0gbnVsbCA/IHJlY29yZFZhbCA6ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBncm91cEV4cHJlc3Npb246IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogeyBbZmlyc3RDb2xdOiBgJHtncm91cEV4cHJlc3Npb25OYW1lfTogJHtyZWNvcmRWYWwgPz8gJyhCbGFuayknfSAoJHtyZWNvcmQucmVjb3Jkcy5sZW5ndGh9KWAgfSxcbiAgICAgICAgICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogIXBhcmVudEV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZCxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGdyb3VwRXhwcmVzc2lvbik7XG5cbiAgICAgICAgICAgIGxldCBjdXJyS2V5ID0gJyc7XG4gICAgICAgICAgICBsZXQgc3VtbWFyeUtleSA9ICcnO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjdXJyS2V5ID0gYCcke3JlY29yZC5leHByZXNzaW9uLmZpZWxkTmFtZX0nOiAnJHtyZWNvcmRWYWx9J2A7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIgPSBzdW1tYXJ5S2V5c0Fyci5maWx0ZXIoYSA9PiBhICE9PSBwcmV2aW91c0tleSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNLZXkgPSBjdXJyS2V5O1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyLnB1c2goY3VycktleSk7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleSA9IGB7ICR7c3VtbWFyeUtleXNBcnIuam9pbignLCAnKX0gfWA7XG4gICAgICAgICAgICAgICAgZ3JvdXBFeHByZXNzaW9uLnN1bW1hcnlLZXkgPSBzdW1tYXJ5S2V5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCByZWNvcmQuZ3JvdXBzLCBncm91cGluZ1N0YXRlLCBmYWxzZSwgZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQsIHN1bW1hcnlLZXlzQXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93UmVjb3JkcyA9IHJlY29yZC5yZWNvcmRzO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dSZWNvcmQgb2Ygcm93UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcm93UmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VtbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY29yZC5zdW1tYXJ5S2V5ID0gc3VtbWFyeUtleTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChjdXJyZW50UmVjb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKHN1bW1hcnlLZXksIHJlY29yZC5sZXZlbCArIDEsICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLCBudWxsLCBudWxsLCBoaWVyYXJjaGljYWxPd25lcik7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbnMoY29sdW1uczogQ29sdW1uVHlwZVtdKTogSUNvbHVtbkxpc3Qge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gW107XG4gICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IC0xO1xuICAgICAgICBsZXQgbGFzdFZpc2libGVDb2x1bW5JbmRleCA9IC0xO1xuICAgICAgICBsZXQgbWF4TGV2ZWwgPSAwO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSAhRXhwb3J0VXRpbGl0aWVzLmlzTnVsbE9yV2hpdGVzcGFjZXMoY29sdW1uLmhlYWRlcikgPyBjb2x1bW4uaGVhZGVyIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0Q29sdW1uID0gIWNvbHVtbi5oaWRkZW4gfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNWaXNpYmlsaXR5O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/IGNvbHVtbi5pbmRleCA6IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IE51bWJlcihjb2x1bW4ud2lkdGg/LnNsaWNlKDAsIC0yKSkgfHwgREVGQVVMVF9DT0xVTU5fV0lEVEg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5MZXZlbCA9ICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gY29sdW1uLmxldmVsIDogMDtcblxuICAgICAgICAgICAgY29uc3QgaXNNdWx0aUNvbEhlYWRlciA9IGNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGNvbFNwYW4gPSBpc011bHRpQ29sSGVhZGVyID9cbiAgICAgICAgICAgICAgICBjb2x1bW4uYWxsQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjaCA9PiAhKGNoLmNvbHVtbkdyb3VwKSAmJiAoIXRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/ICFjaC5oaWRkZW4gOiB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgMTtcblxuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5mbzogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiBFeHBvcnRVdGlsaXRpZXMuc2FuaXRpemVWYWx1ZShjb2x1bW5IZWFkZXIpLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2x1bW4uZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBza2lwOiAhZXhwb3J0Q29sdW1uLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29sdW1uLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IGlzTXVsdGlDb2xIZWFkZXIgPyBFeHBvcnRIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyIDogRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uU3BhbjogY29sU3BhbixcbiAgICAgICAgICAgICAgICBsZXZlbDogY29sdW1uTGV2ZWwsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6ICFjb2x1bW4ucGlubmVkID9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyLk1BWF9WQUxVRSA6XG4gICAgICAgICAgICAgICAgICAgICFjb2x1bW4uaGlkZGVuID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5ncmlkLnBpbm5lZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE5hTixcbiAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cFBhcmVudDogY29sdW1uLnBhcmVudCA/IGNvbHVtbi5wYXJlbnQgOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBpc011bHRpQ29sSGVhZGVyID8gY29sdW1uIDogbnVsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uY3VycmVuY3lDb2RlID0gY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRMb2NhbGVDdXJyZW5jeUNvZGUodGhpcy5sb2NhbGUpO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaXNwbGF5Rm9ybWF0ID0gY29sdW1uLnBpcGVBcmdzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICA6ICdzeW1ib2wnO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaWdpdHNJbmZvID0gY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICA6ICcxLjAtMic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGF0ZUZvcm1hdCA9IGdldExvY2FsZURhdGVGb3JtYXQodGhpcy5sb2NhbGUsIEZvcm1hdFdpZHRoLk1lZGl1bSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRhdGVGb3JtYXQgPSBnZXRMb2NhbGVEYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgRm9ybWF0V2lkdGguTWVkaXVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zT3JkZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uSW5mby5zdGFydEluZGV4ICE9PSBjb2x1bW5JbmZvLnBpbm5lZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZm8ucGlubmVkSW5kZXggPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5sZXZlbCA+IG1heExldmVsICYmICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb2xMaXN0LnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goY29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSBNYXRoLm1heChsYXN0VmlzaWJsZUNvbHVtbkluZGV4LCBjb2xMaXN0LmluZGV4T2YoY29sdW1uSW5mbykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4ucGlubmVkICYmIGV4cG9ydENvbHVtbiAmJiBjb2x1bW5JbmZvLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4rKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvL0FwcGVuZCB0aGUgaGlkZGVuIGNvbHVtbnMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICBoaWRkZW5Db2x1bW5zLmZvckVhY2goKGhpZGRlbkNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sTGlzdFsrK2xhc3RWaXNpYmxlQ29sdW1uSW5kZXhdID0gaGlkZGVuQ29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4sXG4gICAgICAgICAgICBtYXhMZXZlbFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBIaWVyYXJjaGljYWxHcmlkQ29sdW1ucyhpc2xhbmQ6IGFueSwgZ3JpZERhdGE6IGFueSkge1xuICAgICAgICBsZXQgY29sdW1uTGlzdDogSUNvbHVtbkxpc3Q7XG4gICAgICAgIGxldCBrZXlEYXRhO1xuXG4gICAgICAgIGlmIChpc2xhbmQuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgICAgICBrZXlEYXRhID0gZ3JpZERhdGFbaXNsYW5kLmtleV07XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlzID0gaXNsYW5kLmNoaWxkcmVuLm1hcChpID0+IGkua2V5KTtcblxuICAgICAgICAgICAgY29uc3QgaXNsYW5kRGF0YSA9IGtleURhdGEubWFwKGkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7fTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGkpLm1hcChrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2xhbmRLZXlzLmluY2x1ZGVzKGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtW2tdID0gaVtrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29sdW1uTGlzdCA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbHVtbnMoaXNsYW5kRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRDb2x1bW5MaXN0ID0gaXNsYW5kLmNvbHVtbnM7XG4gICAgICAgICAgICBjb2x1bW5MaXN0ID0gdGhpcy5nZXRDb2x1bW5zKGlzbGFuZENvbHVtbkxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChpc2xhbmQsIGNvbHVtbkxpc3QpO1xuXG4gICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlEYXRhID0ga2V5RGF0YSAhPT0gdW5kZWZpbmVkID8ga2V5RGF0YVswXSA6IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoY2hpbGRJc2xhbmQsIGlzbGFuZEtleURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBdXRvR2VuZXJhdGVkQ29sdW1ucyhkYXRhOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKChjb2xLZXksIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogY29sS2V5LFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2xLZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29sTGlzdC5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IC0xLFxuICAgICAgICAgICAgbWF4TGV2ZWw6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkOiBhbnkpIHtcbiAgICAgICAgaWYgKGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maWx0ZXIociA9PiByLmVuYWJsZWQpLm1hcCgociwgaSkgPT4gKHsgbmFtZTogci5tZW1iZXJOYW1lLCBsZXZlbDogaSB9KSk7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhlbmFibGVkUm93cyk7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQgPSBlbmFibGVkUm93cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUik7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1ucy51bnNoaWZ0KC4uLnRoaXMucGl2b3RHcmlkQ29sdW1ucyk7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1uV2lkdGhzLnVuc2hpZnQoLi4uQXJyYXkodGhpcy5waXZvdEdyaWRDb2x1bW5zLmxlbmd0aCkuZmlsbCgyMDApKTtcbiAgICAgICAgY29sdW1uTGlzdC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IGVuYWJsZWRSb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbHVtbkxpc3QubWF4Um93TGV2ZWwgPSBlbmFibGVkUm93cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhrZXlzOiBhbnksIGNvbHVtbkdyb3VwUGFyZW50Pzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLmZsYXRSZWNvcmRzLm1hcChyID0+IHIuZGF0YSk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZWNvcmRzID0ge307XG5cbiAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IG9ialtrZXkubmFtZV07XG4gICAgICAgICAgICBpZiAoIWdyb3VwZWRSZWNvcmRzW2tleVZhbHVlXSkge1xuICAgICAgICAgICAgICAgIGdyb3VwZWRSZWNvcmRzW2tleVZhbHVlXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba2V5VmFsdWVdLnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNvbHVtbkdyb3VwUGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBtYXBLZXlzID0gWy4uLnRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAua2V5cygpXTtcbiAgICAgICAgICAgIGNvbnN0IG1hcFZhbHVlcyA9IFsuLi50aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLnZhbHVlcygpXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGdyb3VwZWRSZWNvcmRzKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwZWRSZWNvcmRzW2tdID0gZ3JvdXBlZFJlY29yZHNba10uZmlsdGVyKHJvdyA9PiBtYXBLZXlzLmV2ZXJ5KG1rID0+IE9iamVjdC5rZXlzKHJvdykuaW5jbHVkZXMobWspKVxuICAgICAgICAgICAgICAgICAgICAmJiBtYXBWYWx1ZXMuZXZlcnkobXYgPT4gT2JqZWN0LnZhbHVlcyhyb3cpLmluY2x1ZGVzKG12KSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlY29yZHNba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGdyb3VwZWRSZWNvcmRzKSkge1xuICAgICAgICAgICAgY29uc3Qgcm93U3BhbiA9IGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aDtcblxuICAgICAgICAgICAgY29uc3Qgcm93RGltZW5zaW9uQ29sdW1uOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICByb3dTcGFuLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogayxcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgIGxldmVsOiBrZXkubGV2ZWwsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aCA+IDEgPyBFeHBvcnRIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyIDogRXhwb3J0SGVhZGVyVHlwZS5Sb3dIZWFkZXIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uR3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25Db2x1bW4uY29sdW1uR3JvdXBQYXJlbnQgPSBjb2x1bW5Hcm91cFBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93RGltZW5zaW9uQ29sdW1uLmNvbHVtbkdyb3VwID0gaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRDb2x1bW5zLnB1c2gocm93RGltZW5zaW9uQ29sdW1uKTtcblxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAuc2V0KGtleS5uYW1lLCBrKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdLZXlzID0ga2V5cy5maWx0ZXIoa2RkID0+IGtkZCAhPT0ga2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVQaXZvdEdyaWRDb2x1bW5zKG5ld0tleXMsIGspXG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5kZWxldGUoa2V5Lm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydEluZGV4ICs9IHJvd1NwYW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExldmVsQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5mb3JFYWNoKG9tID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXZlbENvbDogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogR1JJRF9MRVZFTF9DT0wsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEdSSURfTEVWRUxfQ09MLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5TcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgb20uY29sdW1ucy5wdXNoKGxldmVsQ29sKTtcbiAgICAgICAgICAgICAgICBvbS5jb2x1bW5XaWR0aHMucHVzaCgyMCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRMZXZlbERhdGEoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwb3J0U3VtbWFyaWVzICYmIHRoaXMuc3VtbWFyaWVzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgciBvZiB0aGlzLmZsYXRSZWNvcmRzKXtcbiAgICAgICAgICAgICAgICBpZiAoci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQgfHwgci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLlRyZWVHcmlkUmVjb3JkIHx8IHIudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIHIuZGF0YVtHUklEX0xFVkVMX0NPTF0gPSByLmxldmVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXREZWZhdWx0cygpIHtcbiAgICAgICAgdGhpcy5fc29ydCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge30gYXMgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZTtcbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQ291bnRlciA9IDA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSwgZG9uZTogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG4iXX0=
|
|
1068
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFrQixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQXNCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3QixtREFBK0IsQ0FBQTtJQUMvQix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQVEzQjtBQUVELE1BQU0s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LENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUE7U0FDTDtJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELEtBQUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBQztnQkFDNUIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFO29CQUM1SSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQ3BDO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBNEIsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUdKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBjbG9uZVZhbHVlLCBJQmFzZUV2ZW50QXJncywgcmVzb2x2ZU5lc3RlZFBhdGgsIHlpZWxkaW5nTG9vcCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlLCBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgRXhwb3J0VXRpbGl0aWVzIH0gZnJvbSAnLi9leHBvcnQtdXRpbGl0aWVzJztcbmltcG9ydCB7IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UgfSBmcm9tICcuL2V4cG9ydGVyLW9wdGlvbnMtYmFzZSc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuLi8uLi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQuZmlsdGVyaW5nLnN0cmF0ZWd5JztcbmltcG9ydCB7IElHcm91cGluZ1N0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldEhpZXJhcmNoeSwgaXNIaWVyYXJjaHlNYXRjaCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9vcGVyYXRpb25zJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGaWx0ZXJpbmdTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IERhdGVQaXBlLCBGb3JtYXRXaWR0aCwgZ2V0TG9jYWxlQ3VycmVuY3lDb2RlLCBnZXRMb2NhbGVEYXRlRm9ybWF0LCBnZXRMb2NhbGVEYXRlVGltZUZvcm1hdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElQYXRoU2VnbWVudCB9IGZyb20gJy4uLy4uL2dyaWRzL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWx0ZXJVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi4vLi4vZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSB9IGZyb20gJy4uLy4uL2dyaWRzL2NvbW1vbi9lbnVtcyc7XG5cbmV4cG9ydCBlbnVtIEV4cG9ydFJlY29yZFR5cGUge1xuICAgIEdyb3VwZWRSZWNvcmQgPSAnR3JvdXBlZFJlY29yZCcsXG4gICAgVHJlZUdyaWRSZWNvcmQgPSAnVHJlZUdyaWRSZWNvcmQnLFxuICAgIERhdGFSZWNvcmQgPSAnRGF0YVJlY29yZCcsXG4gICAgSGllcmFyY2hpY2FsR3JpZFJlY29yZCA9ICdIaWVyYXJjaGljYWxHcmlkUmVjb3JkJyxcbiAgICBIZWFkZXJSZWNvcmQgPSAnSGVhZGVyUmVjb3JkJyxcbiAgICBTdW1tYXJ5UmVjb3JkID0gJ1N1bW1hcnlSZWNvcmQnLFxuICAgIFBpdm90R3JpZFJlY29yZCA9ICdQaXZvdEdyaWRSZWNvcmQnXG59XG5cbmV4cG9ydCBlbnVtIEV4cG9ydEhlYWRlclR5cGUge1xuICAgIFJvd0hlYWRlciA9ICdSb3dIZWFkZXInLFxuICAgIENvbHVtbkhlYWRlciA9ICdDb2x1bW5IZWFkZXInLFxuICAgIE11bHRpUm93SGVhZGVyID0gJ011bHRpUm93SGVhZGVyJyxcbiAgICBNdWx0aUNvbHVtbkhlYWRlciA9ICdNdWx0aUNvbHVtbkhlYWRlcicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUV4cG9ydFJlY29yZCB7XG4gICAgZGF0YTogYW55O1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZTtcbiAgICBvd25lcj86IHN0cmluZyB8IEdyaWRUeXBlO1xuICAgIGhpZGRlbj86IGJvb2xlYW47XG4gICAgc3VtbWFyeUtleT86IHN0cmluZztcbiAgICBoaWVyYXJjaGljYWxPd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uTGlzdCB7XG4gICAgY29sdW1uczogSUNvbHVtbkluZm9bXTtcbiAgICBjb2x1bW5XaWR0aHM6IG51bWJlcltdO1xuICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uOiBudW1iZXI7XG4gICAgbWF4TGV2ZWw/OiBudW1iZXI7XG4gICAgbWF4Um93TGV2ZWw/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkluZm8ge1xuICAgIGhlYWRlcjogc3RyaW5nO1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgc2tpcDogYm9vbGVhbjtcbiAgICBkYXRhVHlwZT86IEdyaWRDb2x1bW5EYXRhVHlwZTtcbiAgICBza2lwRm9ybWF0dGVyPzogYm9vbGVhbjtcbiAgICBmb3JtYXR0ZXI/OiBhbnk7XG4gICAgaGVhZGVyVHlwZT86IEV4cG9ydEhlYWRlclR5cGU7XG4gICAgc3RhcnRJbmRleD86IG51bWJlcjtcbiAgICBjb2x1bW5TcGFuPzogbnVtYmVyO1xuICAgIHJvd1NwYW4/OiBudW1iZXI7XG4gICAgbGV2ZWw/OiBudW1iZXI7XG4gICAgZXhwb3J0SW5kZXg/OiBudW1iZXI7XG4gICAgcGlubmVkSW5kZXg/OiBudW1iZXI7XG4gICAgY29sdW1uR3JvdXBQYXJlbnQ/OiBDb2x1bW5UeXBlIHwgc3RyaW5nO1xuICAgIGNvbHVtbkdyb3VwPzogQ29sdW1uVHlwZSB8IHN0cmluZztcbiAgICBjdXJyZW5jeUNvZGU/OiBzdHJpbmc7XG4gICAgZGlzcGxheUZvcm1hdD86IHN0cmluZztcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuICAgIGRpZ2l0c0luZm8/OiBzdHJpbmc7XG59XG4vKipcbiAqIHJvd0V4cG9ydGluZyBldmVudCBhcmd1bWVudHNcbiAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLnJvd0V4cG9ydGluZy5zdWJzY3JpYmUoKGFyZ3M6IElSb3dFeHBvcnRpbmdFdmVudEFyZ3MpID0+IHtcbiAqIC8vIHNldCBhcmdzIHByb3BlcnRpZXMgaGVyZVxuICogfSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm93RXhwb3J0aW5nRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGRhdGFcbiAgICAgKi9cbiAgICByb3dEYXRhOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIHJvdyBpbmRleFxuICAgICAqL1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBTa2lwIHRoZSBleHBvcnRpbmcgcm93IHdoZW4gc2V0IHRvIHRydWVcbiAgICAgKi9cbiAgICBjYW5jZWw6IGJvb2xlYW47XG59XG5cbi8qKlxuICogY29sdW1uRXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogYGBgdHlwZXNjcmlwdFxuICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaGVhZGVyXG4gICAgICovXG4gICAgaGVhZGVyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBmaWVsZCBuYW1lXG4gICAgICovXG4gICAgZmllbGQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGluZGV4XG4gICAgICovXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyBjb2x1bW4gd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEV4cG9ydCB0aGUgY29sdW1uJ3MgZGF0YSB3aXRob3V0IGFwcGx5aW5nIGl0cyBmb3JtYXR0ZXIsIHdoZW4gc2V0IHRvIHRydWVcbiAgICAgKi9cbiAgICBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdyaWQgb3duZXIuXG4gICAgICovXG4gICAgZ3JpZD86IEdyaWRUeXBlO1xufVxuXG4vKipoaWRkZW5cbiAqIEEgaGVscGVyIGNsYXNzIHVzZWQgdG8gaWRlbnRpZnkgd2hldGhlciB0aGUgdXNlciBoYXMgc2V0IGEgc3BlY2lmaWMgY29sdW1uSW5kZXhcbiAqIGR1cmluZyBjb2x1bW5FeHBvcnRpbmcsIHNvIHdlIGNhbiBob25vciBpdCBhdCB0aGUgZXhwb3J0ZWQgZmlsZS5cbiovXG5jbGFzcyBJZ3hDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MgaW1wbGVtZW50cyBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzIHtcbiAgICBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gICAgcHVibGljIGZpZWxkOiBzdHJpbmc7XG4gICAgcHVibGljIGNhbmNlbDogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2tpcEZvcm1hdHRlcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgZ3JpZD86IEdyaWRUeXBlO1xuICAgIHB1YmxpYyBvd25lcj86IGFueTtcbiAgICBwdWJsaWMgdXNlclNldEluZGV4PyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfY29sdW1uSW5kZXg/OiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5JbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNvbHVtbkluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51c2VyU2V0SW5kZXggPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFsOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyID0gb3JpZ2luYWwuaGVhZGVyO1xuICAgICAgICB0aGlzLmZpZWxkID0gb3JpZ2luYWwuZmllbGQ7XG4gICAgICAgIHRoaXMuY2FuY2VsID0gb3JpZ2luYWwuY2FuY2VsO1xuICAgICAgICB0aGlzLnNraXBGb3JtYXR0ZXIgPSBvcmlnaW5hbC5za2lwRm9ybWF0dGVyO1xuICAgICAgICB0aGlzLmdyaWQgPSBvcmlnaW5hbC5ncmlkO1xuICAgICAgICB0aGlzLm93bmVyID0gb3JpZ2luYWwub3duZXI7XG4gICAgICAgIHRoaXMuX2NvbHVtbkluZGV4ID0gb3JpZ2luYWwuY29sdW1uSW5kZXg7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PV05FUiA9ICdkZWZhdWx0JztcbmV4cG9ydCBjb25zdCBHUklEX1JPT1RfU1VNTUFSWSA9ICdpZ3hHcmlkUm9vdFN1bW1hcnknO1xuZXhwb3J0IGNvbnN0IEdSSURfUEFSRU5UID0gJ2dyaWQtcGFyZW50JztcbmV4cG9ydCBjb25zdCBHUklEX0xFVkVMX0NPTCA9ICdHUklEX0xFVkVMX0NPTCc7XG5jb25zdCBERUZBVUxUX0NPTFVNTl9XSURUSCA9IDguNDM7XG5jb25zdCBHUklEX0NISUxEID0gJ2dyaWQtY2hpbGQtJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElneEJhc2VFeHBvcnRlciB7XG5cbiAgICBwdWJsaWMgZXhwb3J0RW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gYSByb3cgaXMgZXhwb3J0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLnJvd0V4cG9ydGluZy5zdWJzY3JpYmUoKGFyZ3M6IElSb3dFeHBvcnRpbmdFdmVudEFyZ3MpID0+IHtcbiAgICAgKiAvLyBwdXQgZXZlbnQgaGFuZGxlciBjb2RlIGhlcmVcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hCYXNlRXhwb3J0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RXhwb3J0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RXhwb3J0aW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gYSBjb2x1bW4gaXMgZXhwb3J0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmNvbHVtbkV4cG9ydGluZy5zdWJzY3JpYmUoKGFyZ3M6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpID0+IHtcbiAgICAgKiAvLyBwdXQgZXZlbnQgaGFuZGxlciBjb2RlIGhlcmVcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hCYXNlRXhwb3J0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uRXhwb3J0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzPigpO1xuXG4gICAgcHJvdGVjdGVkIF9zb3J0ID0gbnVsbDtcbiAgICBwcm90ZWN0ZWQgcGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQ6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX293bmVyc01hcDogTWFwPGFueSwgSUNvbHVtbkxpc3Q+ID0gbmV3IE1hcDxhbnksIElDb2x1bW5MaXN0PigpO1xuXG4gICAgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZ1xuICAgIHByaXZhdGUgX3NldENoaWxkU3VtbWFyaWVzID0gZmFsc2VcbiAgICBwcml2YXRlIGlzUGl2b3RHcmlkRXhwb3J0OiBib29sZWFuO1xuICAgIHByaXZhdGUgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZTtcbiAgICBwcml2YXRlIHN1bW1hcmllczogTWFwPHN0cmluZywgTWFwPHN0cmluZywgYW55W10+PiA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+PigpO1xuICAgIHByaXZhdGUgcm93SXNsYW5kQ291bnRlciA9IC0xO1xuICAgIHByaXZhdGUgZmxhdFJlY29yZHM6IElFeHBvcnRSZWNvcmRbXSA9IFtdO1xuICAgIHByaXZhdGUgcGl2b3RHcmlkQ29sdW1uczogSUNvbHVtbkluZm9bXSA9IFtdXG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByaXZhdGUgcGl2b3RHcmlkS2V5VmFsdWVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgb3duZXJHcmlkOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBJZ3hHcmlkIGNvbXBvbmVudCdzIGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLmlneEdyaWRGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydChncmlkOiBhbnksIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubG9jYWxlID0gZ3JpZC5sb2NhbGU7XG4gICAgICAgIHRoaXMub3duZXJHcmlkID0gZ3JpZDtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBncmlkLmNvbHVtbnM7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVNdWx0aUNvbHVtbkhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmNoaWxkcmVuID09PSB1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuZ2V0Q29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnKSB7XG4gICAgICAgICAgICB0aGlzLl9vd25lcnNNYXAuc2V0KGdyaWQsIGNvbHVtbkxpc3QpO1xuXG4gICAgICAgICAgICBjb25zdCBjaGlsZExheW91dExpc3QgPSBncmlkLmNoaWxkTGF5b3V0TGlzdDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpc2xhbmQgb2YgY2hpbGRMYXlvdXRMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBIaWVyYXJjaGljYWxHcmlkQ29sdW1ucyhpc2xhbmQsIGdyaWQuZGF0YVswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gJ2lneC1waXZvdC1ncmlkJykge1xuICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRDb2x1bW5zID0gW107XG4gICAgICAgICAgICB0aGlzLmlzUGl2b3RHcmlkRXhwb3J0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgICAgICAgICAgZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maWx0ZXIociA9PiByLmVuYWJsZWQpLmZvckVhY2gocm93RGltZW5zaW9uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvUm93RGltZW5zaW9uc01hcChyb3dEaW1lbnNpb24sIHJvd0RpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9vd25lcnNNYXAuc2V0KERFRkFVTFRfT1dORVIsIGNvbHVtbkxpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3VtbWFyaWVzID0gdGhpcy5wcmVwYXJlU3VtbWFyaWVzKGdyaWQpO1xuICAgICAgICB0aGlzLl9zZXRDaGlsZFN1bW1hcmllcyA9ICB0aGlzLnN1bW1hcmllcy5zaXplID4gMSAmJiBncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHk7XG5cbiAgICAgICAgdGhpcy5hZGRMZXZlbENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlRGF0YShncmlkKTtcbiAgICAgICAgdGhpcy5hZGRMZXZlbERhdGEoKTtcbiAgICAgICAgdGhpcy5hZGRQaXZvdEdyaWRDb2x1bW5zKGdyaWQpO1xuICAgICAgICB0aGlzLmV4cG9ydEdyaWRSZWNvcmRzRGF0YSh0aGlzLmZsYXRSZWNvcmRzLCBncmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBhbnkga2luZCBvZiBhcnJheSBkYXRhLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmV4cG9ydGVyU2VydmljZS5leHBvcnREYXRhKHRoaXMuYXJyYXlGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydERhdGEoZGF0YTogYW55W10sIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IGRhdGEubWFwKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IGQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmV4cG9ydEdyaWRSZWNvcmRzRGF0YShyZWNvcmRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvUm93RGltZW5zaW9uc01hcChyb3dEaW1lbnNpb246IGFueSwgcm9vdFBhcmVudE5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXBbcm93RGltZW5zaW9uLm1lbWJlck5hbWVdID0gcm9vdFBhcmVudE5hbWU7XG4gICAgICAgIGlmIChyb3dEaW1lbnNpb24uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLmNoaWxkTGV2ZWwsIHJvb3RQYXJlbnROYW1lKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBvcnRHcmlkUmVjb3Jkc0RhdGEocmVjb3JkczogSUV4cG9ydFJlY29yZFtdLCBncmlkPzogR3JpZFR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX293bmVyc01hcC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRzRGF0YSA9IHJlY29yZHMuZmlsdGVyKHIgPT4gci50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQpLm1hcChyID0+IHIuZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gRXhwb3J0VXRpbGl0aWVzLmdldEtleXNGcm9tRGF0YShyZWNvcmRzRGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0ga2V5cy5tYXAoKGspID0+XG4gICAgICAgICAgICAgICAgKHsgaGVhZGVyOiBrLCBmaWVsZDogaywgc2tpcDogZmFsc2UsIGhlYWRlclR5cGU6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLCBsZXZlbDogMCwgY29sdW1uU3BhbjogMSB9KSk7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSBuZXcgQXJyYXk8bnVtYmVyPihrZXlzLmxlbmd0aCkuZmlsbChERUZBVUxUX0NPTFVNTl9XSURUSCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1hcFJlY29yZDogSUNvbHVtbkxpc3QgPSB7XG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aHMsXG4gICAgICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IC0xLFxuICAgICAgICAgICAgICAgIG1heExldmVsOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLl9vd25lcnNNYXAuc2V0KERFRkFVTFRfT1dORVIsIG1hcFJlY29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2hvdWxkUmVvcmRlckNvbHVtbnMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBtYXBSZWNvcmRdIG9mIHRoaXMuX293bmVyc01hcCkge1xuICAgICAgICAgICAgbGV0IHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQgPSAwO1xuICAgICAgICAgICAgbGV0IGNvbHVtbnNXaXRob3V0SGVhZGVyQ291bnQgPSAxO1xuICAgICAgICAgICAgbGV0IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uID0gbWFwUmVjb3JkLmluZGV4T2ZMYXN0UGlubmVkQ29sdW1uO1xuXG4gICAgICAgICAgICBtYXBSZWNvcmQuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5FeHBvcnRBcmdzOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiAhRXhwb3J0VXRpbGl0aWVzLmlzTnVsbE9yV2hpdGVzcGFjZXMoY29sdW1uLmhlYWRlcikgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb2x1bW4nICsgY29sdW1uc1dpdGhvdXRIZWFkZXJDb3VudCsrLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IGtleSA9PT0gREVGQVVMVF9PV05FUiA/IGdyaWQgOiBrZXlcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5FeHBvcnRBcmdzID0gbmV3IElneENvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyhjb2x1bW5FeHBvcnRBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5FeHBvcnRpbmcuZW1pdChuZXdDb2x1bW5FeHBvcnRBcmdzKTtcblxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyID0gbmV3Q29sdW1uRXhwb3J0QXJncy5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5za2lwID0gbmV3Q29sdW1uRXhwb3J0QXJncy5jYW5jZWw7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5za2lwRm9ybWF0dGVyID0gbmV3Q29sdW1uRXhwb3J0QXJncy5za2lwRm9ybWF0dGVyO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdDb2x1bW5FeHBvcnRBcmdzLnVzZXJTZXRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmV4cG9ydEluZGV4ID0gbmV3Q29sdW1uRXhwb3J0QXJncy5jb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFJlb3JkZXJDb2x1bW5zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtblNwYW5zKGNvbHVtbiwgbWFwUmVjb3JkLCBjb2x1bW4uY29sdW1uU3Bhbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vblNraXBwZWRDb2x1bW5zID0gbWFwUmVjb3JkLmNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub25Ta2lwcGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLmdldChrZXkpLm1heExldmVsID0gbm9uU2tpcHBlZENvbHVtbnMuc29ydCgoYSwgYikgPT4gYi5sZXZlbCAtIGEubGV2ZWwpWzBdLmxldmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NvcnQgJiYgdGhpcy5fc29ydC5maWVsZE5hbWUgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQuZmllbGROYW1lID0gY29sdW1uLmhlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiAtPSBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50O1xuXG4gICAgICAgICAgICAvLyBSZW9yZGVyIGNvbHVtbnMgb25seSBpZiBhIGNvbHVtbiBoYXMgYmVlbiBhc3NpZ25lZCBhIHNwZWNpZmljIGNvbHVtbkluZGV4IGR1cmluZyBjb2x1bW5FeHBvcnRpbmcgZXZlbnRcbiAgICAgICAgICAgIGlmIChzaG91bGRSZW9yZGVyQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIG1hcFJlY29yZC5jb2x1bW5zID0gdGhpcy5yZW9yZGVyQ29sdW1ucyhtYXBSZWNvcmQuY29sdW1ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhVG9FeHBvcnQgPSBuZXcgQXJyYXk8SUV4cG9ydFJlY29yZD4oKTtcbiAgICAgICAgY29uc3QgYWN0dWFsRGF0YSA9IHJlY29yZHNbMF0/LmRhdGE7XG4gICAgICAgIGNvbnN0IGlzU3BlY2lhbERhdGEgPSBFeHBvcnRVdGlsaXRpZXMuaXNTcGVjaWFsRGF0YShhY3R1YWxEYXRhKTtcblxuICAgICAgICB5aWVsZGluZ0xvb3AocmVjb3Jkcy5sZW5ndGgsIDEwMCwgKGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJlY29yZHNbaV07XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFJvdyhkYXRhVG9FeHBvcnQsIHJvdywgaSwgaXNTcGVjaWFsRGF0YSk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YUltcGxlbWVudGF0aW9uKGRhdGFUb0V4cG9ydCwgdGhpcy5vcHRpb25zLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldERlZmF1bHRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVDb2x1bW5TcGFucyhjb2x1bW46IElDb2x1bW5JbmZvLCBtYXBSZWNvcmQ6IElDb2x1bW5MaXN0LCBzcGFuOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyICYmIGNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cENoaWxkcmVuID0gbWFwUmVjb3JkLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5jb2x1bW5Hcm91cFBhcmVudCA9PT0gY29sdW1uLmNvbHVtbkdyb3VwKTtcblxuICAgICAgICAgICAgY29sdW1uR3JvdXBDaGlsZHJlbi5mb3JFYWNoKGNnYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNnYy5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5jb2x1bW5TcGFuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY2djLmNvbHVtbkdyb3VwUGFyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY2djLnNraXAgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnMoY2djLCBtYXBSZWNvcmQsIGNnYy5jb2x1bW5TcGFuKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjZ2Muc2tpcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXRDb2wgPSBtYXBSZWNvcmQuY29sdW1ucy5maWx0ZXIoYyA9PiBjb2x1bW4uY29sdW1uR3JvdXBQYXJlbnQgIT09IG51bGwgJiYgY29sdW1uLmNvbHVtbkdyb3VwUGFyZW50ICE9PSB1bmRlZmluZWQgJiYgYy5jb2x1bW5Hcm91cCA9PT0gY29sdW1uLmNvbHVtbkdyb3VwUGFyZW50KVswXTtcbiAgICAgICAgaWYgKHRhcmdldENvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2wuY29sdW1uU3BhbiAtPSBzcGFuO1xuXG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29sLmNvbHVtbkdyb3VwUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyh0YXJnZXRDb2wsIG1hcFJlY29yZCwgc3Bhbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRDb2wuY29sdW1uU3BhbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRhcmdldENvbC5za2lwID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwb3J0Um93KGRhdGE6IElFeHBvcnRSZWNvcmRbXSwgcmVjb3JkOiBJRXhwb3J0UmVjb3JkLCBpbmRleDogbnVtYmVyLCBpc1NwZWNpYWxEYXRhOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghaXNTcGVjaWFsRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3duZXIgPSByZWNvcmQub3duZXIgPT09IHVuZGVmaW5lZCA/IERFRkFVTFRfT1dORVIgOiByZWNvcmQub3duZXI7XG4gICAgICAgICAgICBjb25zdCBvd25lckNvbHMgPSB0aGlzLl9vd25lcnNNYXAuZ2V0KG93bmVyKS5jb2x1bW5zO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IG93bmVyQ29sc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlciAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgcmVjb3JkLmRhdGEgPSBjb2x1bW5zLnJlZHVjZSgoYSwgZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJhd1ZhbHVlID0gcmVzb2x2ZU5lc3RlZFBhdGgocmVjb3JkLmRhdGEsIGUuZmllbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRBcHBseUZvcm1hdHRlciA9IGUuZm9ybWF0dGVyICYmICFlLnNraXBGb3JtYXR0ZXIgJiYgcmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT2ZEYXRlVHlwZSA9IGUuZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBlLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnIHx8IGUuZGF0YVR5cGUgPT09ICd0aW1lJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2ZEYXRlVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShyYXdWYWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXNob3VsZEFwcGx5Rm9ybWF0dGVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgPSBuZXcgRGF0ZShyYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuZGF0YVR5cGUgPT09ICdzdHJpbmcnICYmIHJhd1ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlID0gcmF3VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gc2hvdWxkQXBwbHlGb3JtYXR0ZXIgPyBlLmZvcm1hdHRlcihyYXdWYWx1ZSwgcmVjb3JkLmRhdGEpIDogcmF3VmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGl2b3RHcmlkRXhwb3J0ICYmICFpc05hTihwYXJzZUZsb2F0KGZvcm1hdHRlZFZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhW2UuZmllbGRdID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEhlYWRlcnMgPSBvd25lckNvbHMuZmlsdGVyKGMgPT4gYy5za2lwKS5tYXAoYyA9PiBjLmhlYWRlciA/IGMuaGVhZGVyIDogYy5maWVsZCk7XG4gICAgICAgICAgICAgICAgcmVjb3JkLmRhdGEgPSByZWNvcmQuZGF0YS5maWx0ZXIoZCA9PiBmaWx0ZXJlZEhlYWRlcnMuaW5kZXhPZihkKSA9PT0gLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0RhdGE6IHJlY29yZC5kYXRhLFxuICAgICAgICAgICAgcm93SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyOiByZWNvcmQub3duZXIgPz8gdGhpcy5vd25lckdyaWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJvd0V4cG9ydGluZy5lbWl0KHJvd0FyZ3MpO1xuXG4gICAgICAgIGlmICghcm93QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW9yZGVyQ29sdW1ucyhjb2x1bW5zOiBJQ29sdW1uSW5mb1tdKTogSUNvbHVtbkluZm9bXSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGZpbHRlcmVkQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljSW5kaWNlc0NvbHVtbnMgPSBmaWx0ZXJlZENvbHVtbnMuZmlsdGVyKChjb2wpID0+ICFpc05hTihjb2wuZXhwb3J0SW5kZXgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsYikgPT4gYS5leHBvcnRJbmRleCAtIGIuZXhwb3J0SW5kZXgpO1xuICAgICAgICBjb25zdCBpbmRpY2VzID0gc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5tYXAoY29sID0+IGNvbC5leHBvcnRJbmRleCk7XG5cbiAgICAgICAgc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMuc3BsaWNlKGZpbHRlcmVkQ29sdW1ucy5pbmRleE9mKGNvbCksIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW9yZGVyZWRDb2x1bW5zID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHNwZWNpZmljSW5kaWNlc0NvbHVtbnMubGVuZ3RoID4gTWF0aC5tYXgoLi4uaW5kaWNlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBzcGVjaWZpY0luZGljZXNDb2x1bW5zLmNvbmNhdChmaWx0ZXJlZENvbHVtbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kaWNlcy5mb3JFYWNoKChpLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMucHVzaChzcGVjaWZpY0luZGljZXNDb2x1bW5zW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGsgPSBpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoayA8IGxlbmd0aCAmJiByZW9yZGVyZWRDb2x1bW5zW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsraztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5zW2tdID0gc3BlY2lmaWNJbmRpY2VzQ29sdW1uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocmVvcmRlcmVkQ29sdW1uc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlb3JkZXJlZENvbHVtbnNbaV0gPSBmaWx0ZXJlZENvbHVtbnMuc3BsaWNlKDAsIDEpWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW9yZGVyZWRDb2x1bW5zO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZURhdGEoZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgdGhpcy5mbGF0UmVjb3JkcyA9IFtdO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmIGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAoZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApO1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5jb25jYXQoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgfHwgW10pIDogZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgIGNvbnN0IGhhc1NvcnRpbmcgPSBleHByZXNzaW9ucyAmJiBleHByZXNzaW9ucy5sZW5ndGggPiAwO1xuICAgICAgICBsZXQgc2V0U3VtbWFyeU93bmVyID0gZmFsc2U7XG5cbiAgICAgICAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdpZ3gtcGl2b3QtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVQaXZvdEdyaWREYXRhKGdyaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJzoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgc2V0U3VtbWFyeU93bmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2lneC10cmVlLWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlVHJlZUdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlR3JpZERhdGEoZ3JpZCwgaGFzRmlsdGVyaW5nLCBoYXNTb3J0aW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN1bW1hcmllcy5zaXplID4gMCAmJiBncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLmNoaWxkTGV2ZWxzT25seSkge1xuICAgICAgICAgICAgc2V0U3VtbWFyeU93bmVyID9cbiAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhHUklEX1JPT1RfU1VNTUFSWSwgMCwgZmFsc2UsIGdyaWQpIDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhHUklEX1JPT1RfU1VNTUFSWSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVQaXZvdEdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmREYXRhID0gT2JqZWN0LmZyb21FbnRyaWVzKHJlY29yZC5hZ2dyZWdhdGlvblZhbHVlcyk7XG4gICAgICAgICAgICByZWNvcmQuZGltZW5zaW9uVmFsdWVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxLZXkgPSB0aGlzLnBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXBba2V5XTtcbiAgICAgICAgICAgICAgICByZWNvcmREYXRhW2FjdHVhbEtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwaXZvdEdyaWRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVjb3JkRGF0YSxcbiAgICAgICAgICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuUGl2b3RHcmlkUmVjb3JkXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2gocGl2b3RHcmlkUmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCBoYXNGaWx0ZXJpbmc6IGJvb2xlYW4sIGhhc1NvcnRpbmc6IGJvb2xlYW4pIHtcblxuICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhO1xuICAgICAgICAgICAgdGhpcy5hZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gZ3JpZC5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBncmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGRhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihkYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcblxuICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBncmlkLnNvcnRTdHJhdGVneSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCByZWNvcmRzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjaGlsZExheW91dExpc3QgPSBncmlkLmNoaWxkTGF5b3V0TGlzdDtcbiAgICAgICAgY29uc3QgY29sdW1uRmllbGRzID0gdGhpcy5fb3duZXJzTWFwLmdldChncmlkKS5jb2x1bW5zLm1hcChjb2wgPT4gY29sLmZpZWxkKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlVmFsID0gZ3JpZC5leHBhbnNpb25TdGF0ZXMuaGFzKGVudHJ5KSA/IGdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChlbnRyeSkgOiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YVdpdGhvdXRDaGlsZHJlbiA9IE9iamVjdC5rZXlzKGVudHJ5KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBjb2x1bW5GaWVsZHMuaW5jbHVkZXMoaykpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBlbnRyeVtrZXldO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsR3JpZFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhV2l0aG91dENoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZ3JpZCxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lcjogR1JJRF9QQVJFTlRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChoaWVyYXJjaGljYWxHcmlkUmVjb3JkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpc2xhbmQgb2YgY2hpbGRMYXlvdXRMaXN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aDogSVBhdGhTZWdtZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3dJRDogaXNsYW5kLnByaW1hcnlLZXkgPyBlbnRyeVtpc2xhbmQucHJpbWFyeUtleV0gOiBlbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgcm93S2V5OiBpc2xhbmQucHJpbWFyeUtleSA/IGVudHJ5W2lzbGFuZC5wcmltYXJ5S2V5XSA6IGVudHJ5LFxuICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRLZXk6IGlzbGFuZC5rZXlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNsYW5kR3JpZCA9IGdyaWQ/LmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoXSk7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkRGF0YSA9IHRoaXMucHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kLCBpc2xhbmRHcmlkLCBlbnRyeVtpc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kLCBrZXlSZWNvcmREYXRhLCBleHBhbnNpb25TdGF0ZVZhbCwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVTdW1tYXJpZXMoZ3JpZDogYW55KTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPj4ge1xuICAgICAgICBsZXQgc3VtbWFyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgZ3JpZC5zdW1tYXJ5U2VydmljZS5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlDYWNoZU1hcCA9IGdyaWQuc3VtbWFyeVNlcnZpY2Uuc3VtbWFyeUNhY2hlTWFwO1xuXG4gICAgICAgICAgICBzd2l0Y2goZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5jaGlsZExldmVsc09ubHk6XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlDYWNoZU1hcC5kZWxldGUoR1JJRF9ST09UX1NVTU1BUlkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHk6XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBzdW1tYXJ5Q2FjaGVNYXAua2V5cygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoayAhPT0gR1JJRF9ST09UX1NVTU1BUlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKGspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdW1tYXJpZXMgPSBzdW1tYXJ5Q2FjaGVNYXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VtbWFyaWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kOiBhbnksIGlzbGFuZEdyaWQ6IEdyaWRUeXBlLCBkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgaWYgKGlzbGFuZEdyaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpc2xhbmRHcmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZEdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZEdyaWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZEdyaWQuc29ydFN0cmF0ZWd5LCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoYXNGaWx0ZXJpbmcgPSAoaXNsYW5kLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgICAgIGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmICghc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihkYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucywgaXNsYW5kLnNvcnRTdHJhdGVneSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kOiBhbnksXG4gICAgICAgIGNoaWxkRGF0YTogYW55W10sIGV4cGFuc2lvblN0YXRlVmFsOiBib29sZWFuLCBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gO1xuICAgICAgICBjb25zdCBjb2x1bW5MaXN0ID0gdGhpcy5fb3duZXJzTWFwLmdldChpc2xhbmQpLmNvbHVtbnM7XG4gICAgICAgIGNvbnN0IGNvbHVtbkhlYWRlciA9IGNvbHVtbkxpc3RcbiAgICAgICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcilcbiAgICAgICAgICAgIC5tYXAoY29sID0+IGNvbC5oZWFkZXIgPyBjb2wuaGVhZGVyIDogY29sLmZpZWxkKTtcblxuICAgICAgICBjb25zdCBoZWFkZXJSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW5IZWFkZXIsXG4gICAgICAgICAgICBsZXZlbDogaXNsYW5kLmxldmVsLFxuICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQsXG4gICAgICAgICAgICBvd25lcjogaXNsYW5kLFxuICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWwsXG4gICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjaGlsZERhdGEgJiYgY2hpbGREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChoZWFkZXJSZWNvcmQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlYyBvZiBjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBvcnRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlYyxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGlzbGFuZC5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICBvd25lcjogaXNsYW5kLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICFleHBhbnNpb25TdGF0ZVZhbCxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0UmVjb3JkLnN1bW1hcnlLZXkgPSBpc2xhbmQua2V5O1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChleHBvcnRSZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzbGFuZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFuZEV4cGFuc2lvblN0YXRlVmFsID0gZ3JpZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhyZWMpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocmVjKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJRDogY2hpbGRJc2xhbmQucHJpbWFyeUtleSA/IHJlY1tjaGlsZElzbGFuZC5wcmltYXJ5S2V5XSA6IHJlYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dLZXk6IGNoaWxkSXNsYW5kLnByaW1hcnlLZXkgPyByZWNbY2hpbGRJc2xhbmQucHJpbWFyeUtleV0gOiByZWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiBjaGlsZElzbGFuZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgZGVmaW5lZCB3aGVuIHJvdyBpcyBleHBhbmRlZCBpbiBVSVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRJc2xhbmRHcmlkID0gZ3JpZD8uZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZERhdGEgPSB0aGlzLnByZXBhcmVJc2xhbmREYXRhKGlzbGFuZCwgY2hpbGRJc2xhbmRHcmlkLCByZWNbY2hpbGRJc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hpbGRDb2x1bW5zQW5kRGF0YShjaGlsZElzbGFuZCwga2V5UmVjb3JkRGF0YSwgaXNsYW5kRXhwYW5zaW9uU3RhdGVWYWwsIGNoaWxkSXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChncmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gdGhpcy5wcmVwYXJlU3VtbWFyaWVzKGdyaWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBzdW1tYXJpZXMua2V5cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBzdW1tYXJpZXMuZ2V0KGspO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhpc2xhbmQua2V5LCBpc2xhbmQubGV2ZWwsICFleHBhbnNpb25TdGF0ZVZhbCwgaXNsYW5kLCBzdW1tYXJ5LCBoaWVyYXJjaGljYWxPd25lcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZTogSUdyb3VwaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICBleHByZXNzaW9uczogZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLFxuICAgICAgICAgICAgZXhwYW5zaW9uOiBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUsXG4gICAgICAgICAgICBkZWZhdWx0RXhwYW5kZWQ6IGdyaWQuZ3JvdXBzRXhwYW5kZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFzR3JvdXBpbmcgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykgJiZcbiAgICAgICAgICAgICghaGFzR3JvdXBpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWQuZ3JvdXBzUmVjb3JkcywgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGbGF0RGF0YShncmlkLmZpbHRlcmVkU29ydGVkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ3JpZERhdGEgPSBncmlkLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgZHJvcCBzdXBwb3J0IGZvciB0aGlzIHNpbmNlIGluIGEgZ3JvdXBlZCBncmlkIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NvcnQgPSAhaXNHcm91cGVkR3JpZCA/XG4gICAgICAgICAgICAgICAgLy8gICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pIDpcbiAgICAgICAgICAgICAgICAvLyAgICAgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzFdKSA6XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5jb25jYXQoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgfHwgW10pIDogZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBEYXRhVXRpbC5zb3J0KGdyaWREYXRhLCBleHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICBEYXRhVXRpbC5ncm91cChjbG9uZUFycmF5KGdyaWREYXRhKSwgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCBncmlkLmdyb3VwU3RyYXRlZ3ksIGdyaWQsIGdyb3Vwc1JlY29yZHMpO1xuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZ3JvdXBzUmVjb3JkcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWREYXRhLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZsYXREYXRhKGdyaWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVRyZWVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkLnByb2Nlc3NlZFJvb3RSZWNvcmRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBncmlkRGF0YSA9IGdyaWQucm9vdFJlY29yZHM7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IChncmlkLmZpbHRlclN0cmF0ZWd5KSA/IGdyaWQuZmlsdGVyU3RyYXRlZ3kgOiBuZXcgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSgpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZmlsdGVyaW5nU3RhdGUuc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUuZXhwcmVzc2lvbnNUcmVlLCBmaWx0ZXJpbmdTdGF0ZS5hZHZhbmNlZEV4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRGF0YVV0aWwudHJlZUdyaWRTb3J0KGdyaWREYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3kpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRyZWVHcmlkRGF0YShyZWNvcmRzOiBJVHJlZUdyaWRSZWNvcmRbXSwgcGFyZW50RXhwYW5kZWQgPSB0cnVlLCBoaWVyYXJjaGljYWxPd25lcj86IHN0cmluZykge1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZC5kYXRhLFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5S2V5OiByZWNvcmQua2V5LFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyOiByZWNvcmQubGV2ZWwgPT09IDAgPyBHUklEX1BBUkVOVCA6IGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2godHJlZUdyaWRSZWNvcmQpO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlR3JpZENoaWxkRGF0YShyZWNvcmQuY2hpbGRyZW4sIHJlY29yZC5rZXksIHJlY29yZC5sZXZlbCwgcmVjb3JkLmV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmVlR3JpZENoaWxkRGF0YShyZWNvcmRDaGlsZHJlbjogSVRyZWVHcmlkUmVjb3JkW10sIGtleTogc3RyaW5nLCBsZXZlbDpudW1iZXIsIHBhcmVudEV4cGFuZGVkID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gXG4gICAgICAgIGxldCBzdW1tYXJ5TGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgbGV0IHN1bW1hcnlIaWRkZW4gPSAhcGFyZW50RXhwYW5kZWQ7XG5cbiAgICAgICAgZm9yIChjb25zdCByYyBvZiByZWNvcmRDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHJjLmNoaWxkcmVuICYmIHJjLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShbcmNdLCBwYXJlbnRFeHBhbmRlZCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlMZXZlbCA9IHJjLmxldmVsO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJjLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiByYy5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWNvcmQuc3VtbWFyeUtleSA9IGtleTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goY3VycmVudFJlY29yZCk7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUxldmVsID0gcmMubGV2ZWw7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUhpZGRlbiA9ICFwYXJlbnRFeHBhbmRlZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhrZXksIHN1bW1hcnlMZXZlbCwgc3VtbWFyeUhpZGRlbiwgbnVsbCwgbnVsbCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGbGF0RGF0YShyZWNvcmRzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFN1bW1hcmllcyhzdW1tYXJ5S2V5OiBzdHJpbmcsIGxldmVsID0gMCwgaGlkZGVuID0gZmFsc2UsIG93bmVyPzogYW55LCBzdW1tYXJ5PzogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiwgaGllcmFyY2hpY2FsT3duZXI/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm9vdFN1bW1hcnkgPSBzdW1tYXJ5ID8/IHRoaXMuc3VtbWFyaWVzLmdldChzdW1tYXJ5S2V5KTtcblxuICAgICAgICBpZiAocm9vdFN1bW1hcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IFsuLi5yb290U3VtbWFyeS52YWx1ZXMoKV07XG4gICAgICAgICAgICBjb25zdCBiaWdnZXN0ID0gdmFsdWVzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpWzBdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpZ2dlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7fVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygcm9vdFN1bW1hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gdmFsdWUubWFwKHMgPT4gKHtsYWJlbDogcy5sYWJlbCwgdmFsdWU6IHMuc3VtbWFyeVJlc3VsdH0pKVxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHN1bW1hcmllc1tpXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBvYmosXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeUtleSxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlSZWNvcmQub3duZXIgPSBvd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goc3VtbWFyeVJlY29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwZWREYXRhKGdyaWQ6IEdyaWRUeXBlLCByZWNvcmRzOiBJR3JvdXBCeVJlY29yZFtdLCBncm91cGluZ1N0YXRlOiBJR3JvdXBpbmdTdGF0ZSwgc2V0R3JpZFBhcmVudDogYm9vbGVhbiwgcGFyZW50RXhwYW5kZWQgPSB0cnVlLCBzdW1tYXJ5S2V5c0Fycjogc3RyaW5nW10gPSBbXSkge1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcmV2aW91c0tleSA9ICcnXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sID0gdGhpcy5fb3duZXJzTWFwLmdldChERUZBVUxUX09XTkVSKS5jb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlciAmJiAhYy5za2lwKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleClbMF0uZmllbGQ7XG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgbGV0IHJlY29yZFZhbCA9IHJlY29yZC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbE93bmVyID0gc2V0R3JpZFBhcmVudCA/IEdSSURfUEFSRU5UIDogYCR7R1JJRF9DSElMRH0keysrdGhpcy5yb3dJc2xhbmRDb3VudGVyfWA7XG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaHkgPSBnZXRIaWVyYXJjaHkocmVjb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZFN0YXRlOiBJR3JvdXBCeUV4cGFuZFN0YXRlID0gZ3JvdXBpbmdTdGF0ZS5leHBhbnNpb24uZmluZCgocykgPT5cbiAgICAgICAgICAgICAgICBpc0hpZXJhcmNoeU1hdGNoKHMuaGllcmFyY2h5IHx8IFt7IGZpZWxkTmFtZTogcmVjb3JkLmV4cHJlc3Npb24uZmllbGROYW1lLCB2YWx1ZTogcmVjb3JkVmFsIH1dLFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoeSxcbiAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kU3RhdGUgPyBleHBhbmRTdGF0ZS5leHBhbmRlZCA6IGdyb3VwaW5nU3RhdGUuZGVmYXVsdEV4cGFuZGVkO1xuXG4gICAgICAgICAgICBjb25zdCBpc0RhdGUgPSByZWNvcmRWYWwgaW5zdGFuY2VvZiBEYXRlO1xuXG4gICAgICAgICAgICBpZiAoaXNEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZVpvbmVPZmZzZXQgPSByZWNvcmRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzb1N0cmluZyA9IChuZXcgRGF0ZShyZWNvcmRWYWwgLSB0aW1lWm9uZU9mZnNldCkpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBEYXRlUGlwZShncmlkLmxvY2FsZSk7XG4gICAgICAgICAgICAgICAgcmVjb3JkVmFsID0gcGlwZS50cmFuc2Zvcm0oaXNvU3RyaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByZXNzaW9uTmFtZSA9IHJlY29yZC5jb2x1bW4gJiYgcmVjb3JkLmNvbHVtbi5oZWFkZXIgP1xuICAgICAgICAgICAgICAgIHJlY29yZC5jb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICByZWNvcmQuZXhwcmVzc2lvbi5maWVsZE5hbWU7XG5cbiAgICAgICAgICAgIHJlY29yZFZhbCA9IHJlY29yZFZhbCAhPT0gbnVsbCA/IHJlY29yZFZhbCA6ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBncm91cEV4cHJlc3Npb246IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogeyBbZmlyc3RDb2xdOiBgJHtncm91cEV4cHJlc3Npb25OYW1lfTogJHtyZWNvcmRWYWwgPz8gJyhCbGFuayknfSAoJHtyZWNvcmQucmVjb3Jkcy5sZW5ndGh9KWAgfSxcbiAgICAgICAgICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogIXBhcmVudEV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZCxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGdyb3VwRXhwcmVzc2lvbik7XG5cbiAgICAgICAgICAgIGxldCBjdXJyS2V5ID0gJyc7XG4gICAgICAgICAgICBsZXQgc3VtbWFyeUtleSA9ICcnO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjdXJyS2V5ID0gYCcke3JlY29yZC5leHByZXNzaW9uLmZpZWxkTmFtZX0nOiAnJHtyZWNvcmRWYWx9J2A7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIgPSBzdW1tYXJ5S2V5c0Fyci5maWx0ZXIoYSA9PiBhICE9PSBwcmV2aW91c0tleSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNLZXkgPSBjdXJyS2V5O1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyLnB1c2goY3VycktleSk7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleSA9IGB7ICR7c3VtbWFyeUtleXNBcnIuam9pbignLCAnKX0gfWA7XG4gICAgICAgICAgICAgICAgZ3JvdXBFeHByZXNzaW9uLnN1bW1hcnlLZXkgPSBzdW1tYXJ5S2V5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCByZWNvcmQuZ3JvdXBzLCBncm91cGluZ1N0YXRlLCBmYWxzZSwgZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQsIHN1bW1hcnlLZXlzQXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93UmVjb3JkcyA9IHJlY29yZC5yZWNvcmRzO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dSZWNvcmQgb2Ygcm93UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcm93UmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VtbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY29yZC5zdW1tYXJ5S2V5ID0gc3VtbWFyeUtleTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChjdXJyZW50UmVjb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VtbWFyaWVzKHN1bW1hcnlLZXksIHJlY29yZC5sZXZlbCArIDEsICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLCBudWxsLCBudWxsLCBoaWVyYXJjaGljYWxPd25lcik7XG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleXNBcnIucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbnMoY29sdW1uczogQ29sdW1uVHlwZVtdKTogSUNvbHVtbkxpc3Qge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gW107XG4gICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IC0xO1xuICAgICAgICBsZXQgbGFzdFZpc2libGVDb2x1bW5JbmRleCA9IC0xO1xuICAgICAgICBsZXQgbWF4TGV2ZWwgPSAwO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSAhRXhwb3J0VXRpbGl0aWVzLmlzTnVsbE9yV2hpdGVzcGFjZXMoY29sdW1uLmhlYWRlcikgPyBjb2x1bW4uaGVhZGVyIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0Q29sdW1uID0gIWNvbHVtbi5oaWRkZW4gfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNWaXNpYmlsaXR5O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/IGNvbHVtbi5pbmRleCA6IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IE51bWJlcihjb2x1bW4ud2lkdGg/LnNsaWNlKDAsIC0yKSkgfHwgREVGQVVMVF9DT0xVTU5fV0lEVEg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5MZXZlbCA9ICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gY29sdW1uLmxldmVsIDogMDtcblxuICAgICAgICAgICAgY29uc3QgaXNNdWx0aUNvbEhlYWRlciA9IGNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGNvbFNwYW4gPSBpc011bHRpQ29sSGVhZGVyID9cbiAgICAgICAgICAgICAgICBjb2x1bW4uYWxsQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjaCA9PiAhKGNoLmNvbHVtbkdyb3VwKSAmJiAoIXRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/ICFjaC5oaWRkZW4gOiB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgMTtcblxuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5mbzogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiBFeHBvcnRVdGlsaXRpZXMuc2FuaXRpemVWYWx1ZShjb2x1bW5IZWFkZXIpLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2x1bW4uZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBza2lwOiAhZXhwb3J0Q29sdW1uLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29sdW1uLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IGlzTXVsdGlDb2xIZWFkZXIgPyBFeHBvcnRIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyIDogRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uU3BhbjogY29sU3BhbixcbiAgICAgICAgICAgICAgICBsZXZlbDogY29sdW1uTGV2ZWwsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6ICFjb2x1bW4ucGlubmVkID9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyLk1BWF9WQUxVRSA6XG4gICAgICAgICAgICAgICAgICAgICFjb2x1bW4uaGlkZGVuID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5ncmlkLnBpbm5lZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IE5hTixcbiAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cFBhcmVudDogY29sdW1uLnBhcmVudCA/IGNvbHVtbi5wYXJlbnQgOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBpc011bHRpQ29sSGVhZGVyID8gY29sdW1uIDogbnVsbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uY3VycmVuY3lDb2RlID0gY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRMb2NhbGVDdXJyZW5jeUNvZGUodGhpcy5sb2NhbGUpO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaXNwbGF5Rm9ybWF0ID0gY29sdW1uLnBpcGVBcmdzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICA6ICdzeW1ib2wnO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kaWdpdHNJbmZvID0gY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICA6ICcxLjAtMic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGF0ZUZvcm1hdCA9IGdldExvY2FsZURhdGVGb3JtYXQodGhpcy5sb2NhbGUsIEZvcm1hdFdpZHRoLk1lZGl1bSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRhdGVGb3JtYXQgPSBnZXRMb2NhbGVEYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgRm9ybWF0V2lkdGguTWVkaXVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zT3JkZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uSW5mby5zdGFydEluZGV4ICE9PSBjb2x1bW5JbmZvLnBpbm5lZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZm8ucGlubmVkSW5kZXggPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5sZXZlbCA+IG1heExldmVsICYmICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb2xMaXN0LnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goY29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSBNYXRoLm1heChsYXN0VmlzaWJsZUNvbHVtbkluZGV4LCBjb2xMaXN0LmluZGV4T2YoY29sdW1uSW5mbykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4ucGlubmVkICYmIGV4cG9ydENvbHVtbiAmJiBjb2x1bW5JbmZvLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4rKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvL0FwcGVuZCB0aGUgaGlkZGVuIGNvbHVtbnMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICBoaWRkZW5Db2x1bW5zLmZvckVhY2goKGhpZGRlbkNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sTGlzdFsrK2xhc3RWaXNpYmxlQ29sdW1uSW5kZXhdID0gaGlkZGVuQ29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4sXG4gICAgICAgICAgICBtYXhMZXZlbFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBIaWVyYXJjaGljYWxHcmlkQ29sdW1ucyhpc2xhbmQ6IGFueSwgZ3JpZERhdGE6IGFueSkge1xuICAgICAgICBsZXQgY29sdW1uTGlzdDogSUNvbHVtbkxpc3Q7XG4gICAgICAgIGxldCBrZXlEYXRhO1xuXG4gICAgICAgIGlmIChpc2xhbmQuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgICAgICBrZXlEYXRhID0gZ3JpZERhdGFbaXNsYW5kLmtleV07XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlzID0gaXNsYW5kLmNoaWxkcmVuLm1hcChpID0+IGkua2V5KTtcblxuICAgICAgICAgICAgY29uc3QgaXNsYW5kRGF0YSA9IGtleURhdGEubWFwKGkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7fTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGkpLm1hcChrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2xhbmRLZXlzLmluY2x1ZGVzKGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtW2tdID0gaVtrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29sdW1uTGlzdCA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbHVtbnMoaXNsYW5kRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRDb2x1bW5MaXN0ID0gaXNsYW5kLmNvbHVtbnM7XG4gICAgICAgICAgICBjb2x1bW5MaXN0ID0gdGhpcy5nZXRDb2x1bW5zKGlzbGFuZENvbHVtbkxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChpc2xhbmQsIGNvbHVtbkxpc3QpO1xuXG4gICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlEYXRhID0ga2V5RGF0YSAhPT0gdW5kZWZpbmVkID8ga2V5RGF0YVswXSA6IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoY2hpbGRJc2xhbmQsIGlzbGFuZEtleURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBdXRvR2VuZXJhdGVkQ29sdW1ucyhkYXRhOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKChjb2xLZXksIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogY29sS2V5LFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2xLZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29sTGlzdC5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IC0xLFxuICAgICAgICAgICAgbWF4TGV2ZWw6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkOiBhbnkpIHtcbiAgICAgICAgaWYgKGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maWx0ZXIociA9PiByLmVuYWJsZWQpLm1hcCgociwgaSkgPT4gKHsgbmFtZTogci5tZW1iZXJOYW1lLCBsZXZlbDogaSB9KSk7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhlbmFibGVkUm93cyk7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQgPSBlbmFibGVkUm93cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUik7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1ucy51bnNoaWZ0KC4uLnRoaXMucGl2b3RHcmlkQ29sdW1ucyk7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1uV2lkdGhzLnVuc2hpZnQoLi4uQXJyYXkodGhpcy5waXZvdEdyaWRDb2x1bW5zLmxlbmd0aCkuZmlsbCgyMDApKTtcbiAgICAgICAgY29sdW1uTGlzdC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IGVuYWJsZWRSb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbHVtbkxpc3QubWF4Um93TGV2ZWwgPSBlbmFibGVkUm93cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhrZXlzOiBhbnksIGNvbHVtbkdyb3VwUGFyZW50Pzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLmZsYXRSZWNvcmRzLm1hcChyID0+IHIuZGF0YSk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZWNvcmRzID0ge307XG5cbiAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IG9ialtrZXkubmFtZV07XG4gICAgICAgICAgICBpZiAoIWdyb3VwZWRSZWNvcmRzW2tleVZhbHVlXSkge1xuICAgICAgICAgICAgICAgIGdyb3VwZWRSZWNvcmRzW2tleVZhbHVlXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba2V5VmFsdWVdLnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNvbHVtbkdyb3VwUGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBtYXBLZXlzID0gWy4uLnRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAua2V5cygpXTtcbiAgICAgICAgICAgIGNvbnN0IG1hcFZhbHVlcyA9IFsuLi50aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLnZhbHVlcygpXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGdyb3VwZWRSZWNvcmRzKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwZWRSZWNvcmRzW2tdID0gZ3JvdXBlZFJlY29yZHNba10uZmlsdGVyKHJvdyA9PiBtYXBLZXlzLmV2ZXJ5KG1rID0+IE9iamVjdC5rZXlzKHJvdykuaW5jbHVkZXMobWspKVxuICAgICAgICAgICAgICAgICAgICAmJiBtYXBWYWx1ZXMuZXZlcnkobXYgPT4gT2JqZWN0LnZhbHVlcyhyb3cpLmluY2x1ZGVzKG12KSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlY29yZHNba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGdyb3VwZWRSZWNvcmRzKSkge1xuICAgICAgICAgICAgY29uc3Qgcm93U3BhbiA9IGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aDtcblxuICAgICAgICAgICAgY29uc3Qgcm93RGltZW5zaW9uQ29sdW1uOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICByb3dTcGFuLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogayxcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgIGxldmVsOiBrZXkubGV2ZWwsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aCA+IDEgPyBFeHBvcnRIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyIDogRXhwb3J0SGVhZGVyVHlwZS5Sb3dIZWFkZXIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uR3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25Db2x1bW4uY29sdW1uR3JvdXBQYXJlbnQgPSBjb2x1bW5Hcm91cFBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93RGltZW5zaW9uQ29sdW1uLmNvbHVtbkdyb3VwID0gaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRDb2x1bW5zLnB1c2gocm93RGltZW5zaW9uQ29sdW1uKTtcblxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAuc2V0KGtleS5uYW1lLCBrKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdLZXlzID0ga2V5cy5maWx0ZXIoa2RkID0+IGtkZCAhPT0ga2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVQaXZvdEdyaWRDb2x1bW5zKG5ld0tleXMsIGspXG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5kZWxldGUoa2V5Lm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydEluZGV4ICs9IHJvd1NwYW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExldmVsQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5mb3JFYWNoKG9tID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXZlbENvbDogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogR1JJRF9MRVZFTF9DT0wsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEdSSURfTEVWRUxfQ09MLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5TcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgb20uY29sdW1ucy5wdXNoKGxldmVsQ29sKTtcbiAgICAgICAgICAgICAgICBvbS5jb2x1bW5XaWR0aHMucHVzaCgyMCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRMZXZlbERhdGEoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwb3J0U3VtbWFyaWVzICYmIHRoaXMuc3VtbWFyaWVzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgciBvZiB0aGlzLmZsYXRSZWNvcmRzKXtcbiAgICAgICAgICAgICAgICBpZiAoci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQgfHwgci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLlRyZWVHcmlkUmVjb3JkIHx8IHIudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIHIuZGF0YVtHUklEX0xFVkVMX0NPTF0gPSByLmxldmVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXREZWZhdWx0cygpIHtcbiAgICAgICAgdGhpcy5fc29ydCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge30gYXMgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZTtcbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQ291bnRlciA9IDA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSwgZG9uZTogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG4iXX0=
|