@unifylib/ui-lib 1.2.35 → 1.2.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/activity-report-form/activity-report-form.component.mjs +2 -2
- package/esm2022/lib/components/advanced-filter/field-filter/field-filter.component.mjs +21 -8
- package/esm2022/lib/components/advanced-filter/filter-builder/filter-builder.component.mjs +61 -4
- package/esm2022/lib/components/base-table/base-table.component.mjs +7 -3
- package/esm2022/lib/components/multi-auto-complete/multi-auto-complete.component.mjs +7 -6
- package/esm2022/lib/components/report-details-dialog/report-details-dialog.component.mjs +2 -2
- package/esm2022/lib/components/report-form/report-form.component.mjs +2 -2
- package/esm2022/lib/components/shared-list/shared-list.component.mjs +2 -2
- package/fesm2022/iq-ui-lib.mjs +96 -21
- package/fesm2022/iq-ui-lib.mjs.map +1 -1
- package/lib/components/advanced-filter/field-filter/field-filter.component.d.ts +2 -0
- package/lib/components/advanced-filter/filter-builder/filter-builder.component.d.ts +9 -1
- package/lib/components/base-table/base-table.component.d.ts +2 -1
- package/lib/components/multi-auto-complete/multi-auto-complete.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -446,7 +446,7 @@ export class ReportFormComponent {
|
|
|
446
446
|
return !groupByValues.some(v => value.includes(v) && value.length >= v.length);
|
|
447
447
|
}
|
|
448
448
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportFormComponent, deps: [{ token: i1.TranslateService }, { token: i2.BackendService }, { token: i3.ActivatedRoute }, { token: i0.Injector }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i4.Directionality }, { token: i5.MatDialog }, { token: i6.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
449
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportFormComponent, isStandalone: true, selector: "app-report-form", inputs: { showDetails: "showDetails", showExtractButton: "showExtractButton", columns: "columns", actionRequestCallback: "actionRequestCallback", enrichDrillDownReportRequest: "enrichDrillDownReportRequest", enrichHyperLinkReportRequest: "enrichHyperLinkReportRequest", enrichJuniorReportRequest: "enrichJuniorReportRequest" }, outputs: { userAction: "userAction" }, ngImport: i0, template: "<div class=\"column full-width\">\n\n <div class=\"row align-start-center\" style=\"margin-bottom: 10px;\">\n <app-title-bar [pageTitle]=\"getTitle()\" [newAction]=\"false\"></app-title-bar>\n\n <mat-icon\n *ngIf=\"pageInfo?.hasHint\"\n role=\"img\"\n [attr.aria-label]=\"(pageInfo.labelsSection + '.hint') | translate\"\n [matTooltip]=\"pageInfo.labelsSection + '.hint' | translate\"\n matTooltipPosition=\"right\"\n color=\"primary\"\n class=\"hint-icon\"\n matTooltipClass=\"custom-tooltip\">\n help_outline\n </mat-icon>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"isEditable\"\n [errors]=\"errors\"\n [item]=\"this.reportForm?.value || {}\"\n (formUpdated)=\"updateForm($event)\"\n ></app-base-form-canvas>\n\n <br><br>\n\n <div class=\"column\">\n <div class=\"row gap-10 responsive-row\">\n <button *ngIf=\"activeLevel === 1\" color=\"primary\" mat-flat-button (click)=\"doAction(x)\" [disabled]=\"!isValidForm()\" id=\"report-generate-btn\">\n {{ 'REPORTS.generate' | translate }}\n </button>\n\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" [disabled]=\"getIsEmptyList()\" color=\"primary\" id=\"report-extract-trigger\">\n {{ 'extract' | translate }}\n <mat-icon class=\"expand_more actionButton__expand\">expand_more</mat-icon>\n </button>\n\n <button mat-flat-button (click)=\"clear()\" [disabled]=\"isFormEmpty() || activeLevel > 1\" id=\"report-clear-btn\">\n {{ 'REPORTS.clear' | translate }}\n </button>\n\n <button *ngIf=\"activeLevel === 1 && drillDownEnabled()\" color=\"warn\" mat-flat-button (click)=\"drillDown()\" id=\"report-drilldown-btn\">\n {{ drillDownLabel() | translate }}\n </button>\n\n <button *ngIf=\"activeLevel > 1 && backButtonEnabled\" color=\"warn\" mat-flat-button (click)=\"goUp()\" id=\"report-up-btn\">\n {{ 'REPORTS.up' | translate }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"activeLevel >= 1\" class=\"main-form-canvas row align-start-start responsive-table\" style=\"margin-top: 3vh;\">\n <div class=\"column full-width\">\n <app-base-table\n *ngIf=\"activeLevel === 1\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [enforceRefresh]=\"reloadData\"\n id=\"parent\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 2\"\n [pageInfo]=\"drillDownPageInfo\"\n [columns]=\"drillDownColumns\"\n id=\"child\"\n [reportRequest]=\"childReportRequest\"\n (userAction)=\"emitJuniorAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 3\"\n [pageInfo]=\"juniorPageInfo\"\n [columns]=\"juniorColumns\"\n id=\"junior\"\n [reportRequest]=\"juniorReportRequest\">\n </app-base-table>\n </div>\n </div>\n\n</div>\n\n<mat-menu #menu=\"matMenu\">\n <button type=\"button\" mat-menu-item *ngFor=\"let type of types\" (click)=\"extractReport(type)\" [attr.id]=\"'report-extract-item-' + type\">\n {{ type }}\n </button>\n</mat-menu>\n", styles: [".column{display:flex;flex-direction:column;width:100%}.row{display:flex;flex-direction:row;width:100%}.align-start-center{align-items:center;justify-content:flex-start}.align-start-start{align-items:flex-start;justify-content:flex-start}.gap-10>*+*{margin-left:10px}.full-width{width:100%}.hint-icon{cursor:pointer;margin-left:10px}.responsive-row{flex-wrap:wrap}@media (max-width: 960px){.responsive-row{flex-direction:column;align-items:flex-start}}@media (max-width: 600px){.responsive-table{justify-content:center}}\n"], dependencies: [{ kind: "component", type: TitleBarComponent, selector: "app-title-bar", inputs: ["pageTitle", "showExtractButton", "totalElements", "titleMode", "pageInfo", "subTitle", "statusDesc", "newAction", "extraButton", "showDetails", "showImport", "showButton", "extraData", "titleCorporateAdmin", "hideBackButton", "buttons", "buttonsDisplayMode", "draftSupported", "isPending", "onViewModeChange"], outputs: ["newActionClicked", "extraButtonClicked", "extractReport", "buttonClicked", "viewModeChanged"] }, { kind: "component", type: BaseFormCanvasComponent, selector: "app-base-form-canvas", inputs: ["pageInfo", "currency", "fields", "errors", "workflowEditableFields", "isWorkflowEditableManaged", "supportingAttributes", "editable", "attachmentsAlwaysEditable", "emitOnValueChanges", "filterResetNonce", "item", "equationSuggestedFields", "currentEquationValue"], outputs: ["attachmentEmitter", "actionEmitter", "formUpdated", "hyperTextEvent", "currentEquationValueChange"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: BaseTableComponent, selector: "app-base-table", inputs: ["filterFields", "noDataFoundSvgPath", "noDataFoundTitle", "noDataFoundSubtitle", "noResultSvgPath", "noResultTitle", "noResultSubtitle", "pageInfo", "enablePagination", "mobilePageSize", "mobileLoadMoreIncrement", "data", "listAction", "extraActions", "buttonsDisplayMode", "columns", "filters", "pathParam", "extraButton", "enforceRefresh", "isPending", "trigger", "reportRequest", "separateEndpointData", "manageablePages", "totalPagesCount", "currentPageIndex", "customizedData"], outputs: ["buttonClicked", "pageChange", "userAction", "hyperLinkAction", "extraAction", "selectedColumn", "listActionClicked", "pendingViewModeChanged", "showDialog", "clickRoutePage"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
449
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportFormComponent, isStandalone: true, selector: "app-report-form", inputs: { showDetails: "showDetails", showExtractButton: "showExtractButton", columns: "columns", actionRequestCallback: "actionRequestCallback", enrichDrillDownReportRequest: "enrichDrillDownReportRequest", enrichHyperLinkReportRequest: "enrichHyperLinkReportRequest", enrichJuniorReportRequest: "enrichJuniorReportRequest" }, outputs: { userAction: "userAction" }, ngImport: i0, template: "<div class=\"column full-width\">\n\n <div class=\"row align-start-center\" style=\"margin-bottom: 10px;\">\n <app-title-bar [pageTitle]=\"getTitle()\" [newAction]=\"false\"></app-title-bar>\n\n <mat-icon\n *ngIf=\"pageInfo?.hasHint\"\n role=\"img\"\n [attr.aria-label]=\"(pageInfo.labelsSection + '.hint') | translate\"\n [matTooltip]=\"pageInfo.labelsSection + '.hint' | translate\"\n matTooltipPosition=\"right\"\n color=\"primary\"\n class=\"hint-icon\"\n matTooltipClass=\"custom-tooltip\">\n help_outline\n </mat-icon>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"isEditable\"\n [errors]=\"errors\"\n [item]=\"this.reportForm?.value || {}\"\n (formUpdated)=\"updateForm($event)\"\n ></app-base-form-canvas>\n\n <br><br>\n\n <div class=\"column\">\n <div class=\"row gap-10 responsive-row\">\n <button *ngIf=\"activeLevel === 1\" color=\"primary\" mat-flat-button (click)=\"doAction(x)\" [disabled]=\"!isValidForm()\" id=\"report-generate-btn\">\n {{ 'REPORTS.generate' | translate }}\n </button>\n\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" [disabled]=\"getIsEmptyList()\" color=\"primary\" id=\"report-extract-trigger\">\n {{ 'extract' | translate }}\n <mat-icon class=\"expand_more actionButton__expand\">expand_more</mat-icon>\n </button>\n\n <button mat-flat-button (click)=\"clear()\" [disabled]=\"isFormEmpty() || activeLevel > 1\" id=\"report-clear-btn\">\n {{ 'REPORTS.clear' | translate }}\n </button>\n\n <button *ngIf=\"activeLevel === 1 && drillDownEnabled()\" color=\"warn\" mat-flat-button (click)=\"drillDown()\" id=\"report-drilldown-btn\">\n {{ drillDownLabel() | translate }}\n </button>\n\n <button *ngIf=\"activeLevel > 1 && backButtonEnabled\" color=\"warn\" mat-flat-button (click)=\"goUp()\" id=\"report-up-btn\">\n {{ 'REPORTS.up' | translate }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"activeLevel >= 1\" class=\"main-form-canvas row align-start-start responsive-table\" style=\"margin-top: 3vh;\">\n <div class=\"column full-width\">\n <app-base-table\n *ngIf=\"activeLevel === 1\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [enforceRefresh]=\"reloadData\"\n id=\"parent\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 2\"\n [pageInfo]=\"drillDownPageInfo\"\n [columns]=\"drillDownColumns\"\n id=\"child\"\n [reportRequest]=\"childReportRequest\"\n (userAction)=\"emitJuniorAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 3\"\n [pageInfo]=\"juniorPageInfo\"\n [columns]=\"juniorColumns\"\n id=\"junior\"\n [reportRequest]=\"juniorReportRequest\">\n </app-base-table>\n </div>\n </div>\n\n</div>\n\n<mat-menu #menu=\"matMenu\">\n <button type=\"button\" mat-menu-item *ngFor=\"let type of types\" (click)=\"extractReport(type)\" [attr.id]=\"'report-extract-item-' + type\">\n {{ type }}\n </button>\n</mat-menu>\n", styles: [".column{display:flex;flex-direction:column;width:100%}.row{display:flex;flex-direction:row;width:100%}.align-start-center{align-items:center;justify-content:flex-start}.align-start-start{align-items:flex-start;justify-content:flex-start}.gap-10>*+*{margin-left:10px}.full-width{width:100%}.hint-icon{cursor:pointer;margin-left:10px}.responsive-row{flex-wrap:wrap}@media (max-width: 960px){.responsive-row{flex-direction:column;align-items:flex-start}}@media (max-width: 600px){.responsive-table{justify-content:center}}\n"], dependencies: [{ kind: "component", type: TitleBarComponent, selector: "app-title-bar", inputs: ["pageTitle", "showExtractButton", "totalElements", "titleMode", "pageInfo", "subTitle", "statusDesc", "newAction", "extraButton", "showDetails", "showImport", "showButton", "extraData", "titleCorporateAdmin", "hideBackButton", "buttons", "buttonsDisplayMode", "draftSupported", "isPending", "onViewModeChange"], outputs: ["newActionClicked", "extraButtonClicked", "extractReport", "buttonClicked", "viewModeChanged"] }, { kind: "component", type: BaseFormCanvasComponent, selector: "app-base-form-canvas", inputs: ["pageInfo", "currency", "fields", "errors", "workflowEditableFields", "isWorkflowEditableManaged", "supportingAttributes", "editable", "attachmentsAlwaysEditable", "emitOnValueChanges", "filterResetNonce", "item", "equationSuggestedFields", "currentEquationValue"], outputs: ["attachmentEmitter", "actionEmitter", "formUpdated", "hyperTextEvent", "currentEquationValueChange"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: BaseTableComponent, selector: "app-base-table", inputs: ["filterFields", "noDataFoundSvgPath", "noDataFoundTitle", "noDataFoundSubtitle", "noResultSvgPath", "noResultTitle", "noResultSubtitle", "pageInfo", "enablePagination", "mobilePageSize", "mobileLoadMoreIncrement", "data", "listAction", "extraActions", "buttonsDisplayMode", "columns", "filters", "pathParam", "extraButton", "enforceRefresh", "isPending", "trigger", "reportRequest", "separateEndpointData", "manageablePages", "totalPagesCount", "currentPageIndex", "customizedData"], outputs: ["buttonClicked", "pageChange", "userAction", "hyperLinkAction", "extraAction", "selectedColumn", "listActionClicked", "pendingViewModeChanged", "filtersApplied", "showDialog", "clickRoutePage"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
450
450
|
}
|
|
451
451
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportFormComponent, decorators: [{
|
|
452
452
|
type: Component,
|
|
@@ -482,4 +482,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
482
482
|
}], userAction: [{
|
|
483
483
|
type: Output
|
|
484
484
|
}] } });
|
|
485
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9yZXBvcnQtZm9ybS9yZXBvcnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL3JlcG9ydC1mb3JtL3JlcG9ydC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMEIsU0FBUyxFQUFFLFlBQVksRUFBWSxLQUFLLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhILE9BQU8sRUFBQyxlQUFlLEVBQVcsTUFBTSw0QkFBNEIsQ0FBQztBQUdyRSxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDcEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQXNCLE1BQU0sa0JBQWtCLENBQUM7QUFHMUcsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7QUFJckQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUF1QmhFLE1BQU0sT0FBTyxtQkFBbUI7SUFrRDlCLFlBQW9CLGdCQUFrQyxFQUNqQyxjQUE4QixFQUM3QixjQUE4QixFQUM5QixRQUFrQixFQUNsQixNQUFjLEVBQ2QsS0FBcUIsRUFDckIsY0FBOEIsRUFDL0IsTUFBaUIsRUFDaEIsRUFBZTtRQVJqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQy9CLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQXhEbkMsZ0JBQVcsR0FBUyxFQUFFLENBQUM7UUFHdkIsc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBR2xDLFlBQU8sR0FBc0IsRUFBRSxDQUFDO1FBUWhDLGVBQVUsR0FBc0MsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDeEYsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFJeEIsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixXQUFNLEdBQWdCLEVBQUUsQ0FBQztRQUN6QixhQUFRLEdBQWEsZUFBZSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFhLGVBQWUsQ0FBQztRQUM5QyxxQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO1FBRzFDLG1CQUFjLEdBQWEsZUFBZSxDQUFDO1FBQzNDLGtCQUFhLEdBQXVCLEVBQUUsQ0FBQztRQUV2QyxzQkFBaUIsR0FBdUIsRUFBRSxDQUFDO1FBQzNDLFVBQUssR0FBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDeEMsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUV2QixXQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUU1QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUdsQyxrQkFBYSxHQUFrQixJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCx1QkFBa0IsR0FBa0IsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsd0JBQW1CLEdBQWtCLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBZ0J0Qix3QkFBbUIsR0FBYSxLQUFLLENBQUM7SUFGdEMsQ0FBQztJQUlELFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUNoRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUosSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEtBQUssTUFBTSxDQUFDO1lBRXJFLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUV6RSxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUVqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQztvQkFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7b0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUM7b0JBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7d0JBQzlCLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUNkLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDWixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7cUJBQ2IsQ0FBQyxDQUFDO29CQUVILElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7b0JBRTdELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7b0JBRW5ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQ3RFLGFBQWEsRUFDYixFQUFFLEVBQ0YsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixXQUFXLENBQ1osQ0FBQztnQkFFSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0QsQ0FBQztJQUdMLDZEQUE2RDtJQUM3RCxnRUFBZ0U7SUFDaEUsdUdBQXVHO0lBQ3ZHLGFBQWE7SUFDYiwrREFBK0Q7SUFDL0QsK0JBQStCO0lBQy9CLFdBQVc7SUFDWCwyQkFBMkI7SUFDM0IsSUFBSTtJQUVKLGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQztJQUNoRCxDQUFDO0lBR0QsUUFBUSxDQUFDLElBQVk7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNuQyxNQUFNLGFBQWEsR0FBa0IsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RFLGFBQWEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksWUFBWSxHQUFhLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2RCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUNuRixDQUFDO29CQUNELElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDckQsaUdBQWlHO3dCQUNqRyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN0RixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUNySCxPQUFPO3dCQUNULENBQUM7d0JBQ0QsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO3dCQUN6QixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7d0JBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQzsrQkFDNUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUN0RSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUk5RCxFQUFFLEVBQUU7Z0NBQ0gsSUFBSSxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQ0FDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztvQ0FDckMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQ0FDekMsQ0FBQztxQ0FBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDO29DQUM5RCxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQ0FDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7Z0NBQzVCLENBQUM7cUNBQU0sQ0FBQztvQ0FDTixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQ0FDZixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQ0FDNUIsQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQTs0QkFDRixhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQztnQ0FDckMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQ0FDcEYsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLGNBQWM7Z0NBQ3RELFdBQVcsRUFBRSxHQUFHOzZCQUNqQixDQUFDLENBQUMsQ0FBQzs0QkFDSixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3RGLENBQUM7NkJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs0QkFDNUYsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7Z0NBQ3JDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0NBQ3BGLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxjQUFjO2dDQUN0RCxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7NkJBQzVELENBQUMsQ0FBQyxDQUFDO3dCQUNOLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUssSUFBSTs0QkFDaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUssU0FBUzs0QkFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7NEJBQy9ELGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDO2dDQUNyQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dDQUNwRixVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsY0FBYztnQ0FDdEQsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOzZCQUNuQyxDQUFDLENBQUMsQ0FBQzt3QkFDTixDQUFDO3dCQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRyxDQUFDO2dCQUNILENBQUM7WUFBQSxDQUFDLENBQUMsQ0FBQTtZQUNILE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFDdkksYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELGFBQWEsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNuQyx3QkFBd0I7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwRyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxDQUFZO1FBQzlCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM3RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbkcsQ0FBQzthQUFLLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUNuRSxDQUFDO2FBQUssQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDakUsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxDQUFZO1FBQ25DLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlJLENBQUM7YUFBSyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUNqRSxDQUFDO0lBQ0wsQ0FBQztJQUVILFFBQVE7UUFDTixNQUFNLFdBQVcsR0FBRztZQUNsQixDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDaEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekIsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3ZCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbkUsT0FBTyxHQUFHLFdBQVcsQ0FBQyxhQUFhLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFQyxVQUFVLENBQUMsTUFBaUI7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBRXhDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBRW5DLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDNUQsQ0FBQyxDQUVGLENBQUM7SUFDSixDQUFDO0lBRUssMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxNQUFNO2FBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQzVFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNmLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFckUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ2pFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckIsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDMUQsSUFBSSxhQUFhLEVBQUUsQ0FBQzs0QkFDbEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDN0IsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFFO0lBRTdCLENBQUM7SUFJSCxjQUFjLENBQUMsTUFBMkI7UUFDeEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBMkI7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUV0RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN0RCxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDL0QsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDN0IsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDM0IsSUFBSTthQUNMO1lBQ0QsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsT0FBTztZQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUNoQyxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLDBCQUEwQixDQUFDLElBQVM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUV6RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFTO1FBQ2xDLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzVDLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDdEQsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7U0FDcEQsQ0FBQztRQUVGLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUNuQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRTNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQzNDLElBQUksQ0FBQyxhQUFhLEVBQ2xCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFDaEUsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsRUFDN0MsRUFBRSxFQUNGLElBQUksQ0FBQyxjQUFjLEVBQ25CLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFXLEVBQUUsU0FBaUIsRUFBRSxLQUFVO1FBQzdELE9BQU8sSUFBSSxNQUFNLENBQUM7WUFDaEIsR0FBRztZQUNILFNBQVM7WUFDVCxLQUFLLEVBQUUsRUFBRTtZQUNULFVBQVUsRUFBRSxjQUFjO1lBQzFCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsU0FBaUIsRUFBRSxLQUFVO1FBQ2xFLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDO1lBQ3hCLEVBQUU7WUFDRixTQUFTO1lBQ1QsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsY0FBYztZQUMxQixRQUFRLEVBQUUsUUFBUTtZQUNsQixXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUlELGdCQUFnQixDQUFDLE1BQTJCO1FBQzFDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3hDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztRQUMxQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUEyQjtRQUNoRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzlDLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQ25DLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHdCQUF3QixJQUFJLEtBQUssQ0FBQztvQkFDakYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFDbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUNoRSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBQ08sa0JBQWtCLENBQUMsTUFBMkI7UUFDcEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDcEQsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUNwRixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUM3RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixJQUFJLEtBQUssQ0FBQztvQkFDcEYsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDckUsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBMkI7UUFDbkQsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUNsRixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLElBQUksS0FBSyxDQUFDO1lBQ2pGLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsVUFBZTtRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUUsQ0FBQztRQUNoRixDQUFDO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFFLENBQUM7UUFDOUYsQ0FBQzthQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUUsQ0FBQztRQUM1RixDQUFDO0lBQ0gsQ0FBQztJQUVILElBQUk7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRSxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQTtJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkYsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLGlCQUFpQixDQUFFO0lBQzFELENBQUM7SUFDRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssSUFBSSxDQUFDO0lBQy9FLENBQUM7SUFDRCxLQUFLO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILHlCQUF5QjtRQUN6Qiw2QkFBNkI7UUFDN0IsRUFBRTtRQUNGLG1DQUFtQztRQUNuQyxzRUFBc0U7UUFDdEUsNkRBQTZEO1FBQzdELHVCQUF1QjtRQUN2QixnQ0FBZ0M7UUFDaEMsVUFBVTtRQUNWLFFBQVE7UUFDUixRQUFRO1FBQ1IsSUFBSTtJQUVOLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4RCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzFELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUdwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFTO1FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO1FBRWxELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFM0MsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pGLENBQUM7K0dBcmhCVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiwwYkNuRGhDLDYyR0E4RkEsbWtCRDVESSxpQkFBaUIscWVBQ2pCLHVCQUF1QixvY0FDdkIsT0FBTywyUUFDUCxXQUFXLHNJQUNYLE9BQU8sbUhBQ1AsY0FBYyxvU0FDZCxlQUFlLDJOQUNmLGVBQWUsNEZBQ2Ysa0JBQWtCLG11QkFDbEIsSUFBSSw0RkFDSixhQUFhLG9MQUViLFVBQVU7OzRGQUtELG1CQUFtQjtrQkFyQi9CLFNBQVM7K0JBQ0ksaUJBQWlCLGNBQ2YsSUFBSSxXQUNUO3dCQUNQLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixPQUFPO3dCQUNQLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLElBQUk7d0JBQ0osYUFBYTt3QkFDYixTQUFTO3dCQUNULFVBQVU7cUJBQ1g7dVNBTUMsV0FBVztzQkFEVixLQUFLO2dCQUlOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUdOLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RmllbGRJbmZvfSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9maWVsZC1pbmZvXCI7XG5pbXBvcnQge0VNUFRZX1BBR0VfSU5GTywgUGFnZUluZm99IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3BhZ2UtaW5mb1wiO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvdGFibGUtY29sdW1uLmludGVyZmFjZVwiO1xuaW1wb3J0IHtGaWVsZE1lc3NhZ2V9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2FwaS1yZXNwb25zZVwiO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge0JhY2tlbmRTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYmFja2VuZC1zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Hcm91cH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge2Zvcm1hdERhdGUsIE5nRm9yT2YsIE5nSWZ9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7TWF0TWVudSwgTWF0TWVudUl0ZW0sIE1hdE1lbnVUcmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xuaW1wb3J0IHtNYXRCdXR0b24sIE1hdEJ1dHRvbk1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xuaW1wb3J0IHtCYXNlVGFibGVDb21wb25lbnR9IGZyb20gXCIuLi9iYXNlLXRhYmxlL2Jhc2UtdGFibGUuY29tcG9uZW50XCI7XG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQge0ZpbHRlclJlcXVlc3R9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2ZpbHRlci1yZXF1ZXN0XCI7XG5pbXBvcnQge1JlcG9ydFJlcXVlc3R9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3JlcG9ydC1yZXF1ZXN0Lm1vZGVsXCI7XG5pbXBvcnQge0ZpbHRlcn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQge1RpdGxlQmFyQ29tcG9uZW50fSBmcm9tIFwiLi4vdGl0bGUtYmFyL3RpdGxlLWJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7QmFzZUZvcm1DYW52YXNDb21wb25lbnR9IGZyb20gXCIuLi9iYXNlLWZvcm0tY2FudmFzL2Jhc2UtZm9ybS1jYW52YXMuY29tcG9uZW50XCI7XG5pbXBvcnQge0RSSUxMX0RPV05fQUNUSU9OLCBKVU5JT1JfRE9XTl9BQ1RJT04sIFNuYWNrTWVzc2FnZSwgVGFibGVQYWdlVXNlckFjdGlvbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWxcIjtcbmltcG9ydCB7fSBmcm9tIFwiLi4vYXVkaXQtbG9nLWRldGFpbHMtZGlhbG9nL2F1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnRcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge1JlcG9ydERldGFpbHNEaWFsb2dDb21wb25lbnR9IGZyb20gXCIuLi9yZXBvcnQtZGV0YWlscy1kaWFsb2cvcmVwb3J0LWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TWF0VG9vbHRpcH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcbmltcG9ydCB7RGlyZWN0aW9uYWxpdHl9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xuXG5cbmNvbnN0IE5PTl9SRVBPUlRfQ09MVU1OUyA9IFsnbGlzdEFjdGlvbicsICdidXR0b24nLCAnY2hlY2tib3gnXTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtcmVwb3J0LWZvcm0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUaXRsZUJhckNvbXBvbmVudCxcbiAgICBCYXNlRm9ybUNhbnZhc0NvbXBvbmVudCxcbiAgICBNYXRNZW51LFxuICAgIE1hdE1lbnVJdGVtLFxuICAgIE5nRm9yT2YsXG4gICAgTWF0TWVudVRyaWdnZXIsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCYXNlVGFibGVDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRUb29sdGlwXG4gIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vcmVwb3J0LWZvcm0uY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0RldGFpbHMgOiBhbnkgPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0V4dHJhY3RCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbjxhbnk+W10gPVtdO1xuXG4gICAgQElucHV0KCkgYWN0aW9uUmVxdWVzdENhbGxiYWNrITogKGFjdGlvblJlcXVlc3Q6IFRhYmxlUGFnZVVzZXJBY3Rpb24pID0+IFRhYmxlUGFnZVVzZXJBY3Rpb247XG4gICAgQElucHV0KCkgZW5yaWNoRHJpbGxEb3duUmVwb3J0UmVxdWVzdCE6IChhY3Rpb25SZXF1ZXN0OiBUYWJsZVBhZ2VVc2VyQWN0aW9uLCByZXBvcnRSZXF1ZXN0OiBSZXBvcnRSZXF1ZXN0KSA9PiBUYWJsZVBhZ2VVc2VyQWN0aW9uO1xuICAgIEBJbnB1dCgpIGVucmljaEh5cGVyTGlua1JlcG9ydFJlcXVlc3QhOiAoYWN0aW9uUmVxdWVzdDogVGFibGVQYWdlVXNlckFjdGlvbiwgcmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCkgPT4gVGFibGVQYWdlVXNlckFjdGlvbjtcbiAgICBASW5wdXQoKSBlbnJpY2hKdW5pb3JSZXBvcnRSZXF1ZXN0ITogKGFjdGlvblJlcXVlc3Q6IFRhYmxlUGFnZVVzZXJBY3Rpb24sIHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFJlcXVlc3QpID0+IFRhYmxlUGFnZVVzZXJBY3Rpb247XG5cbiAgICBAT3V0cHV0KClcbiAgICB1c2VyQWN0aW9uOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+KCk7XG4gICAgYWN0aXZlTGV2ZWw6IG51bWJlciA9IDE7XG5cbiAgICBwcml2YXRlIGZpbHRlclJlcXVlc3Q6IEZpbHRlclJlcXVlc3Q7XG4gICAgeDogYW55O1xuICAgIGlzRWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGZpZWxkczogRmllbGRJbmZvW10gPSBbXTtcbiAgICBwYWdlSW5mbzogUGFnZUluZm8gPSBFTVBUWV9QQUdFX0lORk87XG4gICAgZHJpbGxEb3duUGFnZUluZm86IFBhZ2VJbmZvID0gRU1QVFlfUEFHRV9JTkZPO1xuICAgIGRyaWxsRG93bkNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXSA9IFtdO1xuICAgIGhpZGVEcmlsbERvd25CdXR0b246IGZhbHNlO1xuXG4gICAganVuaW9yUGFnZUluZm86IFBhZ2VJbmZvID0gRU1QVFlfUEFHRV9JTkZPO1xuICAgIGp1bmlvckNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXSA9IFtdO1xuXG4gICAgY29sdW1uc0RlZmluaXRpb246IFRhYmxlQ29sdW1uPGFueT5bXSA9IFtdO1xuICAgIHR5cGVzOiBzdHJpbmdbXSA9IFtcInBkZlwiLCBcImNzdlwiLCBcInhsc3hcIl1cbiAgICBzZWFyY2hTdHI6IHN0cmluZyA9ICcnO1xuXG4gICAgZXJyb3JzOiBGaWVsZE1lc3NhZ2VbXSA9IFtdO1xuXG4gICAgcmVsb2FkRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGJhY2tCdXR0b25FbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuXG4gICAgcmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCA9IG5ldyBSZXBvcnRSZXF1ZXN0KHt9KTtcbiAgICBjaGlsZFJlcG9ydFJlcXVlc3Q6IFJlcG9ydFJlcXVlc3QgPSBuZXcgUmVwb3J0UmVxdWVzdCh7fSk7XG4gICAganVuaW9yUmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCA9IG5ldyBSZXBvcnRSZXF1ZXN0KHt9KTtcbiAgICBwdWJsaWMgcmVwb3J0Rm9ybTogRm9ybUdyb3VwO1xuICAgIHJlYWR5VG9TZWFyY2ggPSBmYWxzZTtcbiAgICBwcml2YXRlIHBhZ2VTaXplOiBhbnk7XG4gICAgcHJpdmF0ZSBkaWFsb2dSZXBvcnRSZXF1ZXN0OiBhbnk7XG4gICAgY3VycmVudERpcmVjdGlvbjogJ2x0cicgfCAncnRsJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHVibGljIGJhY2tlbmRTZXJ2aWNlOiBCYWNrZW5kU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5LFxuICAgICAgICAgICAgICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIH1cblxuICAgIGRpc2FibGVFeHBvcnRBY3Rpb24gOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uYWxpdHkudmFsdWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbmFsaXR5LmNoYW5nZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbiA9IHZhbHVlO1xuICAgICAgfSlcblxuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5wYWdlSW5mbyA9IGRhdGFbJ3BhZ2VJbmZvJ107XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VTaXplID8/IDEwO1xuICAgICAgICB0aGlzLmZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCh0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgZGF0YVsncGFnZUluZm8nXS5sYXp5TG9hZERhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmRyaWxsRG93blBhZ2VJbmZvID0gZGF0YVsnZHJpbGxEb3duUGFnZUluZm8nXTtcbiAgICAgICAgdGhpcy5kcmlsbERvd25Db2x1bW5zID0gZGF0YVsnZHJpbGxEb3duQ29sdW1ucyddPy5maWx0ZXIoYyA9PiBjLnByb3BlcnR5ICE9PSAnc2VsZWN0SXRlbScpO1xuICAgICAgICB0aGlzLmhpZGVEcmlsbERvd25CdXR0b24gPSBkYXRhWydoaWRlRHJpbGxEb3duQnV0dG9uJ10gPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuanVuaW9yUGFnZUluZm8gPSBkYXRhWydqdW5pb3JQYWdlSW5mbyddO1xuICAgICAgICB0aGlzLmp1bmlvckNvbHVtbnMgPSBkYXRhWydqdW5pb3JDb2x1bW5zJ107XG4gICAgICAgIHRoaXMuY29sdW1uc0RlZmluaXRpb24gPSBkYXRhWydjb2x1bW5zRGVmaW5pdGlvbiddLmZpbHRlcihjID0+ICh0aGlzLmRyaWxsRG93blBhZ2VJbmZvICYmIHRoaXMuZHJpbGxEb3duQ29sdW1ucyB8fCAoIU5PTl9SRVBPUlRfQ09MVU1OUy5pbmNsdWRlcyhjLnR5cGUpKSkpO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IGRhdGFbJ2ZpZWxkcyddO1xuICAgICAgICBpZiAoZGF0YVsnZW5yaWNoRHJpbGxEb3duUmVwb3J0UmVxdWVzdCddKSB7XG4gICAgICAgICAgdGhpcy5lbnJpY2hEcmlsbERvd25SZXBvcnRSZXF1ZXN0ID0gZGF0YVsnZW5yaWNoRHJpbGxEb3duUmVwb3J0UmVxdWVzdCddKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhWydlbnJpY2hKdW5pb3JSZXBvcnRSZXF1ZXN0J10pIHtcbiAgICAgICAgICB0aGlzLmVucmljaEp1bmlvclJlcG9ydFJlcXVlc3QgPSBkYXRhWydlbnJpY2hKdW5pb3JSZXBvcnRSZXF1ZXN0J10odGhpcy5pbmplY3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YVsnZW5yaWNoSHlwZXJMaW5rUmVwb3J0UmVxdWVzdCddKSB7XG4gICAgICAgICAgdGhpcy5lbnJpY2hIeXBlckxpbmtSZXBvcnRSZXF1ZXN0ID0gZGF0YVsnZW5yaWNoSHlwZXJMaW5rUmVwb3J0UmVxdWVzdCddKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgY29uc3QgaXNDb21wYXJpc29uUmVwb3J0ID0gcGFyYW1zLmdldCgnY29tcGFyaXNvblJlcG9ydCcpID09PSAndHJ1ZSc7XG5cbiAgICAgICAgaWYgKGlzQ29tcGFyaXNvblJlcG9ydCkge1xuICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb25TdHIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjb21wYXJpc29uUmVwb3J0UGFnZUluZm8nKTtcblxuICAgICAgICAgIGlmIChjb21wYXJpc29uU3RyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJpc29uRGF0YSA9IEpTT04ucGFyc2UoY29tcGFyaXNvblN0cik7XG5cbiAgICAgICAgICAgIHRoaXMucGFnZUluZm8ubGF6eUxvYWREYXRhID0gY29tcGFyaXNvbkRhdGEubGF6eUxvYWREYXRhID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IGNvbXBhcmlzb25EYXRhLmFjdGl2ZUxldmVsID8/IDI7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYmFja0J1dHRvbkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJpbGxEb3duUGFnZUluZm8gPSBjb21wYXJpc29uRGF0YS5kcmlsbERvd25QYWdlSW5mbztcbiAgICAgICAgICAgIHRoaXMuZHJpbGxEb3duQ29sdW1ucyA9IGNvbXBhcmlzb25EYXRhLmRyaWxsRG93bkNvbHVtbnM7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgZGlyZWN0b3JhdGU6IFtbXV0sXG4gICAgICAgICAgICAgIGZyb21EYXRlOiBbJyddLFxuICAgICAgICAgICAgICB0b0RhdGU6IFsnJ10sXG4gICAgICAgICAgICAgIHNlY3RvcjogWycnXSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnJlcG9ydEZvcm0ucGF0Y2hWYWx1ZShjb21wYXJpc29uRGF0YS5mb3JtKVxuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkcy5maWx0ZXIoYyA9PiBjLnR5cGUgIT09ICdjaGVja2JveCcpO1xuXG4gICAgICAgICAgICBjb25zdCByZXBvcnRSZXF1ZXN0ID0gY29tcGFyaXNvbkRhdGEucmVwb3J0UmVxdWVzdDtcblxuICAgICAgICAgICAgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmJ1aWxkUmVwb3J0UmVxdWVzdChcbiAgICAgICAgICAgICAgdGhpcy5kcmlsbERvd25Db2x1bW5zLFxuICAgICAgICAgICAgICBgJHt0aGlzLmRyaWxsRG93blBhZ2VJbmZvLmxhYmVsc1NlY3Rpb259LiR7dGhpcy5kcmlsbERvd25QYWdlSW5mby5pZH1gLFxuICAgICAgICAgICAgICByZXBvcnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgdGhpcy5kcmlsbERvd25QYWdlSW5mbyxcbiAgICAgICAgICAgICAgJ0xBTkRTQ0FQRSdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgIC8vIG5nT25DaGFuZ2VzKHtpdGVtLCBlcnJvcnMsIGZpZWxkc306IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyAgICAgLy8gZXJyb3JzPy5jdXJyZW50VmFsdWU/LmZvckVhY2goKG1zZzogRmllbGRNZXNzYWdlKSA9PiB7XG4gICAgLy8gICAgIC8vICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KG1zZy5maWVsZE5hbWUpPy5zZXRFcnJvcnMoe3NlcnZlckVycm9yOiBtc2cubWVzc2FnZX0pO1xuICAgIC8vICAgICAvLyB9KTtcbiAgICAvLyAgICAgLy8gaWYgKGZpZWxkcz8uY3VycmVudFZhbHVlICYmICFmaWVsZHMuaXNGaXJzdENoYW5nZSgpKXtcbiAgICAvLyAgICAgLy8gICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgLy8gICAgIC8vIH1cbiAgICAvLyAgICAgLy8gdGhpcy5idWlsZEZvcm0oKTtcbiAgICAvLyB9XG5cbiAgICBpc01hdGNoSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5mby5wYWdlSGVpZ2h0ID09PSAnbWF0Y2gnO1xuICAgIH1cblxuXG4gICAgZG9BY3Rpb24odHlwZTogc3RyaW5nKSB7XG4gICAgICBpZiAodGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLnZhbGlkKSB7XG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSA9ICF0aGlzLnJlbG9hZERhdGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclJlcXVlc3Q6IEZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCh0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgZmlsdGVyUmVxdWVzdC5maWx0ZXJzID0gW107XG4gICAgICAgIGxldCBwYXJhbXNTdHJpbmc6IHN0cmluZ1tdID0gW107XG4gICAgICAgIHRoaXMuZmllbGRzLmZpbHRlcih4ID0+IHgudHlwZSAhPT0gJ3NwYWNlcicpLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0UGFyYW1WYWx1ZShmKSAhPSBudWxsICYmIHRoaXMuZ2V0UGFyYW1WYWx1ZShmKS50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpXG4gICAgICAgICAge1xuICAgICAgICAgIGlmIChmLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnIHx8IGYudHlwZSA9PT0gJ2xvb2t1cCcpIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdCBmaWx0ZXIgaWYgdGhpcyBmaWVsZCBhcyBjYXNjYWRpbmcgZm9yIGFub3RoZXIgb25lIGFuZCB0aGUgb3RoZXIgb25lIGdvdCBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkRmllbGRJZHggPSB0aGlzLmZpZWxkcy5maW5kSW5kZXgoZmllbGQgPT4gZmllbGQuY2FzY2FkZWRCeSA9PT0gZi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRGaWVsZElkeCA+IC0xICYmIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQodGhpcy5maWVsZHNbY2hpbGRGaWVsZElkeF0ucHJvcGVydHkpPy52YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZHo6IG51bWJlcltdID0gW107XG4gICAgICAgICAgICBjb25zdCBwYXJhbTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSAmJiBBcnJheS5pc0FycmF5KHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlKVxuICAgICAgICAgICAgICAmJiB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlLmZvckVhY2goKGE6IHtcbiAgICAgICAgICAgICAgICBjaGFubmVsSWQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBlbmdsaXNoTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZi5mbGF0dGVuQnlTdWJBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICAgIGlkei5wdXNoKGFbZi5mbGF0dGVuQnlTdWJBdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgICAgICAgIHBhcmFtLnB1c2goYVtmLmZsYXR0ZW5CeVN1YkF0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZHMuZmluZChzID0+IHMucHJvcGVydHkgPT09ICd0ZXJtaW5hbElkJykpIHtcbiAgICAgICAgICAgICAgICAgIGlkei5wdXNoKGEuY2hhbm5lbElkKTtcbiAgICAgICAgICAgICAgICAgIHBhcmFtLnB1c2goYS5lbmdsaXNoTmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlkei5wdXNoKGEuaWQpO1xuICAgICAgICAgICAgICAgICAgcGFyYW0ucHVzaChhLmVuZ2xpc2hOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGZpbHRlclJlcXVlc3QuZmlsdGVycz8ucHVzaChuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBpZDogZi5wcm9wZXJ0eSwgZmllbGROYW1lOiBmLnByb3BlcnR5LCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZi5sYWJlbCksXG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZTogJ0ZJTEVEX0ZJTFRFUicsIG9wZXJhdG9yOiBmLmZpbHRlck9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0OiBpZHpcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBwYXJhbXNTdHJpbmcucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmLmxhYmVsKSArICcgOiAnICsgcGFyYW0uam9pbignLCcpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWUgJiYgZi5mbGF0dGVuQnlTdWJBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgZmlsdGVyUmVxdWVzdC5maWx0ZXJzPy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBmLnByb3BlcnR5LCBmaWVsZE5hbWU6IGYucHJvcGVydHksIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmLmxhYmVsKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlOiAnRklMRURfRklMVEVSJywgb3BlcmF0b3I6IGYuZmlsdGVyT3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWVPYmplY3Q6IHRoaXMuZ2V0UGFyYW1WYWx1ZShmKVtmLmZsYXR0ZW5CeVN1YkF0dHJpYnV0ZV1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBmaWx0ZXJSZXF1ZXN0LmZpbHRlcnM/LnB1c2gobmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgaWQ6IGYucHJvcGVydHksIGZpZWxkTmFtZTogZi5wcm9wZXJ0eSwgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGYubGFiZWwpLFxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGU6ICdGSUxFRF9GSUxURVInLCBvcGVyYXRvcjogZi5maWx0ZXJPcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdDogdGhpcy5nZXRQYXJhbVZhbHVlKGYpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtc1N0cmluZy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGYubGFiZWwpICsgJyA6ICcgKyB0aGlzLmdldFBhcmFtVmFsdWVMYWJlbChmKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9fSlcbiAgICAgICAgY29uc3QgcmVwb3J0UmVxdWVzdCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KHRoaXMuY29sdW1uc0RlZmluaXRpb24sIHRoaXMucGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIHRoaXMucGFnZUluZm8uaWQsXG4gICAgICAgICAgZmlsdGVyUmVxdWVzdCwgdHlwZSwgdGhpcy5wYWdlSW5mbywgJ0xBTkRTQ0FQRScpO1xuICAgICAgICByZXBvcnRSZXF1ZXN0LnNlYXJjaFN0ciA9IHBhcmFtc1N0cmluZy5qb2luKCcgLCAnKTtcbiAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0ID0gcmVwb3J0UmVxdWVzdDtcbiAgICAgICAgLy8gdGhpcy5hY3RpdmVMZXZlbCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnRvcFBhbmVsTWVzc2FnZSQubmV4dChuZXcgU25hY2tNZXNzYWdlKCdJTlZBTElEX1JFUE9SVF9GT1JNJywgdHJ1ZSwgJ2Vycm9yJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyYW1WYWx1ZShmOiBGaWVsZEluZm8pIHtcbiAgICAgICAgaWYgKGYudHlwZSA9PT0gJ2RhdGUnICYmIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZSh0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSwgJ3l5eXktTU0tZGQnLCAnZW5fVVMnKVxuICAgICAgICB9ZWxzZSBpZiAoZi50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJhbVZhbHVlTGFiZWwoZjogRmllbGRJbmZvKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd5ZXMnKSA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdubycpO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgZ2V0VGl0bGUoKSB7XG4gICAgY29uc3QgcGFnZUluZm9NYXAgPSB7XG4gICAgICAxOiB0aGlzLnBhZ2VJbmZvLFxuICAgICAgMjogdGhpcy5kcmlsbERvd25QYWdlSW5mbyxcbiAgICAgIDM6IHRoaXMuanVuaW9yUGFnZUluZm9cbiAgICB9O1xuXG4gICAgY29uc3QgY3VycmVudEluZm8gPSBwYWdlSW5mb01hcFt0aGlzLmFjdGl2ZUxldmVsXSB8fCB0aGlzLnBhZ2VJbmZvO1xuICAgIHJldHVybiBgJHtjdXJyZW50SW5mby5sYWJlbHNTZWN0aW9ufS4ke2N1cnJlbnRJbmZvLmlkfWA7XG4gIH1cblxuICAgIHVwZGF0ZUZvcm0oJGV2ZW50OiBGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMucmVwb3J0Rm9ybSA9ICRldmVudDtcbiAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybSA9ICRldmVudDtcblxuICAgICAgdGhpcy5zZXR1cERlcGVuZGVudEZpZWxkV2F0Y2hlcnMoKTtcblxuICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFkeVRvU2VhcmNoID0gdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLnZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICk7XG4gICAgfVxuXG4gIHByaXZhdGUgc2V0dXBEZXBlbmRlbnRGaWVsZFdhdGNoZXJzKCkge1xuICAgIHRoaXMuZmllbGRzXG4gICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmxvb2t1cEZpbHRlckxpc3QgJiYgZmllbGQubG9va3VwRmlsdGVyTGlzdC5sZW5ndGggPiAwKVxuICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBjb25zdCBkZXBlbmRlbnRGaWVsZHMgPSBmaWVsZC5sb29rdXBGaWx0ZXJMaXN0Lm1hcChmID0+IGYuZmllbGROYW1lKTtcblxuICAgICAgICBkZXBlbmRlbnRGaWVsZHMuZm9yRWFjaChkZXBlbmRlbnRGaWVsZE5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlcGVuZGVudENvbnRyb2wgPSB0aGlzLnJlcG9ydEZvcm0uZ2V0KGRlcGVuZGVudEZpZWxkTmFtZSk7XG4gICAgICAgICAgaWYgKGRlcGVuZGVudENvbnRyb2wpIHtcbiAgICAgICAgICAgIGRlcGVuZGVudENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSB0aGlzLnJlcG9ydEZvcm0uZ2V0KGZpZWxkLnByb3BlcnR5KTtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaXNWYWxpZEZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWFkeVRvU2VhcmNoIDtcblxuICAgIH1cblxuXG5cbiAgZW1pdFVzZXJBY3Rpb24oJGV2ZW50OiBUYWJsZVBhZ2VVc2VyQWN0aW9uKSB7XG4gICAgJGV2ZW50LnBhZ2VJbmZvID0gdGhpcy5wYWdlSW5mbztcbiAgICB0aGlzLmRvQURyaWxsRG93bkFjdGlvbigkZXZlbnQpO1xuICB9XG5cbiAgZW1pdEh5cGVyTGlua0FjdGlvbigkZXZlbnQ6IFRhYmxlUGFnZVVzZXJBY3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUHJvY2Vzc0V2ZW50SXRlbSgkZXZlbnQuaXRlbSkpIHJldHVybjtcblxuICAgIGNvbnN0IGl0ZW0gPSAkZXZlbnQuaXRlbTtcbiAgICB0aGlzLnByZXBhcmVEaWFsb2dSZXBvcnRSZXF1ZXN0KGl0ZW0pO1xuICAgIGNvbnN0IHJlcG9ydFJlcXVlc3QgPSB0aGlzLmJ1aWxkRGlhbG9nUmVwb3J0UmVxdWVzdCgpO1xuICAgIHJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlSW5kZXggPSAwXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZXBvcnREZXRhaWxzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHBhZ2VJbmZvOiB0aGlzLmp1bmlvclBhZ2VJbmZvLFxuICAgICAgICByZXF1ZXN0OiByZXBvcnRSZXF1ZXN0LFxuICAgICAgICBjb2x1bW5zOiB0aGlzLmp1bmlvckNvbHVtbnMsXG4gICAgICAgIGl0ZW0sXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiAnNTB2dycsXG4gICAgICBtYXhXaWR0aDogJzEyMHZ3JyxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50RGlyZWN0aW9uLFxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRvSHlwZXJMaW5rQWN0aW9uKCRldmVudCkpO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVEaWFsb2dSZXBvcnRSZXF1ZXN0KGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVwb3J0UmVxdWVzdCA9IGNsb25lRGVlcCh0aGlzLnJlcG9ydFJlcXVlc3QpO1xuICAgIHRoaXMuZGlhbG9nUmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0ID0geyBmaWx0ZXJzOiBbXSB9O1xuXG4gICAgdGhpcy5hZGRTdGFuZGFyZEZpbHRlcnMoaXRlbSk7XG4gICAgdGhpcy5hZGRPclJlcGxhY2VGaWx0ZXIoJ2lzZWMxJywgJ2lTZWMnLCBpdGVtWydpc2VjX3ZhbHVlJ10pO1xuICAgIHRoaXMuYWRkRmlsdGVyVHlwZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdGFuZGFyZEZpbHRlcnMoaXRlbTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhbmRhcmRGaWx0ZXJzID0gW1xuICAgICAgeyBrZXk6ICdwZXJpb2QnLCB2YWx1ZTogaXRlbVsncGVyaW9kJ10gfSxcbiAgICAgIHsga2V5OiAneWVhcicsIHZhbHVlOiBpdGVtWyd5ZWFyJ10gfSxcbiAgICAgIHsga2V5OiAnc2VjdG9yJywgdmFsdWU6IGl0ZW1bJ3NlY3RvckNvZGUnXSB9LFxuICAgICAgeyBrZXk6ICdkaXJlY3RvcmF0ZScsIHZhbHVlOiBpdGVtWydkaXJlY3RvcmF0ZUNvZGUnXSB9LFxuICAgICAgeyBrZXk6ICdzdWJUYXhSYXRlJywgdmFsdWU6IGl0ZW1bJ3RheF9yYXRlX2NvZGUnXSB9LFxuICAgIF07XG5cbiAgICBzdGFuZGFyZEZpbHRlcnMuZm9yRWFjaCgoeyBrZXksIHZhbHVlIH0pID0+XG4gICAgICB0aGlzLmRpYWxvZ1JlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5maWx0ZXJzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyKGtleSwga2V5LCB2YWx1ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWx0ZXJUeXBlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzVGF4ID0gdGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmFjdGlvbktleT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndGF4Jyk7XG4gICAgY29uc3QgZmlsdGVyVHlwZSA9IGlzVGF4ID8gJ1RBWCcgOiAnVkFMVUUnO1xuXG4gICAgdGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QuZmlsdGVycy5wdXNoKFxuICAgICAgdGhpcy5jcmVhdGVGaWx0ZXIoJ2ZpbHRlclR5cGUnLCAnZmlsdGVyVHlwZScsIGZpbHRlclR5cGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREaWFsb2dSZXBvcnRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KFxuICAgICAgdGhpcy5qdW5pb3JDb2x1bW5zLFxuICAgICAgYCR7dGhpcy5qdW5pb3JQYWdlSW5mby5sYWJlbHNTZWN0aW9ufS4ke3RoaXMuanVuaW9yUGFnZUluZm8uaWR9YCxcbiAgICAgIHsgLi4udGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QgfSxcbiAgICAgICcnLFxuICAgICAgdGhpcy5qdW5pb3JQYWdlSW5mbyxcbiAgICAgICdMQU5EU0NBUEUnXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmlsdGVyKGtleTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEZpbHRlciB7XG4gICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAga2V5LFxuICAgICAgZmllbGROYW1lLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgZmlsdGVyVHlwZTogJ0ZJTEVEX0ZJTFRFUicsXG4gICAgICBvcGVyYXRvcjogJ0VRVUFMUycsXG4gICAgICB2YWx1ZU9iamVjdDogdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZE9yUmVwbGFjZUZpbHRlcihpZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuICAgICAgaWQsXG4gICAgICBmaWVsZE5hbWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBmaWx0ZXJUeXBlOiAnRklMRURfRklMVEVSJyxcbiAgICAgIG9wZXJhdG9yOiAnRVFVQUxTJyxcbiAgICAgIHZhbHVlT2JqZWN0OiB2YWx1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmRpYWxvZ1JlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5maWx0ZXJzO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBmaWx0ZXJzLmZpbmRJbmRleCgoZjogRmlsdGVyKSA9PiBmLmlkID09PSBpZCk7XG5cbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGZpbHRlcnMuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEsIGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG5cblxuICBlbWl0SnVuaW9yQWN0aW9uKCRldmVudDogVGFibGVQYWdlVXNlckFjdGlvbikge1xuICAgIGNvbnN0IGp1bmlvckFjdGlvbiA9IEpVTklPUl9ET1dOX0FDVElPTjtcbiAgICBqdW5pb3JBY3Rpb24ucGFnZUluZm8gPSB0aGlzLmRyaWxsRG93blBhZ2VJbmZvO1xuICAgIHRoaXMuZG9KdW5pb3JBY3Rpb24oJGV2ZW50KTtcbiAgfVxuXG4gIGRyaWxsRG93bigpIHtcbiAgICBjb25zdCBkcmlsbGRvd25hY3Rpb24gPSBEUklMTF9ET1dOX0FDVElPTjtcbiAgICBkcmlsbGRvd25hY3Rpb24ucGFnZUluZm8gPSB0aGlzLmRyaWxsRG93blBhZ2VJbmZvO1xuICAgIHRoaXMuZG9BRHJpbGxEb3duQWN0aW9uKGRyaWxsZG93bmFjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGRvSnVuaW9yQWN0aW9uKCRldmVudDogVGFibGVQYWdlVXNlckFjdGlvbikge1xuICAgIGlmICh0aGlzLmp1bmlvckNvbHVtbnMgJiYgdGhpcy5qdW5pb3JQYWdlSW5mbykge1xuICAgICAgaWYgKHRoaXMuZW5yaWNoSnVuaW9yUmVwb3J0UmVxdWVzdCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVMZXZlbCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUV4cG9ydEFjdGlvbiA9IHRoaXMuanVuaW9yUGFnZUluZm8uaGlkZVJlcG9ydHNFeHRyYWN0QnV0dG9uIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuanVuaW9yUmVwb3J0UmVxdWVzdCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KHRoaXMuanVuaW9yQ29sdW1ucyxcbiAgICAgICAgICAgIHRoaXMuanVuaW9yUGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIHRoaXMuanVuaW9yUGFnZUluZm8uaWQsXG4gICAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdCwgJycsIHRoaXMuanVuaW9yUGFnZUluZm8sICdMQU5EU0NBUEUnKTtcbiAgICAgICAgICB0aGlzLmVucmljaEp1bmlvclJlcG9ydFJlcXVlc3QoJGV2ZW50LCB0aGlzLmp1bmlvclJlcG9ydFJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5hY3RpdmVMZXZlbCArMTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkb0FEcmlsbERvd25BY3Rpb24oJGV2ZW50OiBUYWJsZVBhZ2VVc2VyQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuZHJpbGxEb3duQ29sdW1ucyAmJiB0aGlzLmRyaWxsRG93blBhZ2VJbmZvKSB7XG4gICAgICBpZiAodGhpcy5lbnJpY2hEcmlsbERvd25SZXBvcnRSZXF1ZXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUxldmVsID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmJ1aWxkUmVwb3J0UmVxdWVzdCh0aGlzLmRyaWxsRG93bkNvbHVtbnMsXG4gICAgICAgICAgICB0aGlzLmRyaWxsRG93blBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLicgKyB0aGlzLmRyaWxsRG93blBhZ2VJbmZvLmlkLFxuICAgICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QsICcnLCB0aGlzLmRyaWxsRG93blBhZ2VJbmZvLCAnTEFORFNDQVBFJyk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlRXhwb3J0QWN0aW9uID0gdGhpcy5kcmlsbERvd25QYWdlSW5mby5oaWRlUmVwb3J0c0V4dHJhY3RCdXR0b24gfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5lbnJpY2hEcmlsbERvd25SZXBvcnRSZXF1ZXN0KCRldmVudCwgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5hY3RpdmVMZXZlbCArMTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvSHlwZXJMaW5rQWN0aW9uKCRldmVudDogVGFibGVQYWdlVXNlckFjdGlvbikge1xuICAgIGlmICh0aGlzLmVucmljaEh5cGVyTGlua1JlcG9ydFJlcXVlc3QpIHtcbiAgICAgICAgICB0aGlzLmp1bmlvclJlcG9ydFJlcXVlc3QgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmJ1aWxkUmVwb3J0UmVxdWVzdCh0aGlzLmp1bmlvckNvbHVtbnMsXG4gICAgICAgICAgICB0aGlzLmp1bmlvclBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLicgKyB0aGlzLmp1bmlvclBhZ2VJbmZvLmlkLFxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QsICcnLCB0aGlzLmp1bmlvclBhZ2VJbmZvLCAnTEFORFNDQVBFJyk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlRXhwb3J0QWN0aW9uID0gdGhpcy5qdW5pb3JQYWdlSW5mby5oaWRlUmVwb3J0c0V4dHJhY3RCdXR0b24gfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5lbnJpY2hIeXBlckxpbmtSZXBvcnRSZXF1ZXN0KCRldmVudCwgdGhpcy5qdW5pb3JSZXBvcnRSZXF1ZXN0KTtcbiAgICB9XG4gIH1cblxuICBleHRyYWN0UmVwb3J0KHJlcG9ydFR5cGU6IGFueSkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlTGV2ZWwgPT09IDEpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LnJlcG9ydFR5cGUgPSByZXBvcnRUeXBlO1xuICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLmRvd25sb2FkUmVwb3J0KHRoaXMucmVwb3J0UmVxdWVzdCwgdGhpcy5wYWdlSW5mby5hcGlVcmkgKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlTGV2ZWwgPT09IDIpIHtcbiAgICAgICAgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QucmVwb3J0VHlwZSA9IHJlcG9ydFR5cGU7XG4gICAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UuZG93bmxvYWRSZXBvcnQodGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QsIHRoaXMuZHJpbGxEb3duUGFnZUluZm8uYXBpVXJpICk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUxldmVsID09PSAzKSB7XG4gICAgICAgIHRoaXMuanVuaW9yUmVwb3J0UmVxdWVzdC5yZXBvcnRUeXBlID0gcmVwb3J0VHlwZTtcbiAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5kb3dubG9hZFJlcG9ydCh0aGlzLmp1bmlvclJlcG9ydFJlcXVlc3QsIHRoaXMuanVuaW9yUGFnZUluZm8uYXBpVXJpICk7XG4gICAgICB9XG4gICAgfVxuXG4gIGdvVXAoKSB7XG4gICAgdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5hY3RpdmVMZXZlbCAtMTtcbiAgICB0aGlzLmRvQWN0aW9uKHRoaXMueCk7XG4gICAgdGhpcy5yZWxvYWREYXRhID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5hY3RpdmVMZXZlbCA+MSkge1xuICAgICAgdGhpcy5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZUV4cG9ydEFjdGlvbiA9IGZhbHNlXG4gIH1cblxuICBkcmlsbERvd25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRyaWxsRG93blBhZ2VJbmZvICYmICF0aGlzLmhpZGVEcmlsbERvd25CdXR0b24gJiYgIXRoaXMuZ2V0SXNFbXB0eUxpc3QoKTtcbiAgfVxuXG4gIGRyaWxsRG93bkxhYmVsKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnBhZ2VJbmZvLmxhYmVsc1NlY3Rpb259LmRyaWxsRG93bkxhYmVsYCA7XG4gIH1cbiAgZ2V0SXNFbXB0eUxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFNlcnZpY2UuaXNFbXB0eUl0ZW1zIHx8IHRoaXMuZGlzYWJsZUV4cG9ydEFjdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBjbGVhcigpIHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjdXJyZW50VXJsXSk7XG4gICAgfSk7XG5cbiAgICAvLyBpZiAodGhpcy5yZXBvcnRGb3JtKSB7XG4gICAgLy8gICB0aGlzLnJlcG9ydEZvcm0ucmVzZXQoKTtcbiAgICAvL1xuICAgIC8vICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgLy8gICAgIGlmIChmaWVsZC50eXBlID09PSAnbG9va3VwJyB8fCBmaWVsZC50eXBlID09PSAnbXVsdGktc2VsZWN0Jykge1xuICAgIC8vICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnJlcG9ydEZvcm0uZ2V0KGZpZWxkLnByb3BlcnR5KTtcbiAgICAvLyAgICAgICBpZiAoY29udHJvbCkge1xuICAgIC8vICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgfVxuXG5cbiAgaXNGb3JtRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydEZvcm0gfHwgIXRoaXMucmVwb3J0Rm9ybS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5yZXBvcnRGb3JtLnZhbHVlKS5ldmVyeSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwO1xuXG5cbiAgICB9KTtcbiAgfVxuXG4gIHNob3VsZFByb2Nlc3NFdmVudEl0ZW0oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ3JvdXBCeVByb3AgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5UHJvcGVydHk7XG4gICAgY29uc3QgZ3JvdXBCeVZhbHVlcyA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlWYWx1ZTtcblxuICAgIGlmICghZ3JvdXBCeVByb3AgfHwgIWdyb3VwQnlWYWx1ZXMgfHwgIWl0ZW1bZ3JvdXBCeVByb3BdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bZ3JvdXBCeVByb3BdLnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gIWdyb3VwQnlWYWx1ZXMuc29tZSh2ID0+IHZhbHVlLmluY2x1ZGVzKHYpICYmIHZhbHVlLmxlbmd0aCA+PSB2Lmxlbmd0aCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW4gZnVsbC13aWR0aFwiPlxuXG4gIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24tc3RhcnQtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxMHB4O1wiPlxuICAgIDxhcHAtdGl0bGUtYmFyIFtwYWdlVGl0bGVdPVwiZ2V0VGl0bGUoKVwiIFtuZXdBY3Rpb25dPVwiZmFsc2VcIj48L2FwcC10aXRsZS1iYXI+XG5cbiAgICA8bWF0LWljb25cbiAgICAgICpuZ0lmPVwicGFnZUluZm8/Lmhhc0hpbnRcIlxuICAgICAgcm9sZT1cImltZ1wiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihwYWdlSW5mby5sYWJlbHNTZWN0aW9uICsgJy5oaW50JykgfCB0cmFuc2xhdGVcIlxuICAgICAgW21hdFRvb2x0aXBdPVwicGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuaGludCcgfCB0cmFuc2xhdGVcIlxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIGNsYXNzPVwiaGludC1pY29uXCJcbiAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XG4gICAgICBoZWxwX291dGxpbmVcbiAgICA8L21hdC1pY29uPlxuICA8L2Rpdj5cblxuICA8YXBwLWJhc2UtZm9ybS1jYW52YXNcbiAgICBbcGFnZUluZm9dPVwicGFnZUluZm9cIlxuICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICBbZWRpdGFibGVdPVwiaXNFZGl0YWJsZVwiXG4gICAgW2Vycm9yc109XCJlcnJvcnNcIlxuICAgIFtpdGVtXT1cInRoaXMucmVwb3J0Rm9ybT8udmFsdWUgfHwge31cIlxuICAgIChmb3JtVXBkYXRlZCk9XCJ1cGRhdGVGb3JtKCRldmVudClcIlxuICA+PC9hcHAtYmFzZS1mb3JtLWNhbnZhcz5cblxuICA8YnI+PGJyPlxuXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGdhcC0xMCByZXNwb25zaXZlLXJvd1wiPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZUxldmVsID09PSAxXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJkb0FjdGlvbih4KVwiIFtkaXNhYmxlZF09XCIhaXNWYWxpZEZvcm0oKVwiIGlkPVwicmVwb3J0LWdlbmVyYXRlLWJ0blwiPlxuICAgICAgICB7eyAnUkVQT1JUUy5nZW5lcmF0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgW2Rpc2FibGVkXT1cImdldElzRW1wdHlMaXN0KClcIiBjb2xvcj1cInByaW1hcnlcIiBpZD1cInJlcG9ydC1leHRyYWN0LXRyaWdnZXJcIj5cbiAgICAgICAge3sgJ2V4dHJhY3QnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImV4cGFuZF9tb3JlIGFjdGlvbkJ1dHRvbl9fZXhwYW5kXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgW2Rpc2FibGVkXT1cImlzRm9ybUVtcHR5KCkgfHwgYWN0aXZlTGV2ZWwgPiAxXCIgaWQ9XCJyZXBvcnQtY2xlYXItYnRuXCI+XG4gICAgICAgIHt7ICdSRVBPUlRTLmNsZWFyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVMZXZlbCA9PT0gMSAmJiBkcmlsbERvd25FbmFibGVkKClcIiBjb2xvcj1cIndhcm5cIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImRyaWxsRG93bigpXCIgaWQ9XCJyZXBvcnQtZHJpbGxkb3duLWJ0blwiPlxuICAgICAgICB7eyBkcmlsbERvd25MYWJlbCgpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZUxldmVsID4gMSAmJiBiYWNrQnV0dG9uRW5hYmxlZFwiIGNvbG9yPVwid2FyblwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwiZ29VcCgpXCIgaWQ9XCJyZXBvcnQtdXAtYnRuXCI+XG4gICAgICAgIHt7ICdSRVBPUlRTLnVwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJhY3RpdmVMZXZlbCA+PSAxXCIgY2xhc3M9XCJtYWluLWZvcm0tY2FudmFzIHJvdyBhbGlnbi1zdGFydC1zdGFydCByZXNwb25zaXZlLXRhYmxlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAzdmg7XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBmdWxsLXdpZHRoXCI+XG4gICAgICA8YXBwLWJhc2UtdGFibGVcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVMZXZlbCA9PT0gMVwiXG4gICAgICAgIFtwYWdlSW5mb109XCJwYWdlSW5mb1wiXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNEZWZpbml0aW9uXCJcbiAgICAgICAgW2VuZm9yY2VSZWZyZXNoXT1cInJlbG9hZERhdGFcIlxuICAgICAgICBpZD1cInBhcmVudFwiXG4gICAgICAgIFtyZXBvcnRSZXF1ZXN0XT1cInJlcG9ydFJlcXVlc3RcIlxuICAgICAgICAodXNlckFjdGlvbik9XCJlbWl0VXNlckFjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgKGh5cGVyTGlua0FjdGlvbik9XCJlbWl0SHlwZXJMaW5rQWN0aW9uKCRldmVudClcIj5cbiAgICAgIDwvYXBwLWJhc2UtdGFibGU+XG5cbiAgICAgIDxhcHAtYmFzZS10YWJsZVxuICAgICAgICAqbmdJZj1cImFjdGl2ZUxldmVsID09PSAyXCJcbiAgICAgICAgW3BhZ2VJbmZvXT1cImRyaWxsRG93blBhZ2VJbmZvXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiZHJpbGxEb3duQ29sdW1uc1wiXG4gICAgICAgIGlkPVwiY2hpbGRcIlxuICAgICAgICBbcmVwb3J0UmVxdWVzdF09XCJjaGlsZFJlcG9ydFJlcXVlc3RcIlxuICAgICAgICAodXNlckFjdGlvbik9XCJlbWl0SnVuaW9yQWN0aW9uKCRldmVudClcIlxuICAgICAgICAoaHlwZXJMaW5rQWN0aW9uKT1cImVtaXRIeXBlckxpbmtBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9hcHAtYmFzZS10YWJsZT5cblxuICAgICAgPGFwcC1iYXNlLXRhYmxlXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlTGV2ZWwgPT09IDNcIlxuICAgICAgICBbcGFnZUluZm9dPVwianVuaW9yUGFnZUluZm9cIlxuICAgICAgICBbY29sdW1uc109XCJqdW5pb3JDb2x1bW5zXCJcbiAgICAgICAgaWQ9XCJqdW5pb3JcIlxuICAgICAgICBbcmVwb3J0UmVxdWVzdF09XCJqdW5pb3JSZXBvcnRSZXF1ZXN0XCI+XG4gICAgICA8L2FwcC1iYXNlLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPC9kaXY+XG5cbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgdHlwZSBvZiB0eXBlc1wiIChjbGljayk9XCJleHRyYWN0UmVwb3J0KHR5cGUpXCIgW2F0dHIuaWRdPVwiJ3JlcG9ydC1leHRyYWN0LWl0ZW0tJyArIHR5cGVcIj5cbiAgICB7eyB0eXBlIH19XG4gIDwvYnV0dG9uPlxuPC9tYXQtbWVudT5cbiJdfQ==
|
|
485
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9yZXBvcnQtZm9ybS9yZXBvcnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL3JlcG9ydC1mb3JtL3JlcG9ydC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMEIsU0FBUyxFQUFFLFlBQVksRUFBWSxLQUFLLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhILE9BQU8sRUFBQyxlQUFlLEVBQVcsTUFBTSw0QkFBNEIsQ0FBQztBQUdyRSxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDcEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFr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Q0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUdOLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RmllbGRJbmZvfSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9maWVsZC1pbmZvXCI7XG5pbXBvcnQge0VNUFRZX1BBR0VfSU5GTywgUGFnZUluZm99IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3BhZ2UtaW5mb1wiO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvdGFibGUtY29sdW1uLmludGVyZmFjZVwiO1xuaW1wb3J0IHtGaWVsZE1lc3NhZ2V9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2FwaS1yZXNwb25zZVwiO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge0JhY2tlbmRTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYmFja2VuZC1zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Hcm91cH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge2Zvcm1hdERhdGUsIE5nRm9yT2YsIE5nSWZ9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7TWF0TWVudSwgTWF0TWVudUl0ZW0sIE1hdE1lbnVUcmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xuaW1wb3J0IHtNYXRCdXR0b24sIE1hdEJ1dHRvbk1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xuaW1wb3J0IHtCYXNlVGFibGVDb21wb25lbnR9IGZyb20gXCIuLi9iYXNlLXRhYmxlL2Jhc2UtdGFibGUuY29tcG9uZW50XCI7XG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQge0ZpbHRlclJlcXVlc3R9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2ZpbHRlci1yZXF1ZXN0XCI7XG5pbXBvcnQge1JlcG9ydFJlcXVlc3R9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3JlcG9ydC1yZXF1ZXN0Lm1vZGVsXCI7XG5pbXBvcnQge0ZpbHRlcn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQge1RpdGxlQmFyQ29tcG9uZW50fSBmcm9tIFwiLi4vdGl0bGUtYmFyL3RpdGxlLWJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7QmFzZUZvcm1DYW52YXNDb21wb25lbnR9IGZyb20gXCIuLi9iYXNlLWZvcm0tY2FudmFzL2Jhc2UtZm9ybS1jYW52YXMuY29tcG9uZW50XCI7XG5pbXBvcnQge0RSSUxMX0RPV05fQUNUSU9OLCBKVU5JT1JfRE9XTl9BQ1RJT04sIFNuYWNrTWVzc2FnZSwgVGFibGVQYWdlVXNlckFjdGlvbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWxcIjtcbmltcG9ydCB7fSBmcm9tIFwiLi4vYXVkaXQtbG9nLWRldGFpbHMtZGlhbG9nL2F1ZGl0LWxvZy1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnRcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge1JlcG9ydERldGFpbHNEaWFsb2dDb21wb25lbnR9IGZyb20gXCIuLi9yZXBvcnQtZGV0YWlscy1kaWFsb2cvcmVwb3J0LWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TWF0VG9vbHRpcH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcbmltcG9ydCB7RGlyZWN0aW9uYWxpdHl9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xuXG5cbmNvbnN0IE5PTl9SRVBPUlRfQ09MVU1OUyA9IFsnbGlzdEFjdGlvbicsICdidXR0b24nLCAnY2hlY2tib3gnXTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtcmVwb3J0LWZvcm0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUaXRsZUJhckNvbXBvbmVudCxcbiAgICBCYXNlRm9ybUNhbnZhc0NvbXBvbmVudCxcbiAgICBNYXRNZW51LFxuICAgIE1hdE1lbnVJdGVtLFxuICAgIE5nRm9yT2YsXG4gICAgTWF0TWVudVRyaWdnZXIsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCYXNlVGFibGVDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRUb29sdGlwXG4gIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vcmVwb3J0LWZvcm0uY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0RldGFpbHMgOiBhbnkgPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0V4dHJhY3RCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbjxhbnk+W10gPVtdO1xuXG4gICAgQElucHV0KCkgYWN0aW9uUmVxdWVzdENhbGxiYWNrITogKGFjdGlvblJlcXVlc3Q6IFRhYmxlUGFnZVVzZXJBY3Rpb24pID0+IFRhYmxlUGFnZVVzZXJBY3Rpb247XG4gICAgQElucHV0KCkgZW5yaWNoRHJpbGxEb3duUmVwb3J0UmVxdWVzdCE6IChhY3Rpb25SZXF1ZXN0OiBUYWJsZVBhZ2VVc2VyQWN0aW9uLCByZXBvcnRSZXF1ZXN0OiBSZXBvcnRSZXF1ZXN0KSA9PiBUYWJsZVBhZ2VVc2VyQWN0aW9uO1xuICAgIEBJbnB1dCgpIGVucmljaEh5cGVyTGlua1JlcG9ydFJlcXVlc3QhOiAoYWN0aW9uUmVxdWVzdDogVGFibGVQYWdlVXNlckFjdGlvbiwgcmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCkgPT4gVGFibGVQYWdlVXNlckFjdGlvbjtcbiAgICBASW5wdXQoKSBlbnJpY2hKdW5pb3JSZXBvcnRSZXF1ZXN0ITogKGFjdGlvblJlcXVlc3Q6IFRhYmxlUGFnZVVzZXJBY3Rpb24sIHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFJlcXVlc3QpID0+IFRhYmxlUGFnZVVzZXJBY3Rpb247XG5cbiAgICBAT3V0cHV0KClcbiAgICB1c2VyQWN0aW9uOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+KCk7XG4gICAgYWN0aXZlTGV2ZWw6IG51bWJlciA9IDE7XG5cbiAgICBwcml2YXRlIGZpbHRlclJlcXVlc3Q6IEZpbHRlclJlcXVlc3Q7XG4gICAgeDogYW55O1xuICAgIGlzRWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGZpZWxkczogRmllbGRJbmZvW10gPSBbXTtcbiAgICBwYWdlSW5mbzogUGFnZUluZm8gPSBFTVBUWV9QQUdFX0lORk87XG4gICAgZHJpbGxEb3duUGFnZUluZm86IFBhZ2VJbmZvID0gRU1QVFlfUEFHRV9JTkZPO1xuICAgIGRyaWxsRG93bkNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXSA9IFtdO1xuICAgIGhpZGVEcmlsbERvd25CdXR0b246IGZhbHNlO1xuXG4gICAganVuaW9yUGFnZUluZm86IFBhZ2VJbmZvID0gRU1QVFlfUEFHRV9JTkZPO1xuICAgIGp1bmlvckNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXSA9IFtdO1xuXG4gICAgY29sdW1uc0RlZmluaXRpb246IFRhYmxlQ29sdW1uPGFueT5bXSA9IFtdO1xuICAgIHR5cGVzOiBzdHJpbmdbXSA9IFtcInBkZlwiLCBcImNzdlwiLCBcInhsc3hcIl1cbiAgICBzZWFyY2hTdHI6IHN0cmluZyA9ICcnO1xuXG4gICAgZXJyb3JzOiBGaWVsZE1lc3NhZ2VbXSA9IFtdO1xuXG4gICAgcmVsb2FkRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGJhY2tCdXR0b25FbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuXG4gICAgcmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCA9IG5ldyBSZXBvcnRSZXF1ZXN0KHt9KTtcbiAgICBjaGlsZFJlcG9ydFJlcXVlc3Q6IFJlcG9ydFJlcXVlc3QgPSBuZXcgUmVwb3J0UmVxdWVzdCh7fSk7XG4gICAganVuaW9yUmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCA9IG5ldyBSZXBvcnRSZXF1ZXN0KHt9KTtcbiAgICBwdWJsaWMgcmVwb3J0Rm9ybTogRm9ybUdyb3VwO1xuICAgIHJlYWR5VG9TZWFyY2ggPSBmYWxzZTtcbiAgICBwcml2YXRlIHBhZ2VTaXplOiBhbnk7XG4gICAgcHJpdmF0ZSBkaWFsb2dSZXBvcnRSZXF1ZXN0OiBhbnk7XG4gICAgY3VycmVudERpcmVjdGlvbjogJ2x0cicgfCAncnRsJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHVibGljIGJhY2tlbmRTZXJ2aWNlOiBCYWNrZW5kU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5LFxuICAgICAgICAgICAgICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIH1cblxuICAgIGRpc2FibGVFeHBvcnRBY3Rpb24gOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uYWxpdHkudmFsdWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbmFsaXR5LmNoYW5nZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbiA9IHZhbHVlO1xuICAgICAgfSlcblxuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy5wYWdlSW5mbyA9IGRhdGFbJ3BhZ2VJbmZvJ107XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VTaXplID8/IDEwO1xuICAgICAgICB0aGlzLmZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCh0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgZGF0YVsncGFnZUluZm8nXS5sYXp5TG9hZERhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmRyaWxsRG93blBhZ2VJbmZvID0gZGF0YVsnZHJpbGxEb3duUGFnZUluZm8nXTtcbiAgICAgICAgdGhpcy5kcmlsbERvd25Db2x1bW5zID0gZGF0YVsnZHJpbGxEb3duQ29sdW1ucyddPy5maWx0ZXIoYyA9PiBjLnByb3BlcnR5ICE9PSAnc2VsZWN0SXRlbScpO1xuICAgICAgICB0aGlzLmhpZGVEcmlsbERvd25CdXR0b24gPSBkYXRhWydoaWRlRHJpbGxEb3duQnV0dG9uJ10gPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuanVuaW9yUGFnZUluZm8gPSBkYXRhWydqdW5pb3JQYWdlSW5mbyddO1xuICAgICAgICB0aGlzLmp1bmlvckNvbHVtbnMgPSBkYXRhWydqdW5pb3JDb2x1bW5zJ107XG4gICAgICAgIHRoaXMuY29sdW1uc0RlZmluaXRpb24gPSBkYXRhWydjb2x1bW5zRGVmaW5pdGlvbiddLmZpbHRlcihjID0+ICh0aGlzLmRyaWxsRG93blBhZ2VJbmZvICYmIHRoaXMuZHJpbGxEb3duQ29sdW1ucyB8fCAoIU5PTl9SRVBPUlRfQ09MVU1OUy5pbmNsdWRlcyhjLnR5cGUpKSkpO1xuICAgICAgICB0aGlzLmZpZWxkcyA9IGRhdGFbJ2ZpZWxkcyddO1xuICAgICAgICBpZiAoZGF0YVsnZW5yaWNoRHJpbGxEb3duUmVwb3J0UmVxdWVzdCddKSB7XG4gICAgICAgICAgdGhpcy5lbnJpY2hEcmlsbERvd25SZXBvcnRSZXF1ZXN0ID0gZGF0YVsnZW5yaWNoRHJpbGxEb3duUmVwb3J0UmVxdWVzdCddKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhWydlbnJpY2hKdW5pb3JSZXBvcnRSZXF1ZXN0J10pIHtcbiAgICAgICAgICB0aGlzLmVucmljaEp1bmlvclJlcG9ydFJlcXVlc3QgPSBkYXRhWydlbnJpY2hKdW5pb3JSZXBvcnRSZXF1ZXN0J10odGhpcy5pbmplY3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YVsnZW5yaWNoSHlwZXJMaW5rUmVwb3J0UmVxdWVzdCddKSB7XG4gICAgICAgICAgdGhpcy5lbnJpY2hIeXBlckxpbmtSZXBvcnRSZXF1ZXN0ID0gZGF0YVsnZW5yaWNoSHlwZXJMaW5rUmVwb3J0UmVxdWVzdCddKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgICAgY29uc3QgaXNDb21wYXJpc29uUmVwb3J0ID0gcGFyYW1zLmdldCgnY29tcGFyaXNvblJlcG9ydCcpID09PSAndHJ1ZSc7XG5cbiAgICAgICAgaWYgKGlzQ29tcGFyaXNvblJlcG9ydCkge1xuICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb25TdHIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjb21wYXJpc29uUmVwb3J0UGFnZUluZm8nKTtcblxuICAgICAgICAgIGlmIChjb21wYXJpc29uU3RyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJpc29uRGF0YSA9IEpTT04ucGFyc2UoY29tcGFyaXNvblN0cik7XG5cbiAgICAgICAgICAgIHRoaXMucGFnZUluZm8ubGF6eUxvYWREYXRhID0gY29tcGFyaXNvbkRhdGEubGF6eUxvYWREYXRhID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IGNvbXBhcmlzb25EYXRhLmFjdGl2ZUxldmVsID8/IDI7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYmFja0J1dHRvbkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJpbGxEb3duUGFnZUluZm8gPSBjb21wYXJpc29uRGF0YS5kcmlsbERvd25QYWdlSW5mbztcbiAgICAgICAgICAgIHRoaXMuZHJpbGxEb3duQ29sdW1ucyA9IGNvbXBhcmlzb25EYXRhLmRyaWxsRG93bkNvbHVtbnM7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgZGlyZWN0b3JhdGU6IFtbXV0sXG4gICAgICAgICAgICAgIGZyb21EYXRlOiBbJyddLFxuICAgICAgICAgICAgICB0b0RhdGU6IFsnJ10sXG4gICAgICAgICAgICAgIHNlY3RvcjogWycnXSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnJlcG9ydEZvcm0ucGF0Y2hWYWx1ZShjb21wYXJpc29uRGF0YS5mb3JtKVxuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkcy5maWx0ZXIoYyA9PiBjLnR5cGUgIT09ICdjaGVja2JveCcpO1xuXG4gICAgICAgICAgICBjb25zdCByZXBvcnRSZXF1ZXN0ID0gY29tcGFyaXNvbkRhdGEucmVwb3J0UmVxdWVzdDtcblxuICAgICAgICAgICAgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmJ1aWxkUmVwb3J0UmVxdWVzdChcbiAgICAgICAgICAgICAgdGhpcy5kcmlsbERvd25Db2x1bW5zLFxuICAgICAgICAgICAgICBgJHt0aGlzLmRyaWxsRG93blBhZ2VJbmZvLmxhYmVsc1NlY3Rpb259LiR7dGhpcy5kcmlsbERvd25QYWdlSW5mby5pZH1gLFxuICAgICAgICAgICAgICByZXBvcnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgdGhpcy5kcmlsbERvd25QYWdlSW5mbyxcbiAgICAgICAgICAgICAgJ0xBTkRTQ0FQRSdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgIC8vIG5nT25DaGFuZ2VzKHtpdGVtLCBlcnJvcnMsIGZpZWxkc306IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyAgICAgLy8gZXJyb3JzPy5jdXJyZW50VmFsdWU/LmZvckVhY2goKG1zZzogRmllbGRNZXNzYWdlKSA9PiB7XG4gICAgLy8gICAgIC8vICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KG1zZy5maWVsZE5hbWUpPy5zZXRFcnJvcnMoe3NlcnZlckVycm9yOiBtc2cubWVzc2FnZX0pO1xuICAgIC8vICAgICAvLyB9KTtcbiAgICAvLyAgICAgLy8gaWYgKGZpZWxkcz8uY3VycmVudFZhbHVlICYmICFmaWVsZHMuaXNGaXJzdENoYW5nZSgpKXtcbiAgICAvLyAgICAgLy8gICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgLy8gICAgIC8vIH1cbiAgICAvLyAgICAgLy8gdGhpcy5idWlsZEZvcm0oKTtcbiAgICAvLyB9XG5cbiAgICBpc01hdGNoSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5mby5wYWdlSGVpZ2h0ID09PSAnbWF0Y2gnO1xuICAgIH1cblxuXG4gICAgZG9BY3Rpb24odHlwZTogc3RyaW5nKSB7XG4gICAgICBpZiAodGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLnZhbGlkKSB7XG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSA9ICF0aGlzLnJlbG9hZERhdGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclJlcXVlc3Q6IEZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCh0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgZmlsdGVyUmVxdWVzdC5maWx0ZXJzID0gW107XG4gICAgICAgIGxldCBwYXJhbXNTdHJpbmc6IHN0cmluZ1tdID0gW107XG4gICAgICAgIHRoaXMuZmllbGRzLmZpbHRlcih4ID0+IHgudHlwZSAhPT0gJ3NwYWNlcicpLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0UGFyYW1WYWx1ZShmKSAhPSBudWxsICYmIHRoaXMuZ2V0UGFyYW1WYWx1ZShmKS50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpXG4gICAgICAgICAge1xuICAgICAgICAgIGlmIChmLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnIHx8IGYudHlwZSA9PT0gJ2xvb2t1cCcpIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdCBmaWx0ZXIgaWYgdGhpcyBmaWVsZCBhcyBjYXNjYWRpbmcgZm9yIGFub3RoZXIgb25lIGFuZCB0aGUgb3RoZXIgb25lIGdvdCBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkRmllbGRJZHggPSB0aGlzLmZpZWxkcy5maW5kSW5kZXgoZmllbGQgPT4gZmllbGQuY2FzY2FkZWRCeSA9PT0gZi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRGaWVsZElkeCA+IC0xICYmIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQodGhpcy5maWVsZHNbY2hpbGRGaWVsZElkeF0ucHJvcGVydHkpPy52YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZHo6IG51bWJlcltdID0gW107XG4gICAgICAgICAgICBjb25zdCBwYXJhbTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSAmJiBBcnJheS5pc0FycmF5KHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlKVxuICAgICAgICAgICAgICAmJiB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlLmZvckVhY2goKGE6IHtcbiAgICAgICAgICAgICAgICBjaGFubmVsSWQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBlbmdsaXNoTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZi5mbGF0dGVuQnlTdWJBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICAgIGlkei5wdXNoKGFbZi5mbGF0dGVuQnlTdWJBdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgICAgICAgIHBhcmFtLnB1c2goYVtmLmZsYXR0ZW5CeVN1YkF0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZHMuZmluZChzID0+IHMucHJvcGVydHkgPT09ICd0ZXJtaW5hbElkJykpIHtcbiAgICAgICAgICAgICAgICAgIGlkei5wdXNoKGEuY2hhbm5lbElkKTtcbiAgICAgICAgICAgICAgICAgIHBhcmFtLnB1c2goYS5lbmdsaXNoTmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlkei5wdXNoKGEuaWQpO1xuICAgICAgICAgICAgICAgICAgcGFyYW0ucHVzaChhLmVuZ2xpc2hOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGZpbHRlclJlcXVlc3QuZmlsdGVycz8ucHVzaChuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBpZDogZi5wcm9wZXJ0eSwgZmllbGROYW1lOiBmLnByb3BlcnR5LCBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZi5sYWJlbCksXG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZTogJ0ZJTEVEX0ZJTFRFUicsIG9wZXJhdG9yOiBmLmZpbHRlck9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0OiBpZHpcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBwYXJhbXNTdHJpbmcucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmLmxhYmVsKSArICcgOiAnICsgcGFyYW0uam9pbignLCcpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWUgJiYgZi5mbGF0dGVuQnlTdWJBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgZmlsdGVyUmVxdWVzdC5maWx0ZXJzPy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBmLnByb3BlcnR5LCBmaWVsZE5hbWU6IGYucHJvcGVydHksIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmLmxhYmVsKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlOiAnRklMRURfRklMVEVSJywgb3BlcmF0b3I6IGYuZmlsdGVyT3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWVPYmplY3Q6IHRoaXMuZ2V0UGFyYW1WYWx1ZShmKVtmLmZsYXR0ZW5CeVN1YkF0dHJpYnV0ZV1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBmaWx0ZXJSZXF1ZXN0LmZpbHRlcnM/LnB1c2gobmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgaWQ6IGYucHJvcGVydHksIGZpZWxkTmFtZTogZi5wcm9wZXJ0eSwgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGYubGFiZWwpLFxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGU6ICdGSUxFRF9GSUxURVInLCBvcGVyYXRvcjogZi5maWx0ZXJPcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdDogdGhpcy5nZXRQYXJhbVZhbHVlKGYpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtc1N0cmluZy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGYubGFiZWwpICsgJyA6ICcgKyB0aGlzLmdldFBhcmFtVmFsdWVMYWJlbChmKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9fSlcbiAgICAgICAgY29uc3QgcmVwb3J0UmVxdWVzdCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KHRoaXMuY29sdW1uc0RlZmluaXRpb24sIHRoaXMucGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIHRoaXMucGFnZUluZm8uaWQsXG4gICAgICAgICAgZmlsdGVyUmVxdWVzdCwgdHlwZSwgdGhpcy5wYWdlSW5mbywgJ0xBTkRTQ0FQRScpO1xuICAgICAgICByZXBvcnRSZXF1ZXN0LnNlYXJjaFN0ciA9IHBhcmFtc1N0cmluZy5qb2luKCcgLCAnKTtcbiAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0ID0gcmVwb3J0UmVxdWVzdDtcbiAgICAgICAgLy8gdGhpcy5hY3RpdmVMZXZlbCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLnRvcFBhbmVsTWVzc2FnZSQubmV4dChuZXcgU25hY2tNZXNzYWdlKCdJTlZBTElEX1JFUE9SVF9GT1JNJywgdHJ1ZSwgJ2Vycm9yJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyYW1WYWx1ZShmOiBGaWVsZEluZm8pIHtcbiAgICAgICAgaWYgKGYudHlwZSA9PT0gJ2RhdGUnICYmIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZSh0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSwgJ3l5eXktTU0tZGQnLCAnZW5fVVMnKVxuICAgICAgICB9ZWxzZSBpZiAoZi50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybS5nZXQoZi5wcm9wZXJ0eSk/LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJhbVZhbHVlTGFiZWwoZjogRmllbGRJbmZvKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmRTZXJ2aWNlLnBhcmVudEZvcm0uZ2V0KGYucHJvcGVydHkpPy52YWx1ZSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd5ZXMnKSA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdubycpO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLmdldChmLnByb3BlcnR5KT8udmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgZ2V0VGl0bGUoKSB7XG4gICAgY29uc3QgcGFnZUluZm9NYXAgPSB7XG4gICAgICAxOiB0aGlzLnBhZ2VJbmZvLFxuICAgICAgMjogdGhpcy5kcmlsbERvd25QYWdlSW5mbyxcbiAgICAgIDM6IHRoaXMuanVuaW9yUGFnZUluZm9cbiAgICB9O1xuXG4gICAgY29uc3QgY3VycmVudEluZm8gPSBwYWdlSW5mb01hcFt0aGlzLmFjdGl2ZUxldmVsXSB8fCB0aGlzLnBhZ2VJbmZvO1xuICAgIHJldHVybiBgJHtjdXJyZW50SW5mby5sYWJlbHNTZWN0aW9ufS4ke2N1cnJlbnRJbmZvLmlkfWA7XG4gIH1cblxuICAgIHVwZGF0ZUZvcm0oJGV2ZW50OiBGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMucmVwb3J0Rm9ybSA9ICRldmVudDtcbiAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UucGFyZW50Rm9ybSA9ICRldmVudDtcblxuICAgICAgdGhpcy5zZXR1cERlcGVuZGVudEZpZWxkV2F0Y2hlcnMoKTtcblxuICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFkeVRvU2VhcmNoID0gdGhpcy5iYWNrZW5kU2VydmljZS5wYXJlbnRGb3JtLnZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICk7XG4gICAgfVxuXG4gIHByaXZhdGUgc2V0dXBEZXBlbmRlbnRGaWVsZFdhdGNoZXJzKCkge1xuICAgIHRoaXMuZmllbGRzXG4gICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmxvb2t1cEZpbHRlckxpc3QgJiYgZmllbGQubG9va3VwRmlsdGVyTGlzdC5sZW5ndGggPiAwKVxuICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBjb25zdCBkZXBlbmRlbnRGaWVsZHMgPSBmaWVsZC5sb29rdXBGaWx0ZXJMaXN0Lm1hcChmID0+IGYuZmllbGROYW1lKTtcblxuICAgICAgICBkZXBlbmRlbnRGaWVsZHMuZm9yRWFjaChkZXBlbmRlbnRGaWVsZE5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlcGVuZGVudENvbnRyb2wgPSB0aGlzLnJlcG9ydEZvcm0uZ2V0KGRlcGVuZGVudEZpZWxkTmFtZSk7XG4gICAgICAgICAgaWYgKGRlcGVuZGVudENvbnRyb2wpIHtcbiAgICAgICAgICAgIGRlcGVuZGVudENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSB0aGlzLnJlcG9ydEZvcm0uZ2V0KGZpZWxkLnByb3BlcnR5KTtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaXNWYWxpZEZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWFkeVRvU2VhcmNoIDtcblxuICAgIH1cblxuXG5cbiAgZW1pdFVzZXJBY3Rpb24oJGV2ZW50OiBUYWJsZVBhZ2VVc2VyQWN0aW9uKSB7XG4gICAgJGV2ZW50LnBhZ2VJbmZvID0gdGhpcy5wYWdlSW5mbztcbiAgICB0aGlzLmRvQURyaWxsRG93bkFjdGlvbigkZXZlbnQpO1xuICB9XG5cbiAgZW1pdEh5cGVyTGlua0FjdGlvbigkZXZlbnQ6IFRhYmxlUGFnZVVzZXJBY3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUHJvY2Vzc0V2ZW50SXRlbSgkZXZlbnQuaXRlbSkpIHJldHVybjtcblxuICAgIGNvbnN0IGl0ZW0gPSAkZXZlbnQuaXRlbTtcbiAgICB0aGlzLnByZXBhcmVEaWFsb2dSZXBvcnRSZXF1ZXN0KGl0ZW0pO1xuICAgIGNvbnN0IHJlcG9ydFJlcXVlc3QgPSB0aGlzLmJ1aWxkRGlhbG9nUmVwb3J0UmVxdWVzdCgpO1xuICAgIHJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlSW5kZXggPSAwXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZXBvcnREZXRhaWxzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHBhZ2VJbmZvOiB0aGlzLmp1bmlvclBhZ2VJbmZvLFxuICAgICAgICByZXF1ZXN0OiByZXBvcnRSZXF1ZXN0LFxuICAgICAgICBjb2x1bW5zOiB0aGlzLmp1bmlvckNvbHVtbnMsXG4gICAgICAgIGl0ZW0sXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiAnNTB2dycsXG4gICAgICBtYXhXaWR0aDogJzEyMHZ3JyxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50RGlyZWN0aW9uLFxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRvSHlwZXJMaW5rQWN0aW9uKCRldmVudCkpO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVEaWFsb2dSZXBvcnRSZXF1ZXN0KGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVwb3J0UmVxdWVzdCA9IGNsb25lRGVlcCh0aGlzLnJlcG9ydFJlcXVlc3QpO1xuICAgIHRoaXMuZGlhbG9nUmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0ID0geyBmaWx0ZXJzOiBbXSB9O1xuXG4gICAgdGhpcy5hZGRTdGFuZGFyZEZpbHRlcnMoaXRlbSk7XG4gICAgdGhpcy5hZGRPclJlcGxhY2VGaWx0ZXIoJ2lzZWMxJywgJ2lTZWMnLCBpdGVtWydpc2VjX3ZhbHVlJ10pO1xuICAgIHRoaXMuYWRkRmlsdGVyVHlwZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdGFuZGFyZEZpbHRlcnMoaXRlbTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhbmRhcmRGaWx0ZXJzID0gW1xuICAgICAgeyBrZXk6ICdwZXJpb2QnLCB2YWx1ZTogaXRlbVsncGVyaW9kJ10gfSxcbiAgICAgIHsga2V5OiAneWVhcicsIHZhbHVlOiBpdGVtWyd5ZWFyJ10gfSxcbiAgICAgIHsga2V5OiAnc2VjdG9yJywgdmFsdWU6IGl0ZW1bJ3NlY3RvckNvZGUnXSB9LFxuICAgICAgeyBrZXk6ICdkaXJlY3RvcmF0ZScsIHZhbHVlOiBpdGVtWydkaXJlY3RvcmF0ZUNvZGUnXSB9LFxuICAgICAgeyBrZXk6ICdzdWJUYXhSYXRlJywgdmFsdWU6IGl0ZW1bJ3RheF9yYXRlX2NvZGUnXSB9LFxuICAgIF07XG5cbiAgICBzdGFuZGFyZEZpbHRlcnMuZm9yRWFjaCgoeyBrZXksIHZhbHVlIH0pID0+XG4gICAgICB0aGlzLmRpYWxvZ1JlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5maWx0ZXJzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyKGtleSwga2V5LCB2YWx1ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWx0ZXJUeXBlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzVGF4ID0gdGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmFjdGlvbktleT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndGF4Jyk7XG4gICAgY29uc3QgZmlsdGVyVHlwZSA9IGlzVGF4ID8gJ1RBWCcgOiAnVkFMVUUnO1xuXG4gICAgdGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QuZmlsdGVycy5wdXNoKFxuICAgICAgdGhpcy5jcmVhdGVGaWx0ZXIoJ2ZpbHRlclR5cGUnLCAnZmlsdGVyVHlwZScsIGZpbHRlclR5cGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREaWFsb2dSZXBvcnRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KFxuICAgICAgdGhpcy5qdW5pb3JDb2x1bW5zLFxuICAgICAgYCR7dGhpcy5qdW5pb3JQYWdlSW5mby5sYWJlbHNTZWN0aW9ufS4ke3RoaXMuanVuaW9yUGFnZUluZm8uaWR9YCxcbiAgICAgIHsgLi4udGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QgfSxcbiAgICAgICcnLFxuICAgICAgdGhpcy5qdW5pb3JQYWdlSW5mbyxcbiAgICAgICdMQU5EU0NBUEUnXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmlsdGVyKGtleTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IEZpbHRlciB7XG4gICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAga2V5LFxuICAgICAgZmllbGROYW1lLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgZmlsdGVyVHlwZTogJ0ZJTEVEX0ZJTFRFUicsXG4gICAgICBvcGVyYXRvcjogJ0VRVUFMUycsXG4gICAgICB2YWx1ZU9iamVjdDogdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZE9yUmVwbGFjZUZpbHRlcihpZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuICAgICAgaWQsXG4gICAgICBmaWVsZE5hbWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBmaWx0ZXJUeXBlOiAnRklMRURfRklMVEVSJyxcbiAgICAgIG9wZXJhdG9yOiAnRVFVQUxTJyxcbiAgICAgIHZhbHVlT2JqZWN0OiB2YWx1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmRpYWxvZ1JlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5maWx0ZXJzO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBmaWx0ZXJzLmZpbmRJbmRleCgoZjogRmlsdGVyKSA9PiBmLmlkID09PSBpZCk7XG5cbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGZpbHRlcnMuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEsIGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG5cblxuICBlbWl0SnVuaW9yQWN0aW9uKCRldmVudDogVGFibGVQYWdlVXNlckFjdGlvbikge1xuICAgIGNvbnN0IGp1bmlvckFjdGlvbiA9IEpVTklPUl9ET1dOX0FDVElPTjtcbiAgICBqdW5pb3JBY3Rpb24ucGFnZUluZm8gPSB0aGlzLmRyaWxsRG93blBhZ2VJbmZvO1xuICAgIHRoaXMuZG9KdW5pb3JBY3Rpb24oJGV2ZW50KTtcbiAgfVxuXG4gIGRyaWxsRG93bigpIHtcbiAgICBjb25zdCBkcmlsbGRvd25hY3Rpb24gPSBEUklMTF9ET1dOX0FDVElPTjtcbiAgICBkcmlsbGRvd25hY3Rpb24ucGFnZUluZm8gPSB0aGlzLmRyaWxsRG93blBhZ2VJbmZvO1xuICAgIHRoaXMuZG9BRHJpbGxEb3duQWN0aW9uKGRyaWxsZG93bmFjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGRvSnVuaW9yQWN0aW9uKCRldmVudDogVGFibGVQYWdlVXNlckFjdGlvbikge1xuICAgIGlmICh0aGlzLmp1bmlvckNvbHVtbnMgJiYgdGhpcy5qdW5pb3JQYWdlSW5mbykge1xuICAgICAgaWYgKHRoaXMuZW5yaWNoSnVuaW9yUmVwb3J0UmVxdWVzdCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVMZXZlbCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUV4cG9ydEFjdGlvbiA9IHRoaXMuanVuaW9yUGFnZUluZm8uaGlkZVJlcG9ydHNFeHRyYWN0QnV0dG9uIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuanVuaW9yUmVwb3J0UmVxdWVzdCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KHRoaXMuanVuaW9yQ29sdW1ucyxcbiAgICAgICAgICAgIHRoaXMuanVuaW9yUGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIHRoaXMuanVuaW9yUGFnZUluZm8uaWQsXG4gICAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdCwgJycsIHRoaXMuanVuaW9yUGFnZUluZm8sICdMQU5EU0NBUEUnKTtcbiAgICAgICAgICB0aGlzLmVucmljaEp1bmlvclJlcG9ydFJlcXVlc3QoJGV2ZW50LCB0aGlzLmp1bmlvclJlcG9ydFJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5hY3RpdmVMZXZlbCArMTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkb0FEcmlsbERvd25BY3Rpb24oJGV2ZW50OiBUYWJsZVBhZ2VVc2VyQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuZHJpbGxEb3duQ29sdW1ucyAmJiB0aGlzLmRyaWxsRG93blBhZ2VJbmZvKSB7XG4gICAgICBpZiAodGhpcy5lbnJpY2hEcmlsbERvd25SZXBvcnRSZXF1ZXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUxldmVsID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmJ1aWxkUmVwb3J0UmVxdWVzdCh0aGlzLmRyaWxsRG93bkNvbHVtbnMsXG4gICAgICAgICAgICB0aGlzLmRyaWxsRG93blBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLicgKyB0aGlzLmRyaWxsRG93blBhZ2VJbmZvLmlkLFxuICAgICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QsICcnLCB0aGlzLmRyaWxsRG93blBhZ2VJbmZvLCAnTEFORFNDQVBFJyk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlRXhwb3J0QWN0aW9uID0gdGhpcy5kcmlsbERvd25QYWdlSW5mby5oaWRlUmVwb3J0c0V4dHJhY3RCdXR0b24gfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5lbnJpY2hEcmlsbERvd25SZXBvcnRSZXF1ZXN0KCRldmVudCwgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5hY3RpdmVMZXZlbCArMTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvSHlwZXJMaW5rQWN0aW9uKCRldmVudDogVGFibGVQYWdlVXNlckFjdGlvbikge1xuICAgIGlmICh0aGlzLmVucmljaEh5cGVyTGlua1JlcG9ydFJlcXVlc3QpIHtcbiAgICAgICAgICB0aGlzLmp1bmlvclJlcG9ydFJlcXVlc3QgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmJ1aWxkUmVwb3J0UmVxdWVzdCh0aGlzLmp1bmlvckNvbHVtbnMsXG4gICAgICAgICAgICB0aGlzLmp1bmlvclBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLicgKyB0aGlzLmp1bmlvclBhZ2VJbmZvLmlkLFxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QsICcnLCB0aGlzLmp1bmlvclBhZ2VJbmZvLCAnTEFORFNDQVBFJyk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlRXhwb3J0QWN0aW9uID0gdGhpcy5qdW5pb3JQYWdlSW5mby5oaWRlUmVwb3J0c0V4dHJhY3RCdXR0b24gfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5lbnJpY2hIeXBlckxpbmtSZXBvcnRSZXF1ZXN0KCRldmVudCwgdGhpcy5qdW5pb3JSZXBvcnRSZXF1ZXN0KTtcbiAgICB9XG4gIH1cblxuICBleHRyYWN0UmVwb3J0KHJlcG9ydFR5cGU6IGFueSkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlTGV2ZWwgPT09IDEpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LnJlcG9ydFR5cGUgPSByZXBvcnRUeXBlO1xuICAgICAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLmRvd25sb2FkUmVwb3J0KHRoaXMucmVwb3J0UmVxdWVzdCwgdGhpcy5wYWdlSW5mby5hcGlVcmkgKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlTGV2ZWwgPT09IDIpIHtcbiAgICAgICAgdGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QucmVwb3J0VHlwZSA9IHJlcG9ydFR5cGU7XG4gICAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UuZG93bmxvYWRSZXBvcnQodGhpcy5jaGlsZFJlcG9ydFJlcXVlc3QsIHRoaXMuZHJpbGxEb3duUGFnZUluZm8uYXBpVXJpICk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUxldmVsID09PSAzKSB7XG4gICAgICAgIHRoaXMuanVuaW9yUmVwb3J0UmVxdWVzdC5yZXBvcnRUeXBlID0gcmVwb3J0VHlwZTtcbiAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5kb3dubG9hZFJlcG9ydCh0aGlzLmp1bmlvclJlcG9ydFJlcXVlc3QsIHRoaXMuanVuaW9yUGFnZUluZm8uYXBpVXJpICk7XG4gICAgICB9XG4gICAgfVxuXG4gIGdvVXAoKSB7XG4gICAgdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5hY3RpdmVMZXZlbCAtMTtcbiAgICB0aGlzLmRvQWN0aW9uKHRoaXMueCk7XG4gICAgdGhpcy5yZWxvYWREYXRhID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5hY3RpdmVMZXZlbCA+MSkge1xuICAgICAgdGhpcy5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZUV4cG9ydEFjdGlvbiA9IGZhbHNlXG4gIH1cblxuICBkcmlsbERvd25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRyaWxsRG93blBhZ2VJbmZvICYmICF0aGlzLmhpZGVEcmlsbERvd25CdXR0b24gJiYgIXRoaXMuZ2V0SXNFbXB0eUxpc3QoKTtcbiAgfVxuXG4gIGRyaWxsRG93bkxhYmVsKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnBhZ2VJbmZvLmxhYmVsc1NlY3Rpb259LmRyaWxsRG93bkxhYmVsYCA7XG4gIH1cbiAgZ2V0SXNFbXB0eUxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFNlcnZpY2UuaXNFbXB0eUl0ZW1zIHx8IHRoaXMuZGlzYWJsZUV4cG9ydEFjdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBjbGVhcigpIHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjdXJyZW50VXJsXSk7XG4gICAgfSk7XG5cbiAgICAvLyBpZiAodGhpcy5yZXBvcnRGb3JtKSB7XG4gICAgLy8gICB0aGlzLnJlcG9ydEZvcm0ucmVzZXQoKTtcbiAgICAvL1xuICAgIC8vICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgLy8gICAgIGlmIChmaWVsZC50eXBlID09PSAnbG9va3VwJyB8fCBmaWVsZC50eXBlID09PSAnbXVsdGktc2VsZWN0Jykge1xuICAgIC8vICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnJlcG9ydEZvcm0uZ2V0KGZpZWxkLnByb3BlcnR5KTtcbiAgICAvLyAgICAgICBpZiAoY29udHJvbCkge1xuICAgIC8vICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgfVxuXG5cbiAgaXNGb3JtRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydEZvcm0gfHwgIXRoaXMucmVwb3J0Rm9ybS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5yZXBvcnRGb3JtLnZhbHVlKS5ldmVyeSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwO1xuXG5cbiAgICB9KTtcbiAgfVxuXG4gIHNob3VsZFByb2Nlc3NFdmVudEl0ZW0oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ3JvdXBCeVByb3AgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5UHJvcGVydHk7XG4gICAgY29uc3QgZ3JvdXBCeVZhbHVlcyA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlWYWx1ZTtcblxuICAgIGlmICghZ3JvdXBCeVByb3AgfHwgIWdyb3VwQnlWYWx1ZXMgfHwgIWl0ZW1bZ3JvdXBCeVByb3BdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bZ3JvdXBCeVByb3BdLnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gIWdyb3VwQnlWYWx1ZXMuc29tZSh2ID0+IHZhbHVlLmluY2x1ZGVzKHYpICYmIHZhbHVlLmxlbmd0aCA+PSB2Lmxlbmd0aCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW4gZnVsbC13aWR0aFwiPlxuXG4gIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24tc3RhcnQtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxMHB4O1wiPlxuICAgIDxhcHAtdGl0bGUtYmFyIFtwYWdlVGl0bGVdPVwiZ2V0VGl0bGUoKVwiIFtuZXdBY3Rpb25dPVwiZmFsc2VcIj48L2FwcC10aXRsZS1iYXI+XG5cbiAgICA8bWF0LWljb25cbiAgICAgICpuZ0lmPVwicGFnZUluZm8/Lmhhc0hpbnRcIlxuICAgICAgcm9sZT1cImltZ1wiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihwYWdlSW5mby5sYWJlbHNTZWN0aW9uICsgJy5oaW50JykgfCB0cmFuc2xhdGVcIlxuICAgICAgW21hdFRvb2x0aXBdPVwicGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuaGludCcgfCB0cmFuc2xhdGVcIlxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIGNsYXNzPVwiaGludC1pY29uXCJcbiAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XG4gICAgICBoZWxwX291dGxpbmVcbiAgICA8L21hdC1pY29uPlxuICA8L2Rpdj5cblxuICA8YXBwLWJhc2UtZm9ybS1jYW52YXNcbiAgICBbcGFnZUluZm9dPVwicGFnZUluZm9cIlxuICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICBbZWRpdGFibGVdPVwiaXNFZGl0YWJsZVwiXG4gICAgW2Vycm9yc109XCJlcnJvcnNcIlxuICAgIFtpdGVtXT1cInRoaXMucmVwb3J0Rm9ybT8udmFsdWUgfHwge31cIlxuICAgIChmb3JtVXBkYXRlZCk9XCJ1cGRhdGVGb3JtKCRldmVudClcIlxuICA+PC9hcHAtYmFzZS1mb3JtLWNhbnZhcz5cblxuICA8YnI+PGJyPlxuXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGdhcC0xMCByZXNwb25zaXZlLXJvd1wiPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZUxldmVsID09PSAxXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJkb0FjdGlvbih4KVwiIFtkaXNhYmxlZF09XCIhaXNWYWxpZEZvcm0oKVwiIGlkPVwicmVwb3J0LWdlbmVyYXRlLWJ0blwiPlxuICAgICAgICB7eyAnUkVQT1JUUy5nZW5lcmF0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgW2Rpc2FibGVkXT1cImdldElzRW1wdHlMaXN0KClcIiBjb2xvcj1cInByaW1hcnlcIiBpZD1cInJlcG9ydC1leHRyYWN0LXRyaWdnZXJcIj5cbiAgICAgICAge3sgJ2V4dHJhY3QnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImV4cGFuZF9tb3JlIGFjdGlvbkJ1dHRvbl9fZXhwYW5kXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgW2Rpc2FibGVkXT1cImlzRm9ybUVtcHR5KCkgfHwgYWN0aXZlTGV2ZWwgPiAxXCIgaWQ9XCJyZXBvcnQtY2xlYXItYnRuXCI+XG4gICAgICAgIHt7ICdSRVBPUlRTLmNsZWFyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVMZXZlbCA9PT0gMSAmJiBkcmlsbERvd25FbmFibGVkKClcIiBjb2xvcj1cIndhcm5cIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImRyaWxsRG93bigpXCIgaWQ9XCJyZXBvcnQtZHJpbGxkb3duLWJ0blwiPlxuICAgICAgICB7eyBkcmlsbERvd25MYWJlbCgpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZUxldmVsID4gMSAmJiBiYWNrQnV0dG9uRW5hYmxlZFwiIGNvbG9yPVwid2FyblwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwiZ29VcCgpXCIgaWQ9XCJyZXBvcnQtdXAtYnRuXCI+XG4gICAgICAgIHt7ICdSRVBPUlRTLnVwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJhY3RpdmVMZXZlbCA+PSAxXCIgY2xhc3M9XCJtYWluLWZvcm0tY2FudmFzIHJvdyBhbGlnbi1zdGFydC1zdGFydCByZXNwb25zaXZlLXRhYmxlXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAzdmg7XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBmdWxsLXdpZHRoXCI+XG4gICAgICA8YXBwLWJhc2UtdGFibGVcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVMZXZlbCA9PT0gMVwiXG4gICAgICAgIFtwYWdlSW5mb109XCJwYWdlSW5mb1wiXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNEZWZpbml0aW9uXCJcbiAgICAgICAgW2VuZm9yY2VSZWZyZXNoXT1cInJlbG9hZERhdGFcIlxuICAgICAgICBpZD1cInBhcmVudFwiXG4gICAgICAgIFtyZXBvcnRSZXF1ZXN0XT1cInJlcG9ydFJlcXVlc3RcIlxuICAgICAgICAodXNlckFjdGlvbik9XCJlbWl0VXNlckFjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgKGh5cGVyTGlua0FjdGlvbik9XCJlbWl0SHlwZXJMaW5rQWN0aW9uKCRldmVudClcIj5cbiAgICAgIDwvYXBwLWJhc2UtdGFibGU+XG5cbiAgICAgIDxhcHAtYmFzZS10YWJsZVxuICAgICAgICAqbmdJZj1cImFjdGl2ZUxldmVsID09PSAyXCJcbiAgICAgICAgW3BhZ2VJbmZvXT1cImRyaWxsRG93blBhZ2VJbmZvXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiZHJpbGxEb3duQ29sdW1uc1wiXG4gICAgICAgIGlkPVwiY2hpbGRcIlxuICAgICAgICBbcmVwb3J0UmVxdWVzdF09XCJjaGlsZFJlcG9ydFJlcXVlc3RcIlxuICAgICAgICAodXNlckFjdGlvbik9XCJlbWl0SnVuaW9yQWN0aW9uKCRldmVudClcIlxuICAgICAgICAoaHlwZXJMaW5rQWN0aW9uKT1cImVtaXRIeXBlckxpbmtBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9hcHAtYmFzZS10YWJsZT5cblxuICAgICAgPGFwcC1iYXNlLXRhYmxlXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlTGV2ZWwgPT09IDNcIlxuICAgICAgICBbcGFnZUluZm9dPVwianVuaW9yUGFnZUluZm9cIlxuICAgICAgICBbY29sdW1uc109XCJqdW5pb3JDb2x1bW5zXCJcbiAgICAgICAgaWQ9XCJqdW5pb3JcIlxuICAgICAgICBbcmVwb3J0UmVxdWVzdF09XCJqdW5pb3JSZXBvcnRSZXF1ZXN0XCI+XG4gICAgICA8L2FwcC1iYXNlLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPC9kaXY+XG5cbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgdHlwZSBvZiB0eXBlc1wiIChjbGljayk9XCJleHRyYWN0UmVwb3J0KHR5cGUpXCIgW2F0dHIuaWRdPVwiJ3JlcG9ydC1leHRyYWN0LWl0ZW0tJyArIHR5cGVcIj5cbiAgICB7eyB0eXBlIH19XG4gIDwvYnV0dG9uPlxuPC9tYXQtbWVudT5cbiJdfQ==
|
|
@@ -34,7 +34,7 @@ export class SharedListComponent {
|
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SharedListComponent, deps: [{ token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
37
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SharedListComponent, isStandalone: true, selector: "app-shared-list", ngImport: i0, template: "<ng-container *ngIf=\"readyToLoad\">\n @if (editableTable) {\n <app-editable-base-table [filterRequest]=\"filterRequest\" [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [isPending]=\"isPending\"\n ></app-editable-base-table>\n\n } @else {\n\n <app-base-table [filters]=\"filters\" [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [listAction]=\"listAction\"\n [isPending]=\"isPending\"\n ></app-base-table>\n\n }\n</ng-container>\n", styles: [""], dependencies: [{ kind: "component", type: BaseTableComponent, selector: "app-base-table", inputs: ["filterFields", "noDataFoundSvgPath", "noDataFoundTitle", "noDataFoundSubtitle", "noResultSvgPath", "noResultTitle", "noResultSubtitle", "pageInfo", "enablePagination", "mobilePageSize", "mobileLoadMoreIncrement", "data", "listAction", "extraActions", "buttonsDisplayMode", "columns", "filters", "pathParam", "extraButton", "enforceRefresh", "isPending", "trigger", "reportRequest", "separateEndpointData", "manageablePages", "totalPagesCount", "currentPageIndex", "customizedData"], outputs: ["buttonClicked", "pageChange", "userAction", "hyperLinkAction", "extraAction", "selectedColumn", "listActionClicked", "pendingViewModeChanged", "showDialog", "clickRoutePage"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EditableBaseTableComponent, selector: "app-editable-base-table", inputs: ["filterRequest", "superDataElements", "pageInfo", "enforceRefresh", "isPending", "isBulkItemsSupported", "fields", "searchFormFields", "translationKey", "actionRequestCallback"], outputs: ["formUpdated", "saveActionEmitter", "saveAttachmentEmitter"] }] }); }
|
|
37
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SharedListComponent, isStandalone: true, selector: "app-shared-list", ngImport: i0, template: "<ng-container *ngIf=\"readyToLoad\">\n @if (editableTable) {\n <app-editable-base-table [filterRequest]=\"filterRequest\" [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [isPending]=\"isPending\"\n ></app-editable-base-table>\n\n } @else {\n\n <app-base-table [filters]=\"filters\" [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [listAction]=\"listAction\"\n [isPending]=\"isPending\"\n ></app-base-table>\n\n }\n</ng-container>\n", styles: [""], dependencies: [{ kind: "component", type: BaseTableComponent, selector: "app-base-table", inputs: ["filterFields", "noDataFoundSvgPath", "noDataFoundTitle", "noDataFoundSubtitle", "noResultSvgPath", "noResultTitle", "noResultSubtitle", "pageInfo", "enablePagination", "mobilePageSize", "mobileLoadMoreIncrement", "data", "listAction", "extraActions", "buttonsDisplayMode", "columns", "filters", "pathParam", "extraButton", "enforceRefresh", "isPending", "trigger", "reportRequest", "separateEndpointData", "manageablePages", "totalPagesCount", "currentPageIndex", "customizedData"], outputs: ["buttonClicked", "pageChange", "userAction", "hyperLinkAction", "extraAction", "selectedColumn", "listActionClicked", "pendingViewModeChanged", "filtersApplied", "showDialog", "clickRoutePage"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EditableBaseTableComponent, selector: "app-editable-base-table", inputs: ["filterRequest", "superDataElements", "pageInfo", "enforceRefresh", "isPending", "isBulkItemsSupported", "fields", "searchFormFields", "translationKey", "actionRequestCallback"], outputs: ["formUpdated", "saveActionEmitter", "saveAttachmentEmitter"] }] }); }
|
|
38
38
|
}
|
|
39
39
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SharedListComponent, decorators: [{
|
|
40
40
|
type: Component,
|
|
@@ -44,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
44
44
|
EditableBaseTableComponent
|
|
45
45
|
], template: "<ng-container *ngIf=\"readyToLoad\">\n @if (editableTable) {\n <app-editable-base-table [filterRequest]=\"filterRequest\" [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [isPending]=\"isPending\"\n ></app-editable-base-table>\n\n } @else {\n\n <app-base-table [filters]=\"filters\" [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [listAction]=\"listAction\"\n [isPending]=\"isPending\"\n ></app-base-table>\n\n }\n</ng-container>\n" }]
|
|
46
46
|
}], ctorParameters: () => [{ type: i1.ActivatedRoute }] });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvY29tcG9uZW50cy9zaGFyZWQtbGlzdC9zaGFyZWQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1saXN0L3NoYXJlZC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFFaEQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBdUIsZUFBZSxFQUFhLGFBQWEsRUFBd0IsTUFBTSxrQkFBa0IsQ0FBQztBQUV4SCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQzs7O0FBYWhHLE1BQU0sT0FBTyxtQkFBbUI7SUFVOUIsWUFBb0IsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBVGxELGFBQVEsR0FBYSxlQUFlLENBQUM7UUFDckMsc0JBQWlCLEdBQXVCLEVBQUUsQ0FBQztRQUMzQyxXQUFNLEdBQWdCLEVBQUUsQ0FBQztRQUN6QixZQUFPLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsZUFBVSxHQUEyQixFQUFFLENBQUM7UUFDeEMsa0JBQWEsR0FBYSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNHLENBQUM7SUFFdkQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXJDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUM7WUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTlCVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiwyRUNuQmhDLDJpQkFpQkEsMERETEksa0JBQWtCLHF2QkFDbEIsSUFBSSw2RkFDSiwwQkFBMEI7OzRGQUtqQixtQkFBbUI7a0JBWC9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLGtCQUFrQjt3QkFDbEIsSUFBSTt3QkFDSiwwQkFBMEI7cUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge05nSWZ9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7QmFzZVRhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vYmFzZS10YWJsZS9iYXNlLXRhYmxlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtCdXR0b25BY3Rpb25TZXR0aW5ncywgRU1QVFlfUEFHRV9JTkZPLCBGaWVsZEluZm8sIEZpbHRlclJlcXVlc3QsIFBhZ2VJbmZvLCBUYWJsZUNvbHVtbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWxcIjtcbmltcG9ydCB7RmlsdGVyfSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHtFZGl0YWJsZUJhc2VUYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2VkaXRhYmxlLWJhc2UtdGFibGUvZWRpdGFibGUtYmFzZS10YWJsZS5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXNoYXJlZC1saXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEJhc2VUYWJsZUNvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIEVkaXRhYmxlQmFzZVRhYmxlQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zaGFyZWQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczpbICcuL3NoYXJlZC1saXN0LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcGFnZUluZm86IFBhZ2VJbmZvID0gRU1QVFlfUEFHRV9JTkZPO1xuICBjb2x1bW5zRGVmaW5pdGlvbjogVGFibGVDb2x1bW48YW55PltdID0gW107XG4gIGZpZWxkczogRmllbGRJbmZvW10gPSBbXTtcbiAgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgcmVhZHlUb0xvYWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQZW5kaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGxpc3RBY3Rpb246IEJ1dHRvbkFjdGlvblNldHRpbmdzW10gPSBbXTtcbiAgZWRpdGFibGVUYWJsZSA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyUmVxdWVzdDogRmlsdGVyUmVxdWVzdCA9IG5ldyBGaWx0ZXJSZXF1ZXN0KCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5wYWdlSW5mbyA9IGRhdGFbJ3BhZ2VJbmZvJ107XG4gICAgICB0aGlzLmNvbHVtbnNEZWZpbml0aW9uID0gZGF0YVtcImNvbHVtbnNEZWZpbml0aW9uXCJdO1xuICAgICAgdGhpcy5maWx0ZXJzID0gZGF0YVtcImZpbHRlcnNcIl0gfHwgW107XG5cbiAgICAgIHRoaXMuaXNQZW5kaW5nID0gJ3BlbmRpbmcnID09PSBkYXRhW1wibW9kZVwiXTtcbiAgICAgIHRoaXMubGlzdEFjdGlvbiA9IGRhdGFbJ2FjdGlvbnMnXTtcbiAgICAgIHRoaXMuZWRpdGFibGVUYWJsZSA9IGRhdGFbJ2VkaXRhYmxlVGFibGUnXSB8fCBmYWxzZTtcbiAgICAgIHRoaXMuZmllbGRzID0gZGF0YVsnZmllbGRzJ107XG5cbiAgICAgIHRoaXMuZmlsdGVyUmVxdWVzdCA9IG5ldyBGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgICB0aGlzLmZpbHRlclJlcXVlc3QuY29sdW1ucyA9IHRoaXMuZmllbGRzPy5maWx0ZXIoYyA9PiBjLnR5cGUgIT09ICdidXR0b24nKS5tYXAoYyA9PiBjLnByb3BlcnR5KSB8fCBbXTtcbiAgICAgIHRoaXMuZmlsdGVyUmVxdWVzdC5maWx0ZXJzID0gdGhpcy5maWx0ZXJzO1xuXG4gICAgICB0aGlzLnJlYWR5VG9Mb2FkID0gdHJ1ZTtcblxuICAgIH0pO1xuICB9XG5cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlYWR5VG9Mb2FkXCI+XG4gIEBpZiAoZWRpdGFibGVUYWJsZSkge1xuICAgIDxhcHAtZWRpdGFibGUtYmFzZS10YWJsZSBbZmlsdGVyUmVxdWVzdF09XCJmaWx0ZXJSZXF1ZXN0XCIgW3BhZ2VJbmZvXT1cInBhZ2VJbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICBbaXNQZW5kaW5nXT1cImlzUGVuZGluZ1wiXG4gICAgPjwvYXBwLWVkaXRhYmxlLWJhc2UtdGFibGU+XG5cbiAgfSBAZWxzZSB7XG5cbiAgICA8YXBwLWJhc2UtdGFibGUgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiIFtwYWdlSW5mb109XCJwYWdlSW5mb1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNEZWZpbml0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2xpc3RBY3Rpb25dPVwibGlzdEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiaXNQZW5kaW5nXCJcbiAgICA+PC9hcHAtYmFzZS10YWJsZT5cblxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|