@po-ui/ng-components 17.26.3 → 17.26.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/po-accordion/po-accordion-item-header/po-accordion-item-header.component.mjs +31 -13
- package/esm2022/lib/components/po-accordion/po-accordion-manager/po-accordion-manager.component.mjs +47 -12
- package/esm2022/lib/components/po-accordion/po-accordion.module.mjs +5 -4
- package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-base.component.mjs +2 -2
- package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
- package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +118 -7
- package/esm2022/lib/components/po-field/po-switch/po-switch.component.mjs +18 -4
- package/esm2022/lib/components/po-page/po-page-default/po-page-default-base.component.mjs +2 -2
- package/esm2022/lib/components/po-page/po-page-default/po-page-default.component.mjs +9 -1
- package/esm2022/lib/components/po-table/po-table-base.component.mjs +31 -3
- package/esm2022/lib/components/po-table/po-table-detail/po-table-detail.component.mjs +43 -37
- package/esm2022/lib/components/po-table/po-table-list-manager/po-table-list-manager.component.mjs +5 -5
- package/esm2022/lib/components/po-table/po-table.component.mjs +8 -8
- package/fesm2022/po-ui-ng-components.mjs +313 -94
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-accordion/po-accordion-item-header/po-accordion-item-header.component.d.ts +2 -0
- package/lib/components/po-accordion/po-accordion-manager/po-accordion-manager.component.d.ts +8 -2
- package/lib/components/po-accordion/po-accordion.module.d.ts +2 -1
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-base.component.d.ts +1 -1
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +2 -0
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.d.ts +7 -2
- package/lib/components/po-field/po-switch/po-switch.component.d.ts +13 -1
- package/lib/components/po-page/po-page-default/po-page-default-base.component.d.ts +1 -0
- package/lib/components/po-page/po-page-default/po-page-default.component.d.ts +2 -0
- package/lib/components/po-table/po-table-base.component.d.ts +2 -1
- package/lib/components/po-table/po-table-detail/po-table-detail.component.d.ts +6 -1
- package/package.json +4 -4
- package/po-ui-ng-components-17.26.5.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/po-ui-ng-components-17.26.3.tgz +0 -0
|
@@ -933,6 +933,10 @@ export class PoTableBaseComponent {
|
|
|
933
933
|
this.selectAll = !this.selectAll;
|
|
934
934
|
this.items.forEach(item => {
|
|
935
935
|
item.$selected = this.selectAll;
|
|
936
|
+
if (item[this.nameColumnDetail]) {
|
|
937
|
+
const childItems = item[this.nameColumnDetail];
|
|
938
|
+
childItems.forEach(childItem => (childItem.$selected = this.selectAll));
|
|
939
|
+
}
|
|
936
940
|
});
|
|
937
941
|
this.emitSelectAllEvents(this.selectAll, [...this.items]);
|
|
938
942
|
this.setSelectedList();
|
|
@@ -942,13 +946,37 @@ export class PoTableBaseComponent {
|
|
|
942
946
|
row.$selected = !row.$selected;
|
|
943
947
|
this.emitSelectEvents(row);
|
|
944
948
|
this.configAfterSelectRow(this.items, row);
|
|
949
|
+
if (row[this.nameColumnDetail] && (row.$selected === true || row.$selected === false)) {
|
|
950
|
+
const childItems = row[this.nameColumnDetail];
|
|
951
|
+
childItems.forEach(item => (item.$selected = row.$selected));
|
|
952
|
+
}
|
|
945
953
|
this.setSelectedList();
|
|
946
954
|
}
|
|
947
955
|
hasSelectableRow() {
|
|
948
956
|
return this.selectable && this.selectableEntireLine;
|
|
949
957
|
}
|
|
950
|
-
selectDetailRow(
|
|
951
|
-
|
|
958
|
+
selectDetailRow(event) {
|
|
959
|
+
const { item, parentRow } = event;
|
|
960
|
+
this.emitSelectEvents(item);
|
|
961
|
+
this.updateParentRowSelection(parentRow);
|
|
962
|
+
}
|
|
963
|
+
updateParentRowSelection(parentRow) {
|
|
964
|
+
const old = parentRow.$selected || null;
|
|
965
|
+
const childItems = parentRow[this.nameColumnDetail];
|
|
966
|
+
if (childItems.every(item => item.$selected)) {
|
|
967
|
+
parentRow.$selected = true;
|
|
968
|
+
}
|
|
969
|
+
else if (childItems.every(item => !item.$selected)) {
|
|
970
|
+
parentRow.$selected = false;
|
|
971
|
+
}
|
|
972
|
+
else {
|
|
973
|
+
parentRow.$selected = null;
|
|
974
|
+
}
|
|
975
|
+
if (old != parentRow.$selected && !(old == null && parentRow.$selected === false)) {
|
|
976
|
+
this.emitSelectEvents(parentRow);
|
|
977
|
+
}
|
|
978
|
+
this.configAfterSelectRow(this.items, parentRow);
|
|
979
|
+
this.setSelectedList();
|
|
952
980
|
}
|
|
953
981
|
setSelectedList() {
|
|
954
982
|
this.itemsSelected = [];
|
|
@@ -1307,4 +1335,4 @@ export class PoTableBaseComponent {
|
|
|
1307
1335
|
type: Input,
|
|
1308
1336
|
args: ['p-virtual-scroll']
|
|
1309
1337
|
}] }); })();
|
|
1310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tdGFibGUvcG8tdGFibGUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSTVHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQVdyRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLEVBQUUsRUFBbUI7UUFDbkIsU0FBUyxFQUFFLHlCQUF5QjtRQUNwQyxNQUFNLEVBQUUsZUFBZTtRQUN2QixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsYUFBYSxFQUFFLGdCQUFnQjtRQUMvQixlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLFlBQVksRUFBRSxnQkFBZ0I7UUFD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QyxXQUFXO1lBdUJTLFVBQVU7a0JBQXBDLEtBQUs7bUJBQUMsY0FBYztZQXFCVyxjQUFjO2tCQUE3QyxLQUFLO21CQUFDLG1CQUFtQjtZQWtCZSxzQkFBc0I7a0JBQTlELEtBQUs7bUJBQUMsNEJBQTRCO1lBa0NQLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQXlCUyxnQkFBZ0I7a0JBQTlDLEtBQUs7bUJBQUMsa0JBQWtCO1lBb0JELE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXFCZSxlQUFlO2tCQUEvQyxLQUFLO21CQUFDLG9CQUFvQjtZQWdFRCxTQUFTO2tCQUFsQyxLQUFLO21CQUFDLGFBQWE7WUFvQlcsYUFBYTtrQkFBM0MsS0FBSzttQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBQb0RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tZGF0ZS9wby1kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGNhcGl0YWxpemVGaXJzdExldHRlciwgY29udmVydFRvQm9vbGVhbiwgaXNUeXBlb2YsIHNvcnRWYWx1ZXMgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9TZWFyY2hGaWx0ZXJNb2RlIH0gZnJvbSAnLi4vcG8tc2VhcmNoL2VudW0vcG8tc2VhcmNoLWZpbHRlci1tb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNvcnRUeXBlIH0gZnJvbSAnLi9lbnVtcy9wby10YWJsZS1jb2x1bW4tc29ydC10eXBlLmVudW0nO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNwYWNpbmcgfSBmcm9tICcuL2VudW1zL3BvLXRhYmxlLXNwYWNpbmcuZW51bSc7XG5pbXBvcnQgeyBQb1RhYmxlQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNvcnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLXNvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW4gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlRmlsdGVyZWRJdGVtc1BhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1maWx0ZXJlZC1pdGVtcy1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVMaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZVJlc3BvbnNlQXBpIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLXJlc3BvbnNlLWFwaS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLXRhYmxlLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBRdWVyeVBhcmFtc1R5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuXG5leHBvcnQgY29uc3QgcG9UYWJsZUNvbnRhaW5lciA9IFsnYm9yZGVyJywgJ3NoYWRvdyddO1xuZXhwb3J0IGNvbnN0IHBvVGFibGVDb250YWluZXJEZWZhdWx0ID0gJ2JvcmRlcic7XG5leHBvcnQgY29uc3QgcG9UYWJsZVBhcmFtRGVsZXRlQXBpID0gJ2lkJztcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVMaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9UYWJsZUxpdGVyYWxzPntcbiAgICBub0NvbHVtbnM6ICdDb2x1bW5zIGFyZSBub3QgZGVmaW5lZCcsXG4gICAgbm9EYXRhOiAnTm8gZGF0YSBmb3VuZCcsXG4gICAgbm9JdGVtOiAnTm8gc2VsZWN0ZWQgaXRlbScsXG4gICAgb25lSXRlbTogJzEgc2VsZWN0ZWQgaXRlbScsXG4gICAgbXVsdGlwbGVJdGVtczogJ3NlbGVjdGVkIGl0ZW1zJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdObyB2aXNpYmxlIGNvbHVtbicsXG4gICAgbG9hZGluZ0RhdGE6ICdMb2FkaW5nJyxcbiAgICBsb2FkTW9yZURhdGE6ICdMb2FkIG1vcmUgZGF0YScsXG4gICAgc2VlQ29tcGxldGVTdWJ0aXRsZTogJ1NlZSBjb21wbGV0ZSBzdWJ0aXRsZScsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ0NvbXBsZXRlIHN1YnRpdGxlJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0NvbHVtbnMgbWFuYWdlcicsXG4gICAgYm9keURlbGV0ZTogJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBpdGVtPycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgIGRlbGV0ZVN1Y2Nlc3NmdWw6ICdJdGVtcyByZW1vdmVkIHN1Y2Nlc3NmdWxseScsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyJ1xuICB9LFxuICBlczogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAnQ29sdW1uYXMgbm8gZGVmaW5pZGFzJyxcbiAgICBub0RhdGE6ICdEYXRvcyBubyBlbmNvbnRyYWRvcycsXG4gICAgbm9JdGVtOiAnTmluZ8O6biBlbGVtZW50byBzZWxlY2Npb25hZG8nLFxuICAgIG9uZUl0ZW06ICcxIGVsZW1lbnRvIHNlbGVjY2lvbmFkbycsXG4gICAgbXVsdGlwbGVJdGVtczogJ2VsZW1lbnRvcyBzZWxlY2Npb25hZG9zJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdTaW4gY29sdW1uYXMgdmlzaWJsZXMnLFxuICAgIGxvYWRpbmdEYXRhOiAnQ2FyZ2FuZG8gZGF0b3MnLFxuICAgIGxvYWRNb3JlRGF0YTogJ0NhcmdhciBtw6FzIHJlc3VsdGFkb3MnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgc3VidGl0dWxvIGNvbXBsZXRvJyxcbiAgICBjb21wbGV0ZVN1YnRpdGxlOiAnU3VidGl0dWxvIGNvbXBsZXRvJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVudGUgZGUgY29sdW1uYScsXG4gICAgYm9keURlbGV0ZTogJ8K/UmVhbG1lbnRlIGRlc2VhIGVsaW1pbmFyIGVzdGUgZWxlbWVudG8/JyxcbiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgZGVsZXRlOiAnQm9ycmFyJyxcbiAgICBkZWxldGVTdWNjZXNzZnVsOiAnRWxlbWVudG9zIGVsaW1pbmFkb3MgY29uIMOpeGl0bycsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICdPY3VycmnDsyB1biBlcnJvciBpbmVzcGVyYWRvLCBpbnTDqW50YWxvIGRlIG51ZXZvIG3DoXMgdGFyZGUnXG4gIH0sXG4gIHB0OiA8UG9UYWJsZUxpdGVyYWxzPntcbiAgICBub0NvbHVtbnM6ICdOZW5odW1hIGRlZmluacOnw6NvIGRlIGNvbHVuYXMnLFxuICAgIG5vRGF0YTogJ05lbmh1bSBkYWRvIGVuY29udHJhZG8nLFxuICAgIG5vVmlzaWJsZUNvbHVtbjogJ05lbmh1bWEgY29sdW5hIHZpc8OtdmVsJyxcbiAgICBub0l0ZW06ICdOZW5odW0gaXRlbSBzZWxlY2lvbmFkbycsXG4gICAgb25lSXRlbTogJzEgaXRlbSBzZWxlY2lvbmFkbycsXG4gICAgbXVsdGlwbGVJdGVtczogJ2l0ZW5zIHNlbGVjaW9uYWRvcycsXG4gICAgbG9hZGluZ0RhdGE6ICdDYXJyZWdhbmRvJyxcbiAgICBsb2FkTW9yZURhdGE6ICdDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgbGVnZW5kYSBjb21wbGV0YScsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ0xlZ2VuZGEgY29tcGxldGEnLFxuICAgIGNvbHVtbnNNYW5hZ2VyOiAnR2VyZW5jaWFkb3IgZGUgY29sdW5hcycsXG4gICAgYm9keURlbGV0ZTogJ0Rlc2VqYSByZWFsbWVudGUgZXhjbHVpciBlc3NlIGl0ZW0/JyxcbiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgZGVsZXRlOiAnRXhjbHVpcicsXG4gICAgZGVsZXRlU3VjY2Vzc2Z1bDogJ0l0ZW5zIHJlbW92aWRvcyBjb20gc3VjZXNzbycsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICdPY29ycmV1IHVtIGVycm8gaW5lc3BlcmFkbywgdGVudGUgbm92YW1lbnRlIG1haXMgdGFyZGUhJ1xuICB9LFxuICBydTogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAn0J3QtdGCINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0YHRgtC+0LvQsdGG0LAnLFxuICAgIG5vRGF0YTogJ9CU0LDQvdC90YvQtSDQvdC1INC90LDQudC00LXQvdGLJyxcbiAgICBub0l0ZW06ICfQndC10YIg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCcsXG4gICAgb25lSXRlbTogJzEg0Y3Qu9C10LzQtdC90YIg0LLRi9Cx0YDQsNC9JyxcbiAgICBtdWx0aXBsZUl0ZW1zOiAn0LLRi9Cx0YDQsNC90L3Ri9C1INGN0LvQtdC80LXQvdGC0YsnLFxuICAgIG5vVmlzaWJsZUNvbHVtbjogJ9C90LXRgiDQstC40LTQuNC80YvRhSDRgdGC0L7Qu9Cx0YbQvtCyJyxcbiAgICBsb2FkaW5nRGF0YTogJ9CX0LDQs9GA0YPQt9C60LAnLFxuICAgIGxvYWRNb3JlRGF0YTogJ9CX0LDQs9GA0YPQt9C60LAnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICfQn9C+0YHQvNC+0YLRgNC10YLRjCDQv9C+0LvQvdGL0Lkg0YHRg9Cx0YLQuNGC0YAnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICfQn9C+0LvQvdGL0Lkg0LfQsNCz0L7Qu9C+0LLQvtC6JyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ9C80LXQvdC10LTQttC10YAg0LrQvtC70L7QvdC+0LonLFxuICAgIGJvZHlEZWxldGU6ICfQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0L7RgiDRjdC70LXQvNC10L3Rgj8nLFxuICAgIGNhbmNlbDogJ9Ce0YLQvNC10L3QsCcsXG4gICAgZGVsZXRlOiAn0KPQtNCw0LvQuNGC0YwnLFxuICAgIGRlbGV0ZVN1Y2Nlc3NmdWw6ICfQrdC70LXQvNC10L3RgtGLINGD0YHQv9C10YjQvdC+INGD0LTQsNC70LXQvdGLJyxcbiAgICBkZWxldGVBcGlFcnJvcjogJ9Cf0YDQvtC40LfQvtGI0LvQsCDQvdC10L/RgNC10LTQstC40LTQtdC90L3QsNGPINC+0YjQuNCx0LrQsCwg0L/QvtCy0YLQvtGA0LjRgtC1INC/0L7Qv9GL0YLQutGDINC/0L7Qt9C20LUnXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIGRlIHRhYmVsYSDDqSB1dGlsaXphZG8gcGFyYSBleGliacOnw6NvIGRlIGRhZG9zIGNvbSBkaWZlcmVudGVzIHRpcG9zIGNvbW8gcG9yIGV4ZW1wbG8gdGV4dG9zLCBkYXRhLCBob3JhcyBlIG7Dum1lcm9zIGNvbVxuICogZm9ybWF0byBwZXJzb25hbGl6YWRvLlxuICpcbiAqIFRhbWLDqW0gw6kgcG9zc2l2ZWwgY3JpYXIgdGFiZWxhcyBjb20gb3JkZW5hw6fDo28gZGUgZGFkb3MsIGxpbmhhcyBjb20gZGV0YWxoZXMsIGNvbHVuYSBwYXJhIHNlbGXDp8OjbyBkZSBsaW5oYXMsIGNvbHVuYSBjb20gYcOnw7VlcyBlIHRhbWLDqW1cbiAqIGNhcnJlZ2FtZW50byBwb3IgZGVtYW5kYSBhdHJhdsOpcyBkbyBib3TDo28gKipDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MqKi5cbiAqXG4gKiA+IEFzIGxpbmhhcyBkZSBkZXRhbGhlcyBwb2RlbSB0YW1iw6ltIHNlciBjdXN0b21pemFkYXMgYXRyYXbDqXMgZG8gW2BwLXRhYmxlLXJvdy10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLXJvdy10ZW1wbGF0ZSkuXG4gKlxuICogPiBBcyBjb2x1bmFzIHBvZGVtIHNlciBjdXN0b21pemFkYXMgYXRyYXbDqXMgZG9zIHRlbXBsYXRlcyBbYHAtdGFibGUtY29sdW1uLXRlbXBsYXRlYF0oL2RvY3VtZW50YXRpb24vcG8tdGFibGUtY29sdW1uLXRlbXBsYXRlKVxuICogZSBbYHAtdGFibGUtY2VsbC10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLWNlbGwtdGVtcGxhdGUpLlxuICpcbiAqIE8gY29tcG9uZW50ZSBwZXJtaXRlIGdlcmVuY2lhciBhIGV4aWJpw6fDo28gZGFzIGNvbHVuYXMgZGluYW1pY2FtZW50ZS4gRXN0YSBmdW5jaW9uYWxpZGFkZSBwb2RlIHNlciBhY2Vzc2FkYSBhdHJhdsOpcyBkbyDDrWNvbmUgZGUgZW5ncmVuYWdlbVxuICogbm8gY2FudG8gc3VwZXJpb3IgZGlyZWl0byBkbyBjYWJlw6dhbGhvIGRhIHRhYmVsYS5cbiAqXG4gKiBDYXNvIGEgbGFyZ3VyYSBkZSB0b2RhcyBhcyBjb2x1bmFzIGZvcmVtIGRlZmluaWRhcyBlIG8gdG90YWwgdWx0cmFwYXNzYXIgbyB0YW1hbmhvIHRhYmVsYSwgc2Vyw6EgZXhpYmlkbyB1bSAqc2Nyb2xsKiBuYSBob3Jpem9udGFsIHBhcmEgYVxuICogY29tcGxldGEgdmlzdWFsaXphw6fDo28gZG9zIGRhZG9zLlxuICpcbiAqICMjIyMgVG9rZW5zIGN1c3RvbWl6w6F2ZWlzXG4gKlxuICogw4kgcG9zc8OtdmVsIGFsdGVyYXIgbyBlc3RpbG8gZG8gY29tcG9uZW50ZSB1c2FuZG8gb3Mgc2VndWludGVzIHRva2VucyAoQ1NTKTpcbiAqXG4gKiA+IFBhcmEgbWFpb3JlcyBpbmZvcm1hw6fDtWVzLCBhY2Vzc2UgbyBndWlhIFtQZXJzb25hbGl6YW5kbyBvIFRlbWEgUGFkcsOjbyBjb20gVG9rZW5zIENTU10oaHR0cHM6Ly9wby11aS5pby9ndWlkZXMvdGhlbWUtY3VzdG9taXphdGlvbikuXG4gKlxuICogfCBQcm9wcmllZGFkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyacOnw6NvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBWYWxvciBQYWRyw6NvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipEZWZhdWx0IFZhbHVlcyoqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1mb250LWZhbWlseWAgICAgICAgICAgICAgICAgICAgICAgICB8IEZhbcOtbGlhIHRpcG9ncsOhZmljYSB1c2FkYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tZm9udC1mYW1pbHktdGhlbWUpYCAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvcmAgICAgICAgICAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWxpZ2h0LTAwKWAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgZGEgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtZGFyay05NSlgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtc3RyaXBlZC1jb2xvcmAgICAgICAgICAgIHwgQ29yIGRvIGJhY2tncm91bmQgcXVhbmRvIHN0cmlwZWQgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0wNSlgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItbGluZWAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgZGFzIGxpbmhhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLW1pZC00MClgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkhvdmVyKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWhvdmVyYCAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIHByaW5jaXBhbCBubyBlc3RhZG8gaG92ZXIgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWhvdmVyKWAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1ob3ZlcmAgICAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gaG92ZXIgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1icmFuZC0wMS1saWdodGVyKWAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkZvY3VzZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLW91dGxpbmUtY29sb3ItZm9jdXNlZGAgICAgICAgICAgICAgIHwgQ29yIGRvIG91dGxpbmUgZG8gZXN0YWRvIGRlIGZvY3VzICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWZvY3VzKWAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipEaXNhYmxlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1kaXNhYmxlZGAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbWlkLTQwKWAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqSGVhZGxpbmUqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1oZWFkbGluZWAgJm5ic3A7ICAgfCBDb3IgZG8gY2FiZcOnYWxobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0xMClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tZm9udC13ZWlnaHQtaGVhZGxpbmVgICAgICAgICAgICAgICAgfCBQZXNvIGRhIGZvbnRlIGRvIGNhYmXDp2FsaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tZm9udC13ZWlnaHQtYm9sZClgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipTZWxlY3RlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLWNvbG9yLXNlbGVjdGVkYCZuYnNwOyAgICB8IENvciBkZSBiYWNrZ3JvdW5kIG5vIGVzdGFkbyBkZSBzZWxlY2lvbmFkbyAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWJyYW5kLTAxLWxpZ2h0ZXN0KWAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqQWN0aXZlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItYWN0aXZlZGAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgZG8gdGV4dG8gbm8gZXN0YWRvIGRlIHNlbGVjaW9uYWRvICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWRhcmstOTApYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZWRgICAgICAgICAgICB8IENvciBkZSBiYWNrZ3JvdW5kIG5vIGVzdGFkbyBkZSBzZWxlY2lvbmFkbyAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWJyYW5kLTAxLWxpZ2h0KWAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb1RhYmxlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLCByZXNwb25zw6F2ZWwgcGVsYSBkZWZpbmnDp8OjbyBkZSBxdWFpcyBjb2x1bmFzIHNlcsOjbyBleGliaWRhcywgc2VqYSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLWNvbHVtbnMtbWFuYWdlcicsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBoaWRlQ29sdW1uc01hbmFnZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgYXMgYcOnw7VlcyBlbSBsb3RlLCByZXNwb25zw6F2ZWwgcG9yIGV4Y2x1aXIgZSBleGliaXIgYSBxdWFudGlkYWRlIGRlIGl0ZW5zLCBzZWphbSBlc2NvbmRpZGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLWJhdGNoLWFjdGlvbnMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZUJhdGNoQWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBhIHF1ZWJyYSBhdXRvbcOhdGljYSBkZSB0ZXh0by4gUXVhbmRvIGF0aXZhZGEsIG8gdGV4dG8gcXVlIGV4Y2VkZVxuICAgKiBvIGVzcGHDp28gZGlzcG9uw612ZWwgw6kgdHJhbnNmZXJpZG8gcGFyYSBhIHByw7N4aW1hIGxpbmhhIGVtIHBvbnRvcyBhcHJvcHJpYWRvcyBwYXJhIHVtYVxuICAgKiBsZWl0dXJhIGNsYXJhLlxuICAgKlxuICAgKiA+IEluY29tcGF0w612ZWwgY29tIGB2aXJ0dWFsLXNjcm9sbGAsIHF1ZSByZXF1ZXIgYWx0dXJhIGZpeGEgbmFzIGxpbmhhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXRleHQtd3JhcCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSB0ZXh0V3JhcD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIHF1ZSBhcyBhw6fDtWVzIHBhcmEgZml4YXIgdW1hIGNvbHVuYSBkYSB0YWJlbGEgc2VqYW0gZXNjb25kaWRhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtYWN0aW9uLWZpeGVkLWNvbHVtbnMnKSBzZXQgaGlkZUFjdGlvbkZpeGVkQ29sdW1ucyhoaWRlOiBib29sZWFuKSB7XG4gICAgaWYgKGhpZGUpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMucmVtb3ZlUHJvcGVydHlGaXhlZCh0aGlzLmNvbHVtbnMpO1xuICAgIH1cbiAgICB0aGlzLl9oaWRlQWN0aW9uRml4ZWRDb2x1bW5zID0gaGlkZTtcbiAgfVxuXG4gIGdldCBoaWRlQWN0aW9uRml4ZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9oaWRlQWN0aW9uRml4ZWRDb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgbyBjYW1wbyBkZSBwZXNxdWlzYSBzZWphIGVzY29uZGlkby5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS10YWJsZS1zZWFyY2gnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZVRhYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGZlY2hhciB1bSBkZXRhbGhlIG91IHJvdyB0ZW1wbGF0ZSBhdXRvbWF0aWNhbWVudGUsIGFvIGFicmlyIG91dHJvIGl0ZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hdXRvLWNvbGxhcHNlJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGF1dG9Db2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIHNlamEgYWRpY2lvbmFkbyBvIGVzdGFkbyBkZSBjYXJyZWdhbWVudG8gbm8gYm90w6NvIFwiQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1sb2FkaW5nLXNob3ctbW9yZScsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBsb2FkaW5nU2hvd01vcmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgZW0gdG9kYXMgYXMgY29sdW5hcyBhIG9ww6fDo28gZGUgb3JkZW5hw6fDo28gZGUgZGFkb3MuIENhc28gYSBjb2x1bmEgc2VqYSBkbyB0aXBvICdkYXRhJyBvdSAnZGF0ZVRpbWUnIGFcbiAgICogbWVzbWEgZGV2ZSByZXNwZWl0YXIgb3MgdGlwb3MgZGUgZW50cmFkYSBkZWZpbmlkb3MgcGFyYSBxdWUgc2VqYW0gb3JkZW5hZGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3Atc29ydCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBzb3J0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCB0b3JuYSBoYWJpbGl0YWRvIG8gYm90w6NvIFwiQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1zaG93LW1vcmUtZGlzYWJsZWQnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgc2hvd01vcmVEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBvIGVzdGlsbyBsaXN0cmFkbyBkYSB0YWJlbGEgKGBzdHJpcGVkYCkuXG4gICAqID4gUmVjb21lbmRhZG8gcGFyYSB0YWJlbGFzIGNvbSBtYWlvciBuw7ptZXJvIGRlIGRhZG9zLCBmYWNpbGl0YW5kbyBhIHN1YSB2aXN1YWxpemHDp8OjbyBuYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1zdHJpcGVkJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHN0cmlwZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEVzY29uZGUgbyAqY2hlY2tib3gqIHBhcmEgc2VsZcOnw6NvIGRlIHRvZGFzIGFzIGxpbmhhcy5cbiAgICpcbiAgICogPiBTZW1wcmUgcmVjZWJlcsOhICp0cnVlKiBjYXNvIGEgc2VsZcOnw6NvIGRlIGFwZW5hcyB1bWEgbGluaGEgZXN0ZWphIGF0aXZhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1zZWxlY3QtYWxsJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGhpZGVTZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgc29tZW50ZSB1bWEgbGluaGEgZGEgdGFiZWxhIHBvZGUgc2VyIHNlbGVjaW9uYWRhLlxuICAgKlxuICAgKiA+IEVzdGEgZGVmaW5pw6fDo28gbsOjbyBzZSBhcGxpY2EgYW9zIGl0ZW5zIGZpbGhvcywgb3MgbWVzbW9zIHBvc3N1ZW0gY29tcG9ydGFtZW50byBpbmRlcGVuZGVudGUgZG8gaXRlbSBwYWkuXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3Atc2luZ2xlLXNlbGVjdCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBzaW5nbGVTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgc2VsZWNpb25hciB1bSBpdGVtIGRhIHRhYmVsYSBjbGljYW5kbyBuYSBsaW5oYS5cbiAgICpcbiAgICogPiBDYXNvIGhhamEgbmVjZXNzaWRhZGUgZGUgc2VsZWNpb25hciBvIGl0ZW0gYXBlbmFzIHZpYSByYWRpbyBvdSBjaGVja2JveCwgZGV2ZS1zZSBkZWZpbmlyIGVzdGEgcHJvcHJpZWRhZGUgY29tbyBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1zZWxlY3RhYmxlLWVudGlyZS1saW5lJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNlbGVjdGFibGVFbnRpcmVMaW5lOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIGEgY29sdW5hIGRlIGHDp8O1ZXMgZmljYXLDoSBubyBsYWRvIGRpcmVpdG8gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYWN0aW9ucy1yaWdodCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhY3Rpb25SaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSB1bWEgcXVhbnRpZGFkZSBtw6F4aW1hIGRlIGNvbHVuYXMgcXVlIHNlcsOjbyBleGliaWRhcyBuYSB0YWJlbGEuXG4gICAqXG4gICAqIFF1YW5kbyBjaGVnYXIgbm8gdmFsb3IgaW5mb3JtYWRvLCBhcyBjb2x1bmFzIHF1ZSBuw6NvIGVzdGl2ZXJlbSBzZWxlY2lvbmFkYXMgZmljYXLDo29cbiAgICogZGVzYWJpbGl0YWRhcyBlIGNhc28gaG91dmVyIG1haXMgY29sdW5hcyB2aXPDrXZlaXMgZG8gcXVlIG8gcGVybWl0aWRvLCBhcyBleGNlZGVudGVzXG4gICAqIHNlcsOjbyBpZ25vcmFkYXMgcG9yIG9yZGVtIGRlIHBvc2nDp8Ojby5cbiAgICovXG4gIEBJbnB1dCgncC1tYXgtY29sdW1ucycpIG1heENvbHVtbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gbW9kbyBkZSBwZXNxdWlzYSB1dGlsaXphZG8gbm8gY2FtcG8gZGUgYnVzY2EsIHF1YW5kbyBoYWJpbGl0YWRvLlxuICAgKiBWYWxvcmVzIGRlZmluaWRvcyBubyBlbnVtOiBQb1NlYXJjaEZpbHRlck1vZGVcbiAgICogPiBPYnM6IEEgcGVzcXVpc2Egw6kgcmVhbGl6YWRhIGV4Y2x1c2l2YW1lbnRlIG5vcyBkYWRvcyBsb2NhaXMsIG91IHNlamEsIGFxdWVsZXMgcXVlIGZvcmFtXG4gICAqID4gcmVuZGVyaXphZG9zIG5hIHRhYmVsYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHN0YXJ0c1dpdGhgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLXR5cGUnKSBmaWx0ZXJUeXBlOiBQb1NlYXJjaEZpbHRlck1vZGUgPSBQb1NlYXJjaEZpbHRlck1vZGUuc3RhcnRzV2l0aDtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZXhlY3V0YWRvIHF1YW5kbyB0b2RhcyBhcyBsaW5oYXMgc8OjbyBzZWxlY2lvbmFkYXMgcG9yIG1laW8gZG8gKmNoZWNrYm94KiBxdWUgc2VsZWNpb25hIHRvZGFzIGFzIGxpbmhhcy5cbiAgICovXG4gIEBPdXRwdXQoJ3AtYWxsLXNlbGVjdGVkJykgYWxsU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBxdWFuZG8gYSBzZWxlw6fDo28gZGFzIGxpbmhhcyDDqSBkZXNtYXJjYWRhIHBvciBtZWlvIGRvICpjaGVja2JveCogcXVlIHNlbGVjaW9uYSB0b2RhcyBhcyBsaW5oYXMuXG4gICAqL1xuICBAT3V0cHV0KCdwLWFsbC11bnNlbGVjdGVkJykgYWxsVW5zZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIGNvbGFwc2FyIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKlxuICAgKiA+IENvbW8gcGFyw6JtZXRybyBvIGNvbXBvbmVudGUgZW52aWEgbyBpdGVtIGNvbGFwc2Fkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY29sbGFwc2VkJykgY29sbGFwc2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gZXhwYW5kaXIgdW1hIGxpbmhhIGRvIGBwby10YWJsZWAuXG4gICAqXG4gICAqID4gQ29tbyBwYXLDom1ldHJvIG8gY29tcG9uZW50ZSBlbnZpYSBvIGl0ZW0gZXhwYW5kaWRvLlxuICAgKi9cbiAgQE91dHB1dCgncC1leHBhbmRlZCcpIGV4cGFuZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYXDDs3MgbyBtw6l0b2RvIGRlIGV4Y2x1c8OjbyBzZXIgZmluYWxpemFkby5cbiAgICpcbiAgICogYGBgXG4gICAqPHBvLXRhYmxlXG4gICAqICAocC1kZWxldGUtaXRlbXMpPVwiaXRlbXMgPSAkZXZlbnRcIlxuICAgKiA+XG4gICAqPC9wby10YWJsZT5cbiAgICogYGBgXG4gICAqXG4gICAqXG4gICAqID4gQ29tbyBwYXLDom1ldHJvIG8gY29tcG9uZW50ZSBlbnZpYSBhIGxpc3RhIGF0dWFsaXphZGEsIHNlbSBvcyBpdGVucyBleGNsdcOtZG9zLlxuICAgKi9cbiAgQE91dHB1dCgncC1kZWxldGUtaXRlbXMnKSBldmVudERlbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIHNlbGVjaW9uYXIgdW1hIGxpbmhhIGRvIGBwby10YWJsZWAuXG4gICAqL1xuICBAT3V0cHV0KCdwLXNlbGVjdGVkJykgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUmVjZWJlIHVtYSBhw6fDo28gZGUgY2xpcXVlIHBhcmEgbyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIiwgY2FzbyBuZW5odW1hIGHDp8OjbyBmb3IgZGVmaW5pZGEgbyBtZXNtb1xuICAgKiBuw6NvIMOpIHZpc8OtdmVsLlxuICAgKlxuICAgKiBSZWNlYmUgdW0gb2JqZXRvIGB7IGNvbHVtbiwgdHlwZSB9YCBvbmRlOlxuICAgKlxuICAgKiAtIGNvbHVtbiAoYFBvVGFibGVDb2x1bW5gKTogb2JqZXRvIGRhIGNvbHVuYSBxdWUgZXN0w6Egb3JkZW5hZGEuXG4gICAqIC0gdHlwZSAoYFBvVGFibGVDb2x1bW5Tb3J0VHlwZWApOiB0aXBvIGRhIG9yZGVuYcOnw6NvLlxuICAgKi9cbiAgQE91dHB1dCgncC1zaG93LW1vcmUnKSBzaG93TW9yZTogRXZlbnRFbWl0dGVyPFBvVGFibGVDb2x1bW5Tb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBvcmRlbmFyIGNvbHVuYXMgZGEgdGFiZWxhLlxuICAgKlxuICAgKiBSZWNlYmUgdW0gb2JqZXRvIGB7IGNvbHVtbiwgdHlwZSB9YCBvbmRlOlxuICAgKlxuICAgKiAtIGNvbHVtbiAoYFBvVGFibGVDb2x1bW5gKTogb2JqZXRvIGRhIGNvbHVuYSBxdWUgZm9pIGNsaWNhZGEvb3JkZW5hZGEuXG4gICAqIC0gdHlwZSAoYFBvVGFibGVDb2x1bW5Tb3J0VHlwZWApOiB0aXBvIGRhIG9yZGVuYcOnw6NvLlxuICAgKi9cbiAgQE91dHB1dCgncC1zb3J0LWJ5Jykgc29ydEJ5OiBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIGRlc21hcmNhciBhIHNlbGXDp8OjbyBkZSB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3AtdW5zZWxlY3RlZCcpIHVuc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGRpc3BhcmFkbyBhbyBmZWNoYXIgbyBwYWdlIHNsaWRlIGRvIGdlcmVuY2lhZG9yIGRlIGNvbHVuYXMgYXDDs3MgYWx0ZXJhciBhcyBjb2x1bmFzIHZpc8OtdmVpcy5cbiAgICpcbiAgICogTyBjb21wb25lbnRlIGVudmlhIGNvbW8gcGFyw6JtZXRybyB1bSBhcnJheSBkZSBzdHJpbmcgY29tIGFzIGNvbHVuYXMgdmlzw612ZWlzIGF0dWFsaXphZGFzLlxuICAgKiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZS12aXNpYmxlLWNvbHVtbnMnKSBjaGFuZ2VWaXNpYmxlQ29sdW1ucyA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8c3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGNsaWNhciBubyBib3TDo28gZGUgcmVzdGF1cmFyIHBhZHLDo28gbm8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcy5cbiAgICpcbiAgICogTyBjb21wb25lbnRlIGVudmlhIGNvbW8gcGFyw6JtZXRybyB1bSBhcnJheSBkZSBzdHJpbmcgY29tIGFzIGNvbHVuYXMgY29uZmlndXJhZGFzIGluaWNpYWxtZW50ZS5cbiAgICogUG9yIGV4ZW1wbG86IFtcImlkQ2FyZFwiLCBcIm5hbWVcIiwgXCJoaXJlU3RhdHVzXCIsIFwiYWdlXCJdLlxuICAgKi9cbiAgQE91dHB1dCgncC1yZXN0b3JlLWNvbHVtbi1tYW5hZ2VyJykgY29sdW1uUmVzdG9yZU1hbmFnZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFN0cmluZz4+KCk7XG5cbiAgYWxsQ29sdW1uc1dpZHRoUGl4ZWxzOiBib29sZWFuO1xuICBjb2x1bW5NYXN0ZXJEZXRhaWw6IFBvVGFibGVDb2x1bW47XG4gIGhhc01haW5Db2x1bW5zOiBib29sZWFuID0gZmFsc2U7XG4gIG1haW5Db2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBzZWxlY3RBbGwgPSBmYWxzZTtcbiAgc29ydGVkQ29sdW1uID0geyBwcm9wZXJ0eTogPFBvVGFibGVDb2x1bW4+bnVsbCwgYXNjZW5kaW5nOiB0cnVlIH07XG4gIHN1YnRpdGxlQ29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4gPSBbXTtcbiAgcGFnZSA9IDE7XG4gIHBhZ2VTaXplID0gMTA7XG4gIGhhc1NlcnZpY2U/OiBib29sZWFuID0gZmFsc2U7XG4gIGluaXRpYWxDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPjtcbiAgc2hvd0JhdGNoQWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuICBpdGVtc1NlbGVjdGVkOiBBcnJheTxhbnk+ID0gW107XG4gIHBhcmFtc0ZpbHRlcjoge307XG4gIGZpbHRlcmVkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgZml4ZWRMYXlvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0aWFsVmlzaWJsZUNvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3BhY2luZzogUG9UYWJsZUNvbHVtblNwYWNpbmcgPSBQb1RhYmxlQ29sdW1uU3BhY2luZy5NZWRpdW07XG4gIHByaXZhdGUgX2ZpbHRlcmVkQ29sdW1uczogQXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBfYWN0aW9ucz86IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2NvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG4gIHByaXZhdGUgX2NvbnRhaW5lcj86IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFyYW1EZWxldGU6IHN0cmluZyA9IHBvVGFibGVQYXJhbURlbGV0ZUFwaTtcbiAgcHJpdmF0ZSBfaGVpZ2h0PzogbnVtYmVyO1xuICBwcml2YXRlIF9oaWRlRGV0YWlsPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pdGVtczogQXJyYXk8UG9UYWJsZUNvbHVtbj47XG4gIHByaXZhdGUgX2xpdGVyYWxzOiBQb1RhYmxlTGl0ZXJhbHM7XG4gIHByaXZhdGUgX2xvYWRpbmc/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NlbGVjdGFibGU/OiBib29sZWFuO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmcgPSBwb0xvY2FsZURlZmF1bHQ7XG4gIHByaXZhdGUgX3NlcnZpY2VBcGk6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2VydmljZURlbGV0ZUFwaTogc3RyaW5nO1xuICBwcml2YXRlIHBvVGFibGVTZXJ2aWNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc29ydFN0b3JlOiBQb1RhYmxlQ29sdW1uU29ydDtcbiAgcHJpdmF0ZSBfaW5maW5pdGVTY3JvbGxEaXN0YW5jZT86IG51bWJlciA9IDEwMDtcbiAgcHJpdmF0ZSBfaW5maW5pdGVTY3JvbGw/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RyYWdnYWJsZT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaGlkZUFjdGlvbkZpeGVkQ29sdW1ucz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmlydHVhbFNjcm9sbD86IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9EYXRlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1RhYmxlU2VydmljZTogUG9UYWJsZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGl0ZW5zIGRhIHRhYmVsYS5cbiAgICogPiBTZSBmYWxzbywgc2Vyw6EgaW5pY2lhbGl6YWRvIGNvbW8gdW0gKmFycmF5KiB2YXppby5cbiAgICovXG4gIEBJbnB1dCgncC1pdGVtcycpIHNldCBpdGVtcyhpdGVtczogQXJyYXk8YW55Pikge1xuICAgIGlmICh0aGlzLmhlaWdodCkge1xuICAgICAgdGhpcy5faXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IFsuLi5pdGVtc10gOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IGl0ZW1zIDogW107XG4gICAgfVxuXG4gICAgLy8gd2hlbiBoYXZlbid0IGl0ZW1zLCBzZWxlY3RBbGwgc2hvdWxkIGJlIHVuY2hlY2tlZC5cbiAgICBpZiAoIXRoaXMuaGFzSXRlbXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oYXNDb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdldERlZmF1bHRDb2x1bW5zKGl0ZW1zWzBdKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5oZWlnaHQgPyBbLi4udGhpcy5pdGVtc10gOiB0aGlzLml0ZW1zO1xuXG4gICAgLy8gdGltZW91dCBuZWNlc3PDoXJpbyBwYXJhIG9zIGl0ZW5zIHNlcmVtIHJlZmxldGlkb3MgbmEgdGFiZWxhXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrSW5maW5pdGVTY3JvbGwoKSk7XG4gIH1cblxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGFzIGNvbHVuYXMgZGEgdGFiZWxhLCBkZXZlIHJlY2ViZXIgdW0gKmFycmF5KiBkZSBvYmpldG9zIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9UYWJsZUNvbHVtbmAuXG4gICAqIFBvciBwYWRyw6NvIHJlY2ViZXLDoSBjb21vIHZhbG9yIGEgcHJpbWVpcmEgY29sdW5hIGRhIGxpc3RhIGRlIGl0ZW5zIGRhIHRhYmVsYS5cbiAgICogPiBDYXNvIG7Do28gZW5jb250cmUgdmFsb3IsIGEgbWVuc2FnZW0gJ05lbmh1bWEgZGVmaW5pw6fDo28gZGUgY29sdW5hcycgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1jb2x1bW5zJykgc2V0IGNvbHVtbnMoY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICBjb25zdCBoYXNDb2x1bW5zV2l0aFZpc2libGUgPSBjb2x1bW5zPy5maW5kKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKHRoaXMuaW5pdGlhbENvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbml0aWFsQ29sdW1ucyA9IGNvbHVtbnM7XG4gICAgfVxuXG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnMgfHwgW107XG5cbiAgICBpZiAoaGFzQ29sdW1uc1dpdGhWaXNpYmxlICYmICF0aGlzLmluaXRpYWxWaXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy5pbml0aWFsVmlzaWJsZUNvbHVtbnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRDb2x1bW5MaW5rKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhhc0l0ZW1zKSB7XG4gICAgICB0aGlzLl9jb2x1bW5zID0gdGhpcy5nZXREZWZhdWx0Q29sdW1ucyh0aGlzLml0ZW1zWzBdKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlQ29sdW1ucygpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBZGljaW9uYSB1bSBjb250b3JubyBhcnJlZG9uZGFkbyBhbyBgcG8tdGFibGVgLCBhcyBvcMOnw7VlcyBzw6NvOlxuICAgKiAtIGBib3JkZXJgOiBjb20gYm9yZGFzL2xpbmhhcy5cbiAgICogLSBgc2hhZG93YDogY29tIHNvbWJyYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBib3JkZXJgXG4gICAqL1xuICBASW5wdXQoJ3AtY29udGFpbmVyJykgc2V0IGNvbnRhaW5lcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29udGFpbmVyID0gcG9UYWJsZUNvbnRhaW5lci5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHBvVGFibGVDb250YWluZXJEZWZhdWx0O1xuICB9XG5cbiAgZ2V0IGNvbnRhaW5lcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBZGljaW9uYSBvIHBhcsOibWV0cm8gYSBzZXIgZW52aWFkbyBwYXJhIGEgcmVxdWlzacOnw6NvIGRlIERFTEVURS5cbiAgICpcbiAgICogw4kgbmVjZXNzw6FyaW8gYSB1dGlsaXphw6fDo28gZGEgcHJvcHJpZWRhZGUgYHAtc2VydmljZS1kZWxldGVgIGVtIGNvbmp1bnRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgaWRgXG4gICAqL1xuICBASW5wdXQoJ3AtcGFyYW0tZGVsZXRlLWFwaScpIHNldCBwYXJhbURlbGV0ZUFwaSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFyYW1EZWxldGUgPSB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBwb1RhYmxlUGFyYW1EZWxldGVBcGk7XG4gIH1cblxuICBnZXQgcGFyYW1EZWxldGVBcGkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1EZWxldGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBhbHR1cmEgZGEgdGFiZWxhIGVtICpwaXhlbHMqIGUgZml4YSBvIGNhYmXDp2FsaG8uXG4gICAqXG4gICAqIEFvIHV0aWxpemFyIGVzc2EgcHJvcHJpZWRhZGUgc2Vyw6EgaW5zZXJpZG8gbyBgdmlydHVhbC1zY3JvbGxgIG5hIHRhYmVsYSBtZWxob3JhbmRvIGEgcGVyZm9ybWFuY2UuXG4gICAqL1xuICBASW5wdXQoJ3AtaGVpZ2h0Jykgc2V0IGhlaWdodChoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGdldCBoZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIGEgdmlzdWFsaXphw6fDo28gZGEgbGlzdGEgZGUgZGV0YWxoZXMgZGUgY2FkYSBsaW5oYSBkYSBjb2x1bmEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1oaWRlLWRldGFpbCcpIHNldCBoaWRlRGV0YWlsKGhpZGVEZXRhaWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlRGV0YWlsID0gaGlkZURldGFpbCAhPSBudWxsICYmIGhpZGVEZXRhaWwudG9TdHJpbmcoKSA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbihoaWRlRGV0YWlsKTtcbiAgfVxuXG4gIGdldCBoaWRlRGV0YWlsKCkge1xuICAgIHJldHVybiB0aGlzLl9oaWRlRGV0YWlsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLXRhYmxlYC5cbiAgICpcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlLCBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpczpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9UYWJsZUxpdGVyYWxzID0ge1xuICAgKiAgICBub0NvbHVtbnM6ICdOZW5odW1hIGRlZmluacOnw6NvIGRlIGNvbHVuYXMnLFxuICAgKiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJyxcbiAgICogICAgbm9WaXNpYmxlQ29sdW1uOiAnTmVuaHVtYSBjb2x1bmEgdmlzw612ZWwnLFxuICAgKiAgICBub0l0ZW06ICdOZW5odW0gaXRlbSBzZWxlY2lvbmFkbycsXG4gICAqICAgIG9uZUl0ZW06ICcxIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgKiAgICBtdWx0aXBsZUl0ZW1zOiAnaXRlbnMgc2VsZWNpb25hZG9zJyxcbiAgICogICAgbG9hZGluZ0RhdGE6ICdDYXJyZWdhbmRvJyxcbiAgICogICAgbG9hZE1vcmVEYXRhOiAnQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zJyxcbiAgICogICAgc2VlQ29tcGxldGVTdWJ0aXRsZTogJ1ZlciBsZWdlbmRhIGNvbXBsZXRhJyxcbiAgICogICAgY29tcGxldGVTdWJ0aXRsZTogJ0xlZ2VuZGEgY29tcGxldGEnLFxuICAgKiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVuY2lhZG9yIGRlIGNvbHVuYXMnLFxuICAgKiAgICBib2R5RGVsZXRlOiAnRGVzZWphIHJlYWxtZW50ZSBleGNsdWlyIGVzc2UgaXRlbT8nLFxuICAgKiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAqICAgIGRlbGV0ZTogJ0V4Y2x1aXInLFxuICAgKiAgICBkZWxldGVTdWNjZXNzZnVsOiAnSXRlbnMgcmVtb3ZpZG9zIGNvbSBzdWNlc3NvJyxcbiAgICogICAgZGVsZXRlQXBpRXJyb3I6ICdPY29ycmV1IHVtIGVycm8gaW5lc3BlcmFkbywgdGVudGUgbm92YW1lbnRlIG1haXMgdGFyZGUhJyxcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBPdSBwYXNzYW5kbyBhcGVuYXMgYXMgbGl0ZXJhaXMgcXVlIGRlc2VqYSBjdXN0b21pemFyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb1RhYmxlTGl0ZXJhbHMgPSB7XG4gICAqICAgIG5vRGF0YTogJ1NlbSBkYWRvcydcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLXRhYmxlXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby10YWJsZT5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyBvYmpldG8gcGFkcsOjbyBkZSBsaXRlcmFpcyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBkb1xuICAgKiBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSBkbyBicm93c2VyLlxuICAgKi9cbiAgQElucHV0KCdwLWxpdGVyYWxzJykgc2V0IGxpdGVyYWxzKHZhbHVlOiBQb1RhYmxlTGl0ZXJhbHMpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSB7XG4gICAgICAgIC4uLnBvVGFibGVMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9UYWJsZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXSxcbiAgICAgICAgLi4udmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0gcG9UYWJsZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgICB9XG4gIH1cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQmxvcXVlaWEgYSBpbnRlcmHDp8OjbyBkbyB1c3XDoXJpbyBjb20gb3MgZGFkb3MgZGEgX3RhYmxlXy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWRpbmcnKSBzZXQgbG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbG9hZGluZyA9IGNvbnZlcnRUb0Jvb2xlYW4obG9hZGluZyk7XG4gIH1cblxuICBnZXQgbG9hZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSB1bWEgbGlzdGEgZGUgYcOnw7Vlcy5cbiAgICpcbiAgICogUXVhbmRvIGhvdXZlciBhcGVuYXMgdW1hIGHDp8OjbyBkZWZpbmlkYSBlbGEgc2Vyw6EgZXhpYmlkYSBkaXJldGFtZW50ZSBuYSBjb2x1bmEsIGNhc28gY29udHLDoXJpbywgbyBjb21wb25lbnRlXG4gICAqIHNlIGVuY2FycmVnYSBkZSBhZ3J1cMOhLWxhcyBleGliaW5kbyBvIMOtY29uZSBbKipwby1pY29uLW1vcmUqKl0oL2d1aWRlcy9pY29ucykgcXVlIGxpc3RhcsOhIGFzIGHDp8O1ZXMgYW8gc2VyIGNsaWNhZG8uXG4gICAqXG4gICAqICoqQSBjb2x1bmEgZGUgYcOnw7VlcyBuw6NvIHNlcsOhIGV4aWJpZGEgcXVhbmRvOioqXG4gICAqICAtIGEgbGlzdGEgY29udGVyIHZhbG9yZXMgaW52w6FsaWRvcyBvdSBpbmRlZmluaWRvcy5cbiAgICogIC0gdGVuaGEgdW1hIMO6bmljYSBhw6fDo28gZSBhIG1lc21hIG7Do28gZm9yIHZpc8OtdmVsLlxuICAgKi9cbiAgQElucHV0KCdwLWFjdGlvbnMnKSBzZXQgYWN0aW9ucyhhY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPikge1xuICAgIHRoaXMuX2FjdGlvbnMgPSBhY3Rpb25zO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGEgc2VsZcOnw6NvIGRlIGxpbmhhcyBuYSB0YWJlbGEgZSwgY2FzbyBhIHByb3ByaWVkYWRlIGBwLXNpbmdsZS1zZWxlY3RgIGVzdGVqYSBkZWZpbmlkYSBzZXLDoSBwb3Nzw612ZWxcbiAgICogc2VsZWNpb25hciBhcGVuYXMgdW1hIMO6bmljYSBsaW5oYS5cbiAgICpcbiAgICogKipJbXBvcnRhbnRlOioqXG4gICAqICAtIEFzIGxpbmhhcyBkZSBkZXRhbGhlIGRlZmluaWRhcyBlbSBgUG9UYWJsZURldGFpbGAgcG9zc3VlbSBjb21wb3J0YW1lbnRvIGluZGVwZW5kZW50ZSBkYSBsaW5oYSBtZXN0cmU7XG4gICAqICAtIENhZGEgbGluaGEgcG9zc3VpIHBvciBwYWRyw6NvIGEgcHJvcHJpZWRhZGUgZGluw6JtaWNhIGAkc2VsZWN0ZWRgLCBuYSBxdWFsIMOpIHBvc3PDrXZlbCB2YWxpZGFyIHNlIGEgbGluaGFcbiAgICogZXN0w6Egc2VsZWNpb25hZGEsIHBvciBleGVtcGxvOiBgaXRlbS4kc2VsZWN0ZWRgIG91IGBpdGVtWyckc2VsZWN0ZWQnXWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1zZWxlY3RhYmxlJykgc2V0IHNlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWxlY3RhYmxlID0gPGFueT52YWx1ZSA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIGF0aXZhIGEgZnVuY2lvbmFsaWRhZGUgZGUgc2Nyb2xsIGluZmluaXRvIHBhcmEgYSB0YWJlbGEgZSBvIGJvdMOjbyBcIkNhcnJlZ2FyIE1haXNcIiBkZWl4YXLDoSBkZSBzZXIgZXhpYmlkby4gQW8gY2hlZ2FyIG5vIGZpbSBkYSB0YWJlbGFcbiAgICogZXhlY3V0YXLDoSBhIGZ1bsOnw6NvIGBwLXNob3ctbW9yZWAuXG4gICAqXG4gICAqICoqUmVncmFzIGRlIHV0aWxpemHDp8OjbzoqKlxuICAgKiAgLSBPIHNjcm9sbCBpbmZpbml0byBzw7MgZnVuY2lvbmEgcGFyYSB0YWJlbGFzIHF1ZSB1dGlsaXphbSBhIHByb3ByaWVkYWRlIGBwLWhlaWdodGAgZSBxdWUgcG9zc3VlbSBvIHNjcm9sbCBqw6EgbmEgY2FyZ2EgaW5pY2lhbCBkb3MgZGFkb3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1pbmZpbml0ZS1zY3JvbGwnKSBzZXQgaW5maW5pdGVTY3JvbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbmZpbml0ZVNjcm9sbCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUgJiYgdGhpcy5oZWlnaHQgPiAwKTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGw7XG4gIH1cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gcGVyY2VudHVhbCBuZWNlc3PDoXJpbyBwYXJhIGRpc3BhcmFyIG8gZXZlbnRvIGBwLXNob3ctbW9yZWAsIHF1ZSDDqSByZXNwb25zw6F2ZWwgcG9yIGNhcnJlZ2FyIG1haXMgZGFkb3MgbmEgdGFiZWxhLiBDYXNvIG8gdmFsb3IgaW5mb3JtYWRvIHNlamEgbWFpb3IgcXVlIDEwMCBvdSBtZW5vclxuICAgKiBxdWUgMCwgbyB2YWxvciBwYWRyw6NvIHNlcsOhIDEwMCVcbiAgICpcbiAgICogKipFeGVtcGxvczoqKlxuICAgKiAgLSBwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZSA9IDgwOiBRdWFuZG8gYXRpbmdpciA4MCUgIGRvIHNjcm9sbCBkYSB0YWJlbGEsIG8gYHAtc2hvdy1tb3JlYCBzZXLDoSBkaXNwYXJhZG8uXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlJykgc2V0IGluZmluaXRlU2Nyb2xsRGlzdGFuY2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2luZmluaXRlU2Nyb2xsRGlzdGFuY2UgPSB2YWx1ZSA+IDEwMCB8fCB2YWx1ZSA8IDAgPyAxMDAgOiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVVJMIGRhIEFQSSByZXNwb25zw6F2ZWwgcG9yIHJldG9ybmFyIG9zIHJlZ2lzdHJvcy5cbiAgICpcbiAgICogQW8gcmVhbGl6YXIgYSBidXNjYSBkZSBtYWlzIHJlZ2lzdHJvcyB2aWEgcGFnaW5hw6fDo28gKENhcnJlZ2FyIG1haXMgcmVzdWx0YWRvcyksIHNlcsOhIGVudmlhZG8gb3MgcGFyw6JtZXRyb3MgYHBhZ2VgIGUgYHBhZ2VTaXplYCwgY29uZm9ybWUgYWJhaXhvOlxuICAgKlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMFxuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyB1dGlsaXphciBvcmRlbmHDp8OjbywgYSBjb2x1bmEgb3JkZW5hZGEgc2Vyw6EgZW52aWFkYSBhdHJhdsOpcyBkbyBwYXLDom1ldHJvIGBvcmRlcmAsIHBvciBleGVtcGxvOlxuICAgKiAtIENvbHVuYSBkZWNyZXNjZW50ZTpcbiAgICogYGBgXG4gICAqICB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwJm9yZGVyPS1uYW1lXG4gICAqIGBgYFxuICAgKlxuICAgKiAtIENvbHVuYSBhc2NlbmRlbnRlOlxuICAgKiBgYGBcbiAgICogIHVybCArID9wYWdlPTEmcGFnZVNpemU9MTAmb3JkZXI9bmFtZVxuICAgKiBgYGBcbiAgICpcbiAgICogPiBFc3RhIFVSTCBkZXZlIHJldG9ybmFyIGUgcmVjZWJlciBvcyBkYWRvcyBubyBwYWRyw6NvIGRlIFtBUEkgZG8gUE8gVUldKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2FwaSkuXG4gICAqL1xuICBASW5wdXQoJ3Atc2VydmljZS1hcGknKSBzZXQgc2VydmljZUFwaShzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXJ2aWNlQXBpID0gc2VydmljZTtcbiAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5zZXJ2aWNlQXBpLCAnR0VUJyk7XG4gICAgdGhpcy5oYXNTZXJ2aWNlID0gISFzZXJ2aWNlO1xuICAgIHRoaXMuc2hvd01vcmVEaXNhYmxlZCA9ICF0aGlzLmhhc1NlcnZpY2U7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLmluaXRpYWxpemVEYXRhKCk7XG4gIH1cblxuICBnZXQgc2VydmljZUFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZUFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFVSTCBkYSBBUEkgcmVzcG9uc8OhdmVsIHBvciBleGNsdWlyIG9zIHJlZ2lzdHJvcy5cbiAgICpcbiAgICogQW8gc2VsZWNpb25hciBvIGJvdMOjbyBkZSBleGNsdWlyIGl0ZW5zLCBlc3NhIHVybCBzZXLDoSBleGVjdXRhZGEgdXRpbGl6YW5kbyBvIHBhcsOibWV0cm8gZW52aWFkbyBuYSBwcm9wcmllZGFkZSBgcC1wYXJhbS1kZWxldGUtYXBpYC5cbiAgICogQ2FzbyBlbGEgbsOjbyBzZWphIHV0aWxpemFkYSwgbyBwYXLDom1ldHJvIHBhZHLDo28gYSBzZXIgZW52aWFkbyBzZXLDoSBgaWRgLlxuICAgKlxuICAgKiA+IEVzdGEgVVJMIGRldmUgcmV0b3JuYXIgZSByZWNlYmVyIG9zIGRhZG9zIG5vIHBhZHLDo28gZGUgW0FQSSBkbyBQTyBVSV0oaHR0cHM6Ly9wby11aS5pby9ndWlkZXMvYXBpKS5cbiAgICovXG4gIEBJbnB1dCgncC1zZXJ2aWNlLWRlbGV0ZScpIHNldCBzZXJ2aWNlRGVsZXRlQXBpKHNlcnZpY2U6IHN0cmluZykge1xuICAgIHRoaXMuX3NlcnZpY2VEZWxldGVBcGkgPSBzZXJ2aWNlO1xuICAgIHRoaXMuc2V0U2VydmljZSh0aGlzLnNlcnZpY2VEZWxldGVBcGksICdERUxFVEUnKTtcbiAgfVxuXG4gIGdldCBzZXJ2aWNlRGVsZXRlQXBpKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlRGVsZXRlQXBpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUmVzcG9uc8OhdmVsIHBvciBhcGxpY2FyIGVzcGHDp2FtZW50byBuYXMgY29sdW5hcy5cbiAgICpcbiAgICogRGV2ZSByZWNlYmVyIHVtIGRvcyB2YWxvcmVzIGRvIGVudW0gYFBvVGFibGVDb2x1bW5TcGFjaW5nYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYG1lZGl1bWBcbiAgICovXG4gIEBJbnB1dCgncC1zcGFjaW5nJykgc2V0IHNwYWNpbmcodmFsdWU6IFBvVGFibGVDb2x1bW5TcGFjaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSAnc21hbGwnIHx8IHZhbHVlID09PSAnbWVkaXVtJyB8fCB2YWx1ZSA9PT0gJ2xhcmdlJykge1xuICAgICAgdGhpcy5fc3BhY2luZyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zcGFjaW5nID0gUG9UYWJsZUNvbHVtblNwYWNpbmcuTWVkaXVtO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGFzIGNvbHVuYXMgcXVlIHNlcsOjbyBmaWx0cmFkYXMgbm8gY2FtcG8gZGUgcGVzcXVpc2EuXG4gICAqIEFjZWl0YSB1bSBhcnJheSBkZSBzdHJpbmdzLCByZXByZXNlbnRhbmRvIGFzIGNvbHVuYXMgZXNwZWPDrWZpY2FzIHF1ZSBzZXLDo28gY29uc2lkZXJhZGFzIG5hIGZpbHRyYWdlbS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXJlZC1jb2x1bW5zJykgc2V0IGZpbHRlcmVkQ29sdW1ucyh2YWx1ZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLl9maWx0ZXJlZENvbHVtbnMgPSB2YWx1ZXM7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRDb2x1bW5zKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGhhc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgfVxuXG4gIGdldCBuYW1lQ29sdW1uRGV0YWlsKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCA/IHRoaXMuY29sdW1uTWFzdGVyRGV0YWlsLnByb3BlcnR5IDogbnVsbDtcbiAgfVxuXG4gIGdldCB2YWxpZENvbHVtbnMoKSB7XG4gICAgY29uc3QgdHlwZXNWYWxpZCA9IFtcbiAgICAgICdzdHJpbmcnLFxuICAgICAgJ251bWJlcicsXG4gICAgICAnYm9vbGVhbicsXG4gICAgICAnZGF0ZScsXG4gICAgICAndGltZScsXG4gICAgICAnZGF0ZVRpbWUnLFxuICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICdzdWJ0aXRsZScsXG4gICAgICAnbGluaycsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2ljb24nLFxuICAgICAgJ2NlbGxUZW1wbGF0ZScsXG4gICAgICAnY29sdW1uVGVtcGxhdGUnXG4gICAgXTtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gIWNvbC50eXBlIHx8IHR5cGVzVmFsaWQuaW5jbHVkZXMoY29sLnR5cGUpKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQWN0aW9ucygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3Rpb25zICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hY3Rpb25zICYmIHRoaXMuYWN0aW9ucy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbiAmJiBhY3Rpb24udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLmxhYmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNvcnRUeXBlKCk6IFBvVGFibGVDb2x1bW5Tb3J0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZyA/IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5Bc2NlbmRpbmcgOiBQb1RhYmxlQ29sdW1uU29ydFR5cGUuRGVzY2VuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG8gbW9kbyBkcmFnIGFuZCBkcm9wIHBhcmEgYXMgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kcmFnZ2FibGUnKSBzZXQgZHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYWdnYWJsZSA9IGRyYWdnYWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcmFnZ2FibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYWdnYWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG8gYHZpcnR1YWwtc2Nyb2xsYCBuYSB0YWJlbGEgcGFyYSBtZWxob3JhciBhIHBlcmZvcm1hbmNlIGNvbSBncmFuZGVzIHZvbHVtZXMgZGUgZGFkb3MuXG4gICAqIFJlcXVlciBhbHR1cmEgKGBwLWhlaWdodGApIHBhcmEgZnVuY2lvbmFyIGNvcnJldGFtZW50ZS5cbiAgICpcbiAgICogPiBJbmNvbXBhdMOtdmVsIGNvbSBgcC10ZXh0LXdyYXBgIGUgYG1hc3Rlci1kZXRhaWxgLCBwb2lzIG8gYHZpcnR1YWwtc2Nyb2xsYCBleGlnZSBhbHR1cmEgZml4YSBuYXMgbGluaGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCgncC12aXJ0dWFsLXNjcm9sbCcpIHNldCB2aXJ0dWFsU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fdmlydHVhbFNjcm9sbCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUgJiYgdGhpcy5oZWlnaHQgPiAwKTtcbiAgfVxuXG4gIGdldCB2aXJ0dWFsU2Nyb2xsKCkge1xuICAgIHJldHVybiB0aGlzLl92aXJ0dWFsU2Nyb2xsO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5wb1RhYmxlU2VydmljZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaW5nbGVTZWxlY3QgfHwgdGhpcy5oaWRlU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgICAgdGhpcy5oaWRlU2VsZWN0QWxsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlSGVpZ2h0VGFibGVDb250YWluZXIodGhpcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGlmICgoY2hhbmdlcy5oZWlnaHQgfHwgY2hhbmdlcy5pdGVtcykgJiYgdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJXaWR0aCgpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVNpemVMb2FkaW5nKCk7XG4gIH1cblxuICBzZWxlY3RBbGxSb3dzKCkge1xuICAgIGlmICghdGhpcy5oaWRlU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9ICF0aGlzLnNlbGVjdEFsbDtcblxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLiRzZWxlY3RlZCA9IHRoaXMuc2VsZWN0QWxsO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZW1pdFNlbGVjdEFsbEV2ZW50cyh0aGlzLnNlbGVjdEFsbCwgWy4uLnRoaXMuaXRlbXNdKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgcm93LiRzZWxlY3RlZCA9ICFyb3cuJHNlbGVjdGVkO1xuXG4gICAgdGhpcy5lbWl0U2VsZWN0RXZlbnRzKHJvdyk7XG5cbiAgICB0aGlzLmNvbmZpZ0FmdGVyU2VsZWN0Um93KHRoaXMuaXRlbXMsIHJvdyk7XG4gICAgdGhpcy5zZXRTZWxlY3RlZExpc3QoKTtcbiAgfVxuXG4gIGhhc1NlbGVjdGFibGVSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZSAmJiB0aGlzLnNlbGVjdGFibGVFbnRpcmVMaW5lO1xuICB9XG5cbiAgc2VsZWN0RGV0YWlsUm93KHJvdzogYW55KSB7XG4gICAgdGhpcy5lbWl0U2VsZWN0RXZlbnRzKHJvdyk7XG4gIH1cblxuICBzZXRTZWxlY3RlZExpc3QoKSB7XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkID0gW107XG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0uJHNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2xhc3NDb2xvcihyb3csIGNvbHVtbikge1xuICAgIHJldHVybiBjb2x1bW4uY29sb3IgPyBgcG8tdGV4dC0ke3RoaXMuZ2V0Q29sdW1uQ29sb3Iocm93LCBjb2x1bW4pfWAgOiAnJztcbiAgfVxuXG4gIHRvZ2dsZURldGFpbChyb3c6IGFueSkge1xuICAgIGNvbnN0IHJvd1Nob3dEZXRhaWwgPSByb3cuJHNob3dEZXRhaWw7XG4gICAgaWYgKHRoaXMuYXV0b0NvbGxhcHNlKSB7XG4gICAgICB0aGlzLmNvbGxhcHNlQWxsSXRlbXModGhpcy5pdGVtcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTaG93RGV0YWlsKHJvdywgIXJvd1Nob3dEZXRhaWwpO1xuICAgIHRoaXMuZW1pdEV4cGFuZEV2ZW50cyhyb3cpO1xuICB9XG5cbiAgdG9nZ2xlUm93QWN0aW9uKHJvdzogYW55KSB7XG4gICAgY29uc3QgdG9nZ2xlU2hvd0FjdGlvbiA9IHJvdy4kc2hvd0FjdGlvbjtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLiRzaG93QWN0aW9uKSB7XG4gICAgICAgIGl0ZW0uJHNob3dBY3Rpb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByb3cuJHNob3dBY3Rpb24gPSAhdG9nZ2xlU2hvd0FjdGlvbjtcbiAgfVxuXG4gIHNvcnRDb2x1bW4oY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgaWYgKCF0aGlzLnNvcnQgfHwgY29sdW1uLnR5cGUgPT09ICdkZXRhaWwnIHx8IGNvbHVtbi5zb3J0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcgPSB0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSA9PT0gY29sdW1uID8gIXRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZyA6IHRydWU7XG5cbiAgICB0aGlzLnNvcnRBcnJheShjb2x1bW4sIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZyk7XG4gICAgdGhpcy5zb3J0QnkuZW1pdCh7IGNvbHVtbiwgdHlwZTogdGhpcy5zb3J0VHlwZSB9KTtcbiAgICBpZiAodGhpcy5oYXNTZXJ2aWNlICYmIHRoaXMuc29ydCkge1xuICAgICAgdGhpcy5zb3J0U3RvcmUgPSB7IGNvbHVtbiwgdHlwZTogdGhpcy5zb3J0VHlwZSB9O1xuICAgIH1cblxuICAgIHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5ID0gY29sdW1uO1xuICB9XG5cbiAgb25TaG93TW9yZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHkgPyB7IGNvbHVtbjogdGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHksIHR5cGU6IHRoaXMuc29ydFR5cGUgfSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmhhc1NlcnZpY2UpIHtcbiAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZGluZ1Nob3dNb3JlID0gdHJ1ZTtcblxuICAgICAgdGhpcy5wb1RhYmxlU2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0RmlsdGVyZWRJdGVtcygpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFsuLi50aGlzLml0ZW1zLCAuLi5kYXRhLml0ZW1zXTtcbiAgICAgICAgdGhpcy5zaG93TW9yZURpc2FibGVkID0gIWRhdGEuaGFzTmV4dDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZ1Nob3dNb3JlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dNb3JlLmVtaXQoc29ydCk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZEl0ZW1zKHF1ZXJ5UGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBRdWVyeVBhcmFtc1R5cGUgfSk6IE9ic2VydmFibGU8UG9UYWJsZVJlc3BvbnNlQXBpPiB7XG4gICAgY29uc3QgZmlsdGVyZWRQYXJhbXM6IFBvVGFibGVGaWx0ZXJlZEl0ZW1zUGFyYW1zID0gdGhpcy5nZXRGaWx0ZXJlZFBhcmFtcyhxdWVyeVBhcmFtcyk7XG5cbiAgICByZXR1cm4gdGhpcy5wb1RhYmxlU2VydmljZS5nZXRGaWx0ZXJlZEl0ZW1zKGZpbHRlcmVkUGFyYW1zKTtcbiAgfVxuXG4gIHNldFRhYmxlUmVzcG9uc2VQcm9wZXJ0aWVzKGRhdGE6IFBvVGFibGVSZXNwb25zZUFwaSkge1xuICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zIHx8IFtdO1xuICAgIHRoaXMuc2hvd01vcmVEaXNhYmxlZCA9ICFkYXRhLmhhc05leHQ7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBpbml0aWFsaXplRGF0YShwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IFF1ZXJ5UGFyYW1zVHlwZSB9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzU2VydmljZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFyYW1zRmlsdGVyID0gcGFyYW1zO1xuICAgICAgdGhpcy5nZXRGaWx0ZXJlZEl0ZW1zKHBhcmFtcykuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLnNldFRhYmxlUmVzcG9uc2VQcm9wZXJ0aWVzKGRhdGEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc29ydEFycmF5KGNvbHVtbjogUG9UYWJsZUNvbHVtbiwgYXNjZW5kaW5nOiBib29sZWFuLCBpdGVtPzogQXJyYXk8YW55Pikge1xuICAgIGxldCBpdGVtc0xpc3Q7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGl0ZW1zTGlzdCA9IHRoaXMuaGVpZ2h0ID8gWy4uLml0ZW1dIDogaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNMaXN0ID0gdGhpcy5oZWlnaHQgPyBbLi4udGhpcy5maWx0ZXJlZEl0ZW1zXSA6IHRoaXMuZmlsdGVyZWRJdGVtcztcbiAgICB9XG4gICAgaXRlbXNMaXN0LnNvcnQoKGxlZnRTaWRlLCByaWdodFNpZGUpOiBudW1iZXIgPT5cbiAgICAgIHNvcnRWYWx1ZXMobGVmdFNpZGVbY29sdW1uLnByb3BlcnR5XSwgcmlnaHRTaWRlW2NvbHVtbi5wcm9wZXJ0eV0sIGFzY2VuZGluZylcbiAgICApO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IGl0ZW1zTGlzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREZWZhdWx0Q29sdW1ucyhpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXRlbSk7XG5cbiAgICByZXR1cm4ga2V5c1xuICAgICAgLmZpbHRlcihrZXkgPT4gdHlwZW9mIGl0ZW1ba2V5XSAhPT0gJ29iamVjdCcpXG4gICAgICAubWFwKGtleSA9PiAoeyBsYWJlbDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSksIHByb3BlcnR5OiBrZXkgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFNob3dEZXRhaWwocm93SWRlbnRpZmllcjogYW55IHwgbnVtYmVyLCBpc1Nob3dEZXRhaWw6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBpc1Jvd0luZGV4ID0gdHlwZW9mIHJvd0lkZW50aWZpZXIgPT09ICdudW1iZXInICYmIHRoaXMuaXRlbXNbcm93SWRlbnRpZmllcl07XG5cbiAgICBjb25zdCByb3cgPSBpc1Jvd0luZGV4ID8gdGhpcy5pdGVtc1tyb3dJZGVudGlmaWVyXSA6IHJvd0lkZW50aWZpZXI7XG5cbiAgICByb3cuJHNob3dEZXRhaWwgPSBpc1Nob3dEZXRhaWw7XG4gIH1cblxuICBwcml2YXRlIGNvbGxhcHNlQWxsSXRlbXMoaXRlbXM6IEFycmF5PHsgW2tleTogc3RyaW5nXTogYW55IH0+KSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBpZiAoaXRlbS4kc2hvd0RldGFpbCkge1xuICAgICAgICB0aGlzLnNldFNob3dEZXRhaWwoaXRlbSwgZmFsc2UpO1xuICAgICAgICB0aGlzLmVtaXRFeHBhbmRFdmVudHMoaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWdBZnRlclNlbGVjdFJvdyhyb3dzOiBBcnJheTxhbnk+LCByb3cpIHtcbiAgICBpZiAodGhpcy5zaW5nbGVTZWxlY3QpIHtcbiAgICAgIHRoaXMudW5zZWxlY3RPdGhlclJvd3Mocm93cywgcm93KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmhpZGVTZWxlY3RBbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy5pc0V2ZXJ5U2VsZWN0ZWQocm93cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RXhwYW5kRXZlbnRzKHJvdzogYW55KSB7XG4gICAgcm93LiRzaG93RGV0YWlsID8gdGhpcy5leHBhbmRlZC5lbWl0KHJvdykgOiB0aGlzLmNvbGxhcHNlZC5lbWl0KHJvdyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RBbGxFdmVudHMoc2VsZWN0QWxsOiBib29sZWFuLCByb3dzOiBhbnkpIHtcbiAgICBzZWxlY3RBbGwgPyB0aGlzLmFsbFNlbGVjdGVkLmVtaXQocm93cykgOiB0aGlzLmFsbFVuc2VsZWN0ZWQuZW1pdChyb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdEV2ZW50cyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2VsZWN0ZWQgPyB0aGlzLnNlbGVjdGVkLmVtaXQocm93KSA6IHRoaXMudW5zZWxlY3RlZC5lbWl0KHJvdyk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbkNvbG9yKHJvdywgY29sdW1uKSB7XG4gICAgY29uc3QgY29sdW1uQ29sb3IgPSBjb2x1bW4uY29sb3I7XG5cbiAgICByZXR1cm4gaXNUeXBlb2YoY29sdW1uQ29sb3IsICdmdW5jdGlvbicpID8gY29sdW1uQ29sb3Iocm93LCBjb2x1bW4ucHJvcGVydHkpIDogY29sdW1uQ29sb3I7XG4gIH1cblxuICAvLyBSZXRvcm5hIGEgY29sdW5hIGRhIGxpc3RhIGRlIGNvbHVuYXMgcXVlIMOpIGRvIHRpcG8gZGV0YWlsXG4gIHByaXZhdGUgZ2V0Q29sdW1uTWFzdGVyRGV0YWlsKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnR5cGUgPT09ICdkZXRhaWwnKTtcbiAgfVxuXG4gIC8vIENvbHVuYXMgcXVlIHPDo28gaW5zZXJpZGFzIG5vIDxoZWFkPiBkYSB0YWJlbGFcbiAgcHJpdmF0ZSBnZXRNYWluQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZSAhPT0gZmFsc2UpO1xuICB9XG5cbiAgLy8gUmV0b3JuYSBhcyBjb2x1bmFzIGNvbSBzdGF0dXNcbiAgcHJpdmF0ZSBnZXRTdWJ0aXRsZUNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC50eXBlID09PSAnc3VidGl0bGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFdmVyeVNlbGVjdGVkKGl0ZW1zOiBBcnJheTxhbnk+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc29tZUNoZWNrZWRPckluZGV0ZXJtaW5hdGUgPSBpdGVtID0+IGl0ZW0uJHNlbGVjdGVkIHx8IGl0ZW0uJHNlbGVjdGVkID09PSBudWxsO1xuICAgIGNvbnN0IGV2ZXJ5Q2hlY2tlZCA9IGl0ZW0gPT4gaXRlbS4kc2VsZWN0ZWQ7XG5cbiAgICBpZiAoaXRlbXMuZXZlcnkoZXZlcnlDaGVja2VkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1zLnNvbWUoc29tZUNoZWNrZWRPckluZGV0ZXJtaW5hdGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlQ29sdW1ucygpIHtcbiAgICB0aGlzLnNldE1haW5Db2x1bW5zKCk7XG4gICAgdGhpcy5zZXRDb2x1bW5NYXN0ZXJEZXRhaWwoKTtcbiAgICB0aGlzLnNldFN1YnRpdGxlQ29sdW1ucygpO1xuICAgIHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbHVtbkxpbmsoKSB7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGlmIChjb2x1bW5bJ3R5cGUnXSA9PT0gJ2xpbmsnICYmICFjb2x1bW5bJ2xpbmsnXSkge1xuICAgICAgICBjb2x1bW5bJ2xpbmsnXSA9ICdsaW5rJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29sdW1uTWFzdGVyRGV0YWlsKCkge1xuICAgIHRoaXMuY29sdW1uTWFzdGVyRGV0YWlsID0gdGhpcy5nZXRDb2x1bW5NYXN0ZXJEZXRhaWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWFpbkNvbHVtbnMoKSB7XG4gICAgdGhpcy5tYWluQ29sdW1ucyA9IHRoaXMuZ2V0TWFpbkNvbHVtbnMoKTtcblxuICAgIHRoaXMuaGFzTWFpbkNvbHVtbnMgPSAhIXRoaXMubWFpbkNvbHVtbnMubGVuZ3RoO1xuXG4gICAgdGhpcy5hbGxDb2x1bW5zV2lkdGhQaXhlbHMgPSB0aGlzLnZlcmlmeVdpZHRoQ29sdW1uc1BpeGVscygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdWJ0aXRsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zdWJ0aXRsZUNvbHVtbnMgPSB0aGlzLmdldFN1YnRpdGxlQ29sdW1ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnNlbGVjdE90aGVyUm93cyhyb3dzOiBBcnJheTxhbnk+LCByb3cpIHtcbiAgICByb3dzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbSAhPT0gcm93KSB7XG4gICAgICAgIGl0ZW0uJHNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVdpZHRoQ29sdW1uc1BpeGVscygpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNNYWluQ29sdW1ucyA/IHRoaXMubWFpbkNvbHVtbnMuZXZlcnkoY29sdW1uID0+IGNvbHVtbi53aWR0aCAmJiBjb2x1bW4ud2lkdGguaW5jbHVkZXMoJ3B4JykpIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldFNlcnZpY2Uoc2VydmljZTogc3RyaW5nLCBtZXRob2Q6ICdHRVQnIHwgJ0RFTEVURScpIHtcbiAgICBpZiAoc2VydmljZSAmJiBpc1R5cGVvZihzZXJ2aWNlLCAnc3RyaW5nJykpIHtcbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2Uuc2V0VXJsKHNlcnZpY2UsIG1ldGhvZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJlZFBhcmFtcyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pIHtcbiAgICBjb25zdCB7IHBhZ2UsIHBhZ2VTaXplLCBzb3J0U3RvcmUgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBmaWx0ZXJlZFBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5nZXRPcmRlclBhcmFtKHNvcnRTdG9yZSk7XG4gICAgY29uc3QgcGFyYW1zID0geyBwYWdlLCBwYWdlU2l6ZSwgb3JkZXIsIC4uLnF1ZXJ5UGFyYW1zIH07XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMpIHtcbiAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbHRlcmVkUGFyYW1zW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlclBhcmFtKHNvcnQ6IFBvVGFibGVDb2x1bW5Tb3J0ID0geyB0eXBlOiB1bmRlZmluZWQgfSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB0eXBlIH0gPSBzb3J0O1xuXG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gUG9UYWJsZUNvbHVtblNvcnRUeXBlLkRlc2NlbmRpbmcpIHtcbiAgICAgIHJldHVybiBgLSR7Y29sdW1uLnByb3BlcnR5fWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2NvbHVtbi5wcm9wZXJ0eX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0eUZpeGVkKGFycjogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBhcnIubWFwKG9iaiA9PiB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KCdmaXhlZCcpKSB7XG4gICAgICAgIG9iai5maXhlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcihoZWlnaHQpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGVja0luZmluaXRlU2Nyb2xsKCk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZVNpemVMb2FkaW5nKCk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZUhlYWRlcldpZHRoKCk7XG59XG4iXX0=
|
|
1338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tdGFibGUvcG8tdGFibGUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSTVHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQVdyRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLEVBQUUsRUFBbUI7UUFDbkIsU0FBUyxFQUFFLHlCQUF5QjtRQUNwQyxNQUFNLEVBQUUsZUFBZTtRQUN2QixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsYUFBYSxFQUFFLGdCQUFnQjtRQUMvQixlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLFlBQVksRUFBRSxnQkFBZ0I7UUFD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QW9CO2tCQUF2RCxNQUFNO21CQUFDLDBCQUEwQjtZQVdFLG9CQUFvQjtrQkFBdkQsTUFBTTttQkFBQywwQkFBMEI7WUF5RFosS0FBSztrQkFBMUIsS0FBSzttQkFBQyxTQUFTO1lBaUNRLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQW9DUSxTQUFTO2tCQUFsQyxLQUFLO21CQUFDLGFBQWE7WUFtQmEsY0FBYztrQkFBOUMsS0FBSzttQkFBQyxvQkFBb0I7WUFpQkosTUFBTTtrQkFBNUIsS0FBSzttQkFBQyxVQUFVO1lBaUJXLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQXlERyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUF3QkssT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBc0JNLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXVCUyxVQUFVO2tCQUFwQyxLQUFLO21CQUFDLGNBQWM7WUFxQlcsY0FBYztrQkFBN0MsS0FBSzttQkFBQyxtQkFBbUI7WUFrQmUsc0JBQXNCO2tCQUE5RCxLQUFLO21CQUFDLDRCQUE0QjtZQWtDUCxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUF5QlMsZ0JBQWdCO2tCQUE5QyxLQUFLO21CQUFDLGtCQUFrQjtZQW9CRCxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUFxQmUsZUFBZTtrQkFBL0MsS0FBSzttQkFBQyxvQkFBb0I7WUFnRUQsU0FBUztrQkFBbEMsS0FBSzttQkFBQyxhQUFhO1lBb0JXLGFBQWE7a0JBQTNDLEtBQUs7bUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIsIGNvbnZlcnRUb0Jvb2xlYW4sIGlzVHlwZW9mLCBzb3J0VmFsdWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvU2VhcmNoRmlsdGVyTW9kZSB9IGZyb20gJy4uL3BvLXNlYXJjaC9lbnVtL3BvLXNlYXJjaC1maWx0ZXItbW9kZS5lbnVtJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5Tb3J0VHlwZSB9IGZyb20gJy4vZW51bXMvcG8tdGFibGUtY29sdW1uLXNvcnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5TcGFjaW5nIH0gZnJvbSAnLi9lbnVtcy9wby10YWJsZS1zcGFjaW5nLmVudW0nO1xuaW1wb3J0IHsgUG9UYWJsZUFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5Tb3J0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi1zb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUZpbHRlcmVkSXRlbXNQYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtZmlsdGVyZWQtaXRlbXMtcGFyYW1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVSZXNwb25zZUFwaSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1yZXNwb25zZS1hcGkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby10YWJsZS5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXNUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVDb250YWluZXIgPSBbJ2JvcmRlcicsICdzaGFkb3cnXTtcbmV4cG9ydCBjb25zdCBwb1RhYmxlQ29udGFpbmVyRGVmYXVsdCA9ICdib3JkZXInO1xuZXhwb3J0IGNvbnN0IHBvVGFibGVQYXJhbURlbGV0ZUFwaSA9ICdpZCc7XG5cbmV4cG9ydCBjb25zdCBwb1RhYmxlTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAnQ29sdW1ucyBhcmUgbm90IGRlZmluZWQnLFxuICAgIG5vRGF0YTogJ05vIGRhdGEgZm91bmQnLFxuICAgIG5vSXRlbTogJ05vIHNlbGVjdGVkIGl0ZW0nLFxuICAgIG9uZUl0ZW06ICcxIHNlbGVjdGVkIGl0ZW0nLFxuICAgIG11bHRpcGxlSXRlbXM6ICdzZWxlY3RlZCBpdGVtcycsXG4gICAgbm9WaXNpYmxlQ29sdW1uOiAnTm8gdmlzaWJsZSBjb2x1bW4nLFxuICAgIGxvYWRpbmdEYXRhOiAnTG9hZGluZycsXG4gICAgbG9hZE1vcmVEYXRhOiAnTG9hZCBtb3JlIGRhdGEnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdTZWUgY29tcGxldGUgc3VidGl0bGUnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICdDb21wbGV0ZSBzdWJ0aXRsZScsXG4gICAgY29sdW1uc01hbmFnZXI6ICdDb2x1bW5zIG1hbmFnZXInLFxuICAgIGJvZHlEZWxldGU6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICBkZWxldGVTdWNjZXNzZnVsOiAnSXRlbXMgcmVtb3ZlZCBzdWNjZXNzZnVsbHknLFxuICAgIGRlbGV0ZUFwaUVycm9yOiAnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcidcbiAgfSxcbiAgZXM6IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ0NvbHVtbmFzIG5vIGRlZmluaWRhcycsXG4gICAgbm9EYXRhOiAnRGF0b3Mgbm8gZW5jb250cmFkb3MnLFxuICAgIG5vSXRlbTogJ05pbmfDum4gZWxlbWVudG8gc2VsZWNjaW9uYWRvJyxcbiAgICBvbmVJdGVtOiAnMSBlbGVtZW50byBzZWxlY2Npb25hZG8nLFxuICAgIG11bHRpcGxlSXRlbXM6ICdlbGVtZW50b3Mgc2VsZWNjaW9uYWRvcycsXG4gICAgbm9WaXNpYmxlQ29sdW1uOiAnU2luIGNvbHVtbmFzIHZpc2libGVzJyxcbiAgICBsb2FkaW5nRGF0YTogJ0NhcmdhbmRvIGRhdG9zJyxcbiAgICBsb2FkTW9yZURhdGE6ICdDYXJnYXIgbcOhcyByZXN1bHRhZG9zJyxcbiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAnVmVyIHN1YnRpdHVsbyBjb21wbGV0bycsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ1N1YnRpdHVsbyBjb21wbGV0bycsXG4gICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbnRlIGRlIGNvbHVtbmEnLFxuICAgIGJvZHlEZWxldGU6ICfCv1JlYWxtZW50ZSBkZXNlYSBlbGltaW5hciBlc3RlIGVsZW1lbnRvPycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgIGRlbGV0ZTogJ0JvcnJhcicsXG4gICAgZGVsZXRlU3VjY2Vzc2Z1bDogJ0VsZW1lbnRvcyBlbGltaW5hZG9zIGNvbiDDqXhpdG8nLFxuICAgIGRlbGV0ZUFwaUVycm9yOiAnT2N1cnJpw7MgdW4gZXJyb3IgaW5lc3BlcmFkbywgaW50w6ludGFsbyBkZSBudWV2byBtw6FzIHRhcmRlJ1xuICB9LFxuICBwdDogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAnTmVuaHVtYSBkZWZpbmnDp8OjbyBkZSBjb2x1bmFzJyxcbiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdOZW5odW1hIGNvbHVuYSB2aXPDrXZlbCcsXG4gICAgbm9JdGVtOiAnTmVuaHVtIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgIG9uZUl0ZW06ICcxIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgIG11bHRpcGxlSXRlbXM6ICdpdGVucyBzZWxlY2lvbmFkb3MnLFxuICAgIGxvYWRpbmdEYXRhOiAnQ2FycmVnYW5kbycsXG4gICAgbG9hZE1vcmVEYXRhOiAnQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zJyxcbiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAnVmVyIGxlZ2VuZGEgY29tcGxldGEnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICdMZWdlbmRhIGNvbXBsZXRhJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVuY2lhZG9yIGRlIGNvbHVuYXMnLFxuICAgIGJvZHlEZWxldGU6ICdEZXNlamEgcmVhbG1lbnRlIGV4Y2x1aXIgZXNzZSBpdGVtPycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgIGRlbGV0ZTogJ0V4Y2x1aXInLFxuICAgIGRlbGV0ZVN1Y2Nlc3NmdWw6ICdJdGVucyByZW1vdmlkb3MgY29tIHN1Y2Vzc28nLFxuICAgIGRlbGV0ZUFwaUVycm9yOiAnT2NvcnJldSB1bSBlcnJvIGluZXNwZXJhZG8sIHRlbnRlIG5vdmFtZW50ZSBtYWlzIHRhcmRlISdcbiAgfSxcbiAgcnU6IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ9Cd0LXRgiDQvtC/0YDQtdC00LXQu9C10L3QuNGPINGB0YLQvtC70LHRhtCwJyxcbiAgICBub0RhdGE6ICfQlNCw0L3QvdGL0LUg0L3QtSDQvdCw0LnQtNC10L3RiycsXG4gICAgbm9JdGVtOiAn0J3QtdGCINCy0YvQsdGA0LDQvdC90L7Qs9C+INGN0LvQtdC80LXQvdGC0LAnLFxuICAgIG9uZUl0ZW06ICcxINGN0LvQtdC80LXQvdGCINCy0YvQsdGA0LDQvScsXG4gICAgbXVsdGlwbGVJdGVtczogJ9Cy0YvQsdGA0LDQvdC90YvQtSDRjdC70LXQvNC10L3RgtGLJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICfQvdC10YIg0LLQuNC00LjQvNGL0YUg0YHRgtC+0LvQsdGG0L7QsicsXG4gICAgbG9hZGluZ0RhdGE6ICfQl9Cw0LPRgNGD0LfQutCwJyxcbiAgICBsb2FkTW9yZURhdGE6ICfQl9Cw0LPRgNGD0LfQutCwJyxcbiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAn0J/QvtGB0LzQvtGC0YDQtdGC0Ywg0L/QvtC70L3Ri9C5INGB0YPQsdGC0LjRgtGAJyxcbiAgICBjb21wbGV0ZVN1YnRpdGxlOiAn0J/QvtC70L3Ri9C5INC30LDQs9C+0LvQvtCy0L7QuicsXG4gICAgY29sdW1uc01hbmFnZXI6ICfQvNC10L3QtdC00LbQtdGAINC60L7Qu9C+0L3QvtC6JyxcbiAgICBib2R5RGVsZXRlOiAn0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3RgtC+0YIg0Y3Qu9C10LzQtdC90YI/JyxcbiAgICBjYW5jZWw6ICfQntGC0LzQtdC90LAnLFxuICAgIGRlbGV0ZTogJ9Cj0LTQsNC70LjRgtGMJyxcbiAgICBkZWxldGVTdWNjZXNzZnVsOiAn0K3Qu9C10LzQtdC90YLRiyDRg9GB0L/QtdGI0L3QviDRg9C00LDQu9C10L3RiycsXG4gICAgZGVsZXRlQXBpRXJyb3I6ICfQn9GA0L7QuNC30L7RiNC70LAg0L3QtdC/0YDQtdC00LLQuNC00LXQvdC90LDRjyDQvtGI0LjQsdC60LAsINC/0L7QstGC0L7RgNC40YLQtSDQv9C+0L/Ri9GC0LrRgyDQv9C+0LfQttC1J1xuICB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEVzdGUgY29tcG9uZW50ZSBkZSB0YWJlbGEgw6kgdXRpbGl6YWRvIHBhcmEgZXhpYmnDp8OjbyBkZSBkYWRvcyBjb20gZGlmZXJlbnRlcyB0aXBvcyBjb21vIHBvciBleGVtcGxvIHRleHRvcywgZGF0YSwgaG9yYXMgZSBuw7ptZXJvcyBjb21cbiAqIGZvcm1hdG8gcGVyc29uYWxpemFkby5cbiAqXG4gKiBUYW1iw6ltIMOpIHBvc3NpdmVsIGNyaWFyIHRhYmVsYXMgY29tIG9yZGVuYcOnw6NvIGRlIGRhZG9zLCBsaW5oYXMgY29tIGRldGFsaGVzLCBjb2x1bmEgcGFyYSBzZWxlw6fDo28gZGUgbGluaGFzLCBjb2x1bmEgY29tIGHDp8O1ZXMgZSB0YW1iw6ltXG4gKiBjYXJyZWdhbWVudG8gcG9yIGRlbWFuZGEgYXRyYXbDqXMgZG8gYm90w6NvICoqQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zKiouXG4gKlxuICogPiBBcyBsaW5oYXMgZGUgZGV0YWxoZXMgcG9kZW0gdGFtYsOpbSBzZXIgY3VzdG9taXphZGFzIGF0cmF2w6lzIGRvIFtgcC10YWJsZS1yb3ctdGVtcGxhdGVgXSgvZG9jdW1lbnRhdGlvbi9wby10YWJsZS1yb3ctdGVtcGxhdGUpLlxuICpcbiAqID4gQXMgY29sdW5hcyBwb2RlbSBzZXIgY3VzdG9taXphZGFzIGF0cmF2w6lzIGRvcyB0ZW1wbGF0ZXMgW2BwLXRhYmxlLWNvbHVtbi10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLWNvbHVtbi10ZW1wbGF0ZSlcbiAqIGUgW2BwLXRhYmxlLWNlbGwtdGVtcGxhdGVgXSgvZG9jdW1lbnRhdGlvbi9wby10YWJsZS1jZWxsLXRlbXBsYXRlKS5cbiAqXG4gKiBPIGNvbXBvbmVudGUgcGVybWl0ZSBnZXJlbmNpYXIgYSBleGliacOnw6NvIGRhcyBjb2x1bmFzIGRpbmFtaWNhbWVudGUuIEVzdGEgZnVuY2lvbmFsaWRhZGUgcG9kZSBzZXIgYWNlc3NhZGEgYXRyYXbDqXMgZG8gw61jb25lIGRlIGVuZ3JlbmFnZW1cbiAqIG5vIGNhbnRvIHN1cGVyaW9yIGRpcmVpdG8gZG8gY2FiZcOnYWxobyBkYSB0YWJlbGEuXG4gKlxuICogQ2FzbyBhIGxhcmd1cmEgZGUgdG9kYXMgYXMgY29sdW5hcyBmb3JlbSBkZWZpbmlkYXMgZSBvIHRvdGFsIHVsdHJhcGFzc2FyIG8gdGFtYW5obyB0YWJlbGEsIHNlcsOhIGV4aWJpZG8gdW0gKnNjcm9sbCogbmEgaG9yaXpvbnRhbCBwYXJhIGFcbiAqIGNvbXBsZXRhIHZpc3VhbGl6YcOnw6NvIGRvcyBkYWRvcy5cbiAqXG4gKiAjIyMjIFRva2VucyBjdXN0b21pesOhdmVpc1xuICpcbiAqIMOJIHBvc3PDrXZlbCBhbHRlcmFyIG8gZXN0aWxvIGRvIGNvbXBvbmVudGUgdXNhbmRvIG9zIHNlZ3VpbnRlcyB0b2tlbnMgKENTUyk6XG4gKlxuICogPiBQYXJhIG1haW9yZXMgaW5mb3JtYcOnw7VlcywgYWNlc3NlIG8gZ3VpYSBbUGVyc29uYWxpemFuZG8gbyBUZW1hIFBhZHLDo28gY29tIFRva2VucyBDU1NdKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL3RoZW1lLWN1c3RvbWl6YXRpb24pLlxuICpcbiAqIHwgUHJvcHJpZWRhZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmnDp8OjbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVmFsb3IgUGFkcsOjbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqRGVmYXVsdCBWYWx1ZXMqKiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tZm9udC1mYW1pbHlgICAgICAgICAgICAgICAgICAgICAgICAgfCBGYW3DrWxpYSB0aXBvZ3LDoWZpY2EgdXNhZGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWZvbnQtZmFtaWx5LXRoZW1lKWAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtY29sb3JgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0wMClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIGRhIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWRhcmstOTUpYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kLXN0cmlwZWQtY29sb3JgICAgICAgICAgICB8IENvciBkbyBiYWNrZ3JvdW5kIHF1YW5kbyBzdHJpcGVkICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMDUpYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWxpbmVgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRhcyBsaW5oYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1taWQtNDApYCAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipIb3ZlcioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1ob3ZlcmAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1ob3ZlcilgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtY29sb3ItaG92ZXJgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYnJhbmQtMDEtbGlnaHRlcilgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipGb2N1c2VkKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1vdXRsaW5lLWNvbG9yLWZvY3VzZWRgICAgICAgICAgICAgICB8IENvciBkbyBvdXRsaW5lIGRvIGVzdGFkbyBkZSBmb2N1cyAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1mb2N1cylgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRGlzYWJsZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItZGlzYWJsZWRgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLW1pZC00MClgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkhlYWRsaW5lKiogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtY29sb3ItaGVhZGxpbmVgICZuYnNwOyAgIHwgQ29yIGRvIGNhYmXDp2FsaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMTApYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWZvbnQtd2VpZ2h0LWhlYWRsaW5lYCAgICAgICAgICAgICAgIHwgUGVzbyBkYSBmb250ZSBkbyBjYWJlw6dhbGhvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpYCAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqU2VsZWN0ZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1zZWxlY3RlZGAmbmJzcDsgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gZGUgc2VsZWNpb25hZG8gICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1icmFuZC0wMS1saWdodGVzdClgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkFjdGl2ZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWFjdGl2ZWRgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRvIHRleHRvIG5vIGVzdGFkbyBkZSBzZWxlY2lvbmFkbyAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1kYXJrLTkwKWAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1jb2xvci1hY3RpdmVkYCAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gZGUgc2VsZWNpb25hZG8gICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1icmFuZC0wMS1saWdodClgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9UYWJsZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcywgcmVzcG9uc8OhdmVsIHBlbGEgZGVmaW5pw6fDo28gZGUgcXVhaXMgY29sdW5hcyBzZXLDo28gZXhpYmlkYXMsIHNlamEgZXNjb25kaWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1jb2x1bW5zLW1hbmFnZXInLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZUNvbHVtbnNNYW5hZ2VyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIGFzIGHDp8O1ZXMgZW0gbG90ZSwgcmVzcG9uc8OhdmVsIHBvciBleGNsdWlyIGUgZXhpYmlyIGEgcXVhbnRpZGFkZSBkZSBpdGVucywgc2VqYW0gZXNjb25kaWRhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1iYXRjaC1hY3Rpb25zJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGhpZGVCYXRjaEFjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG91IGRlc2FiaWxpdGEgYSBxdWVicmEgYXV0b23DoXRpY2EgZGUgdGV4dG8uIFF1YW5kbyBhdGl2YWRhLCBvIHRleHRvIHF1ZSBleGNlZGVcbiAgICogbyBlc3Bhw6dvIGRpc3BvbsOtdmVsIMOpIHRyYW5zZmVyaWRvIHBhcmEgYSBwcsOzeGltYSBsaW5oYSBlbSBwb250b3MgYXByb3ByaWFkb3MgcGFyYSB1bWFcbiAgICogbGVpdHVyYSBjbGFyYS5cbiAgICpcbiAgICogPiBJbmNvbXBhdMOtdmVsIGNvbSBgdmlydHVhbC1zY3JvbGxgLCBxdWUgcmVxdWVyIGFsdHVyYSBmaXhhIG5hcyBsaW5oYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC10ZXh0LXdyYXAnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgdGV4dFdyYXA/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgYXMgYcOnw7VlcyBwYXJhIGZpeGFyIHVtYSBjb2x1bmEgZGEgdGFiZWxhIHNlamFtIGVzY29uZGlkYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1oaWRlLWFjdGlvbi1maXhlZC1jb2x1bW5zJykgc2V0IGhpZGVBY3Rpb25GaXhlZENvbHVtbnMoaGlkZTogYm9vbGVhbikge1xuICAgIGlmIChoaWRlKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnJlbW92ZVByb3BlcnR5Rml4ZWQodGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gICAgdGhpcy5faGlkZUFjdGlvbkZpeGVkQ29sdW1ucyA9IGhpZGU7XG4gIH1cblxuICBnZXQgaGlkZUFjdGlvbkZpeGVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZUFjdGlvbkZpeGVkQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIG8gY2FtcG8gZGUgcGVzcXVpc2Egc2VqYSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWhpZGUtdGFibGUtc2VhcmNoJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGhpZGVUYWJsZVNlYXJjaDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBmZWNoYXIgdW0gZGV0YWxoZSBvdSByb3cgdGVtcGxhdGUgYXV0b21hdGljYW1lbnRlLCBhbyBhYnJpciBvdXRybyBpdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYXV0by1jb2xsYXBzZScsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhdXRvQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIHF1ZSBzZWphIGFkaWNpb25hZG8gbyBlc3RhZG8gZGUgY2FycmVnYW1lbnRvIG5vIGJvdMOjbyBcIkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvc1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtbG9hZGluZy1zaG93LW1vcmUnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgbG9hZGluZ1Nob3dNb3JlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIGVtIHRvZGFzIGFzIGNvbHVuYXMgYSBvcMOnw6NvIGRlIG9yZGVuYcOnw6NvIGRlIGRhZG9zLiBDYXNvIGEgY29sdW5hIHNlamEgZG8gdGlwbyAnZGF0YScgb3UgJ2RhdGVUaW1lJyBhXG4gICAqIG1lc21hIGRldmUgcmVzcGVpdGFyIG9zIHRpcG9zIGRlIGVudHJhZGEgZGVmaW5pZG9zIHBhcmEgcXVlIHNlamFtIG9yZGVuYWRhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXNvcnQnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgc29ydDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgdG9ybmEgaGFiaWxpdGFkbyBvIGJvdMOjbyBcIkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvc1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3Atc2hvdy1tb3JlLWRpc2FibGVkJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHNob3dNb3JlRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG91IGRlc2FiaWxpdGEgbyBlc3RpbG8gbGlzdHJhZG8gZGEgdGFiZWxhIChgc3RyaXBlZGApLlxuICAgKiA+IFJlY29tZW5kYWRvIHBhcmEgdGFiZWxhcyBjb20gbWFpb3IgbsO6bWVybyBkZSBkYWRvcywgZmFjaWxpdGFuZG8gYSBzdWEgdmlzdWFsaXphw6fDo28gbmEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3Atc3RyaXBlZCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBzdHJpcGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFc2NvbmRlIG8gKmNoZWNrYm94KiBwYXJhIHNlbGXDp8OjbyBkZSB0b2RhcyBhcyBsaW5oYXMuXG4gICAqXG4gICAqID4gU2VtcHJlIHJlY2ViZXLDoSAqdHJ1ZSogY2FzbyBhIHNlbGXDp8OjbyBkZSBhcGVuYXMgdW1hIGxpbmhhIGVzdGVqYSBhdGl2YS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWhpZGUtc2VsZWN0LWFsbCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBoaWRlU2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIHNvbWVudGUgdW1hIGxpbmhhIGRhIHRhYmVsYSBwb2RlIHNlciBzZWxlY2lvbmFkYS5cbiAgICpcbiAgICogPiBFc3RhIGRlZmluacOnw6NvIG7Do28gc2UgYXBsaWNhIGFvcyBpdGVucyBmaWxob3MsIG9zIG1lc21vcyBwb3NzdWVtIGNvbXBvcnRhbWVudG8gaW5kZXBlbmRlbnRlIGRvIGl0ZW0gcGFpLlxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXNpbmdsZS1zZWxlY3QnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgc2luZ2xlU2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIHNlbGVjaW9uYXIgdW0gaXRlbSBkYSB0YWJlbGEgY2xpY2FuZG8gbmEgbGluaGEuXG4gICAqXG4gICAqID4gQ2FzbyBoYWphIG5lY2Vzc2lkYWRlIGRlIHNlbGVjaW9uYXIgbyBpdGVtIGFwZW5hcyB2aWEgcmFkaW8gb3UgY2hlY2tib3gsIGRldmUtc2UgZGVmaW5pciBlc3RhIHByb3ByaWVkYWRlIGNvbW8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3Atc2VsZWN0YWJsZS1lbnRpcmUtbGluZScsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBzZWxlY3RhYmxlRW50aXJlTGluZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBhIGNvbHVuYSBkZSBhw6fDtWVzIGZpY2Fyw6Egbm8gbGFkbyBkaXJlaXRvIGRhIHRhYmVsYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWFjdGlvbnMtcmlnaHQnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYWN0aW9uUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIHF1YW50aWRhZGUgbcOheGltYSBkZSBjb2x1bmFzIHF1ZSBzZXLDo28gZXhpYmlkYXMgbmEgdGFiZWxhLlxuICAgKlxuICAgKiBRdWFuZG8gY2hlZ2FyIG5vIHZhbG9yIGluZm9ybWFkbywgYXMgY29sdW5hcyBxdWUgbsOjbyBlc3RpdmVyZW0gc2VsZWNpb25hZGFzIGZpY2Fyw6NvXG4gICAqIGRlc2FiaWxpdGFkYXMgZSBjYXNvIGhvdXZlciBtYWlzIGNvbHVuYXMgdmlzw612ZWlzIGRvIHF1ZSBvIHBlcm1pdGlkbywgYXMgZXhjZWRlbnRlc1xuICAgKiBzZXLDo28gaWdub3JhZGFzIHBvciBvcmRlbSBkZSBwb3Npw6fDo28uXG4gICAqL1xuICBASW5wdXQoJ3AtbWF4LWNvbHVtbnMnKSBtYXhDb2x1bW5zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIG1vZG8gZGUgcGVzcXVpc2EgdXRpbGl6YWRvIG5vIGNhbXBvIGRlIGJ1c2NhLCBxdWFuZG8gaGFiaWxpdGFkby5cbiAgICogVmFsb3JlcyBkZWZpbmlkb3Mgbm8gZW51bTogUG9TZWFyY2hGaWx0ZXJNb2RlXG4gICAqID4gT2JzOiBBIHBlc3F1aXNhIMOpIHJlYWxpemFkYSBleGNsdXNpdmFtZW50ZSBub3MgZGFkb3MgbG9jYWlzLCBvdSBzZWphLCBhcXVlbGVzIHF1ZSBmb3JhbVxuICAgKiA+IHJlbmRlcml6YWRvcyBuYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBzdGFydHNXaXRoYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci10eXBlJykgZmlsdGVyVHlwZTogUG9TZWFyY2hGaWx0ZXJNb2RlID0gUG9TZWFyY2hGaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBxdWFuZG8gdG9kYXMgYXMgbGluaGFzIHPDo28gc2VsZWNpb25hZGFzIHBvciBtZWlvIGRvICpjaGVja2JveCogcXVlIHNlbGVjaW9uYSB0b2RhcyBhcyBsaW5oYXMuXG4gICAqL1xuICBAT3V0cHV0KCdwLWFsbC1zZWxlY3RlZCcpIGFsbFNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBleGVjdXRhZG8gcXVhbmRvIGEgc2VsZcOnw6NvIGRhcyBsaW5oYXMgw6kgZGVzbWFyY2FkYSBwb3IgbWVpbyBkbyAqY2hlY2tib3gqIHF1ZSBzZWxlY2lvbmEgdG9kYXMgYXMgbGluaGFzLlxuICAgKi9cbiAgQE91dHB1dCgncC1hbGwtdW5zZWxlY3RlZCcpIGFsbFVuc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBjb2xhcHNhciB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICpcbiAgICogPiBDb21vIHBhcsOibWV0cm8gbyBjb21wb25lbnRlIGVudmlhIG8gaXRlbSBjb2xhcHNhZG8uXG4gICAqL1xuICBAT3V0cHV0KCdwLWNvbGxhcHNlZCcpIGNvbGxhcHNlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIGV4cGFuZGlyIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKlxuICAgKiA+IENvbW8gcGFyw6JtZXRybyBvIGNvbXBvbmVudGUgZW52aWEgbyBpdGVtIGV4cGFuZGlkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtZXhwYW5kZWQnKSBleHBhbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFww7NzIG8gbcOpdG9kbyBkZSBleGNsdXPDo28gc2VyIGZpbmFsaXphZG8uXG4gICAqXG4gICAqIGBgYFxuICAgKjxwby10YWJsZVxuICAgKiAgKHAtZGVsZXRlLWl0ZW1zKT1cIml0ZW1zID0gJGV2ZW50XCJcbiAgICogPlxuICAgKjwvcG8tdGFibGU+XG4gICAqIGBgYFxuICAgKlxuICAgKlxuICAgKiA+IENvbW8gcGFyw6JtZXRybyBvIGNvbXBvbmVudGUgZW52aWEgYSBsaXN0YSBhdHVhbGl6YWRhLCBzZW0gb3MgaXRlbnMgZXhjbHXDrWRvcy5cbiAgICovXG4gIEBPdXRwdXQoJ3AtZGVsZXRlLWl0ZW1zJykgZXZlbnREZWxldGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBzZWxlY2lvbmFyIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKi9cbiAgQE91dHB1dCgncC1zZWxlY3RlZCcpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFJlY2ViZSB1bWEgYcOnw6NvIGRlIGNsaXF1ZSBwYXJhIG8gYm90w6NvIFwiQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zXCIsIGNhc28gbmVuaHVtYSBhw6fDo28gZm9yIGRlZmluaWRhIG8gbWVzbW9cbiAgICogbsOjbyDDqSB2aXPDrXZlbC5cbiAgICpcbiAgICogUmVjZWJlIHVtIG9iamV0byBgeyBjb2x1bW4sIHR5cGUgfWAgb25kZTpcbiAgICpcbiAgICogLSBjb2x1bW4gKGBQb1RhYmxlQ29sdW1uYCk6IG9iamV0byBkYSBjb2x1bmEgcXVlIGVzdMOhIG9yZGVuYWRhLlxuICAgKiAtIHR5cGUgKGBQb1RhYmxlQ29sdW1uU29ydFR5cGVgKTogdGlwbyBkYSBvcmRlbmHDp8Ojby5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc2hvdy1tb3JlJykgc2hvd01vcmU6IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvVGFibGVDb2x1bW5Tb3J0PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gb3JkZW5hciBjb2x1bmFzIGRhIHRhYmVsYS5cbiAgICpcbiAgICogUmVjZWJlIHVtIG9iamV0byBgeyBjb2x1bW4sIHR5cGUgfWAgb25kZTpcbiAgICpcbiAgICogLSBjb2x1bW4gKGBQb1RhYmxlQ29sdW1uYCk6IG9iamV0byBkYSBjb2x1bmEgcXVlIGZvaSBjbGljYWRhL29yZGVuYWRhLlxuICAgKiAtIHR5cGUgKGBQb1RhYmxlQ29sdW1uU29ydFR5cGVgKTogdGlwbyBkYSBvcmRlbmHDp8Ojby5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc29ydC1ieScpIHNvcnRCeTogRXZlbnRFbWl0dGVyPFBvVGFibGVDb2x1bW5Tb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBkZXNtYXJjYXIgYSBzZWxlw6fDo28gZGUgdW1hIGxpbmhhIGRvIGBwby10YWJsZWAuXG4gICAqL1xuICBAT3V0cHV0KCdwLXVuc2VsZWN0ZWQnKSB1bnNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gYW8gZmVjaGFyIG8gcGFnZSBzbGlkZSBkbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzIGFww7NzIGFsdGVyYXIgYXMgY29sdW5hcyB2aXPDrXZlaXMuXG4gICAqXG4gICAqIE8gY29tcG9uZW50ZSBlbnZpYSBjb21vIHBhcsOibWV0cm8gdW0gYXJyYXkgZGUgc3RyaW5nIGNvbSBhcyBjb2x1bmFzIHZpc8OtdmVpcyBhdHVhbGl6YWRhcy5cbiAgICogUG9yIGV4ZW1wbG86IFtcImlkQ2FyZFwiLCBcIm5hbWVcIiwgXCJoaXJlU3RhdHVzXCIsIFwiYWdlXCJdLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UtdmlzaWJsZS1jb2x1bW5zJykgY2hhbmdlVmlzaWJsZUNvbHVtbnMgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGRpc3BhcmFkbyBhbyBjbGljYXIgbm8gYm90w6NvIGRlIHJlc3RhdXJhciBwYWRyw6NvIG5vIGdlcmVuY2lhZG9yIGRlIGNvbHVuYXMuXG4gICAqXG4gICAqIE8gY29tcG9uZW50ZSBlbnZpYSBjb21vIHBhcsOibWV0cm8gdW0gYXJyYXkgZGUgc3RyaW5nIGNvbSBhcyBjb2x1bmFzIGNvbmZpZ3VyYWRhcyBpbmljaWFsbWVudGUuXG4gICAqIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgICovXG4gIEBPdXRwdXQoJ3AtcmVzdG9yZS1jb2x1bW4tbWFuYWdlcicpIGNvbHVtblJlc3RvcmVNYW5hZ2VyID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxTdHJpbmc+PigpO1xuXG4gIGFsbENvbHVtbnNXaWR0aFBpeGVsczogYm9vbGVhbjtcbiAgY29sdW1uTWFzdGVyRGV0YWlsOiBQb1RhYmxlQ29sdW1uO1xuICBoYXNNYWluQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlO1xuICBtYWluQ29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4gPSBbXTtcbiAgc2VsZWN0QWxsID0gZmFsc2U7XG4gIHNvcnRlZENvbHVtbiA9IHsgcHJvcGVydHk6IDxQb1RhYmxlQ29sdW1uPm51bGwsIGFzY2VuZGluZzogdHJ1ZSB9O1xuICBzdWJ0aXRsZUNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG4gIHBhZ2UgPSAxO1xuICBwYWdlU2l6ZSA9IDEwO1xuICBoYXNTZXJ2aWNlPzogYm9vbGVhbiA9IGZhbHNlO1xuICBpbml0aWFsQ29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj47XG4gIHNob3dCYXRjaEFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXRlbXNTZWxlY3RlZDogQXJyYXk8YW55PiA9IFtdO1xuICBwYXJhbXNGaWx0ZXI6IHt9O1xuICBmaWx0ZXJlZEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG4gIGZpeGVkTGF5b3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbFZpc2libGVDb2x1bW5zOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NwYWNpbmc6IFBvVGFibGVDb2x1bW5TcGFjaW5nID0gUG9UYWJsZUNvbHVtblNwYWNpbmcuTWVkaXVtO1xuICBwcml2YXRlIF9maWx0ZXJlZENvbHVtbnM6IEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgX2FjdGlvbnM/OiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9jb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwcml2YXRlIF9jb250YWluZXI/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhcmFtRGVsZXRlOiBzdHJpbmcgPSBwb1RhYmxlUGFyYW1EZWxldGVBcGk7XG4gIHByaXZhdGUgX2hlaWdodD86IG51bWJlcjtcbiAgcHJpdmF0ZSBfaGlkZURldGFpbD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXRlbXM6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICBwcml2YXRlIF9saXRlcmFsczogUG9UYWJsZUxpdGVyYWxzO1xuICBwcml2YXRlIF9sb2FkaW5nPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zZWxlY3RhYmxlPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nID0gcG9Mb2NhbGVEZWZhdWx0O1xuICBwcml2YXRlIF9zZXJ2aWNlQXBpOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NlcnZpY2VEZWxldGVBcGk6IHN0cmluZztcbiAgcHJpdmF0ZSBwb1RhYmxlU2VydmljZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHNvcnRTdG9yZTogUG9UYWJsZUNvbHVtblNvcnQ7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U/OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kcmFnZ2FibGU/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2hpZGVBY3Rpb25GaXhlZENvbHVtbnM/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZpcnR1YWxTY3JvbGw/OiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBvRGF0ZTogUG9EYXRlU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9UYWJsZVNlcnZpY2U6IFBvVGFibGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkZSBpdGVucyBkYSB0YWJlbGEuXG4gICAqID4gU2UgZmFsc28sIHNlcsOhIGluaWNpYWxpemFkbyBjb21vIHVtICphcnJheSogdmF6aW8uXG4gICAqL1xuICBASW5wdXQoJ3AtaXRlbXMnKSBzZXQgaXRlbXMoaXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICBpZiAodGhpcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gQXJyYXkuaXNBcnJheShpdGVtcykgPyBbLi4uaXRlbXNdIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2l0ZW1zID0gQXJyYXkuaXNBcnJheShpdGVtcykgPyBpdGVtcyA6IFtdO1xuICAgIH1cblxuICAgIC8vIHdoZW4gaGF2ZW4ndCBpdGVtcywgc2VsZWN0QWxsIHNob3VsZCBiZSB1bmNoZWNrZWQuXG4gICAgaWYgKCF0aGlzLmhhc0l0ZW1zKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzQ29sdW1ucykge1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5nZXREZWZhdWx0Q29sdW1ucyhpdGVtc1swXSk7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuaGVpZ2h0ID8gWy4uLnRoaXMuaXRlbXNdIDogdGhpcy5pdGVtcztcblxuICAgIC8vIHRpbWVvdXQgbmVjZXNzw6FyaW8gcGFyYSBvcyBpdGVucyBzZXJlbSByZWZsZXRpZG9zIG5hIHRhYmVsYVxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja0luZmluaXRlU2Nyb2xsKCkpO1xuICB9XG5cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRhcyBjb2x1bmFzIGRhIHRhYmVsYSwgZGV2ZSByZWNlYmVyIHVtICphcnJheSogZGUgb2JqZXRvcyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgYFBvVGFibGVDb2x1bW5gLlxuICAgKiBQb3IgcGFkcsOjbyByZWNlYmVyw6EgY29tbyB2YWxvciBhIHByaW1laXJhIGNvbHVuYSBkYSBsaXN0YSBkZSBpdGVucyBkYSB0YWJlbGEuXG4gICAqID4gQ2FzbyBuw6NvIGVuY29udHJlIHZhbG9yLCBhIG1lbnNhZ2VtICdOZW5odW1hIGRlZmluacOnw6NvIGRlIGNvbHVuYXMnIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtY29sdW1ucycpIHNldCBjb2x1bW5zKGNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+KSB7XG4gICAgY29uc3QgaGFzQ29sdW1uc1dpdGhWaXNpYmxlID0gY29sdW1ucz8uZmluZChjb2x1bW4gPT4gY29sdW1uLnZpc2libGUgPT09IHRydWUpO1xuICAgIGlmICh0aGlzLmluaXRpYWxDb2x1bW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnMgPSBjb2x1bW5zO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xuXG4gICAgaWYgKGhhc0NvbHVtbnNXaXRoVmlzaWJsZSAmJiAhdGhpcy5pbml0aWFsVmlzaWJsZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMuaW5pdGlhbFZpc2libGVDb2x1bW5zID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2V0Q29sdW1uTGluaygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oYXNJdGVtcykge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnModGhpcy5pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZUNvbHVtbnMoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQWRpY2lvbmEgdW0gY29udG9ybm8gYXJyZWRvbmRhZG8gYW8gYHBvLXRhYmxlYCwgYXMgb3DDp8O1ZXMgc8OjbzpcbiAgICogLSBgYm9yZGVyYDogY29tIGJvcmRhcy9saW5oYXMuXG4gICAqIC0gYHNoYWRvd2A6IGNvbSBzb21icmFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgYm9yZGVyYFxuICAgKi9cbiAgQElucHV0KCdwLWNvbnRhaW5lcicpIHNldCBjb250YWluZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IHBvVGFibGVDb250YWluZXIuaW5jbHVkZXModmFsdWUpID8gdmFsdWUgOiBwb1RhYmxlQ29udGFpbmVyRGVmYXVsdDtcbiAgfVxuXG4gIGdldCBjb250YWluZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQWRpY2lvbmEgbyBwYXLDom1ldHJvIGEgc2VyIGVudmlhZG8gcGFyYSBhIHJlcXVpc2nDp8OjbyBkZSBERUxFVEUuXG4gICAqXG4gICAqIMOJIG5lY2Vzc8OhcmlvIGEgdXRpbGl6YcOnw6NvIGRhIHByb3ByaWVkYWRlIGBwLXNlcnZpY2UtZGVsZXRlYCBlbSBjb25qdW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgYGlkYFxuICAgKi9cbiAgQElucHV0KCdwLXBhcmFtLWRlbGV0ZS1hcGknKSBzZXQgcGFyYW1EZWxldGVBcGkodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BhcmFtRGVsZXRlID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogcG9UYWJsZVBhcmFtRGVsZXRlQXBpO1xuICB9XG5cbiAgZ2V0IHBhcmFtRGVsZXRlQXBpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtRGVsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgYWx0dXJhIGRhIHRhYmVsYSBlbSAqcGl4ZWxzKiBlIGZpeGEgbyBjYWJlw6dhbGhvLlxuICAgKlxuICAgKiBBbyB1dGlsaXphciBlc3NhIHByb3ByaWVkYWRlIHNlcsOhIGluc2VyaWRvIG8gYHZpcnR1YWwtc2Nyb2xsYCBuYSB0YWJlbGEgbWVsaG9yYW5kbyBhIHBlcmZvcm1hbmNlLlxuICAgKi9cbiAgQElucHV0KCdwLWhlaWdodCcpIHNldCBoZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBnZXQgaGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBhIHZpc3VhbGl6YcOnw6NvIGRhIGxpc3RhIGRlIGRldGFsaGVzIGRlIGNhZGEgbGluaGEgZGEgY29sdW5hLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1kZXRhaWwnKSBzZXQgaGlkZURldGFpbChoaWRlRGV0YWlsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlkZURldGFpbCA9IGhpZGVEZXRhaWwgIT0gbnVsbCAmJiBoaWRlRGV0YWlsLnRvU3RyaW5nKCkgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4oaGlkZURldGFpbCk7XG4gIH1cblxuICBnZXQgaGlkZURldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZURldGFpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby10YWJsZWAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscyA9IHtcbiAgICogICAgbm9Db2x1bW5zOiAnTmVuaHVtYSBkZWZpbmnDp8OjbyBkZSBjb2x1bmFzJyxcbiAgICogICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbycsXG4gICAqICAgIG5vVmlzaWJsZUNvbHVtbjogJ05lbmh1bWEgY29sdW5hIHZpc8OtdmVsJyxcbiAgICogICAgbm9JdGVtOiAnTmVuaHVtIGl0ZW0gc2VsZWNpb25hZG8nLFxuICAgKiAgICBvbmVJdGVtOiAnMSBpdGVtIHNlbGVjaW9uYWRvJyxcbiAgICogICAgbXVsdGlwbGVJdGVtczogJ2l0ZW5zIHNlbGVjaW9uYWRvcycsXG4gICAqICAgIGxvYWRpbmdEYXRhOiAnQ2FycmVnYW5kbycsXG4gICAqICAgIGxvYWRNb3JlRGF0YTogJ0NhcnJlZ2FyIG1haXMgcmVzdWx0YWRvcycsXG4gICAqICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgbGVnZW5kYSBjb21wbGV0YScsXG4gICAqICAgIGNvbXBsZXRlU3VidGl0bGU6ICdMZWdlbmRhIGNvbXBsZXRhJyxcbiAgICogICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbmNpYWRvciBkZSBjb2x1bmFzJyxcbiAgICogICAgYm9keURlbGV0ZTogJ0Rlc2VqYSByZWFsbWVudGUgZXhjbHVpciBlc3NlIGl0ZW0/JyxcbiAgICogICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgKiAgICBkZWxldGU6ICdFeGNsdWlyJyxcbiAgICogICAgZGVsZXRlU3VjY2Vzc2Z1bDogJ0l0ZW5zIHJlbW92aWRvcyBjb20gc3VjZXNzbycsXG4gICAqICAgIGRlbGV0ZUFwaUVycm9yOiAnT2NvcnJldSB1bSBlcnJvIGluZXNwZXJhZG8sIHRlbnRlIG5vdmFtZW50ZSBtYWlzIHRhcmRlIScsXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9UYWJsZUxpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdTZW0gZGFkb3MnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby10YWJsZVxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tdGFibGU+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9UYWJsZUxpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvVGFibGVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvVGFibGVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9UYWJsZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEJsb3F1ZWlhIGEgaW50ZXJhw6fDo28gZG8gdXN1w6FyaW8gY29tIG9zIGRhZG9zIGRhIF90YWJsZV8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkaW5nJykgc2V0IGxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSBjb252ZXJ0VG9Cb29sZWFuKGxvYWRpbmcpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGxpc3RhIGRlIGHDp8O1ZXMuXG4gICAqXG4gICAqIFF1YW5kbyBob3V2ZXIgYXBlbmFzIHVtYSBhw6fDo28gZGVmaW5pZGEgZWxhIHNlcsOhIGV4aWJpZGEgZGlyZXRhbWVudGUgbmEgY29sdW5hLCBjYXNvIGNvbnRyw6FyaW8sIG8gY29tcG9uZW50ZVxuICAgKiBzZSBlbmNhcnJlZ2EgZGUgYWdydXDDoS1sYXMgZXhpYmluZG8gbyDDrWNvbmUgWyoqcG8taWNvbi1tb3JlKipdKC9ndWlkZXMvaWNvbnMpIHF1ZSBsaXN0YXLDoSBhcyBhw6fDtWVzIGFvIHNlciBjbGljYWRvLlxuICAgKlxuICAgKiAqKkEgY29sdW5hIGRlIGHDp8O1ZXMgbsOjbyBzZXLDoSBleGliaWRhIHF1YW5kbzoqKlxuICAgKiAgLSBhIGxpc3RhIGNvbnRlciB2YWxvcmVzIGludsOhbGlkb3Mgb3UgaW5kZWZpbmlkb3MuXG4gICAqICAtIHRlbmhhIHVtYSDDum5pY2EgYcOnw6NvIGUgYSBtZXNtYSBuw6NvIGZvciB2aXPDrXZlbC5cbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnMoYWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gYWN0aW9ucztcbiAgfVxuXG4gIGdldCBhY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHNlbGXDp8OjbyBkZSBsaW5oYXMgbmEgdGFiZWxhIGUsIGNhc28gYSBwcm9wcmllZGFkZSBgcC1zaW5nbGUtc2VsZWN0YCBlc3RlamEgZGVmaW5pZGEgc2Vyw6EgcG9zc8OtdmVsXG4gICAqIHNlbGVjaW9uYXIgYXBlbmFzIHVtYSDDum5pY2EgbGluaGEuXG4gICAqXG4gICAqICoqSW1wb3J0YW50ZToqKlxuICAgKiAgLSBBcyBsaW5oYXMgZGUgZGV0YWxoZSBkZWZpbmlkYXMgZW0gYFBvVGFibGVEZXRhaWxgIHBvc3N1ZW0gY29tcG9ydGFtZW50byBpbmRlcGVuZGVudGUgZGEgbGluaGEgbWVzdHJlO1xuICAgKiAgLSBDYWRhIGxpbmhhIHBvc3N1aSBwb3IgcGFkcsOjbyBhIHByb3ByaWVkYWRlIGRpbsOibWljYSBgJHNlbGVjdGVkYCwgbmEgcXVhbCDDqSBwb3Nzw612ZWwgdmFsaWRhciBzZSBhIGxpbmhhXG4gICAqIGVzdMOhIHNlbGVjaW9uYWRhLCBwb3IgZXhlbXBsbzogYGl0ZW0uJHNlbGVjdGVkYCBvdSBgaXRlbVsnJHNlbGVjdGVkJ11gLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atc2VsZWN0YWJsZScpIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0YWJsZSA9IDxhbnk+dmFsdWUgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBhdGl2YSBhIGZ1bmNpb25hbGlkYWRlIGRlIHNjcm9sbCBpbmZpbml0byBwYXJhIGEgdGFiZWxhIGUgbyBib3TDo28gXCJDYXJyZWdhciBNYWlzXCIgZGVpeGFyw6EgZGUgc2VyIGV4aWJpZG8uIEFvIGNoZWdhciBubyBmaW0gZGEgdGFiZWxhXG4gICAqIGV4ZWN1dGFyw6EgYSBmdW7Dp8OjbyBgcC1zaG93LW1vcmVgLlxuICAgKlxuICAgKiAqKlJlZ3JhcyBkZSB1dGlsaXphw6fDo286KipcbiAgICogIC0gTyBzY3JvbGwgaW5maW5pdG8gc8OzIGZ1bmNpb25hIHBhcmEgdGFiZWxhcyBxdWUgdXRpbGl6YW0gYSBwcm9wcmllZGFkZSBgcC1oZWlnaHRgIGUgcXVlIHBvc3N1ZW0gbyBzY3JvbGwgasOhIG5hIGNhcmdhIGluaWNpYWwgZG9zIGRhZG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsJykgc2V0IGluZmluaXRlU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGwgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlICYmIHRoaXMuaGVpZ2h0ID4gMCk7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsO1xuICB9XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIHBlcmNlbnR1YWwgbmVjZXNzw6FyaW8gcGFyYSBkaXNwYXJhciBvIGV2ZW50byBgcC1zaG93LW1vcmVgLCBxdWUgw6kgcmVzcG9uc8OhdmVsIHBvciBjYXJyZWdhciBtYWlzIGRhZG9zIG5hIHRhYmVsYS4gQ2FzbyBvIHZhbG9yIGluZm9ybWFkbyBzZWphIG1haW9yIHF1ZSAxMDAgb3UgbWVub3JcbiAgICogcXVlIDAsIG8gdmFsb3IgcGFkcsOjbyBzZXLDoSAxMDAlXG4gICAqXG4gICAqICoqRXhlbXBsb3M6KipcbiAgICogIC0gcC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UgPSA4MDogUXVhbmRvIGF0aW5naXIgODAlICBkbyBzY3JvbGwgZGEgdGFiZWxhLCBvIGBwLXNob3ctbW9yZWAgc2Vyw6EgZGlzcGFyYWRvLlxuICAgKi9cbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZScpIHNldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlID0gdmFsdWUgPiAxMDAgfHwgdmFsdWUgPCAwID8gMTAwIDogdmFsdWU7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGxEaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFVSTCBkYSBBUEkgcmVzcG9uc8OhdmVsIHBvciByZXRvcm5hciBvcyByZWdpc3Ryb3MuXG4gICAqXG4gICAqIEFvIHJlYWxpemFyIGEgYnVzY2EgZGUgbWFpcyByZWdpc3Ryb3MgdmlhIHBhZ2luYcOnw6NvIChDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MpLCBzZXLDoSBlbnZpYWRvIG9zIHBhcsOibWV0cm9zIGBwYWdlYCBlIGBwYWdlU2l6ZWAsIGNvbmZvcm1lIGFiYWl4bzpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MTBcbiAgICogYGBgXG4gICAqXG4gICAqIENhc28gdXRpbGl6YXIgb3JkZW5hw6fDo28sIGEgY29sdW5hIG9yZGVuYWRhIHNlcsOhIGVudmlhZGEgYXRyYXbDqXMgZG8gcGFyw6JtZXRybyBgb3JkZXJgLCBwb3IgZXhlbXBsbzpcbiAgICogLSBDb2x1bmEgZGVjcmVzY2VudGU6XG4gICAqIGBgYFxuICAgKiAgdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMCZvcmRlcj0tbmFtZVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBDb2x1bmEgYXNjZW5kZW50ZTpcbiAgICogYGBgXG4gICAqICB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwJm9yZGVyPW5hbWVcbiAgICogYGBgXG4gICAqXG4gICAqID4gRXN0YSBVUkwgZGV2ZSByZXRvcm5hciBlIHJlY2ViZXIgb3MgZGFkb3Mgbm8gcGFkcsOjbyBkZSBbQVBJIGRvIFBPIFVJXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpLlxuICAgKi9cbiAgQElucHV0KCdwLXNlcnZpY2UtYXBpJykgc2V0IHNlcnZpY2VBcGkoc2VydmljZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VydmljZUFwaSA9IHNlcnZpY2U7XG4gICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuc2VydmljZUFwaSwgJ0dFVCcpO1xuICAgIHRoaXMuaGFzU2VydmljZSA9ICEhc2VydmljZTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhdGhpcy5oYXNTZXJ2aWNlO1xuICAgIHRoaXMucGFnZSA9IDE7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0YSgpO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2VBcGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VBcGk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBVUkwgZGEgQVBJIHJlc3BvbnPDoXZlbCBwb3IgZXhjbHVpciBvcyByZWdpc3Ryb3MuXG4gICAqXG4gICAqIEFvIHNlbGVjaW9uYXIgbyBib3TDo28gZGUgZXhjbHVpciBpdGVucywgZXNzYSB1cmwgc2Vyw6EgZXhlY3V0YWRhIHV0aWxpemFuZG8gbyBwYXLDom1ldHJvIGVudmlhZG8gbmEgcHJvcHJpZWRhZGUgYHAtcGFyYW0tZGVsZXRlLWFwaWAuXG4gICAqIENhc28gZWxhIG7Do28gc2VqYSB1dGlsaXphZGEsIG8gcGFyw6JtZXRybyBwYWRyw6NvIGEgc2VyIGVudmlhZG8gc2Vyw6EgYGlkYC5cbiAgICpcbiAgICogPiBFc3RhIFVSTCBkZXZlIHJldG9ybmFyIGUgcmVjZWJlciBvcyBkYWRvcyBubyBwYWRyw6NvIGRlIFtBUEkgZG8gUE8gVUldKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2FwaSkuXG4gICAqL1xuICBASW5wdXQoJ3Atc2VydmljZS1kZWxldGUnKSBzZXQgc2VydmljZURlbGV0ZUFwaShzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXJ2aWNlRGVsZXRlQXBpID0gc2VydmljZTtcbiAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5zZXJ2aWNlRGVsZXRlQXBpLCAnREVMRVRFJyk7XG4gIH1cblxuICBnZXQgc2VydmljZURlbGV0ZUFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZURlbGV0ZUFwaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFJlc3BvbnPDoXZlbCBwb3IgYXBsaWNhciBlc3Bhw6dhbWVudG8gbmFzIGNvbHVuYXMuXG4gICAqXG4gICAqIERldmUgcmVjZWJlciB1bSBkb3MgdmFsb3JlcyBkbyBlbnVtIGBQb1RhYmxlQ29sdW1uU3BhY2luZ2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBtZWRpdW1gXG4gICAqL1xuICBASW5wdXQoJ3Atc3BhY2luZycpIHNldCBzcGFjaW5nKHZhbHVlOiBQb1RhYmxlQ29sdW1uU3BhY2luZykge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3NtYWxsJyB8fCB2YWx1ZSA9PT0gJ21lZGl1bScgfHwgdmFsdWUgPT09ICdsYXJnZScpIHtcbiAgICAgIHRoaXMuX3NwYWNpbmcgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3BhY2luZyA9IFBvVGFibGVDb2x1bW5TcGFjaW5nLk1lZGl1bTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3BhY2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3BhY2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhcyBjb2x1bmFzIHF1ZSBzZXLDo28gZmlsdHJhZGFzIG5vIGNhbXBvIGRlIHBlc3F1aXNhLlxuICAgKiBBY2VpdGEgdW0gYXJyYXkgZGUgc3RyaW5ncywgcmVwcmVzZW50YW5kbyBhcyBjb2x1bmFzIGVzcGVjw61maWNhcyBxdWUgc2Vyw6NvIGNvbnNpZGVyYWRhcyBuYSBmaWx0cmFnZW0uXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyZWQtY29sdW1ucycpIHNldCBmaWx0ZXJlZENvbHVtbnModmFsdWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5fZmlsdGVyZWRDb2x1bW5zID0gdmFsdWVzO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkQ29sdW1ucygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IGhhc0NvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBoYXNJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCk7XG4gIH1cblxuICBnZXQgbmFtZUNvbHVtbkRldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5NYXN0ZXJEZXRhaWwgPyB0aGlzLmNvbHVtbk1hc3RlckRldGFpbC5wcm9wZXJ0eSA6IG51bGw7XG4gIH1cblxuICBnZXQgdmFsaWRDb2x1bW5zKCkge1xuICAgIGNvbnN0IHR5cGVzVmFsaWQgPSBbXG4gICAgICAnc3RyaW5nJyxcbiAgICAgICdudW1iZXInLFxuICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgJ2RhdGUnLFxuICAgICAgJ3RpbWUnLFxuICAgICAgJ2RhdGVUaW1lJyxcbiAgICAgICdjdXJyZW5jeScsXG4gICAgICAnc3VidGl0bGUnLFxuICAgICAgJ2xpbmsnLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdpY29uJyxcbiAgICAgICdjZWxsVGVtcGxhdGUnLFxuICAgICAgJ2NvbHVtblRlbXBsYXRlJ1xuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+ICFjb2wudHlwZSB8fCB0eXBlc1ZhbGlkLmluY2x1ZGVzKGNvbC50eXBlKSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWN0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYWN0aW9ucyAmJiB0aGlzLmFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24gJiYgYWN0aW9uLnZpc2libGUgIT09IGZhbHNlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcmVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29sdW1uc1xuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUgIT09IGZhbHNlKVxuICAgICAgLm1hcChjb2x1bW4gPT4gY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5sYWJlbCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBzb3J0VHlwZSgpOiBQb1RhYmxlQ29sdW1uU29ydFR5cGUge1xuICAgIHJldHVybiB0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcgPyBQb1RhYmxlQ29sdW1uU29ydFR5cGUuQXNjZW5kaW5nIDogUG9UYWJsZUNvbHVtblNvcnRUeXBlLkRlc2NlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBvIG1vZG8gZHJhZyBhbmQgZHJvcCBwYXJhIGFzIGNvbHVuYXMgZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZHJhZ2dhYmxlJykgc2V0IGRyYWdnYWJsZShkcmFnZ2FibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kcmFnZ2FibGUgPSBkcmFnZ2FibGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXQgZHJhZ2dhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl9kcmFnZ2FibGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBvIGB2aXJ0dWFsLXNjcm9sbGAgbmEgdGFiZWxhIHBhcmEgbWVsaG9yYXIgYSBwZXJmb3JtYW5jZSBjb20gZ3JhbmRlcyB2b2x1bWVzIGRlIGRhZG9zLlxuICAgKiBSZXF1ZXIgYWx0dXJhIChgcC1oZWlnaHRgKSBwYXJhIGZ1bmNpb25hciBjb3JyZXRhbWVudGUuXG4gICAqXG4gICAqID4gSW5jb21wYXTDrXZlbCBjb20gYHAtdGV4dC13cmFwYCBlIGBtYXN0ZXItZGV0YWlsYCwgcG9pcyBvIGB2aXJ0dWFsLXNjcm9sbGAgZXhpZ2UgYWx0dXJhIGZpeGEgbmFzIGxpbmhhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoJ3AtdmlydHVhbC1zY3JvbGwnKSBzZXQgdmlydHVhbFNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGwgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlICYmIHRoaXMuaGVpZ2h0ID4gMCk7XG4gIH1cblxuICBnZXQgdmlydHVhbFNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlydHVhbFNjcm9sbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0IHx8IHRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZVNlbGVjdEFsbCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUhlaWdodFRhYmxlQ29udGFpbmVyKHRoaXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAoKGNoYW5nZXMuaGVpZ2h0IHx8IGNoYW5nZXMuaXRlbXMpICYmIHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlSGVhZGVyV2lkdGgoKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTaXplTG9hZGluZygpO1xuICB9XG5cbiAgc2VsZWN0QWxsUm93cygpIHtcbiAgICBpZiAoIXRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSAhdGhpcy5zZWxlY3RBbGw7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS4kc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEFsbDtcblxuICAgICAgICBpZiAoaXRlbVt0aGlzLm5hbWVDb2x1bW5EZXRhaWxdKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRJdGVtcyA9IGl0ZW1bdGhpcy5uYW1lQ29sdW1uRGV0YWlsXTtcbiAgICAgICAgICBjaGlsZEl0ZW1zLmZvckVhY2goY2hpbGRJdGVtID0+IChjaGlsZEl0ZW0uJHNlbGVjdGVkID0gdGhpcy5zZWxlY3RBbGwpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZW1pdFNlbGVjdEFsbEV2ZW50cyh0aGlzLnNlbGVjdEFsbCwgWy4uLnRoaXMuaXRlbXNdKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgcm93LiRzZWxlY3RlZCA9ICFyb3cuJHNlbGVjdGVkO1xuXG4gICAgdGhpcy5lbWl0U2VsZWN0RXZlbnRzKHJvdyk7XG4gICAgdGhpcy5jb25maWdBZnRlclNlbGVjdFJvdyh0aGlzLml0ZW1zLCByb3cpO1xuXG4gICAgaWYgKHJvd1t0aGlzLm5hbWVDb2x1bW5EZXRhaWxdICYmIChyb3cuJHNlbGVjdGVkID09PSB0cnVlIHx8IHJvdy4kc2VsZWN0ZWQgPT09IGZhbHNlKSkge1xuICAgICAgY29uc3QgY2hpbGRJdGVtcyA9IHJvd1t0aGlzLm5hbWVDb2x1bW5EZXRhaWxdO1xuICAgICAgY2hpbGRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0uJHNlbGVjdGVkID0gcm93LiRzZWxlY3RlZCkpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWRMaXN0KCk7XG4gIH1cblxuICBoYXNTZWxlY3RhYmxlUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGUgJiYgdGhpcy5zZWxlY3RhYmxlRW50aXJlTGluZTtcbiAgfVxuXG4gIHNlbGVjdERldGFpbFJvdyhldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBpdGVtLCBwYXJlbnRSb3cgfSA9IGV2ZW50O1xuICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50cyhpdGVtKTtcbiAgICB0aGlzLnVwZGF0ZVBhcmVudFJvd1NlbGVjdGlvbihwYXJlbnRSb3cpO1xuICB9XG5cbiAgdXBkYXRlUGFyZW50Um93U2VsZWN0aW9uKHBhcmVudFJvdzogYW55KSB7XG4gICAgY29uc3Qgb2xkID0gcGFyZW50Um93LiRzZWxlY3RlZCB8fCBudWxsO1xuICAgIGNvbnN0IGNoaWxkSXRlbXMgPSBwYXJlbnRSb3dbdGhpcy5uYW1lQ29sdW1uRGV0YWlsXTtcblxuICAgIGlmIChjaGlsZEl0ZW1zLmV2ZXJ5KGl0ZW0gPT4gaXRlbS4kc2VsZWN0ZWQpKSB7XG4gICAgICBwYXJlbnRSb3cuJHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGNoaWxkSXRlbXMuZXZlcnkoaXRlbSA9PiAhaXRlbS4kc2VsZWN0ZWQpKSB7XG4gICAgICBwYXJlbnRSb3cuJHNlbGVjdGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudFJvdy4kc2VsZWN0ZWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAob2xkICE9IHBhcmVudFJvdy4kc2VsZWN0ZWQgJiYgIShvbGQgPT0gbnVsbCAmJiBwYXJlbnRSb3cuJHNlbGVjdGVkID09PSBmYWxzZSkpIHtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50cyhwYXJlbnRSb3cpO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnQWZ0ZXJTZWxlY3RSb3codGhpcy5pdGVtcywgcGFyZW50Um93KTtcbiAgICB0aGlzLnNldFNlbGVjdGVkTGlzdCgpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRMaXN0KCkge1xuICAgIHRoaXMuaXRlbXNTZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLiRzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLml0ZW1zU2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldENsYXNzQ29sb3Iocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmNvbG9yID8gYHBvLXRleHQtJHt0aGlzLmdldENvbHVtbkNvbG9yKHJvdywgY29sdW1uKX1gIDogJyc7XG4gIH1cblxuICB0b2dnbGVEZXRhaWwocm93OiBhbnkpIHtcbiAgICBjb25zdCByb3dTaG93RGV0YWlsID0gcm93LiRzaG93RGV0YWlsO1xuICAgIGlmICh0aGlzLmF1dG9Db2xsYXBzZSkge1xuICAgICAgdGhpcy5jb2xsYXBzZUFsbEl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RldGFpbChyb3csICFyb3dTaG93RGV0YWlsKTtcbiAgICB0aGlzLmVtaXRFeHBhbmRFdmVudHMocm93KTtcbiAgfVxuXG4gIHRvZ2dsZVJvd0FjdGlvbihyb3c6IGFueSkge1xuICAgIGNvbnN0IHRvZ2dsZVNob3dBY3Rpb24gPSByb3cuJHNob3dBY3Rpb247XG5cbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS4kc2hvd0FjdGlvbikge1xuICAgICAgICBpdGVtLiRzaG93QWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcm93LiRzaG93QWN0aW9uID0gIXRvZ2dsZVNob3dBY3Rpb247XG4gIH1cblxuICBzb3J0Q29sdW1uKGNvbHVtbjogUG9UYWJsZUNvbHVtbikge1xuICAgIGlmICghdGhpcy5zb3J0IHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsJyB8fCBjb2x1bW4uc29ydGFibGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4uYXNjZW5kaW5nID0gdGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHkgPT09IGNvbHVtbiA/ICF0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcgOiB0cnVlO1xuXG4gICAgdGhpcy5zb3J0QXJyYXkoY29sdW1uLCB0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcpO1xuICAgIHRoaXMuc29ydEJ5LmVtaXQoeyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfSk7XG4gICAgaWYgKHRoaXMuaGFzU2VydmljZSAmJiB0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydFN0b3JlID0geyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfTtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSA9IGNvbHVtbjtcbiAgfVxuXG4gIG9uU2hvd01vcmUoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5ID8geyBjb2x1bW46IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5LCB0eXBlOiB0aGlzLnNvcnRUeXBlIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5oYXNTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnBhZ2UrKztcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IHRydWU7XG5cbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLmdldEZpbHRlcmVkSXRlbXMoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtcywgLi4uZGF0YS5pdGVtc107XG4gICAgICAgIHRoaXMuc2hvd01vcmVEaXNhYmxlZCA9ICFkYXRhLmhhc05leHQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93TW9yZS5lbWl0KHNvcnQpO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRJdGVtcyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pOiBPYnNlcnZhYmxlPFBvVGFibGVSZXNwb25zZUFwaT4ge1xuICAgIGNvbnN0IGZpbHRlcmVkUGFyYW1zOiBQb1RhYmxlRmlsdGVyZWRJdGVtc1BhcmFtcyA9IHRoaXMuZ2V0RmlsdGVyZWRQYXJhbXMocXVlcnlQYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMucG9UYWJsZVNlcnZpY2UuZ2V0RmlsdGVyZWRJdGVtcyhmaWx0ZXJlZFBhcmFtcyk7XG4gIH1cblxuICBzZXRUYWJsZVJlc3BvbnNlUHJvcGVydGllcyhkYXRhOiBQb1RhYmxlUmVzcG9uc2VBcGkpIHtcbiAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcyB8fCBbXTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhZGF0YS5oYXNOZXh0O1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZURhdGEocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBRdWVyeVBhcmFtc1R5cGUgfSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1NlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnBhcmFtc0ZpbHRlciA9IHBhcmFtcztcbiAgICAgIHRoaXMuZ2V0RmlsdGVyZWRJdGVtcyhwYXJhbXMpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5zZXRUYWJsZVJlc3BvbnNlUHJvcGVydGllcyhkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRBcnJheShjb2x1bW46IFBvVGFibGVDb2x1bW4sIGFzY2VuZGluZzogYm9vbGVhbiwgaXRlbT86IEFycmF5PGFueT4pIHtcbiAgICBsZXQgaXRlbXNMaXN0O1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpdGVtc0xpc3QgPSB0aGlzLmhlaWdodCA/IFsuLi5pdGVtXSA6IGl0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zTGlzdCA9IHRoaXMuaGVpZ2h0ID8gWy4uLnRoaXMuZmlsdGVyZWRJdGVtc10gOiB0aGlzLmZpbHRlcmVkSXRlbXM7XG4gICAgfVxuICAgIGl0ZW1zTGlzdC5zb3J0KChsZWZ0U2lkZSwgcmlnaHRTaWRlKTogbnVtYmVyID0+XG4gICAgICBzb3J0VmFsdWVzKGxlZnRTaWRlW2NvbHVtbi5wcm9wZXJ0eV0sIHJpZ2h0U2lkZVtjb2x1bW4ucHJvcGVydHldLCBhc2NlbmRpbmcpXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBpdGVtc0xpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdENvbHVtbnMoaXRlbTogYW55KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pO1xuXG4gICAgcmV0dXJuIGtleXNcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHR5cGVvZiBpdGVtW2tleV0gIT09ICdvYmplY3QnKVxuICAgICAgLm1hcChrZXkgPT4gKHsgbGFiZWw6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpLCBwcm9wZXJ0eToga2V5IH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93RGV0YWlsKHJvd0lkZW50aWZpZXI6IGFueSB8IG51bWJlciwgaXNTaG93RGV0YWlsOiBib29sZWFuKSB7XG4gICAgY29uc3QgaXNSb3dJbmRleCA9IHR5cGVvZiByb3dJZGVudGlmaWVyID09PSAnbnVtYmVyJyAmJiB0aGlzLml0ZW1zW3Jvd0lkZW50aWZpZXJdO1xuXG4gICAgY29uc3Qgcm93ID0gaXNSb3dJbmRleCA/IHRoaXMuaXRlbXNbcm93SWRlbnRpZmllcl0gOiByb3dJZGVudGlmaWVyO1xuXG4gICAgcm93LiRzaG93RGV0YWlsID0gaXNTaG93RGV0YWlsO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZUFsbEl0ZW1zKGl0ZW1zOiBBcnJheTx7IFtrZXk6IHN0cmluZ106IGFueSB9Pikge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0uJHNob3dEZXRhaWwpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93RGV0YWlsKGl0ZW0sIGZhbHNlKTtcbiAgICAgICAgdGhpcy5lbWl0RXhwYW5kRXZlbnRzKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnQWZ0ZXJTZWxlY3RSb3cocm93czogQXJyYXk8YW55Piwgcm93KSB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0KSB7XG4gICAgICB0aGlzLnVuc2VsZWN0T3RoZXJSb3dzKHJvd3MsIHJvdyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oaWRlU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMuaXNFdmVyeVNlbGVjdGVkKHJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdEV4cGFuZEV2ZW50cyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2hvd0RldGFpbCA/IHRoaXMuZXhwYW5kZWQuZW1pdChyb3cpIDogdGhpcy5jb2xsYXBzZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0QWxsRXZlbnRzKHNlbGVjdEFsbDogYm9vbGVhbiwgcm93czogYW55KSB7XG4gICAgc2VsZWN0QWxsID8gdGhpcy5hbGxTZWxlY3RlZC5lbWl0KHJvd3MpIDogdGhpcy5hbGxVbnNlbGVjdGVkLmVtaXQocm93cyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RFdmVudHMocm93OiBhbnkpIHtcbiAgICByb3cuJHNlbGVjdGVkID8gdGhpcy5zZWxlY3RlZC5lbWl0KHJvdykgOiB0aGlzLnVuc2VsZWN0ZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5Db2xvcihyb3csIGNvbHVtbikge1xuICAgIGNvbnN0IGNvbHVtbkNvbG9yID0gY29sdW1uLmNvbG9yO1xuXG4gICAgcmV0dXJuIGlzVHlwZW9mKGNvbHVtbkNvbG9yLCAnZnVuY3Rpb24nKSA/IGNvbHVtbkNvbG9yKHJvdywgY29sdW1uLnByb3BlcnR5KSA6IGNvbHVtbkNvbG9yO1xuICB9XG5cbiAgLy8gUmV0b3JuYSBhIGNvbHVuYSBkYSBsaXN0YSBkZSBjb2x1bmFzIHF1ZSDDqSBkbyB0aXBvIGRldGFpbFxuICBwcml2YXRlIGdldENvbHVtbk1hc3RlckRldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC50eXBlID09PSAnZGV0YWlsJyk7XG4gIH1cblxuICAvLyBDb2x1bmFzIHF1ZSBzw6NvIGluc2VyaWRhcyBubyA8aGVhZD4gZGEgdGFiZWxhXG4gIHByaXZhdGUgZ2V0TWFpbkNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgYXMgY29sdW5hcyBjb20gc3RhdHVzXG4gIHByaXZhdGUgZ2V0U3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudHlwZSA9PT0gJ3N1YnRpdGxlJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRXZlcnlTZWxlY3RlZChpdGVtczogQXJyYXk8YW55Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlID0gaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCB8fCBpdGVtLiRzZWxlY3RlZCA9PT0gbnVsbDtcbiAgICBjb25zdCBldmVyeUNoZWNrZWQgPSBpdGVtID0+IGl0ZW0uJHNlbGVjdGVkO1xuXG4gICAgaWYgKGl0ZW1zLmV2ZXJ5KGV2ZXJ5Q2hlY2tlZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpdGVtcy5zb21lKHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZXRNYWluQ29sdW1ucygpO1xuICAgIHRoaXMuc2V0Q29sdW1uTWFzdGVyRGV0YWlsKCk7XG4gICAgdGhpcy5zZXRTdWJ0aXRsZUNvbHVtbnMoKTtcbiAgICB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2x1bW5MaW5rKCkge1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uWyd0eXBlJ10gPT09ICdsaW5rJyAmJiAhY29sdW1uWydsaW5rJ10pIHtcbiAgICAgICAgY29sdW1uWydsaW5rJ10gPSAnbGluayc7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbHVtbk1hc3RlckRldGFpbCgpIHtcbiAgICB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCA9IHRoaXMuZ2V0Q29sdW1uTWFzdGVyRGV0YWlsKCk7XG4gIH1cblxuICBwcml2YXRlIHNldE1haW5Db2x1bW5zKCkge1xuICAgIHRoaXMubWFpbkNvbHVtbnMgPSB0aGlzLmdldE1haW5Db2x1bW5zKCk7XG5cbiAgICB0aGlzLmhhc01haW5Db2x1bW5zID0gISF0aGlzLm1haW5Db2x1bW5zLmxlbmd0aDtcblxuICAgIHRoaXMuYWxsQ29sdW1uc1dpZHRoUGl4ZWxzID0gdGhpcy52ZXJpZnlXaWR0aENvbHVtbnNQaXhlbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHRoaXMuc3VidGl0bGVDb2x1bW5zID0gdGhpcy5nZXRTdWJ0aXRsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zZWxlY3RPdGhlclJvd3Mocm93czogQXJyYXk8YW55Piwgcm93KSB7XG4gICAgcm93cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0gIT09IHJvdykge1xuICAgICAgICBpdGVtLiRzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlXaWR0aENvbHVtbnNQaXhlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzTWFpbkNvbHVtbnMgPyB0aGlzLm1haW5Db2x1bW5zLmV2ZXJ5KGNvbHVtbiA9PiBjb2x1bW4ud2lkdGggJiYgY29sdW1uLndpZHRoLmluY2x1ZGVzKCdweCcpKSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZXJ2aWNlKHNlcnZpY2U6IHN0cmluZywgbWV0aG9kOiAnR0VUJyB8ICdERUxFVEUnKSB7XG4gICAgaWYgKHNlcnZpY2UgJiYgaXNUeXBlb2Yoc2VydmljZSwgJ3N0cmluZycpKSB7XG4gICAgICB0aGlzLnBvVGFibGVTZXJ2aWNlLnNldFVybChzZXJ2aWNlLCBtZXRob2QpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRQYXJhbXMocXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IFF1ZXJ5UGFyYW1zVHlwZSB9KSB7XG4gICAgY29uc3QgeyBwYWdlLCBwYWdlU2l6ZSwgc29ydFN0b3JlIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSB7fTtcbiAgICBjb25zdCBvcmRlciA9IHRoaXMuZ2V0T3JkZXJQYXJhbShzb3J0U3RvcmUpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgcGFnZSwgcGFnZVNpemUsIG9yZGVyLCAuLi5xdWVyeVBhcmFtcyB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGFyYW1zKSB7XG4gICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgcGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmaWx0ZXJlZFBhcmFtc1trZXldID0gcGFyYW1zW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXJQYXJhbShzb3J0OiBQb1RhYmxlQ29sdW1uU29ydCA9IHsgdHlwZTogdW5kZWZpbmVkIH0pIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgdHlwZSB9ID0gc29ydDtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XG4gICAgICByZXR1cm4gYC0ke2NvbHVtbi5wcm9wZXJ0eX1gO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtjb2x1bW4ucHJvcGVydHl9YDtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUHJvcGVydHlGaXhlZChhcnI6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gYXJyLm1hcChvYmogPT4ge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eSgnZml4ZWQnKSkge1xuICAgICAgICBvYmouZml4ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2FsY3VsYXRlSGVpZ2h0VGFibGVDb250YWluZXIoaGVpZ2h0KTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hlY2tJbmZpbml0ZVNjcm9sbCgpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGFuZ2VTaXplTG9hZGluZygpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGFuZ2VIZWFkZXJXaWR0aCgpO1xufVxuIl19
|