@sumaris-net/ngx-components 1.19.21 → 1.19.22
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/bundles/sumaris-net.ngx-components.umd.js +17 -10
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/form/entity-editor.class.js +13 -7
- package/fesm2015/sumaris-net.ngx-components.js +12 -6
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/entity-editor.class.d.ts +1 -1
|
@@ -289,18 +289,22 @@ export class AppEntityEditor extends AppTabEditor {
|
|
|
289
289
|
// Save the opened tab into the queryParams
|
|
290
290
|
this.queryParams.tab = this.selectedTabIndex;
|
|
291
291
|
// Update route location
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
292
|
+
if (isNotNil(data === null || data === void 0 ? void 0 : data.id)) {
|
|
293
|
+
const queryParams = Object.assign({}, this.queryParams);
|
|
294
|
+
queryParams[this._pathIdAttribute] = data.id;
|
|
295
|
+
console.debug('[entity-editor] Updating route using params: ', queryParams);
|
|
295
296
|
yield this.router.navigate(['.'], {
|
|
296
297
|
relativeTo: this.route,
|
|
297
|
-
queryParams
|
|
298
|
+
queryParams
|
|
298
299
|
});
|
|
299
300
|
}
|
|
300
301
|
else {
|
|
302
|
+
const queryParams = Object.assign({}, this.queryParams);
|
|
303
|
+
queryParams[this._pathIdAttribute] = 'new';
|
|
304
|
+
console.debug('[entity-editor] Updating route to \'../new\' using params: ', queryParams);
|
|
301
305
|
yield this.router.navigate(['..', 'new'], {
|
|
302
306
|
relativeTo: this.route,
|
|
303
|
-
queryParams
|
|
307
|
+
queryParams
|
|
304
308
|
});
|
|
305
309
|
}
|
|
306
310
|
yield this.updateRoute(data, this.queryParams);
|
|
@@ -310,7 +314,7 @@ export class AppEntityEditor extends AppTabEditor {
|
|
|
310
314
|
* Update the route location, and open the next tab
|
|
311
315
|
*/
|
|
312
316
|
updateTabIndex(tabIndex) {
|
|
313
|
-
if (isNotNil(tabIndex) && tabIndex
|
|
317
|
+
if (isNotNil(tabIndex) && tabIndex !== this.selectedTabIndex) {
|
|
314
318
|
this.selectedTabIndex = tabIndex;
|
|
315
319
|
this.markForCheck();
|
|
316
320
|
}
|
|
@@ -606,6 +610,8 @@ export class AppEntityEditor extends AppTabEditor {
|
|
|
606
610
|
}
|
|
607
611
|
computePageHistory(title) {
|
|
608
612
|
return __awaiter(this, void 0, void 0, function* () {
|
|
613
|
+
if (this.debug)
|
|
614
|
+
console.debug('[entity-editor] Computing page history, using url: ' + this.router.url);
|
|
609
615
|
return {
|
|
610
616
|
title,
|
|
611
617
|
path: this.router.url
|
|
@@ -675,4 +681,4 @@ AppEntityEditor.ctorParameters = () => [
|
|
|
675
681
|
{ type: undefined },
|
|
676
682
|
{ type: AppEditorOptions, decorators: [{ type: Optional }] }
|
|
677
683
|
];
|
|
678
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFhLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFTLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBR25FLE9BQU8sRUFBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVuSSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFjLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFHcEYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG1CQUFtQjtDQWtCeEQ7QUFZRCxXQUFXO0FBRVgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsZUFLcEIsU0FBUSxZQUE2QztJQW9FckQsWUFDRSxRQUFrQixFQUNSLFFBQW9CLEVBQ3BCLFdBQWUsRUFDYixPQUEwQjs7UUFFdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQ2hDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQ3BCLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQzdCLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFDOUIsT0FBTyxDQUFDLENBQUM7UUFSRCxhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQ3BCLGdCQUFXLEdBQVgsV0FBVyxDQUFJO1FBbkQzQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBSWYsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDL0IsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBc0RuQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsT0FBTyxHQUFHO1lBQ1Isa0JBQWtCO1lBQ2xCLG1CQUFtQixFQUFFLE9BQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLDBDQUFFLG1CQUFtQixLQUFJLEtBQUssRUFDakYsdUJBQXVCLEVBQUUsUUFBUSxPQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSwwQ0FBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsRUFDN0YsZUFBZSxFQUFFLElBQUksRUFDckIsUUFBUSxFQUFFLElBQUksRUFDZCxlQUFlLEVBQUUsSUFBSSxFQUNyQixVQUFVLEVBQUUsRUFBRSxJQU1YLE9BQU8sQ0FDWCxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ3hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVTtZQUMxQixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFFRixvQkFBb0I7UUFDcEIsdUNBQXVDO0lBQ3pDLENBQUM7SUF4RkQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxTQUFTOztRQUNYLE9BQU8sS0FBSyxPQUFDLElBQUksQ0FBQyxJQUFJLDBDQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQThCO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO2dCQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsSUFBOEI7UUFDeEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzVEO0lBQ0gsQ0FBQztJQW1ERCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLFdBQVc7UUFDWCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFFdEQsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlO1FBQ2IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLFlBQVk7UUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLENBQUMsNENBQTRDO1FBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFxQjtRQUM1QixxQkFBcUI7UUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFNUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sYUFBYTtRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7U0FDakc7UUFDRCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNMLDZCQUE2QjtZQUM3QixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDYixFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ25CO1lBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDRyxJQUFJLENBQUMsRUFBTyxFQUFFLElBS25COztZQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFFckYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLFdBQVc7WUFDWCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDYixJQUFJO29CQUNGLDhCQUE4QjtvQkFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNuQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxrQkFDeEIsWUFBWSxFQUFFLENBQUMsSUFDWixJQUFJLEVBQ1AsQ0FBQztpQkFDSjtnQkFDRCxPQUFPLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2lCQUMzQjt3QkFDTztvQkFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7aUJBQ3JCO2FBQ0Y7WUFFRCxxQkFBcUI7aUJBQ2hCO2dCQUNILElBQUk7b0JBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ25ELElBQUksQ0FBQyxJQUFJO3dCQUFFLE1BQU0sRUFBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBQyxDQUFDO29CQUN6RixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdEMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7aUJBQ2pDO2dCQUNELE9BQU8sR0FBRyxFQUFFO29CQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7aUJBQzNCO3dCQUNPO29CQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQkFDckI7YUFDRjtRQUNILENBQUM7S0FBQTtJQUVELFlBQVksQ0FBQyxJQUFPLEVBQUUsSUFBVTtRQUM5QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQywwQkFBMEIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFBRSxPQUFPO1FBQzFFLDRCQUE0QjtRQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUU3RCwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDakUsUUFBUSxFQUFFLElBQUksQ0FBQyx3QkFBd0I7U0FDeEMsQ0FBQzthQUNDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdEIsU0FBUyxDQUFDLENBQUMsSUFBTyxFQUFFLEVBQUU7WUFDckIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxPQUFPO1lBRTdCLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZixJQUFJLElBQUksQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELElBQUksQ0FBQyxVQUFVLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3RILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNmO1lBQ0QsZ0NBQWdDO2lCQUMzQjtnQkFDSCxJQUFJLElBQUksQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELElBQUksQ0FBQyxVQUFVLHVDQUF1QyxDQUFDLENBQUM7Z0JBQ3ZJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzthQUNyRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVLLFVBQVUsQ0FBQyxJQUFjLEVBQUUsSUFJaEM7O1lBQ0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7bUJBQzlCLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLHVDQUF1QzttQkFDekUsSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBRXJDLElBQUksbUJBQ0YsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNoRSxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUN6RyxJQUFJLENBQ1IsQ0FBQztZQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFFdEMsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxJQUFJLGFBQWE7Z0JBQUUsTUFBTSxhQUFhLENBQUM7WUFFdkMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtnQkFDckMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTNCLHVCQUF1QjtnQkFDdkIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtvQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7d0JBQ2hDLDRGQUE0Rjt5QkFDM0YsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDdkM7cUJBQ0k7b0JBQ0gsc0JBQXNCO29CQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFFdkMsb0JBQW9CO29CQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN4QjtnQkFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QjtRQUNILENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLElBQU8sRUFBRSxJQUFpRDtRQUN4RSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO2FBQ0k7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRW5CLHNCQUFzQjtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQzFDO0lBRUgsQ0FBQztJQUVEOztPQUVHO0lBQ0csaUJBQWlCLENBQUMsSUFBTyxFQUFFLElBRWhDOztZQUVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFFMUMsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUUvQywyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBRTdDLHdCQUF3QjtZQUN4QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUM3QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3ZGLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUN0QixXQUFXLGtDQUFNLElBQUksQ0FBQyxXQUFXLEdBQUssaUJBQWlCLENBQUM7aUJBQ3pELENBQUMsQ0FBQzthQUNKO2lCQUNJO2dCQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ3hDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDdEIsV0FBVyxrQ0FBTSxJQUFJLENBQUMsV0FBVyxHQUFLLGlCQUFpQixDQUFDO2lCQUN6RCxDQUFDLENBQUM7YUFDSjtZQUVELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7S0FBQTtJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLFFBQWlCO1FBQzlCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUssWUFBWSxDQUFDLEtBQVksRUFBRSxPQUFhOztZQUU1QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQUE7SUFFSyxLQUFLLENBQUMsS0FBWTs7WUFDdEIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxLQUFLLENBQUMsZ0JBQWdCO29CQUFFLE9BQU87Z0JBQ25DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3pCO1lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDRyxJQUFJLENBQUMsS0FBYSxFQUFFLElBQVU7O1lBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCwrQkFBK0I7WUFDL0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUU5QixhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFFM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBRTlELElBQUk7Z0JBQ0YsV0FBVztnQkFDWCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUVmLFlBQVk7Z0JBQ1osTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRTVELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFdEMsaUNBQWlDO2dCQUNqQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUV6Qyw4QkFBOEI7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCO29CQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUV0RSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFFdkIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxnQ0FBZ0M7Z0JBQ3BELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUVkLDJCQUEyQjtnQkFDM0IsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLGVBQWUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDM0UsK0ZBQStGO29CQUMvRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQzNFLE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztvQkFDM0UsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsT0FBTyxLQUFLLENBQUM7YUFDZDtvQkFBUztnQkFDUixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDcEI7UUFDSCxDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNHLHFCQUFxQjs7WUFDekIsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUVmLG1DQUFtQztnQkFDbkMsTUFBTSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTFDLDBDQUEwQztnQkFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDM0IsT0FBTyxTQUFTLENBQUM7aUJBQ2xCO2dCQUVELG1CQUFtQjthQUNwQjtZQUVELCtCQUErQjtZQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxLQUFLO29CQUFFLE9BQU8sU0FBUyxDQUFDO2FBQzlCO1lBRUQsdUJBQXVCO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDO0tBQUE7SUFFSyxNQUFNLENBQUMsS0FBZTs7WUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRTlDLHdCQUF3QjtZQUN4QixNQUFNLFlBQVksR0FBRyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RixJQUFJLENBQUMsWUFBWTtnQkFBRSxPQUFPO1lBRTFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUVuRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLElBQUk7Z0JBQ0YsV0FBVztnQkFDWCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFFN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUVmLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDckM7Z0JBRUQsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVqQyxzQkFBc0I7Z0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBRzFCO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNkLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCx5RUFBeUU7WUFDekUsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRTNDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUFBO0lBRUssTUFBTTs7O1lBQ1YsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBQyxJQUFJLENBQUMsSUFBSSwwQ0FBRSxFQUFFLENBQUMsQ0FBQzs7S0FDaEM7SUFFSyxNQUFNOztZQUNWLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7S0FBQTtJQUVLLE1BQU0sQ0FBQyxLQUFhOzs7WUFDeEIsVUFBVTtZQUNWLFVBQUksSUFBSSxDQUFDLE9BQU8sMENBQUUsU0FBUyxFQUFFO2dCQUMzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDOUI7aUJBQ0ksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN4RDtpQkFBTTtnQkFDTCxlQUFlO2dCQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkM7O0tBQ0Y7SUFFRCxVQUFVLENBQUMsSUFBNEI7UUFDckMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO2dCQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsR0FBaUMsRUFBRSxJQUF1RDtRQUNqRyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7U0FDeEI7YUFDSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUNoQyxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFhLENBQUM7U0FDNUI7YUFDSTtZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEUsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDO1lBRTVFLG9EQUFvRDtZQUNwRCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDO2dCQUNyRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQWlCO2dCQUN2QixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDeEIsSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ2xDLE1BQU0sUUFBUSxHQUFHLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGVBQWUsS0FBSSxxQkFBcUIsQ0FBQztnQkFDaEUsV0FBVyxJQUFJLHNCQUFzQixRQUFRLFlBQVksYUFBYSxJQUFJLENBQUM7Z0JBQzNFLFdBQVcsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ2xHLFdBQVcsSUFBSSxVQUFVLENBQUM7YUFDM0I7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztTQUMxQjtRQUNELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdELENBQUM7SUFjRCw2QkFBNkI7SUFFN0I7OztPQUdHO0lBQ08sbUJBQW1CO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDL0MsT0FBTyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDakUsQ0FBQztJQUVlLGtCQUFrQjs7WUFDaEMsbUNBQW1DO1FBQ3JDLENBQUM7S0FBQTtJQUVlLFdBQVcsQ0FBQyxJQUFPLEVBQUUsT0FBa0M7O1lBQ3JFLG1DQUFtQztRQUNyQyxDQUFDO0tBQUE7SUFFZSxjQUFjLENBQUMsSUFBTyxFQUFFLE9BQWtDOztZQUN4RSxtQ0FBbUM7UUFDckMsQ0FBQztLQUFBO0lBRWUsYUFBYSxDQUFDLElBQU87O1lBQ25DLG1DQUFtQztRQUNyQyxDQUFDO0tBQUE7SUFFZSxlQUFlLENBQUMsSUFBTzs7WUFDckMsbUNBQW1DO1FBQ3JDLENBQUM7S0FBQTtJQUVTLGdCQUFnQixDQUFDLElBQU87UUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0QsQ0FBQztJQUVTLGdCQUFnQixDQUFDLElBQXFCO1FBQzlDLE9BQU8sWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRWUsUUFBUTs7WUFDdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUU3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXJCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztLQUFBO0lBRVMsa0JBQWtCO1FBQzFCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ2EsV0FBVyxDQUFDLElBQVE7O1lBQ2xDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFeEIsd0NBQXdDO1lBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNuQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEM7UUFDSCxDQUFDO0tBQUE7SUFFZSxnQkFBZ0IsQ0FBQyxJQUEwQixFQUFFLElBQThCOztZQUN6RixJQUFJLENBQUMsSUFBSTtnQkFBRSxPQUFPLENBQUMsT0FBTztZQUUxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxrQkFDeEMscUJBQXFCLEVBQUUsSUFBSSxFQUMzQixtQkFBbUIsRUFBRSxJQUFJLEVBQ3pCLFNBQVMsRUFBRSxLQUFLLElBQ2IsSUFBSSxFQUNQLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFZSxrQkFBa0IsQ0FBQyxLQUFhOztZQUM5QyxPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRzthQUN0QixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRWUsaUJBQWlCLENBQUMsSUFBOEI7O1lBQzlELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxDQUFDO0tBQUE7SUFHUyxjQUFjLENBQUMsRUFBWTtRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFNBQVMsSUFBSSxHQUFHLFNBQVMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRVMsZ0JBQWdCLENBQUMsZUFBeUI7UUFDbEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUVyQyxzQkFBc0I7UUFDdEIsSUFBSSxlQUFlLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzFFLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDekQ7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRVMsYUFBYSxDQUFDLEVBQU0sRUFBRSxJQUFVO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hELHNGQUFzRjtZQUN0Riw0RUFBNEU7WUFDNUUsV0FBVyxFQUFFLFVBQVUsSUFDcEIsSUFBSSxFQUNQLENBQUM7SUFDTCxDQUFDO0lBRVMsWUFBWTs7UUFDcEIsTUFBQSxJQUFJLENBQUMsRUFBRSwwQ0FBRSxZQUFZLEdBQUc7SUFDMUIsQ0FBQztJQUVELDZCQUE2QjtJQUU3Qjs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGVBQWUsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssZUFBZSxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVlLFdBQVcsQ0FBQyxJQUFPLEVBQUUsV0FBZ0I7O1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEUsTUFBTSxRQUFRLEdBQVUsQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQWEsQ0FBQztZQUM3RixJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDN0IsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDMUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztpQkFDOUIsQ0FBQyxDQUFDO2FBQ0o7aUJBQ0k7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNuRTtRQUNILENBQUM7S0FBQTs7O1lBdndCRixTQUFTOzs7WUF4RHlELFFBQVE7OztZQXVJakQsZ0JBQWdCLHVCQUFyQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtpc01vbWVudH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7QWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMsIExvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VudGl0eSwgRW50aXR5VXRpbHN9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge1VzYWdlTW9kZX0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXBwVGFiRWRpdG9yLCBBcHBUYWJFZGl0b3JPcHRpb25zfSBmcm9tICcuL2VkaXRvci5jbGFzcyc7XG5pbXBvcnQge0FwcEZvcm1VdGlsc30gZnJvbSAnLi9mb3JtLnV0aWxzJztcbmltcG9ydCB7QWxlcnRzfSBmcm9tICcuLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7RXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2Rlc30gZnJvbSAnLi4vc2VydmljZXMvZXJyb3JzJztcbmltcG9ydCB7aXNJbnQsIGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFuLCB0b051bWJlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0eVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0RhdGVGb3JtYXRQaXBlfSBmcm9tICcuLi8uLi9zaGFyZWQvcGlwZXMvZGF0ZS1mb3JtYXQucGlwZSc7XG5pbXBvcnQge0Vudmlyb25tZW50LCBFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7SGlzdG9yeVBhZ2VSZWZlcmVuY2V9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHsgd2FpdEZvciwgV2FpdEZvck9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtGb3JtRXJyb3JUcmFuc2xhdG9yfSBmcm9tICcuLi8uLi9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQge0Zvcm1FcnJvcnN9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3Jtcyc7XG5cbmV4cG9ydCBjbGFzcyBBcHBFZGl0b3JPcHRpb25zIGV4dGVuZHMgQXBwVGFiRWRpdG9yT3B0aW9ucyB7XG4gIGF1dG9Mb2FkPzogYm9vbGVhbjtcbiAgYXV0b0xvYWREZWxheT86IG51bWJlcjtcbiAgcGF0aElkQXR0cmlidXRlPzogc3RyaW5nO1xuICBlbmFibGVMaXN0ZW5DaGFuZ2VzPzogYm9vbGVhbjtcbiAgbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoYW5nZSBwYWdlIHJvdXRlICh3aW5kb3cgVVJMKSB3aGVuIHNhdmluZyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICovXG4gIGF1dG9VcGRhdGVSb3V0ZT86IGJvb2xlYW47IC8vIERlZmF1bHQgdG8gdHJ1ZVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBuZXh0IHRhYiwgYWZ0ZXIgc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b09wZW5OZXh0VGFiPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgaTE4blByZWZpeD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBFcnJvciB7XG4gIGNvZGU/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBBcHBFcnJvcldpdGhEZXRhaWxzIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBkZXRhaWxzPzogQXBwRXJyb3IgJiB7ZXJyb3JzPzogRm9ybUVycm9yc307XG59XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcEVudGl0eUVkaXRvcjxcbiAgVCBleHRlbmRzIEVudGl0eTxULCBJRD4sXG4gIFMgZXh0ZW5kcyBJRW50aXR5U2VydmljZTxULCBJRD4gPSBJRW50aXR5U2VydmljZTxULCBhbnk+LFxuICBJRCA9IG51bWJlclxuICA+XG4gIGV4dGVuZHMgQXBwVGFiRWRpdG9yPFQsIElELCBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnM+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgX3VzYWdlTW9kZTogVXNhZ2VNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVMaXN0ZW5DaGFuZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5JbnRlcnZhbEluU2Vjb25kczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXRoSWRBdHRyaWJ1dGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0xvYWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9Mb2FkRGVsYXk6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b1VwZGF0ZVJvdXRlOiBib29sZWFuO1xuICBwcml2YXRlIF9hdXRvT3Blbk5leHRUYWI6IGJvb2xlYW47XG4gIHByaXZhdGUgX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0ZUZvcm1hdDogRGF0ZUZvcm1hdFBpcGU7XG4gIHByb3RlY3RlZCByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCBlcnJvclRyYW5zbGF0b3I6IEZvcm1FcnJvclRyYW5zbGF0b3I7XG4gIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9uZW1lbnQ6IEVudmlyb25tZW50O1xuXG4gIGRhdGE6IFQ7XG4gIHNhdmluZyA9IGZhbHNlO1xuICBkZWZhdWx0QmFja0hyZWY6IHN0cmluZztcbiAgaGlzdG9yeUljb246IHtpY29uPzogc3RyaW5nOyBtYXRJY29uPzogc3RyaW5nIH07XG5cbiAgJHRpdGxlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBvblVwZGF0ZVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiB0aGlzLl91c2FnZU1vZGU7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICBpZiAodGhpcy5fdXNhZ2VNb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc09uRmllbGRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzT25GaWVsZE1vZGUodGhpcy5fdXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCBpc05ld0RhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuZGF0YT8uaWQpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICBnZXQgc2VydmljZSgpOiBTIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZTtcbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe1xuICAgIGlmICghdGhpcy5zYXZpbmcpIHtcbiAgICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzU2F2ZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXtcbiAgICBpZiAodGhpcy5zYXZpbmcpIHtcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGRhdGFUeXBlOiBuZXcoKSA9PiBULFxuICAgIHByb3RlY3RlZCBkYXRhU2VydmljZT86IFMsXG4gICAgQE9wdGlvbmFsKCkgb3B0aW9ucz86IEFwcEVkaXRvck9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKSxcbiAgICAgIGluamVjdG9yLmdldChSb3V0ZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlciksXG4gICAgICBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSksXG4gICAgICBvcHRpb25zKTtcbiAgICB0aGlzLmVudmlyb25lbWVudCA9IGluamVjdG9yLmdldChFTlZJUk9OTUVOVCk7XG4gICAgb3B0aW9ucyA9IDxBcHBFZGl0b3JPcHRpb25zPntcbiAgICAgIC8vIERlZmF1bHQgb3B0aW9uc1xuICAgICAgZW5hYmxlTGlzdGVuQ2hhbmdlczogdGhpcy5lbnZpcm9uZW1lbnQuZW50aXR5RWRpdG9yPy5lbmFibGVMaXN0ZW5DaGFuZ2VzIHx8IGZhbHNlLCAvLyBGYWxzZSAgYnkgZGVmYXVsdFxuICAgICAgbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IHRvTnVtYmVyKHRoaXMuZW52aXJvbmVtZW50LmVudGl0eUVkaXRvcj8ubGlzdGVuSW50ZXJ2YWxJblNlY29uZHMsIDApLCAvLyBubyB0aW1lciBieSBkZWZhdWx0XG4gICAgICBwYXRoSWRBdHRyaWJ1dGU6ICdpZCcsXG4gICAgICBhdXRvTG9hZDogdHJ1ZSxcbiAgICAgIGF1dG9VcGRhdGVSb3V0ZTogdHJ1ZSxcbiAgICAgIGkxOG5QcmVmaXg6ICcnLFxuXG4gICAgICAvLyBGb2xsb3dpbmcgb3B0aW9ucyBhcmUgb3ZlcnJpZGUgaW5zaWRlIG5nT25Jbml0KClcbiAgICAgIC8vIGF1dG9PcGVuTmV4dFRhYjogLi4uLFxuXG4gICAgICAvLyBPdmVycmlkZSBkZWZhdWx0c1xuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG5cbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLmVycm9yVHJhbnNsYXRvciA9IGluamVjdG9yLmdldChGb3JtRXJyb3JUcmFuc2xhdG9yKTtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLmRhdGVGb3JtYXQgPSBpbmplY3Rvci5nZXQoRGF0ZUZvcm1hdFBpcGUpO1xuICAgIHRoaXMudG9hc3RDb250cm9sbGVyID0gaW5qZWN0b3IuZ2V0KFRvYXN0Q29udHJvbGxlcik7XG4gICAgdGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcyA9IG9wdGlvbnMuZW5hYmxlTGlzdGVuQ2hhbmdlcztcbiAgICB0aGlzLl9saXN0ZW5JbnRlcnZhbEluU2Vjb25kcyA9IG9wdGlvbnMubGlzdGVuSW50ZXJ2YWxJblNlY29uZHM7XG4gICAgdGhpcy5fcGF0aElkQXR0cmlidXRlID0gb3B0aW9ucy5wYXRoSWRBdHRyaWJ1dGU7XG4gICAgdGhpcy5fYXV0b0xvYWQgPSBvcHRpb25zLmF1dG9Mb2FkO1xuICAgIHRoaXMuX2F1dG9Mb2FkRGVsYXkgPSBvcHRpb25zLmF1dG9Mb2FkRGVsYXk7XG4gICAgdGhpcy5fYXV0b1VwZGF0ZVJvdXRlID0gb3B0aW9ucy5hdXRvVXBkYXRlUm91dGU7XG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gb3B0aW9ucy5hdXRvT3Blbk5leHRUYWI7XG4gICAgdGhpcy5pMThuQ29udGV4dCA9IHtcbiAgICAgIHByZWZpeDogb3B0aW9ucy5pMThuUHJlZml4LFxuICAgICAgc3VmZml4OiAnJ1xuICAgIH07XG5cbiAgICAvLyBGT1IgREVWIE9OTFkgLS0tLVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIERlZmF1bHRzXG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gdG9Cb29sZWFuKHRoaXMuX2F1dG9PcGVuTmV4dFRhYiwgIXRoaXMuaXNPbkZpZWxkTW9kZSk7XG4gICAgdGhpcy5oaXN0b3J5SWNvbiA9IHRoaXMuaGlzdG9yeUljb24gfHwge2ljb246ICdsaXN0J307XG5cbiAgICAvLyBSZWdpc3RlciBmb3Jtc1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuXG4gICAgLy8gRGlzYWJsZSBwYWdlLCBkdXJpbmcgbG9hZFxuICAgIHRoaXMuZGlzYWJsZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgLy8gTG9hZCBkYXRhXG4gICAgaWYgKHRoaXMuX2F1dG9Mb2FkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZEZyb21Sb3V0ZSgpLCB0aGlzLl9hdXRvTG9hZERlbGF5KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsOyAvLyBhbHJlYWR5IHVuc3Vic2NyaWJlIGluIHRoZSBzdXBlciBmdW5jdGlvblxuICAgIHRoaXMuJHRpdGxlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4kdGl0bGUudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uVXBkYXRlVmlldy5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBXYWl0IGVuZCBvZiBzYXZpbmdcbiAgICBpZiAodGhpcy5zYXZpbmcpIHJldHVybiB3YWl0Rm9yKCgpID0+IHRoaXMuc2F2aW5nICE9PSB0cnVlKTtcblxuICAgIHJldHVybiBzdXBlci53YWl0SWRsZShvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc25hcHNob3Qgcm91dGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmICghcm91dGUgfHwgaXNOaWxPckJsYW5rKHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgZnJvbSByb3V0ZTogbWlzc2luZyBcXCdyb3V0ZVxcJyBvciBcXCdvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZVxcJy4nKTtcbiAgICB9XG4gICAgbGV0IGlkID0gcm91dGUucGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV07XG4gICAgaWYgKGlzTmlsKGlkKSB8fCBpZCA9PT0gJ25ldycpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQodW5kZWZpbmVkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFzIG51bWJlciwgaWYgbmVlZFxuICAgICAgaWYgKGlzSW50KGlkKSkge1xuICAgICAgICBpZCA9IHBhcnNlSW50KGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvYWQoaWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIGlkLCB1c2luZyB0aGUgZGF0YVNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKGlkPzogSUQsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgJiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlVGFiQW5kUm91dGU/OiBib29sZWFuO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfSkge1xuICAgIGlmICghdGhpcy5kYXRhU2VydmljZSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBkYXRhOiBtaXNzaW5nIFxcJ2RhdGFTZXJ2aWNlXFwnIScpO1xuXG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICAvLyBOZXcgZGF0YVxuICAgIGlmIChpc05pbChpZCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENyZWF0ZSB1c2luZyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdGhpcy5jb21wdXRlVXNhZ2VNb2RlKGRhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uTmV3RW50aXR5KGRhdGEsIG9wdHMpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcoZGF0YSwge1xuICAgICAgICAgIG9wZW5UYWJJbmRleDogMCxcbiAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVyciwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvYWQgZXhpc3RpbmcgZGF0YVxuICAgIGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UubG9hZChpZCwgb3B0cyk7XG4gICAgICAgIGlmICghZGF0YSkgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuREFUQV9OT1RfRk9VTkRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5EQVRBX05PX0ZPVU5EJ307XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eUxvYWRlZChkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIG9wdHMpO1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5Vc2VyV3JpdGUoZGF0YTogVCwgb3B0cz86IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNhblVzZXJXcml0ZShkYXRhLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpIHtcbiAgICAvLyBTa2lwIGlmIGRpc2FibGUsIG9yIGFscmVhZHkgbGlzdGVuaW5nXG4gICAgaWYgKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gfHwgIXRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHJldHVybjtcbiAgICAvLyBTa2lwIGlmIG5ldyBvciBsb2NhbCBkYXRhXG4gICAgaWYgKHRoaXMuaXNOZXdEYXRhIHx8IEVudGl0eVV0aWxzLmlzTG9jYWwodGhpcy5kYXRhKSkgcmV0dXJuO1xuXG4gICAgLy8gTGlzdGVuIGZvciBjaGFuZ2VzIG9uIHNlcnZlclxuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbkNoYW5nZXModGhpcy5kYXRhLmlkLCB7XG4gICAgICBpbnRlcnZhbDogdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHNcbiAgICB9KVxuICAgICAgLnBpcGUoZmlsdGVyKGlzTm90TmlsKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFQpID0+IHtcbiAgICAgICAgY29uc3QgaXNOZXdlciA9IGlzTW9tZW50KGRhdGEudXBkYXRlRGF0ZSkgJiYgZGF0YS51cGRhdGVEYXRlLmlzQWZ0ZXIodGhpcy5kYXRhLnVwZGF0ZURhdGUpO1xuICAgICAgICBpZiAoIWlzTmV3ZXIpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgICAgIC8vIEVkaXRvciBoYXMgbm8gY2hhbmdlczogcmVsb2FkXG4gICAgICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fTogcmVsb2FkaW5nIHBhZ2UuLi5gKTtcbiAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhbm5vdCByZWxvYWQ6IGFsZXJ0IHRoZSB1c2VyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fSwgYnV0IHBhZ2UgaXMgZGlydHk6IHNraXAgcmVsb2FkaW5nLmApO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnRVJST1IuREFUQV9VUERBVEVfREFURV9DSEFOR0VEJywgdHlwZTogJ3dhcm5pbmcnLCBzaG93Q2xvc2VCdXR0b246IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoKCkgPT4gdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGwpO1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbik7XG4gIH1cblxuICBzdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpe1xuICAgIGlmICh0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnVucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVWaWV3KGRhdGE6IFQgfCBudWxsLCBvcHRzPzoge1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgb3BlblRhYkluZGV4PzogbnVtYmVyO1xuICAgIHVwZGF0ZVJvdXRlPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlkQ2hhbmdlZCA9IGlzTm90TmlsKGRhdGEuaWQpXG4gICAgICAmJiB0aGlzLnByZXZpb3VzRGF0YUlkICE9PSB1bmRlZmluZWQgLy8gSWdub3JlIGlmIGZpcnN0IGxvYWRpbmcgKD11bmRlZmluZWQpXG4gICAgICAmJiB0aGlzLnByZXZpb3VzRGF0YUlkICE9PSBkYXRhLmlkO1xuXG4gICAgb3B0cyA9IHtcbiAgICAgIHVwZGF0ZVJvdXRlOiB0aGlzLl9hdXRvVXBkYXRlUm91dGUgJiYgaWRDaGFuZ2VkICYmICF0aGlzLmxvYWRpbmcsXG4gICAgICBvcGVuVGFiSW5kZXg6IHRoaXMuX2F1dG9PcGVuTmV4dFRhYiAmJiBpZENoYW5nZWQgJiYgaXNOaWwodGhpcy5wcmV2aW91c0RhdGFJZCkgJiYgdGhpcy5jb21wdXRlTmV4dFRhYkluZGV4KCksXG4gICAgICAuLi5vcHRzXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wcmV2aW91c0RhdGFJZCA9IGRhdGEuaWQgfHwgbnVsbDtcblxuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICBjb25zdCBwcm9taXNlT3JWb2lkID0gdGhpcy5zZXRWYWx1ZShkYXRhKTtcbiAgICBpZiAocHJvbWlzZU9yVm9pZCkgYXdhaXQgcHJvbWlzZU9yVm9pZDtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZShkYXRhKTtcblxuICAgICAgLy8gTmVlZCB0byB1cGRhdGUgcm91dGVcbiAgICAgIGlmIChvcHRzLnVwZGF0ZVJvdXRlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFiQW5kUm91dGUoZGF0YSwgb3B0cylcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpdGxlIC0gc2hvdWxkIGJlIGV4ZWN1dGVkIEFGVEVSIHVwZGF0ZVJvdXRlIGJlY2F1c2Ugb2YgcGF0aCBjaGFuZ2UgLSBmaXggIzE4NVxuICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMudXBkYXRlVGl0bGUoZGF0YSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbmV4dCB0YWJcbiAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleChvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZS5cbiAgICAgICAgdGhpcy51cGRhdGVUaXRsZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblVwZGF0ZVZpZXcuZW1pdChkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc3RhdGVcbiAgICovXG4gIHVwZGF0ZVZpZXdTdGF0ZShkYXRhOiBULCBvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuaXNOZXdEYXRhIHx8IHRoaXMuY2FuVXNlcldyaXRlKGRhdGEpKSB7XG4gICAgICB0aGlzLmVuYWJsZShvcHRzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGUob3B0cyk7XG5cbiAgICAgIC8vIEFsbG93IHRvIHNvcnQgdGFibGVcbiAgICAgIHRoaXMudGFibGVzLmZvckVhY2godCA9PiB0LmVuYWJsZVNvcnQoKSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICBhc3luYyB1cGRhdGVUYWJBbmRSb3V0ZShkYXRhOiBULCBvcHRzPzoge1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXMgfHwge307XG5cbiAgICAvLyBPcGVuIHRoZSBuZXh0IHRhYlxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cyAmJiBvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAvLyBTYXZlIHRoZSBvcGVuZWQgdGFiIGludG8gdGhlIHF1ZXJ5UGFyYW1zXG4gICAgdGhpcy5xdWVyeVBhcmFtcy50YWIgPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXg7XG5cbiAgICAvLyBVcGRhdGUgcm91dGUgbG9jYXRpb25cbiAgICBjb25zdCBmb3JjZWRRdWVyeVBhcmFtcyA9IHt9O1xuICAgIGZvcmNlZFF1ZXJ5UGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV0gPSBkYXRhICYmIGlzTm90TmlsKGRhdGEuaWQpID8gZGF0YS5pZCA6ICduZXcnO1xuICAgIGlmIChkYXRhICYmIGlzTm90TmlsKGRhdGEuaWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogey4uLnRoaXMucXVlcnlQYXJhbXMsIC4uLmZvcmNlZFF1ZXJ5UGFyYW1zfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsICduZXcnXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogey4uLnRoaXMucXVlcnlQYXJhbXMsIC4uLmZvcmNlZFF1ZXJ5UGFyYW1zfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVSb3V0ZShkYXRhLCB0aGlzLnF1ZXJ5UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJvdXRlIGxvY2F0aW9uLCBhbmQgb3BlbiB0aGUgbmV4dCB0YWJcbiAgICovXG4gIHVwZGF0ZVRhYkluZGV4KHRhYkluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKGlzTm90TmlsKHRhYkluZGV4KSAmJiB0YWJJbmRleCA+IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbmRDbG9zZShldmVudDogRXZlbnQsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKGV2ZW50KTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc2F2ZWQ7XG4gIH1cblxuICBhc3luYyBjbG9zZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIGVkaXRvciwgYnkgY2FsbGluZyB0aGUgZGF0YVNlcnZpY2Uuc2F2ZSgpLlxuICAgKiBFbnN1cmUgdGhhdCBlZGl0b3IgaWYgdmFsaWQuIElmIG5vdCwgZGlzcGxheSBhbiBlcnJvclxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZXZlbnQ/OiBFdmVudCwgb3B0cz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3IgaXMgYnVzeSAobG9hZGluZyBvciBzYXZpbmcpJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTa2lwIHNhdmU6IGVkaXRvciBub3QgZGlydHknKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdhaXQgZW5kIG9mIGFzeW5jIHZhbGlkYXRpb25cbiAgICBhd2FpdCB0aGlzLndhaXRXaGlsZVBlbmRpbmcoKTtcblxuICAgIC8vIElmIGludmFsaWRcbiAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMubG9nRm9ybUVycm9ycygpO1xuICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2F2aW5nIGRhdGEuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcblxuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIC8vIFNhdmUgZm9ybVxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmUoZGF0YSwgb3B0cyk7XG5cbiAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlTYXZlZCh1cGRhdGVkRGF0YSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdmlldyAoZS5nIG1ldGFkYXRhKVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KHVwZGF0ZWREYXRhLCBvcHRzKTtcblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIHJlbW90ZSBjaGFuZ2VzXG4gICAgICBpZiAoIXRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTsgLy8gU2Nyb2xsIHRvIHRvcCAodG8gc2hvdyBlcnJvcilcbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAgIC8vIENvbmN1cnJlbnQgY2hhbmdlIG9uIHBvZFxuICAgICAgaWYgKGVyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLkJBRF9VUERBVEVfREFURSAmJiBpc05vdE5pbCh0aGlzLmRhdGEuaWQpKSB7XG4gICAgICAgIC8vIENhbGwgYSBkYXRhIHJlbG9hZCAoaW4gYmFja2dyb3VuZCksIHRvIHVwZGF0ZSB0aGUgR3JhcGhRTCBjYWNoZSwgYW5kIGFsbG93IHRvIGNhbmNlbCBjaGFuZ2VzXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZCh0aGlzLmRhdGEuaWQsIHtmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSd9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIERhdGEgY2FjaGUgcmVsb2FkZWQuIFVzZXIgY2FuIHJlbG9hZCBwYWdlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBkYXRhIChpZiBkaXJ0eSBhbmQgdmFsaWQpLCBhbmQgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiBuaWwgdmFsdWUuXG4gICAqL1xuICBhc3luYyBzYXZlQW5kR2V0RGF0YUlmVmFsaWQoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gRm9ybSBpcyBub3QgdmFsaWRcbiAgICBpZiAoIXRoaXMudmFsaWQpIHtcblxuICAgICAgLy8gTWFrZSBzdXJlIHZhbGlkYXRpb24gaXMgZmluaXNoZWRcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMpO1xuXG4gICAgICAvLyBJZiBpbnZhbGlkOiBPcGVuIHRoZSBmaXJzdCB0YWIgaW4gZXJyb3JcbiAgICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh2YWxpZClcbiAgICB9XG5cbiAgICAvLyBGb3JtIGlzIHZhbGlkLCBidXQgbm90IHNhdmVkXG4gICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKG5ldyBFdmVudCgnc2F2ZScpKTtcbiAgICAgIGlmICghc2F2ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVmFsaWQgYW5kIHNhdmVkIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGV2ZW50PzogVUlFdmVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IEFsZXJ0cy5hc2tEZWxldGVDb25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlKTtcbiAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBBc2tpbmcgdG8gZGVsZXRlLi4uJyk7XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBkYXRhXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgaXNOZXcgPSB0aGlzLmlzTmV3RGF0YTtcblxuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIGlmICghaXNOZXcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5kZWxldGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlEZWxldGVkKGRhdGEpO1xuXG4gICAgICAvLyBSZW1vdmUgcGFnZSBoaXN0b3J5XG4gICAgICB0aGlzLnJlbW92ZVBhZ2VIaXN0b3J5KCk7XG5cblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2FpdCwgdGhlbiBnbyBiYWNrICh3YWl0IGlzIG5lZWQgaW4gb3JkZXIgdG8gdXBkYXRlIGJhY2sgaHJlZiBpcyBuZWVkKVxuICAgIGF3YWl0IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nb0JhY2soKSwgNTAwKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKCkge1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIGF3YWl0IHRoaXMubG9hZCh0aGlzLmRhdGE/LmlkKTtcbiAgfVxuXG4gIGFzeW5jIHVubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0b3BMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG4gICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnb0JhY2soZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZCB8IGJvb2xlYW4+IHtcbiAgICAvLyBHbyBiYWNrXG4gICAgaWYgKHRoaXMudG9vbGJhcj8uY2FuR29CYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sYmFyLmdvQmFjaygpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRlZmF1bHRCYWNrSHJlZikge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrIHRvIGhvbWVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRFcnJvcihvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayh0aGlzLmVycm9yKSkge1xuICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHNldEVycm9yKGVycjogc3RyaW5nIHwgQXBwRXJyb3JXaXRoRGV0YWlscywgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuOyBkZXRhaWxzQ3NzQ2xhc3M/OiBzdHJpbmc7fSkge1xuICAgIGlmICghZXJyKSB7XG4gICAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS5lcnJvcignW2VudGl0eS1lZGl0b3JdIEVycm9yOiAnICsgKGVyciB8fCAnJykpO1xuICAgICAgdGhpcy5lcnJvciA9IGVyciBhcyBzdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignW2VudGl0eS1lZGl0b3JdIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UgfHwgJycsIGVycik7XG4gICAgICBsZXQgdXNlck1lc3NhZ2UgPSBlcnIubWVzc2FnZSAmJiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGVyci5tZXNzYWdlKSB8fCBlcnI7XG5cbiAgICAgIC8vIEFkZCBkZXRhaWxzIGVycm9yIChpZiBhbnkpIHVuZGVyIHRoZSBtYWluIG1lc3NhZ2VcbiAgICAgIGNvbnN0IGRldGFpbE1lc3NhZ2UgPSAoIWVyci5kZXRhaWxzIHx8IHR5cGVvZiBlcnIuZGV0YWlscyA9PT0gJ3N0cmluZycpXG4gICAgICAgID8gZXJyLmRldGFpbHMgYXMgc3RyaW5nXG4gICAgICAgIDogZXJyLmRldGFpbHMubWVzc2FnZTtcbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoZGV0YWlsTWVzc2FnZSkpIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBvcHRzPy5kZXRhaWxzQ3NzQ2xhc3MgfHwgJ2hpZGRlbi14cyBoaWRkZW4tc20nO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSBgPGJyLz48c21hbGwgY2xhc3M9XCIke2Nzc0NsYXNzfVwiIHRpdGxlPVwiJHtkZXRhaWxNZXNzYWdlfVwiPmA7XG4gICAgICAgIHVzZXJNZXNzYWdlICs9IGRldGFpbE1lc3NhZ2UubGVuZ3RoIDwgNzAgPyBkZXRhaWxNZXNzYWdlIDogZGV0YWlsTWVzc2FnZS5zdWJzdHJpbmcoMCwgNjcpICsgJy4uLic7XG4gICAgICAgIHVzZXJNZXNzYWdlICs9ICc8L3NtYWxsPic7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9yID0gdXNlck1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgYWJzdHJhY3QgbWV0aG9kcyAodG8gb3ZlcnJpZGUpIC0tICovXG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlZ2lzdGVyRm9ybXMoKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZVRpdGxlKGRhdGE6IFQpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFZhbHVlKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IGZvcm0oKTogRm9ybUdyb3VwO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRGaXJzdEludmFsaWRUYWJJbmRleCgpOiBudW1iZXI7XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICAvKipcbiAgICogUmV0dXJuIHVuZGVmaW5lZCB0byBrZWVwIHNhbWUgdGFiXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjb21wdXRlTmV4dFRhYkluZGV4KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbmV4dFRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4ICsgMTtcbiAgICByZXR1cm4gbmV4dFRhYkluZGV4IDwgdGhpcy50YWJDb3VudCA/IG5leHRUYWJJbmRleCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkJlZm9yZUVudGl0eUxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbk5ld0VudGl0eShkYXRhOiBULCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eUxvYWRlZChkYXRhOiBULCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eVNhdmVkKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5RGVsZXRlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlVXNhZ2VNb2RlKGRhdGE6IFQpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzVXNhZ2VNb2RlKCdGSUVMRCcpID8gJ0ZJRUxEJyA6ICdERVNLJztcbiAgfVxuXG4gIHByb3RlY3RlZCB3YWl0V2hpbGVQZW5kaW5nKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyh0aGlzLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgdGhpcy5nZXRKc29uVmFsdWVUb1NhdmUoKTtcblxuICAgIGNvbnN0IHJlcyA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgcmVzLmZyb21PYmplY3QoanNvbik7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEpzb25WYWx1ZVRvU2F2ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0aXRsZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVRpdGxlKGRhdGE/OiBUKSB7XG4gICAgZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5jb21wdXRlVGl0bGUoZGF0YSk7XG4gICAgdGhpcy4kdGl0bGUubmV4dCh0aXRsZSk7XG5cbiAgICAvLyBJZiBOT1QgZGF0YSwgdGhlbiBhZGQgdG8gcGFnZSBoaXN0b3J5XG4gICAgaWYgKCF0aGlzLmlzTmV3RGF0YSkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMuY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlKTtcbiAgICAgIHJldHVybiB0aGlzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZFRvUGFnZUhpc3RvcnkocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsIG9wdHM/OiBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucykge1xuICAgIGlmICghcGFnZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UsIHtcbiAgICAgIHJlbW92ZVBhdGhRdWVyeVBhcmFtczogdHJ1ZSxcbiAgICAgIHJlbW92ZVRpdGxlU21hbGxUYWc6IHRydWUsXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbXB1dGVQYWdlSGlzdG9yeSh0aXRsZTogc3RyaW5nKTogUHJvbWlzZTxIaXN0b3J5UGFnZVJlZmVyZW5jZT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIHBhdGg6IHRoaXMucm91dGVyLnVybFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVtb3ZlUGFnZUhpc3Rvcnkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVtb3ZlUGFnZUhpc3RvcnkodGhpcy5yb3V0ZXIudXJsLCBvcHRzKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGNvbXB1dGVQYWdlVXJsKGlkOiBJRHwnbmV3Jyk6IHN0cmluZyB8IGFueVtdIHtcbiAgICBjb25zdCBwYXJlbnRVcmwgPSB0aGlzLmdldFBhcmVudFBhZ2VVcmwoKTtcbiAgICByZXR1cm4gcGFyZW50VXJsICYmIGAke3BhcmVudFVybH0vJHtpZH1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhcmVudFBhZ2VVcmwod2l0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbikge1xuICAgIGxldCBwYXJlbnRVcmwgPSB0aGlzLmRlZmF1bHRCYWNrSHJlZjtcblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAod2l0aFF1ZXJ5UGFyYW1zICE9PSB0cnVlICYmIHBhcmVudFVybCAmJiBwYXJlbnRVcmwuaW5kZXhPZignPycpICE9PSAtMSkge1xuICAgICAgcGFyZW50VXJsID0gcGFyZW50VXJsLnN1YnN0cigwLCBwYXJlbnRVcmwuaW5kZXhPZignPycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50VXJsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RlbkNoYW5nZXMoaWQ6IElELCBvcHRzPzogYW55KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UubGlzdGVuQ2hhbmdlcyh0aGlzLmRhdGEuaWQsIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0byBza2lwIGNhY2hlLCBiZWNhdXNlIE5PVCB0aGUgZnVsbCBncmFwaCB3aWxsIGJlIGZldGNoZWQgYnkgc3Vic2NyaXB0aW9uXG4gICAgICAvLyBXaGVuIGEgY2hhbmdlcyBvY2N1ciwgd2UgY2FsbCByZWxvYWQoKSB0byBmb3JjZSByZWZldGNoaW5nIHRoZSBmdWxsIGdyYXBoXG4gICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJyxcbiAgICAgIC4uLm9wdHNcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZD8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBmaXJzdCB0YWIgdGhhdCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIG9wZW5GaXJzdEludmFsaWRUYWIoKSB7XG4gICAgY29uc3QgaW52YWxpZFRhYkluZGV4ID0gdGhpcy5nZXRGaXJzdEludmFsaWRUYWJJbmRleCgpO1xuICAgIGlmIChpbnZhbGlkVGFiSW5kZXggIT09IC0xICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gaW52YWxpZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpbnZhbGlkVGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVSb3V0ZShkYXRhOiBULCBxdWVyeVBhcmFtczogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBhZ2VVcmwoaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkIDogJ25ldycpO1xuICAgIGNvbnN0IGNvbW1hbmRzOiBhbnlbXSA9IChwYXRoICYmIHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgPyBwYXRoLnNwbGl0KCcvJykgOiBwYXRoIGFzIGFueVtdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoY29tbWFuZHMpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignU2tpcCBwYWdlIHJvdXRlIHVwZGF0ZS4gSW52YWxpZCBwYWdlIHBhdGg6ICcsIHBhdGgpO1xuICAgIH1cbiAgfVxuXG5cbn1cbiJdfQ==
|
|
684
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFhLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFTLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBR25FLE9BQU8sRUFBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFB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QUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sUUFBUSxHQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFhLENBQUM7WUFDN0YsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQzFDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7aUJBQzlCLENBQUMsQ0FBQzthQUNKO2lCQUNJO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkU7UUFDSCxDQUFDO0tBQUE7OztZQTV3QkYsU0FBUzs7O1lBeER5RCxRQUFROzs7WUF1SWpELGdCQUFnQix1QkFBckMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QWxlcnRDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7aXNNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0FkZFRvUGFnZUhpc3RvcnlPcHRpb25zLCBMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHksIEVudGl0eVV0aWxzfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtVc2FnZU1vZGV9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FwcFRhYkVkaXRvciwgQXBwVGFiRWRpdG9yT3B0aW9uc30gZnJvbSAnLi9lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4vZm9ybS51dGlscyc7XG5pbXBvcnQge0FsZXJ0c30gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQge0Vycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXN9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2lzSW50LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiwgdG9OdW1iZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdHlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtEYXRlRm9ybWF0UGlwZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHtFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0hpc3RvcnlQYWdlUmVmZXJlbmNlfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7Rm9ybUVycm9yVHJhbnNsYXRvcn0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtGb3JtRXJyb3JzfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybXMnO1xuXG5leHBvcnQgY2xhc3MgQXBwRWRpdG9yT3B0aW9ucyBleHRlbmRzIEFwcFRhYkVkaXRvck9wdGlvbnMge1xuICBhdXRvTG9hZD86IGJvb2xlYW47XG4gIGF1dG9Mb2FkRGVsYXk/OiBudW1iZXI7XG4gIHBhdGhJZEF0dHJpYnV0ZT86IHN0cmluZztcbiAgZW5hYmxlTGlzdGVuQ2hhbmdlcz86IGJvb2xlYW47XG4gIGxpc3RlbkludGVydmFsSW5TZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2UgcGFnZSByb3V0ZSAod2luZG93IFVSTCkgd2hlbiBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvVXBkYXRlUm91dGU/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICAvKipcbiAgICogT3BlbiB0aGUgbmV4dCB0YWIsIGFmdGVyIHNhdmluZyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICovXG4gIGF1dG9PcGVuTmV4dFRhYj86IGJvb2xlYW47IC8vIERlZmF1bHQgdG8gdHJ1ZVxuXG4gIGkxOG5QcmVmaXg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwRXJyb3Ige1xuICBjb2RlPzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwRXJyb3JXaXRoRGV0YWlscyBleHRlbmRzIEFwcEVycm9yIHtcbiAgZGV0YWlscz86IEFwcEVycm9yICYge2Vycm9ycz86IEZvcm1FcnJvcnN9O1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBFbnRpdHlFZGl0b3I8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LFxuICBTIGV4dGVuZHMgSUVudGl0eVNlcnZpY2U8VCwgSUQ+ID0gSUVudGl0eVNlcnZpY2U8VCwgYW55PixcbiAgSUQgPSBudW1iZXJcbiAgPlxuICBleHRlbmRzIEFwcFRhYkVkaXRvcjxULCBJRCwgRW50aXR5U2VydmljZUxvYWRPcHRpb25zPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICBwcml2YXRlIF91c2FnZU1vZGU6IFVzYWdlTW9kZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlTGlzdGVuQ2hhbmdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF0aElkQXR0cmlidXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9Mb2FkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZERlbGF5OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9VcGRhdGVSb3V0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYXV0b09wZW5OZXh0VGFiOiBib29sZWFuO1xuICBwcml2YXRlIF9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGVGb3JtYXQ6IERhdGVGb3JtYXRQaXBlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZXJyb3JUcmFuc2xhdG9yOiBGb3JtRXJyb3JUcmFuc2xhdG9yO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW52aXJvbmVtZW50OiBFbnZpcm9ubWVudDtcblxuICBkYXRhOiBUO1xuICBzYXZpbmcgPSBmYWxzZTtcbiAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIGhpc3RvcnlJY29uOiB7aWNvbj86IHN0cmluZzsgbWF0SWNvbj86IHN0cmluZyB9O1xuXG4gICR0aXRsZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgb25VcGRhdGVWaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIGdldCB1c2FnZU1vZGUoKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fdXNhZ2VNb2RlO1xuICB9XG5cbiAgc2V0IHVzYWdlTW9kZSh2YWx1ZTogVXNhZ2VNb2RlKSB7XG4gICAgaWYgKHRoaXMuX3VzYWdlTW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNPbkZpZWxkTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc09uRmllbGRNb2RlKHRoaXMuX3VzYWdlTW9kZSk7XG4gIH1cblxuICBnZXQgaXNOZXdEYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLmRhdGE/LmlkKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2UoKTogUyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2U7XG4gIH1cblxuICBtYXJrQXNTYXZpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXtcbiAgICBpZiAoIXRoaXMuc2F2aW5nKSB7XG4gICAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7XG4gICAgaWYgKHRoaXMuc2F2aW5nKSB7XG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBkYXRhVHlwZTogbmV3KCkgPT4gVCxcbiAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U/OiBTLFxuICAgIEBPcHRpb25hbCgpIG9wdGlvbnM/OiBBcHBFZGl0b3JPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSksXG4gICAgICBpbmplY3Rvci5nZXQoUm91dGVyKSxcbiAgICAgIGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLFxuICAgICAgb3B0aW9ucyk7XG4gICAgdGhpcy5lbnZpcm9uZW1lbnQgPSBpbmplY3Rvci5nZXQoRU5WSVJPTk1FTlQpO1xuICAgIG9wdGlvbnMgPSA8QXBwRWRpdG9yT3B0aW9ucz57XG4gICAgICAvLyBEZWZhdWx0IG9wdGlvbnNcbiAgICAgIGVuYWJsZUxpc3RlbkNoYW5nZXM6IHRoaXMuZW52aXJvbmVtZW50LmVudGl0eUVkaXRvcj8uZW5hYmxlTGlzdGVuQ2hhbmdlcyB8fCBmYWxzZSwgLy8gRmFsc2UgIGJ5IGRlZmF1bHRcbiAgICAgIGxpc3RlbkludGVydmFsSW5TZWNvbmRzOiB0b051bWJlcih0aGlzLmVudmlyb25lbWVudC5lbnRpdHlFZGl0b3I/Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzLCAwKSwgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuICAgICAgcGF0aElkQXR0cmlidXRlOiAnaWQnLFxuICAgICAgYXV0b0xvYWQ6IHRydWUsXG4gICAgICBhdXRvVXBkYXRlUm91dGU6IHRydWUsXG4gICAgICBpMThuUHJlZml4OiAnJyxcblxuICAgICAgLy8gRm9sbG93aW5nIG9wdGlvbnMgYXJlIG92ZXJyaWRlIGluc2lkZSBuZ09uSW5pdCgpXG4gICAgICAvLyBhdXRvT3Blbk5leHRUYWI6IC4uLixcblxuICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdHNcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xuXG4gICAgdGhpcy5zZXR0aW5ncyA9IGluamVjdG9yLmdldChMb2NhbFNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0b3IgPSBpbmplY3Rvci5nZXQoRm9ybUVycm9yVHJhbnNsYXRvcik7XG4gICAgdGhpcy5jZCA9IGluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgdGhpcy5kYXRlRm9ybWF0ID0gaW5qZWN0b3IuZ2V0KERhdGVGb3JtYXRQaXBlKTtcbiAgICB0aGlzLnRvYXN0Q29udHJvbGxlciA9IGluamVjdG9yLmdldChUb2FzdENvbnRyb2xsZXIpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSBvcHRpb25zLmVuYWJsZUxpc3RlbkNoYW5nZXM7XG4gICAgdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMgPSBvcHRpb25zLmxpc3RlbkludGVydmFsSW5TZWNvbmRzO1xuICAgIHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSA9IG9wdGlvbnMucGF0aElkQXR0cmlidXRlO1xuICAgIHRoaXMuX2F1dG9Mb2FkID0gb3B0aW9ucy5hdXRvTG9hZDtcbiAgICB0aGlzLl9hdXRvTG9hZERlbGF5ID0gb3B0aW9ucy5hdXRvTG9hZERlbGF5O1xuICAgIHRoaXMuX2F1dG9VcGRhdGVSb3V0ZSA9IG9wdGlvbnMuYXV0b1VwZGF0ZVJvdXRlO1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IG9wdGlvbnMuYXV0b09wZW5OZXh0VGFiO1xuICAgIHRoaXMuaTE4bkNvbnRleHQgPSB7XG4gICAgICBwcmVmaXg6IG9wdGlvbnMuaTE4blByZWZpeCxcbiAgICAgIHN1ZmZpeDogJydcbiAgICB9O1xuXG4gICAgLy8gRk9SIERFViBPTkxZIC0tLS1cbiAgICAvL3RoaXMuZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBEZWZhdWx0c1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IHRvQm9vbGVhbih0aGlzLl9hdXRvT3Blbk5leHRUYWIsICF0aGlzLmlzT25GaWVsZE1vZGUpO1xuICAgIHRoaXMuaGlzdG9yeUljb24gPSB0aGlzLmhpc3RvcnlJY29uIHx8IHtpY29uOiAnbGlzdCd9O1xuXG4gICAgLy8gUmVnaXN0ZXIgZm9ybXNcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybXMoKTtcblxuICAgIC8vIERpc2FibGUgcGFnZSwgZHVyaW5nIGxvYWRcbiAgICB0aGlzLmRpc2FibGUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIC8vIExvYWQgZGF0YVxuICAgIGlmICh0aGlzLl9hdXRvTG9hZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWRGcm9tUm91dGUoKSwgdGhpcy5fYXV0b0xvYWREZWxheSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gbnVsbDsgLy8gYWxyZWFkeSB1bnN1YnNjcmliZSBpbiB0aGUgc3VwZXIgZnVuY3Rpb25cbiAgICB0aGlzLiR0aXRsZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuJHRpdGxlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uVXBkYXRlVmlldy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gV2FpdCBlbmQgb2Ygc2F2aW5nXG4gICAgaWYgKHRoaXMuc2F2aW5nKSByZXR1cm4gd2FpdEZvcigoKSA9PiB0aGlzLnNhdmluZyAhPT0gdHJ1ZSk7XG5cbiAgICByZXR1cm4gc3VwZXIud2FpdElkbGUob3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNuYXBzaG90IHJvdXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBsb2FkRnJvbVJvdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdDtcbiAgICBpZiAoIXJvdXRlIHx8IGlzTmlsT3JCbGFuayh0aGlzLl9wYXRoSWRBdHRyaWJ1dGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsb2FkIGZyb20gcm91dGU6IG1pc3NpbmcgXFwncm91dGVcXCcgb3IgXFwnb3B0aW9ucy5wYXRoSWRBdHRyaWJ1dGVcXCcuJyk7XG4gICAgfVxuICAgIGxldCBpZCA9IHJvdXRlLnBhcmFtc1t0aGlzLl9wYXRoSWRBdHRyaWJ1dGVdO1xuICAgIGlmIChpc05pbChpZCkgfHwgaWQgPT09ICduZXcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkKHVuZGVmaW5lZCwgcm91dGUucGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udmVydCBhcyBudW1iZXIsIGlmIG5lZWRcbiAgICAgIGlmIChpc0ludChpZCkpIHtcbiAgICAgICAgaWQgPSBwYXJzZUludChpZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5sb2FkKGlkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSBpZCwgdXNpbmcgdGhlIGRhdGFTZXJ2aWNlXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgbG9hZChpZD86IElELCBvcHRzPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zICYge1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgb3BlblRhYkluZGV4PzogbnVtYmVyO1xuICAgIHVwZGF0ZVJvdXRlPzogYm9vbGVhbjtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH0pIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNlcnZpY2UpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGxvYWQgZGF0YTogbWlzc2luZyBcXCdkYXRhU2VydmljZVxcJyEnKTtcblxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgLy8gTmV3IGRhdGFcbiAgICBpZiAoaXNOaWwoaWQpKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDcmVhdGUgdXNpbmcgZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbk5ld0VudGl0eShkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIHtcbiAgICAgICAgICBvcGVuVGFiSW5kZXg6IDAsXG4gICAgICAgICAgLi4ub3B0c1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQoaWQsIG9wdHMpO1xuICAgICAgICBpZiAoIWRhdGEpIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLkRBVEFfTk9UX0ZPVU5EX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREFUQV9OT19GT1VORCd9O1xuICAgICAgICB0aGlzLl91c2FnZU1vZGUgPSB0aGlzLmNvbXB1dGVVc2FnZU1vZGUoZGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlMb2FkZWQoZGF0YSwgb3B0cyk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyhkYXRhLCBvcHRzKTtcbiAgICAgICAgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7XG4gICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IFQsIG9wdHM/OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jYW5Vc2VyV3JpdGUoZGF0YSwgb3B0cyk7XG4gIH1cblxuICBzdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKSB7XG4gICAgLy8gU2tpcCBpZiBkaXNhYmxlLCBvciBhbHJlYWR5IGxpc3RlbmluZ1xuICAgIGlmICh0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uIHx8ICF0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzKSByZXR1cm47XG4gICAgLy8gU2tpcCBpZiBuZXcgb3IgbG9jYWwgZGF0YVxuICAgIGlmICh0aGlzLmlzTmV3RGF0YSB8fCBFbnRpdHlVdGlscy5pc0xvY2FsKHRoaXMuZGF0YSkpIHJldHVybjtcblxuICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlcyBvbiBzZXJ2ZXJcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW5DaGFuZ2VzKHRoaXMuZGF0YS5pZCwge1xuICAgICAgaW50ZXJ2YWw6IHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzXG4gICAgfSlcbiAgICAgIC5waXBlKGZpbHRlcihpc05vdE5pbCkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBUKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmV3ZXIgPSBpc01vbWVudChkYXRhLnVwZGF0ZURhdGUpICYmIGRhdGEudXBkYXRlRGF0ZS5pc0FmdGVyKHRoaXMuZGF0YS51cGRhdGVEYXRlKTtcbiAgICAgICAgaWYgKCFpc05ld2VyKSByZXR1cm47IC8vIFNraXBcblxuICAgICAgICAvLyBFZGl0b3IgaGFzIG5vIGNoYW5nZXM6IHJlbG9hZFxuICAgICAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2RhdGEtZWRpdG9yXSBDaGFuZ2VzIGRldGVjdGVkIG9uIHNlcnZlciwgYXQgeyR7ZGF0YS51cGRhdGVEYXRlfX06IHJlbG9hZGluZyBwYWdlLi4uYCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5ub3QgcmVsb2FkOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2RhdGEtZWRpdG9yXSBDaGFuZ2VzIGRldGVjdGVkIG9uIHNlcnZlciwgYXQgeyR7ZGF0YS51cGRhdGVEYXRlfX0sIGJ1dCBwYWdlIGlzIGRpcnR5OiBza2lwIHJlbG9hZGluZy5gKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ0VSUk9SLkRBVEFfVVBEQVRFX0RBVEVfQ0hBTkdFRCcsIHR5cGU6ICd3YXJuaW5nJywgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24uYWRkKCgpID0+IHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgc3RvcExpc3RlblJlbW90ZUNoYW5nZXMoKXtcbiAgICBpZiAodGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pO1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhkYXRhOiBUIHwgbnVsbCwgb3B0cz86IHtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICB1cGRhdGVSb3V0ZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZENoYW5nZWQgPSBpc05vdE5pbChkYXRhLmlkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gdW5kZWZpbmVkIC8vIElnbm9yZSBpZiBmaXJzdCBsb2FkaW5nICg9dW5kZWZpbmVkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gZGF0YS5pZDtcblxuICAgIG9wdHMgPSB7XG4gICAgICB1cGRhdGVSb3V0ZTogdGhpcy5fYXV0b1VwZGF0ZVJvdXRlICYmIGlkQ2hhbmdlZCAmJiAhdGhpcy5sb2FkaW5nLFxuICAgICAgb3BlblRhYkluZGV4OiB0aGlzLl9hdXRvT3Blbk5leHRUYWIgJiYgaWRDaGFuZ2VkICYmIGlzTmlsKHRoaXMucHJldmlvdXNEYXRhSWQpICYmIHRoaXMuY29tcHV0ZU5leHRUYWJJbmRleCgpLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucHJldmlvdXNEYXRhSWQgPSBkYXRhLmlkIHx8IG51bGw7XG5cbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgY29uc3QgcHJvbWlzZU9yVm9pZCA9IHRoaXMuc2V0VmFsdWUoZGF0YSk7XG4gICAgaWYgKHByb21pc2VPclZvaWQpIGF3YWl0IHByb21pc2VPclZvaWQ7XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoZGF0YSk7XG5cbiAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIHJvdXRlXG4gICAgICBpZiAob3B0cy51cGRhdGVSb3V0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYkFuZFJvdXRlKGRhdGEsIG9wdHMpXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZSAtIHNob3VsZCBiZSBleGVjdXRlZCBBRlRFUiB1cGRhdGVSb3V0ZSBiZWNhdXNlIG9mIHBhdGggY2hhbmdlIC0gZml4ICMxODVcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRpdGxlKGRhdGEpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG5leHQgdGFiXG4gICAgICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUuXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25VcGRhdGVWaWV3LmVtaXQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHN0YXRlXG4gICAqL1xuICB1cGRhdGVWaWV3U3RhdGUoZGF0YTogVCwgb3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmlzTmV3RGF0YSB8fCB0aGlzLmNhblVzZXJXcml0ZShkYXRhKSkge1xuICAgICAgdGhpcy5lbmFibGUob3B0cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlKG9wdHMpO1xuXG4gICAgICAvLyBBbGxvdyB0byBzb3J0IHRhYmxlXG4gICAgICB0aGlzLnRhYmxlcy5mb3JFYWNoKHQgPT4gdC5lbmFibGVTb3J0KCkpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUgbG9jYXRpb24sIGFuZCBvcGVuIHRoZSBuZXh0IHRhYlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVGFiQW5kUm91dGUoZGF0YTogVCwgb3B0cz86IHtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zIHx8IHt9O1xuXG4gICAgLy8gT3BlbiB0aGUgbmV4dCB0YWJcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KG9wdHMgJiYgb3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgLy8gU2F2ZSB0aGUgb3BlbmVkIHRhYiBpbnRvIHRoZSBxdWVyeVBhcmFtc1xuICAgIHRoaXMucXVlcnlQYXJhbXMudGFiID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xuXG4gICAgLy8gVXBkYXRlIHJvdXRlIGxvY2F0aW9uXG4gICAgaWYgKGlzTm90TmlsKGRhdGE/LmlkKSkge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7Li4udGhpcy5xdWVyeVBhcmFtc307XG4gICAgICBxdWVyeVBhcmFtc1t0aGlzLl9wYXRoSWRBdHRyaWJ1dGVdID0gZGF0YS5pZDtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tlbnRpdHktZWRpdG9yXSBVcGRhdGluZyByb3V0ZSB1c2luZyBwYXJhbXM6ICcsIHF1ZXJ5UGFyYW1zKVxuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gey4uLnRoaXMucXVlcnlQYXJhbXN9O1xuICAgICAgcXVlcnlQYXJhbXNbdGhpcy5fcGF0aElkQXR0cmlidXRlXSA9ICduZXcnO1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2VudGl0eS1lZGl0b3JdIFVwZGF0aW5nIHJvdXRlIHRvIFxcJy4uL25ld1xcJyB1c2luZyBwYXJhbXM6ICcsIHF1ZXJ5UGFyYW1zKVxuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsICduZXcnXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVSb3V0ZShkYXRhLCB0aGlzLnF1ZXJ5UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJvdXRlIGxvY2F0aW9uLCBhbmQgb3BlbiB0aGUgbmV4dCB0YWJcbiAgICovXG4gIHVwZGF0ZVRhYkluZGV4KHRhYkluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKGlzTm90TmlsKHRhYkluZGV4KSAmJiB0YWJJbmRleCAhPT0gdGhpcy5zZWxlY3RlZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0YWJJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZUFuZENsb3NlKGV2ZW50OiBFdmVudCwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUoZXZlbnQpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZShldmVudCk7XG4gICAgfVxuICAgIHJldHVybiBzYXZlZDtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ29CYWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgZWRpdG9yLCBieSBjYWxsaW5nIHRoZSBkYXRhU2VydmljZS5zYXZlKCkuXG4gICAqIEVuc3VyZSB0aGF0IGVkaXRvciBpZiB2YWxpZC4gSWYgbm90LCBkaXNwbGF5IGFuIGVycm9yXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgc2F2ZShldmVudD86IEV2ZW50LCBvcHRzPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnNhdmluZykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTa2lwIHNhdmU6IGVkaXRvciBpcyBidXN5IChsb2FkaW5nIG9yIHNhdmluZyknKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIG5vdCBkaXJ0eScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBlbmQgb2YgYXN5bmMgdmFsaWRhdGlvblxuICAgIGF3YWl0IHRoaXMud2FpdFdoaWxlUGVuZGluZygpO1xuXG4gICAgLy8gSWYgaW52YWxpZFxuICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5sb2dGb3JtRXJyb3JzKCk7XG4gICAgICB0aGlzLm9wZW5GaXJzdEludmFsaWRUYWIoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTYXZpbmcgZGF0YS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBkYXRhXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xuXG4gICAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgLy8gU2F2ZSBmb3JtXG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2Uuc2F2ZShkYXRhLCBvcHRzKTtcblxuICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eVNhdmVkKHVwZGF0ZWREYXRhKTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSB2aWV3IChlLmcgbWV0YWRhdGEpXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcodXBkYXRlZERhdGEsIG9wdHMpO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gcmVtb3RlIGNoYW5nZXNcbiAgICAgIGlmICghdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbikgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpOyAvLyBTY3JvbGwgdG8gdG9wICh0byBzaG93IGVycm9yKVxuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5lbmFibGUoKTtcblxuICAgICAgLy8gQ29uY3VycmVudCBjaGFuZ2Ugb24gcG9kXG4gICAgICBpZiAoZXJyLmNvZGUgPT09IFNlcnZlckVycm9yQ29kZXMuQkFEX1VQREFURV9EQVRFICYmIGlzTm90TmlsKHRoaXMuZGF0YS5pZCkpIHtcbiAgICAgICAgLy8gQ2FsbCBhIGRhdGEgcmVsb2FkIChpbiBiYWNrZ3JvdW5kKSwgdG8gdXBkYXRlIHRoZSBHcmFwaFFMIGNhY2hlLCBhbmQgYWxsb3cgdG8gY2FuY2VsIGNoYW5nZXNcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5sb2FkKHRoaXMuZGF0YS5pZCwge2ZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5J30pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gRGF0YSBjYWNoZSByZWxvYWRlZC4gVXNlciBjYW4gcmVsb2FkIHBhZ2UnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGRhdGEgKGlmIGRpcnR5IGFuZCB2YWxpZCksIGFuZCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIG5pbCB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIHNhdmVBbmRHZXREYXRhSWZWYWxpZCgpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBGb3JtIGlzIG5vdCB2YWxpZFxuICAgIGlmICghdGhpcy52YWxpZCkge1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdmFsaWRhdGlvbiBpcyBmaW5pc2hlZFxuICAgICAgYXdhaXQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcyk7XG5cbiAgICAgIC8vIElmIGludmFsaWQ6IE9wZW4gdGhlIGZpcnN0IHRhYiBpbiBlcnJvclxuICAgICAgaWYgKHRoaXMuaW52YWxpZCkge1xuICAgICAgICB0aGlzLm9wZW5GaXJzdEludmFsaWRUYWIoKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udGludWUgKHZhbGlkKVxuICAgIH1cblxuICAgIC8vIEZvcm0gaXMgdmFsaWQsIGJ1dCBub3Qgc2F2ZWRcbiAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUobmV3IEV2ZW50KCdzYXZlJykpO1xuICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZCBhbmQgc2F2ZWQgZGF0YVxuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZXZlbnQ/OiBVSUV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnNhdmluZykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgQWxlcnRzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAgIGlmICghY29uZmlybWF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIEFza2luZyB0byBkZWxldGUuLi4nKTtcblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBpc05ldyA9IHRoaXMuaXNOZXdEYXRhO1xuXG4gICAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgaWYgKCFpc05ldykge1xuICAgICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmRlbGV0ZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eURlbGV0ZWQoZGF0YSk7XG5cbiAgICAgIC8vIFJlbW92ZSBwYWdlIGhpc3RvcnlcbiAgICAgIHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkoKTtcblxuXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBXYWl0LCB0aGVuIGdvIGJhY2sgKHdhaXQgaXMgbmVlZCBpbiBvcmRlciB0byB1cGRhdGUgYmFjayBocmVmIGlzIG5lZWQpXG4gICAgYXdhaXQgc2V0VGltZW91dCgoKSA9PiB0aGlzLmdvQmFjaygpLCA1MDApO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyByZWxvYWQoKSB7XG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkKHRoaXMuZGF0YT8uaWQpO1xuICB9XG5cbiAgYXN5bmMgdW5sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RvcExpc3RlblJlbW90ZUNoYW5nZXMoKTtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybXMoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGdvQmFjayhldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4ge1xuICAgIC8vIEdvIGJhY2tcbiAgICBpZiAodGhpcy50b29sYmFyPy5jYW5Hb0JhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xiYXIuZ29CYWNrKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuZGVmYXVsdEJhY2tIcmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmRlZmF1bHRCYWNrSHJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcbiAgICB9XG4gIH1cblxuICByZXNldEVycm9yKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHRoaXMuZXJyb3IpKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RXJyb3IoZXJyOiBzdHJpbmcgfCBBcHBFcnJvcldpdGhEZXRhaWxzLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47IGRldGFpbHNDc3NDbGFzcz86IHN0cmluZzt9KSB7XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXR5LWVkaXRvcl0gRXJyb3I6ICcgKyAoZXJyIHx8ICcnKSk7XG4gICAgICB0aGlzLmVycm9yID0gZXJyIGFzIHN0cmluZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXR5LWVkaXRvcl0gRXJyb3I6ICcgKyBlcnIubWVzc2FnZSB8fCAnJywgZXJyKTtcbiAgICAgIGxldCB1c2VyTWVzc2FnZSA9IGVyci5tZXNzYWdlICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZXJyLm1lc3NhZ2UpIHx8IGVycjtcblxuICAgICAgLy8gQWRkIGRldGFpbHMgZXJyb3IgKGlmIGFueSkgdW5kZXIgdGhlIG1haW4gbWVzc2FnZVxuICAgICAgY29uc3QgZGV0YWlsTWVzc2FnZSA9ICghZXJyLmRldGFpbHMgfHwgdHlwZW9mIGVyci5kZXRhaWxzID09PSAnc3RyaW5nJylcbiAgICAgICAgPyBlcnIuZGV0YWlscyBhcyBzdHJpbmdcbiAgICAgICAgOiBlcnIuZGV0YWlscy5tZXNzYWdlO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhkZXRhaWxNZXNzYWdlKSkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG9wdHM/LmRldGFpbHNDc3NDbGFzcyB8fCAnaGlkZGVuLXhzIGhpZGRlbi1zbSc7XG4gICAgICAgIHVzZXJNZXNzYWdlICs9IGA8YnIvPjxzbWFsbCBjbGFzcz1cIiR7Y3NzQ2xhc3N9XCIgdGl0bGU9XCIke2RldGFpbE1lc3NhZ2V9XCI+YDtcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gZGV0YWlsTWVzc2FnZS5sZW5ndGggPCA3MCA/IGRldGFpbE1lc3NhZ2UgOiBkZXRhaWxNZXNzYWdlLnN1YnN0cmluZygwLCA2NykgKyAnLi4uJztcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gJzwvc21hbGw+JztcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3IgPSB1c2VyTWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBhYnN0cmFjdCBtZXRob2RzICh0byBvdmVycmlkZSkgLS0gKi9cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVnaXN0ZXJGb3JtcygpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb21wdXRlVGl0bGUoZGF0YTogVCk6IFByb21pc2U8c3RyaW5nPjtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0VmFsdWUoZGF0YTogVCk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgZm9ybSgpOiBGb3JtR3JvdXA7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk6IG51bWJlcjtcblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdW5kZWZpbmVkIHRvIGtlZXAgc2FtZSB0YWJcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbXB1dGVOZXh0VGFiSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuZXh0VGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXggKyAxO1xuICAgIHJldHVybiBuZXh0VGFiSW5kZXggPCB0aGlzLnRhYkNvdW50ID8gbmV4dFRhYkluZGV4IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uQmVmb3JlRW50aXR5TG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTmV3RW50aXR5KGRhdGE6IFQsIG9wdGlvbnM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5TG9hZGVkKGRhdGE6IFQsIG9wdGlvbnM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5U2F2ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlEZWxldGVkKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGVVc2FnZU1vZGUoZGF0YTogVCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaXNVc2FnZU1vZGUoJ0ZJRUxEJykgPyAnRklFTEQnIDogJ0RFU0snO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdhaXRXaGlsZVBlbmRpbmcob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCB0aGlzLmdldEpzb25WYWx1ZVRvU2F2ZSgpO1xuXG4gICAgY29uc3QgcmVzID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICByZXMuZnJvbU9iamVjdChqc29uKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SnNvblZhbHVlVG9TYXZlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHRpdGxlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlVGl0bGUoZGF0YT86IFQpIHtcbiAgICBkYXRhID0gZGF0YSB8fCB0aGlzLmRhdGE7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmNvbXB1dGVUaXRsZShkYXRhKTtcbiAgICB0aGlzLiR0aXRsZS5uZXh0KHRpdGxlKTtcblxuICAgIC8vIElmIE5PVCBkYXRhLCB0aGVuIGFkZCB0byBwYWdlIGhpc3RvcnlcbiAgICBpZiAoIXRoaXMuaXNOZXdEYXRhKSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5jb21wdXRlUGFnZUhpc3RvcnkodGl0bGUpO1xuICAgICAgcmV0dXJuIHRoaXMuYWRkVG9QYWdlSGlzdG9yeShwYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYWRkVG9QYWdlSGlzdG9yeShwYWdlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSwgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zKSB7XG4gICAgaWYgKCFwYWdlKSByZXR1cm47IC8vIFNraXBcblxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSwge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zOiB0cnVlLFxuICAgICAgcmVtb3ZlVGl0bGVTbWFsbFRhZzogdHJ1ZSxcbiAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPEhpc3RvcnlQYWdlUmVmZXJlbmNlPiB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdHktZWRpdG9yXSBDb21wdXRpbmcgcGFnZSBoaXN0b3J5LCB1c2luZyB1cmw6ICcgKyB0aGlzLnJvdXRlci51cmwpO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIHBhdGg6IHRoaXMucm91dGVyLnVybFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVtb3ZlUGFnZUhpc3Rvcnkob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVtb3ZlUGFnZUhpc3RvcnkodGhpcy5yb3V0ZXIudXJsLCBvcHRzKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGNvbXB1dGVQYWdlVXJsKGlkOiBJRHwnbmV3Jyk6IHN0cmluZyB8IGFueVtdIHtcbiAgICBjb25zdCBwYXJlbnRVcmwgPSB0aGlzLmdldFBhcmVudFBhZ2VVcmwoKTtcbiAgICByZXR1cm4gcGFyZW50VXJsICYmIGAke3BhcmVudFVybH0vJHtpZH1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhcmVudFBhZ2VVcmwod2l0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbikge1xuICAgIGxldCBwYXJlbnRVcmwgPSB0aGlzLmRlZmF1bHRCYWNrSHJlZjtcblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAod2l0aFF1ZXJ5UGFyYW1zICE9PSB0cnVlICYmIHBhcmVudFVybCAmJiBwYXJlbnRVcmwuaW5kZXhPZignPycpICE9PSAtMSkge1xuICAgICAgcGFyZW50VXJsID0gcGFyZW50VXJsLnN1YnN0cigwLCBwYXJlbnRVcmwuaW5kZXhPZignPycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50VXJsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RlbkNoYW5nZXMoaWQ6IElELCBvcHRzPzogYW55KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UubGlzdGVuQ2hhbmdlcyh0aGlzLmRhdGEuaWQsIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0byBza2lwIGNhY2hlLCBiZWNhdXNlIE5PVCB0aGUgZnVsbCBncmFwaCB3aWxsIGJlIGZldGNoZWQgYnkgc3Vic2NyaXB0aW9uXG4gICAgICAvLyBXaGVuIGEgY2hhbmdlcyBvY2N1ciwgd2UgY2FsbCByZWxvYWQoKSB0byBmb3JjZSByZWZldGNoaW5nIHRoZSBmdWxsIGdyYXBoXG4gICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJyxcbiAgICAgIC4uLm9wdHNcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZD8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBmaXJzdCB0YWIgdGhhdCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIG9wZW5GaXJzdEludmFsaWRUYWIoKSB7XG4gICAgY29uc3QgaW52YWxpZFRhYkluZGV4ID0gdGhpcy5nZXRGaXJzdEludmFsaWRUYWJJbmRleCgpO1xuICAgIGlmIChpbnZhbGlkVGFiSW5kZXggIT09IC0xICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gaW52YWxpZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpbnZhbGlkVGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVSb3V0ZShkYXRhOiBULCBxdWVyeVBhcmFtczogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBhZ2VVcmwoaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkIDogJ25ldycpO1xuICAgIGNvbnN0IGNvbW1hbmRzOiBhbnlbXSA9IChwYXRoICYmIHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgPyBwYXRoLnNwbGl0KCcvJykgOiBwYXRoIGFzIGFueVtdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoY29tbWFuZHMpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignU2tpcCBwYWdlIHJvdXRlIHVwZGF0ZS4gSW52YWxpZCBwYWdlIHBhdGg6ICcsIHBhdGgpO1xuICAgIH1cbiAgfVxuXG5cbn1cbiJdfQ==
|
|
@@ -24525,18 +24525,22 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
24525
24525
|
// Save the opened tab into the queryParams
|
|
24526
24526
|
this.queryParams.tab = this.selectedTabIndex;
|
|
24527
24527
|
// Update route location
|
|
24528
|
-
|
|
24529
|
-
|
|
24530
|
-
|
|
24528
|
+
if (isNotNil(data === null || data === void 0 ? void 0 : data.id)) {
|
|
24529
|
+
const queryParams = Object.assign({}, this.queryParams);
|
|
24530
|
+
queryParams[this._pathIdAttribute] = data.id;
|
|
24531
|
+
console.debug('[entity-editor] Updating route using params: ', queryParams);
|
|
24531
24532
|
yield this.router.navigate(['.'], {
|
|
24532
24533
|
relativeTo: this.route,
|
|
24533
|
-
queryParams
|
|
24534
|
+
queryParams
|
|
24534
24535
|
});
|
|
24535
24536
|
}
|
|
24536
24537
|
else {
|
|
24538
|
+
const queryParams = Object.assign({}, this.queryParams);
|
|
24539
|
+
queryParams[this._pathIdAttribute] = 'new';
|
|
24540
|
+
console.debug('[entity-editor] Updating route to \'../new\' using params: ', queryParams);
|
|
24537
24541
|
yield this.router.navigate(['..', 'new'], {
|
|
24538
24542
|
relativeTo: this.route,
|
|
24539
|
-
queryParams
|
|
24543
|
+
queryParams
|
|
24540
24544
|
});
|
|
24541
24545
|
}
|
|
24542
24546
|
yield this.updateRoute(data, this.queryParams);
|
|
@@ -24546,7 +24550,7 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
24546
24550
|
* Update the route location, and open the next tab
|
|
24547
24551
|
*/
|
|
24548
24552
|
updateTabIndex(tabIndex) {
|
|
24549
|
-
if (isNotNil(tabIndex) && tabIndex
|
|
24553
|
+
if (isNotNil(tabIndex) && tabIndex !== this.selectedTabIndex) {
|
|
24550
24554
|
this.selectedTabIndex = tabIndex;
|
|
24551
24555
|
this.markForCheck();
|
|
24552
24556
|
}
|
|
@@ -24842,6 +24846,8 @@ class AppEntityEditor extends AppTabEditor {
|
|
|
24842
24846
|
}
|
|
24843
24847
|
computePageHistory(title) {
|
|
24844
24848
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24849
|
+
if (this.debug)
|
|
24850
|
+
console.debug('[entity-editor] Computing page history, using url: ' + this.router.url);
|
|
24845
24851
|
return {
|
|
24846
24852
|
title,
|
|
24847
24853
|
path: this.router.url
|