igniteui-angular 17.2.15 → 17.2.16
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/combo/combo.common.mjs +2 -10
- package/esm2022/lib/core/i18n/grid-resources.mjs +2 -1
- package/esm2022/lib/grids/grid/grid.component.mjs +6 -5
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +6 -5
- package/esm2022/lib/grids/state.directive.mjs +10 -4
- package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +6 -5
- package/esm2022/lib/services/excel/excel-files.mjs +26 -5
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +14 -6
- package/fesm2022/igniteui-angular.mjs +60 -30
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/i18n/grid-resources.d.ts +1 -0
- package/lib/grids/tree-grid/tree-grid.component.d.ts +9 -1
- package/lib/simple-combo/simple-combo.component.d.ts +4 -3
- package/package.json +1 -1
|
@@ -194,12 +194,18 @@ export class IgxGridStateDirective {
|
|
|
194
194
|
restoreFeatureState: (context, state) => {
|
|
195
195
|
const grid = context.currGrid;
|
|
196
196
|
grid.groupingExpressions = state.expressions;
|
|
197
|
+
state.expansion.forEach(exp => {
|
|
198
|
+
exp.hierarchy.forEach(h => {
|
|
199
|
+
const dataType = grid.columns.find(c => c.field === h.fieldName).dataType;
|
|
200
|
+
if (dataType.includes(GridColumnDataType.Date) || dataType.includes(GridColumnDataType.Time)) {
|
|
201
|
+
h.value = h.value ? new Date(Date.parse(h.value)) : h.value;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
197
205
|
if (grid.groupsExpanded !== state.defaultExpanded) {
|
|
198
206
|
grid.toggleAllGroupRows();
|
|
199
207
|
}
|
|
200
|
-
|
|
201
|
-
grid.groupingExpansionState = state.expansion;
|
|
202
|
-
}
|
|
208
|
+
grid.groupingExpansionState = state.expansion;
|
|
203
209
|
}
|
|
204
210
|
},
|
|
205
211
|
paging: {
|
|
@@ -635,4 +641,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
635
641
|
type: Input,
|
|
636
642
|
args: ['igxGridState']
|
|
637
643
|
}] } });
|
|
638
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ2pLLE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQzlFLHlCQUF5QixFQUF1QiwyQkFBMkIsRUFDOUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUl6RCxPQUFPLEVBQVksYUFBYSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFzRnZELE1BQU0sT0FBTyxxQkFBcUI7SUFrVjlCOzs7Ozs7OztPQVFHO0lBQ0gsSUFDVyxPQUFPO1FBQ2YsT0FBTyxJ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Q2YsQ0FBQztJQUVPLFVBQVUsQ0FBQyxHQUFXO1FBQzFCLE1BQU0sT0FBTyxHQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs4R0E3bUJRLHFCQUFxQixrQkE2V0UsYUFBYTtrR0E3V3BDLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7OzBCQThXUSxJQUFJOzswQkFBSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7aUlBN0J0QyxXQUFXO3NCQURqQixNQUFNO2dCQWFJLE9BQU87c0JBRGpCLEtBQUs7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBIb3N0LCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBjcmVhdGVDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUdyb3VwaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGFnaW5nU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvcGFnaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7XG4gICAgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQsIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQsIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLFxuICAgIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQsIElGaWx0ZXJpbmdPcGVyYXRpb24sIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZFxufSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSwgSVBpbm5pbmdDb25maWcgfSBmcm9tICcuL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWRDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90RGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgSWd4UGl2b3REYXRlRGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQtZGltZW5zaW9ucyc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBjbG9uZVZhbHVlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTdGF0ZSB7XG4gICAgY29sdW1ucz86IElDb2x1bW5TdGF0ZVtdO1xuICAgIGZpbHRlcmluZz86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmc/OiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIHBhZ2luZz86IElQYWdpbmdTdGF0ZTtcbiAgICBtb3Zpbmc/OiBib29sZWFuO1xuICAgIHNvcnRpbmc/OiBJU29ydGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cEJ5PzogSUdyb3VwaW5nU3RhdGU7XG4gICAgY2VsbFNlbGVjdGlvbj86IEdyaWRTZWxlY3Rpb25SYW5nZVtdO1xuICAgIHJvd1NlbGVjdGlvbj86IGFueVtdO1xuICAgIGNvbHVtblNlbGVjdGlvbj86IHN0cmluZ1tdO1xuICAgIHJvd1Bpbm5pbmc/OiBhbnlbXTtcbiAgICBwaW5uaW5nQ29uZmlnPzogSVBpbm5pbmdDb25maWc7XG4gICAgZXhwYW5zaW9uPzogYW55W107XG4gICAgcm93SXNsYW5kcz86IElHcmlkU3RhdGVDb2xsZWN0aW9uW107XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgcGl2b3RDb25maWd1cmF0aW9uPzogSVBpdm90Q29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlQ29sbGVjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRSb3dJRDogYW55O1xuICAgIHN0YXRlOiBJR3JpZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICBjb2x1bW5zPzogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgICBncm91cEJ5PzogYm9vbGVhbjtcbiAgICBwYWdpbmc/OiBib29sZWFuO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1NlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgY29sdW1uU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICByb3dQaW5uaW5nPzogYm9vbGVhbjtcbiAgICBwaW5uaW5nQ29uZmlnPzogYm9vbGVhbjtcbiAgICBleHBhbnNpb24/OiBib29sZWFuO1xuICAgIHJvd0lzbGFuZHM/OiBib29sZWFuO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG4gICAgcGl2b3RDb25maWd1cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uU3RhdGUge1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJhYmxlOiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgaGVhZGVyQ2xhc3Nlczogc3RyaW5nO1xuICAgIGhlYWRlckdyb3VwQ2xhc3Nlczogc3RyaW5nO1xuICAgIG1heFdpZHRoOiBzdHJpbmc7XG4gICAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICAgIG1vdmFibGU6IGJvb2xlYW47XG4gICAgaGlkZGVuOiBib29sZWFuO1xuICAgIGRhdGFUeXBlOiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgaGFzU3VtbWFyeTogYm9vbGVhbjtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHdpZHRoOiBhbnk7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgcmVzaXphYmxlOiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgY29sdW1uR3JvdXA6IGJvb2xlYW47XG4gICAgcGFyZW50OiBhbnk7XG4gICAgZGlzYWJsZUhpZGluZzogYm9vbGVhbjtcbiAgICBkaXNhYmxlUGlubmluZzogYm9vbGVhbjtcbiAgICBjb2xsYXBzaWJsZT86IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIHZpc2libGVXaGVuQ29sbGFwc2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZEZlYXR1cmVzID0ga2V5b2YgSUdyaWRTdGF0ZU9wdGlvbnM7XG5cbmludGVyZmFjZSBGZWF0dXJlIHtcbiAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpID0+IElHcmlkU3RhdGU7XG4gICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdIHwgSVBhZ2luZ1N0YXRlIHwgYm9vbGVhbiB8IElTb3J0aW5nRXhwcmVzc2lvbltdIHxcbiAgICAgICAgSUdyb3VwaW5nU3RhdGUgfCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIHwgR3JpZFNlbGVjdGlvblJhbmdlW10gfCBJUGlubmluZ0NvbmZpZyB8IElQaXZvdENvbmZpZ3VyYXRpb24gfCBhbnlbXSkgPT4gdm9pZDtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4R3JpZFN0YXRlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wdGlvbnM6IElHcmlkU3RhdGVPcHRpb25zIHwgJyc7XG5cbiAgICBwcml2YXRlIGZlYXR1cmVLZXlzOiBHcmlkRmVhdHVyZXNbXSA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGU6IElHcmlkU3RhdGU7XG4gICAgcHJpdmF0ZSBjdXJyR3JpZDogR3JpZFR5cGU7XG4gICAgcHJpdmF0ZSBfb3B0aW9uczogSUdyaWRTdGF0ZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRydWUsXG4gICAgICAgIGZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIHNvcnRpbmc6IHRydWUsXG4gICAgICAgIGdyb3VwQnk6IHRydWUsXG4gICAgICAgIHBhZ2luZzogdHJ1ZSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1Bpbm5pbmc6IHRydWUsXG4gICAgICAgIGV4cGFuc2lvbjogdHJ1ZSxcbiAgICAgICAgbW92aW5nOiB0cnVlLFxuICAgICAgICByb3dJc2xhbmRzOiB0cnVlLFxuICAgICAgICBwaXZvdENvbmZpZ3VyYXRpb246IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgRkVBVFVSRVMgPSB7XG4gICAgICAgIHNvcnRpbmc6ICB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBzb3J0aW5nU3RhdGUuZm9yRWFjaChzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMuc3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLm93bmVyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNvcnRpbmc6IHNvcnRpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcmluZ1N0YXRlLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyaW5nU3RhdGUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoaXRlbSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWx0ZXJpbmc6IGZpbHRlcmluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBjb250ZXh0LmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3Qoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgbGV0IGFkdmFuY2VkRmlsdGVyaW5nOiBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSBmaWx0ZXJpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEZpbHRlcmluZyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBhZHZhbmNlZEZpbHRlcmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gY29udGV4dC5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRDb2x1bW5zOiBJQ29sdW1uU3RhdGVbXSA9IGNvbnRleHQuY3VyckdyaWQuY29sdW1ucy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHBpbm5lZDogYy5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBjLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJhYmxlOiBjLmZpbHRlcmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBjLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0aW5nSWdub3JlQ2FzZTogYy5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nSWdub3JlQ2FzZTogYy5maWx0ZXJpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDbGFzc2VzOiBjLmhlYWRlckNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckdyb3VwQ2xhc3NlczogYy5oZWFkZXJHcm91cENsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjLm1heFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBncm91cGFibGU6IGMuZ3JvdXBhYmxlLFxuICAgICAgICAgICAgICAgICAgICBtb3ZhYmxlOiBjLm1vdmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTdW1tYXJ5OiBjLmhhc1N1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjLmhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiBjLnJlc2l6YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBjLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogYy5wYXJlbnQgPyBjLnBhcmVudC5oZWFkZXIgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cDogYy5jb2x1bW5Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUhpZGluZzogYy5kaXNhYmxlSGlkaW5nLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUGlubmluZzogYy5kaXNhYmxlUGlubmluZyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGFwc2libGU6IGMuY29sdW1uR3JvdXAgPyBjLmNvbGxhcHNpYmxlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZDogYy5jb2x1bW5Hcm91cCA/IGMuZXhwYW5kZWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVXaGVuQ29sbGFwc2VkOiBjLnBhcmVudD8uY29sdW1uR3JvdXAgPyAoYyBhcyBJZ3hDb2x1bW5Db21wb25lbnQpLnZpc2libGVXaGVuQ29sbGFwc2VkIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtbnM6IGdyaWRDb2x1bW5zIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2goKGNvbFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NvbHVtbkdyb3VwID0gY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYxID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkdyb3VwQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmMS5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5pbnN0YW5jZS5ncmlkID0gY29udGV4dC5jdXJyR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYxLmluc3RhbmNlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCA9IG5ld0NvbHVtbnMuZmluZChlID0+IGUuaGVhZGVyID09PSByZWYxLmluc3RhbmNlLnBhcmVudCAgJiYgZS5jb2x1bW5Hcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmMS5pbnN0YW5jZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEuaW5zdGFuY2UucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaChyZWYxLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlZi5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmdyaWQgPSBjb250ZXh0LmN1cnJHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cDogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBuZXdDb2x1bW5zLmZpbmQoZSA9PiBlLmhlYWRlciA9PT0gcmVmLmluc3RhbmNlLnBhcmVudCAmJiBlLmNvbHVtbkdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IGNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cC5jaGlsZHJlbi5yZXNldChbLi4uY29sdW1uR3JvdXAuY2hpbGRyZW4udG9BcnJheSgpLCByZWYuaW5zdGFuY2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnVwZGF0ZUNvbHVtbnMobmV3Q29sdW1ucyk7XG4gICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0LmN1cnJHcmlkIGFzIGFueSkuY29sdW1uSW5pdC5lbWl0KGNvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBleHByLnN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlID0gZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc0V4cGFuZGVkID0gZ3JpZC5ncm91cHNFeHBhbmRlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGdyb3VwQnk6IHsgZXhwcmVzc2lvbnM6IGdyb3VwaW5nRXhwcmVzc2lvbnMsIGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGUsIGRlZmF1bHRFeHBhbmRlZDogZ3JvdXBzRXhwYW5kZWR9ICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJR3JvdXBpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gc3RhdGUuZXhwcmVzc2lvbnMgYXMgSUdyb3VwaW5nRXhwcmVzc2lvbltdO1xuICAgICAgICAgICAgICAgIGlmIChncmlkLmdyb3Vwc0V4cGFuZGVkICE9PSBzdGF0ZS5kZWZhdWx0RXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC50b2dnbGVBbGxHcm91cFJvd3MoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUgPSBzdGF0ZS5leHBhbnNpb24gYXMgSUdyb3VwQnlFeHBhbmRTdGF0ZVtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQucGFnaW5nU3RhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFnaW5nOiBwYWdpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJUGFnaW5nU3RhdGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY3VyckdyaWQucGVyUGFnZSAhPT0gc3RhdGUucmVjb3Jkc1BlclBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5wZXJQYWdlID0gc3RhdGUucmVjb3Jkc1BlclBhZ2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5wYWdlID0gc3RhdGUuaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vdmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbW92aW5nOiBjb250ZXh0LmN1cnJHcmlkLm1vdmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5tb3ZpbmcgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdGlvblNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93U2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdFJvd3Moc3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjZWxsU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLmdldFNlbGVjdGVkUmFuZ2VzKCkubWFwKHJhbmdlID0+XG4gICAgICAgICAgICAgICAgICAgICh7IHJvd1N0YXJ0OiByYW5nZS5yb3dTdGFydCwgcm93RW5kOiByYW5nZS5yb3dFbmQsIGNvbHVtblN0YXJ0OiByYW5nZS5jb2x1bW5TdGFydCwgY29sdW1uRW5kOiByYW5nZS5jb2x1bW5FbmQgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNlbGxTZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBHcmlkU2VsZWN0aW9uUmFuZ2VbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0geyByb3dTdGFydDogci5yb3dTdGFydCwgcm93RW5kOiByLnJvd0VuZCwgY29sdW1uU3RhcnQ6IHIuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogci5jb2x1bW5FbmR9O1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdGVkQ29sdW1ucygpLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtblNlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IHN0cmluZ1tdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5kZXNlbGVjdEFsbENvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdENvbHVtbnMoc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByb3dQaW5uaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW5uZWQgPSBjb250ZXh0LmN1cnJHcmlkLnBpbm5lZFJvd3M/Lm1hcCh4ID0+IHgua2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dQaW5uaW5nOiBwaW5uZWQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciBjdXJyZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cy5mb3JFYWNoKHJvdyA9PiByb3cudW5waW4oKSk7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyb3dJRCA9PiBjb250ZXh0LmN1cnJHcmlkLnBpblJvdyhyb3dJRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaW5uaW5nQ29uZmlnOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+ICh7IHBpbm5pbmdDb25maWc6IGNvbnRleHQuY3VyckdyaWQucGlubmluZyB9KSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJUGlubmluZ0NvbmZpZyk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmluZyA9IHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBleHBhbnNpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IEFycmF5LmZyb20oY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGVzID0gbmV3IE1hcDxhbnksIGJvb2xlYW4+KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmV4cGFuc2lvblN0YXRlcyA9IGV4cGFuc2lvblN0YXRlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93SXNsYW5kczoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlczogSUdyaWRTdGF0ZUNvbGxlY3Rpb25bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gY29udGV4dC5idWlsZFN0YXRlKGNvbnRleHQuZmVhdHVyZUtleXMpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZFN0YXRlcy5wdXNoKHsgaWQ6IGAke3Jvd0lzbGFuZC5pZH1gLCBwYXJlbnRSb3dJRCwgc3RhdGU6IGNoaWxkR3JpZFN0YXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNvbnRleHQuZ3JpZDtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dJc2xhbmRzOiBjaGlsZEdyaWRTdGF0ZXMgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gc3RhdGUuZmluZChzdCA9PiBzdC5pZCA9PT0gcm93SXNsYW5kLmlkICYmIHN0LnBhcmVudFJvd0lEID09PSBwYXJlbnRSb3dJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkR3JpZFN0YXRlICYmIGNvbnRleHQuY3VyckdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlR3JpZFN0YXRlKGNoaWxkR3JpZFN0YXRlLnN0YXRlLCBjb250ZXh0LmZlYXR1cmVLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmF2ZXJzZXMgdGhlIGhpZXJhcmNoeSB1cCB0byB0aGUgcm9vdCBncmlkIHRvIHJldHVybiB0aGUgSUQgb2YgdGhlIGV4cGFuZGVkIHJvdy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0UGFyZW50Um93SUQ6IChncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkR3JpZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkID0gZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JpZC5ncmlkQVBJLmdldFBhcmVudFJvd0lkKGNoaWxkR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHBpdm90Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IChjb250ZXh0LmN1cnJHcmlkIGFzIElneFBpdm90R3JpZENvbXBvbmVudCkucGl2b3RDb25maWd1cmF0aW9uO1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnIHx8ICEoY29udGV4dC5jdXJyR3JpZCBpbnN0YW5jZW9mIElneFBpdm90R3JpZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGl2b3RDb25maWd1cmF0aW9uOiB1bmRlZmluZWQgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnQ29weSA9IGNsb25lVmFsdWUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBjb25maWdDb3B5LnJvd3MgPSBjbG9uZUFycmF5KGNvbmZpZy5yb3dzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25maWdDb3B5LmNvbHVtbnMgPSBjbG9uZUFycmF5KGNvbmZpZy5jb2x1bW5zLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25maWdDb3B5LmZpbHRlcnMgPSBjbG9uZUFycmF5KGNvbmZpZy5maWx0ZXJzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1zID0gIFsuLi4oY29uZmlnQ29weS5yb3dzIHx8IFtdKSwgLi4uKGNvbmZpZ0NvcHkuY29sdW1ucyB8fCBbXSksIC4uLihjb25maWdDb3B5LmZpbHRlcnMgfHwgW10pXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlRGltZW5zaW9ucyA9IGRpbXMuZmlsdGVyKHggPT4gY29udGV4dC5pc0RhdGVEaW1lbnNpb24oeCkpO1xuICAgICAgICAgICAgICAgIGRhdGVEaW1lbnNpb25zPy5mb3JFYWNoKGRpbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgdGhlIGdyaWQgcmVzb3VyY2Ugc3RyaW5ncy4gVGhpcyB3b3VsZCBwb2xsdXRlIHRoZSBvYmplY3Qgd2l0aCB1bm5lY2Vzc2FyeSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICAoZGltIGFzIElneFBpdm90RGF0ZURpbWVuc2lvbikucmVzb3VyY2VTdHJpbmdzID0ge307XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGl2b3RDb25maWd1cmF0aW9uOiBjb25maWdDb3B5IH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZyB8fCAhKGNvbnRleHQuY3VyckdyaWQgaW5zdGFuY2VvZiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlVmFsdWVzKGNvbmZpZywgY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZURpbWVuc2lvbnMoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAoY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQpLnBpdm90Q29uZmlndXJhdGlvbiA9IGNvbmZpZztcbiAgICAgICAgICAgIH0sXG5cblxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBFdmVudCBlbWl0dGVkIHdoZW4gc2V0IHN0YXRlIGlzIGNhbGxlZCB3aXRoIGEgc3RyaW5nLlxuICAgICAqIFJldHVybnMgdGhlIHBhcnNlZCBzdGF0ZSBvYmplY3Qgc28gdGhhdCBpdCBjYW4gYmUgZnVydGhlciBtb2RpZmllZCBiZWZvcmUgYXBwbHlpbmcgdG8gdGhlIGdyaWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc3RhdGUuc3RhdGVQYXJzZWQuc3Vic2NyaWJlKHBhcnNlZFN0YXRlID0+IHBhcnNlZFN0YXRlLnNvcnRpbmcuZm9yRWFjaCh4ID0+IHguc3RyYXRlZ3kgPSBOb29wU29ydGluZ1N0cmF0ZWd5Lmluc3RhbmNlKCl9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc3RhdGVQYXJzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkU3RhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiAgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBkZXRlcm1pbmluZyBpZiBhIGNlcnRhaW4gZmVhdHVyZSBzdGF0ZSBzaG91bGQgYmUgc2F2ZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgb3B0aW9ucyA9IHtzZWxlY3Rpb246IGZhbHNlLCBhZHZhbmNlZEZpbHRlcmluZzogZmFsc2V9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4R3JpZFN0YXRlJylcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogSUdyaWRTdGF0ZU9wdGlvbnMge1xuICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgb3B0aW9ucyh2YWx1ZTogSUdyaWRTdGF0ZU9wdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCB2YWx1ZSk7XG4gICAgICAgIGlmICghKHRoaXMuZ3JpZCBpbnN0YW5jZW9mIElneEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3B0aW9ucy5ncm91cEJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29wdGlvbnMucm93SXNsYW5kcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9HUklEX0JBU0UpIHB1YmxpYyBncmlkOiBHcmlkVHlwZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIGVudkluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLCAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHsgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhdGUgb2YgYSBmZWF0dXJlIG9yIHN0YXRlcyBvZiBhbGwgZ3JpZCBmZWF0dXJlcywgdW5sZXNzIGEgY2VydGFpbiBmZWF0dXJlIGlzIGRpc2FibGVkIHRocm91Z2ggdGhlIGBvcHRpb25zYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBgc2VyaWFsaXplYCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHJldHVybmVkIG9iamVjdCB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gSlNPTiBzdHJpbmcuIERlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICAgKiBAcGFyYW0gYGZlYXR1cmVgIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGRldGVybWluaW5nIHRoZSBmZWF0dXJlcyB0byBiZSBhZGRlZCBpbiB0aGUgc3RhdGUuIElmIHNraXBwZWQsIGFsbCBmZWF0dXJlcyBhcmUgYWRkZWQuXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0aGUgc2VyaWFsaXplZCB0byBKU09OIHN0cmluZyBJR3JpZFN0YXRlIG9iamVjdCwgb3IgdGhlIG5vbi1zZXJpYWxpemVkIElHcmlkU3RhdGUgb2JqZWN0LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzdGF0ZTtcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlLmdldFN0YXRlKCk7IC8vIHJldHVybnMgc3RyaW5nXG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5zdGF0ZShmYWxzZSkgLy8gcmV0dXJucyBgSUdyaWRTdGF0ZWAgb2JqZWN0XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldFN0YXRlKHNlcmlhbGl6ZSA9IHRydWUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pOiBJR3JpZFN0YXRlIHwgc3RyaW5nICB7XG4gICAgICAgIGxldCBzdGF0ZTogSUdyaWRTdGF0ZSB8IHN0cmluZztcbiAgICAgICAgdGhpcy5jdXJyR3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlID0gdGhpcy5idWlsZFN0YXRlKGZlYXR1cmVzKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICBpZiAoc2VyaWFsaXplKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLCB0aGlzLnN0cmluZ2lmeUNhbGxiYWNrKSBhcyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIGdyaWQgZmVhdHVyZXMnIHN0YXRlIGJhc2VkIG9uIHRoZSBJR3JpZFN0YXRlIG9iamVjdCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gSUdyaWRTdGF0ZSBvYmplY3QgdG8gcmVzdG9yZSBzdGF0ZSBmcm9tLlxuICAgICAqIEByZXR1cm5zXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHN0YXRlO1xuICAgICAqIHRoaXMuc3RhdGUuc2V0U3RhdGUoZ3JpZFN0YXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0U3RhdGUoc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmcsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZSkgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVQYXJzZWQuZW1pdChzdGF0ZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMucmVzdG9yZUdyaWRTdGF0ZShzdGF0ZSwgZmVhdHVyZXMpO1xuICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVE9ET1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhbiBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkU3RhdGUoa2V5cz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB7XG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlcyhrZXlzKTtcbiAgICAgICAgbGV0IGdyaWRTdGF0ZSA9IHt9IGFzIElHcmlkU3RhdGU7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmdyaWQgaW5zdGFuY2VvZiBJZ3hHcmlkQ29tcG9uZW50KSAmJiBmID09PSAnZ3JvdXBCeScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRGZWF0dXJlKGYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTdGF0ZTogSUdyaWRTdGF0ZSA9IGZlYXR1cmUuZ2V0RmVhdHVyZVN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgIGdyaWRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oZ3JpZFN0YXRlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyaWRTdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWV0aG9kIHRoYXQgY2FsbHMgY29ycmVzcG9uZGluZyBtZXRob2RzIHRvIHJlc3RvcmUgZmVhdHVyZXMgZnJvbSB0aGUgcGFzc2VkIElHcmlkU3RhdGUgb2JqZWN0LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZUdyaWRTdGF0ZShzdGF0ZTogSUdyaWRTdGF0ZSwgZmVhdHVyZXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmFwcGx5RmVhdHVyZXMoZmVhdHVyZXMpO1xuICAgICAgICB0aGlzLnJlc3RvcmVGZWF0dXJlcyhzdGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlRmVhdHVyZXMoc3RhdGU6IElHcmlkU3RhdGUpIHtcbiAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tmXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTdGF0ZSA9IHN0YXRlW2ZdO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAnbW92aW5nJyB8fCBmZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5yZXN0b3JlRmVhdHVyZVN0YXRlKHRoaXMsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBhbGwgZ3JpZCBmZWF0dXJlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5RmVhdHVyZXMoa2V5cz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMgPSBbXTtcbiAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleSBhcyBHcmlkRmVhdHVyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMgPSBbLi4ua2V5cyBhcyBHcmlkRmVhdHVyZXNbXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLnB1c2goa2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyBjb21wbGV4IG9iamVjdHMgaW4gdGhlIHBpdm90IGRpbWVuc2lvbnNcbiAgICAgKiBMaWtlIHRoZSBJZ3hQaXZvdERhdGVEaW1lbnNpb24gYW5kIGZpbHRlcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXN0b3JlRGltZW5zaW9ucyhjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbnMgPSBbY29uZmlnLnJvd3MsIGNvbmZpZy5jb2x1bW5zLCBjb25maWcuZmlsdGVyc107XG4gICAgICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbGxlY3Rpb24/Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpbSA9IGNvbGxlY3Rpb25baW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZURpbWVuc2lvbihkaW0pKSB7XG4gICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlRGF0ZURpbWVuc2lvbihkaW0gYXMgSWd4UGl2b3REYXRlRGltZW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzdG9yZSBjb21wbGV4IGZpbHRlcnNcbiAgICAgICAgICAgICAgICBpZiAoZGltLmZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBkaW0uZmlsdGVyID0gdGhpcy5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGRpbS5maWx0ZXIgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3RvcmVzIHRoZSBJZ3hQaXZvdERhdGVEaW1lbnNpb24gd2l0aCBpdHMgZGVmYXVsdCBmdW5jdGlvbnMgYW5kIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXN0b3JlRGF0ZURpbWVuc2lvbihkaW06IElneFBpdm90RGF0ZURpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBkYXRlRGltID0gbmV3IElneFBpdm90RGF0ZURpbWVuc2lvbigoZGltIGFzIGFueSkuX2Jhc2VEaW1lbnNpb24sIChkaW0gYXMgYW55KS5fb3B0aW9ucyk7XG4gICAgICAgIC8vIHJlc3RvcmUgZnVuY3Rpb25zIGFuZCByZXNvdXJjZSBzdHJpbmdzXG4gICAgICAgIGRpbS5yZXNvdXJjZVN0cmluZ3MgPSBkYXRlRGltLnJlc291cmNlU3RyaW5ncztcbiAgICAgICAgZGltLm1lbWJlckZ1bmN0aW9uID0gZGF0ZURpbS5tZW1iZXJGdW5jdGlvbjtcbiAgICAgICAgbGV0IGN1cnJEaW06IElQaXZvdERpbWVuc2lvbiA9IGRpbTtcbiAgICAgICAgbGV0IG9yaWdpbkRpbTogSVBpdm90RGltZW5zaW9uID0gZGF0ZURpbTtcbiAgICAgICAgd2hpbGUgKGN1cnJEaW0uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgY3VyckRpbSA9IGN1cnJEaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgICAgIG9yaWdpbkRpbSA9IG9yaWdpbkRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgY3VyckRpbS5tZW1iZXJGdW5jdGlvbiA9IG9yaWdpbkRpbS5tZW1iZXJGdW5jdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhpcyBpcyBhIElneFBpdm90RGF0ZURpbWVuc2lvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzRGF0ZURpbWVuc2lvbihkaW06IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICByZXR1cm4gKGRpbSBhcyBhbnkpLl9iYXNlRGltZW5zaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3RvcmVzIGNvbXBsZXggb2JqZWN0cyBpbiB0aGUgcGl2b3QgdmFsdWVzLlxuICAgICAqIExpa2UgdGhlIGRlZmF1bHQgYWdncmVnYXRvciBtZXRob2RzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZVZhbHVlcyhjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24sIGdyaWQ6IElneFBpdm90R3JpZENvbXBvbmVudCkge1xuICAgICAgICAvLyByZXN0b3JlIGFnZ3JlZ2F0b3IgZnVuYyBpZiBpdCBtYXRjaGVzIHRoZSBkZWZhdWx0IGFnZ3JlZ2F0b3JzIGtleSBhbmQgbGFiZWxcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY29uZmlnLnZhbHVlcztcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZUxpc3QgPSB2YWx1ZS5hZ2dyZWdhdGVMaXN0O1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRvcnMgPSBQaXZvdFV0aWwuZ2V0QWdncmVnYXRvcnNGb3JWYWx1ZSh2YWx1ZSwgZ3JpZCk7XG4gICAgICAgICAgICB2YWx1ZS5hZ2dyZWdhdGUuYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3JzLmZpbmQoeCA9PiB4LmtleSA9PT0gdmFsdWUuYWdncmVnYXRlLmtleSAmJiB4LmxhYmVsID09PSB2YWx1ZS5hZ2dyZWdhdGUubGFiZWwpPy5hZ2dyZWdhdG9yO1xuICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0ZUxpc3QpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFnIG9mIGFnZ3JlZ2F0ZUxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgYWcuYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3JzLmZpbmQoeCA9PiB4LmtleSA9PT0gYWcua2V5ICYmIHgubGFiZWwgPT09IGFnLmxhYmVsKT8uYWdncmVnYXRvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBidWlsZHMgYSBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgZnJvbSBhIHByb3ZpZGVkIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoZXhwclRyZWVPYmplY3Q6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB7XG4gICAgICAgIGlmICghZXhwclRyZWVPYmplY3QgfHwgIWV4cHJUcmVlT2JqZWN0LmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IG5ldyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUoZXhwclRyZWVPYmplY3Qub3BlcmF0b3IsIGV4cHJUcmVlT2JqZWN0LmZpZWxkTmFtZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGV4cHJUcmVlT2JqZWN0LmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdGVtIGlzIGFuIGV4cHJlc3Npb25zIHRyZWUgb3IgYSBzaW5nbGUgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgIGlmICgoaXRlbSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdCgoaXRlbSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChzdWJUcmVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwciA9IGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyckdyaWQgaW5zdGFuY2VvZiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLmN1cnJHcmlkLmFsbERpbWVuc2lvbnMuZmluZCh4ID0+IHgubWVtYmVyTmFtZSA9PT0gZXhwci5maWVsZE5hbWUpLmRhdGFUeXBlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyR3JpZC5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLmN1cnJHcmlkLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IHRoaXMuc3RhdGUuY29sdW1ucy5maW5kKGMgPT4gYy5maWVsZCA9PT0gZXhwci5maWVsZE5hbWUpLmRhdGFUeXBlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB3aGVuIEVTRiwgdmFsdWVzIGFyZSBzdG9yZWQgaW4gU2V0LlxuICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRob3NlIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGFuIGFycmF5IGJlZm9yZSByZXR1cm5pbmcgc3RyaW5nIGluIHRoZSBzdHJpbmdpZnlDYWxsYmFja1xuICAgICAgICAgICAgICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhvc2UgYmFjayB0byBTZXRcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleHByLnNlYXJjaFZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5zZWFyY2hWYWwgPSBuZXcgU2V0KGV4cHIuc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHByLnNlYXJjaFZhbCA9IGV4cHIuc2VhcmNoVmFsICYmIChkYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKSA/IG5ldyBEYXRlKERhdGUucGFyc2UoZXhwci5zZWFyY2hWYWwpKSA6IGV4cHIuc2VhcmNoVmFsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZ2VuZXJhdGVGaWx0ZXJpbmdDb25kaXRpb24oZGF0YVR5cGUsIGV4cHIuY29uZGl0aW9uLm5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VyckdyaWQuY29sdW1ucy5maW5kKGMgPT4gYy5maWVsZCA9PT0gZXhwci5maWVsZE5hbWUpLmZpbHRlcnMuY29uZGl0aW9uKGV4cHIuY29uZGl0aW9uLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBleHByLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goZXhwcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zVHJlZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJpbmcgbG9naWMgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gZGF0YVR5cGUgYW5kIGNvbmRpdGlvbiAoY29udGFpbnMsIGdyZWF0ZXJUaGFuLCBldGMuKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWx0ZXJpbmdDb25kaXRpb24oZGF0YVR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUZpbHRlcmluZ09wZXJhdGlvbiB7XG4gICAgICAgIGxldCBmaWx0ZXJzO1xuICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuU3RyaW5nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJzLmNvbmRpdGlvbihuYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0cmluZ2lmeUNhbGxiYWNrKGtleTogc3RyaW5nLCB2YWw6IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnc2VhcmNoVmFsJyAmJiB2YWwgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZlYXR1cmUoa2V5OiBzdHJpbmcpOiBGZWF0dXJlIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZTogRmVhdHVyZSA9IHRoaXMuRkVBVFVSRVNba2V5XTtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmU7XG4gICAgfVxufVxuIl19
|
|
644
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ2pLLE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQzlFLHlCQUF5QixFQUF1QiwyQkFBMkIsRUFDOUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUl6RCxPQUFPLEVBQVksYUFBYSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFzRnZELE1BQU0sT0FBTyxxQkFBcUI7SUF5VjlCOzs7Ozs7OztPQVFHO0lBQ0gsSUFDVyxPQUFPO1FBQ2YsT0FBTyxJ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dCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBIb3N0LCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBjcmVhdGVDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUdyb3VwaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGFnaW5nU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvcGFnaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7XG4gICAgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQsIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQsIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLFxuICAgIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQsIElGaWx0ZXJpbmdPcGVyYXRpb24sIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZFxufSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSwgSVBpbm5pbmdDb25maWcgfSBmcm9tICcuL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWRDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90RGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgSWd4UGl2b3REYXRlRGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQtZGltZW5zaW9ucyc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBjbG9uZVZhbHVlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTdGF0ZSB7XG4gICAgY29sdW1ucz86IElDb2x1bW5TdGF0ZVtdO1xuICAgIGZpbHRlcmluZz86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmc/OiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIHBhZ2luZz86IElQYWdpbmdTdGF0ZTtcbiAgICBtb3Zpbmc/OiBib29sZWFuO1xuICAgIHNvcnRpbmc/OiBJU29ydGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cEJ5PzogSUdyb3VwaW5nU3RhdGU7XG4gICAgY2VsbFNlbGVjdGlvbj86IEdyaWRTZWxlY3Rpb25SYW5nZVtdO1xuICAgIHJvd1NlbGVjdGlvbj86IGFueVtdO1xuICAgIGNvbHVtblNlbGVjdGlvbj86IHN0cmluZ1tdO1xuICAgIHJvd1Bpbm5pbmc/OiBhbnlbXTtcbiAgICBwaW5uaW5nQ29uZmlnPzogSVBpbm5pbmdDb25maWc7XG4gICAgZXhwYW5zaW9uPzogYW55W107XG4gICAgcm93SXNsYW5kcz86IElHcmlkU3RhdGVDb2xsZWN0aW9uW107XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgcGl2b3RDb25maWd1cmF0aW9uPzogSVBpdm90Q29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlQ29sbGVjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRSb3dJRDogYW55O1xuICAgIHN0YXRlOiBJR3JpZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICBjb2x1bW5zPzogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgICBncm91cEJ5PzogYm9vbGVhbjtcbiAgICBwYWdpbmc/OiBib29sZWFuO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1NlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgY29sdW1uU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICByb3dQaW5uaW5nPzogYm9vbGVhbjtcbiAgICBwaW5uaW5nQ29uZmlnPzogYm9vbGVhbjtcbiAgICBleHBhbnNpb24/OiBib29sZWFuO1xuICAgIHJvd0lzbGFuZHM/OiBib29sZWFuO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG4gICAgcGl2b3RDb25maWd1cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uU3RhdGUge1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJhYmxlOiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgaGVhZGVyQ2xhc3Nlczogc3RyaW5nO1xuICAgIGhlYWRlckdyb3VwQ2xhc3Nlczogc3RyaW5nO1xuICAgIG1heFdpZHRoOiBzdHJpbmc7XG4gICAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICAgIG1vdmFibGU6IGJvb2xlYW47XG4gICAgaGlkZGVuOiBib29sZWFuO1xuICAgIGRhdGFUeXBlOiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgaGFzU3VtbWFyeTogYm9vbGVhbjtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHdpZHRoOiBhbnk7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgcmVzaXphYmxlOiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgY29sdW1uR3JvdXA6IGJvb2xlYW47XG4gICAgcGFyZW50OiBhbnk7XG4gICAgZGlzYWJsZUhpZGluZzogYm9vbGVhbjtcbiAgICBkaXNhYmxlUGlubmluZzogYm9vbGVhbjtcbiAgICBjb2xsYXBzaWJsZT86IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIHZpc2libGVXaGVuQ29sbGFwc2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZEZlYXR1cmVzID0ga2V5b2YgSUdyaWRTdGF0ZU9wdGlvbnM7XG5cbmludGVyZmFjZSBGZWF0dXJlIHtcbiAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpID0+IElHcmlkU3RhdGU7XG4gICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdIHwgSVBhZ2luZ1N0YXRlIHwgYm9vbGVhbiB8IElTb3J0aW5nRXhwcmVzc2lvbltdIHxcbiAgICAgICAgSUdyb3VwaW5nU3RhdGUgfCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIHwgR3JpZFNlbGVjdGlvblJhbmdlW10gfCBJUGlubmluZ0NvbmZpZyB8IElQaXZvdENvbmZpZ3VyYXRpb24gfCBhbnlbXSkgPT4gdm9pZDtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4R3JpZFN0YXRlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wdGlvbnM6IElHcmlkU3RhdGVPcHRpb25zIHwgJyc7XG5cbiAgICBwcml2YXRlIGZlYXR1cmVLZXlzOiBHcmlkRmVhdHVyZXNbXSA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGU6IElHcmlkU3RhdGU7XG4gICAgcHJpdmF0ZSBjdXJyR3JpZDogR3JpZFR5cGU7XG4gICAgcHJpdmF0ZSBfb3B0aW9uczogSUdyaWRTdGF0ZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRydWUsXG4gICAgICAgIGZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIHNvcnRpbmc6IHRydWUsXG4gICAgICAgIGdyb3VwQnk6IHRydWUsXG4gICAgICAgIHBhZ2luZzogdHJ1ZSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1Bpbm5pbmc6IHRydWUsXG4gICAgICAgIGV4cGFuc2lvbjogdHJ1ZSxcbiAgICAgICAgbW92aW5nOiB0cnVlLFxuICAgICAgICByb3dJc2xhbmRzOiB0cnVlLFxuICAgICAgICBwaXZvdENvbmZpZ3VyYXRpb246IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgRkVBVFVSRVMgPSB7XG4gICAgICAgIHNvcnRpbmc6ICB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBzb3J0aW5nU3RhdGUuZm9yRWFjaChzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMuc3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLm93bmVyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNvcnRpbmc6IHNvcnRpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcmluZ1N0YXRlLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyaW5nU3RhdGUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoaXRlbSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWx0ZXJpbmc6IGZpbHRlcmluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBjb250ZXh0LmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3Qoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgbGV0IGFkdmFuY2VkRmlsdGVyaW5nOiBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSBmaWx0ZXJpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEZpbHRlcmluZyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBhZHZhbmNlZEZpbHRlcmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gY29udGV4dC5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRDb2x1bW5zOiBJQ29sdW1uU3RhdGVbXSA9IGNvbnRleHQuY3VyckdyaWQuY29sdW1ucy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHBpbm5lZDogYy5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBjLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJhYmxlOiBjLmZpbHRlcmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBjLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0aW5nSWdub3JlQ2FzZTogYy5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nSWdub3JlQ2FzZTogYy5maWx0ZXJpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDbGFzc2VzOiBjLmhlYWRlckNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckdyb3VwQ2xhc3NlczogYy5oZWFkZXJHcm91cENsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjLm1heFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBncm91cGFibGU6IGMuZ3JvdXBhYmxlLFxuICAgICAgICAgICAgICAgICAgICBtb3ZhYmxlOiBjLm1vdmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTdW1tYXJ5OiBjLmhhc1N1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjLmhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiBjLnJlc2l6YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBjLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogYy5wYXJlbnQgPyBjLnBhcmVudC5oZWFkZXIgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cDogYy5jb2x1bW5Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUhpZGluZzogYy5kaXNhYmxlSGlkaW5nLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUGlubmluZzogYy5kaXNhYmxlUGlubmluZyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGFwc2libGU6IGMuY29sdW1uR3JvdXAgPyBjLmNvbGxhcHNpYmxlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZDogYy5jb2x1bW5Hcm91cCA/IGMuZXhwYW5kZWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVXaGVuQ29sbGFwc2VkOiBjLnBhcmVudD8uY29sdW1uR3JvdXAgPyAoYyBhcyBJZ3hDb2x1bW5Db21wb25lbnQpLnZpc2libGVXaGVuQ29sbGFwc2VkIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtbnM6IGdyaWRDb2x1bW5zIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2goKGNvbFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NvbHVtbkdyb3VwID0gY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYxID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkdyb3VwQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmMS5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5pbnN0YW5jZS5ncmlkID0gY29udGV4dC5jdXJyR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYxLmluc3RhbmNlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCA9IG5ld0NvbHVtbnMuZmluZChlID0+IGUuaGVhZGVyID09PSByZWYxLmluc3RhbmNlLnBhcmVudCAgJiYgZS5jb2x1bW5Hcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmMS5pbnN0YW5jZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEuaW5zdGFuY2UucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaChyZWYxLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlZi5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmdyaWQgPSBjb250ZXh0LmN1cnJHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cDogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBuZXdDb2x1bW5zLmZpbmQoZSA9PiBlLmhlYWRlciA9PT0gcmVmLmluc3RhbmNlLnBhcmVudCAmJiBlLmNvbHVtbkdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IGNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cC5jaGlsZHJlbi5yZXNldChbLi4uY29sdW1uR3JvdXAuY2hpbGRyZW4udG9BcnJheSgpLCByZWYuaW5zdGFuY2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnVwZGF0ZUNvbHVtbnMobmV3Q29sdW1ucyk7XG4gICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0LmN1cnJHcmlkIGFzIGFueSkuY29sdW1uSW5pdC5lbWl0KGNvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBleHByLnN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlID0gZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc0V4cGFuZGVkID0gZ3JpZC5ncm91cHNFeHBhbmRlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGdyb3VwQnk6IHsgZXhwcmVzc2lvbnM6IGdyb3VwaW5nRXhwcmVzc2lvbnMsIGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGUsIGRlZmF1bHRFeHBhbmRlZDogZ3JvdXBzRXhwYW5kZWR9ICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJR3JvdXBpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gc3RhdGUuZXhwcmVzc2lvbnMgYXMgSUdyb3VwaW5nRXhwcmVzc2lvbltdO1xuICAgICAgICAgICAgICAgIHN0YXRlLmV4cGFuc2lvbi5mb3JFYWNoKGV4cCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cC5oaWVyYXJjaHkuZm9yRWFjaChoID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gZ3JpZC5jb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBoLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVR5cGUuaW5jbHVkZXMoR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUpIHx8IGRhdGFUeXBlLmluY2x1ZGVzKEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgudmFsdWUgPSBoLnZhbHVlID8gbmV3IERhdGUoRGF0ZS5wYXJzZShoLnZhbHVlKSkgOiBoLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZC5ncm91cHNFeHBhbmRlZCAhPT0gc3RhdGUuZGVmYXVsdEV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQudG9nZ2xlQWxsR3JvdXBSb3dzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZSA9IHN0YXRlLmV4cGFuc2lvbiBhcyBJR3JvdXBCeUV4cGFuZFN0YXRlW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnBhZ2luZ1N0YXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhZ2luZzogcGFnaW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBhZ2luZ1N0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmN1cnJHcmlkLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmN1cnJHcmlkLnBlclBhZ2UgIT09IHN0YXRlLnJlY29yZHNQZXJQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGVyUGFnZSA9IHN0YXRlLnJlY29yZHNQZXJQYWdlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGFnZSA9IHN0YXRlLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb3Zpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IG1vdmluZzogY29udGV4dC5jdXJyR3JpZC5tb3ZpbmcgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQubW92aW5nID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd1NlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSb3dzKHN0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5nZXRTZWxlY3RlZFJhbmdlcygpLm1hcChyYW5nZSA9PlxuICAgICAgICAgICAgICAgICAgICAoeyByb3dTdGFydDogcmFuZ2Uucm93U3RhcnQsIHJvd0VuZDogcmFuZ2Uucm93RW5kLCBjb2x1bW5TdGFydDogcmFuZ2UuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogcmFuZ2UuY29sdW1uRW5kIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjZWxsU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogR3JpZFNlbGVjdGlvblJhbmdlW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHsgcm93U3RhcnQ6IHIucm93U3RhcnQsIHJvd0VuZDogci5yb3dFbmQsIGNvbHVtblN0YXJ0OiByLmNvbHVtblN0YXJ0LCBjb2x1bW5FbmQ6IHIuY29sdW1uRW5kfTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3RlZENvbHVtbnMoKS5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjb2x1bW5TZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZGVzZWxlY3RBbGxDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RDb2x1bW5zKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93UGlubmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlubmVkID0gY29udGV4dC5jdXJyR3JpZC5waW5uZWRSb3dzPy5tYXAoeCA9PiB4LmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93UGlubmluZzogcGlubmVkIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYXIgY3VycmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5lZFJvd3MuZm9yRWFjaChyb3cgPT4gcm93LnVucGluKCkpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2gocm93SUQgPT4gY29udGV4dC5jdXJyR3JpZC5waW5Sb3cocm93SUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGlubmluZ0NvbmZpZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiAoeyBwaW5uaW5nQ29uZmlnOiBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgfSksXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBpbm5pbmdDb25maWcpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhwYW5zaW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZXMgPSBBcnJheS5mcm9tKGNvbnRleHQuY3VyckdyaWQuZXhwYW5zaW9uU3RhdGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlcyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IG5ldyBNYXA8YW55LCBib29sZWFuPihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbnNpb25TdGF0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd0lzbGFuZHM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZXM6IElHcmlkU3RhdGVDb2xsZWN0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IGNvbnRleHQuYnVpbGRTdGF0ZShjb250ZXh0LmZlYXR1cmVLZXlzKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRTdGF0ZXMucHVzaCh7IGlkOiBgJHtyb3dJc2xhbmQuaWR9YCwgcGFyZW50Um93SUQsIHN0YXRlOiBjaGlsZEdyaWRTdGF0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93SXNsYW5kczogY2hpbGRHcmlkU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IHN0YXRlLmZpbmQoc3QgPT4gc3QuaWQgPT09IHJvd0lzbGFuZC5pZCAmJiBzdC5wYXJlbnRSb3dJRCA9PT0gcGFyZW50Um93SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEdyaWRTdGF0ZSAmJiBjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZUdyaWRTdGF0ZShjaGlsZEdyaWRTdGF0ZS5zdGF0ZSwgY29udGV4dC5mZWF0dXJlS2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY29udGV4dC5ncmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdmVyc2VzIHRoZSBoaWVyYXJjaHkgdXAgdG8gdGhlIHJvb3QgZ3JpZCB0byByZXR1cm4gdGhlIElEIG9mIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFBhcmVudFJvd0lEOiAoZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZEdyaWQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZCA9IGdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyaWQuZ3JpZEFQSS5nZXRQYXJlbnRSb3dJZChjaGlsZEdyaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaXZvdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQpLnBpdm90Q29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZyB8fCAhKGNvbnRleHQuY3VyckdyaWQgaW5zdGFuY2VvZiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0NvcHkgPSBjbG9uZVZhbHVlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5yb3dzID0gY2xvbmVBcnJheShjb25maWcucm93cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5jb2x1bW5zID0gY2xvbmVBcnJheShjb25maWcuY29sdW1ucywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5maWx0ZXJzID0gY2xvbmVBcnJheShjb25maWcuZmlsdGVycywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltcyA9ICBbLi4uKGNvbmZpZ0NvcHkucm93cyB8fCBbXSksIC4uLihjb25maWdDb3B5LmNvbHVtbnMgfHwgW10pLCAuLi4oY29uZmlnQ29weS5maWx0ZXJzIHx8IFtdKV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZURpbWVuc2lvbnMgPSBkaW1zLmZpbHRlcih4ID0+IGNvbnRleHQuaXNEYXRlRGltZW5zaW9uKHgpKTtcbiAgICAgICAgICAgICAgICBkYXRlRGltZW5zaW9ucz8uZm9yRWFjaChkaW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHRoZSBncmlkIHJlc291cmNlIHN0cmluZ3MuIFRoaXMgd291bGQgcG9sbHV0ZSB0aGUgb2JqZWN0IHdpdGggdW5uZWNlc3NhcnkgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgKGRpbSBhcyBJZ3hQaXZvdERhdGVEaW1lbnNpb24pLnJlc291cmNlU3RyaW5ncyA9IHt9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogY29uZmlnQ29weSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGUoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWcgfHwgIShjb250ZXh0LmN1cnJHcmlkIGluc3RhbmNlb2YgSWd4UGl2b3RHcmlkQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZVZhbHVlcyhjb25maWcsIGNvbnRleHQuY3VyckdyaWQgYXMgSWd4UGl2b3RHcmlkQ29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmVEaW1lbnNpb25zKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgKGNvbnRleHQuY3VyckdyaWQgYXMgSWd4UGl2b3RHcmlkQ29tcG9uZW50KS5waXZvdENvbmZpZ3VyYXRpb24gPSBjb25maWc7XG4gICAgICAgICAgICB9LFxuXG5cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgRXZlbnQgZW1pdHRlZCB3aGVuIHNldCBzdGF0ZSBpcyBjYWxsZWQgd2l0aCBhIHN0cmluZy5cbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJzZWQgc3RhdGUgb2JqZWN0IHNvIHRoYXQgaXQgY2FuIGJlIGZ1cnRoZXIgbW9kaWZpZWQgYmVmb3JlIGFwcGx5aW5nIHRvIHRoZSBncmlkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnN0YXRlLnN0YXRlUGFyc2VkLnN1YnNjcmliZShwYXJzZWRTdGF0ZSA9PiBwYXJzZWRTdGF0ZS5zb3J0aW5nLmZvckVhY2goeCA9PiB4LnN0cmF0ZWd5ID0gTm9vcFNvcnRpbmdTdHJhdGVneS5pbnN0YW5jZSgpfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHN0YXRlUGFyc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZFN0YXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZGV0ZXJtaW5pbmcgaWYgYSBjZXJ0YWluIGZlYXR1cmUgc3RhdGUgc2hvdWxkIGJlIHNhdmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9wdGlvbnMgPSB7c2VsZWN0aW9uOiBmYWxzZSwgYWR2YW5jZWRGaWx0ZXJpbmc6IGZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEdyaWRTdGF0ZScpXG4gICAgcHVibGljIGdldCBvcHRpb25zKCk6IElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IElHcmlkU3RhdGVPcHRpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgdmFsdWUpO1xuICAgICAgICBpZiAoISh0aGlzLmdyaWQgaW5zdGFuY2VvZiBJZ3hHcmlkQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29wdGlvbnMuZ3JvdXBCeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLnJvd0lzbGFuZHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHByaXZhdGUgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBlbnZJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvciwgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXRlIG9mIGEgZmVhdHVyZSBvciBzdGF0ZXMgb2YgYWxsIGdyaWQgZmVhdHVyZXMsIHVubGVzcyBhIGNlcnRhaW4gZmVhdHVyZSBpcyBkaXNhYmxlZCB0aHJvdWdoIHRoZSBgb3B0aW9uc2AgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYHNlcmlhbGl6ZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nLiBEZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAgICogQHBhcmFtIGBmZWF0dXJlYCBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBkZXRlcm1pbmluZyB0aGUgZmVhdHVyZXMgdG8gYmUgYWRkZWQgaW4gdGhlIHN0YXRlLiBJZiBza2lwcGVkLCBhbGwgZmVhdHVyZXMgYXJlIGFkZGVkLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdG8gSlNPTiBzdHJpbmcgSUdyaWRTdGF0ZSBvYmplY3QsIG9yIHRoZSBub24tc2VyaWFsaXplZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc3RhdGU7XG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpOyAvLyByZXR1cm5zIHN0cmluZ1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUoZmFsc2UpIC8vIHJldHVybnMgYElHcmlkU3RhdGVgIG9iamVjdFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdGF0ZShzZXJpYWxpemUgPSB0cnVlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB8IHN0cmluZyAge1xuICAgICAgICBsZXQgc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9IHRoaXMuYnVpbGRTdGF0ZShmZWF0dXJlcykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdGhpcy5zdHJpbmdpZnlDYWxsYmFjaykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBncmlkIGZlYXR1cmVzJyBzdGF0ZSBiYXNlZCBvbiB0aGUgSUdyaWRTdGF0ZSBvYmplY3QgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIElHcmlkU3RhdGUgb2JqZWN0IHRvIHJlc3RvcmUgc3RhdGUgZnJvbS5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzdGF0ZTtcbiAgICAgKiB0aGlzLnN0YXRlLnNldFN0YXRlKGdyaWRTdGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBJR3JpZFN0YXRlIHwgc3RyaW5nLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGUpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlUGFyc2VkLmVtaXQoc3RhdGUpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB0aGlzLnJlc3RvcmVHcmlkU3RhdGUoc3RhdGUsIGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRPRE9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZFN0YXRlKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSk6IElHcmlkU3RhdGUge1xuICAgICAgICB0aGlzLmFwcGx5RmVhdHVyZXMoa2V5cyk7XG4gICAgICAgIGxldCBncmlkU3RhdGUgPSB7fSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ZdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkgJiYgZiA9PT0gJ2dyb3VwQnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGU6IElHcmlkU3RhdGUgPSBmZWF0dXJlLmdldEZlYXR1cmVTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICBncmlkU3RhdGUgPSBPYmplY3QuYXNzaWduKGdyaWRTdGF0ZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncmlkU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyB0byByZXN0b3JlIGZlYXR1cmVzIGZyb20gdGhlIHBhc3NlZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVHcmlkU3RhdGUoc3RhdGU6IElHcmlkU3RhdGUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRmVhdHVyZXMoc3RhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZUZlYXR1cmVzKHN0YXRlOiBJR3JpZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGUgPSBzdGF0ZVtmXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJ21vdmluZycgfHwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGdyaWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZlYXR1cmVzKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMucHVzaChrZXkgYXMgR3JpZEZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gWy4uLmtleXMgYXMgR3JpZEZlYXR1cmVzW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgY29tcGxleCBvYmplY3RzIGluIHRoZSBwaXZvdCBkaW1lbnNpb25zXG4gICAgICogTGlrZSB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIGFuZCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURpbWVuc2lvbnMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gW2NvbmZpZy5yb3dzLCBjb25maWcuY29sdW1ucywgY29uZmlnLmZpbHRlcnNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2xsZWN0aW9uPy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSBjb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGVEaW1lbnNpb24oZGltKSkge1xuICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZURhdGVEaW1lbnNpb24oZGltIGFzIElneFBpdm90RGF0ZURpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgY29tcGxleCBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgaWYgKGRpbS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGltLmZpbHRlciA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChkaW0uZmlsdGVyIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIHdpdGggaXRzIGRlZmF1bHQgZnVuY3Rpb25zIGFuZCByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURhdGVEaW1lbnNpb24oZGltOiBJZ3hQaXZvdERhdGVEaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZGF0ZURpbSA9IG5ldyBJZ3hQaXZvdERhdGVEaW1lbnNpb24oKGRpbSBhcyBhbnkpLl9iYXNlRGltZW5zaW9uLCAoZGltIGFzIGFueSkuX29wdGlvbnMpO1xuICAgICAgICAvLyByZXN0b3JlIGZ1bmN0aW9ucyBhbmQgcmVzb3VyY2Ugc3RyaW5nc1xuICAgICAgICBkaW0ucmVzb3VyY2VTdHJpbmdzID0gZGF0ZURpbS5yZXNvdXJjZVN0cmluZ3M7XG4gICAgICAgIGRpbS5tZW1iZXJGdW5jdGlvbiA9IGRhdGVEaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIGxldCBjdXJyRGltOiBJUGl2b3REaW1lbnNpb24gPSBkaW07XG4gICAgICAgIGxldCBvcmlnaW5EaW06IElQaXZvdERpbWVuc2lvbiA9IGRhdGVEaW07XG4gICAgICAgIHdoaWxlIChjdXJyRGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIGN1cnJEaW0gPSBjdXJyRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICBvcmlnaW5EaW0gPSBvcmlnaW5EaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgICAgIGN1cnJEaW0ubWVtYmVyRnVuY3Rpb24gPSBvcmlnaW5EaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoaXMgaXMgYSBJZ3hQaXZvdERhdGVEaW1lbnNpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0RhdGVEaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgcmV0dXJuIChkaW0gYXMgYW55KS5fYmFzZURpbWVuc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyBjb21wbGV4IG9iamVjdHMgaW4gdGhlIHBpdm90IHZhbHVlcy5cbiAgICAgKiBMaWtlIHRoZSBkZWZhdWx0IGFnZ3JlZ2F0b3IgbWV0aG9kcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVWYWx1ZXMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLCBncmlkOiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpIHtcbiAgICAgICAgLy8gcmVzdG9yZSBhZ2dyZWdhdG9yIGZ1bmMgaWYgaXQgbWF0Y2hlcyB0aGUgZGVmYXVsdCBhZ2dyZWdhdG9ycyBrZXkgYW5kIGxhYmVsXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVMaXN0ID0gdmFsdWUuYWdncmVnYXRlTGlzdDtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3JzID0gUGl2b3RVdGlsLmdldEFnZ3JlZ2F0b3JzRm9yVmFsdWUodmFsdWUsIGdyaWQpO1xuICAgICAgICAgICAgdmFsdWUuYWdncmVnYXRlLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IHZhbHVlLmFnZ3JlZ2F0ZS5rZXkgJiYgeC5sYWJlbCA9PT0gdmFsdWUuYWdncmVnYXRlLmxhYmVsKT8uYWdncmVnYXRvcjtcbiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZyBvZiBhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFnLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IGFnLmtleSAmJiB4LmxhYmVsID09PSBhZy5sYWJlbCk/LmFnZ3JlZ2F0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIGEgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIGZyb20gYSBwcm92aWRlZCBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGV4cHJUcmVlT2JqZWN0OiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUge1xuICAgICAgICBpZiAoIWV4cHJUcmVlT2JqZWN0IHx8ICFleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGV4cHJUcmVlT2JqZWN0Lm9wZXJhdG9yLCBleHByVHJlZU9iamVjdC5maWVsZE5hbWUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXRlbSBpcyBhbiBleHByZXNzaW9ucyB0cmVlIG9yIGEgc2luZ2xlIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goc3ViVHJlZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSBpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJHcmlkIGluc3RhbmNlb2YgSWd4UGl2b3RHcmlkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5hbGxEaW1lbnNpb25zLmZpbmQoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyckdyaWQuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5jb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLnN0YXRlLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBFU0YsIHZhbHVlcyBhcmUgc3RvcmVkIGluIFNldC5cbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aG9zZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBhbiBhcnJheSBiZWZvcmUgcmV0dXJuaW5nIHN0cmluZyBpbiB0aGUgc3RyaW5naWZ5Q2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBub3cgd2UgbmVlZCB0byBjb252ZXJ0IHRob3NlIGJhY2sgdG8gU2V0XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwci5zZWFyY2hWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gbmV3IFNldChleHByLnNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5zZWFyY2hWYWwgPSBleHByLnNlYXJjaFZhbCAmJiAoZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBkYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJykgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGV4cHIuc2VhcmNoVmFsKSkgOiBleHByLnNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSB0aGlzLmdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlLCBleHByLmNvbmRpdGlvbi5uYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJHcmlkLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5maWx0ZXJzLmNvbmRpdGlvbihleHByLmNvbmRpdGlvbi5uYW1lKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKGV4cHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyaW5nIGxvZ2ljIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGRhdGFUeXBlIGFuZCBjb25kaXRpb24gKGNvbnRhaW5zLCBncmVhdGVyVGhhbiwgZXRjLilcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICBsZXQgZmlsdGVycztcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVycy5jb25kaXRpb24obmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJpbmdpZnlDYWxsYmFjayhrZXk6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3NlYXJjaFZhbCcgJiYgdmFsIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGZWF0dXJlKGtleTogc3RyaW5nKTogRmVhdHVyZSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmU6IEZlYXR1cmUgPSB0aGlzLkZFQVRVUkVTW2tleV07XG4gICAgICAgIHJldHVybiBmZWF0dXJlO1xuICAgIH1cbn1cbiJdfQ==
|