ngx-histaff-alpha 4.3.2 → 4.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/app/libraries/core-page-view/core-page-view/core-page-view.component.mjs +3 -3
- package/esm2022/lib/app/libraries/services/recursive.service.mjs +3 -2
- package/esm2022/lib/app/libraries/staffprofile/staffprofile.component.mjs +3 -3
- package/fesm2022/ngx-histaff-alpha.mjs +6 -5
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/services/recursive.service.d.ts +1 -1
- package/package.json +1 -1
package/esm2022/lib/app/libraries/core-page-view/core-page-view/core-page-view.component.mjs
CHANGED
|
@@ -25,7 +25,7 @@ export class CorePageViewComponent extends BaseComponent {
|
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CorePageViewComponent, deps: [{ token: i1.MultiLanguageService }, { token: i2.LayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CorePageViewComponent, isStandalone: true, selector: "core-page-view", inputs: { caption: "caption", sections: "sections", highlightedFields: "highlightedFields", hightlightedColor: "hightlightedColor", loading: "loading", showLeftLine: "showLeftLine" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-page-view-container\">\r\n <core-loading-surface [loading]=\"loading\"></core-loading-surface>\r\n\r\n <div [class.show-left-line]=\"showLeftLine\">\r\n <div class=\"sections-wrapper\">\r\n\r\n @for (section of sections; track section) {\r\n <div class=\"section\">\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"icon-info\"></div>\r\n <label>{{ section.caption | translate : lang }}</label>\r\n </div>\r\n\r\n @for (row of section.rows; track row) {\r\n <div class=\"row mb15 no-padding no-margin\">\r\n @for (item of row; track $index) {\r\n <div [class]=\"'col-md-' + (item.labelFlexSize + item.flexSize)\">\r\n <div class=\"form-group vertical\" [ngStyle]=\"{\r\n backgroundColor: formGroupBackgroundColor\r\n }\">\r\n <div [appTooltip]=\"item.label | translate : lang\" class=\"label\">{{ item.label | translate : lang }}\r\n @if (!!item.hint!) {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"item.hint!\"></i>\r\n }\r\n :\r\n </div>\r\n <div [appTooltip]=\"item.value | tableCell : item.pipe : lang\" class=\"content\" [class.hightlighted]=\"highlightedFields.includes(item.field!)\">\r\n {{ item.value | tableCell : item.pipe : lang }}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".core-page-view-container{--color-hightlighted: var(--color-basic-orange)
|
|
28
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CorePageViewComponent, isStandalone: true, selector: "core-page-view", inputs: { caption: "caption", sections: "sections", highlightedFields: "highlightedFields", hightlightedColor: "hightlightedColor", loading: "loading", showLeftLine: "showLeftLine" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-page-view-container\">\r\n <core-loading-surface [loading]=\"loading\"></core-loading-surface>\r\n\r\n <div [class.show-left-line]=\"showLeftLine\">\r\n <div class=\"sections-wrapper\">\r\n\r\n @for (section of sections; track section) {\r\n <div class=\"section\">\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"icon-info\"></div>\r\n <label>{{ section.caption | translate : lang }}</label>\r\n </div>\r\n\r\n @for (row of section.rows; track row) {\r\n <div class=\"row mb15 no-padding no-margin\">\r\n @for (item of row; track $index) {\r\n <div [class]=\"'col-md-' + (item.labelFlexSize + item.flexSize)\">\r\n <div class=\"form-group vertical\" [ngStyle]=\"{\r\n backgroundColor: formGroupBackgroundColor\r\n }\">\r\n <div [appTooltip]=\"item.label | translate : lang\" class=\"label\">{{ item.label | translate : lang }}\r\n @if (!!item.hint!) {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"item.hint!\"></i>\r\n }\r\n :\r\n </div>\r\n <div [appTooltip]=\"item.value | tableCell : item.pipe : lang\" class=\"content\" [class.hightlighted]=\"highlightedFields.includes(item.field!)\">\r\n {{ item.value | tableCell : item.pipe : lang }}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".core-page-view-container{--color-hightlighted: var(--color-basic-orange);font-size:13px}.core-page-view-container .vertical{margin-top:0;margin-bottom:10px}.core-page-view-container .row .label{width:100%;font-weight:400;line-height:20px;color:#a3a3a3;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:5px 8px 0 5px}.core-page-view-container .row .content{height:28px;width:100%;font-weight:400;line-height:20px;color:#000;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 8px 5px 5px}.core-page-view-container .row .content.hightlighted{color:var(--color-hightlighted)}.core-page-view-container .sections-wrapper{margin:0 5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }] }); }
|
|
29
29
|
}
|
|
30
30
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CorePageViewComponent, decorators: [{
|
|
31
31
|
type: Component,
|
|
@@ -36,7 +36,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
36
36
|
TableCellPipe,
|
|
37
37
|
CoreLoadingSurfaceComponent,
|
|
38
38
|
TooltipDirective
|
|
39
|
-
], template: "<div #container class=\"core-page-view-container\">\r\n <core-loading-surface [loading]=\"loading\"></core-loading-surface>\r\n\r\n <div [class.show-left-line]=\"showLeftLine\">\r\n <div class=\"sections-wrapper\">\r\n\r\n @for (section of sections; track section) {\r\n <div class=\"section\">\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"icon-info\"></div>\r\n <label>{{ section.caption | translate : lang }}</label>\r\n </div>\r\n\r\n @for (row of section.rows; track row) {\r\n <div class=\"row mb15 no-padding no-margin\">\r\n @for (item of row; track $index) {\r\n <div [class]=\"'col-md-' + (item.labelFlexSize + item.flexSize)\">\r\n <div class=\"form-group vertical\" [ngStyle]=\"{\r\n backgroundColor: formGroupBackgroundColor\r\n }\">\r\n <div [appTooltip]=\"item.label | translate : lang\" class=\"label\">{{ item.label | translate : lang }}\r\n @if (!!item.hint!) {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"item.hint!\"></i>\r\n }\r\n :\r\n </div>\r\n <div [appTooltip]=\"item.value | tableCell : item.pipe : lang\" class=\"content\" [class.hightlighted]=\"highlightedFields.includes(item.field!)\">\r\n {{ item.value | tableCell : item.pipe : lang }}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".core-page-view-container{--color-hightlighted: var(--color-basic-orange)
|
|
39
|
+
], template: "<div #container class=\"core-page-view-container\">\r\n <core-loading-surface [loading]=\"loading\"></core-loading-surface>\r\n\r\n <div [class.show-left-line]=\"showLeftLine\">\r\n <div class=\"sections-wrapper\">\r\n\r\n @for (section of sections; track section) {\r\n <div class=\"section\">\r\n <div class=\"section-header-label\" *ngIf=\"section.caption\">\r\n <div class=\"icon-info\"></div>\r\n <label>{{ section.caption | translate : lang }}</label>\r\n </div>\r\n\r\n @for (row of section.rows; track row) {\r\n <div class=\"row mb15 no-padding no-margin\">\r\n @for (item of row; track $index) {\r\n <div [class]=\"'col-md-' + (item.labelFlexSize + item.flexSize)\">\r\n <div class=\"form-group vertical\" [ngStyle]=\"{\r\n backgroundColor: formGroupBackgroundColor\r\n }\">\r\n <div [appTooltip]=\"item.label | translate : lang\" class=\"label\">{{ item.label | translate : lang }}\r\n @if (!!item.hint!) {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"item.hint!\"></i>\r\n }\r\n :\r\n </div>\r\n <div [appTooltip]=\"item.value | tableCell : item.pipe : lang\" class=\"content\" [class.hightlighted]=\"highlightedFields.includes(item.field!)\">\r\n {{ item.value | tableCell : item.pipe : lang }}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n</div>", styles: [".core-page-view-container{--color-hightlighted: var(--color-basic-orange);font-size:13px}.core-page-view-container .vertical{margin-top:0;margin-bottom:10px}.core-page-view-container .row .label{width:100%;font-weight:400;line-height:20px;color:#a3a3a3;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:5px 8px 0 5px}.core-page-view-container .row .content{height:28px;width:100%;font-weight:400;line-height:20px;color:#000;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 8px 5px 5px}.core-page-view-container .row .content.hightlighted{color:var(--color-hightlighted)}.core-page-view-container .sections-wrapper{margin:0 5px}\n"] }]
|
|
40
40
|
}], ctorParameters: () => [{ type: i1.MultiLanguageService }, { type: i2.LayoutService }], propDecorators: { container: [{
|
|
41
41
|
type: ViewChild,
|
|
42
42
|
args: ['container']
|
|
@@ -53,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
53
53
|
}], showLeftLine: [{
|
|
54
54
|
type: Input
|
|
55
55
|
}] } });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS12aWV3L2NvcmUtcGFnZS12aWV3L2NvcmUtcGFnZS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2Utdmlldy9jb3JlLXBhZ2Utdmlldy9jb3JlLXBhZ2Utdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFpQjVELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxhQUFhO0lBYXRELFlBQ2tCLEdBQXlCLEVBQ2pDLGFBQTRCO1FBRXBDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUhLLFFBQUcsR0FBSCxHQUFHLENBQXNCO1FBQ2pDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBVDdCLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUsxQyw2QkFBd0IsR0FBVyxPQUFPLENBQUM7UUFPekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxDQUMzRyxDQUFBO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO2FBQy9GO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzhHQTdCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQixpWUMxQmxDLHFtREF1Q00sa3ZCRHZCRixJQUFJLDZGQUNKLE9BQU8sc0VBQ1AsYUFBYSw2Q0FDYixhQUFhLGtEQUNiLDJCQUEyQixnR0FDM0IsZ0JBQWdCOzsyRkFLUCxxQkFBcUI7a0JBZGpDLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQO3dCQUNQLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsMkJBQTJCO3dCQUMzQixnQkFBZ0I7cUJBQ2pCO3FIQU11QixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBRWIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElDb3JlVmlld1NlY3Rpb24gfSBmcm9tICcuLi9lbnVtLWludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmFzZS1jb21wb25lbnQvYmFzZS9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBOZ0lmLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGFibGVDZWxsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RhYmxlLWNlbGwucGlwZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtcGFnZS12aWV3JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nSWYsXHJcbiAgICBOZ1N0eWxlLFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICAgIFRhYmxlQ2VsbFBpcGUsXHJcbiAgICBDb3JlTG9hZGluZ1N1cmZhY2VDb21wb25lbnQsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1wYWdlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtcGFnZS12aWV3LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdlVmlld0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpIGNhcHRpb24hOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25zITogSUNvcmVWaWV3U2VjdGlvbltdO1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGhpZ2h0bGlnaHRlZENvbG9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dMZWZ0TGluZSE6IGJvb2xlYW47XHJcblxyXG4gIGZvcm1Hcm91cEJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJ3doaXRlJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIobWxzKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2VWaWV3Rm9ybUdyb3VwQmFja2dyb3VuZENvbG9yJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmZvcm1Hcm91cEJhY2tncm91bmRDb2xvciA9IHgpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCEhdGhpcy5oaWdodGxpZ2h0ZWRDb2xvciAmJiAhIXRoaXMuaGlnaHRsaWdodGVkQ29sb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jb2xvci1oaWdodGxpZ2h0ZWQnLCB0aGlzLmhpZ2h0bGlnaHRlZENvbG9yKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1wYWdlLXZpZXctY29udGFpbmVyXCI+XHJcbiAgPGNvcmUtbG9hZGluZy1zdXJmYWNlIFtsb2FkaW5nXT1cImxvYWRpbmdcIj48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG5cclxuICA8ZGl2IFtjbGFzcy5zaG93LWxlZnQtbGluZV09XCJzaG93TGVmdExpbmVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy13cmFwcGVyXCI+XHJcblxyXG4gICAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWxhYmVsXCIgKm5nSWY9XCJzZWN0aW9uLmNhcHRpb25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWluZm9cIj48L2Rpdj5cclxuICAgICAgICAgIDxsYWJlbD57eyBzZWN0aW9uLmNhcHRpb24gfCB0cmFuc2xhdGUgOiBsYW5nIH19PC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgQGZvciAocm93IG9mIHNlY3Rpb24ucm93czsgdHJhY2sgcm93KSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYjE1IG5vLXBhZGRpbmcgbm8tbWFyZ2luXCI+XHJcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIHJvdzsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyAoaXRlbS5sYWJlbEZsZXhTaXplICsgaXRlbS5mbGV4U2l6ZSlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdmVydGljYWxcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogZm9ybUdyb3VwQmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBbYXBwVG9vbHRpcF09XCJpdGVtLmxhYmVsIHwgdHJhbnNsYXRlIDogbGFuZ1wiIGNsYXNzPVwibGFiZWxcIj57eyBpdGVtLmxhYmVsIHwgdHJhbnNsYXRlIDogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgQGlmICghIWl0ZW0uaGludCEpIHtcclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWhlbHAtY2lyY2xlXCIgW2FwcFRvb2x0aXBdPVwiaXRlbS5oaW50IVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBbYXBwVG9vbHRpcF09XCJpdGVtLnZhbHVlIHwgdGFibGVDZWxsIDogaXRlbS5waXBlIDogbGFuZ1wiIGNsYXNzPVwiY29udGVudFwiIFtjbGFzcy5oaWdodGxpZ2h0ZWRdPVwiaGlnaGxpZ2h0ZWRGaWVsZHMuaW5jbHVkZXMoaXRlbS5maWVsZCEpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBpdGVtLnZhbHVlIHwgdGFibGVDZWxsIDogaXRlbS5waXBlIDogbGFuZyB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -345,7 +345,7 @@ export class RecursiveService {
|
|
|
345
345
|
observer.next();
|
|
346
346
|
});
|
|
347
347
|
}
|
|
348
|
-
buildTreeData(cloneCopy) {
|
|
348
|
+
buildTreeData(cloneCopy, orderBy = 'orderNum') {
|
|
349
349
|
return new Promise((resolve, reject) => {
|
|
350
350
|
let nestedItems = [];
|
|
351
351
|
if (typeof Worker !== 'undefined') {
|
|
@@ -364,6 +364,7 @@ export class RecursiveService {
|
|
|
364
364
|
titleField: 'name',
|
|
365
365
|
parentField: 'parentId',
|
|
366
366
|
activeField: 'active',
|
|
367
|
+
orderBy: orderBy,
|
|
367
368
|
//inheritantActiveField: 'inheritantActive',
|
|
368
369
|
checkedField: 'checked',
|
|
369
370
|
expandedField: 'expand',
|
|
@@ -464,4 +465,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
464
465
|
providedIn: 'root'
|
|
465
466
|
}]
|
|
466
467
|
}] });
|
|
467
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaXZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUUvRSxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzdCLDhDQUF1QixDQUFBO0lBQ3ZCLGdEQUF5QixDQUFBO0lBQ3pCLGtEQUEyQixDQUFBO0FBQzdCLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCO0FBK0JELE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0I7Ozs7O01BS0U7SUFFRix1QkFBdUIsQ0FDckIsSUFBVyxFQUNYLFFBQWdCLEVBQ2hCLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGNBQXNCLG1CQUFtQixDQUFDLFlBQVksRUFDdEQsZUFBdUIsbUJBQW1CLENBQUMsYUFBYSxFQUN4RCxnQkFBd0IsbUJBQW1CLENBQUMsY0FBYyxFQUMxRCxTQUFrQyxJQUFJLEVBQ3RDLFVBQWtCLFVBQVU7UUFHNUI7Ozs7O1VBS0U7UUFDRixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFHaEIsT0FBTyxJQUFJLFVBQVUsQ0FBTSxRQUFRLENBQUMsRUFBRTtZQUNwQzs7O2NBR0U7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUVkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxD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QU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXBDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV4QixDQUFDOzhHQXppQlUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93ayc7XHJcblxyXG5leHBvcnQgZW51bSBFbnVtUmVjdXJzaXZlRmllbGRzIHtcclxuICBBQ1RJVkVfRklFTEQgPSAnYWN0aXZlJyxcclxuICBDSEVDS0VEX0ZJRUxEID0gJ2NoZWNrZWQnLFxyXG4gIEVYUEFOREVEX0ZJRUxEID0gJ2V4cGFuZGVkJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFdmVyeVRyZWVTdGF0dXMge1xyXG4gIHNlbGVjdGVkS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgYWN0aXZlS2V5czogc3RyaW5nW107XHJcbiAgY2hlY2tlZEtleXM/OiBzdHJpbmdbXTtcclxuICBleHBhbmRlZEtleXM6IHN0cmluZ1tdO1xyXG4gIGNoZWNrSW5oZXJpdGFuY2U/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZWN1cnNpdmVTZXJ2aWNlSXRlbSB7XHJcbiAgdHJlZSRLZXk6IHN0cmluZztcclxuICB0cmVlJFRpdGxlOiBzdHJpbmc7XHJcbiAgdHJlZSRQYXJlbnQ6IHN0cmluZztcclxuICB0cmVlJENoaWxkcmVuOiBJUmVjdXJzaXZlU2VydmljZUl0ZW1bXTtcclxuICB0cmVlJFRpZXI6IG51bWJlcjtcclxuICB0cmVlJFBhdGg6IHN0cmluZztcclxuICB0cmVlJEhhc0NoaWxkcmVuOiBib29sZWFuO1xyXG4gIHRyZWUkSGFzQWN0aXZlQ2hpbGRyZW46IGJvb2xlYW47XHJcbiAgdHJlZSRIYXNHcmFuZGNoaWxkcmVuOiBib29sZWFuO1xyXG4gIHRyZWUkRXhwYW5kZWQ/OiBib29sZWFuO1xyXG4gIHRyZWUkQWN0aXZlPzogYm9vbGVhbjtcclxuICB0cmVlJEhpZ2hsaWdodGVkPzogYm9vbGVhbjtcclxuICB0cmVlJEluaGVyaXRhbnRBY3RpdmU/OiBib29sZWFuO1xyXG4gIHRyZWUkQ2hlY2tlZD86IGJvb2xlYW47XHJcbiAgdHJlZSRTZWxlY3RlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlY3Vyc2l2ZVNlcnZpY2Uge1xyXG5cclxuICAvKlxyXG4gICAgbGlzdDogaW5wdXQgYXJyYXkgb2YgbGluZXIgaXRlbXNcclxuICAgIGtleUZpZWxkOiBuYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHdpbGwgYmUgdXNlZCBhcyBub2RlIGtleSAoaWQsIGtleSwgY29kZSwuLi4pXHJcbiAgICB0aXRsZUZpZWxkOiBuYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHdpbGwgYmUgdXNlZCBhcyBub2RlIHRpdGxlICh0aXRsZSwgY2FwdGlvbiwgdGV4dCwuLi4pXHJcbiAgICBwYXJlbnRGaWVsZDogbmFtZSBvZiB0aGUgZmllbGQgdGhhdCBob2xkcyBwYXJlbnQgdmFsdWUgKHBhcmVudCwgcGFyZW50SWQsLi4uKVxyXG4gICovXHJcblxyXG4gIGxpbmVyQXJyYXlUb05lc3RlZEFycmF5KFxyXG4gICAgbGlzdDogYW55W10sXHJcbiAgICBrZXlGaWVsZDogc3RyaW5nLFxyXG4gICAgdGl0bGVGaWVsZDogc3RyaW5nLFxyXG4gICAgcGFyZW50RmllbGQ6IHN0cmluZyxcclxuICAgIGFjdGl2ZUZpZWxkOiBzdHJpbmcgPSBFbnVtUmVjdXJzaXZlRmllbGRzLkFDVElWRV9GSUVMRCxcclxuICAgIGNoZWNrZWRGaWVsZDogc3RyaW5nID0gRW51bVJlY3Vyc2l2ZUZpZWxkcy5DSEVDS0VEX0ZJRUxELFxyXG4gICAgZXhwYW5kZWRGaWVsZDogc3RyaW5nID0gRW51bVJlY3Vyc2l2ZUZpZWxkcy5FWFBBTkRFRF9GSUVMRCxcclxuICAgIHN0YXR1czogSUV2ZXJ5VHJlZVN0YXR1cyB8IG51bGwgPSBudWxsLFxyXG4gICAgb3JkZXJCeTogc3RyaW5nID0gdGl0bGVGaWVsZCxcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgIC8qIFxyXG4gICAgICBJbnB1dCBsaXN0IHdpbGwgYmUgcmVmYWN0b3JlZCBhbmQgcmV0dXJuZWQgYXMgZnVuY3Rpb24gb3V0cHV0LlxyXG4gICAgICBXZSBuZWVkIHRvIG1ha2UgYSBzaGFsbG93IGNvcHkgb2YgaW5wdXQgbGlzdCBmb3IgaW5kZXhpbmcgdW50aWwgZG9uZSxcclxuICAgICAgKGJ1dCBpdGVtcyByZWZmZXJlbmNlcyBzdGF5IHRoZSBzYW1lKSxcclxuICAgICAgYmVjYXVzZSBkdXJpbmcgbG9vcHMgaXRlbXMgb2YgbGlzdCBtaWdodCBiZSBtb3ZlZCBzb21ld2hlcmUgZWxzZVxyXG4gICAgKi9cclxuICAgIGNvbnN0IGxpc3RPcmlnaW5hbENvcHkgPSBbLi4ubGlzdF07XHJcbiAgICBsZXQgbWF4VGllciA9IDA7XHJcblxyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmVyID0+IHtcclxuICAgICAgLyogXHJcbiAgICAgICAgQSB0cnkgdG8gYnlwYXNzIGNhc2VzIG9mIHBvc3NpYmxlIG92ZXJ3cml0aW5nIFxyXG4gICAgICAgIFdpdGggdGhlIHByZWZpeCBcInRyZWUkXCIgSSBob3BlIHRoYXQgdGhlIHByb2JhYmlsaXR5IGlzIGxvdyBlbm91Z2hcclxuICAgICAgKi9cclxuICAgICAgbGlzdC5tYXAoaXRlbSA9PiB7XHJcblxyXG4gICAgICAgIGl0ZW0udHJlZSRLZXkgPSBpdGVtW2tleUZpZWxkXTtcclxuICAgICAgICBpdGVtLnRyZWUkVGl0bGUgPSBpdGVtW3RpdGxlRmllbGRdO1xyXG4gICAgICAgIGl0ZW0udHJlZSRQYXJlbnQgPSBpdGVtW3BhcmVudEZpZWxkXTtcclxuICAgICAgICBpdGVtLnRyZWUkQ2hpbGRyZW4gPSBbXTtcclxuXHJcbiAgICAgICAgLy9leHRyYXNcclxuICAgICAgICBpdGVtLnRyZWUkVGllciA9IDE7XHJcbiAgICAgICAgaXRlbS50cmVlJFBhdGggPSAnLicgKyBpdGVtLnRyZWUkS2V5O1xyXG4gICAgICAgIGl0ZW0udHJlZSRIYXNDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0udHJlZSRIYXNBY3RpdmVDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0udHJlZSRIYXNHcmFuZGNoaWxkcmVuID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbS50cmVlJEhpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbS50cmVlJFNlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghISFzdGF0dXMpIHtcclxuICAgICAgICAgIGl0ZW0udHJlZSRFeHBhbmRlZCA9IGl0ZW1bZXhwYW5kZWRGaWVsZCFdIHx8ICEhaXRlbS5wcm90ZWN0ZWQ7XHJcbiAgICAgICAgICBpdGVtLnRyZWUkQWN0aXZlID0gaXRlbVthY3RpdmVGaWVsZCFdO1xyXG4gICAgICAgICAgaXRlbS50cmVlJENoZWNrZWQgPSBpdGVtW2NoZWNrZWRGaWVsZCFdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpdGVtLnRyZWUkRXhwYW5kZWQgPSBzdGF0dXMuZXhwYW5kZWRLZXlzLmluY2x1ZGVzKGl0ZW0udHJlZSRLZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICBpdGVtLnRyZWUkQWN0aXZlID0gc3RhdHVzLmFjdGl2ZUtleXMuaW5jbHVkZXMoaXRlbS50cmVlJEtleS50b1N0cmluZygpKTtcclxuICAgICAgICAgIGl0ZW0udHJlZSRDaGVja2VkID0gc3RhdHVzLmNoZWNrZWRLZXlzPy5pbmNsdWRlcyhpdGVtLnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIGNvbnN0IHJhd0xpc3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAgVGhlIEFsZ29yaXRobTpcclxuICBcclxuICAgICAgICBAUmVjdXJzaXZlIGZ1bmN0aW9uIFwibG9vcFwiOlxyXG4gICAgICAgIC0gSXQgdGFrZXMgb25lIGFyZ3VtZW50IGFzIGN1cnJlbnQgcGFyZW50LCB3aGljaCB3ZSBuZWVkIHRvIGFkZCBjaGlsZHJlbiB0b1xyXG4gICAgICAgIC0gVGhlIGNoaWxkcmVuIGFyZSBzZWxlY3RlZCBmcm9tIHRoZSBsaW5lciBpbnB1dCBsaXN0IHdpdGggZmlsdGVyKCkgbWV0aG9kXHJcbiAgICAgICAgLSBBZnRlciBiZWluZyBhZGRlZCwgdGhlIGNoaWxkcmVuIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaW5lciBsaXN0IHdpdGggc3BsaWNlKCkgbWV0aG9kXHJcbiAgICAgICAgQFRoZSByZWN1cnNpdmUgZnVuY3Rpb24gXCJsb29wXCIgY2FsbHMgaXRzZWxmOlxyXG4gICAgICAgIC0gV2hpbGUgbWFwcGluZyBpdHMgdHJlZSRDaGlsZHJlblxyXG4gICAgICAgIC0gVGhpcyB0aW1lIGVhY2ggaXRlbSBvZiB0aGUgY2hpbGRyZW4gd2lsbCBoYXZlIHJvbGUgb2YgY3VycmVudCBwYXJlbnQsIGFuZCBzbyBvblxyXG4gICAgICAgIEAgVGhlIGZpcnN0IGNhbGxzOlxyXG4gICAgICAgIC0gTWFwcGluZyB0aGUgbGluZXIgaW5wdXQgYXJyYXkgYW5kIGNhbGwgdGhlIGxvb3Agd2l0aCBlYWNoIG9mIHRoZSBpdGVtc1xyXG4gICAgICAqL1xyXG5cclxuICAgICAgY29uc3Qgc29ydEZuID0gKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGFbb3JkZXJCeV0gPiBiW29yZGVyQnldKSByZXR1cm4gMTtcclxuICAgICAgICBpZiAoYVtvcmRlckJ5XSA9PT0gYltvcmRlckJ5XSkgcmV0dXJuIDA7XHJcbiAgICAgICAgaWYgKGFbb3JkZXJCeV0gPCBiW29yZGVyQnldKSByZXR1cm4gLTE7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBjb25zdCBsb29wID0gKGN1cnJlbnRQYXJlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGN1cnJlbnRQYXJlbnQudHJlZSRLZXk7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdCBjaGlsZHJlbiBmb3IgY3VycmVudFBhcmVudCBcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGxpc3QuZmlsdGVyKGMgPT4gYy50cmVlJFBhcmVudCA9PT0ga2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjdXJyZW50UGFyZW50LnRyZWUkSGFzQ2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gYWxzbyB1cGRhdGUgbGluZXIgaXRlbVxyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gcmF3TGlzdC5maWx0ZXIoKHg6IGFueSkgPT4geC50cmVlJEtleSA9PT0ga2V5KVxyXG4gICAgICAgICAgaWYgKCEhZmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJbMF0udHJlZSRIYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdXBkYXRlIGdyYW5kcGEgaWYgYW55XHJcbiAgICAgICAgICBjb25zdCBncmFuZHBhcmVudHMgPSBsaXN0T3JpZ2luYWxDb3B5LmZpbHRlcih4ID0+IHgudHJlZSRLZXkgPT09IGN1cnJlbnRQYXJlbnQudHJlZSRQYXJlbnQpO1xyXG4gICAgICAgICAgaWYgKCEhZ3JhbmRwYXJlbnRzLmxlbmd0aCkgZ3JhbmRwYXJlbnRzWzBdLnRyZWUkSGFzR3JhbmRjaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZWxlY3QgY2hpbGRyZW4gZm9yIGN1cnJlbnRQYXJlbnQgXHJcbiAgICAgICAgY29uc3QgYWN0aXZlQ2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoKGM6IGFueSkgPT4gISFjLmlzQWN0aXZlKTtcclxuICAgICAgICBpZiAoISFhY3RpdmVDaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQudHJlZSRIYXNBY3RpdmVDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChpIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LnRyZWUkQ2hpbGRyZW4ucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBsaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGkgPSBjdXJyZW50UGFyZW50LnRyZWUkQ2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICBpZiAoaSA8IGN1cnJlbnRQYXJlbnQudHJlZSRDaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGN1cnJlbnRQYXJlbnQudHJlZSRDaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICBsb29wKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5FVyBDSEFOR0UgT04gU2VwIDNyZCAyMDIzXHJcbiAgICAgIGNvbnN0IGxvb3BVcGRhdGVUaWVyQW5kUGF0aCA9IChjdXJyZW50UGFyZW50OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB0aWVyID0gY3VycmVudFBhcmVudC50cmVlJFRpZXI7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IGN1cnJlbnRQYXJlbnQudHJlZSRQYXRoO1xyXG5cclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGN1cnJlbnRQYXJlbnQudHJlZSRDaGlsZHJlblxyXG4gICAgICAgIGNoaWxkcmVuLm1hcCgoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY2hpbGQudHJlZSRUaWVyID0gdGllciArIDE7XHJcbiAgICAgICAgICBpZiAobWF4VGllciA8IHRpZXIgKyAxKSBtYXhUaWVyID0gdGllciArIDE7XHJcblxyXG4gICAgICAgICAgY2hpbGQudHJlZSRQYXRoID0gcGF0aCArIFwiLlwiICsgY2hpbGQudHJlZSRLZXk7XHJcblxyXG4gICAgICAgICAgbG9vcFVwZGF0ZVRpZXJBbmRQYXRoKGNoaWxkKTtcclxuXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIHZhciBpID0gbGlzdC5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChpIDwgbGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgICBsb29wKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0Lm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsb29wVXBkYXRlVGllckFuZFBhdGgoaXRlbSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcblxyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsaXN0LnJldmVyc2UoKVxyXG5cclxuICAgICAgb2JzZXJ2ZXIubmV4dCh7XHJcbiAgICAgICAgcmF3TGlzdCxcclxuICAgICAgICBsaXN0LFxyXG4gICAgICAgIG1heFRpZXJcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICogVE8gRE9cclxuICAqL1xyXG4gIG5lc3RlZEFycmF5VG9MaW5lckFycmF5KFxyXG4gICAgbGlzdDogYW55W10sXHJcbiAgICBrZXlGaWVsZDogc3RyaW5nLFxyXG4gICAgdGl0bGVGaWVsZDogc3RyaW5nLFxyXG4gICAgcGFyZW50RmllbGQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8YW55W10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8qIFxyXG4gICAgVGhlIHR5cGUgb2YgdGhlIGlucHV0IGl0ZW0gbXVzdCBpbmhlcml0IElSZWN1cnNpdmVTZXJ2aWNlSXRlbS5cclxuICAgIE90aGVyd2lzZSB0aGUgZnVuY3Rpb24gZG9lcyBub3Qgd29yayFcclxuICAqL1xyXG4gIG5lc3RlZFJlc2V0QWN0aXZlKGl0ZW06IGFueSwgdmFsdWVUb0JlU2V0OiBib29sZWFuKTogUHJvbWlzZTxudW1iZXJbXT4ge1xyXG5cclxuICAgIGNvbnN0IHRvZ2dsZWRJZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgY29uc3QgbG9vcCA9IChpOiBhbnkpID0+IHtcclxuICAgICAgaS50cmVlJEFjdGl2ZSA9IHZhbHVlVG9CZVNldDtcclxuICAgICAgdG9nZ2xlZElkcy5wdXNoKGkuaWQpO1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGkudHJlZSRDaGlsZHJlbjtcclxuICAgICAgaWYgKCEhY2hpbGRyZW4gJiYgISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICBjaGlsZHJlbi5tYXAoKGNoaWxkOiBhbnkpID0+IGxvb3AoY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbG9vcChpdGVtKTtcclxuICAgICAgICByZXNvbHZlKHRvZ2dsZWRJZHMpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZWplY3QoZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5lc3RlZFRvZ2dsZUNoZWNrKGl0ZW06IGFueSwgdmFsdWVUb0JlU2V0OiBib29sZWFuKTogUHJvbWlzZTxudW1iZXJbXT4ge1xyXG5cclxuICAgIGNvbnN0IHRvZ2dsZWRJZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgY29uc3QgbG9vcCA9IChpOiBhbnkpID0+IHtcclxuICAgICAgaS50cmVlJENoZWNrZWQgPSB2YWx1ZVRvQmVTZXQ7XHJcbiAgICAgIHRvZ2dsZWRJZHMucHVzaChpLmlkKTtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBpLnRyZWUkQ2hpbGRyZW47XHJcbiAgICAgIGlmICghIWNoaWxkcmVuICYmICEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2hpbGRyZW4ubWFwKChjaGlsZDogYW55KSA9PiBsb29wKGNoaWxkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxvb3AoaXRlbSk7XHJcbiAgICAgICAgcmVzb2x2ZSh0b2dnbGVkSWRzKVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmVqZWN0KGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmaW5kSXRlbShzZWFyY2g6IHN0cmluZywgdHJlZURhdGE6IElSZWN1cnNpdmVTZXJ2aWNlSXRlbVtdKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xyXG5cclxuICAgIGNvbnN0IGZpbmRpbmdSZXNldCA9ICgpID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IGZpbmRpbmdSZXNldExvb3AgPSAoY3VycmVudERhdGE6IElSZWN1cnNpdmVTZXJ2aWNlSXRlbSkgPT4ge1xyXG4gICAgICAgIGN1cnJlbnREYXRhLnRyZWUkSGlnaGxpZ2h0ZWQgPSBmYWxzZVxyXG4gICAgICAgIGN1cnJlbnREYXRhLnRyZWUkRXhwYW5kZWQgPSBmYWxzZVxyXG4gICAgICAgIGN1cnJlbnREYXRhLnRyZWUkQ2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcclxuICAgICAgICAgIGZpbmRpbmdSZXNldExvb3AoY2hpbGQpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJlZURhdGE/Lm1hcChibG9jayA9PiBmaW5kaW5nUmVzZXRMb29wKGJsb2NrKSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZmluZGluZ1Jlc2V0KCk7XHJcblxyXG4gICAgaWYgKHNlYXJjaCA9PT0gXCJcIiB8fCAhISFzZWFyY2gpIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHIgPT4gci5uZXh0KFtdKSlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm91bmRQYXRoczogc3RyaW5nW10gPSBbXTtcclxuICAgIGxldCBmb3VuZFRpdGxlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBmaW5kTG9vcCA9IChjdXJyZW50RGF0YTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtKTogdm9pZCA9PiB7XHJcbiAgICAgIGlmIChjdXJyZW50RGF0YS50cmVlJFRpdGxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSkgPj0gMCkge1xyXG4gICAgICAgIGZvdW5kUGF0aHMucHVzaChjdXJyZW50RGF0YS50cmVlJFBhdGgpXHJcbiAgICAgICAgZm91bmRUaXRsZXMucHVzaChjdXJyZW50RGF0YS50cmVlJFRpdGxlKVxyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnREYXRhLnRyZWUkQ2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcclxuICAgICAgICBmaW5kTG9vcChjaGlsZClcclxuICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb2x2ZUZvdW5kTG9vcCA9IChjdXJyZW50RGF0YTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtLCBwYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHJcbiAgICAgIGN1cnJlbnREYXRhLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKGN1cnJlbnREYXRhLnRyZWUkUGF0aCA9PT0gcGF0aCkge1xyXG4gICAgICAgIGN1cnJlbnREYXRhLnRyZWUkSGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYXRoLmluZGV4T2YoY3VycmVudERhdGEudHJlZSRQYXRoKSA+PSAwKSB7XHJcbiAgICAgICAgY3VycmVudERhdGEudHJlZSRDaGlsZHJlbi5maWx0ZXIoYyA9PiBwYXRoLmluZGV4T2YoYy50cmVlJFBhdGgpID49IDApLm1hcChjaGlsZCA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlRm91bmRMb29wKGNoaWxkLCBwYXRoKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZ1tdPihvYnNlcnZlciA9PiB7XHJcblxyXG4gICAgICB0cnkge1xyXG5cclxuICAgICAgICB0cmVlRGF0YT8ubWFwKGN1cnJlbnRCbG9jayA9PiB7XHJcbiAgICAgICAgICBmaW5kTG9vcChjdXJyZW50QmxvY2spO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGZvdW5kUGF0aHMubWFwKHBhdGggPT4ge1xyXG4gICAgICAgICAgdHJlZURhdGEuZmlsdGVyKGJsb2NrID0+IHBhdGguaW5kZXhPZihibG9jay50cmVlJFBhdGgpID49IDApLm1hcChjdXJyZW50QmxvY2sgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlRm91bmRMb29wKGN1cnJlbnRCbG9jaywgcGF0aCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIG9ic2VydmVyLm5leHQoZm91bmRUaXRsZXMpXHJcblxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoc3RhdHVzOiBJRXZlcnlUcmVlU3RhdHVzLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBmaW5kSXRlbU9iamVjdEJ5S2V5KGtleTogc3RyaW5nLCB0cmVlRGF0YTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtW10pOiBJUmVjdXJzaXZlU2VydmljZUl0ZW0gfCBudWxsIHtcclxuXHJcbiAgICBsZXQgcmVzdWx0OiBJUmVjdXJzaXZlU2VydmljZUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBsb29wRmluZEl0ZW1PYmplY3QgPSAoY3VycmVudEl0ZW06IElSZWN1cnNpdmVTZXJ2aWNlSXRlbSkgPT4ge1xyXG4gICAgICBpZiAoY3VycmVudEl0ZW0udHJlZSRLZXkudG9TdHJpbmcoKSA9PT0ga2V5KSB7XHJcbiAgICAgICAgcmVzdWx0ID0gY3VycmVudEl0ZW07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhY3VycmVudEl0ZW0udHJlZSRDaGlsZHJlbikge1xyXG4gICAgICAgICAgY3VycmVudEl0ZW0udHJlZSRDaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xyXG4gICAgICAgICAgICBsb29wRmluZEl0ZW1PYmplY3QoY2hpbGQpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmVlRGF0YT8ubWFwKGJsb2NrID0+IHtcclxuICAgICAgbG9vcEZpbmRJdGVtT2JqZWN0KGJsb2NrKTtcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGxvb3BFeHBhbmRQYXJlbnQoY3VycmVudFBhcmVudEtleTogc3RyaW5nLCB0cmVlRGF0YTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQYXJlbnQgPSB0aGlzLmZpbmRJdGVtT2JqZWN0QnlLZXkoY3VycmVudFBhcmVudEtleSwgdHJlZURhdGEpO1xyXG4gICAgaWYgKCEhY3VycmVudFBhcmVudCkge1xyXG4gICAgICBjdXJyZW50UGFyZW50LnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICBpZiAoISFjdXJyZW50UGFyZW50LnRyZWUkUGFyZW50KSB7XHJcbiAgICAgICAgdGhpcy5sb29wRXhwYW5kUGFyZW50KGN1cnJlbnRQYXJlbnQudHJlZSRQYXJlbnQudG9TdHJpbmcoKSwgdHJlZURhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlQ2hlY2tlZChjaGVja2VkS2V5czogc3RyaW5nW10sIHRyZWVEYXRhOiBJUmVjdXJzaXZlU2VydmljZUl0ZW1bXSwgZGlzYWJsZWRMb29wRXhwYW5kOiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuXHJcbiAgICBjb25zdCBsb29wQ2hlY2sgPSAoY3VycmVudEl0ZW06IElSZWN1cnNpdmVTZXJ2aWNlSXRlbSkgPT4ge1xyXG4gICAgICBjdXJyZW50SXRlbS50cmVlJEV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IGNoZWNrZWQgPSBjaGVja2VkS2V5cy5pbmNsdWRlcyhjdXJyZW50SXRlbS50cmVlJEtleS50b1N0cmluZygpKTtcclxuICAgICAgaWYgKCEhY2hlY2tlZCkge1xyXG4gICAgICAgIGN1cnJlbnRJdGVtLnRyZWUkQ2hlY2tlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VycmVudEl0ZW0udHJlZSRDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudEl0ZW0udHJlZSRDaGlsZHJlbi5tYXAoY2hpbGQgPT4gbG9vcENoZWNrKGNoaWxkKSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4ob2JzZXJ2ZXIgPT4ge1xyXG5cclxuICAgICAgdHJlZURhdGE/Lm1hcChibG9jayA9PiB7XHJcbiAgICAgICAgbG9vcENoZWNrKGJsb2NrKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjaGVja2VkS2V5cy5tYXAoa2V5ID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5maW5kSXRlbU9iamVjdEJ5S2V5KGtleSwgdHJlZURhdGEpO1xyXG4gICAgICAgIGlmICghIWl0ZW0gJiYgISFpdGVtPy50cmVlJFBhcmVudCkge1xyXG4gICAgICAgICAgaWYgKCEhIWRpc2FibGVkTG9vcEV4cGFuZCkgdGhpcy5sb29wRXhwYW5kUGFyZW50KGl0ZW0udHJlZSRQYXJlbnQudG9TdHJpbmcoKSwgdHJlZURhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBvYnNlcnZlci5uZXh0KCk7XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWVBY3RpdmF0ZWQoYWN0aXZhdGVkS2V5czogc3RyaW5nW10sIHRyZWVEYXRhOiBJUmVjdXJzaXZlU2VydmljZUl0ZW1bXSwgZGlzYWJsZWRMb29wRXhwYW5kOiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuXHJcbiAgICBjb25zdCBsb29wQWN0aXZlID0gKGN1cnJlbnRJdGVtOiBJUmVjdXJzaXZlU2VydmljZUl0ZW0pID0+IHtcclxuICAgICAgY3VycmVudEl0ZW0udHJlZSRFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICBjb25zdCBhY3RpdmF0ZWQgPSBhY3RpdmF0ZWRLZXlzLmluY2x1ZGVzKGN1cnJlbnRJdGVtLnRyZWUkS2V5KTtcclxuICAgICAgaWYgKCEhYWN0aXZhdGVkKSB7XHJcbiAgICAgICAgY3VycmVudEl0ZW0udHJlZSRBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRJdGVtLnRyZWUkQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudEl0ZW0udHJlZSRDaGlsZHJlbi5tYXAoY2hpbGQgPT4gbG9vcEFjdGl2ZShjaGlsZCkpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KG9ic2VydmVyID0+IHtcclxuXHJcbiAgICAgIHRyZWVEYXRhPy5tYXAoYmxvY2sgPT4ge1xyXG4gICAgICAgIGxvb3BBY3RpdmUoYmxvY2spO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGFjdGl2YXRlZEtleXMubWFwKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZmluZEl0ZW1PYmplY3RCeUtleShrZXksIHRyZWVEYXRhKTtcclxuICAgICAgICBpZiAoISFpdGVtICYmICEhaXRlbT8udHJlZSRQYXJlbnQpIHtcclxuICAgICAgICAgIGlmICghISFkaXNhYmxlZExvb3BFeHBhbmQpIHRoaXMubG9vcEV4cGFuZFBhcmVudChpdGVtLnRyZWUkUGFyZW50LnRvU3RyaW5nKCksIHRyZWVEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgYnVpbGRUcmVlRGF0YShjbG9uZUNvcHk6IGFueVtdKTogUHJvbWlzZTxhbnlbXT4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnlbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBsZXQgbmVzdGVkSXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gICAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSBuZXdcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCLwn5+i8J+foiBXb3JrZXIgd29ya3NcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCk7XHJcbiAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoeyBkYXRhIH0pID0+IHtcclxuICAgICAgICAgIG5lc3RlZEl0ZW1zID0gZGF0YS5saXN0O1xyXG4gICAgICAgICAgaWYgKCEhbmVzdGVkSXRlbXMgJiYgISFuZXN0ZWRJdGVtcz8ubGVuZ3RoKSBuZXN0ZWRJdGVtc1swXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJlc29sdmUobmVzdGVkSXRlbXMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgbGlzdDogY2xvbmVDb3B5LFxyXG4gICAgICAgICAga2V5RmllbGQ6ICdpZCcsXHJcbiAgICAgICAgICB0aXRsZUZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgICBwYXJlbnRGaWVsZDogJ3BhcmVudElkJyxcclxuICAgICAgICAgIGFjdGl2ZUZpZWxkOiAnYWN0aXZlJyxcclxuICAgICAgICAgIC8vaW5oZXJpdGFudEFjdGl2ZUZpZWxkOiAnaW5oZXJpdGFudEFjdGl2ZScsXHJcbiAgICAgICAgICBjaGVja2VkRmllbGQ6ICdjaGVja2VkJyxcclxuICAgICAgICAgIGV4cGFuZGVkRmllbGQ6ICdleHBhbmQnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLwn5+i8J+foiBXb3JrZXIgbm90IGF2YWlsYWJsZVwiKTtcclxuICAgICAgICByZWplY3QoXCLwn5+i8J+foiBXb3JrZXIgbm90IGF2YWlsYWJsZVwiKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgQVVHIDIwMjQgLSBORVcgPT4gbXVzdCBiZSB0ZXN0ZWQgY2FyZWZ1bGx5IGZyb20gMTkvOC8yMDI0XHJcbiAgRmlsdGVyIGluIHJlZHVjZSBtb2RlICh0byBiZSB0ZXN0ZWQgY2FyZWZ1bGx5IGZyb20gMTkvOC8yMDI0KVxyXG4gICovXHJcblxyXG4gIGhpZ2hsaWdodE5vZGVzKGxpLCBzZWFyY2hUZXJtTG93ZXIpIHtcclxuICAgIHZhciBzcGFuID0gbGkucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgdmFyIHRleHQgPSBzcGFuLnRleHRDb250ZW50IHx8IHNwYW4uaW5uZXJUZXh0O1xyXG4gICAgdmFyIG1hdGNoZXMgPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybUxvd2VyKTtcclxuICAgIHZhciBjaGlsZFVsID0gbGkucXVlcnlTZWxlY3RvcigndWwnKTtcclxuXHJcbiAgICB2YXIgaGFzTWF0Y2hpbmdDaGlsZCA9IGZhbHNlO1xyXG4gICAgaWYgKGNoaWxkVWwpIHtcclxuICAgICAgQXJyYXkuZnJvbShjaGlsZFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykpLmZvckVhY2goY2hpbGRMaSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0Tm9kZXMoY2hpbGRMaSwgc2VhcmNoVGVybUxvd2VyKSkge1xyXG4gICAgICAgICAgaGFzTWF0Y2hpbmdDaGlsZCA9IHRydWU7XHJcbiAgICAgICAgICBsaS5jbGFzc0xpc3QucmVtb3ZlKCdjb2xsYXBzZWQnKTsgLy8gRXhwYW5kIHBhcmVudCBpZiBjaGlsZCBtYXRjaGVzXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoJ2hpZ2hsaWdodGVkJyk7XHJcbiAgICAgIGxpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LnJlbW92ZSgnaGlnaGxpZ2h0ZWQnKTtcclxuICAgICAgaWYgKCFoYXNNYXRjaGluZ0NoaWxkKSB7XHJcbiAgICAgICAgbGkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgLy8gSGlkZSBpZiBubyBtYXRjaGluZyBjaGlsZHJlblxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBoYXNNYXRjaGluZ0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkdWNpbmdGaWx0ZXIoY29udGFpbmVyOiBFbGVtZW50UmVmPGFueT4sIHNlYXJjaFRlcm06IHN0cmluZykge1xyXG4gICAgdmFyIHNlYXJjaFRlcm1Mb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTtcclxuICAgIHZhciBsaXMgPSBjb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xyXG5cclxuICAgIC8vIEZpcnN0LCByZW1vdmUgaGlnaGxpZ2h0cyBhbmQgaGlkZSBub2RlcyB0aGF0IGRvIG5vdCBtYXRjaFxyXG4gICAgbGlzLmZvckVhY2gobGkgPT4ge1xyXG4gICAgICB2YXIgc3BhbiA9IGxpLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlZCcpO1xyXG4gICAgICBsaS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSGlnaGxpZ2h0IG1hdGNoaW5nIG5vZGVzIGFuZCB0aGVpciBwYXJlbnRzXHJcbiAgICBsaXMuZm9yRWFjaChsaSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmhpZ2hsaWdodE5vZGVzKGxpLCBzZWFyY2hUZXJtTG93ZXIpKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudExpID0gbGkucGFyZW50RWxlbWVudC5jbG9zZXN0KCdsaScpO1xyXG4gICAgICAgIHdoaWxlIChwYXJlbnRMaSkge1xyXG4gICAgICAgICAgcGFyZW50TGkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICBwYXJlbnRMaSA9IHBhcmVudExpLnBhcmVudEVsZW1lbnQuY2xvc2VzdCgnbGknKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlc3RvcmUgdGhlIHRyZWUgdmlldyBpZiB0aGUgc2VhcmNoIHRlcm0gaXMgZW1wdHlcclxuICAgIGlmIChzZWFyY2hUZXJtID09PSAnJykge1xyXG4gICAgICBsaXMuZm9yRWFjaChsaSA9PiB7XHJcbiAgICAgICAgdmFyIHNwYW4gPSBsaS5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XHJcbiAgICAgICAgbGkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgc3Bhbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlZCcpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZmluZEl0ZW1CeVBhdGgobmVzdGVkSW5zdGFuY2U6IGFueVtdLCBwYXRoOiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcclxuICAgIFxyXG4gICAgY29uc3QgbG9vcDogKHg6IGFueSkgPT4gYW55ID0gKGN1cnJlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY3VycmVudC50cmVlJFBhdGggPT09IHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGN1cnJlbnQudHJlZSRDaGlsZHJlbiB8fCBbXTtcclxuICAgICAgICBjaGlsZHJlbi5tYXAoeCA9PiBsb29wKHgpKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgaWYgKCFwYXRoQXJyLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3Qgcm9vdFBhdGggPSBgLiR7cGF0aEFyclswXX1gO1xyXG4gICAgY29uc3Qgcm9vdEZpbHRlciA9IG5lc3RlZEluc3RhbmNlLmZpbHRlcih4ID0+IHgudHJlZSRQYXRoID09PSByb290UGF0aCk7XHJcbiAgICBpZiAoIXJvb3RGaWx0ZXIubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCByb290SXRlbSA9IHJvb3RGaWx0ZXJbMF07XHJcbiAgICByZXR1cm4gbG9vcChyb290SXRlbSk7XHJcblxyXG4gIH1cclxuXHJcbn0iXX0=
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaXZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUUvRSxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzdCLDhDQUF1QixDQUFBO0lBQ3ZCLGdEQUF5QixDQUFBO0lBQ3pCLGtEQUEyQixDQUFBO0FBQzdCLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCO0FBK0JELE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0I7Ozs7O01BS0U7SUFFRix1QkFBdUIsQ0FDckIsSUFBVyxFQUNYLFFBQWdCLEVBQ2hCLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGNBQXNCLG1CQUFtQixDQUFDLFlBQVksRUFDdEQsZUFBdUIsbUJBQW1CLENBQUMsYUFBYSxFQUN4RCxnQkFBd0IsbUJBQW1CLENBQUMsY0FBYyxFQUMxRCxTQUFrQyxJQUFJLEVBQ3RDLFVBQWtCLFVBQVU7UUFHNUI7Ozs7O1VBS0U7UUFDRixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFHaEIsT0FBTyxJQUFJLFVBQVUsQ0FBTSxRQUFRLENBQUMsRUFBRTtZQUNwQzs7O2NBR0U7WUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUVkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxD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SUFBSSxDQUFDO1FBRWpDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFcEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXhCLENBQUM7OEdBMWlCVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZmLE1BQU07OzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IGxpbmVyX3RvX25lc3RlZF9hcnJheV9zY3JpcHQgfSBmcm9tICcuLi8uLi8uLi9hc3NldHMvanMvcmVzY3VzaXZlX3drJztcclxuXHJcbmV4cG9ydCBlbnVtIEVudW1SZWN1cnNpdmVGaWVsZHMge1xyXG4gIEFDVElWRV9GSUVMRCA9ICdhY3RpdmUnLFxyXG4gIENIRUNLRURfRklFTEQgPSAnY2hlY2tlZCcsXHJcbiAgRVhQQU5ERURfRklFTEQgPSAnZXhwYW5kZWQnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZXJ5VHJlZVN0YXR1cyB7XHJcbiAgc2VsZWN0ZWRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBhY3RpdmVLZXlzOiBzdHJpbmdbXTtcclxuICBjaGVja2VkS2V5cz86IHN0cmluZ1tdO1xyXG4gIGV4cGFuZGVkS2V5czogc3RyaW5nW107XHJcbiAgY2hlY2tJbmhlcml0YW5jZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtIHtcclxuICB0cmVlJEtleTogc3RyaW5nO1xyXG4gIHRyZWUkVGl0bGU6IHN0cmluZztcclxuICB0cmVlJFBhcmVudDogc3RyaW5nO1xyXG4gIHRyZWUkQ2hpbGRyZW46IElSZWN1cnNpdmVTZXJ2aWNlSXRlbVtdO1xyXG4gIHRyZWUkVGllcjogbnVtYmVyO1xyXG4gIHRyZWUkUGF0aDogc3RyaW5nO1xyXG4gIHRyZWUkSGFzQ2hpbGRyZW46IGJvb2xlYW47XHJcbiAgdHJlZSRIYXNBY3RpdmVDaGlsZHJlbjogYm9vbGVhbjtcclxuICB0cmVlJEhhc0dyYW5kY2hpbGRyZW46IGJvb2xlYW47XHJcbiAgdHJlZSRFeHBhbmRlZD86IGJvb2xlYW47XHJcbiAgdHJlZSRBY3RpdmU/OiBib29sZWFuO1xyXG4gIHRyZWUkSGlnaGxpZ2h0ZWQ/OiBib29sZWFuO1xyXG4gIHRyZWUkSW5oZXJpdGFudEFjdGl2ZT86IGJvb2xlYW47XHJcbiAgdHJlZSRDaGVja2VkPzogYm9vbGVhbjtcclxuICB0cmVlJFNlbGVjdGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVjdXJzaXZlU2VydmljZSB7XHJcblxyXG4gIC8qXHJcbiAgICBsaXN0OiBpbnB1dCBhcnJheSBvZiBsaW5lciBpdGVtc1xyXG4gICAga2V5RmllbGQ6IG5hbWUgb2YgdGhlIGZpZWxkIHRoYXQgd2lsbCBiZSB1c2VkIGFzIG5vZGUga2V5IChpZCwga2V5LCBjb2RlLC4uLilcclxuICAgIHRpdGxlRmllbGQ6IG5hbWUgb2YgdGhlIGZpZWxkIHRoYXQgd2lsbCBiZSB1c2VkIGFzIG5vZGUgdGl0bGUgKHRpdGxlLCBjYXB0aW9uLCB0ZXh0LC4uLilcclxuICAgIHBhcmVudEZpZWxkOiBuYW1lIG9mIHRoZSBmaWVsZCB0aGF0IGhvbGRzIHBhcmVudCB2YWx1ZSAocGFyZW50LCBwYXJlbnRJZCwuLi4pXHJcbiAgKi9cclxuXHJcbiAgbGluZXJBcnJheVRvTmVzdGVkQXJyYXkoXHJcbiAgICBsaXN0OiBhbnlbXSxcclxuICAgIGtleUZpZWxkOiBzdHJpbmcsXHJcbiAgICB0aXRsZUZpZWxkOiBzdHJpbmcsXHJcbiAgICBwYXJlbnRGaWVsZDogc3RyaW5nLFxyXG4gICAgYWN0aXZlRmllbGQ6IHN0cmluZyA9IEVudW1SZWN1cnNpdmVGaWVsZHMuQUNUSVZFX0ZJRUxELFxyXG4gICAgY2hlY2tlZEZpZWxkOiBzdHJpbmcgPSBFbnVtUmVjdXJzaXZlRmllbGRzLkNIRUNLRURfRklFTEQsXHJcbiAgICBleHBhbmRlZEZpZWxkOiBzdHJpbmcgPSBFbnVtUmVjdXJzaXZlRmllbGRzLkVYUEFOREVEX0ZJRUxELFxyXG4gICAgc3RhdHVzOiBJRXZlcnlUcmVlU3RhdHVzIHwgbnVsbCA9IG51bGwsXHJcbiAgICBvcmRlckJ5OiBzdHJpbmcgPSB0aXRsZUZpZWxkLFxyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XHJcblxyXG4gICAgLyogXHJcbiAgICAgIElucHV0IGxpc3Qgd2lsbCBiZSByZWZhY3RvcmVkIGFuZCByZXR1cm5lZCBhcyBmdW5jdGlvbiBvdXRwdXQuXHJcbiAgICAgIFdlIG5lZWQgdG8gbWFrZSBhIHNoYWxsb3cgY29weSBvZiBpbnB1dCBsaXN0IGZvciBpbmRleGluZyB1bnRpbCBkb25lLFxyXG4gICAgICAoYnV0IGl0ZW1zIHJlZmZlcmVuY2VzIHN0YXkgdGhlIHNhbWUpLFxyXG4gICAgICBiZWNhdXNlIGR1cmluZyBsb29wcyBpdGVtcyBvZiBsaXN0IG1pZ2h0IGJlIG1vdmVkIHNvbWV3aGVyZSBlbHNlXHJcbiAgICAqL1xyXG4gICAgY29uc3QgbGlzdE9yaWdpbmFsQ29weSA9IFsuLi5saXN0XTtcclxuICAgIGxldCBtYXhUaWVyID0gMDtcclxuXHJcblxyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAvKiBcclxuICAgICAgICBBIHRyeSB0byBieXBhc3MgY2FzZXMgb2YgcG9zc2libGUgb3ZlcndyaXRpbmcgXHJcbiAgICAgICAgV2l0aCB0aGUgcHJlZml4IFwidHJlZSRcIiBJIGhvcGUgdGhhdCB0aGUgcHJvYmFiaWxpdHkgaXMgbG93IGVub3VnaFxyXG4gICAgICAqL1xyXG4gICAgICBsaXN0Lm1hcChpdGVtID0+IHtcclxuXHJcbiAgICAgICAgaXRlbS50cmVlJEtleSA9IGl0ZW1ba2V5RmllbGRdO1xyXG4gICAgICAgIGl0ZW0udHJlZSRUaXRsZSA9IGl0ZW1bdGl0bGVGaWVsZF07XHJcbiAgICAgICAgaXRlbS50cmVlJFBhcmVudCA9IGl0ZW1bcGFyZW50RmllbGRdO1xyXG4gICAgICAgIGl0ZW0udHJlZSRDaGlsZHJlbiA9IFtdO1xyXG5cclxuICAgICAgICAvL2V4dHJhc1xyXG4gICAgICAgIGl0ZW0udHJlZSRUaWVyID0gMTtcclxuICAgICAgICBpdGVtLnRyZWUkUGF0aCA9ICcuJyArIGl0ZW0udHJlZSRLZXk7XHJcbiAgICAgICAgaXRlbS50cmVlJEhhc0NoaWxkcmVuID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbS50cmVlJEhhc0FjdGl2ZUNoaWxkcmVuID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbS50cmVlJEhhc0dyYW5kY2hpbGRyZW4gPSBmYWxzZTtcclxuICAgICAgICBpdGVtLnRyZWUkSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgICAgICBpdGVtLnRyZWUkU2VsZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCEhIXN0YXR1cykge1xyXG4gICAgICAgICAgaXRlbS50cmVlJEV4cGFuZGVkID0gaXRlbVtleHBhbmRlZEZpZWxkIV0gfHwgISFpdGVtLnByb3RlY3RlZDtcclxuICAgICAgICAgIGl0ZW0udHJlZSRBY3RpdmUgPSBpdGVtW2FjdGl2ZUZpZWxkIV07XHJcbiAgICAgICAgICBpdGVtLnRyZWUkQ2hlY2tlZCA9IGl0ZW1bY2hlY2tlZEZpZWxkIV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGl0ZW0udHJlZSRFeHBhbmRlZCA9IHN0YXR1cy5leHBhbmRlZEtleXMuaW5jbHVkZXMoaXRlbS50cmVlJEtleS50b1N0cmluZygpKTtcclxuICAgICAgICAgIGl0ZW0udHJlZSRBY3RpdmUgPSBzdGF0dXMuYWN0aXZlS2V5cy5pbmNsdWRlcyhpdGVtLnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgaXRlbS50cmVlJENoZWNrZWQgPSBzdGF0dXMuY2hlY2tlZEtleXM/LmluY2x1ZGVzKGl0ZW0udHJlZSRLZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgcmF3TGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdCkpO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICBUaGUgQWxnb3JpdGhtOlxyXG4gIFxyXG4gICAgICAgIEBSZWN1cnNpdmUgZnVuY3Rpb24gXCJsb29wXCI6XHJcbiAgICAgICAgLSBJdCB0YWtlcyBvbmUgYXJndW1lbnQgYXMgY3VycmVudCBwYXJlbnQsIHdoaWNoIHdlIG5lZWQgdG8gYWRkIGNoaWxkcmVuIHRvXHJcbiAgICAgICAgLSBUaGUgY2hpbGRyZW4gYXJlIHNlbGVjdGVkIGZyb20gdGhlIGxpbmVyIGlucHV0IGxpc3Qgd2l0aCBmaWx0ZXIoKSBtZXRob2RcclxuICAgICAgICAtIEFmdGVyIGJlaW5nIGFkZGVkLCB0aGUgY2hpbGRyZW4gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpbmVyIGxpc3Qgd2l0aCBzcGxpY2UoKSBtZXRob2RcclxuICAgICAgICBAVGhlIHJlY3Vyc2l2ZSBmdW5jdGlvbiBcImxvb3BcIiBjYWxscyBpdHNlbGY6XHJcbiAgICAgICAgLSBXaGlsZSBtYXBwaW5nIGl0cyB0cmVlJENoaWxkcmVuXHJcbiAgICAgICAgLSBUaGlzIHRpbWUgZWFjaCBpdGVtIG9mIHRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgcm9sZSBvZiBjdXJyZW50IHBhcmVudCwgYW5kIHNvIG9uXHJcbiAgICAgICAgQCBUaGUgZmlyc3QgY2FsbHM6XHJcbiAgICAgICAgLSBNYXBwaW5nIHRoZSBsaW5lciBpbnB1dCBhcnJheSBhbmQgY2FsbCB0aGUgbG9vcCB3aXRoIGVhY2ggb2YgdGhlIGl0ZW1zXHJcbiAgICAgICovXHJcblxyXG4gICAgICBjb25zdCBzb3J0Rm4gPSAoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoYVtvcmRlckJ5XSA+IGJbb3JkZXJCeV0pIHJldHVybiAxO1xyXG4gICAgICAgIGlmIChhW29yZGVyQnldID09PSBiW29yZGVyQnldKSByZXR1cm4gMDtcclxuICAgICAgICBpZiAoYVtvcmRlckJ5XSA8IGJbb3JkZXJCeV0pIHJldHVybiAtMTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGNvbnN0IGxvb3AgPSAoY3VycmVudFBhcmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gY3VycmVudFBhcmVudC50cmVlJEtleTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0IGNoaWxkcmVuIGZvciBjdXJyZW50UGFyZW50IFxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbGlzdC5maWx0ZXIoYyA9PiBjLnRyZWUkUGFyZW50ID09PSBrZXkpO1xyXG5cclxuICAgICAgICBpZiAoISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQudHJlZSRIYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgICAvLyBhbHNvIHVwZGF0ZSBsaW5lciBpdGVtXHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSByYXdMaXN0LmZpbHRlcigoeDogYW55KSA9PiB4LnRyZWUkS2V5ID09PSBrZXkpXHJcbiAgICAgICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS50cmVlJEhhc0NoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyB1cGRhdGUgZ3JhbmRwYSBpZiBhbnlcclxuICAgICAgICAgIGNvbnN0IGdyYW5kcGFyZW50cyA9IGxpc3RPcmlnaW5hbENvcHkuZmlsdGVyKHggPT4geC50cmVlJEtleSA9PT0gY3VycmVudFBhcmVudC50cmVlJFBhcmVudCk7XHJcbiAgICAgICAgICBpZiAoISFncmFuZHBhcmVudHMubGVuZ3RoKSBncmFuZHBhcmVudHNbMF0udHJlZSRIYXNHcmFuZGNoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdCBjaGlsZHJlbiBmb3IgY3VycmVudFBhcmVudCBcclxuICAgICAgICBjb25zdCBhY3RpdmVDaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcigoYzogYW55KSA9PiAhIWMuaXNBY3RpdmUpO1xyXG4gICAgICAgIGlmICghIWFjdGl2ZUNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgY3VycmVudFBhcmVudC50cmVlJEhhc0FjdGl2ZUNoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgaWYgKGkgPCBjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQudHJlZSRDaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IGN1cnJlbnRQYXJlbnQudHJlZSRDaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChpIDwgY3VycmVudFBhcmVudC50cmVlJENoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY3VycmVudFBhcmVudC50cmVlJENoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgIGxvb3AoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTkVXIENIQU5HRSBPTiBTZXAgM3JkIDIwMjNcclxuICAgICAgY29uc3QgbG9vcFVwZGF0ZVRpZXJBbmRQYXRoID0gKGN1cnJlbnRQYXJlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRpZXIgPSBjdXJyZW50UGFyZW50LnRyZWUkVGllcjtcclxuICAgICAgICBjb25zdCBwYXRoID0gY3VycmVudFBhcmVudC50cmVlJFBhdGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3VycmVudFBhcmVudC50cmVlJENoaWxkcmVuXHJcbiAgICAgICAgY2hpbGRyZW4ubWFwKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjaGlsZC50cmVlJFRpZXIgPSB0aWVyICsgMTtcclxuICAgICAgICAgIGlmIChtYXhUaWVyIDwgdGllciArIDEpIG1heFRpZXIgPSB0aWVyICsgMTtcclxuXHJcbiAgICAgICAgICBjaGlsZC50cmVlJFBhdGggPSBwYXRoICsgXCIuXCIgKyBjaGlsZC50cmVlJEtleTtcclxuXHJcbiAgICAgICAgICBsb29wVXBkYXRlVGllckFuZFBhdGgoY2hpbGQpO1xyXG5cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgdmFyIGkgPSBsaXN0Lmxlbmd0aDtcclxuICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgaWYgKGkgPCBsaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICAgIGxvb3AoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIGxvb3BVcGRhdGVUaWVyQW5kUGF0aChpdGVtKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuXHJcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxpc3QucmV2ZXJzZSgpXHJcblxyXG4gICAgICBvYnNlcnZlci5uZXh0KHtcclxuICAgICAgICByYXdMaXN0LFxyXG4gICAgICAgIGxpc3QsXHJcbiAgICAgICAgbWF4VGllclxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgKiBUTyBET1xyXG4gICovXHJcbiAgbmVzdGVkQXJyYXlUb0xpbmVyQXJyYXkoXHJcbiAgICBsaXN0OiBhbnlbXSxcclxuICAgIGtleUZpZWxkOiBzdHJpbmcsXHJcbiAgICB0aXRsZUZpZWxkOiBzdHJpbmcsXHJcbiAgICBwYXJlbnRGaWVsZDogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgLyogXHJcbiAgICBUaGUgdHlwZSBvZiB0aGUgaW5wdXQgaXRlbSBtdXN0IGluaGVyaXQgSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtLlxyXG4gICAgT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIVxyXG4gICovXHJcbiAgbmVzdGVkUmVzZXRBY3RpdmUoaXRlbTogYW55LCB2YWx1ZVRvQmVTZXQ6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcltdPiB7XHJcblxyXG4gICAgY29uc3QgdG9nZ2xlZElkczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBsb29wID0gKGk6IGFueSkgPT4ge1xyXG4gICAgICBpLnRyZWUkQWN0aXZlID0gdmFsdWVUb0JlU2V0O1xyXG4gICAgICB0b2dnbGVkSWRzLnB1c2goaS5pZCk7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gaS50cmVlJENoaWxkcmVuO1xyXG4gICAgICBpZiAoISFjaGlsZHJlbiAmJiAhIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIGNoaWxkcmVuLm1hcCgoY2hpbGQ6IGFueSkgPT4gbG9vcChjaGlsZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsb29wKGl0ZW0pO1xyXG4gICAgICAgIHJlc29sdmUodG9nZ2xlZElkcylcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHJlamVjdChlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmVzdGVkVG9nZ2xlQ2hlY2soaXRlbTogYW55LCB2YWx1ZVRvQmVTZXQ6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcltdPiB7XHJcblxyXG4gICAgY29uc3QgdG9nZ2xlZElkczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBsb29wID0gKGk6IGFueSkgPT4ge1xyXG4gICAgICBpLnRyZWUkQ2hlY2tlZCA9IHZhbHVlVG9CZVNldDtcclxuICAgICAgdG9nZ2xlZElkcy5wdXNoKGkuaWQpO1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGkudHJlZSRDaGlsZHJlbjtcclxuICAgICAgaWYgKCEhY2hpbGRyZW4gJiYgISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICBjaGlsZHJlbi5tYXAoKGNoaWxkOiBhbnkpID0+IGxvb3AoY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbG9vcChpdGVtKTtcclxuICAgICAgICByZXNvbHZlKHRvZ2dsZWRJZHMpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZWplY3QoZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZpbmRJdGVtKHNlYXJjaDogc3RyaW5nLCB0cmVlRGF0YTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtW10pOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XHJcblxyXG4gICAgY29uc3QgZmluZGluZ1Jlc2V0ID0gKCkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgZmluZGluZ1Jlc2V0TG9vcCA9IChjdXJyZW50RGF0YTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtKSA9PiB7XHJcbiAgICAgICAgY3VycmVudERhdGEudHJlZSRIaWdobGlnaHRlZCA9IGZhbHNlXHJcbiAgICAgICAgY3VycmVudERhdGEudHJlZSRFeHBhbmRlZCA9IGZhbHNlXHJcbiAgICAgICAgY3VycmVudERhdGEudHJlZSRDaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xyXG4gICAgICAgICAgZmluZGluZ1Jlc2V0TG9vcChjaGlsZClcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0cmVlRGF0YT8ubWFwKGJsb2NrID0+IGZpbmRpbmdSZXNldExvb3AoYmxvY2spKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBmaW5kaW5nUmVzZXQoKTtcclxuXHJcbiAgICBpZiAoc2VhcmNoID09PSBcIlwiIHx8ICEhIXNlYXJjaCkge1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUociA9PiByLm5leHQoW10pKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBmb3VuZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGV0IGZvdW5kVGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IGZpbmRMb29wID0gKGN1cnJlbnREYXRhOiBJUmVjdXJzaXZlU2VydmljZUl0ZW0pOiB2b2lkID0+IHtcclxuICAgICAgaWYgKGN1cnJlbnREYXRhLnRyZWUkVGl0bGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7XHJcbiAgICAgICAgZm91bmRQYXRocy5wdXNoKGN1cnJlbnREYXRhLnRyZWUkUGF0aClcclxuICAgICAgICBmb3VuZFRpdGxlcy5wdXNoKGN1cnJlbnREYXRhLnRyZWUkVGl0bGUpXHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudERhdGEudHJlZSRDaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xyXG4gICAgICAgIGZpbmRMb29wKGNoaWxkKVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNvbHZlRm91bmRMb29wID0gKGN1cnJlbnREYXRhOiBJUmVjdXJzaXZlU2VydmljZUl0ZW0sIHBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG5cclxuICAgICAgY3VycmVudERhdGEudHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAoY3VycmVudERhdGEudHJlZSRQYXRoID09PSBwYXRoKSB7XHJcbiAgICAgICAgY3VycmVudERhdGEudHJlZSRIaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhdGguaW5kZXhPZihjdXJyZW50RGF0YS50cmVlJFBhdGgpID49IDApIHtcclxuICAgICAgICBjdXJyZW50RGF0YS50cmVlJENoaWxkcmVuLmZpbHRlcihjID0+IHBhdGguaW5kZXhPZihjLnRyZWUkUGF0aCkgPj0gMCkubWFwKGNoaWxkID0+IHtcclxuICAgICAgICAgIHJlc29sdmVGb3VuZExvb3AoY2hpbGQsIHBhdGgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nW10+KG9ic2VydmVyID0+IHtcclxuXHJcbiAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIHRyZWVEYXRhPy5tYXAoY3VycmVudEJsb2NrID0+IHtcclxuICAgICAgICAgIGZpbmRMb29wKGN1cnJlbnRCbG9jayk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgZm91bmRQYXRocy5tYXAocGF0aCA9PiB7XHJcbiAgICAgICAgICB0cmVlRGF0YS5maWx0ZXIoYmxvY2sgPT4gcGF0aC5pbmRleE9mKGJsb2NrLnRyZWUkUGF0aCkgPj0gMCkubWFwKGN1cnJlbnRCbG9jayA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmVGb3VuZExvb3AoY3VycmVudEJsb2NrLCBwYXRoKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChmb3VuZFRpdGxlcylcclxuXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZShzdGF0dXM6IElFdmVyeVRyZWVTdGF0dXMsIGRhdGE6IGFueSk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIGZpbmRJdGVtT2JqZWN0QnlLZXkoa2V5OiBzdHJpbmcsIHRyZWVEYXRhOiBJUmVjdXJzaXZlU2VydmljZUl0ZW1bXSk6IElSZWN1cnNpdmVTZXJ2aWNlSXRlbSB8IG51bGwge1xyXG5cclxuICAgIGxldCByZXN1bHQ6IElSZWN1cnNpdmVTZXJ2aWNlSXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IGxvb3BGaW5kSXRlbU9iamVjdCA9IChjdXJyZW50SXRlbTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtKSA9PiB7XHJcbiAgICAgIGlmIChjdXJyZW50SXRlbS50cmVlJEtleS50b1N0cmluZygpID09PSBrZXkpIHtcclxuICAgICAgICByZXN1bHQgPSBjdXJyZW50SXRlbTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoISFjdXJyZW50SXRlbS50cmVlJENoaWxkcmVuKSB7XHJcbiAgICAgICAgICBjdXJyZW50SXRlbS50cmVlJENoaWxkcmVuLm1hcChjaGlsZCA9PiB7XHJcbiAgICAgICAgICAgIGxvb3BGaW5kSXRlbU9iamVjdChjaGlsZCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyZWVEYXRhPy5tYXAoYmxvY2sgPT4ge1xyXG4gICAgICBsb29wRmluZEl0ZW1PYmplY3QoYmxvY2spO1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgbG9vcEV4cGFuZFBhcmVudChjdXJyZW50UGFyZW50S2V5OiBzdHJpbmcsIHRyZWVEYXRhOiBJUmVjdXJzaXZlU2VydmljZUl0ZW1bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgY3VycmVudFBhcmVudCA9IHRoaXMuZmluZEl0ZW1PYmplY3RCeUtleShjdXJyZW50UGFyZW50S2V5LCB0cmVlRGF0YSk7XHJcbiAgICBpZiAoISFjdXJyZW50UGFyZW50KSB7XHJcbiAgICAgIGN1cnJlbnRQYXJlbnQudHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgIGlmICghIWN1cnJlbnRQYXJlbnQudHJlZSRQYXJlbnQpIHtcclxuICAgICAgICB0aGlzLmxvb3BFeHBhbmRQYXJlbnQoY3VycmVudFBhcmVudC50cmVlJFBhcmVudC50b1N0cmluZygpLCB0cmVlRGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWVDaGVja2VkKGNoZWNrZWRLZXlzOiBzdHJpbmdbXSwgdHJlZURhdGE6IElSZWN1cnNpdmVTZXJ2aWNlSXRlbVtdLCBkaXNhYmxlZExvb3BFeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG5cclxuICAgIGNvbnN0IGxvb3BDaGVjayA9IChjdXJyZW50SXRlbTogSVJlY3Vyc2l2ZVNlcnZpY2VJdGVtKSA9PiB7XHJcbiAgICAgIGN1cnJlbnRJdGVtLnRyZWUkRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgY29uc3QgY2hlY2tlZCA9IGNoZWNrZWRLZXlzLmluY2x1ZGVzKGN1cnJlbnRJdGVtLnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICBpZiAoISFjaGVja2VkKSB7XHJcbiAgICAgICAgY3VycmVudEl0ZW0udHJlZSRDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdXJyZW50SXRlbS50cmVlJENoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50SXRlbS50cmVlJENoaWxkcmVuLm1hcChjaGlsZCA9PiBsb29wQ2hlY2soY2hpbGQpKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx2b2lkPihvYnNlcnZlciA9PiB7XHJcblxyXG4gICAgICB0cmVlRGF0YT8ubWFwKGJsb2NrID0+IHtcclxuICAgICAgICBsb29wQ2hlY2soYmxvY2spO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNoZWNrZWRLZXlzLm1hcChrZXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpbmRJdGVtT2JqZWN0QnlLZXkoa2V5LCB0cmVlRGF0YSk7XHJcbiAgICAgICAgaWYgKCEhaXRlbSAmJiAhIWl0ZW0/LnRyZWUkUGFyZW50KSB7XHJcbiAgICAgICAgICBpZiAoISEhZGlzYWJsZWRMb29wRXhwYW5kKSB0aGlzLmxvb3BFeHBhbmRQYXJlbnQoaXRlbS50cmVlJFBhcmVudC50b1N0cmluZygpLCB0cmVlRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG9ic2VydmVyLm5leHQoKTtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZUFjdGl2YXRlZChhY3RpdmF0ZWRLZXlzOiBzdHJpbmdbXSwgdHJlZURhdGE6IElSZWN1cnNpdmVTZXJ2aWNlSXRlbVtdLCBkaXNhYmxlZExvb3BFeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG5cclxuICAgIGNvbnN0IGxvb3BBY3RpdmUgPSAoY3VycmVudEl0ZW06IElSZWN1cnNpdmVTZXJ2aWNlSXRlbSkgPT4ge1xyXG4gICAgICBjdXJyZW50SXRlbS50cmVlJEV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IGFjdGl2YXRlZCA9IGFjdGl2YXRlZEtleXMuaW5jbHVkZXMoY3VycmVudEl0ZW0udHJlZSRLZXkpO1xyXG4gICAgICBpZiAoISFhY3RpdmF0ZWQpIHtcclxuICAgICAgICBjdXJyZW50SXRlbS50cmVlJEFjdGl2ZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VycmVudEl0ZW0udHJlZSRBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50SXRlbS50cmVlJENoaWxkcmVuLm1hcChjaGlsZCA9PiBsb29wQWN0aXZlKGNoaWxkKSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4ob2JzZXJ2ZXIgPT4ge1xyXG5cclxuICAgICAgdHJlZURhdGE/Lm1hcChibG9jayA9PiB7XHJcbiAgICAgICAgbG9vcEFjdGl2ZShibG9jayk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgYWN0aXZhdGVkS2V5cy5tYXAoa2V5ID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5maW5kSXRlbU9iamVjdEJ5S2V5KGtleSwgdHJlZURhdGEpO1xyXG4gICAgICAgIGlmICghIWl0ZW0gJiYgISFpdGVtPy50cmVlJFBhcmVudCkge1xyXG4gICAgICAgICAgaWYgKCEhIWRpc2FibGVkTG9vcEV4cGFuZCkgdGhpcy5sb29wRXhwYW5kUGFyZW50KGl0ZW0udHJlZSRQYXJlbnQudG9TdHJpbmcoKSwgdHJlZURhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBvYnNlcnZlci5uZXh0KCk7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKGNsb25lQ29weTogYW55W10sIG9yZGVyQnk6IHN0cmluZyA9ICdvcmRlck51bScpOiBQcm9taXNlPGFueVtdPiB7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGxldCBuZXN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ld1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhcIvCfn6Lwn5+iIFdvcmtlciB3b3Jrc1wiKTtcclxuXHJcbiAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0KTtcclxuICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsICh7IGRhdGEgfSkgPT4ge1xyXG4gICAgICAgICAgbmVzdGVkSXRlbXMgPSBkYXRhLmxpc3Q7XHJcbiAgICAgICAgICBpZiAoISFuZXN0ZWRJdGVtcyAmJiAhIW5lc3RlZEl0ZW1zPy5sZW5ndGgpIG5lc3RlZEl0ZW1zWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzb2x2ZShuZXN0ZWRJdGVtcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICBsaXN0OiBjbG9uZUNvcHksXHJcbiAgICAgICAgICBrZXlGaWVsZDogJ2lkJyxcclxuICAgICAgICAgIHRpdGxlRmllbGQ6ICduYW1lJyxcclxuICAgICAgICAgIHBhcmVudEZpZWxkOiAncGFyZW50SWQnLFxyXG4gICAgICAgICAgYWN0aXZlRmllbGQ6ICdhY3RpdmUnLFxyXG4gICAgICAgICAgb3JkZXJCeTogb3JkZXJCeSxcclxuICAgICAgICAgIC8vaW5oZXJpdGFudEFjdGl2ZUZpZWxkOiAnaW5oZXJpdGFudEFjdGl2ZScsXHJcbiAgICAgICAgICBjaGVja2VkRmllbGQ6ICdjaGVja2VkJyxcclxuICAgICAgICAgIGV4cGFuZGVkRmllbGQ6ICdleHBhbmQnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLwn5+i8J+foiBXb3JrZXIgbm90IGF2YWlsYWJsZVwiKTtcclxuICAgICAgICByZWplY3QoXCLwn5+i8J+foiBXb3JrZXIgbm90IGF2YWlsYWJsZVwiKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgQVVHIDIwMjQgLSBORVcgPT4gbXVzdCBiZSB0ZXN0ZWQgY2FyZWZ1bGx5IGZyb20gMTkvOC8yMDI0XHJcbiAgRmlsdGVyIGluIHJlZHVjZSBtb2RlICh0byBiZSB0ZXN0ZWQgY2FyZWZ1bGx5IGZyb20gMTkvOC8yMDI0KVxyXG4gICovXHJcblxyXG4gIGhpZ2hsaWdodE5vZGVzKGxpLCBzZWFyY2hUZXJtTG93ZXIpIHtcclxuICAgIHZhciBzcGFuID0gbGkucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgdmFyIHRleHQgPSBzcGFuLnRleHRDb250ZW50IHx8IHNwYW4uaW5uZXJUZXh0O1xyXG4gICAgdmFyIG1hdGNoZXMgPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybUxvd2VyKTtcclxuICAgIHZhciBjaGlsZFVsID0gbGkucXVlcnlTZWxlY3RvcigndWwnKTtcclxuXHJcbiAgICB2YXIgaGFzTWF0Y2hpbmdDaGlsZCA9IGZhbHNlO1xyXG4gICAgaWYgKGNoaWxkVWwpIHtcclxuICAgICAgQXJyYXkuZnJvbShjaGlsZFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykpLmZvckVhY2goY2hpbGRMaSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0Tm9kZXMoY2hpbGRMaSwgc2VhcmNoVGVybUxvd2VyKSkge1xyXG4gICAgICAgICAgaGFzTWF0Y2hpbmdDaGlsZCA9IHRydWU7XHJcbiAgICAgICAgICBsaS5jbGFzc0xpc3QucmVtb3ZlKCdjb2xsYXBzZWQnKTsgLy8gRXhwYW5kIHBhcmVudCBpZiBjaGlsZCBtYXRjaGVzXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoJ2hpZ2hsaWdodGVkJyk7XHJcbiAgICAgIGxpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LnJlbW92ZSgnaGlnaGxpZ2h0ZWQnKTtcclxuICAgICAgaWYgKCFoYXNNYXRjaGluZ0NoaWxkKSB7XHJcbiAgICAgICAgbGkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgLy8gSGlkZSBpZiBubyBtYXRjaGluZyBjaGlsZHJlblxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBoYXNNYXRjaGluZ0NoaWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkdWNpbmdGaWx0ZXIoY29udGFpbmVyOiBFbGVtZW50UmVmPGFueT4sIHNlYXJjaFRlcm06IHN0cmluZykge1xyXG4gICAgdmFyIHNlYXJjaFRlcm1Mb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTtcclxuICAgIHZhciBsaXMgPSBjb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xyXG5cclxuICAgIC8vIEZpcnN0LCByZW1vdmUgaGlnaGxpZ2h0cyBhbmQgaGlkZSBub2RlcyB0aGF0IGRvIG5vdCBtYXRjaFxyXG4gICAgbGlzLmZvckVhY2gobGkgPT4ge1xyXG4gICAgICB2YXIgc3BhbiA9IGxpLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlZCcpO1xyXG4gICAgICBsaS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSGlnaGxpZ2h0IG1hdGNoaW5nIG5vZGVzIGFuZCB0aGVpciBwYXJlbnRzXHJcbiAgICBsaXMuZm9yRWFjaChsaSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmhpZ2hsaWdodE5vZGVzKGxpLCBzZWFyY2hUZXJtTG93ZXIpKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudExpID0gbGkucGFyZW50RWxlbWVudC5jbG9zZXN0KCdsaScpO1xyXG4gICAgICAgIHdoaWxlIChwYXJlbnRMaSkge1xyXG4gICAgICAgICAgcGFyZW50TGkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICBwYXJlbnRMaSA9IHBhcmVudExpLnBhcmVudEVsZW1lbnQuY2xvc2VzdCgnbGknKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlc3RvcmUgdGhlIHRyZWUgdmlldyBpZiB0aGUgc2VhcmNoIHRlcm0gaXMgZW1wdHlcclxuICAgIGlmIChzZWFyY2hUZXJtID09PSAnJykge1xyXG4gICAgICBsaXMuZm9yRWFjaChsaSA9PiB7XHJcbiAgICAgICAgdmFyIHNwYW4gPSBsaS5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XHJcbiAgICAgICAgbGkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgc3Bhbi5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlZCcpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZmluZEl0ZW1CeVBhdGgobmVzdGVkSW5zdGFuY2U6IGFueVtdLCBwYXRoOiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcclxuICAgIFxyXG4gICAgY29uc3QgbG9vcDogKHg6IGFueSkgPT4gYW55ID0gKGN1cnJlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY3VycmVudC50cmVlJFBhdGggPT09IHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGN1cnJlbnQudHJlZSRDaGlsZHJlbiB8fCBbXTtcclxuICAgICAgICBjaGlsZHJlbi5tYXAoeCA9PiBsb29wKHgpKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgaWYgKCFwYXRoQXJyLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3Qgcm9vdFBhdGggPSBgLiR7cGF0aEFyclswXX1gO1xyXG4gICAgY29uc3Qgcm9vdEZpbHRlciA9IG5lc3RlZEluc3RhbmNlLmZpbHRlcih4ID0+IHgudHJlZSRQYXRoID09PSByb290UGF0aCk7XHJcbiAgICBpZiAoIXJvb3RGaWx0ZXIubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCByb290SXRlbSA9IHJvb3RGaWx0ZXJbMF07XHJcbiAgICByZXR1cm4gbG9vcChyb290SXRlbSk7XHJcblxyXG4gIH1cclxuXHJcbn0iXX0=
|