igniteui-angular 18.0.3 → 18.0.5
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/buttonGroup/buttonGroup.component.mjs +3 -6
- package/esm2022/lib/combo/combo.common.mjs +35 -15
- package/esm2022/lib/data-operations/filtering-expressions-tree.mjs +3 -3
- package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +5 -1
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down-item.base.mjs +3 -3
- package/esm2022/lib/drop-down/drop-down.base.mjs +2 -2
- package/esm2022/lib/drop-down/drop-down.common.mjs +1 -1
- package/esm2022/lib/drop-down/drop-down.component.mjs +26 -11
- package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +17 -4
- package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +14 -9
- package/esm2022/lib/grids/headers/grid-header-group.component.mjs +6 -3
- package/esm2022/lib/grids/headers/grid-header.component.mjs +8 -2
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +2 -1
- package/esm2022/lib/grids/pivot-grid/pivot-grid.interface.mjs +1 -1
- package/esm2022/lib/grids/state.directive.mjs +3 -3
- package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +27 -3
- package/esm2022/lib/services/excel/excel-strings.mjs +2 -2
- package/esm2022/lib/services/exporter-common/base-export-service.mjs +1 -1
- package/fesm2022/igniteui-angular.mjs +140 -54
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/combo/combo.common.d.ts +3 -1
- package/lib/core/styles/components/grid/_excel-filtering-component.scss +5 -0
- package/lib/core/styles/components/grid/_excel-filtering-theme.scss +5 -0
- package/lib/core/styles/components/grid-toolbar/_grid-toolbar-component.scss +0 -4
- package/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss +0 -15
- package/lib/drop-down/drop-down-item.base.d.ts +1 -1
- package/lib/drop-down/drop-down.base.d.ts +1 -1
- package/lib/drop-down/drop-down.common.d.ts +1 -1
- package/lib/drop-down/drop-down.component.d.ts +13 -8
- package/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.d.ts +5 -0
- package/lib/grids/headers/grid-header.component.d.ts +1 -0
- package/lib/grids/pivot-grid/pivot-grid.component.d.ts +1 -0
- package/lib/grids/pivot-grid/pivot-grid.interface.d.ts +1 -1
- package/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.d.ts +12 -1
- package/lib/services/exporter-common/base-export-service.d.ts +2 -2
- 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
|
@@ -1087,4 +1087,4 @@ export class IgxBaseExporter {
|
|
|
1087
1087
|
this.rowIslandCounter = 0;
|
|
1088
1088
|
}
|
|
1089
1089
|
}
|
|
1090
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFrQixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQXNCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3QixtREFBK0IsQ0FBQTtJQUMvQix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQVEzQjtBQUVELE1BQU0s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QUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQTRCLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgY2xvbmVWYWx1ZSwgSUJhc2VFdmVudEFyZ3MsIHJlc29sdmVOZXN0ZWRQYXRoLCB5aWVsZGluZ0xvb3AgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSwgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IEV4cG9ydFV0aWxpdGllcyB9IGZyb20gJy4vZXhwb3J0LXV0aWxpdGllcyc7XG5pbXBvcnQgeyBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlIH0gZnJvbSAnLi9leHBvcnRlci1vcHRpb25zLWJhc2UnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi4vLi4vZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRyZWVHcmlkRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5zdHJhdGVneSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRIaWVyYXJjaHksIGlzSGllcmFyY2h5TWF0Y2ggfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRm9ybWF0V2lkdGgsIGdldExvY2FsZUN1cnJlbmN5Q29kZSwgZ2V0TG9jYWxlRGF0ZUZvcm1hdCwgZ2V0TG9jYWxlRGF0ZVRpbWVGb3JtYXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtblR5cGUsIEdyaWRUeXBlLCBJUGF0aFNlZ21lbnQgfSBmcm9tICcuLi8uLi9ncmlkcy9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4uLy4uL2dyaWRzL3N1bW1hcmllcy9ncmlkLXN1bW1hcnknO1xuaW1wb3J0IHsgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9ncmlkcy9jb21tb24vZW51bXMnO1xuXG5leHBvcnQgZW51bSBFeHBvcnRSZWNvcmRUeXBlIHtcbiAgICBHcm91cGVkUmVjb3JkID0gJ0dyb3VwZWRSZWNvcmQnLFxuICAgIFRyZWVHcmlkUmVjb3JkID0gJ1RyZWVHcmlkUmVjb3JkJyxcbiAgICBEYXRhUmVjb3JkID0gJ0RhdGFSZWNvcmQnLFxuICAgIEhpZXJhcmNoaWNhbEdyaWRSZWNvcmQgPSAnSGllcmFyY2hpY2FsR3JpZFJlY29yZCcsXG4gICAgSGVhZGVyUmVjb3JkID0gJ0hlYWRlclJlY29yZCcsXG4gICAgU3VtbWFyeVJlY29yZCA9ICdTdW1tYXJ5UmVjb3JkJyxcbiAgICBQaXZvdEdyaWRSZWNvcmQgPSAnUGl2b3RHcmlkUmVjb3JkJ1xufVxuXG5leHBvcnQgZW51bSBFeHBvcnRIZWFkZXJUeXBlIHtcbiAgICBSb3dIZWFkZXIgPSAnUm93SGVhZGVyJyxcbiAgICBDb2x1bW5IZWFkZXIgPSAnQ29sdW1uSGVhZGVyJyxcbiAgICBNdWx0aVJvd0hlYWRlciA9ICdNdWx0aVJvd0hlYWRlcicsXG4gICAgTXVsdGlDb2x1bW5IZWFkZXIgPSAnTXVsdGlDb2x1bW5IZWFkZXInLFxuICAgIFBpdm90Um93SGVhZGVyID0gJ1Bpdm90Um93SGVhZGVyJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXhwb3J0UmVjb3JkIHtcbiAgICBkYXRhOiBhbnk7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlO1xuICAgIG93bmVyPzogc3RyaW5nIHwgR3JpZFR5cGU7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBzdW1tYXJ5S2V5Pzogc3RyaW5nO1xuICAgIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5MaXN0IHtcbiAgICBjb2x1bW5zOiBJQ29sdW1uSW5mb1tdO1xuICAgIGNvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IG51bWJlcjtcbiAgICBtYXhMZXZlbD86IG51bWJlcjtcbiAgICBtYXhSb3dMZXZlbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uSW5mbyB7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBza2lwOiBib29sZWFuO1xuICAgIGRhdGFUeXBlPzogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIHNraXBGb3JtYXR0ZXI/OiBib29sZWFuO1xuICAgIGZvcm1hdHRlcj86IGFueTtcbiAgICBoZWFkZXJUeXBlPzogRXhwb3J0SGVhZGVyVHlwZTtcbiAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgIGNvbHVtblNwYW4/OiBudW1iZXI7XG4gICAgcm93U3Bhbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBleHBvcnRJbmRleD86IG51bWJlcjtcbiAgICBwaW5uZWRJbmRleD86IG51bWJlcjtcbiAgICBjb2x1bW5Hcm91cFBhcmVudD86IENvbHVtblR5cGUgfCBzdHJpbmc7XG4gICAgY29sdW1uR3JvdXA/OiBDb2x1bW5UeXBlIHwgc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG4gICAgZGlnaXRzSW5mbz86IHN0cmluZztcbn1cbi8qKlxuICogcm93RXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3dFeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyByb3cgZGF0YVxuICAgICAqL1xuICAgIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGluZGV4XG4gICAgICovXG4gICAgcm93SW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyByb3cgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBjb2x1bW5FeHBvcnRpbmcgZXZlbnQgYXJndW1lbnRzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmV4cG9ydGVyU2VydmljZS5jb2x1bW5FeHBvcnRpbmcuc3Vic2NyaWJlKChhcmdzOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSA9PiB7XG4gKiAvLyBzZXQgYXJncyBwcm9wZXJ0aWVzIGhlcmVcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBoZWFkZXJcbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBmaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaW5kZXhcbiAgICAgKi9cbiAgICBjb2x1bW5JbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2tpcCB0aGUgZXhwb3J0aW5nIGNvbHVtbiB3aGVuIHNldCB0byB0cnVlXG4gICAgICovXG4gICAgY2FuY2VsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXhwb3J0IHRoZSBjb2x1bW4ncyBkYXRhIHdpdGhvdXQgYXBwbHlpbmcgaXRzIGZvcm1hdHRlciwgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIHNraXBGb3JtYXR0ZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBvd25lci5cbiAgICAgKi9cbiAgICBncmlkPzogR3JpZFR5cGU7XG59XG5cbi8qKmhpZGRlblxuICogQSBoZWxwZXIgY2xhc3MgdXNlZCB0byBpZGVudGlmeSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBzZXQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleFxuICogZHVyaW5nIGNvbHVtbkV4cG9ydGluZywgc28gd2UgY2FuIGhvbm9yIGl0IGF0IHRoZSBleHBvcnRlZCBmaWxlLlxuKi9cbmNsYXNzIElneENvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBpbXBsZW1lbnRzIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3Mge1xuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2FuY2VsOiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBncmlkPzogR3JpZFR5cGU7XG4gICAgcHVibGljIG93bmVyPzogYW55O1xuICAgIHB1YmxpYyB1c2VyU2V0SW5kZXg/ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9jb2x1bW5JbmRleD86IG51bWJlcjtcblxuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jb2x1bW5JbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVzZXJTZXRJbmRleCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWw6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBvcmlnaW5hbC5oZWFkZXI7XG4gICAgICAgIHRoaXMuZmllbGQgPSBvcmlnaW5hbC5maWVsZDtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBvcmlnaW5hbC5jYW5jZWw7XG4gICAgICAgIHRoaXMuc2tpcEZvcm1hdHRlciA9IG9yaWdpbmFsLnNraXBGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZ3JpZCA9IG9yaWdpbmFsLmdyaWQ7XG4gICAgICAgIHRoaXMub3duZXIgPSBvcmlnaW5hbC5vd25lcjtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSBvcmlnaW5hbC5jb2x1bW5JbmRleDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09XTkVSID0gJ2RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IEdSSURfUk9PVF9TVU1NQVJZID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG5leHBvcnQgY29uc3QgR1JJRF9QQVJFTlQgPSAnZ3JpZC1wYXJlbnQnO1xuZXhwb3J0IGNvbnN0IEdSSURfTEVWRUxfQ09MID0gJ0dSSURfTEVWRUxfQ09MJztcbmNvbnN0IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gOC40MztcbmNvbnN0IEdSSURfQ0hJTEQgPSAnZ3JpZC1jaGlsZC0nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWd4QmFzZUV4cG9ydGVyIHtcblxuICAgIHB1YmxpYyBleHBvcnRFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJvdyBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyByb3dFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dFeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5FeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBudWxsO1xuICAgIHByb3RlY3RlZCBwaXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfb3duZXJzTWFwOiBNYXA8YW55LCBJQ29sdW1uTGlzdD4gPSBuZXcgTWFwPGFueSwgSUNvbHVtbkxpc3Q+KCk7XG5cbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nXG4gICAgcHJpdmF0ZSBfc2V0Q2hpbGRTdW1tYXJpZXMgPSBmYWxzZVxuICAgIHByaXZhdGUgaXNQaXZvdEdyaWRFeHBvcnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgIHByaXZhdGUgc3VtbWFyaWVzOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG4gICAgcHJpdmF0ZSByb3dJc2xhbmRDb3VudGVyID0gLTE7XG4gICAgcHJpdmF0ZSBmbGF0UmVjb3JkczogSUV4cG9ydFJlY29yZFtdID0gW107XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRDb2x1bW5zOiBJQ29sdW1uSW5mb1tdID0gW11cbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRLZXlWYWx1ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBJZ3hHcmlkIGNvbXBvbmVudCdzIGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLmlneEdyaWRGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydChncmlkOiBhbnksIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubG9jYWxlID0gZ3JpZC5sb2NhbGU7XG4gICAgICAgIGxldCBjb2x1bW5zID0gZ3JpZC5jb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbkxpc3QgPSB0aGlzLmdldENvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJykge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChncmlkLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kLCBncmlkLmRhdGFbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkQ29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc1Bpdm90R3JpZEV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MuZmlsdGVyKHIgPT4gci5lbmFibGVkKS5mb3JFYWNoKHJvd0RpbWVuc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLCByb3dEaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1bW1hcmllcyA9IHRoaXMucHJlcGFyZVN1bW1hcmllcyhncmlkKTtcbiAgICAgICAgdGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMgPSAgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDEgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5O1xuXG4gICAgICAgIHRoaXMuYWRkTGV2ZWxDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZURhdGEoZ3JpZCk7XG4gICAgICAgIHRoaXMuYWRkTGV2ZWxEYXRhKCk7XG4gICAgICAgIHRoaXMuYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkKTtcbiAgICAgICAgdGhpcy5hZGRQaXZvdFJvd0hlYWRlcnMoZ3JpZCk7XG4gICAgICAgIHRoaXMuZXhwb3J0R3JpZFJlY29yZHNEYXRhKHRoaXMuZmxhdFJlY29yZHMsIGdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBmb3IgZXhwb3J0aW5nIGFueSBraW5kIG9mIGFycmF5IGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5hcnJheUZvckV4cG9ydCwgdGhpcy5leHBvcnRPcHRpb25zKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hCYXNlRXhwb3J0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwb3J0RGF0YShkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSk6IHZvaWQge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdObyBvcHRpb25zIHByb3ZpZGVkIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCByZWNvcmRzID0gZGF0YS5tYXAoZCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXhwb3J0R3JpZFJlY29yZHNEYXRhKHJlY29yZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9Sb3dEaW1lbnNpb25zTWFwKHJvd0RpbWVuc2lvbjogYW55LCByb290UGFyZW50TmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcFtyb3dEaW1lbnNpb24ubWVtYmVyTmFtZV0gPSByb290UGFyZW50TmFtZTtcbiAgICAgICAgaWYgKHJvd0RpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvUm93RGltZW5zaW9uc01hcChyb3dEaW1lbnNpb24uY2hpbGRMZXZlbCwgcm9vdFBhcmVudE5hbWUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydEdyaWRSZWNvcmRzRGF0YShyZWNvcmRzOiBJRXhwb3J0UmVjb3JkW10sIGdyaWQ/OiBHcmlkVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fb3duZXJzTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZHNEYXRhID0gcmVjb3Jkcy5maWx0ZXIociA9PiByLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZCkubWFwKHIgPT4gci5kYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBFeHBvcnRVdGlsaXRpZXMuZ2V0S2V5c0Zyb21EYXRhKHJlY29yZHNEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBrZXlzLm1hcCgoaykgPT5cbiAgICAgICAgICAgICAgICAoeyBoZWFkZXI6IGssIGZpZWxkOiBrLCBza2lwOiBmYWxzZSwgaGVhZGVyVHlwZTogRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsIGxldmVsOiAwLCBjb2x1bW5TcGFuOiAxIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IG5ldyBBcnJheTxudW1iZXI+KGtleXMubGVuZ3RoKS5maWxsKERFRkFVTFRfQ09MVU1OX1dJRFRIKTtcblxuICAgICAgICAgICAgY29uc3QgbWFwUmVjb3JkOiBJQ29sdW1uTGlzdCA9IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGNvbHVtbldpZHRocyxcbiAgICAgICAgICAgICAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbjogLTEsXG4gICAgICAgICAgICAgICAgbWF4TGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgbWFwUmVjb3JkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzaG91bGRSZW9yZGVyQ29sdW1ucyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIG1hcFJlY29yZF0gb2YgdGhpcy5fb3duZXJzTWFwKSB7XG4gICAgICAgICAgICBsZXQgc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudCA9IDA7XG4gICAgICAgICAgICBsZXQgY29sdW1uc1dpdGhvdXRIZWFkZXJDb3VudCA9IDE7XG4gICAgICAgICAgICBsZXQgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSBtYXBSZWNvcmQuaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW47XG5cbiAgICAgICAgICAgIG1hcFJlY29yZC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkV4cG9ydEFyZ3M6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6ICFFeHBvcnRVdGlsaXRpZXMuaXNOdWxsT3JXaGl0ZXNwYWNlcyhjb2x1bW4uaGVhZGVyKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlciA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbHVtbicgKyBjb2x1bW5zV2l0aG91dEhlYWRlckNvdW50KyssXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBGb3JtYXR0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZDoga2V5ID09PSBERUZBVUxUX09XTkVSID8gZ3JpZCA6IGtleVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbkV4cG9ydEFyZ3MgPSBuZXcgSWd4Q29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKGNvbHVtbkV4cG9ydEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkV4cG9ydGluZy5lbWl0KG5ld0NvbHVtbkV4cG9ydEFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXIgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmhlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNraXAgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmNhbmNlbDtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNraXBGb3JtYXR0ZXIgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLnNraXBGb3JtYXR0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NvbHVtbkV4cG9ydEFyZ3MudXNlclNldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZXhwb3J0SW5kZXggPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmNvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVvcmRlckNvbHVtbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnMoY29sdW1uLCBtYXBSZWNvcmQsIGNvbHVtbi5jb2x1bW5TcGFuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9uU2tpcHBlZENvbHVtbnMgPSBtYXBSZWNvcmQuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vblNraXBwZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vd25lcnNNYXAuZ2V0KGtleSkubWF4TGV2ZWwgPSBub25Ta2lwcGVkQ29sdW1ucy5zb3J0KChhLCBiKSA9PiBiLmxldmVsIC0gYS5sZXZlbClbMF0ubGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc29ydCAmJiB0aGlzLl9zb3J0LmZpZWxkTmFtZSA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydC5maWVsZE5hbWUgPSBjb2x1bW4uaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uIC09IHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQ7XG5cbiAgICAgICAgICAgIC8vIFJlb3JkZXIgY29sdW1ucyBvbmx5IGlmIGEgY29sdW1uIGhhcyBiZWVuIGFzc2lnbmVkIGEgc3BlY2lmaWMgY29sdW1uSW5kZXggZHVyaW5nIGNvbHVtbkV4cG9ydGluZyBldmVudFxuICAgICAgICAgICAgaWYgKHNob3VsZFJlb3JkZXJDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgbWFwUmVjb3JkLmNvbHVtbnMgPSB0aGlzLnJlb3JkZXJDb2x1bW5zKG1hcFJlY29yZC5jb2x1bW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IG5ldyBBcnJheTxJRXhwb3J0UmVjb3JkPigpO1xuICAgICAgICBjb25zdCBhY3R1YWxEYXRhID0gcmVjb3Jkc1swXT8uZGF0YTtcbiAgICAgICAgY29uc3QgaXNTcGVjaWFsRGF0YSA9IEV4cG9ydFV0aWxpdGllcy5pc1NwZWNpYWxEYXRhKGFjdHVhbERhdGEpO1xuXG4gICAgICAgIHlpZWxkaW5nTG9vcChyZWNvcmRzLmxlbmd0aCwgMTAwLCAoaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gcmVjb3Jkc1tpXTtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0Um93KGRhdGFUb0V4cG9ydCwgcm93LCBpLCBpc1NwZWNpYWxEYXRhKTtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBvcnREYXRhSW1wbGVtZW50YXRpb24oZGF0YVRvRXhwb3J0LCB0aGlzLm9wdGlvbnMsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUNvbHVtblNwYW5zKGNvbHVtbjogSUNvbHVtbkluZm8sIG1hcFJlY29yZDogSUNvbHVtbkxpc3QsIHNwYW46IG51bWJlcikge1xuICAgICAgICBpZiAoY29sdW1uLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgJiYgY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwQ2hpbGRyZW4gPSBtYXBSZWNvcmQuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmNvbHVtbkdyb3VwUGFyZW50ID09PSBjb2x1bW4uY29sdW1uR3JvdXApO1xuXG4gICAgICAgICAgICBjb2x1bW5Hcm91cENoaWxkcmVuLmZvckVhY2goY2djID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2djLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2djLmNvbHVtblNwYW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICBjZ2MuY29sdW1uR3JvdXBQYXJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjZ2Muc2tpcCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyhjZ2MsIG1hcFJlY29yZCwgY2djLmNvbHVtblNwYW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5za2lwID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldENvbCA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+IGNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudCAhPT0gbnVsbCAmJiBjLmNvbHVtbkdyb3VwID09PSBjb2x1bW4uY29sdW1uR3JvdXBQYXJlbnQpWzBdO1xuICAgICAgICBpZiAodGFyZ2V0Q29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhcmdldENvbC5jb2x1bW5TcGFuIC09IHNwYW47XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRDb2wuY29sdW1uR3JvdXBQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtblNwYW5zKHRhcmdldENvbCwgbWFwUmVjb3JkLCBzcGFuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldENvbC5jb2x1bW5TcGFuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Q29sLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBvcnRSb3coZGF0YTogSUV4cG9ydFJlY29yZFtdLCByZWNvcmQ6IElFeHBvcnRSZWNvcmQsIGluZGV4OiBudW1iZXIsIGlzU3BlY2lhbERhdGE6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFpc1NwZWNpYWxEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvd25lciA9IHJlY29yZC5vd25lciA9PT0gdW5kZWZpbmVkID8gREVGQVVMVF9PV05FUiA6IHJlY29yZC5vd25lcjtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyQ29scyA9IHRoaXMuX293bmVyc01hcC5nZXQob3duZXIpLmNvbHVtbnM7XG5cbiAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gb3duZXJDb2xzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICByZWNvcmQuZGF0YSA9IGNvbHVtbnMucmVkdWNlKChhLCBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmF3VmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChyZWNvcmQuZGF0YSwgZS5maWVsZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEFwcGx5Rm9ybWF0dGVyID0gZS5mb3JtYXR0ZXIgJiYgIWUuc2tpcEZvcm1hdHRlciAmJiByZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZkRhdGVUeXBlID0gZS5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGUuZGF0YVR5cGUgPT09ICdkYXRlVGltZScgfHwgZS5kYXRhVHlwZSA9PT0gJ3RpbWUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPZkRhdGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHJhd1ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc2hvdWxkQXBwbHlGb3JtYXR0ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSA9IG5ldyBEYXRlKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5kYXRhVHlwZSA9PT0gJ3N0cmluZycgJiYgcmF3VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgPSByYXdWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBzaG91bGRBcHBseUZvcm1hdHRlciA/IGUuZm9ybWF0dGVyKHJhd1ZhbHVlLCByZWNvcmQuZGF0YSkgOiByYXdWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQaXZvdEdyaWRFeHBvcnQgJiYgIWlzTmFOKHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gcGFyc2VGbG9hdChmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFbZS5maWVsZF0gPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSGVhZGVycyA9IG93bmVyQ29scy5maWx0ZXIoYyA9PiBjLnNraXApLm1hcChjID0+IGMuaGVhZGVyID8gYy5oZWFkZXIgOiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZWNvcmQuZGF0YSA9IHJlY29yZC5kYXRhLmZpbHRlcihkID0+IGZpbHRlcmVkSGVhZGVycy5pbmRleE9mKGQpID09PSAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dBcmdzID0ge1xuICAgICAgICAgICAgcm93RGF0YTogcmVjb3JkLmRhdGEsXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yb3dFeHBvcnRpbmcuZW1pdChyb3dBcmdzKTtcblxuICAgICAgICBpZiAoIXJvd0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVvcmRlckNvbHVtbnMoY29sdW1uczogSUNvbHVtbkluZm9bXSk6IElDb2x1bW5JbmZvW10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBmaWx0ZXJlZENvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzcGVjaWZpY0luZGljZXNDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhaXNOYU4oY29sLmV4cG9ydEluZGV4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLGIpID0+IGEuZXhwb3J0SW5kZXggLSBiLmV4cG9ydEluZGV4KTtcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnMubWFwKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXgpO1xuXG4gICAgICAgIHNwZWNpZmljSW5kaWNlc0NvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnNwbGljZShmaWx0ZXJlZENvbHVtbnMuaW5kZXhPZihjb2wpLCAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVvcmRlcmVkQ29sdW1ucyA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIGlmIChzcGVjaWZpY0luZGljZXNDb2x1bW5zLmxlbmd0aCA+IE1hdGgubWF4KC4uLmluZGljZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5jb25jYXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGljZXMuZm9yRWFjaCgoaSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnB1c2goc3BlY2lmaWNJbmRpY2VzQ29sdW1uc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrID0gaTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW5ndGggJiYgcmVvcmRlcmVkQ29sdW1uc1trXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2s7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVvcmRlcmVkQ29sdW1uc1trXSA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlb3JkZXJlZENvbHVtbnNbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5zW2ldID0gZmlsdGVyZWRDb2x1bW5zLnNwbGljZSgwLCAxKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVvcmRlcmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVEYXRhKGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiYgZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPyBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMuY29uY2F0KGdyaWQuc29ydGluZ0V4cHJlc3Npb25zIHx8IFtdKSA6IGdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gZXhwcmVzc2lvbnMgJiYgZXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcbiAgICAgICAgbGV0IHNldFN1bW1hcnlPd25lciA9IGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnaWd4LXBpdm90LWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIHNldFN1bW1hcnlPd25lciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpZ3gtdHJlZS1ncmlkJzoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVRyZWVHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDAgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5jaGlsZExldmVsc09ubHkpIHtcbiAgICAgICAgICAgIHNldFN1bW1hcnlPd25lciA/XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoR1JJRF9ST09UX1NVTU1BUlksIDAsIGZhbHNlLCBncmlkKSA6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoR1JJRF9ST09UX1NVTU1BUlkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBncmlkLmZpbHRlcmVkU29ydGVkRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkRGF0YSA9IE9iamVjdC5mcm9tRW50cmllcyhyZWNvcmQuYWdncmVnYXRpb25WYWx1ZXMpO1xuICAgICAgICAgICAgcmVjb3JkLmRpbWVuc2lvblZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsS2V5ID0gdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwW2tleV07XG4gICAgICAgICAgICAgICAgcmVjb3JkRGF0YVthY3R1YWxLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcGl2b3RHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZERhdGEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlBpdm90R3JpZFJlY29yZFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHBpdm90R3JpZFJlY29yZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZGF0YTtcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogZ3JpZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRGF0YVV0aWwuc29ydChkYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgcmVjb3JkczogYW55W10pIHtcbiAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG4gICAgICAgIGNvbnN0IGNvbHVtbkZpZWxkcyA9IHRoaXMuX293bmVyc01hcC5nZXQoZ3JpZCkuY29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZVZhbCA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhlbnRyeSkgPyBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQoZW50cnkpIDogZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFXaXRob3V0Q2hpbGRyZW4gPSBPYmplY3Qua2V5cyhlbnRyeSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gY29sdW1uRmllbGRzLmluY2x1ZGVzKGspKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gZW50cnlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbEdyaWRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YVdpdGhvdXRDaGlsZHJlbixcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgb3duZXI6IGdyaWQsXG4gICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXI6IEdSSURfUEFSRU5UXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGllcmFyY2hpY2FsR3JpZFJlY29yZCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGlzbGFuZC5wcmltYXJ5S2V5ID8gZW50cnlbaXNsYW5kLnByaW1hcnlLZXldIDogZW50cnksXG4gICAgICAgICAgICAgICAgICAgIHJvd0tleTogaXNsYW5kLnByaW1hcnlLZXkgPyBlbnRyeVtpc2xhbmQucHJpbWFyeUtleV0gOiBlbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiBpc2xhbmQua2V5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFuZEdyaWQgPSBncmlkPy5ncmlkQVBJLmdldENoaWxkR3JpZChbcGF0aF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZERhdGEgPSB0aGlzLnByZXBhcmVJc2xhbmREYXRhKGlzbGFuZCwgaXNsYW5kR3JpZCwgZW50cnlbaXNsYW5kLmtleV0pIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGlzbGFuZCwga2V5UmVjb3JkRGF0YSwgZXhwYW5zaW9uU3RhdGVWYWwsIGlzbGFuZEdyaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlU3VtbWFyaWVzKGdyaWQ6IGFueSk6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+IHtcbiAgICAgICAgbGV0IHN1bW1hcmllcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+PigpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwb3J0U3VtbWFyaWVzICYmIGdyaWQuc3VtbWFyeVNlcnZpY2Uuc3VtbWFyeUNhY2hlTWFwLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdW1tYXJ5Q2FjaGVNYXAgPSBncmlkLnN1bW1hcnlTZXJ2aWNlLnN1bW1hcnlDYWNoZU1hcDtcblxuICAgICAgICAgICAgc3dpdGNoKGdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUuY2hpbGRMZXZlbHNPbmx5OlxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKEdSSURfUk9PVF9TVU1NQVJZKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5OlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygc3VtbWFyeUNhY2hlTWFwLmtleXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgIT09IEdSSURfUk9PVF9TVU1NQVJZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3VtbWFyaWVzID0gc3VtbWFyeUNhY2hlTWFwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1bW1hcmllcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVJc2xhbmREYXRhKGlzbGFuZDogYW55LCBpc2xhbmRHcmlkOiBHcmlkVHlwZSwgZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIGlmIChpc2xhbmRHcmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZEdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gaXNsYW5kR3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmRHcmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGRhdGEsIGZpbHRlcmluZ1N0YXRlLCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBpc2xhbmRHcmlkLnNvcnRTdHJhdGVneSwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1NvcnRpbmcgPSBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoIXNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZC5zb3J0U3RyYXRlZ3ksIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGlzbGFuZDogYW55LFxuICAgICAgICBjaGlsZERhdGE6IGFueVtdLCBleHBhbnNpb25TdGF0ZVZhbDogYm9vbGVhbiwgZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsT3duZXIgPSBgJHtHUklEX0NISUxEfSR7Kyt0aGlzLnJvd0lzbGFuZENvdW50ZXJ9YDtcbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoaXNsYW5kKS5jb2x1bW5zO1xuICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSBjb2x1bW5MaXN0XG4gICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIpXG4gICAgICAgICAgICAubWFwKGNvbCA9PiBjb2wuaGVhZGVyID8gY29sLmhlYWRlciA6IGNvbC5maWVsZCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgbGV2ZWw6IGlzbGFuZC5sZXZlbCxcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkLFxuICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgIGhpZGRlbjogIWV4cGFuc2lvblN0YXRlVmFsLFxuICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2hpbGREYXRhICYmIGNoaWxkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGVhZGVyUmVjb3JkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZWMgb2YgY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZWMsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBpc2xhbmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWwsXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydFJlY29yZC5zdW1tYXJ5S2V5ID0gaXNsYW5kLmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZXhwb3J0UmVjb3JkKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRFeHBhbnNpb25TdGF0ZVZhbCA9IGdyaWQgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcy5oYXMocmVjKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJlYykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGRJc2xhbmQgb2YgaXNsYW5kLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoOiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGNoaWxkSXNsYW5kLnByaW1hcnlLZXkgPyByZWNbY2hpbGRJc2xhbmQucHJpbWFyeUtleV0gOiByZWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93S2V5OiBjaGlsZElzbGFuZC5wcmltYXJ5S2V5ID8gcmVjW2NoaWxkSXNsYW5kLnByaW1hcnlLZXldIDogcmVjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZEtleTogY2hpbGRJc2xhbmQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGRlZmluZWQgd2hlbiByb3cgaXMgZXhwYW5kZWQgaW4gVUlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkSXNsYW5kR3JpZCA9IGdyaWQ/LmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlSZWNvcmREYXRhID0gdGhpcy5wcmVwYXJlSXNsYW5kRGF0YShpc2xhbmQsIGNoaWxkSXNsYW5kR3JpZCwgcmVjW2NoaWxkSXNsYW5kLmtleV0pIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoY2hpbGRJc2xhbmQsIGtleVJlY29yZERhdGEsIGlzbGFuZEV4cGFuc2lvblN0YXRlVmFsLCBjaGlsZElzbGFuZEdyaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ3JpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IHRoaXMucHJlcGFyZVN1bW1hcmllcyhncmlkKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygc3VtbWFyaWVzLmtleXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5ID0gc3VtbWFyaWVzLmdldChrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoaXNsYW5kLmtleSwgaXNsYW5kLmxldmVsLCAhZXhwYW5zaW9uU3RhdGVWYWwsIGlzbGFuZCwgc3VtbWFyeSwgaGllcmFyY2hpY2FsT3duZXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIGhhc0ZpbHRlcmluZzogYm9vbGVhbiwgaGFzU29ydGluZzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGU6IElHcm91cGluZ1N0YXRlID0ge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGFuc2lvbjogZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlLFxuICAgICAgICAgICAgZGVmYXVsdEV4cGFuZGVkOiBncmlkLmdyb3Vwc0V4cGFuZGVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhc0dyb3VwaW5nID0gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpICYmXG4gICAgICAgICAgICAoIWhhc0dyb3VwaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpO1xuXG4gICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCBncmlkLmdyb3Vwc1JlY29yZHMsIGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmxhdERhdGEoZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGdyaWREYXRhID0gZ3JpZC5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBncmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZ3JpZERhdGEsIGZpbHRlcmluZ1N0YXRlLCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGRyb3Agc3VwcG9ydCBmb3IgdGhpcyBzaW5jZSBpbiBhIGdyb3VwZWQgZ3JpZCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9zb3J0ID0gIWlzR3JvdXBlZEdyaWQgP1xuICAgICAgICAgICAgICAgIC8vICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKSA6XG4gICAgICAgICAgICAgICAgLy8gICAgIGdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1sxXSkgOlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPyBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMuY29uY2F0KGdyaWQuc29ydGluZ0V4cHJlc3Npb25zIHx8IFtdKSA6IGdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRGF0YVV0aWwuc29ydChncmlkRGF0YSwgZXhwcmVzc2lvbnMsIGdyaWQuc29ydFN0cmF0ZWd5LCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cHNSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgRGF0YVV0aWwuZ3JvdXAoY2xvbmVBcnJheShncmlkRGF0YSksIGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZSwgZ3JpZC5ncm91cFN0cmF0ZWd5LCBncmlkLCBncm91cHNSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IGdyb3Vwc1JlY29yZHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNHcm91cGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUdyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCBncmlkRGF0YSwgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGbGF0RGF0YShncmlkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVUcmVlR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIGhhc0ZpbHRlcmluZzogYm9vbGVhbiwgaGFzU29ydGluZzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmVlR3JpZERhdGEoZ3JpZC5wcm9jZXNzZWRSb290UmVjb3Jkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ3JpZERhdGEgPSBncmlkLnJvb3RSZWNvcmRzO1xuXG4gICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiAoZ3JpZC5maWx0ZXJTdHJhdGVneSkgPyBncmlkLmZpbHRlclN0cmF0ZWd5IDogbmV3IFRyZWVHcmlkRmlsdGVyaW5nU3RyYXRlZ3koKVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IGZpbHRlcmluZ1N0YXRlLnN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZ3JpZERhdGEsIGZpbHRlcmluZ1N0YXRlLmV4cHJlc3Npb25zVHJlZSwgZmlsdGVyaW5nU3RhdGUuYWR2YW5jZWRFeHByZXNzaW9uc1RyZWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IERhdGFVdGlsLnRyZWVHcmlkU29ydChncmlkRGF0YSwgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGdyaWQuc29ydFN0cmF0ZWd5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hZGRUcmVlR3JpZERhdGEoZ3JpZERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUcmVlR3JpZERhdGEocmVjb3JkczogSVRyZWVHcmlkUmVjb3JkW10sIHBhcmVudEV4cGFuZGVkID0gdHJ1ZSwgaGllcmFyY2hpY2FsT3duZXI/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCB0cmVlR3JpZFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmQuZGF0YSxcbiAgICAgICAgICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogIXBhcmVudEV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuVHJlZUdyaWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleTogcmVjb3JkLmtleSxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lcjogcmVjb3JkLmxldmVsID09PSAwID8gR1JJRF9QQVJFTlQgOiBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHRyZWVHcmlkUmVjb3JkKTtcblxuICAgICAgICAgICAgaWYgKHJlY29yZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VHJlZUdyaWRDaGlsZERhdGEocmVjb3JkLmNoaWxkcmVuLCByZWNvcmQua2V5LCByZWNvcmQubGV2ZWwsIHJlY29yZC5leHBhbmRlZCAmJiBwYXJlbnRFeHBhbmRlZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJlZUdyaWRDaGlsZERhdGEocmVjb3JkQ2hpbGRyZW46IElUcmVlR3JpZFJlY29yZFtdLCBrZXk6IHN0cmluZywgbGV2ZWw6bnVtYmVyLCBwYXJlbnRFeHBhbmRlZCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsT3duZXIgPSBgJHtHUklEX0NISUxEfSR7Kyt0aGlzLnJvd0lzbGFuZENvdW50ZXJ9YFxuICAgICAgICBsZXQgc3VtbWFyeUxldmVsID0gbGV2ZWw7XG4gICAgICAgIGxldCBzdW1tYXJ5SGlkZGVuID0gIXBhcmVudEV4cGFuZGVkO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmMgb2YgcmVjb3JkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChyYy5jaGlsZHJlbiAmJiByYy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUcmVlR3JpZERhdGEoW3JjXSwgcGFyZW50RXhwYW5kZWQsIGhpZXJhcmNoaWNhbE93bmVyKTtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5TGV2ZWwgPSByYy5sZXZlbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByYy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogcmMubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIXBhcmVudEV4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVjb3JkLnN1bW1hcnlLZXkgPSBrZXk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGN1cnJlbnRSZWNvcmQpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlMZXZlbCA9IHJjLmxldmVsO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlIaWRkZW4gPSAhcGFyZW50RXhwYW5kZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoa2V5LCBzdW1tYXJ5TGV2ZWwsIHN1bW1hcnlIaWRkZW4sIG51bGwsIG51bGwsIGhpZXJhcmNoaWNhbE93bmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRmxhdERhdGEocmVjb3JkczogYW55KSB7XG4gICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVjb3JkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdW1tYXJpZXMoc3VtbWFyeUtleTogc3RyaW5nLCBsZXZlbCA9IDAsIGhpZGRlbiA9IGZhbHNlLCBvd25lcj86IGFueSwgc3VtbWFyeT86IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4sIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJvb3RTdW1tYXJ5ID0gc3VtbWFyeSA/PyB0aGlzLnN1bW1hcmllcy5nZXQoc3VtbWFyeUtleSk7XG5cbiAgICAgICAgaWYgKHJvb3RTdW1tYXJ5KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBbLi4ucm9vdFN1bW1hcnkudmFsdWVzKCldO1xuICAgICAgICAgICAgY29uc3QgYmlnZ2VzdCA9IHZhbHVlcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVswXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWdnZXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge31cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJvb3RTdW1tYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IHZhbHVlLm1hcChzID0+ICh7bGFiZWw6IHMubGFiZWwsIHZhbHVlOiBzLnN1bW1hcnlSZXN1bHR9KSlcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBzdW1tYXJpZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogb2JqLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvd25lcikge1xuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5UmVjb3JkLm93bmVyID0gb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHN1bW1hcnlSZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHcm91cGVkRGF0YShncmlkOiBHcmlkVHlwZSwgcmVjb3JkczogSUdyb3VwQnlSZWNvcmRbXSwgZ3JvdXBpbmdTdGF0ZTogSUdyb3VwaW5nU3RhdGUsIHNldEdyaWRQYXJlbnQ6IGJvb2xlYW4sIHBhcmVudEV4cGFuZGVkID0gdHJ1ZSwgc3VtbWFyeUtleXNBcnI6IHN0cmluZ1tdID0gW10pIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJldmlvdXNLZXkgPSAnJ1xuICAgICAgICBjb25zdCBmaXJzdENvbCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUikuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIgJiYgIWMuc2tpcClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpWzBdLmZpZWxkO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGxldCByZWNvcmRWYWwgPSByZWNvcmQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IHNldEdyaWRQYXJlbnQgPyBHUklEX1BBUkVOVCA6IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gO1xuICAgICAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gZ2V0SGllcmFyY2h5KHJlY29yZCk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRTdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZSA9IGdyb3VwaW5nU3RhdGUuZXhwYW5zaW9uLmZpbmQoKHMpID0+XG4gICAgICAgICAgICAgICAgaXNIaWVyYXJjaHlNYXRjaChzLmhpZXJhcmNoeSB8fCBbeyBmaWVsZE5hbWU6IHJlY29yZC5leHByZXNzaW9uLmZpZWxkTmFtZSwgdmFsdWU6IHJlY29yZFZhbCB9XSxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaHksXG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zKSk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZFN0YXRlID8gZXhwYW5kU3RhdGUuZXhwYW5kZWQgOiBncm91cGluZ1N0YXRlLmRlZmF1bHRFeHBhbmRlZDtcblxuICAgICAgICAgICAgY29uc3QgaXNEYXRlID0gcmVjb3JkVmFsIGluc3RhbmNlb2YgRGF0ZTtcblxuICAgICAgICAgICAgaWYgKGlzRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gcmVjb3JkVmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc29TdHJpbmcgPSAobmV3IERhdGUocmVjb3JkVmFsIC0gdGltZVpvbmVPZmZzZXQpKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgRGF0ZVBpcGUoZ3JpZC5sb2NhbGUpO1xuICAgICAgICAgICAgICAgIHJlY29yZFZhbCA9IHBpcGUudHJhbnNmb3JtKGlzb1N0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXhwcmVzc2lvbk5hbWUgPSByZWNvcmQuY29sdW1uICYmIHJlY29yZC5jb2x1bW4uaGVhZGVyID9cbiAgICAgICAgICAgICAgICByZWNvcmQuY29sdW1uLmhlYWRlciA6XG4gICAgICAgICAgICAgICAgcmVjb3JkLmV4cHJlc3Npb24uZmllbGROYW1lO1xuXG4gICAgICAgICAgICByZWNvcmRWYWwgPSByZWNvcmRWYWwgIT09IG51bGwgPyByZWNvcmRWYWwgOiAnJztcblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByZXNzaW9uOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgW2ZpcnN0Q29sXTogYCR7Z3JvdXBFeHByZXNzaW9uTmFtZX06ICR7cmVjb3JkVmFsID8/ICcoQmxhbmspJ30gKCR7cmVjb3JkLnJlY29yZHMubGVuZ3RofSlgIH0sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICBoaWRkZW46ICFwYXJlbnRFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChncm91cEV4cHJlc3Npb24pO1xuXG4gICAgICAgICAgICBsZXQgY3VycktleSA9ICcnO1xuICAgICAgICAgICAgbGV0IHN1bW1hcnlLZXkgPSAnJztcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICAgICAgY3VycktleSA9IGAnJHtyZWNvcmQuZXhwcmVzc2lvbi5maWVsZE5hbWV9JzogJyR7cmVjb3JkVmFsfSdgO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyID0gc3VtbWFyeUtleXNBcnIuZmlsdGVyKGEgPT4gYSAhPT0gcHJldmlvdXNLZXkpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzS2V5ID0gY3VycktleTtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5S2V5c0Fyci5wdXNoKGN1cnJLZXkpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXkgPSBgeyAke3N1bW1hcnlLZXlzQXJyLmpvaW4oJywgJyl9IH1gO1xuICAgICAgICAgICAgICAgIGdyb3VwRXhwcmVzc2lvbi5zdW1tYXJ5S2V5ID0gc3VtbWFyeUtleTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlY29yZC5ncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXBlZERhdGEoZ3JpZCwgcmVjb3JkLmdyb3VwcywgZ3JvdXBpbmdTdGF0ZSwgZmFsc2UsIGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkLCBzdW1tYXJ5S2V5c0Fycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1JlY29yZHMgPSByZWNvcmQucmVjb3JkcztcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgcm93UmVjb3JkIG9mIHJvd1JlY29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJvd1JlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhKGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1bW1hcnlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWNvcmQuc3VtbWFyeUtleSA9IHN1bW1hcnlLZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goY3VycmVudFJlY29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhzdW1tYXJ5S2V5LCByZWNvcmQubGV2ZWwgKyAxLCAhKGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKSwgbnVsbCwgbnVsbCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5zKGNvbHVtbnM6IENvbHVtblR5cGVbXSk6IElDb2x1bW5MaXN0IHtcbiAgICAgICAgY29uc3QgY29sTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBjb2xXaWR0aExpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IFtdO1xuICAgICAgICBsZXQgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSAtMTtcbiAgICAgICAgbGV0IGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSAtMTtcbiAgICAgICAgbGV0IG1heExldmVsID0gMDtcblxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uSGVhZGVyID0gIUV4cG9ydFV0aWxpdGllcy5pc051bGxPcldoaXRlc3BhY2VzKGNvbHVtbi5oZWFkZXIpID8gY29sdW1uLmhlYWRlciA6IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydENvbHVtbiA9ICFjb2x1bW4uaGlkZGVuIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlciB8fCB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc1Zpc2liaWxpdHkgPyBjb2x1bW4uaW5kZXggOiBjb2x1bW4udmlzaWJsZUluZGV4O1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBOdW1iZXIoY29sdW1uLndpZHRoPy5zbGljZSgwLCAtMikpIHx8IERFRkFVTFRfQ09MVU1OX1dJRFRIO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uTGV2ZWwgPSAhdGhpcy5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycyA/IGNvbHVtbi5sZXZlbCA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlDb2xIZWFkZXIgPSBjb2x1bW4uY29sdW1uR3JvdXA7XG4gICAgICAgICAgICBjb25zdCBjb2xTcGFuID0gaXNNdWx0aUNvbEhlYWRlciA/XG4gICAgICAgICAgICAgICAgY29sdW1uLmFsbENoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY2ggPT4gIShjaC5jb2x1bW5Hcm91cCkgJiYgKCF0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc1Zpc2liaWxpdHkgPyAhY2guaGlkZGVuIDogdHJ1ZSkpXG4gICAgICAgICAgICAgICAgICAgIC5sZW5ndGggOlxuICAgICAgICAgICAgICAgIDE7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogRXhwb3J0VXRpbGl0aWVzLnNhbml0aXplVmFsdWUoY29sdW1uSGVhZGVyKSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sdW1uLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgc2tpcDogIWV4cG9ydENvbHVtbixcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbHVtbi5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG5cbiAgICAgICAgICAgICAgICBoZWFkZXJUeXBlOiBpc011bHRpQ29sSGVhZGVyID8gRXhwb3J0SGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciA6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IGNvbFNwYW4sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGNvbHVtbkxldmVsLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiAhY29sdW1uLnBpbm5lZCA/XG4gICAgICAgICAgICAgICAgICAgIE51bWJlci5NQVhfVkFMVUUgOlxuICAgICAgICAgICAgICAgICAgICAhY29sdW1uLmhpZGRlbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZ3JpZC5waW5uZWRDb2x1bW5zLmluZGV4T2YoY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBOYU4sXG4gICAgICAgICAgICAgICAgY29sdW1uR3JvdXBQYXJlbnQ6IGNvbHVtbi5wYXJlbnQgPyBjb2x1bW4ucGFyZW50IDogbnVsbCxcbiAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cDogaXNNdWx0aUNvbEhlYWRlciA/IGNvbHVtbiA6IG51bGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmN1cnJlbmN5Q29kZSA9IGNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKHRoaXMubG9jYWxlKTtcblxuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGlzcGxheUZvcm1hdCA9IGNvbHVtbi5waXBlQXJncy5kaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnBpcGVBcmdzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgOiAnc3ltYm9sJztcblxuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGlnaXRzSW5mbyA9IGNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgOiAnMS4wLTInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRhdGVGb3JtYXQgPSBnZXRMb2NhbGVEYXRlRm9ybWF0KHRoaXMubG9jYWxlLCBGb3JtYXRXaWR0aC5NZWRpdW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kYXRlRm9ybWF0ID0gZ2V0TG9jYWxlRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIEZvcm1hdFdpZHRoLk1lZGl1bSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbkluZm8uc3RhcnRJbmRleCAhPT0gY29sdW1uSW5mby5waW5uZWRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLnBpbm5lZEluZGV4ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4ubGV2ZWwgPiBtYXhMZXZlbCAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycykge1xuICAgICAgICAgICAgICAgIG1heExldmVsID0gY29sdW1uLmxldmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29sTGlzdC5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgICAgIGNvbFdpZHRoTGlzdC5wdXNoKGNvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZUNvbHVtbkluZGV4ID0gTWF0aC5tYXgobGFzdFZpc2libGVDb2x1bW5JbmRleCwgY29sTGlzdC5pbmRleE9mKGNvbHVtbkluZm8pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGlkZGVuQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLnBpbm5lZCAmJiBleHBvcnRDb2x1bW4gJiYgY29sdW1uSW5mby5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9BcHBlbmQgdGhlIGhpZGRlbiBjb2x1bW5zIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgaGlkZGVuQ29sdW1ucy5mb3JFYWNoKChoaWRkZW5Db2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbExpc3RbKytsYXN0VmlzaWJsZUNvbHVtbkluZGV4XSA9IGhpZGRlbkNvbHVtbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBJQ29sdW1uTGlzdCA9IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbExpc3QsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aHM6IGNvbFdpZHRoTGlzdCxcbiAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uLFxuICAgICAgICAgICAgbWF4TGV2ZWxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kOiBhbnksIGdyaWREYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IGNvbHVtbkxpc3Q6IElDb2x1bW5MaXN0O1xuICAgICAgICBsZXQga2V5RGF0YTtcblxuICAgICAgICBpZiAoaXNsYW5kLmF1dG9HZW5lcmF0ZSkge1xuICAgICAgICAgICAga2V5RGF0YSA9IGdyaWREYXRhW2lzbGFuZC5rZXldO1xuICAgICAgICAgICAgY29uc3QgaXNsYW5kS2V5cyA9IGlzbGFuZC5jaGlsZHJlbi5tYXAoaSA9PiBpLmtleSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzbGFuZERhdGEgPSBrZXlEYXRhLm1hcChpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0ge307XG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpKS5tYXAoayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNsYW5kS2V5cy5pbmNsdWRlcyhrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbVtrXSA9IGlba107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbHVtbkxpc3QgPSB0aGlzLmdldEF1dG9HZW5lcmF0ZWRDb2x1bW5zKGlzbGFuZERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNsYW5kQ29sdW1uTGlzdCA9IGlzbGFuZC5jb2x1bW5zO1xuICAgICAgICAgICAgY29sdW1uTGlzdCA9IHRoaXMuZ2V0Q29sdW1ucyhpc2xhbmRDb2x1bW5MaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoaXNsYW5kLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICBpZiAoaXNsYW5kLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGRJc2xhbmQgb2YgaXNsYW5kLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNsYW5kS2V5RGF0YSA9IGtleURhdGEgIT09IHVuZGVmaW5lZCA/IGtleURhdGFbMF0gOiB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEhpZXJhcmNoaWNhbEdyaWRDb2x1bW5zKGNoaWxkSXNsYW5kLCBpc2xhbmRLZXlEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXV0b0dlbmVyYXRlZENvbHVtbnMoZGF0YTogYW55W10pIHtcbiAgICAgICAgY29uc3QgY29sTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBjb2xXaWR0aExpc3QgPSBbXTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuXG4gICAgICAgIGtleXMuZm9yRWFjaCgoY29sS2V5LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmZvOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IGNvbEtleSxcbiAgICAgICAgICAgICAgICBmaWVsZDogY29sS2V5LFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBza2lwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJUeXBlOiBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcixcbiAgICAgICAgICAgICAgICBjb2x1bW5TcGFuOiAxLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGksXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6IE51bWJlci5NQVhfVkFMVUVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbExpc3QucHVzaChjb2x1bW5JbmZvKTtcbiAgICAgICAgICAgIGNvbFdpZHRoTGlzdC5wdXNoKERFRkFVTFRfQ09MVU1OX1dJRFRIKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBJQ29sdW1uTGlzdCA9IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbExpc3QsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aHM6IGNvbFdpZHRoTGlzdCxcbiAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uOiAtMSxcbiAgICAgICAgICAgIG1heExldmVsOiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFBpdm90Um93SGVhZGVycyhncmlkOiBhbnkpIHtcbiAgICAgICAgaWYgKGdyaWQ/LnBpdm90VUk/LnNob3dSb3dIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUik7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVkUm93cyA9IGdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MuZmlsdGVyKHIgPT4gci5lbmFibGVkKS5tYXAoKHIsIGluZGV4KSA9PiAoeyBuYW1lOiByLmRpc3BsYXlOYW1lIHx8IHIubWVtYmVyTmFtZSwgbGV2ZWw6IGluZGV4IH0pKTtcbiAgICAgICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIGVuYWJsZWRSb3dzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc0xpc3QuY29sdW1ucy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbjogaGVhZGVyc0xpc3QubWF4TGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogeC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2tpcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogeC5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJUeXBlOiBFeHBvcnRIZWFkZXJUeXBlLlBpdm90Um93SGVhZGVyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCArPSAxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBoZWFkZXJzTGlzdC5jb2x1bW5XaWR0aHMudW5zaGlmdCguLi5BcnJheShlbmFibGVkUm93cy5sZW5ndGgpLmZpbGwoMjAwKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkOiBhbnkpIHtcbiAgICAgICAgaWYgKGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maWx0ZXIociA9PiByLmVuYWJsZWQpLm1hcCgociwgaSkgPT4gKHsgbmFtZTogci5tZW1iZXJOYW1lLCBsZXZlbDogaSB9KSk7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhlbmFibGVkUm93cyk7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQgPSBlbmFibGVkUm93cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUik7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1ucy51bnNoaWZ0KC4uLnRoaXMucGl2b3RHcmlkQ29sdW1ucyk7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1uV2lkdGhzLnVuc2hpZnQoLi4uQXJyYXkodGhpcy5waXZvdEdyaWRDb2x1bW5zLmxlbmd0aCkuZmlsbCgyMDApKTtcbiAgICAgICAgY29sdW1uTGlzdC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IGVuYWJsZWRSb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbHVtbkxpc3QubWF4Um93TGV2ZWwgPSBlbmFibGVkUm93cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhrZXlzOiBhbnksIGNvbHVtbkdyb3VwUGFyZW50Pzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLmZsYXRSZWNvcmRzLm1hcChyID0+IHIuZGF0YSk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZWNvcmRzID0ge307XG5cbiAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IG9ialtrZXkubmFtZV07XG4gICAgICAgICAgICBpZiAoIWdyb3VwZWRSZWNvcmRzW2tleVZhbHVlXSkge1xuICAgICAgICAgICAgICAgIGdyb3VwZWRSZWNvcmRzW2tleVZhbHVlXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba2V5VmFsdWVdLnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNvbHVtbkdyb3VwUGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBtYXBLZXlzID0gWy4uLnRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAua2V5cygpXTtcbiAgICAgICAgICAgIGNvbnN0IG1hcFZhbHVlcyA9IFsuLi50aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLnZhbHVlcygpXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGdyb3VwZWRSZWNvcmRzKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwZWRSZWNvcmRzW2tdID0gZ3JvdXBlZFJlY29yZHNba10uZmlsdGVyKHJvdyA9PiBtYXBLZXlzLmV2ZXJ5KG1rID0+IE9iamVjdC5rZXlzKHJvdykuaW5jbHVkZXMobWspKVxuICAgICAgICAgICAgICAgICAgICAmJiBtYXBWYWx1ZXMuZXZlcnkobXYgPT4gT2JqZWN0LnZhbHVlcyhyb3cpLmluY2x1ZGVzKG12KSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlY29yZHNba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGdyb3VwZWRSZWNvcmRzKSkge1xuICAgICAgICAgICAgY29uc3Qgcm93U3BhbiA9IGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aDtcblxuICAgICAgICAgICAgY29uc3Qgcm93RGltZW5zaW9uQ29sdW1uOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICByb3dTcGFuLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogayxcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgIGxldmVsOiBrZXkubGV2ZWwsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IGdyb3VwZWRSZWNvcmRzW2tdLmxlbmd0aCA+IDEgPyBFeHBvcnRIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyIDogRXhwb3J0SGVhZGVyVHlwZS5Sb3dIZWFkZXIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uR3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25Db2x1bW4uY29sdW1uR3JvdXBQYXJlbnQgPSBjb2x1bW5Hcm91cFBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93RGltZW5zaW9uQ29sdW1uLmNvbHVtbkdyb3VwID0gaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRDb2x1bW5zLnB1c2gocm93RGltZW5zaW9uQ29sdW1uKTtcblxuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAuc2V0KGtleS5uYW1lLCBrKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdLZXlzID0ga2V5cy5maWx0ZXIoa2RkID0+IGtkZCAhPT0ga2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVQaXZvdEdyaWRDb2x1bW5zKG5ld0tleXMsIGspXG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5kZWxldGUoa2V5Lm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydEluZGV4ICs9IHJvd1NwYW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExldmVsQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5mb3JFYWNoKG9tID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXZlbENvbDogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogR1JJRF9MRVZFTF9DT0wsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEdSSURfTEVWRUxfQ09MLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5TcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgb20uY29sdW1ucy5wdXNoKGxldmVsQ29sKTtcbiAgICAgICAgICAgICAgICBvbS5jb2x1bW5XaWR0aHMucHVzaCgyMCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRMZXZlbERhdGEoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwb3J0U3VtbWFyaWVzICYmIHRoaXMuc3VtbWFyaWVzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgciBvZiB0aGlzLmZsYXRSZWNvcmRzKXtcbiAgICAgICAgICAgICAgICBpZiAoci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQgfHwgci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLlRyZWVHcmlkUmVjb3JkIHx8IHIudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIHIuZGF0YVtHUklEX0xFVkVMX0NPTF0gPSByLmxldmVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXREZWZhdWx0cygpIHtcbiAgICAgICAgdGhpcy5fc29ydCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge30gYXMgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZTtcbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQ291bnRlciA9IDA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSwgZG9uZTogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG4iXX0=
|
|
1090
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFrQixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRyxPQUFPLEVBQXNCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3QixtREFBK0IsQ0FBQTtJQUMvQix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQVEzQjtBQUVELE1BQU0s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QUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQTRCLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgY2xvbmVWYWx1ZSwgSUJhc2VFdmVudEFyZ3MsIHJlc29sdmVOZXN0ZWRQYXRoLCB5aWVsZGluZ0xvb3AgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSwgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IEV4cG9ydFV0aWxpdGllcyB9IGZyb20gJy4vZXhwb3J0LXV0aWxpdGllcyc7XG5pbXBvcnQgeyBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlIH0gZnJvbSAnLi9leHBvcnRlci1vcHRpb25zLWJhc2UnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi4vLi4vZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRyZWVHcmlkRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5zdHJhdGVneSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRIaWVyYXJjaHksIGlzSGllcmFyY2h5TWF0Y2ggfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRm9ybWF0V2lkdGgsIGdldExvY2FsZUN1cnJlbmN5Q29kZSwgZ2V0TG9jYWxlRGF0ZUZvcm1hdCwgZ2V0TG9jYWxlRGF0ZVRpbWVGb3JtYXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtblR5cGUsIEdyaWRUeXBlLCBJUGF0aFNlZ21lbnQgfSBmcm9tICcuLi8uLi9ncmlkcy9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4uLy4uL2dyaWRzL3N1bW1hcmllcy9ncmlkLXN1bW1hcnknO1xuaW1wb3J0IHsgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9ncmlkcy9jb21tb24vZW51bXMnO1xuXG5leHBvcnQgZW51bSBFeHBvcnRSZWNvcmRUeXBlIHtcbiAgICBHcm91cGVkUmVjb3JkID0gJ0dyb3VwZWRSZWNvcmQnLFxuICAgIFRyZWVHcmlkUmVjb3JkID0gJ1RyZWVHcmlkUmVjb3JkJyxcbiAgICBEYXRhUmVjb3JkID0gJ0RhdGFSZWNvcmQnLFxuICAgIEhpZXJhcmNoaWNhbEdyaWRSZWNvcmQgPSAnSGllcmFyY2hpY2FsR3JpZFJlY29yZCcsXG4gICAgSGVhZGVyUmVjb3JkID0gJ0hlYWRlclJlY29yZCcsXG4gICAgU3VtbWFyeVJlY29yZCA9ICdTdW1tYXJ5UmVjb3JkJyxcbiAgICBQaXZvdEdyaWRSZWNvcmQgPSAnUGl2b3RHcmlkUmVjb3JkJ1xufVxuXG5leHBvcnQgZW51bSBFeHBvcnRIZWFkZXJUeXBlIHtcbiAgICBSb3dIZWFkZXIgPSAnUm93SGVhZGVyJyxcbiAgICBDb2x1bW5IZWFkZXIgPSAnQ29sdW1uSGVhZGVyJyxcbiAgICBNdWx0aVJvd0hlYWRlciA9ICdNdWx0aVJvd0hlYWRlcicsXG4gICAgTXVsdGlDb2x1bW5IZWFkZXIgPSAnTXVsdGlDb2x1bW5IZWFkZXInLFxuICAgIFBpdm90Um93SGVhZGVyID0gJ1Bpdm90Um93SGVhZGVyJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXhwb3J0UmVjb3JkIHtcbiAgICBkYXRhOiBhbnk7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlO1xuICAgIG93bmVyPzogc3RyaW5nIHwgR3JpZFR5cGU7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICBzdW1tYXJ5S2V5Pzogc3RyaW5nO1xuICAgIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5MaXN0IHtcbiAgICBjb2x1bW5zOiBJQ29sdW1uSW5mb1tdO1xuICAgIGNvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IG51bWJlcjtcbiAgICBtYXhMZXZlbD86IG51bWJlcjtcbiAgICBtYXhSb3dMZXZlbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uSW5mbyB7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBza2lwOiBib29sZWFuO1xuICAgIGRhdGFUeXBlPzogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIHNraXBGb3JtYXR0ZXI/OiBib29sZWFuO1xuICAgIGZvcm1hdHRlcj86IGFueTtcbiAgICBoZWFkZXJUeXBlPzogRXhwb3J0SGVhZGVyVHlwZTtcbiAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgIGNvbHVtblNwYW4/OiBudW1iZXI7XG4gICAgcm93U3Bhbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBleHBvcnRJbmRleD86IG51bWJlcjtcbiAgICBwaW5uZWRJbmRleD86IG51bWJlcjtcbiAgICBjb2x1bW5Hcm91cFBhcmVudD86IENvbHVtblR5cGUgfCBzdHJpbmc7XG4gICAgY29sdW1uR3JvdXA/OiBDb2x1bW5UeXBlIHwgc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG4gICAgZGlnaXRzSW5mbz86IHN0cmluZztcbn1cbi8qKlxuICogcm93RXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3dFeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyByb3cgZGF0YVxuICAgICAqL1xuICAgIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGluZGV4XG4gICAgICovXG4gICAgcm93SW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyByb3cgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBjb2x1bW5FeHBvcnRpbmcgZXZlbnQgYXJndW1lbnRzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmV4cG9ydGVyU2VydmljZS5jb2x1bW5FeHBvcnRpbmcuc3Vic2NyaWJlKChhcmdzOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSA9PiB7XG4gKiAvLyBzZXQgYXJncyBwcm9wZXJ0aWVzIGhlcmVcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBoZWFkZXJcbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBmaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaW5kZXhcbiAgICAgKi9cbiAgICBjb2x1bW5JbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2tpcCB0aGUgZXhwb3J0aW5nIGNvbHVtbiB3aGVuIHNldCB0byB0cnVlXG4gICAgICovXG4gICAgY2FuY2VsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXhwb3J0IHRoZSBjb2x1bW4ncyBkYXRhIHdpdGhvdXQgYXBwbHlpbmcgaXRzIGZvcm1hdHRlciwgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIHNraXBGb3JtYXR0ZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBvd25lci5cbiAgICAgKi9cbiAgICBncmlkPzogR3JpZFR5cGU7XG59XG5cbi8qKmhpZGRlblxuICogQSBoZWxwZXIgY2xhc3MgdXNlZCB0byBpZGVudGlmeSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBzZXQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleFxuICogZHVyaW5nIGNvbHVtbkV4cG9ydGluZywgc28gd2UgY2FuIGhvbm9yIGl0IGF0IHRoZSBleHBvcnRlZCBmaWxlLlxuKi9cbmNsYXNzIElneENvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBpbXBsZW1lbnRzIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3Mge1xuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2FuY2VsOiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBncmlkPzogR3JpZFR5cGU7XG4gICAgcHVibGljIG93bmVyPzogYW55O1xuICAgIHB1YmxpYyB1c2VyU2V0SW5kZXg/ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9jb2x1bW5JbmRleD86IG51bWJlcjtcblxuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jb2x1bW5JbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVzZXJTZXRJbmRleCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWw6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBvcmlnaW5hbC5oZWFkZXI7XG4gICAgICAgIHRoaXMuZmllbGQgPSBvcmlnaW5hbC5maWVsZDtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBvcmlnaW5hbC5jYW5jZWw7XG4gICAgICAgIHRoaXMuc2tpcEZvcm1hdHRlciA9IG9yaWdpbmFsLnNraXBGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZ3JpZCA9IG9yaWdpbmFsLmdyaWQ7XG4gICAgICAgIHRoaXMub3duZXIgPSBvcmlnaW5hbC5vd25lcjtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSBvcmlnaW5hbC5jb2x1bW5JbmRleDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09XTkVSID0gJ2RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IEdSSURfUk9PVF9TVU1NQVJZID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG5leHBvcnQgY29uc3QgR1JJRF9QQVJFTlQgPSAnZ3JpZC1wYXJlbnQnO1xuZXhwb3J0IGNvbnN0IEdSSURfTEVWRUxfQ09MID0gJ0dSSURfTEVWRUxfQ09MJztcbmNvbnN0IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gOC40MztcbmNvbnN0IEdSSURfQ0hJTEQgPSAnZ3JpZC1jaGlsZC0nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWd4QmFzZUV4cG9ydGVyIHtcblxuICAgIHB1YmxpYyBleHBvcnRFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJvdyBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyByb3dFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dFeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5FeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBudWxsO1xuICAgIHByb3RlY3RlZCBwaXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfb3duZXJzTWFwOiBNYXA8YW55LCBJQ29sdW1uTGlzdD4gPSBuZXcgTWFwPGFueSwgSUNvbHVtbkxpc3Q+KCk7XG5cbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nXG4gICAgcHJpdmF0ZSBfc2V0Q2hpbGRTdW1tYXJpZXMgPSBmYWxzZVxuICAgIHByaXZhdGUgaXNQaXZvdEdyaWRFeHBvcnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgIHByaXZhdGUgc3VtbWFyaWVzOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG4gICAgcHJpdmF0ZSByb3dJc2xhbmRDb3VudGVyID0gLTE7XG4gICAgcHJpdmF0ZSBmbGF0UmVjb3JkczogSUV4cG9ydFJlY29yZFtdID0gW107XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRDb2x1bW5zOiBJQ29sdW1uSW5mb1tdID0gW11cbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRLZXlWYWx1ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBJZ3hHcmlkIGNvbXBvbmVudCdzIGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLmlneEdyaWRGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydChncmlkOiBhbnksIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubG9jYWxlID0gZ3JpZC5sb2NhbGU7XG4gICAgICAgIGxldCBjb2x1bW5zID0gZ3JpZC5jb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbkxpc3QgPSB0aGlzLmdldENvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJykge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChncmlkLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kLCBncmlkLmRhdGFbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkQ29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc1Bpdm90R3JpZEV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MuZmlsdGVyKHIgPT4gci5lbmFibGVkKS5mb3JFYWNoKHJvd0RpbWVuc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLCByb3dEaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1bW1hcmllcyA9IHRoaXMucHJlcGFyZVN1bW1hcmllcyhncmlkKTtcbiAgICAgICAgdGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMgPSAgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDEgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5O1xuXG4gICAgICAgIHRoaXMuYWRkTGV2ZWxDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucHJlcGFyZURhdGEoZ3JpZCk7XG4gICAgICAgIHRoaXMuYWRkTGV2ZWxEYXRhKCk7XG4gICAgICAgIHRoaXMuYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkKTtcbiAgICAgICAgdGhpcy5hZGRQaXZvdFJvd0hlYWRlcnMoZ3JpZCk7XG4gICAgICAgIHRoaXMuZXhwb3J0R3JpZFJlY29yZHNEYXRhKHRoaXMuZmxhdFJlY29yZHMsIGdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBmb3IgZXhwb3J0aW5nIGFueSBraW5kIG9mIGFycmF5IGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5hcnJheUZvckV4cG9ydCwgdGhpcy5leHBvcnRPcHRpb25zKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hCYXNlRXhwb3J0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwb3J0RGF0YShkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSk6IHZvaWQge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdObyBvcHRpb25zIHByb3ZpZGVkIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCByZWNvcmRzID0gZGF0YS5tYXAoZCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXhwb3J0R3JpZFJlY29yZHNEYXRhKHJlY29yZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9Sb3dEaW1lbnNpb25zTWFwKHJvd0RpbWVuc2lvbjogYW55LCByb290UGFyZW50TmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcFtyb3dEaW1lbnNpb24ubWVtYmVyTmFtZV0gPSByb290UGFyZW50TmFtZTtcbiAgICAgICAgaWYgKHJvd0RpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvUm93RGltZW5zaW9uc01hcChyb3dEaW1lbnNpb24uY2hpbGRMZXZlbCwgcm9vdFBhcmVudE5hbWUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydEdyaWRSZWNvcmRzRGF0YShyZWNvcmRzOiBJRXhwb3J0UmVjb3JkW10sIGdyaWQ/OiBHcmlkVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fb3duZXJzTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZHNEYXRhID0gcmVjb3Jkcy5maWx0ZXIociA9PiByLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZCkubWFwKHIgPT4gci5kYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBFeHBvcnRVdGlsaXRpZXMuZ2V0S2V5c0Zyb21EYXRhKHJlY29yZHNEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBrZXlzLm1hcCgoaykgPT5cbiAgICAgICAgICAgICAgICAoeyBoZWFkZXI6IGssIGZpZWxkOiBrLCBza2lwOiBmYWxzZSwgaGVhZGVyVHlwZTogRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsIGxldmVsOiAwLCBjb2x1bW5TcGFuOiAxIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IG5ldyBBcnJheTxudW1iZXI+KGtleXMubGVuZ3RoKS5maWxsKERFRkFVTFRfQ09MVU1OX1dJRFRIKTtcblxuICAgICAgICAgICAgY29uc3QgbWFwUmVjb3JkOiBJQ29sdW1uTGlzdCA9IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGNvbHVtbldpZHRocyxcbiAgICAgICAgICAgICAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbjogLTEsXG4gICAgICAgICAgICAgICAgbWF4TGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgbWFwUmVjb3JkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzaG91bGRSZW9yZGVyQ29sdW1ucyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIG1hcFJlY29yZF0gb2YgdGhpcy5fb3duZXJzTWFwKSB7XG4gICAgICAgICAgICBsZXQgc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudCA9IDA7XG4gICAgICAgICAgICBsZXQgY29sdW1uc1dpdGhvdXRIZWFkZXJDb3VudCA9IDE7XG4gICAgICAgICAgICBsZXQgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSBtYXBSZWNvcmQuaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW47XG5cbiAgICAgICAgICAgIG1hcFJlY29yZC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkV4cG9ydEFyZ3M6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6ICFFeHBvcnRVdGlsaXRpZXMuaXNOdWxsT3JXaGl0ZXNwYWNlcyhjb2x1bW4uaGVhZGVyKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlciA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbHVtbicgKyBjb2x1bW5zV2l0aG91dEhlYWRlckNvdW50KyssXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBGb3JtYXR0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZDoga2V5ID09PSBERUZBVUxUX09XTkVSID8gZ3JpZCA6IGtleVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbkV4cG9ydEFyZ3MgPSBuZXcgSWd4Q29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKGNvbHVtbkV4cG9ydEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkV4cG9ydGluZy5lbWl0KG5ld0NvbHVtbkV4cG9ydEFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXIgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmhlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNraXAgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmNhbmNlbDtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNraXBGb3JtYXR0ZXIgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLnNraXBGb3JtYXR0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NvbHVtbkV4cG9ydEFyZ3MudXNlclNldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZXhwb3J0SW5kZXggPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmNvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVvcmRlckNvbHVtbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnMoY29sdW1uLCBtYXBSZWNvcmQsIGNvbHVtbi5jb2x1bW5TcGFuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9uU2tpcHBlZENvbHVtbnMgPSBtYXBSZWNvcmQuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vblNraXBwZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vd25lcnNNYXAuZ2V0KGtleSkubWF4TGV2ZWwgPSBub25Ta2lwcGVkQ29sdW1ucy5zb3J0KChhLCBiKSA9PiBiLmxldmVsIC0gYS5sZXZlbClbMF0ubGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc29ydCAmJiB0aGlzLl9zb3J0LmZpZWxkTmFtZSA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydC5maWVsZE5hbWUgPSBjb2x1bW4uaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uIC09IHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQ7XG5cbiAgICAgICAgICAgIC8vIFJlb3JkZXIgY29sdW1ucyBvbmx5IGlmIGEgY29sdW1uIGhhcyBiZWVuIGFzc2lnbmVkIGEgc3BlY2lmaWMgY29sdW1uSW5kZXggZHVyaW5nIGNvbHVtbkV4cG9ydGluZyBldmVudFxuICAgICAgICAgICAgaWYgKHNob3VsZFJlb3JkZXJDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgbWFwUmVjb3JkLmNvbHVtbnMgPSB0aGlzLnJlb3JkZXJDb2x1bW5zKG1hcFJlY29yZC5jb2x1bW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IG5ldyBBcnJheTxJRXhwb3J0UmVjb3JkPigpO1xuICAgICAgICBjb25zdCBhY3R1YWxEYXRhID0gcmVjb3Jkc1swXT8uZGF0YTtcbiAgICAgICAgY29uc3QgaXNTcGVjaWFsRGF0YSA9IEV4cG9ydFV0aWxpdGllcy5pc1NwZWNpYWxEYXRhKGFjdHVhbERhdGEpO1xuXG4gICAgICAgIHlpZWxkaW5nTG9vcChyZWNvcmRzLmxlbmd0aCwgMTAwLCAoaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gcmVjb3Jkc1tpXTtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0Um93KGRhdGFUb0V4cG9ydCwgcm93LCBpLCBpc1NwZWNpYWxEYXRhKTtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBvcnREYXRhSW1wbGVtZW50YXRpb24oZGF0YVRvRXhwb3J0LCB0aGlzLm9wdGlvbnMsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUNvbHVtblNwYW5zKGNvbHVtbjogSUNvbHVtbkluZm8sIG1hcFJlY29yZDogSUNvbHVtbkxpc3QsIHNwYW46IG51bWJlcikge1xuICAgICAgICBpZiAoY29sdW1uLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgJiYgY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwQ2hpbGRyZW4gPSBtYXBSZWNvcmQuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmNvbHVtbkdyb3VwUGFyZW50ID09PSBjb2x1bW4uY29sdW1uR3JvdXApO1xuXG4gICAgICAgICAgICBjb2x1bW5Hcm91cENoaWxkcmVuLmZvckVhY2goY2djID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2djLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2djLmNvbHVtblNwYW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICBjZ2MuY29sdW1uR3JvdXBQYXJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjZ2Muc2tpcCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyhjZ2MsIG1hcFJlY29yZCwgY2djLmNvbHVtblNwYW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5za2lwID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldENvbCA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+IGNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudCAhPT0gbnVsbCAmJiBjLmNvbHVtbkdyb3VwID09PSBjb2x1bW4uY29sdW1uR3JvdXBQYXJlbnQpWzBdO1xuICAgICAgICBpZiAodGFyZ2V0Q29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhcmdldENvbC5jb2x1bW5TcGFuIC09IHNwYW47XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRDb2wuY29sdW1uR3JvdXBQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtblNwYW5zKHRhcmdldENvbCwgbWFwUmVjb3JkLCBzcGFuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldENvbC5jb2x1bW5TcGFuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Q29sLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBvcnRSb3coZGF0YTogSUV4cG9ydFJlY29yZFtdLCByZWNvcmQ6IElFeHBvcnRSZWNvcmQsIGluZGV4OiBudW1iZXIsIGlzU3BlY2lhbERhdGE6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFpc1NwZWNpYWxEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBvd25lciA9IHJlY29yZC5vd25lciA9PT0gdW5kZWZpbmVkID8gREVGQVVMVF9PV05FUiA6IHJlY29yZC5vd25lcjtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyQ29scyA9IHRoaXMuX293bmVyc01hcC5nZXQob3duZXIpLmNvbHVtbnM7XG5cbiAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gb3duZXJDb2xzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICByZWNvcmQuZGF0YSA9IGNvbHVtbnMucmVkdWNlKChhLCBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmF3VmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChyZWNvcmQuZGF0YSwgZS5maWVsZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEFwcGx5Rm9ybWF0dGVyID0gZS5mb3JtYXR0ZXIgJiYgIWUuc2tpcEZvcm1hdHRlciAmJiByZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZkRhdGVUeXBlID0gZS5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGUuZGF0YVR5cGUgPT09ICdkYXRlVGltZScgfHwgZS5kYXRhVHlwZSA9PT0gJ3RpbWUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPZkRhdGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHJhd1ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc2hvdWxkQXBwbHlGb3JtYXR0ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSA9IG5ldyBEYXRlKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5kYXRhVHlwZSA9PT0gJ3N0cmluZycgJiYgcmF3VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgPSByYXdWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBzaG91bGRBcHBseUZvcm1hdHRlciA/IGUuZm9ybWF0dGVyKHJhd1ZhbHVlLCByZWNvcmQuZGF0YSkgOiByYXdWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQaXZvdEdyaWRFeHBvcnQgJiYgIWlzTmFOKHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gcGFyc2VGbG9hdChmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFbZS5maWVsZF0gPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSGVhZGVycyA9IG93bmVyQ29scy5maWx0ZXIoYyA9PiBjLnNraXApLm1hcChjID0+IGMuaGVhZGVyID8gYy5oZWFkZXIgOiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZWNvcmQuZGF0YSA9IHJlY29yZC5kYXRhLmZpbHRlcihkID0+IGZpbHRlcmVkSGVhZGVycy5pbmRleE9mKGQpID09PSAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dBcmdzID0ge1xuICAgICAgICAgICAgcm93RGF0YTogcmVjb3JkLmRhdGEsXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yb3dFeHBvcnRpbmcuZW1pdChyb3dBcmdzKTtcblxuICAgICAgICBpZiAoIXJvd0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVvcmRlckNvbHVtbnMoY29sdW1uczogSUNvbHVtbkluZm9bXSk6IElDb2x1bW5JbmZvW10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBmaWx0ZXJlZENvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzcGVjaWZpY0luZGljZXNDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhaXNOYU4oY29sLmV4cG9ydEluZGV4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLGIpID0+IGEuZXhwb3J0SW5kZXggLSBiLmV4cG9ydEluZGV4KTtcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnMubWFwKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXgpO1xuXG4gICAgICAgIHNwZWNpZmljSW5kaWNlc0NvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnNwbGljZShmaWx0ZXJlZENvbHVtbnMuaW5kZXhPZihjb2wpLCAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVvcmRlcmVkQ29sdW1ucyA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIGlmIChzcGVjaWZpY0luZGljZXNDb2x1bW5zLmxlbmd0aCA+IE1hdGgubWF4KC4uLmluZGljZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5jb25jYXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGljZXMuZm9yRWFjaCgoaSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnB1c2goc3BlY2lmaWNJbmRpY2VzQ29sdW1uc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrID0gaTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW5ndGggJiYgcmVvcmRlcmVkQ29sdW1uc1trXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2s7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVvcmRlcmVkQ29sdW1uc1trXSA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlb3JkZXJlZENvbHVtbnNbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5zW2ldID0gZmlsdGVyZWRDb2x1bW5zLnNwbGljZSgwLCAxKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVvcmRlcmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVEYXRhKGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiYgZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPyBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMuY29uY2F0KGdyaWQuc29ydGluZ0V4cHJlc3Npb25zIHx8IFtdKSA6IGdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gZXhwcmVzc2lvbnMgJiYgZXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcbiAgICAgICAgbGV0IHNldFN1bW1hcnlPd25lciA9IGZhbHNlO1xuXG4gICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnaWd4LXBpdm90LWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIHNldFN1bW1hcnlPd25lciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpZ3gtdHJlZS1ncmlkJzoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVRyZWVHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDAgJiYgZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5jaGlsZExldmVsc09ubHkpIHtcbiAgICAgICAgICAgIHNldFN1bW1hcnlPd25lciA/XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoR1JJRF9ST09UX1NVTU1BUlksIDAsIGZhbHNlLCBncmlkKSA6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoR1JJRF9ST09UX1NVTU1BUlkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBncmlkLmZpbHRlcmVkU29ydGVkRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkRGF0YSA9IE9iamVjdC5mcm9tRW50cmllcyhyZWNvcmQuYWdncmVnYXRpb25WYWx1ZXMpO1xuICAgICAgICAgICAgcmVjb3JkLmRpbWVuc2lvblZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsS2V5ID0gdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwW2tleV07XG4gICAgICAgICAgICAgICAgcmVjb3JkRGF0YVthY3R1YWxLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcGl2b3RHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZERhdGEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlBpdm90R3JpZFJlY29yZFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHBpdm90R3JpZFJlY29yZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZGF0YTtcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogZ3JpZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRGF0YVV0aWwuc29ydChkYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgcmVjb3JkczogYW55W10pIHtcbiAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG4gICAgICAgIGNvbnN0IGNvbHVtbkZpZWxkcyA9IHRoaXMuX293bmVyc01hcC5nZXQoZ3JpZCkuY29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZVZhbCA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhlbnRyeSkgPyBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQoZW50cnkpIDogZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFXaXRob3V0Q2hpbGRyZW4gPSBPYmplY3Qua2V5cyhlbnRyeSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gY29sdW1uRmllbGRzLmluY2x1ZGVzKGspKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gZW50cnlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbEdyaWRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YVdpdGhvdXRDaGlsZHJlbixcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgb3duZXI6IGdyaWQsXG4gICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXI6IEdSSURfUEFSRU5UXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGllcmFyY2hpY2FsR3JpZFJlY29yZCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGlzbGFuZC5wcmltYXJ5S2V5ID8gZW50cnlbaXNsYW5kLnByaW1hcnlLZXldIDogZW50cnksXG4gICAgICAgICAgICAgICAgICAgIHJvd0tleTogaXNsYW5kLnByaW1hcnlLZXkgPyBlbnRyeVtpc2xhbmQucHJpbWFyeUtleV0gOiBlbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kS2V5OiBpc2xhbmQua2V5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFuZEdyaWQgPSBncmlkPy5ncmlkQVBJLmdldENoaWxkR3JpZChbcGF0aF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZERhdGEgPSB0aGlzLnByZXBhcmVJc2xhbmREYXRhKGlzbGFuZCwgaXNsYW5kR3JpZCwgZW50cnlbaXNsYW5kLmtleV0pIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGlzbGFuZCwga2V5UmVjb3JkRGF0YSwgZXhwYW5zaW9uU3RhdGVWYWwsIGlzbGFuZEdyaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlU3VtbWFyaWVzKGdyaWQ6IGFueSk6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+IHtcbiAgICAgICAgbGV0IHN1bW1hcmllcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+PigpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwb3J0U3VtbWFyaWVzICYmIGdyaWQuc3VtbWFyeVNlcnZpY2Uuc3VtbWFyeUNhY2hlTWFwLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdW1tYXJ5Q2FjaGVNYXAgPSBncmlkLnN1bW1hcnlTZXJ2aWNlLnN1bW1hcnlDYWNoZU1hcDtcblxuICAgICAgICAgICAgc3dpdGNoKGdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUuY2hpbGRMZXZlbHNPbmx5OlxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKEdSSURfUk9PVF9TVU1NQVJZKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5OlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygc3VtbWFyeUNhY2hlTWFwLmtleXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgIT09IEdSSURfUk9PVF9TVU1NQVJZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3VtbWFyaWVzID0gc3VtbWFyeUNhY2hlTWFwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1bW1hcmllcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVJc2xhbmREYXRhKGlzbGFuZDogYW55LCBpc2xhbmRHcmlkOiBHcmlkVHlwZSwgZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIGlmIChpc2xhbmRHcmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZEdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gaXNsYW5kR3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmRHcmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGRhdGEsIGZpbHRlcmluZ1N0YXRlLCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBpc2xhbmRHcmlkLnNvcnRTdHJhdGVneSwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1NvcnRpbmcgPSBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoIXNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZC5zb3J0U3RyYXRlZ3ksIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGlzbGFuZDogYW55LFxuICAgICAgICBjaGlsZERhdGE6IGFueVtdLCBleHBhbnNpb25TdGF0ZVZhbDogYm9vbGVhbiwgZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsT3duZXIgPSBgJHtHUklEX0NISUxEfSR7Kyt0aGlzLnJvd0lzbGFuZENvdW50ZXJ9YDtcbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoaXNsYW5kKS5jb2x1bW5zO1xuICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSBjb2x1bW5MaXN0XG4gICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIpXG4gICAgICAgICAgICAubWFwKGNvbCA9PiBjb2wuaGVhZGVyID8gY29sLmhlYWRlciA6IGNvbC5maWVsZCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgbGV2ZWw6IGlzbGFuZC5sZXZlbCxcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkLFxuICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgIGhpZGRlbjogIWV4cGFuc2lvblN0YXRlVmFsLFxuICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2hpbGREYXRhICYmIGNoaWxkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGVhZGVyUmVjb3JkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZWMgb2YgY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZWMsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBpc2xhbmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWwsXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydFJlY29yZC5zdW1tYXJ5S2V5ID0gaXNsYW5kLmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZXhwb3J0UmVjb3JkKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRFeHBhbnNpb25TdGF0ZVZhbCA9IGdyaWQgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcy5oYXMocmVjKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJlYykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGRJc2xhbmQgb2YgaXNsYW5kLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoOiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGNoaWxkSXNsYW5kLnByaW1hcnlLZXkgPyByZWNbY2hpbGRJc2xhbmQucHJpbWFyeUtleV0gOiByZWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93S2V5OiBjaGlsZElzbGFuZC5wcmltYXJ5S2V5ID8gcmVjW2NoaWxkSXNsYW5kLnByaW1hcnlLZXldIDogcmVjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZEtleTogY2hpbGRJc2xhbmQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGRlZmluZWQgd2hlbiByb3cgaXMgZXhwYW5kZWQgaW4gVUlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkSXNsYW5kR3JpZCA9IGdyaWQ/LmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlSZWNvcmREYXRhID0gdGhpcy5wcmVwYXJlSXNsYW5kRGF0YShpc2xhbmQsIGNoaWxkSXNsYW5kR3JpZCwgcmVjW2NoaWxkSXNsYW5kLmtleV0pIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoY2hpbGRJc2xhbmQsIGtleVJlY29yZERhdGEsIGlzbGFuZEV4cGFuc2lvblN0YXRlVmFsLCBjaGlsZElzbGFuZEdyaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ3JpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IHRoaXMucHJlcGFyZVN1bW1hcmllcyhncmlkKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Ygc3VtbWFyaWVzLmtleXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5ID0gc3VtbWFyaWVzLmdldChrKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoaXNsYW5kLmtleSwgaXNsYW5kLmxldmVsLCAhZXhwYW5zaW9uU3RhdGVWYWwsIGlzbGFuZCwgc3VtbWFyeSwgaGllcmFyY2hpY2FsT3duZXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIGhhc0ZpbHRlcmluZzogYm9vbGVhbiwgaGFzU29ydGluZzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGU6IElHcm91cGluZ1N0YXRlID0ge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyxcbiAgICAgICAgICAgIGV4cGFuc2lvbjogZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlLFxuICAgICAgICAgICAgZGVmYXVsdEV4cGFuZGVkOiBncmlkLmdyb3Vwc0V4cGFuZGVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhc0dyb3VwaW5nID0gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpICYmXG4gICAgICAgICAgICAoIWhhc0dyb3VwaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpO1xuXG4gICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCBncmlkLmdyb3Vwc1JlY29yZHMsIGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmxhdERhdGEoZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGdyaWREYXRhID0gZ3JpZC5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBncmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZ3JpZERhdGEsIGZpbHRlcmluZ1N0YXRlLCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGRyb3Agc3VwcG9ydCBmb3IgdGhpcyBzaW5jZSBpbiBhIGdyb3VwZWQgZ3JpZCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9zb3J0ID0gIWlzR3JvdXBlZEdyaWQgP1xuICAgICAgICAgICAgICAgIC8vICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKSA6XG4gICAgICAgICAgICAgICAgLy8gICAgIGdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1sxXSkgOlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPyBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMuY29uY2F0KGdyaWQuc29ydGluZ0V4cHJlc3Npb25zIHx8IFtdKSA6IGdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRGF0YVV0aWwuc29ydChncmlkRGF0YSwgZXhwcmVzc2lvbnMsIGdyaWQuc29ydFN0cmF0ZWd5LCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cHNSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgRGF0YVV0aWwuZ3JvdXAoY2xvbmVBcnJheShncmlkRGF0YSksIGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZSwgZ3JpZC5ncm91cFN0cmF0ZWd5LCBncmlkLCBncm91cHNSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IGdyb3Vwc1JlY29yZHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNHcm91cGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUdyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCBncmlkRGF0YSwgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGbGF0RGF0YShncmlkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVUcmVlR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIGhhc0ZpbHRlcmluZzogYm9vbGVhbiwgaGFzU29ydGluZzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmVlR3JpZERhdGEoZ3JpZC5wcm9jZXNzZWRSb290UmVjb3Jkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ3JpZERhdGEgPSBncmlkLnJvb3RSZWNvcmRzO1xuXG4gICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiAoZ3JpZC5maWx0ZXJTdHJhdGVneSkgPyBncmlkLmZpbHRlclN0cmF0ZWd5IDogbmV3IFRyZWVHcmlkRmlsdGVyaW5nU3RyYXRlZ3koKVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IGZpbHRlcmluZ1N0YXRlLnN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZ3JpZERhdGEsIGZpbHRlcmluZ1N0YXRlLmV4cHJlc3Npb25zVHJlZSwgZmlsdGVyaW5nU3RhdGUuYWR2YW5jZWRFeHByZXNzaW9uc1RyZWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IERhdGFVdGlsLnRyZWVHcmlkU29ydChncmlkRGF0YSwgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGdyaWQuc29ydFN0cmF0ZWd5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hZGRUcmVlR3JpZERhdGEoZ3JpZERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUcmVlR3JpZERhdGEocmVjb3JkczogSVRyZWVHcmlkUmVjb3JkW10sIHBhcmVudEV4cGFuZGVkID0gdHJ1ZSwgaGllcmFyY2hpY2FsT3duZXI/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCB0cmVlR3JpZFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmQuZGF0YSxcbiAgICAgICAgICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogIXBhcmVudEV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuVHJlZUdyaWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgc3VtbWFyeUtleTogcmVjb3JkLmtleSxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaGljYWxPd25lcjogcmVjb3JkLmxldmVsID09PSAwID8gR1JJRF9QQVJFTlQgOiBoaWVyYXJjaGljYWxPd25lclxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHRyZWVHcmlkUmVjb3JkKTtcblxuICAgICAgICAgICAgaWYgKHJlY29yZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VHJlZUdyaWRDaGlsZERhdGEocmVjb3JkLmNoaWxkcmVuLCByZWNvcmQua2V5LCByZWNvcmQubGV2ZWwsIHJlY29yZC5leHBhbmRlZCAmJiBwYXJlbnRFeHBhbmRlZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJlZUdyaWRDaGlsZERhdGEocmVjb3JkQ2hpbGRyZW46IElUcmVlR3JpZFJlY29yZFtdLCBrZXk6IHN0cmluZywgbGV2ZWw6bnVtYmVyLCBwYXJlbnRFeHBhbmRlZCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsT3duZXIgPSBgJHtHUklEX0NISUxEfSR7Kyt0aGlzLnJvd0lzbGFuZENvdW50ZXJ9YFxuICAgICAgICBsZXQgc3VtbWFyeUxldmVsID0gbGV2ZWw7XG4gICAgICAgIGxldCBzdW1tYXJ5SGlkZGVuID0gIXBhcmVudEV4cGFuZGVkO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmMgb2YgcmVjb3JkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChyYy5jaGlsZHJlbiAmJiByYy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUcmVlR3JpZERhdGEoW3JjXSwgcGFyZW50RXhwYW5kZWQsIGhpZXJhcmNoaWNhbE93bmVyKTtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5TGV2ZWwgPSByYy5sZXZlbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByYy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogcmMubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIXBhcmVudEV4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVjb3JkLnN1bW1hcnlLZXkgPSBrZXk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGN1cnJlbnRSZWNvcmQpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlMZXZlbCA9IHJjLmxldmVsO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlIaWRkZW4gPSAhcGFyZW50RXhwYW5kZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXRDaGlsZFN1bW1hcmllcykge1xuICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJpZXMoa2V5LCBzdW1tYXJ5TGV2ZWwsIHN1bW1hcnlIaWRkZW4sIG51bGwsIG51bGwsIGhpZXJhcmNoaWNhbE93bmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRmxhdERhdGEocmVjb3JkczogYW55KSB7XG4gICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVjb3JkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdW1tYXJpZXMoc3VtbWFyeUtleTogc3RyaW5nLCBsZXZlbCA9IDAsIGhpZGRlbiA9IGZhbHNlLCBvd25lcj86IGFueSwgc3VtbWFyeT86IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4sIGhpZXJhcmNoaWNhbE93bmVyPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJvb3RTdW1tYXJ5ID0gc3VtbWFyeSA/PyB0aGlzLnN1bW1hcmllcy5nZXQoc3VtbWFyeUtleSk7XG5cbiAgICAgICAgaWYgKHJvb3RTdW1tYXJ5KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBbLi4ucm9vdFN1bW1hcnkudmFsdWVzKCldO1xuICAgICAgICAgICAgY29uc3QgYmlnZ2VzdCA9IHZhbHVlcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVswXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWdnZXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge31cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJvb3RTdW1tYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IHZhbHVlLm1hcChzID0+ICh7bGFiZWw6IHMubGFiZWwsIHZhbHVlOiBzLnN1bW1hcnlSZXN1bHR9KSlcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBzdW1tYXJpZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogb2JqLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvd25lcikge1xuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5UmVjb3JkLm93bmVyID0gb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHN1bW1hcnlSZWNvcmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHcm91cGVkRGF0YShncmlkOiBHcmlkVHlwZSwgcmVjb3JkczogSUdyb3VwQnlSZWNvcmRbXSwgZ3JvdXBpbmdTdGF0ZTogSUdyb3VwaW5nU3RhdGUsIHNldEdyaWRQYXJlbnQ6IGJvb2xlYW4sIHBhcmVudEV4cGFuZGVkID0gdHJ1ZSwgc3VtbWFyeUtleXNBcnI6IHN0cmluZ1tdID0gW10pIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJldmlvdXNLZXkgPSAnJ1xuICAgICAgICBjb25zdCBmaXJzdENvbCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUikuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIgJiYgIWMuc2tpcClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpWzBdLmZpZWxkO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgIGxldCByZWNvcmRWYWwgPSByZWNvcmQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxPd25lciA9IHNldEdyaWRQYXJlbnQgPyBHUklEX1BBUkVOVCA6IGAke0dSSURfQ0hJTER9JHsrK3RoaXMucm93SXNsYW5kQ291bnRlcn1gO1xuICAgICAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gZ2V0SGllcmFyY2h5KHJlY29yZCk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRTdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZSA9IGdyb3VwaW5nU3RhdGUuZXhwYW5zaW9uLmZpbmQoKHMpID0+XG4gICAgICAgICAgICAgICAgaXNIaWVyYXJjaHlNYXRjaChzLmhpZXJhcmNoeSB8fCBbeyBmaWVsZE5hbWU6IHJlY29yZC5leHByZXNzaW9uLmZpZWxkTmFtZSwgdmFsdWU6IHJlY29yZFZhbCB9XSxcbiAgICAgICAgICAgICAgICBoaWVyYXJjaHksXG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zKSk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZFN0YXRlID8gZXhwYW5kU3RhdGUuZXhwYW5kZWQgOiBncm91cGluZ1N0YXRlLmRlZmF1bHRFeHBhbmRlZDtcblxuICAgICAgICAgICAgY29uc3QgaXNEYXRlID0gcmVjb3JkVmFsIGluc3RhbmNlb2YgRGF0ZTtcblxuICAgICAgICAgICAgaWYgKGlzRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gcmVjb3JkVmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc29TdHJpbmcgPSAobmV3IERhdGUocmVjb3JkVmFsIC0gdGltZVpvbmVPZmZzZXQpKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgRGF0ZVBpcGUoZ3JpZC5sb2NhbGUpO1xuICAgICAgICAgICAgICAgIHJlY29yZFZhbCA9IHBpcGUudHJhbnNmb3JtKGlzb1N0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXhwcmVzc2lvbk5hbWUgPSByZWNvcmQuY29sdW1uICYmIHJlY29yZC5jb2x1bW4uaGVhZGVyID9cbiAgICAgICAgICAgICAgICByZWNvcmQuY29sdW1uLmhlYWRlciA6XG4gICAgICAgICAgICAgICAgcmVjb3JkLmV4cHJlc3Npb24uZmllbGROYW1lO1xuXG4gICAgICAgICAgICByZWNvcmRWYWwgPSByZWNvcmRWYWwgIT09IG51bGwgPyByZWNvcmRWYWwgOiAnJztcblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByZXNzaW9uOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgW2ZpcnN0Q29sXTogYCR7Z3JvdXBFeHByZXNzaW9uTmFtZX06ICR7cmVjb3JkVmFsID8/ICcoQmxhbmspJ30gKCR7cmVjb3JkLnJlY29yZHMubGVuZ3RofSlgIH0sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICBoaWRkZW46ICFwYXJlbnRFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgaGllcmFyY2hpY2FsT3duZXJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChncm91cEV4cHJlc3Npb24pO1xuXG4gICAgICAgICAgICBsZXQgY3VycktleSA9ICcnO1xuICAgICAgICAgICAgbGV0IHN1bW1hcnlLZXkgPSAnJztcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3NldENoaWxkU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICAgICAgY3VycktleSA9IGAnJHtyZWNvcmQuZXhwcmVzc2lvbi5maWVsZE5hbWV9JzogJyR7cmVjb3JkVmFsfSdgO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyID0gc3VtbWFyeUtleXNBcnIuZmlsdGVyKGEgPT4gYSAhPT0gcHJldmlvdXNLZXkpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzS2V5ID0gY3VycktleTtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5S2V5c0Fyci5wdXNoKGN1cnJLZXkpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXkgPSBgeyAke3N1bW1hcnlLZXlzQXJyLmpvaW4oJywgJyl9IH1gO1xuICAgICAgICAgICAgICAgIGdyb3VwRXhwcmVzc2lvbi5zdW1tYXJ5S2V5ID0gc3VtbWFyeUtleTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlY29yZC5ncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXBlZERhdGEoZ3JpZCwgcmVjb3JkLmdyb3VwcywgZ3JvdXBpbmdTdGF0ZSwgZmFsc2UsIGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkLCBzdW1tYXJ5S2V5c0Fycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1JlY29yZHMgPSByZWNvcmQucmVjb3JkcztcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgcm93UmVjb3JkIG9mIHJvd1JlY29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJvd1JlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhKGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbE93bmVyXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1bW1hcnlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWNvcmQuc3VtbWFyeUtleSA9IHN1bW1hcnlLZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goY3VycmVudFJlY29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0Q2hpbGRTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN1bW1hcmllcyhzdW1tYXJ5S2V5LCByZWNvcmQubGV2ZWwgKyAxLCAhKGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKSwgbnVsbCwgbnVsbCwgaGllcmFyY2hpY2FsT3duZXIpO1xuICAgICAgICAgICAgICAgIHN1bW1hcnlLZXlzQXJyLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5zKGNvbHVtbnM6IENvbHVtblR5cGVbXSk6IElDb2x1bW5MaXN0IHtcbiAgICAgICAgY29uc3QgY29sTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBjb2xXaWR0aExpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IFtdO1xuICAgICAgICBsZXQgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSAtMTtcbiAgICAgICAgbGV0IGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSAtMTtcbiAgICAgICAgbGV0IG1heExldmVsID0gMDtcblxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uSGVhZGVyID0gIUV4cG9ydFV0aWxpdGllcy5pc051bGxPcldoaXRlc3BhY2VzKGNvbHVtbi5oZWFkZXIpID8gY29sdW1uLmhlYWRlciA6IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydENvbHVtbiA9ICFjb2x1bW4uaGlkZGVuIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlciB8fCB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc1Zpc2liaWxpdHkgPyBjb2x1bW4uaW5kZXggOiBjb2x1bW4udmlzaWJsZUluZGV4O1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBOdW1iZXIoY29sdW1uLndpZHRoPy5zbGljZSgwLCAtMikpIHx8IERFRkFVTFRfQ09MVU1OX1dJRFRIO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uTGV2ZWwgPSAhdGhpcy5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycyA/IGNvbHVtbi5sZXZlbCA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlDb2xIZWFkZXIgPSBjb2x1bW4uY29sdW1uR3JvdXA7XG4gICAgICAgICAgICBjb25zdCBjb2xTcGFuID0gaXNNdWx0aUNvbEhlYWRlciA/XG4gICAgICAgICAgICAgICAgY29sdW1uLmFsbENoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY2ggPT4gIShjaC5jb2x1bW5Hcm91cCkgJiYgKCF0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc1Zpc2liaWxpdHkgPyAhY2guaGlkZGVuIDogdHJ1ZSkpXG4gICAgICAgICAgICAgICAgICAgIC5sZW5ndGggOlxuICAgICAgICAgICAgICAgIDE7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogRXhwb3J0VXRpbGl0aWVzLnNhbml0aXplVmFsdWUoY29sdW1uSGVhZGVyKSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sdW1uLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgc2tpcDogIWV4cG9ydENvbHVtbixcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbHVtbi5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG5cbiAgICAgICAgICAgICAgICBoZWFkZXJUeXBlOiBpc011bHRpQ29sSGVhZGVyID8gRXhwb3J0SGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciA6IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IGNvbFNwYW4sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGNvbHVtbkxldmVsLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiAhY29sdW1uLnBpbm5lZCA/XG4gICAgICAgICAgICAgICAgICAgIE51bWJlci5NQVhfVkFMVUUgOlxuICAgICAgICAgICAgICAgICAgICAhY29sdW1uLmhpZGRlbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZ3JpZC5waW5uZWRDb2x1bW5zLmluZGV4T2YoY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBOYU4sXG4gICAgICAgICAgICAgICAgY29sdW1uR3JvdXBQYXJlbnQ6IGNvbHVtbi5wYXJlbnQgPyBjb2x1bW4ucGFyZW50IDogbnVsbCxcbiAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cDogaXNNdWx0aUNvbEhlYWRlciA/IGNvbHVtbiA6IG51bGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmN1cnJlbmN5Q29kZSA9IGNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKHRoaXMubG9jYWxlKTtcblxuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGlzcGxheUZvcm1hdCA9IGNvbHVtbi5waXBlQXJncy5kaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnBpcGVBcmdzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgOiAnc3ltYm9sJztcblxuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGlnaXRzSW5mbyA9IGNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgOiAnMS4wLTInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRhdGVGb3JtYXQgPSBnZXRMb2NhbGVEYXRlRm9ybWF0KHRoaXMubG9jYWxlLCBGb3JtYXRXaWR0aC5NZWRpdW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5kYXRlRm9ybWF0ID0gZ2V0TG9jYWxlRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIEZvcm1hdFdpZHRoLk1lZGl1bSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbkluZm8uc3RhcnRJbmRleCAhPT0gY29sdW1uSW5mby5waW5uZWRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLnBpbm5lZEluZGV4ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4ubGV2ZWwgPiBtYXhMZXZlbCAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycykge1xuICAgICAgICAgICAgICAgIG1heExldmVsID0gY29sdW1uLmxldmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29sTGlzdC5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgICAgIGNvbFdpZHRoTGlzdC5wdXNoKGNvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZUNvbHVtbkluZGV4ID0gTWF0aC5tYXgobGFzdFZpc2libGVDb2x1bW5JbmRleCwgY29sTGlzdC5pbmRleE9mKGNvbHVtbkluZm8pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGlkZGVuQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLnBpbm5lZCAmJiBleHBvcnRDb2x1bW4gJiYgY29sdW1uSW5mby5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9BcHBlbmQgdGhlIGhpZGRlbiBjb2x1bW5zIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgaGlkZGVuQ29sdW1ucy5mb3JFYWNoKChoaWRkZW5Db2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbExpc3RbKytsYXN0VmlzaWJsZUNvbHVtbkluZGV4XSA9IGhpZGRlbkNvbHVtbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBJQ29sdW1uTGlzdCA9IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbExpc3QsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aHM6IGNvbFdpZHRoTGlzdCxcbiAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uLFxuICAgICAgICAgICAgbWF4TGV2ZWxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kOiBhbnksIGdyaWREYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IGNvbHVtbkxpc3Q6IElDb2x1bW5MaXN0O1xuICAgICAgICBsZXQga2V5RGF0YTtcblxuICAgICAgICBpZiAoaXNsYW5kLmF1dG9HZW5lcmF0ZSkge1xuICAgICAgICAgICAga2V5RGF0YSA9IGdyaWREYXRhW2lzbGFuZC5rZXldO1xuICAgICAgICAgICAgY29uc3QgaXNsYW5kS2V5cyA9IGlzbGFuZC5jaGlsZHJlbi5tYXAoaSA9PiBpLmtleSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzbGFuZERhdGEgPSBrZXlEYXRhLm1hcChpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0ge307XG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpKS5tYXAoayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNsYW5kS2V5cy5pbmNsdWRlcyhrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbVtrXSA9IGlba107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbHVtbkxpc3QgPSB0aGlzLmdldEF1dG9HZW5lcmF0ZWRDb2x1bW5zKGlzbGFuZERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNsYW5kQ29sdW1uTGlzdCA9IGlzbGFuZC5jb2x1bW5zO1xuICAgICAgICAgICAgY29sdW1uTGlzdCA9IHRoaXMuZ2V0Q29sdW1ucyhpc2xhbmRDb2x1bW5MaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoaXNsYW5kLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICBpZiAoaXNsYW5kLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGRJc2xhbmQgb2YgaXNsYW5kLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNsYW5kS2V5RGF0YSA9IGtleURhdGEgIT09IHVuZGVmaW5lZCA/IGtleURhdGFbMF0gOiB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEhpZXJhcmNoaWNhbEdyaWRDb2x1bW5zKGNoaWxkSXNsYW5kLCBpc2xhbmRLZXlEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXV0b0dlbmVyYXRlZENvbHVtbnMoZGF0YTogYW55W10pIHtcbiAgICAgICAgY29uc3QgY29sTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBjb2xXaWR0aExpc3QgPSBbXTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuXG4gICAgICAgIGtleXMuZm9yRWFjaCgoY29sS2V5LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmZvOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IGNvbEtleSxcbiAgICAgICAgICAgICAgICBmaWVsZDogY29sS2V5LFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBza2lwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJUeXBlOiBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcixcbiAgICAgICAgICAgICAgICBjb2x1bW5TcGFuOiAxLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGksXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6IE51bWJlci5NQVhfVkFMVUVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbExpc3QucHVzaChjb2x1bW5JbmZvKTtcbiAgICAgICAgICAgIGNvbFdpZHRoTGlzdC5wdXNoKERFRkFVTFRfQ09MVU1OX1dJRFRIKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBJQ29sdW1uTGlzdCA9IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbExpc3QsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aHM6IGNvbFdpZHRoTGlzdCxcbiAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uOiAtMSxcbiAgICAgICAgICAgIG1heExldmVsOiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRQaXZvdFJvd0hlYWRlcnMoZ3JpZDogYW55KSB7XG4gICAgICAgIGlmIChncmlkPy5waXZvdFVJPy5zaG93Um93SGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzLl9vd25lcnNNYXAuZ2V0KERFRkFVTFRfT1dORVIpO1xuICAgICAgICAgICAgY29uc3QgZW5hYmxlZFJvd3MgPSBncmlkLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzLmZpbHRlcihyID0+IHIuZW5hYmxlZCkubWFwKChyLCBpbmRleCkgPT4gKHsgbmFtZTogci5kaXNwbGF5TmFtZSB8fCByLm1lbWJlck5hbWUsIGxldmVsOiBpbmRleCB9KSk7XG4gICAgICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgICAgICBlbmFibGVkUm93cy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNMaXN0LmNvbHVtbnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW46IGhlYWRlcnNMaXN0Lm1heExldmVsICsgMSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHgubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogRXhwb3J0SGVhZGVyVHlwZS5QaXZvdFJvd0hlYWRlclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggKz0gMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaGVhZGVyc0xpc3QuY29sdW1uV2lkdGhzLnVuc2hpZnQoLi4uQXJyYXkoZW5hYmxlZFJvd3MubGVuZ3RoKS5maWxsKDIwMCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRQaXZvdEdyaWRDb2x1bW5zKGdyaWQ6IGFueSkge1xuICAgICAgICBpZiAoZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2lneC1waXZvdC1ncmlkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5hYmxlZFJvd3MgPSBncmlkLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzLmZpbHRlcihyID0+IHIuZW5hYmxlZCkubWFwKChyLCBpKSA9PiAoeyBuYW1lOiByLm1lbWJlck5hbWUsIGxldmVsOiBpIH0pKTtcblxuICAgICAgICB0aGlzLnByZXBhcmVQaXZvdEdyaWRDb2x1bW5zKGVuYWJsZWRSb3dzKTtcbiAgICAgICAgdGhpcy5waXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudCA9IGVuYWJsZWRSb3dzLmxlbmd0aDtcblxuICAgICAgICBjb25zdCBjb2x1bW5MaXN0ID0gdGhpcy5fb3duZXJzTWFwLmdldChERUZBVUxUX09XTkVSKTtcbiAgICAgICAgY29sdW1uTGlzdC5jb2x1bW5zLnVuc2hpZnQoLi4udGhpcy5waXZvdEdyaWRDb2x1bW5zKTtcbiAgICAgICAgY29sdW1uTGlzdC5jb2x1bW5XaWR0aHMudW5zaGlmdCguLi5BcnJheSh0aGlzLnBpdm90R3JpZENvbHVtbnMubGVuZ3RoKS5maWxsKDIwMCkpO1xuICAgICAgICBjb2x1bW5MaXN0LmluZGV4T2ZMYXN0UGlubmVkQ29sdW1uID0gZW5hYmxlZFJvd3MubGVuZ3RoIC0gMTtcbiAgICAgICAgY29sdW1uTGlzdC5tYXhSb3dMZXZlbCA9IGVuYWJsZWRSb3dzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVQaXZvdEdyaWRDb2x1bW5zKGtleXM6IGFueSwgY29sdW1uR3JvdXBQYXJlbnQ/OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1swXTtcbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuZmxhdFJlY29yZHMubWFwKHIgPT4gci5kYXRhKTtcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlY29yZHMgPSB7fTtcblxuICAgICAgICByZWNvcmRzLmZvckVhY2gob2JqID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbHVlID0gb2JqW2tleS5uYW1lXTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlY29yZHNba2V5VmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba2V5VmFsdWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cGVkUmVjb3Jkc1trZXlWYWx1ZV0ucHVzaChvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29sdW1uR3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcEtleXMgPSBbLi4udGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5rZXlzKCldO1xuICAgICAgICAgICAgY29uc3QgbWFwVmFsdWVzID0gWy4uLnRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAudmFsdWVzKCldO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba10gPSBncm91cGVkUmVjb3Jkc1trXS5maWx0ZXIocm93ID0+IG1hcEtleXMuZXZlcnkobWsgPT4gT2JqZWN0LmtleXMocm93KS5pbmNsdWRlcyhtaykpXG4gICAgICAgICAgICAgICAgICAgICYmIG1hcFZhbHVlcy5ldmVyeShtdiA9PiBPYmplY3QudmFsdWVzKHJvdykuaW5jbHVkZXMobXYpKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBncm91cGVkUmVjb3Jkc1trXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICBjb25zdCByb3dTcGFuID0gZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCByb3dEaW1lbnNpb25Db2x1bW46IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIHJvd1NwYW4sXG4gICAgICAgICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBrLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc2tpcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGtleS5sZXZlbCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID4gMSA/IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlSb3dIZWFkZXIgOiBFeHBvcnRIZWFkZXJUeXBlLlJvd0hlYWRlcixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJvd0RpbWVuc2lvbkNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudCA9IGNvbHVtbkdyb3VwUGFyZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25Db2x1bW4uY29sdW1uR3JvdXAgPSBrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZENvbHVtbnMucHVzaChyb3dEaW1lbnNpb25Db2x1bW4pO1xuXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5zZXQoa2V5Lm5hbWUsIGspO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0tleXMgPSBrZXlzLmZpbHRlcihrZGQgPT4ga2RkICE9PSBrZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVBpdm90R3JpZENvbHVtbnMobmV3S2V5cywgaylcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLmRlbGV0ZShrZXkubmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggKz0gcm93U3BhbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkTGV2ZWxDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4cG9ydFN1bW1hcmllcyAmJiB0aGlzLnN1bW1hcmllcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLmZvckVhY2gob20gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxldmVsQ29sOiBJQ29sdW1uSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBHUklEX0xFVkVMX0NPTCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogR1JJRF9MRVZFTF9DT0wsXG4gICAgICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBza2lwRm9ybWF0dGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBvbS5jb2x1bW5zLnB1c2gobGV2ZWxDb2wpO1xuICAgICAgICAgICAgICAgIG9tLmNvbHVtbldpZHRocy5wdXNoKDIwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZExldmVsRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRTdW1tYXJpZXMgJiYgdGhpcy5zdW1tYXJpZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGZvcihjb25zdCByIG9mIHRoaXMuZmxhdFJlY29yZHMpe1xuICAgICAgICAgICAgICAgIGlmIChyLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCB8fCByLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuVHJlZUdyaWRSZWNvcmQgfHwgci50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgci5kYXRhW0dSSURfTEVWRUxfQ09MXSA9IHIubGV2ZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldERlZmF1bHRzKCkge1xuICAgICAgICB0aGlzLl9zb3J0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mbGF0UmVjb3JkcyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fSBhcyBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgICAgICB0aGlzLl9vd25lcnNNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRDb3VudGVyID0gMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZXhwb3J0RGF0YUltcGxlbWVudGF0aW9uKGRhdGE6IGFueVtdLCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlLCBkb25lOiAoKSA9PiB2b2lkKTogdm9pZDtcbn1cbiJdfQ==
|