tin-spa 2.9.3 → 2.9.4

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.
@@ -265,10 +265,10 @@ export class DetailsDialogLite {
265
265
  }
266
266
  }
267
267
  DetailsDialogLite.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialogLite, deps: [{ token: i1.BreakpointObserver }, { token: i2.LoaderService }, { token: i3.DataServiceLib }, { token: i4.MessageService }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.ButtonService }, { token: i7.DialogService }, { token: i8.AuthService }, { token: i9.TableConfigService }], target: i0.ɵɵFactoryTarget.Component });
268
- DetailsDialogLite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialogLite, selector: "spa-detailsDialog-lite", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\r\n\r\n <div>\r\n <label style=\"font-size: 20px; font-weight:500;margin-bottom: 10px;\">{{titleAction | titlecase}} {{formConfig?.title}}</label>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [field]=\"field\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigService.getVisibleTableConfigs(tableConfigs)\">\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n\r\n <ng-template matTabLabel>\r\n <span>{{tbl.tabTitle ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='create' && createButton\" color=\"primary\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='edit' && editButton\" color=\"primary\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i15.FormComponent, selector: "spa-form", inputs: ["files", "data", "config"], outputs: ["buttonClick", "inputChange"] }, { kind: "component", type: i16.AlertComponent, selector: "spa-alert", inputs: ["alertMessages", "data"] }, { kind: "component", type: i17.SelectLiteComponent, selector: "spa-select-lite" }, { kind: "pipe", type: i10.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i18.CamelToWordsPipe, name: "camelToWords" }] });
268
+ DetailsDialogLite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DetailsDialogLite, selector: "spa-detailsDialog-lite", outputs: { inputChange: "inputChange" }, ngImport: i0, template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\r\n\r\n <div>\r\n <label style=\"font-size: 20px; font-weight:500;margin-bottom: 10px;\">{{titleAction | titlecase}} {{formConfig?.title}}</label>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [loadIDField]=\"field.loadIDField\"\r\n [field]=\"field\"\r\n [data]=\"data\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigService.getVisibleTableConfigs(tableConfigs)\">\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n\r\n <ng-template matTabLabel>\r\n <span>{{tbl.tabTitle ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='create' && createButton\" color=\"primary\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='edit' && editButton\" color=\"primary\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i15.FormComponent, selector: "spa-form", inputs: ["files", "data", "config"], outputs: ["buttonClick", "inputChange"] }, { kind: "component", type: i16.AlertComponent, selector: "spa-alert", inputs: ["alertMessages", "data"] }, { kind: "component", type: i17.SelectLiteComponent, selector: "spa-select-lite" }, { kind: "pipe", type: i10.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i18.CamelToWordsPipe, name: "camelToWords" }] });
269
269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DetailsDialogLite, decorators: [{
270
270
  type: Component,
271
- args: [{ selector: 'spa-detailsDialog-lite', template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\r\n\r\n <div>\r\n <label style=\"font-size: 20px; font-weight:500;margin-bottom: 10px;\">{{titleAction | titlecase}} {{formConfig?.title}}</label>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [field]=\"field\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigService.getVisibleTableConfigs(tableConfigs)\">\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n\r\n <ng-template matTabLabel>\r\n <span>{{tbl.tabTitle ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='create' && createButton\" color=\"primary\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='edit' && editButton\" color=\"primary\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n" }]
271
+ args: [{ selector: 'spa-detailsDialog-lite', template: "<div class=\"dialog-container\">\r\n\r\n <div class=\"dialog-content\">\r\n\r\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isProcessing && dataService.appConfig.progressLine\"></mat-progress-bar>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\r\n\r\n <div>\r\n <label style=\"font-size: 20px; font-weight:500;margin-bottom: 10px;\">{{titleAction | titlecase}} {{formConfig?.title}}</label>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n\r\n <div *ngIf=\"formConfig.mode=='view' && editButton && testVisible(details,editButton.name)\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Edit\" color=\"primary\" (click)=\"setMode('edit')\" [disabled]=\"testDisabled(details,editButton.name)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <button [disabled]=\"isProcessing\" *ngIf=\"loadByAction\" mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Refresh\" color=\"primary\" (click)=\"loadData(formConfig.loadAction, true)\"><mat-icon class=\"refreshIcon\">cached</mat-icon></button>\r\n </div>\r\n\r\n </div>\r\n\r\n <mat-dialog-content class=\"mat-typography dialog-scroll-content\">\r\n\r\n <spa-alert [alertMessages]=\"formConfig.alertMessages\" [data]=\"details\"></spa-alert>\r\n\r\n <div class=\"tin-input\" style=\"font-size:14px\">\r\n\r\n <p *ngIf=\"formConfig && !details\"><em>Loading...</em></p>\r\n\r\n <spa-form *ngIf=\"formConfig && details\" [files]=\"files\" [data]=\"details\" [config]=\"formConfig\" (inputChange)=\"inputChanged($event)\">\r\n <ng-template #dynamicSelect let-field=\"field\" let-data=\"data\" let-testReadOnly=\"testReadOnly\" let-selectChanged=\"selectChanged\">\r\n <spa-select-lite\r\n [display]=\"field.alias ?? field.name | camelToWords\"\r\n [width]=\"field.width\"\r\n [nullable]=\"field.nullable\"\r\n [options]=\"field.options\"\r\n [masterOptions]=\"field.masterOptions\"\r\n [masterField]=\"field.masterField\"\r\n [optionDisplay]=\"field.optionDisplay ?? 'name'\"\r\n [optionValue]=\"field.optionValue ?? 'value'\"\r\n [(value)]=\"data[field.name]\"\r\n [defaultFirstValue]=\"field.defaultFirstValue\"\r\n [readonly]=\"testReadOnly(field)\"\r\n [hint]=\"field.hint\"\r\n [loadAction]=\"field.loadAction\"\r\n [loadIDField]=\"field.loadIDField\"\r\n [field]=\"field\"\r\n [data]=\"data\"\r\n [infoMessage]=\"field.infoMessage\"\r\n [copyContent]=\"field.copyContent\"\r\n (valueChange)=\"selectChanged(field)\"\r\n ></spa-select-lite>\r\n </ng-template>\r\n </spa-form>\r\n\r\n\r\n <!-- <mat-tab-group *ngIf=\"tableConfigs\">\r\n\r\n <ng-container *ngFor=\"let tbl of tableConfigService.getVisibleTableConfigs(tableConfigs)\">\r\n <mat-tab *ngIf=\"testVisibleTab(tbl)\">\r\n\r\n <ng-template matTabLabel>\r\n <span>{{tbl.tabTitle ?? 'Untitled'}}</span>\r\n </ng-template>\r\n\r\n <spa-table-internal [config]=\"tbl\" [reload]=\"tableReload\" (dataLoad)=\"loadData(formConfig.loadAction, false)\"></spa-table-internal>\r\n\r\n </mat-tab>\r\n </ng-container>\r\n\r\n </mat-tab-group> -->\r\n\r\n </div>\r\n\r\n </mat-dialog-content>\r\n\r\n\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n\r\n <div>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='create' && createButton\" color=\"primary\" (click)=\"create()\" cdkFocusInitial>{{createButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <button mat-raised-button [disabled]=\"isProcessing\" *ngIf=\"formConfig.mode=='edit' && editButton\" color=\"primary\" (click)=\"edit()\" cdkFocusInitial>{{editButton.display ?? 'Submit'}}\r\n </button>\r\n\r\n <ng-container *ngFor=\"let btn of extraButtons\">\r\n <button *ngIf=\"testVisible(details,btn.name)\" mat-stroked-button [disabled]=\"isProcessing || testDisabled(details,btn.name)\" [ngStyle]=\"{'color': getButtonColor(btn, details)}\" (click)=\"custom(btn)\" cdkFocusInitial><mat-icon [ngStyle]=\"{'color': getButtonColor(btn, details)}\">{{btn.icon.name}}</mat-icon>{{btn.display ?? btn.name | titlecase}}\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancel</button>\r\n\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-end\" *ngIf=\"smallScreen\">\r\n <button mat-icon-button matTooltipPosition=\"above\" matTooltip=\"Delete\" [disabled]=\"isProcessing\" style=\"color: red;\" (click)=\"delete()\" *ngIf=\"formConfig.mode!='create' && deleteButton\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n\r\n\r\n </mat-dialog-actions>\r\n\r\n\r\n</div>\r\n" }]
272
272
  }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }, { type: i2.LoaderService }, { type: i3.DataServiceLib }, { type: i4.MessageService }, { type: i5.MatDialogRef }, { type: i19.DetailsDialogConfig, decorators: [{
273
273
  type: Inject,
274
274
  args: [MAT_DIALOG_DATA]
@@ -276,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
276
276
  type: Output
277
277
  }] } });
278
278
  ;
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUS9CLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBb0Isa0JBQXNDLEVBQVMsYUFBNEIsRUFBUSxXQUEyQixFQUFTLGNBQThCLEVBQy9KLFNBQTBDLEVBQWtDLGFBQWtDLEVBQVUsYUFBNEIsRUFDcEosYUFBNEIsRUFBVSxXQUF3QixFQUFTLGtCQUFzQztRQUZuRyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBUSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDL0osY0FBUyxHQUFULFNBQVMsQ0FBaUM7UUFBa0Msa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDcEosa0JBQWEsR0FBYixhQUFhLENBQWU7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QUM1RjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzVEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs4R0FqVFUsaUJBQWlCLHlLQUdrQyxlQUFlO2tHQUhsRSxpQkFBaUIsdUdDbkI5Qix5NUpBMkdBOzJGRHhGYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0Usd0JBQXdCOzswQkFPcUIsTUFBTTsyQkFBQyxlQUFlOytKQTZFbkUsV0FBVztzQkFBcEIsTUFBTTs7QUFvT1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1Db25maWcsIEZpZWxkLCBUYWJsZUNvbmZpZywgQnV0dG9uLCBEZXRhaWxzRGlhbG9nQ29uZmlnLCBBY3Rpb24sIEFwaVJlc3BvbnNlLCBTdGVwQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IENvcmUsIERldGFpbHNEaWFsb2dQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RpbkNvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtY29uZmlnLnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1kZXRhaWxzRGlhbG9nLWxpdGUnLCAvL3VuaXEgdG8gbGl0ZVxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWxzRGlhbG9nLWxpdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWxpdGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzRGlhbG9nTGl0ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIscHJpdmF0ZSBsb2FkZXJTZXJ2aWNlOiBMb2FkZXJTZXJ2aWNlLHB1YmxpYyBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIscHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERldGFpbHNEaWFsb2dMaXRlPiwgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnLCBwcml2YXRlIGJ1dHRvblNlcnZpY2U6IEJ1dHRvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwdWJsaWMgdGFibGVDb25maWdTZXJ2aWNlOiBUYWJsZUNvbmZpZ1NlcnZpY2UpXHJcbiAge1xyXG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcclxuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gdHJ1ZVxyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGNvbnN0IHsgdGFibGVDb25maWcsIHRhYmxlQ29uZmlncywgZm9ybUNvbmZpZywgc3RlcENvbmZpZywgYnV0dG9ucyB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5pbml0aWFsaXplQ29uZmlncyh0aGlzLmRldGFpbHNDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IHRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZ3MgPSB0YWJsZUNvbmZpZ3M7XHJcbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xyXG4gICAgdGhpcy5zdGVwQ29uZmlnID0gc3RlcENvbmZpZztcclxuICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbnM7XHJcblxyXG4gICAgbGV0IHJlc3AgPSBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLmhhbmRsZUZvcm1Nb2RlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5mb3JtQ29uZmlnLCk7XHJcblxyXG4gICAgaWYgKHJlc3AubG9hZEJ5QWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZEJ5QWN0aW9uID0gdHJ1ZTtcclxuICAgICAgZm9ybUNvbmZpZy5sb2FkQWN0aW9uID0gcmVzcC5hY3Rpb247XHJcbiAgICAgIHRoaXMubG9hZERhdGEocmVzcC5hY3Rpb24sIGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGV0YWlscyA9IHJlc3AuZGV0YWlscztcclxuICAgICAgRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXRIZXJvVmFsdWUodGhpcy5kZXRhaWxzQ29uZmlnLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgICB0aGlzLmxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVGaWVsZCA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0RmlsZUZpZWxkKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUHJvY2Vzc2luZyA9IHgpO1xyXG5cclxuICAgIGNvbnN0IHsgZXh0cmFCdXR0b25zLCBjcmVhdGVCdXR0b24sIGVkaXRCdXR0b24sIGRlbGV0ZUJ1dHRvbiB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXR1cEJ1dHRvbnModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmJ1dHRvbnMpO1xyXG4gICAgdGhpcy5leHRyYUJ1dHRvbnMgPSBleHRyYUJ1dHRvbnM7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbjtcclxuICAgIHRoaXMuZWRpdEJ1dHRvbiA9IGVkaXRCdXR0b247XHJcbiAgICB0aGlzLmRlbGV0ZUJ1dHRvbiA9IGRlbGV0ZUJ1dHRvbjtcclxuXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdGl0bGVBY3Rpb24gPSBcIlZpZXdcIjtcclxuICBsb2FkQnlBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgZXh0cmFCdXR0b25zOiBCdXR0b25bXTtcclxuICBidXR0b25zOiBCdXR0b25bXTtcclxuICBjcmVhdGVCdXR0b246IEJ1dHRvbjtcclxuICBlZGl0QnV0dG9uOiBCdXR0b247XHJcbiAgZGVsZXRlQnV0dG9uOiBCdXR0b247XHJcblxyXG4gIC8vIG1vZGVCdXR0b24gOiBCdXR0b25cclxuICBmaWxlRmllbGQ6IEZpZWxkO1xyXG4gIGZpbGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICB0YWJsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZ1xyXG4gIHRhYmxlQ29uZmlncyA6IFRhYmxlQ29uZmlnW11cclxuICBkZXRhaWxzOiBhbnlcclxuICBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIHN0ZXBDb25maWc6IFN0ZXBDb25maWc7XHJcbiAgc21hbGxTY3JlZW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMb2FkQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgbG9hZERhdGEoYWN0aW9uOiBBY3Rpb24sIHJlbG9hZCkge1xyXG5cclxuICAgIGlmIChhY3Rpb24gJiYgdGhpcy5sb2FkQnlBY3Rpb24pIHtcclxuXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShhY3Rpb24pLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBhcGlSZXNwb25zZS5kYXRhXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0SGVyb1ZhbHVlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5kZXRhaWxzKTtcclxuICAgICAgICAgIGlmIChyZWxvYWQpIHRoaXMudGFibGVSZWxvYWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaW5wdXRDaGFuZ2VkKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIHZhbHVlOiBldmVudC52YWx1ZSB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHNldE1vZGUobmV3TW9kZSkge1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSBuZXdNb2RlXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuICB9XHJcblxyXG4gIHNldFRpdGxlQWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5maXhlZFRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGVBY3Rpb24gPSBcIlwiO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aXRsZUFjdGlvbiA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXRUaXRsZUFjdGlvbih0aGlzLmZvcm1Db25maWcubW9kZSwgdGhpcy5idXR0b25zKTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0QnV0dG9uKHRoaXMuYnV0dG9ucywgbmFtZSk7XHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG5cclxuICAgIGlmICghYnV0dG9uKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgYnV0dG9uIHdpdGggY29tcG9uZW50J3MgZGV0YWlsc0NvbmZpZ1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aENvbmZpZyA9IHtcclxuICAgICAgLi4uYnV0dG9uLFxyXG4gICAgICBkZXRhaWxzQ29uZmlnOiBidXR0b24uZGV0YWlsc0NvbmZpZyA/IHsgLi4uYnV0dG9uLmRldGFpbHNDb25maWcgfSA6IHRoaXMuZGV0YWlsc0NvbmZpZ1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3REaXNhYmxlZChidXR0b25XaXRoQ29uZmlnLCByb3cpO1xyXG4gIH1cclxuXHJcblxyXG4gIHRlc3RWaXNpYmxlKHJvdywgYnV0dG9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgYnV0dG9uIHdpdGggY29tcG9uZW50J3MgZGV0YWlsc0NvbmZpZ1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aENvbmZpZyA9IHtcclxuICAgICAgLi4uYnV0dG9uLFxyXG4gICAgICBkZXRhaWxzQ29uZmlnOiBidXR0b24uZGV0YWlsc0NvbmZpZyA/IHsgLi4uYnV0dG9uLmRldGFpbHNDb25maWcgfSA6IHRoaXMuZGV0YWlsc0NvbmZpZ1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3RWaXNpYmxlKGJ1dHRvbldpdGhDb25maWcsIHJvdylcclxuICB9XHJcblxyXG4gIHRlc3RWaXNpYmxlVGFiKHRibENvbmZpZzogVGFibGVDb25maWcpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAoIXRoaXMudGFibGVDb25maWdTZXJ2aWNlLmhhc1RhYmxlQWNjZXNzKHRibENvbmZpZykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuaXNUYWJWaXNpYmxlKHRibENvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93KSB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KTtcclxuICB9XHJcblxyXG4gIGdldFZpc2libGVGaWVsZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnLmZpZWxkcz8uZmlsdGVyKHggPT4gQ29yZS50ZXN0VmlzaWJsZSh0aGlzLmZvcm1Db25maWcsIHRoaXMuZGV0YWlscywgeCwgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSkpXHJcbiAgfVxyXG5cclxuXHJcbiAgY3JlYXRlKCkge1xyXG4gICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2NyZWF0ZScpO1xyXG4gIH1cclxuXHJcbiAgZWRpdCgpIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKCdlZGl0Jyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUoKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYERFTEVURSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2RlbGV0ZScpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjdXN0b20oYnV0dG9uOiBCdXR0b24pIHtcclxuICAgIGlmIChidXR0b24uZGlhbG9nICYmIGJ1dHRvbi5kZXRhaWxzQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMub3Blbk5lc3RlZERldGFpbHNEaWFsb2coYnV0dG9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKGJ1dHRvbi5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3Blbk5lc3RlZERldGFpbHNEaWFsb2coYnV0dG9uOiBCdXR0b24pOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyZWREZXRhaWxzRGlhbG9nKGJ1dHRvbiwgdGhpcy5kZXRhaWxzLCBEZXRhaWxzRGlhbG9nTGl0ZSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ2lucHV0Q2hhbmdlJykge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKHJlc3VsdC5jaGFuZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiByZXN1bHQubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5sb2FkQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5mb3JtQ29uZmlnLmxvYWRBY3Rpb24sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGhhbmRsZUJ1dHRvbkFjdGlvbihidXR0b25OYW1lOiBzdHJpbmcpIHtcclxuXHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFidXR0b24uYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ2VtaXQnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZUZvcm0oKSkge1xyXG4gICAgICB0aGlzLmV4ZWN1dGVBY3Rpb24oYnV0dG9uLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IENvcmUudmFsaWRhdGVPYmplY3QodGhpcy5nZXRWaXNpYmxlRmllbGRzKCksIHRoaXMuZGV0YWlscyk7XHJcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEgJiYgdGhpcy5maWxlRmllbGQ/LnJlcXVpcmVkICYmIHRoaXMuZm9ybUNvbmZpZy5tb2RlID09PSAnY3JlYXRlJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGF0dGFjaCBmaWxlKHMpXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgY29tcG9zaXRlIGZpZWxkc1xyXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmdldFZpc2libGVGaWVsZHMoKSkge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2NvbXBvc2l0ZScpIHtcclxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gQ29yZS52YWxpZGF0ZU9iamVjdChDb3JlLmdldFZpc2libGVTdWJmaWVsZHModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmRldGFpbHMsIGZpZWxkLCB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRSb2xlU291cmNlLnZhbHVlKSwgdGhpcy5kZXRhaWxzKTtcclxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAhPT0gJycpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QodmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBY3Rpb25EYXRhKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGJ1dHRvbi5hY3Rpb24/LmlzRm9ybURhdGEpIHtcclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlJHtpfWAsIHRoaXMuZmlsZXNbaV0sIHRoaXMuZmlsZXNbaV0ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZGF0YVwiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHJldHVybiBmb3JtRGF0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGFjdGlvbkRhdGEgPSB0aGlzLnByZXBhcmVBY3Rpb25EYXRhKGJ1dHRvbiwgZGF0YSk7XHJcblxyXG4gICAgaWYgKGJ1dHRvbi5jb25maXJtKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShidXR0b24uY29uZmlybS5tZXNzYWdlKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwieWVzXCIpIHtcclxuICAgICAgICAgIHRoaXMucGVyZm9ybUFwaUNhbGwoYnV0dG9uLCBhY3Rpb25EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZXJmb3JtQXBpQ2FsbChidXR0b24sIGFjdGlvbkRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwZXJmb3JtQXBpQ2FsbChidXR0b246IEJ1dHRvbiwgZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYnV0dG9uLmFjdGlvbiwgZGF0YSkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiYXBwcm92YWxcIikgfHwgYXBpUmVzcG9uc2UubWVzc2FnZS5pbmNsdWRlcyhcImFwcHJvdmVcIikgfHwgYXBpUmVzcG9uc2UubWVzc2FnZS5pbmNsdWRlcyhcImRlY2xpbmVcIikpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChidXR0b24uYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSAhPSBcInN1Y2Nlc3NcIiAmJiBhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwiXCIpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGRhdGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHsgLi4uYXBpUmVzcG9uc2UsIGRhdGE6IHRoaXMuZGV0YWlscyB9IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn07XHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGFpbmVyXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxyXG5cclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJpc1Byb2Nlc3NpbmcgJiYgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLnByb2dyZXNzTGluZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XHJcblxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDsgZm9udC13ZWlnaHQ6NTAwO21hcmdpbi1ib3R0b206IDEwcHg7XCI+e3t0aXRsZUFjdGlvbiB8IHRpdGxlY2FzZX19IHt7Zm9ybUNvbmZpZz8udGl0bGV9fTwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J3ZpZXcnICYmIGVkaXRCdXR0b24gJiYgdGVzdFZpc2libGUoZGV0YWlscyxlZGl0QnV0dG9uLm5hbWUpXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJFZGl0XCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldE1vZGUoJ2VkaXQnKVwiIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQoZGV0YWlscyxlZGl0QnV0dG9uLm5hbWUpXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiAqbmdJZj1cImxvYWRCeUFjdGlvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJSZWZyZXNoXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImxvYWREYXRhKGZvcm1Db25maWcubG9hZEFjdGlvbiwgdHJ1ZSlcIj48bWF0LWljb24gY2xhc3M9XCJyZWZyZXNoSWNvblwiPmNhY2hlZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeSBkaWFsb2ctc2Nyb2xsLWNvbnRlbnRcIj5cclxuXHJcbiAgICAgICAgICA8c3BhLWFsZXJ0IFthbGVydE1lc3NhZ2VzXT1cImZvcm1Db25maWcuYWxlcnRNZXNzYWdlc1wiIFtkYXRhXT1cImRldGFpbHNcIj48L3NwYS1hbGVydD5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4XCI+XHJcblxyXG4gICAgICAgICA8cCAqbmdJZj1cImZvcm1Db25maWcgJiYgIWRldGFpbHNcIj48ZW0+TG9hZGluZy4uLjwvZW0+PC9wPlxyXG5cclxuICAgICAgICA8c3BhLWZvcm0gKm5nSWY9XCJmb3JtQ29uZmlnICYmIGRldGFpbHNcIiBbZmlsZXNdPVwiZmlsZXNcIiBbZGF0YV09XCJkZXRhaWxzXCIgW2NvbmZpZ109XCJmb3JtQ29uZmlnXCIgKGlucHV0Q2hhbmdlKT1cImlucHV0Q2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2R5bmFtaWNTZWxlY3QgbGV0LWZpZWxkPVwiZmllbGRcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQtdGVzdFJlYWRPbmx5PVwidGVzdFJlYWRPbmx5XCIgbGV0LXNlbGVjdENoYW5nZWQ9XCJzZWxlY3RDaGFuZ2VkXCI+XHJcbiAgICAgICAgICAgIDxzcGEtc2VsZWN0LWxpdGVcclxuICAgICAgICAgICAgICBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCJcclxuICAgICAgICAgICAgICBbd2lkdGhdPVwiZmllbGQud2lkdGhcIlxyXG4gICAgICAgICAgICAgIFtudWxsYWJsZV09XCJmaWVsZC5udWxsYWJsZVwiXHJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW21hc3Rlck9wdGlvbnNdPVwiZmllbGQubWFzdGVyT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW21hc3RlckZpZWxkXT1cImZpZWxkLm1hc3RlckZpZWxkXCJcclxuICAgICAgICAgICAgICBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5ID8/ICduYW1lJ1wiXHJcbiAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImZpZWxkLm9wdGlvblZhbHVlID8/ICd2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIlxyXG4gICAgICAgICAgICAgIFtkZWZhdWx0Rmlyc3RWYWx1ZV09XCJmaWVsZC5kZWZhdWx0Rmlyc3RWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtoaW50XT1cImZpZWxkLmhpbnRcIlxyXG4gICAgICAgICAgICAgIFtsb2FkQWN0aW9uXT1cImZpZWxkLmxvYWRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCJcclxuICAgICAgICAgICAgICBbY29weUNvbnRlbnRdPVwiZmllbGQuY29weUNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZWxlY3RDaGFuZ2VkKGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L3NwYS1zZWxlY3QtbGl0ZT5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9zcGEtZm9ybT5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJ0YWJsZUNvbmZpZ3NcIj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0Ymwgb2YgdGFibGVDb25maWdTZXJ2aWNlLmdldFZpc2libGVUYWJsZUNvbmZpZ3ModGFibGVDb25maWdzKVwiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYiAqbmdJZj1cInRlc3RWaXNpYmxlVGFiKHRibClcIj5cclxuXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3t0YmwudGFiVGl0bGUgPz8gJ1VudGl0bGVkJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGEtdGFibGUtaW50ZXJuYWwgW2NvbmZpZ109XCJ0YmxcIiBbcmVsb2FkXT1cInRhYmxlUmVsb2FkXCIgKGRhdGFMb2FkKT1cImxvYWREYXRhKGZvcm1Db25maWcubG9hZEFjdGlvbiwgZmFsc2UpXCI+PC9zcGEtdGFibGUtaW50ZXJuYWw+XHJcblxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPiAtLT5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcblxyXG4gICAgPGRpdj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlPT0nY3JlYXRlJyAmJiBjcmVhdGVCdXR0b25cIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY3JlYXRlKClcIiBjZGtGb2N1c0luaXRpYWw+e3tjcmVhdGVCdXR0b24uZGlzcGxheSA/PyAnU3VibWl0J319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdlZGl0JyAmJiBlZGl0QnV0dG9uXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImVkaXQoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2VkaXRCdXR0b24uZGlzcGxheSA/PyAnU3VibWl0J319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGV4dHJhQnV0dG9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJ0ZXN0VmlzaWJsZShkZXRhaWxzLGJ0bi5uYW1lKVwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nIHx8IHRlc3REaXNhYmxlZChkZXRhaWxzLGJ0bi5uYW1lKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOiBnZXRCdXR0b25Db2xvcihidG4sIGRldGFpbHMpfVwiIChjbGljayk9XCJjdXN0b20oYnRuKVwiIGNka0ZvY3VzSW5pdGlhbD48bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ0biwgZGV0YWlscyl9XCI+e3tidG4uaWNvbi5uYW1lfX08L21hdC1pY29uPnt7YnRuLmRpc3BsYXkgPz8gYnRuLm5hbWUgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1kaWFsb2ctY2xvc2U+Q2FuY2VsPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiICpuZ0lmPVwic21hbGxTY3JlZW5cIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwPVwiRGVsZXRlXCIgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIHN0eWxlPVwiY29sb3I6IHJlZDtcIiAoY2xpY2spPVwiZGVsZXRlKClcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZSE9J2NyZWF0ZScgICYmIGRlbGV0ZUJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuXHJcblxyXG48L2Rpdj5cclxuIl19
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWxpdGUvZGV0YWlsc0RpYWxvZy1saXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQU16RSxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUS9CLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBb0Isa0JBQXNDLEVBQVMsYUFBNEIsRUFBUSxXQUEyQixFQUFTLGNBQThCLEVBQy9KLFNBQTBDLEVBQWtDLGFBQWtDLEVBQVUsYUFBNEIsRUFDcEosYUFBNEIsRUFBVSxXQUF3QixFQUFTLGtCQUFzQztRQUZuRyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBUSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDL0osY0FBUyxHQUFULFNBQVMsQ0FBaUM7UUFBa0Msa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDcEosa0JBQWEsR0FBYixhQUFhLENBQWU7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QUM1RjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzVEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs4R0FqVFUsaUJBQWlCLHlLQUdrQyxlQUFlO2tHQUhsRSxpQkFBaUIsdUdDbkI5QiwrK0pBNkdBOzJGRDFGYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0Usd0JBQXdCOzswQkFPcUIsTUFBTTsyQkFBQyxlQUFlOytKQTZFbkUsV0FBVztzQkFBcEIsTUFBTTs7QUFvT1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1Db25maWcsIEZpZWxkLCBUYWJsZUNvbmZpZywgQnV0dG9uLCBEZXRhaWxzRGlhbG9nQ29uZmlnLCBBY3Rpb24sIEFwaVJlc3BvbnNlLCBTdGVwQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IENvcmUsIERldGFpbHNEaWFsb2dQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RpbkNvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtY29uZmlnLnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1kZXRhaWxzRGlhbG9nLWxpdGUnLCAvL3VuaXEgdG8gbGl0ZVxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWxzRGlhbG9nLWxpdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWxpdGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzRGlhbG9nTGl0ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIscHJpdmF0ZSBsb2FkZXJTZXJ2aWNlOiBMb2FkZXJTZXJ2aWNlLHB1YmxpYyBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIscHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERldGFpbHNEaWFsb2dMaXRlPiwgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnLCBwcml2YXRlIGJ1dHRvblNlcnZpY2U6IEJ1dHRvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwdWJsaWMgdGFibGVDb25maWdTZXJ2aWNlOiBUYWJsZUNvbmZpZ1NlcnZpY2UpXHJcbiAge1xyXG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1wiKG1heC13aWR0aDogNjAwcHgpXCJdKS5zdWJzY3JpYmUoKHJlc3VsdDogQnJlYWtwb2ludFN0YXRlKSA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcclxuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gdHJ1ZVxyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGNvbnN0IHsgdGFibGVDb25maWcsIHRhYmxlQ29uZmlncywgZm9ybUNvbmZpZywgc3RlcENvbmZpZywgYnV0dG9ucyB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5pbml0aWFsaXplQ29uZmlncyh0aGlzLmRldGFpbHNDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IHRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZ3MgPSB0YWJsZUNvbmZpZ3M7XHJcbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xyXG4gICAgdGhpcy5zdGVwQ29uZmlnID0gc3RlcENvbmZpZztcclxuICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbnM7XHJcblxyXG4gICAgbGV0IHJlc3AgPSBEZXRhaWxzRGlhbG9nUHJvY2Vzc29yLmhhbmRsZUZvcm1Nb2RlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5mb3JtQ29uZmlnLCk7XHJcblxyXG4gICAgaWYgKHJlc3AubG9hZEJ5QWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZEJ5QWN0aW9uID0gdHJ1ZTtcclxuICAgICAgZm9ybUNvbmZpZy5sb2FkQWN0aW9uID0gcmVzcC5hY3Rpb247XHJcbiAgICAgIHRoaXMubG9hZERhdGEocmVzcC5hY3Rpb24sIGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGV0YWlscyA9IHJlc3AuZGV0YWlscztcclxuICAgICAgRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXRIZXJvVmFsdWUodGhpcy5kZXRhaWxzQ29uZmlnLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgICB0aGlzLmxvYWRCeUFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVGaWVsZCA9IERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0RmlsZUZpZWxkKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmlzTG9hZGluZy5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUHJvY2Vzc2luZyA9IHgpO1xyXG5cclxuICAgIGNvbnN0IHsgZXh0cmFCdXR0b25zLCBjcmVhdGVCdXR0b24sIGVkaXRCdXR0b24sIGRlbGV0ZUJ1dHRvbiB9ID0gRGV0YWlsc0RpYWxvZ1Byb2Nlc3Nvci5zZXR1cEJ1dHRvbnModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmJ1dHRvbnMpO1xyXG4gICAgdGhpcy5leHRyYUJ1dHRvbnMgPSBleHRyYUJ1dHRvbnM7XHJcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbjtcclxuICAgIHRoaXMuZWRpdEJ1dHRvbiA9IGVkaXRCdXR0b247XHJcbiAgICB0aGlzLmRlbGV0ZUJ1dHRvbiA9IGRlbGV0ZUJ1dHRvbjtcclxuXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdGl0bGVBY3Rpb24gPSBcIlZpZXdcIjtcclxuICBsb2FkQnlBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgZXh0cmFCdXR0b25zOiBCdXR0b25bXTtcclxuICBidXR0b25zOiBCdXR0b25bXTtcclxuICBjcmVhdGVCdXR0b246IEJ1dHRvbjtcclxuICBlZGl0QnV0dG9uOiBCdXR0b247XHJcbiAgZGVsZXRlQnV0dG9uOiBCdXR0b247XHJcblxyXG4gIC8vIG1vZGVCdXR0b24gOiBCdXR0b25cclxuICBmaWxlRmllbGQ6IEZpZWxkO1xyXG4gIGZpbGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICB0YWJsZVJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZ1xyXG4gIHRhYmxlQ29uZmlncyA6IFRhYmxlQ29uZmlnW11cclxuICBkZXRhaWxzOiBhbnlcclxuICBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIHN0ZXBDb25maWc6IFN0ZXBDb25maWc7XHJcbiAgc21hbGxTY3JlZW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMb2FkQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgbG9hZERhdGEoYWN0aW9uOiBBY3Rpb24sIHJlbG9hZCkge1xyXG5cclxuICAgIGlmIChhY3Rpb24gJiYgdGhpcy5sb2FkQnlBY3Rpb24pIHtcclxuXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShhY3Rpb24pLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRldGFpbHMgPSBhcGlSZXNwb25zZS5kYXRhXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZENvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIERldGFpbHNEaWFsb2dQcm9jZXNzb3Iuc2V0SGVyb1ZhbHVlKHRoaXMuZGV0YWlsc0NvbmZpZywgdGhpcy5kZXRhaWxzKTtcclxuICAgICAgICAgIGlmIChyZWxvYWQpIHRoaXMudGFibGVSZWxvYWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaW5wdXRDaGFuZ2VkKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIHZhbHVlOiBldmVudC52YWx1ZSB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHNldE1vZGUobmV3TW9kZSkge1xyXG4gICAgdGhpcy5mb3JtQ29uZmlnLm1vZGUgPSBuZXdNb2RlXHJcbiAgICB0aGlzLnNldFRpdGxlQWN0aW9uKClcclxuICB9XHJcblxyXG4gIHNldFRpdGxlQWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5maXhlZFRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGVBY3Rpb24gPSBcIlwiO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aXRsZUFjdGlvbiA9IHRoaXMuYnV0dG9uU2VydmljZS5nZXRUaXRsZUFjdGlvbih0aGlzLmZvcm1Db25maWcubW9kZSwgdGhpcy5idXR0b25zKTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0QnV0dG9uKHRoaXMuYnV0dG9ucywgbmFtZSk7XHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG5cclxuICAgIGlmICghYnV0dG9uKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgYnV0dG9uIHdpdGggY29tcG9uZW50J3MgZGV0YWlsc0NvbmZpZ1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aENvbmZpZyA9IHtcclxuICAgICAgLi4uYnV0dG9uLFxyXG4gICAgICBkZXRhaWxzQ29uZmlnOiBidXR0b24uZGV0YWlsc0NvbmZpZyA/IHsgLi4uYnV0dG9uLmRldGFpbHNDb25maWcgfSA6IHRoaXMuZGV0YWlsc0NvbmZpZ1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3REaXNhYmxlZChidXR0b25XaXRoQ29uZmlnLCByb3cpO1xyXG4gIH1cclxuXHJcblxyXG4gIHRlc3RWaXNpYmxlKHJvdywgYnV0dG9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgYnV0dG9uIHdpdGggY29tcG9uZW50J3MgZGV0YWlsc0NvbmZpZ1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aENvbmZpZyA9IHtcclxuICAgICAgLi4uYnV0dG9uLFxyXG4gICAgICBkZXRhaWxzQ29uZmlnOiBidXR0b24uZGV0YWlsc0NvbmZpZyA/IHsgLi4uYnV0dG9uLmRldGFpbHNDb25maWcgfSA6IHRoaXMuZGV0YWlsc0NvbmZpZ1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3RWaXNpYmxlKGJ1dHRvbldpdGhDb25maWcsIHJvdylcclxuICB9XHJcblxyXG4gIHRlc3RWaXNpYmxlVGFiKHRibENvbmZpZzogVGFibGVDb25maWcpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAoIXRoaXMudGFibGVDb25maWdTZXJ2aWNlLmhhc1RhYmxlQWNjZXNzKHRibENvbmZpZykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuaXNUYWJWaXNpYmxlKHRibENvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93KSB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KTtcclxuICB9XHJcblxyXG4gIGdldFZpc2libGVGaWVsZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29uZmlnLmZpZWxkcz8uZmlsdGVyKHggPT4gQ29yZS50ZXN0VmlzaWJsZSh0aGlzLmZvcm1Db25maWcsIHRoaXMuZGV0YWlscywgeCwgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSkpXHJcbiAgfVxyXG5cclxuXHJcbiAgY3JlYXRlKCkge1xyXG4gICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2NyZWF0ZScpO1xyXG4gIH1cclxuXHJcbiAgZWRpdCgpIHtcclxuICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKCdlZGl0Jyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUoKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYERFTEVURSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25BY3Rpb24oJ2RlbGV0ZScpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjdXN0b20oYnV0dG9uOiBCdXR0b24pIHtcclxuICAgIGlmIChidXR0b24uZGlhbG9nICYmIGJ1dHRvbi5kZXRhaWxzQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMub3Blbk5lc3RlZERldGFpbHNEaWFsb2coYnV0dG9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQWN0aW9uKGJ1dHRvbi5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3Blbk5lc3RlZERldGFpbHNEaWFsb2coYnV0dG9uOiBCdXR0b24pOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyZWREZXRhaWxzRGlhbG9nKGJ1dHRvbiwgdGhpcy5kZXRhaWxzLCBEZXRhaWxzRGlhbG9nTGl0ZSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ2lucHV0Q2hhbmdlJykge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKHJlc3VsdC5jaGFuZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiByZXN1bHQubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5sb2FkQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5mb3JtQ29uZmlnLmxvYWRBY3Rpb24sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGhhbmRsZUJ1dHRvbkFjdGlvbihidXR0b25OYW1lOiBzdHJpbmcpIHtcclxuXHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIGlmICghYnV0dG9uKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFidXR0b24uYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbWVzc2FnZTogJ2VtaXQnLCBkYXRhOiB0aGlzLmRldGFpbHMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZUZvcm0oKSkge1xyXG4gICAgICB0aGlzLmV4ZWN1dGVBY3Rpb24oYnV0dG9uLCB0aGlzLmRldGFpbHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IENvcmUudmFsaWRhdGVPYmplY3QodGhpcy5nZXRWaXNpYmxlRmllbGRzKCksIHRoaXMuZGV0YWlscyk7XHJcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEgJiYgdGhpcy5maWxlRmllbGQ/LnJlcXVpcmVkICYmIHRoaXMuZm9ybUNvbmZpZy5tb2RlID09PSAnY3JlYXRlJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGF0dGFjaCBmaWxlKHMpXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgY29tcG9zaXRlIGZpZWxkc1xyXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmdldFZpc2libGVGaWVsZHMoKSkge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2NvbXBvc2l0ZScpIHtcclxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gQ29yZS52YWxpZGF0ZU9iamVjdChDb3JlLmdldFZpc2libGVTdWJmaWVsZHModGhpcy5mb3JtQ29uZmlnLCB0aGlzLmRldGFpbHMsIGZpZWxkLCB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRSb2xlU291cmNlLnZhbHVlKSwgdGhpcy5kZXRhaWxzKTtcclxuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAhPT0gJycpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QodmFsaWRhdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBY3Rpb25EYXRhKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGJ1dHRvbi5hY3Rpb24/LmlzRm9ybURhdGEpIHtcclxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlJHtpfWAsIHRoaXMuZmlsZXNbaV0sIHRoaXMuZmlsZXNbaV0ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZGF0YVwiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHJldHVybiBmb3JtRGF0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uKGJ1dHRvbjogQnV0dG9uLCBkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGFjdGlvbkRhdGEgPSB0aGlzLnByZXBhcmVBY3Rpb25EYXRhKGJ1dHRvbiwgZGF0YSk7XHJcblxyXG4gICAgaWYgKGJ1dHRvbi5jb25maXJtKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShidXR0b24uY29uZmlybS5tZXNzYWdlKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwieWVzXCIpIHtcclxuICAgICAgICAgIHRoaXMucGVyZm9ybUFwaUNhbGwoYnV0dG9uLCBhY3Rpb25EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZXJmb3JtQXBpQ2FsbChidXR0b24sIGFjdGlvbkRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwZXJmb3JtQXBpQ2FsbChidXR0b246IEJ1dHRvbiwgZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYnV0dG9uLmFjdGlvbiwgZGF0YSkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5tZXNzYWdlLmluY2x1ZGVzKFwiYXBwcm92YWxcIikgfHwgYXBpUmVzcG9uc2UubWVzc2FnZS5pbmNsdWRlcyhcImFwcHJvdmVcIikgfHwgYXBpUmVzcG9uc2UubWVzc2FnZS5pbmNsdWRlcyhcImRlY2xpbmVcIikpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChidXR0b24uYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSAhPSBcInN1Y2Nlc3NcIiAmJiBhcGlSZXNwb25zZS5tZXNzYWdlICE9IFwiXCIpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGRhdGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBtZXNzYWdlOiAnc3VjY2VzcycsIGRhdGE6IHsgLi4uYXBpUmVzcG9uc2UsIGRhdGE6IHRoaXMuZGV0YWlscyB9IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn07XHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGFpbmVyXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGVudFwiPlxyXG5cclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJpc1Byb2Nlc3NpbmcgJiYgZGF0YVNlcnZpY2UuYXBwQ29uZmlnLnByb2dyZXNzTGluZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XHJcblxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDsgZm9udC13ZWlnaHQ6NTAwO21hcmdpbi1ib3R0b206IDEwcHg7XCI+e3t0aXRsZUFjdGlvbiB8IHRpdGxlY2FzZX19IHt7Zm9ybUNvbmZpZz8udGl0bGV9fTwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J3ZpZXcnICYmIGVkaXRCdXR0b24gJiYgdGVzdFZpc2libGUoZGV0YWlscyxlZGl0QnV0dG9uLm5hbWUpXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJFZGl0XCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldE1vZGUoJ2VkaXQnKVwiIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQoZGV0YWlscyxlZGl0QnV0dG9uLm5hbWUpXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiAqbmdJZj1cImxvYWRCeUFjdGlvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJSZWZyZXNoXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImxvYWREYXRhKGZvcm1Db25maWcubG9hZEFjdGlvbiwgdHJ1ZSlcIj48bWF0LWljb24gY2xhc3M9XCJyZWZyZXNoSWNvblwiPmNhY2hlZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeSBkaWFsb2ctc2Nyb2xsLWNvbnRlbnRcIj5cclxuXHJcbiAgICAgICAgICA8c3BhLWFsZXJ0IFthbGVydE1lc3NhZ2VzXT1cImZvcm1Db25maWcuYWxlcnRNZXNzYWdlc1wiIFtkYXRhXT1cImRldGFpbHNcIj48L3NwYS1hbGVydD5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXRcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4XCI+XHJcblxyXG4gICAgICAgICA8cCAqbmdJZj1cImZvcm1Db25maWcgJiYgIWRldGFpbHNcIj48ZW0+TG9hZGluZy4uLjwvZW0+PC9wPlxyXG5cclxuICAgICAgICA8c3BhLWZvcm0gKm5nSWY9XCJmb3JtQ29uZmlnICYmIGRldGFpbHNcIiBbZmlsZXNdPVwiZmlsZXNcIiBbZGF0YV09XCJkZXRhaWxzXCIgW2NvbmZpZ109XCJmb3JtQ29uZmlnXCIgKGlucHV0Q2hhbmdlKT1cImlucHV0Q2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2R5bmFtaWNTZWxlY3QgbGV0LWZpZWxkPVwiZmllbGRcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQtdGVzdFJlYWRPbmx5PVwidGVzdFJlYWRPbmx5XCIgbGV0LXNlbGVjdENoYW5nZWQ9XCJzZWxlY3RDaGFuZ2VkXCI+XHJcbiAgICAgICAgICAgIDxzcGEtc2VsZWN0LWxpdGVcclxuICAgICAgICAgICAgICBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCJcclxuICAgICAgICAgICAgICBbd2lkdGhdPVwiZmllbGQud2lkdGhcIlxyXG4gICAgICAgICAgICAgIFtudWxsYWJsZV09XCJmaWVsZC5udWxsYWJsZVwiXHJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW21hc3Rlck9wdGlvbnNdPVwiZmllbGQubWFzdGVyT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW21hc3RlckZpZWxkXT1cImZpZWxkLm1hc3RlckZpZWxkXCJcclxuICAgICAgICAgICAgICBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5ID8/ICduYW1lJ1wiXHJcbiAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImZpZWxkLm9wdGlvblZhbHVlID8/ICd2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIlxyXG4gICAgICAgICAgICAgIFtkZWZhdWx0Rmlyc3RWYWx1ZV09XCJmaWVsZC5kZWZhdWx0Rmlyc3RWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtoaW50XT1cImZpZWxkLmhpbnRcIlxyXG4gICAgICAgICAgICAgIFtsb2FkQWN0aW9uXT1cImZpZWxkLmxvYWRBY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFtsb2FkSURGaWVsZF09XCJmaWVsZC5sb2FkSURGaWVsZFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICBbaW5mb01lc3NhZ2VdPVwiZmllbGQuaW5mb01lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgIFtjb3B5Q29udGVudF09XCJmaWVsZC5jb3B5Q29udGVudFwiXHJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInNlbGVjdENoYW5nZWQoZmllbGQpXCJcclxuICAgICAgICAgICAgPjwvc3BhLXNlbGVjdC1saXRlPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3NwYS1mb3JtPlxyXG5cclxuXHJcbiAgICAgICAgPCEtLSA8bWF0LXRhYi1ncm91cCAqbmdJZj1cInRhYmxlQ29uZmlnc1wiPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRibCBvZiB0YWJsZUNvbmZpZ1NlcnZpY2UuZ2V0VmlzaWJsZVRhYmxlQ29uZmlncyh0YWJsZUNvbmZpZ3MpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtdGFiICpuZ0lmPVwidGVzdFZpc2libGVUYWIodGJsKVwiPlxyXG5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e3RibC50YWJUaXRsZSA/PyAnVW50aXRsZWQnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYS10YWJsZS1pbnRlcm5hbCBbY29uZmlnXT1cInRibFwiIFtyZWxvYWRdPVwidGFibGVSZWxvYWRcIiAoZGF0YUxvYWQpPVwibG9hZERhdGEoZm9ybUNvbmZpZy5sb2FkQWN0aW9uLCBmYWxzZSlcIj48L3NwYS10YWJsZS1pbnRlcm5hbD5cclxuXHJcbiAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8L21hdC10YWItZ3JvdXA+IC0tPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcblxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuXHJcbiAgICA8ZGl2PlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgKm5nSWY9XCJmb3JtQ29uZmlnLm1vZGU9PSdjcmVhdGUnICYmIGNyZWF0ZUJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjcmVhdGUoKVwiIGNka0ZvY3VzSW5pdGlhbD57e2NyZWF0ZUJ1dHRvbi5kaXNwbGF5ID8/ICdTdWJtaXQnfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiAqbmdJZj1cImZvcm1Db25maWcubW9kZT09J2VkaXQnICYmIGVkaXRCdXR0b25cIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZWRpdCgpXCIgY2RrRm9jdXNJbml0aWFsPnt7ZWRpdEJ1dHRvbi5kaXNwbGF5ID8/ICdTdWJtaXQnfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgZXh0cmFCdXR0b25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInRlc3RWaXNpYmxlKGRldGFpbHMsYnRuLm5hbWUpXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmcgfHwgdGVzdERpc2FibGVkKGRldGFpbHMsYnRuLm5hbWUpXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ0biwgZGV0YWlscyl9XCIgKGNsaWNrKT1cImN1c3RvbShidG4pXCIgY2RrRm9jdXNJbml0aWFsPjxtYXQtaWNvbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0QnV0dG9uQ29sb3IoYnRuLCBkZXRhaWxzKX1cIj57e2J0bi5pY29uLm5hbWV9fTwvbWF0LWljb24+e3tidG4uZGlzcGxheSA/PyBidG4ubmFtZSB8IHRpdGxlY2FzZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0LWRpYWxvZy1jbG9zZT5DYW5jZWw8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgKm5nSWY9XCJzbWFsbFNjcmVlblwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXA9XCJEZWxldGVcIiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiIChjbGljayk9XCJkZWxldGUoKVwiICpuZ0lmPVwiZm9ybUNvbmZpZy5tb2RlIT0nY3JlYXRlJyAgJiYgZGVsZXRlQnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
@@ -178,10 +178,10 @@ export class TextComponent {
178
178
  }
179
179
  }
180
180
  TextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextComponent, deps: [{ token: i1.DataServiceLib }], target: i0.ɵɵFactoryTarget.Component });
181
- TextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TextComponent, selector: "spa-text", inputs: { appearance: "appearance", readonly: "readonly", hint: "hint", display: "display", placeholder: "placeholder", value: "value", format: "format", type: "type", rows: "rows", width: "width", copyContent: "copyContent", clearContent: "clearContent", options: "options", optionDisplay: "optionDisplay", optionValue: "optionValue", loadAction: "loadAction", required: "required", min: "min", max: "max", regex: "regex", suffix: "suffix", infoMessage: "infoMessage" }, outputs: { valueChange: "valueChange", leave: "leave", enterPress: "enterPress" }, ngImport: i0, template: "\r\n<!-- General Text -->\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && (format=='text' || format =='date') && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\" >\r\n<mat-label *ngIf=\"format=='text'\">{{display}}</mat-label>\r\n<mat-label *ngIf=\"format=='date'\">{{display | date:'dd/MM/yyyy'}}</mat-label>\r\n<input matInput autocomplete=\"off\" [(ngModel)]=\"value\" (change)=\"changed()\" (blur)=\"leaved()\" (keyup.enter)=\"enterPressed()\" [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"/>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\" ></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n<!-- password -->\r\n<mat-form-field class=\"spa-text\" *ngIf=\"format=='password'\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px\" [appearance]=\"appearance ?? 'legacy'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [type]=\"hide ? 'password' : 'text'\" (keyup.enter)=\"enterPressed()\" (change)=\"changed()\" (blur)=\"leaved()\" [(ngModel)]=\"value\" autocomplete=\"off\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <button mat-icon-button matSuffix (click)=\"hide = !hide\" [attr.aria-label]=\"'Hide password'\" [attr.aria-pressed]=\"hide\">\r\n <mat-icon style=\"font-size: 18px;\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n\r\n<!-- TextArea copy - Only change input to textarea and change ngif to not -->\r\n\r\n<mat-form-field *ngIf=\"rows > 1 && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" [appearance]=\"appearance ?? 'legacy'\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n<mat-label>{{display}}</mat-label>\r\n<textarea matInput autocomplete=\"off\" [rows]=\"rows\" [(ngModel)]=\"value\" (change)=\"changed()\" (keyup.enter)=\"enterPressed()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"></textarea>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n\r\n<!-- Auto Complete-->\r\n\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && format=='text' && options.length > 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <mat-label>{{display}}</mat-label>\r\n <input [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"myControl\" matInput [matAutocomplete]=\"auto\" [required]=\"required\" [readonly]=\"readonly\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(myControl)}}</mat-error>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"changed()\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"multiDimension ? option[optionDisplay] : option\">\r\n {{multiDimension ? option[optionDisplay] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <div matSuffix class=\"suffix-icons\">\r\n <button mat-icon-button *ngIf=\"loadAction && isHovered\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n <mat-icon color=\"primary\">cached</mat-icon>\r\n </button>\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i9.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.SuffixComponent, selector: "spa-suffix", inputs: ["label", "infoMessage", "copyContent", "isHovered", "clearContent", "value"], outputs: ["infoClick", "copyClick", "clearClick", "valueChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
181
+ TextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TextComponent, selector: "spa-text", inputs: { appearance: "appearance", readonly: "readonly", hint: "hint", display: "display", placeholder: "placeholder", value: "value", format: "format", type: "type", rows: "rows", width: "width", copyContent: "copyContent", clearContent: "clearContent", options: "options", optionDisplay: "optionDisplay", optionValue: "optionValue", loadAction: "loadAction", required: "required", min: "min", max: "max", regex: "regex", suffix: "suffix", infoMessage: "infoMessage" }, outputs: { valueChange: "valueChange", leave: "leave", enterPress: "enterPress" }, ngImport: i0, template: "\r\n<!-- General Text -->\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && (format=='text' || format =='date') && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\" >\r\n<mat-label *ngIf=\"format=='text'\">{{display}}</mat-label>\r\n<mat-label *ngIf=\"format=='date'\">{{display | date:'dd/MM/yyyy'}}</mat-label>\r\n<input matInput autocomplete=\"off\" [(ngModel)]=\"value\" (change)=\"changed()\" (blur)=\"leaved()\" (keyup.enter)=\"enterPressed()\" [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"/>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\" ></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n<!-- password -->\r\n<mat-form-field class=\"spa-text\" *ngIf=\"format=='password'\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px\" [appearance]=\"appearance ?? 'legacy'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [type]=\"hide ? 'password' : 'text'\" (keyup.enter)=\"enterPressed()\" (change)=\"changed()\" (blur)=\"leaved()\" [(ngModel)]=\"value\" autocomplete=\"off\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <button mat-icon-button matSuffix (click)=\"hide = !hide\" [attr.aria-label]=\"'Hide password'\" [attr.aria-pressed]=\"hide\">\r\n <mat-icon style=\"font-size: 18px;\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n\r\n<!-- TextArea copy - Only change input to textarea and change ngif to not -->\r\n\r\n<mat-form-field *ngIf=\"rows > 1 && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" [appearance]=\"appearance ?? 'legacy'\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n<mat-label>{{display}}</mat-label>\r\n<textarea matInput autocomplete=\"off\" [rows]=\"rows\" [(ngModel)]=\"value\" (change)=\"changed()\" (keyup.enter)=\"enterPressed()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"></textarea>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n\r\n<!-- Auto Complete-->\r\n\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && format=='text' && options.length > 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <mat-label>{{display}}</mat-label>\r\n <input [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"myControl\" matInput [matAutocomplete]=\"auto\" [required]=\"required\" [readonly]=\"readonly\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(myControl)}}</mat-error>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"changed()\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"multiDimension ? option[optionDisplay] : option\">\r\n {{multiDimension ? option[optionDisplay] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <div matSuffix class=\"suffix-icons\">\r\n <button mat-icon-button *ngIf=\"loadAction && isHovered\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n <mat-icon style=\"font-size: 14px;\" color=\"primary\">cached</mat-icon>\r\n </button>\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i9.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.SuffixComponent, selector: "spa-suffix", inputs: ["label", "infoMessage", "copyContent", "isHovered", "clearContent", "value"], outputs: ["infoClick", "copyClick", "clearClick", "valueChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
182
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextComponent, decorators: [{
183
183
  type: Component,
184
- args: [{ selector: 'spa-text', template: "\r\n<!-- General Text -->\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && (format=='text' || format =='date') && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\" >\r\n<mat-label *ngIf=\"format=='text'\">{{display}}</mat-label>\r\n<mat-label *ngIf=\"format=='date'\">{{display | date:'dd/MM/yyyy'}}</mat-label>\r\n<input matInput autocomplete=\"off\" [(ngModel)]=\"value\" (change)=\"changed()\" (blur)=\"leaved()\" (keyup.enter)=\"enterPressed()\" [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"/>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\" ></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n<!-- password -->\r\n<mat-form-field class=\"spa-text\" *ngIf=\"format=='password'\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px\" [appearance]=\"appearance ?? 'legacy'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [type]=\"hide ? 'password' : 'text'\" (keyup.enter)=\"enterPressed()\" (change)=\"changed()\" (blur)=\"leaved()\" [(ngModel)]=\"value\" autocomplete=\"off\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <button mat-icon-button matSuffix (click)=\"hide = !hide\" [attr.aria-label]=\"'Hide password'\" [attr.aria-pressed]=\"hide\">\r\n <mat-icon style=\"font-size: 18px;\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n\r\n<!-- TextArea copy - Only change input to textarea and change ngif to not -->\r\n\r\n<mat-form-field *ngIf=\"rows > 1 && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" [appearance]=\"appearance ?? 'legacy'\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n<mat-label>{{display}}</mat-label>\r\n<textarea matInput autocomplete=\"off\" [rows]=\"rows\" [(ngModel)]=\"value\" (change)=\"changed()\" (keyup.enter)=\"enterPressed()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"></textarea>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n\r\n<!-- Auto Complete-->\r\n\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && format=='text' && options.length > 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <mat-label>{{display}}</mat-label>\r\n <input [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"myControl\" matInput [matAutocomplete]=\"auto\" [required]=\"required\" [readonly]=\"readonly\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(myControl)}}</mat-error>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"changed()\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"multiDimension ? option[optionDisplay] : option\">\r\n {{multiDimension ? option[optionDisplay] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <div matSuffix class=\"suffix-icons\">\r\n <button mat-icon-button *ngIf=\"loadAction && isHovered\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n <mat-icon color=\"primary\">cached</mat-icon>\r\n </button>\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n" }]
184
+ args: [{ selector: 'spa-text', template: "\r\n<!-- General Text -->\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && (format=='text' || format =='date') && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\" >\r\n<mat-label *ngIf=\"format=='text'\">{{display}}</mat-label>\r\n<mat-label *ngIf=\"format=='date'\">{{display | date:'dd/MM/yyyy'}}</mat-label>\r\n<input matInput autocomplete=\"off\" [(ngModel)]=\"value\" (change)=\"changed()\" (blur)=\"leaved()\" (keyup.enter)=\"enterPressed()\" [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"/>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\" ></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n<!-- password -->\r\n<mat-form-field class=\"spa-text\" *ngIf=\"format=='password'\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px\" [appearance]=\"appearance ?? 'legacy'\">\r\n <mat-label>{{display}}</mat-label>\r\n <input matInput [type]=\"hide ? 'password' : 'text'\" (keyup.enter)=\"enterPressed()\" (change)=\"changed()\" (blur)=\"leaved()\" [(ngModel)]=\"value\" autocomplete=\"off\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <button mat-icon-button matSuffix (click)=\"hide = !hide\" [attr.aria-label]=\"'Hide password'\" [attr.aria-pressed]=\"hide\">\r\n <mat-icon style=\"font-size: 18px;\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n\r\n<!-- TextArea copy - Only change input to textarea and change ngif to not -->\r\n\r\n<mat-form-field *ngIf=\"rows > 1 && options.length == 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" [appearance]=\"appearance ?? 'legacy'\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n<mat-label>{{display}}</mat-label>\r\n<textarea matInput autocomplete=\"off\" [rows]=\"rows\" [(ngModel)]=\"value\" (change)=\"changed()\" (keyup.enter)=\"enterPressed()\" [placeholder]=\"placeholder\" [formControl]=\"control\" [required]=\"required\" [readonly]=\"readonly\"></textarea>\r\n<mat-error *ngIf=\"control.invalid\">{{validate(control)}}</mat-error>\r\n <div matSuffix class=\"suffix-icons\">\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n\r\n\r\n<!-- Auto Complete-->\r\n\r\n<mat-form-field *ngIf=\"(!rows || rows == 1) && format=='text' && options.length > 0\" [hideRequiredMarker]=\"!required\" [hintLabel]=\"hint\" [appearance]=\"appearance ?? 'legacy'\" [ngStyle]=\"{'width':width ?? '100%'}\" style=\"margin-right: 5px;\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <mat-label>{{display}}</mat-label>\r\n <input [type]=\"type\" [placeholder]=\"placeholder\" [formControl]=\"myControl\" matInput [matAutocomplete]=\"auto\" [required]=\"required\" [readonly]=\"readonly\">\r\n <mat-error *ngIf=\"control.invalid\">{{validate(myControl)}}</mat-error>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"changed()\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"multiDimension ? option[optionDisplay] : option\">\r\n {{multiDimension ? option[optionDisplay] : option}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <div matSuffix class=\"suffix-icons\">\r\n <button mat-icon-button *ngIf=\"loadAction && isHovered\" (click)=\"refresh($event)\" matTooltip=\"Refresh\" matTooltipPosition=\"above\">\r\n <mat-icon style=\"font-size: 14px;\" color=\"primary\">cached</mat-icon>\r\n </button>\r\n <spa-suffix [label]=\"suffix\" [infoMessage]=\"infoMessage\" [copyContent]=\"copyContent\" [clearContent]=\"clearContent\" (clearClick)=\"clear()\" [isHovered]=\"isHovered\" [(value)]=\"value\"></spa-suffix>\r\n </div>\r\n</mat-form-field>\r\n\r\n" }]
185
185
  }], ctorParameters: function () { return [{ type: i1.DataServiceLib }]; }, propDecorators: { appearance: [{
186
186
  type: Input
187
187
  }], readonly: [{
@@ -233,4 +233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
233
233
  }], infoMessage: [{
234
234
  type: Input
235
235
  }] } });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGV4dC90ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVM3QyxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUFvQixXQUEyQjtRQUEzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFrQy9DLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLHNCQUFzQjtRQUN0Qix3QkFBbUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxTQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsbUJBQW1CO1FBRXZCLGVBQVUsR0FBK0MsVUFBVSxDQUFDO1FBQ3BFLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1YsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDaEIs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QVc7c0JBQXBCLE1BQU07Z0JBQ0UsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbiwgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS10ZXh0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYikgeyAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucyl7XHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZEFjdGlvbil7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YSh0aGlzLmxvYWRBY3Rpb24pO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBcIkVudGVyIFwiICsgdGhpcy5kaXNwbGF5O1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLmluaXRDb250cm9sKHRoaXMuY29udHJvbClcclxuXHJcbiAgICB0aGlzLmluaXRDb250cm9sKHRoaXMubXlDb250cm9sKVxyXG5cclxuICB9XHJcblxyXG5cclxuICBmaWx0ZXJlZE9wdGlvbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xyXG4gIG11bHRpRGltZW5zaW9uID0gZmFsc2U7XHJcblxyXG4gIC8vIG9wdGlvbnM6IEZvcm1Hcm91cDtcclxuICBoaWRlUmVxdWlyZWRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKHRydWUpO1xyXG4gIGhpZGUgPSB0cnVlOyAvL2ZvciBwYXNzd29yZCBvbmx5XHJcblxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6ICdsZWdhY3knIHwgJ3N0YW5kYXJkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyA9ICdzdGFuZGFyZCc7XHJcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaW50ID0gXCJcIjtcclxuICBASW5wdXQoKSBkaXNwbGF5ID0gXCJcIjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBmb3JtYXQgPSBcInRleHRcIjtcclxuICBASW5wdXQoKSB0eXBlID0gXCJcIjtcclxuXHJcbiAgQE91dHB1dCgpIGxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBlbnRlclByZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoKSByb3dzID0gMTtcclxuICBASW5wdXQoKSB3aWR0aCA9IFwiMTAwJVwiXHJcbiAgQElucHV0KCkgY29weUNvbnRlbnQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjbGVhckNvbnRlbnQgPSBmYWxzZTtcclxuXHJcblxyXG4gIC8vQXV0b2NvbXBsZXRlIGl0ZW1zXHJcbiAgQElucHV0KCkgb3B0aW9uczogYW55ID0gW107XHJcbiAgQElucHV0KCkgb3B0aW9uRGlzcGxheSA9IFwibmFtZVwiOyAvLyBEZWZhdWx0IHRvIG5hbWUgaWYgbm90IHByb3ZpZGVkXHJcbiAgQElucHV0KCkgb3B0aW9uVmFsdWUgPSBcInZhbHVlXCI7IC8vIERlZmF1bHQgdG8gdmFsdWUgaWYgbm90IHByb3ZpZGVkXHJcbiAgQElucHV0KCkgbG9hZEFjdGlvbjogQWN0aW9uO1xyXG5cclxuICAvL3ZhbGlkYXRpb24gaW5wdXRcclxuICBASW5wdXQoKSByZXF1aXJlZCA9IHRydWU7XHJcbiAgQElucHV0KCkgbWluID0gMDtcclxuICBASW5wdXQoKSBtYXggPSA5MDAwMDAwMDAwMDAwMDAwOyAvL01hdGgubWF4XHJcbiAgQElucHV0KCkgcmVnZXggPSBcIlwiIC8vXCJbYS16QS1aIF0qXCIgLy9cIi9cXFMrQFxcUytcXC5cXFMrL1wiO1xyXG5cclxuICBASW5wdXQoKSBzdWZmaXg6IHN0cmluZztcclxuICBASW5wdXQoKSBpbmZvTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICBpc0hvdmVyZWQgPSBmYWxzZTtcclxuICBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RmlsdGVyKCkge1xyXG5cclxuICAgIGNvbnN0IG9iaktleUxpc3QgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnNbMF0pO1xyXG4gICAgY29uc3QgZmlyc3RLZXkgPSBvYmpLZXlMaXN0WzBdO1xyXG4gICAgdGhpcy5tdWx0aURpbWVuc2lvbiA9ICFDb3JlLmlzTnVtYmVyKGZpcnN0S2V5KTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICBzdGFydFdpdGgoXCJcIiksXHJcbiAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuX2ZpbHRlcih2YWx1ZSkpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubXlDb250cm9sLnNldFZhbHVlKHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRoaXMudmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0aGlzLm9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKHRoaXMubXVsdGlEaW1lbnNpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+XHJcbiAgICAgICAgb3B0aW9uW3RoaXMub3B0aW9uRGlzcGxheV0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PlxyXG4gICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0Q29udHJvbChjb250cm9sOiBGb3JtQ29udHJvbCl7XHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkICYmICF0aGlzLnJlYWRvbmx5KSB7XHJcblxyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXgpLCBWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5yZWdleCldKTtcclxuICAgICAgdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERpc3BsYXlWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUgfHwgIXRoaXMub3B0aW9ucy5sZW5ndGgpIHJldHVybiAnJztcclxuXHJcbiAgICBpZiAodGhpcy5tdWx0aURpbWVuc2lvbikge1xyXG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0W3RoaXMub3B0aW9uVmFsdWVdID09PSB2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bdGhpcy5vcHRpb25EaXNwbGF5XSA6ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vRXZlbnRzXHJcbiAgY2hhbmdlZCgpIHtcclxuICAgIC8vIENoYW5nZWQgdG8gaGFuZGxlIGJvdGggYXV0b2NvbXBsZXRlIGFuZCByZWd1bGFyIG1vZGVzXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gRm9yIGF1dG9jb21wbGV0ZSwgZmluZCB0aGUgZnVsbCBvcHRpb24gb2JqZWN0IHRvIGdldCBwcm9wZXIgdmFsdWVcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLm11bHRpRGltZW5zaW9uID9cclxuICAgICAgICB0aGlzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0W3RoaXMub3B0aW9uRGlzcGxheV0gPT09IHRoaXMubXlDb250cm9sLnZhbHVlKSA6XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdCA9PT0gdGhpcy5teUNvbnRyb2wudmFsdWUpO1xyXG5cclxuICAgICAgLy8gRW1pdCB0aGUgb3B0aW9uVmFsdWUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZW1pdCB0aGUgZGlyZWN0IHZhbHVlXHJcbiAgICAgIGNvbnN0IHZhbHVlVG9FbWl0ID0gc2VsZWN0ZWRPcHRpb24gP1xyXG4gICAgICAgICh0aGlzLm11bHRpRGltZW5zaW9uID8gc2VsZWN0ZWRPcHRpb25bdGhpcy5vcHRpb25WYWx1ZV0gOiBzZWxlY3RlZE9wdGlvbikgOlxyXG4gICAgICAgIHRoaXMubXlDb250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlVG9FbWl0O1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVUb0VtaXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGVhdmVkKCl7XHJcbiAgICB0aGlzLmxlYXZlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCl7XHJcbiAgICB0aGlzLnZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGVudGVyUHJlc3NlZCgpIHtcclxuICAgIHRoaXMuZW50ZXJQcmVzcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICghdGhpcy5sb2FkQWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWZyZXNoQWN0aW9uID0ge1xyXG4gICAgICAuLi50aGlzLmxvYWRBY3Rpb24sXHJcbiAgICAgIGZvcmNlUmVmcmVzaDogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldERhdGEocmVmcmVzaEFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhKGFjdGlvbjogQWN0aW9uKSB7XHJcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuO1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGFjdGlvbikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvL3ZhbGlkYXRpb25cclxuICBteUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm1pbiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4KSwgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucmVnZXgpXSk7XHJcbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCggdGhpcy52YWx1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXgpLCBWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5yZWdleCkgIF0pO1xyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCkgOiBzdHJpbmd7XHJcblxyXG5cclxuICAgIGlmICgodGhpcy5yZXF1aXJlZCB8fCB0aGlzLm1pbiA+IDApICYmIGNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykgKXtcclxuICAgICAgcmV0dXJuIGBSZXF1aXJlZGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ21pbmxlbmd0aCcpICl7XHJcbiAgICAgIHJldHVybiBgTWluaW11biBsZW5ndGggaXMgJHt0aGlzLm1pbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250cm9sLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSkge1xyXG4gICAgICByZXR1cm4gYE1heGltdW0gbGVuZ3RoIGlzICR7dGhpcy5tYXh9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XHJcbiAgICAgIHJldHVybiBgSW52YWxpZCBJbnB1dGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJcclxuPCEtLSBHZW5lcmFsIFRleHQgLS0+XHJcbjxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIighcm93cyB8fCByb3dzID09IDEpICYmIChmb3JtYXQ9PSd0ZXh0JyB8fCBmb3JtYXQgPT0nZGF0ZScpICYmIG9wdGlvbnMubGVuZ3RoID09IDBcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cIiFyZXF1aXJlZFwiIFtoaW50TGFiZWxdPVwiaGludFwiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UgPz8gJ2xlZ2FjeSdcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzp3aWR0aCA/PyAnMTAwJSd9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIiAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCIgPlxyXG48bWF0LWxhYmVsICpuZ0lmPVwiZm9ybWF0PT0ndGV4dCdcIj57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxyXG48bWF0LWxhYmVsICpuZ0lmPVwiZm9ybWF0PT0nZGF0ZSdcIj57e2Rpc3BsYXkgfCBkYXRlOidkZC9NTS95eXl5J319PC9tYXQtbGFiZWw+XHJcbjxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgIChjaGFuZ2UpPVwiY2hhbmdlZCgpXCIgKGJsdXIpPVwibGVhdmVkKClcIiAoa2V5dXAuZW50ZXIpPVwiZW50ZXJQcmVzc2VkKClcIiAgW3R5cGVdPVwidHlwZVwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIvPlxyXG48bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkXCI+e3t2YWxpZGF0ZShjb250cm9sKX19PC9tYXQtZXJyb3I+XHJcbiAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJzdWZmaXgtaWNvbnNcIj5cclxuICAgIDxzcGEtc3VmZml4IFtsYWJlbF09XCJzdWZmaXhcIiBbaW5mb01lc3NhZ2VdPVwiaW5mb01lc3NhZ2VcIiBbY29weUNvbnRlbnRdPVwiY29weUNvbnRlbnRcIiBbY2xlYXJDb250ZW50XT1cImNsZWFyQ29udGVudFwiIChjbGVhckNsaWNrKT1cImNsZWFyKClcIiBbaXNIb3ZlcmVkXT1cImlzSG92ZXJlZFwiIFsodmFsdWUpXT1cInZhbHVlXCIgPjwvc3BhLXN1ZmZpeD5cclxuICA8L2Rpdj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblxyXG48IS0tIHBhc3N3b3JkIC0tPlxyXG48bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJzcGEtdGV4dFwiICpuZ0lmPVwiZm9ybWF0PT0ncGFzc3dvcmQnXCIgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCIhcmVxdWlyZWRcIiBbaGludExhYmVsXT1cImhpbnRcIiAgW25nU3R5bGVdPVwieyd3aWR0aCc6d2lkdGggPz8gJzEwMCUnfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHhcIiBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlID8/ICdsZWdhY3knXCI+XHJcbiAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxyXG4gIDxpbnB1dCBtYXRJbnB1dCBbdHlwZV09XCJoaWRlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiIChrZXl1cC5lbnRlcik9XCJlbnRlclByZXNzZWQoKVwiIChjaGFuZ2UpPVwiY2hhbmdlZCgpXCIgKGJsdXIpPVwibGVhdmVkKClcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIj5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkXCI+e3t2YWxpZGF0ZShjb250cm9sKX19PC9tYXQtZXJyb3I+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJoaWRlID0gIWhpZGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidIaWRlIHBhc3N3b3JkJ1wiIFthdHRyLmFyaWEtcHJlc3NlZF09XCJoaWRlXCI+XHJcbiAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XCI+e3toaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblxyXG48IS0tIFRleHRBcmVhIGNvcHkgLSBPbmx5IGNoYW5nZSBpbnB1dCB0byB0ZXh0YXJlYSBhbmQgY2hhbmdlIG5naWYgdG8gbm90IC0tPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicm93cyA+IDEgICYmIG9wdGlvbnMubGVuZ3RoID09IDBcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cIiFyZXF1aXJlZFwiIFtoaW50TGFiZWxdPVwiaGludFwiIFtuZ1N0eWxlXT1cInsnd2lkdGgnOndpZHRoID8/ICcxMDAlJ31cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UgPz8gJ2xlZ2FjeSdcIiAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCI+XHJcbjxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cclxuPHRleHRhcmVhIG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtyb3dzXT1cInJvd3NcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGNoYW5nZSk9XCJjaGFuZ2VkKClcIiAoa2V5dXAuZW50ZXIpPVwiZW50ZXJQcmVzc2VkKClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiPjwvdGV4dGFyZWE+XHJcbjxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmludmFsaWRcIj57e3ZhbGlkYXRlKGNvbnRyb2wpfX08L21hdC1lcnJvcj5cclxuICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cInN1ZmZpeC1pY29uc1wiPlxyXG4gICAgPHNwYS1zdWZmaXggW2xhYmVsXT1cInN1ZmZpeFwiIFtpbmZvTWVzc2FnZV09XCJpbmZvTWVzc2FnZVwiIFtjb3B5Q29udGVudF09XCJjb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiY2xlYXJDb250ZW50XCIgKGNsZWFyQ2xpY2spPVwiY2xlYXIoKVwiIFtpc0hvdmVyZWRdPVwiaXNIb3ZlcmVkXCIgWyh2YWx1ZSldPVwidmFsdWVcIj48L3NwYS1zdWZmaXg+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG5cclxuXHJcbjwhLS0gQXV0byBDb21wbGV0ZS0tPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiKCFyb3dzIHx8IHJvd3MgPT0gMSkgJiYgZm9ybWF0PT0ndGV4dCcgJiYgb3B0aW9ucy5sZW5ndGggPiAwXCIgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCIhcmVxdWlyZWRcIiBbaGludExhYmVsXT1cImhpbnRcIiBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlID8/ICdsZWdhY3knXCIgW25nU3R5bGVdPVwieyd3aWR0aCc6d2lkdGggPz8gJzEwMCUnfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIiAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxyXG4gIDxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cclxuICA8aW5wdXQgW3R5cGVdPVwidHlwZVwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtmb3JtQ29udHJvbF09XCJteUNvbnRyb2xcIiBtYXRJbnB1dCBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIj5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkXCI+e3t2YWxpZGF0ZShteUNvbnRyb2wpfX08L21hdC1lcnJvcj5cclxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VkKClcIj5cclxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zIHwgYXN5bmNcIiBbdmFsdWVdPVwibXVsdGlEaW1lbnNpb24gPyBvcHRpb25bb3B0aW9uRGlzcGxheV0gOiBvcHRpb25cIj5cclxuICAgICAge3ttdWx0aURpbWVuc2lvbiA/IG9wdGlvbltvcHRpb25EaXNwbGF5XSA6IG9wdGlvbn19XHJcbiAgICA8L21hdC1vcHRpb24+XHJcbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gIDxkaXYgbWF0U3VmZml4IGNsYXNzPVwic3VmZml4LWljb25zXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImxvYWRBY3Rpb24gJiYgaXNIb3ZlcmVkXCIgKGNsaWNrKT1cInJlZnJlc2goJGV2ZW50KVwiIG1hdFRvb2x0aXA9XCJSZWZyZXNoXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmNhY2hlZDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzcGEtc3VmZml4IFtsYWJlbF09XCJzdWZmaXhcIiBbaW5mb01lc3NhZ2VdPVwiaW5mb01lc3NhZ2VcIiBbY29weUNvbnRlbnRdPVwiY29weUNvbnRlbnRcIiBbY2xlYXJDb250ZW50XT1cImNsZWFyQ29udGVudFwiIChjbGVhckNsaWNrKT1cImNsZWFyKClcIiBbaXNIb3ZlcmVkXT1cImlzSG92ZXJlZFwiIFsodmFsdWUpXT1cInZhbHVlXCI+PC9zcGEtc3VmZml4PlxyXG4gIDwvZGl2PlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuIl19
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGV4dC90ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVM3QyxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUFvQixXQUEyQjtRQUEzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFrQy9DLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLHNCQUFzQjtRQUN0Qix3QkFBbUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxTQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsbUJBQW1CO1FBRXZCLGVBQVUsR0FBK0MsVUFBVSxDQUFDO1FBQ3BFLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1YsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDaEIs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QVc7c0JBQXBCLE1BQU07Z0JBQ0UsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbiwgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS10ZXh0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYikgeyAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucyl7XHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZEFjdGlvbil7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YSh0aGlzLmxvYWRBY3Rpb24pO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBcIkVudGVyIFwiICsgdGhpcy5kaXNwbGF5O1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLmluaXRDb250cm9sKHRoaXMuY29udHJvbClcclxuXHJcbiAgICB0aGlzLmluaXRDb250cm9sKHRoaXMubXlDb250cm9sKVxyXG5cclxuICB9XHJcblxyXG5cclxuICBmaWx0ZXJlZE9wdGlvbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xyXG4gIG11bHRpRGltZW5zaW9uID0gZmFsc2U7XHJcblxyXG4gIC8vIG9wdGlvbnM6IEZvcm1Hcm91cDtcclxuICBoaWRlUmVxdWlyZWRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKHRydWUpO1xyXG4gIGhpZGUgPSB0cnVlOyAvL2ZvciBwYXNzd29yZCBvbmx5XHJcblxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6ICdsZWdhY3knIHwgJ3N0YW5kYXJkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyA9ICdzdGFuZGFyZCc7XHJcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaW50ID0gXCJcIjtcclxuICBASW5wdXQoKSBkaXNwbGF5ID0gXCJcIjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBmb3JtYXQgPSBcInRleHRcIjtcclxuICBASW5wdXQoKSB0eXBlID0gXCJcIjtcclxuXHJcbiAgQE91dHB1dCgpIGxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBlbnRlclByZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoKSByb3dzID0gMTtcclxuICBASW5wdXQoKSB3aWR0aCA9IFwiMTAwJVwiXHJcbiAgQElucHV0KCkgY29weUNvbnRlbnQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjbGVhckNvbnRlbnQgPSBmYWxzZTtcclxuXHJcblxyXG4gIC8vQXV0b2NvbXBsZXRlIGl0ZW1zXHJcbiAgQElucHV0KCkgb3B0aW9uczogYW55ID0gW107XHJcbiAgQElucHV0KCkgb3B0aW9uRGlzcGxheSA9IFwibmFtZVwiOyAvLyBEZWZhdWx0IHRvIG5hbWUgaWYgbm90IHByb3ZpZGVkXHJcbiAgQElucHV0KCkgb3B0aW9uVmFsdWUgPSBcInZhbHVlXCI7IC8vIERlZmF1bHQgdG8gdmFsdWUgaWYgbm90IHByb3ZpZGVkXHJcbiAgQElucHV0KCkgbG9hZEFjdGlvbjogQWN0aW9uO1xyXG5cclxuICAvL3ZhbGlkYXRpb24gaW5wdXRcclxuICBASW5wdXQoKSByZXF1aXJlZCA9IHRydWU7XHJcbiAgQElucHV0KCkgbWluID0gMDtcclxuICBASW5wdXQoKSBtYXggPSA5MDAwMDAwMDAwMDAwMDAwOyAvL01hdGgubWF4XHJcbiAgQElucHV0KCkgcmVnZXggPSBcIlwiIC8vXCJbYS16QS1aIF0qXCIgLy9cIi9cXFMrQFxcUytcXC5cXFMrL1wiO1xyXG5cclxuICBASW5wdXQoKSBzdWZmaXg6IHN0cmluZztcclxuICBASW5wdXQoKSBpbmZvTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICBpc0hvdmVyZWQgPSBmYWxzZTtcclxuICBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RmlsdGVyKCkge1xyXG5cclxuICAgIGNvbnN0IG9iaktleUxpc3QgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnNbMF0pO1xyXG4gICAgY29uc3QgZmlyc3RLZXkgPSBvYmpLZXlMaXN0WzBdO1xyXG4gICAgdGhpcy5tdWx0aURpbWVuc2lvbiA9ICFDb3JlLmlzTnVtYmVyKGZpcnN0S2V5KTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICBzdGFydFdpdGgoXCJcIiksXHJcbiAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuX2ZpbHRlcih2YWx1ZSkpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubXlDb250cm9sLnNldFZhbHVlKHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRoaXMudmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZSk6IHN0cmluZ1tdIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0aGlzLm9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKHRoaXMubXVsdGlEaW1lbnNpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+XHJcbiAgICAgICAgb3B0aW9uW3RoaXMub3B0aW9uRGlzcGxheV0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PlxyXG4gICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0Q29udHJvbChjb250cm9sOiBGb3JtQ29udHJvbCl7XHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMobnVsbCk7XHJcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkICYmICF0aGlzLnJlYWRvbmx5KSB7XHJcblxyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXgpLCBWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5yZWdleCldKTtcclxuICAgICAgdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERpc3BsYXlWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUgfHwgIXRoaXMub3B0aW9ucy5sZW5ndGgpIHJldHVybiAnJztcclxuXHJcbiAgICBpZiAodGhpcy5tdWx0aURpbWVuc2lvbikge1xyXG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0W3RoaXMub3B0aW9uVmFsdWVdID09PSB2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bdGhpcy5vcHRpb25EaXNwbGF5XSA6ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vRXZlbnRzXHJcbiAgY2hhbmdlZCgpIHtcclxuICAgIC8vIENoYW5nZWQgdG8gaGFuZGxlIGJvdGggYXV0b2NvbXBsZXRlIGFuZCByZWd1bGFyIG1vZGVzXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gRm9yIGF1dG9jb21wbGV0ZSwgZmluZCB0aGUgZnVsbCBvcHRpb24gb2JqZWN0IHRvIGdldCBwcm9wZXIgdmFsdWVcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLm11bHRpRGltZW5zaW9uID9cclxuICAgICAgICB0aGlzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0W3RoaXMub3B0aW9uRGlzcGxheV0gPT09IHRoaXMubXlDb250cm9sLnZhbHVlKSA6XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdCA9PT0gdGhpcy5teUNvbnRyb2wudmFsdWUpO1xyXG5cclxuICAgICAgLy8gRW1pdCB0aGUgb3B0aW9uVmFsdWUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZW1pdCB0aGUgZGlyZWN0IHZhbHVlXHJcbiAgICAgIGNvbnN0IHZhbHVlVG9FbWl0ID0gc2VsZWN0ZWRPcHRpb24gP1xyXG4gICAgICAgICh0aGlzLm11bHRpRGltZW5zaW9uID8gc2VsZWN0ZWRPcHRpb25bdGhpcy5vcHRpb25WYWx1ZV0gOiBzZWxlY3RlZE9wdGlvbikgOlxyXG4gICAgICAgIHRoaXMubXlDb250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlVG9FbWl0O1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVUb0VtaXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGVhdmVkKCl7XHJcbiAgICB0aGlzLmxlYXZlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCl7XHJcbiAgICB0aGlzLnZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGVudGVyUHJlc3NlZCgpIHtcclxuICAgIHRoaXMuZW50ZXJQcmVzcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICghdGhpcy5sb2FkQWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWZyZXNoQWN0aW9uID0ge1xyXG4gICAgICAuLi50aGlzLmxvYWRBY3Rpb24sXHJcbiAgICAgIGZvcmNlUmVmcmVzaDogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldERhdGEocmVmcmVzaEFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhKGFjdGlvbjogQWN0aW9uKSB7XHJcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuO1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGFjdGlvbikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvL3ZhbGlkYXRpb25cclxuICBteUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm1pbiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4KSwgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucmVnZXgpXSk7XHJcbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCggdGhpcy52YWx1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXgpLCBWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5yZWdleCkgIF0pO1xyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCkgOiBzdHJpbmd7XHJcblxyXG5cclxuICAgIGlmICgodGhpcy5yZXF1aXJlZCB8fCB0aGlzLm1pbiA+IDApICYmIGNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykgKXtcclxuICAgICAgcmV0dXJuIGBSZXF1aXJlZGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ21pbmxlbmd0aCcpICl7XHJcbiAgICAgIHJldHVybiBgTWluaW11biBsZW5ndGggaXMgJHt0aGlzLm1pbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250cm9sLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSkge1xyXG4gICAgICByZXR1cm4gYE1heGltdW0gbGVuZ3RoIGlzICR7dGhpcy5tYXh9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XHJcbiAgICAgIHJldHVybiBgSW52YWxpZCBJbnB1dGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJcclxuPCEtLSBHZW5lcmFsIFRleHQgLS0+XHJcbjxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIighcm93cyB8fCByb3dzID09IDEpICYmIChmb3JtYXQ9PSd0ZXh0JyB8fCBmb3JtYXQgPT0nZGF0ZScpICYmIG9wdGlvbnMubGVuZ3RoID09IDBcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cIiFyZXF1aXJlZFwiIFtoaW50TGFiZWxdPVwiaGludFwiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UgPz8gJ2xlZ2FjeSdcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzp3aWR0aCA/PyAnMTAwJSd9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIiAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCIgPlxyXG48bWF0LWxhYmVsICpuZ0lmPVwiZm9ybWF0PT0ndGV4dCdcIj57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxyXG48bWF0LWxhYmVsICpuZ0lmPVwiZm9ybWF0PT0nZGF0ZSdcIj57e2Rpc3BsYXkgfCBkYXRlOidkZC9NTS95eXl5J319PC9tYXQtbGFiZWw+XHJcbjxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgIChjaGFuZ2UpPVwiY2hhbmdlZCgpXCIgKGJsdXIpPVwibGVhdmVkKClcIiAoa2V5dXAuZW50ZXIpPVwiZW50ZXJQcmVzc2VkKClcIiAgW3R5cGVdPVwidHlwZVwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIvPlxyXG48bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkXCI+e3t2YWxpZGF0ZShjb250cm9sKX19PC9tYXQtZXJyb3I+XHJcbiAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJzdWZmaXgtaWNvbnNcIj5cclxuICAgIDxzcGEtc3VmZml4IFtsYWJlbF09XCJzdWZmaXhcIiBbaW5mb01lc3NhZ2VdPVwiaW5mb01lc3NhZ2VcIiBbY29weUNvbnRlbnRdPVwiY29weUNvbnRlbnRcIiBbY2xlYXJDb250ZW50XT1cImNsZWFyQ29udGVudFwiIChjbGVhckNsaWNrKT1cImNsZWFyKClcIiBbaXNIb3ZlcmVkXT1cImlzSG92ZXJlZFwiIFsodmFsdWUpXT1cInZhbHVlXCIgPjwvc3BhLXN1ZmZpeD5cclxuICA8L2Rpdj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblxyXG48IS0tIHBhc3N3b3JkIC0tPlxyXG48bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJzcGEtdGV4dFwiICpuZ0lmPVwiZm9ybWF0PT0ncGFzc3dvcmQnXCIgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCIhcmVxdWlyZWRcIiBbaGludExhYmVsXT1cImhpbnRcIiAgW25nU3R5bGVdPVwieyd3aWR0aCc6d2lkdGggPz8gJzEwMCUnfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHhcIiBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlID8/ICdsZWdhY3knXCI+XHJcbiAgPG1hdC1sYWJlbD57e2Rpc3BsYXl9fTwvbWF0LWxhYmVsPlxyXG4gIDxpbnB1dCBtYXRJbnB1dCBbdHlwZV09XCJoaWRlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiIChrZXl1cC5lbnRlcik9XCJlbnRlclByZXNzZWQoKVwiIChjaGFuZ2UpPVwiY2hhbmdlZCgpXCIgKGJsdXIpPVwibGVhdmVkKClcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIj5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkXCI+e3t2YWxpZGF0ZShjb250cm9sKX19PC9tYXQtZXJyb3I+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJoaWRlID0gIWhpZGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidIaWRlIHBhc3N3b3JkJ1wiIFthdHRyLmFyaWEtcHJlc3NlZF09XCJoaWRlXCI+XHJcbiAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XCI+e3toaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblxyXG48IS0tIFRleHRBcmVhIGNvcHkgLSBPbmx5IGNoYW5nZSBpbnB1dCB0byB0ZXh0YXJlYSBhbmQgY2hhbmdlIG5naWYgdG8gbm90IC0tPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicm93cyA+IDEgICYmIG9wdGlvbnMubGVuZ3RoID09IDBcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cIiFyZXF1aXJlZFwiIFtoaW50TGFiZWxdPVwiaGludFwiIFtuZ1N0eWxlXT1cInsnd2lkdGgnOndpZHRoID8/ICcxMDAlJ31cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UgPz8gJ2xlZ2FjeSdcIiAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCI+XHJcbjxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cclxuPHRleHRhcmVhIG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtyb3dzXT1cInJvd3NcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGNoYW5nZSk9XCJjaGFuZ2VkKClcIiAoa2V5dXAuZW50ZXIpPVwiZW50ZXJQcmVzc2VkKClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiPjwvdGV4dGFyZWE+XHJcbjxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmludmFsaWRcIj57e3ZhbGlkYXRlKGNvbnRyb2wpfX08L21hdC1lcnJvcj5cclxuICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cInN1ZmZpeC1pY29uc1wiPlxyXG4gICAgPHNwYS1zdWZmaXggW2xhYmVsXT1cInN1ZmZpeFwiIFtpbmZvTWVzc2FnZV09XCJpbmZvTWVzc2FnZVwiIFtjb3B5Q29udGVudF09XCJjb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiY2xlYXJDb250ZW50XCIgKGNsZWFyQ2xpY2spPVwiY2xlYXIoKVwiIFtpc0hvdmVyZWRdPVwiaXNIb3ZlcmVkXCIgWyh2YWx1ZSldPVwidmFsdWVcIj48L3NwYS1zdWZmaXg+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG5cclxuXHJcbjwhLS0gQXV0byBDb21wbGV0ZS0tPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiKCFyb3dzIHx8IHJvd3MgPT0gMSkgJiYgZm9ybWF0PT0ndGV4dCcgJiYgb3B0aW9ucy5sZW5ndGggPiAwXCIgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCIhcmVxdWlyZWRcIiBbaGludExhYmVsXT1cImhpbnRcIiBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlID8/ICdsZWdhY3knXCIgW25nU3R5bGVdPVwieyd3aWR0aCc6d2lkdGggPz8gJzEwMCUnfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIiAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiPlxyXG4gIDxtYXQtbGFiZWw+e3tkaXNwbGF5fX08L21hdC1sYWJlbD5cclxuICA8aW5wdXQgW3R5cGVdPVwidHlwZVwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtmb3JtQ29udHJvbF09XCJteUNvbnRyb2xcIiBtYXRJbnB1dCBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIj5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiY29udHJvbC5pbnZhbGlkXCI+e3t2YWxpZGF0ZShteUNvbnRyb2wpfX08L21hdC1lcnJvcj5cclxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VkKClcIj5cclxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zIHwgYXN5bmNcIiBbdmFsdWVdPVwibXVsdGlEaW1lbnNpb24gPyBvcHRpb25bb3B0aW9uRGlzcGxheV0gOiBvcHRpb25cIj5cclxuICAgICAge3ttdWx0aURpbWVuc2lvbiA/IG9wdGlvbltvcHRpb25EaXNwbGF5XSA6IG9wdGlvbn19XHJcbiAgICA8L21hdC1vcHRpb24+XHJcbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gIDxkaXYgbWF0U3VmZml4IGNsYXNzPVwic3VmZml4LWljb25zXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImxvYWRBY3Rpb24gJiYgaXNIb3ZlcmVkXCIgKGNsaWNrKT1cInJlZnJlc2goJGV2ZW50KVwiIG1hdFRvb2x0aXA9XCJSZWZyZXNoXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cclxuICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIGNvbG9yPVwicHJpbWFyeVwiPmNhY2hlZDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzcGEtc3VmZml4IFtsYWJlbF09XCJzdWZmaXhcIiBbaW5mb01lc3NhZ2VdPVwiaW5mb01lc3NhZ2VcIiBbY29weUNvbnRlbnRdPVwiY29weUNvbnRlbnRcIiBbY2xlYXJDb250ZW50XT1cImNsZWFyQ29udGVudFwiIChjbGVhckNsaWNrKT1cImNsZWFyKClcIiBbaXNIb3ZlcmVkXT1cImlzSG92ZXJlZFwiIFsodmFsdWUpXT1cInZhbHVlXCI+PC9zcGEtc3VmZml4PlxyXG4gIDwvZGl2PlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuIl19