ngx-st-sap-installed-instruments 17.0.6 → 17.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/sap-installed-instrument-list/sap-installed-instrument-list-search/sap-installed-instrument-list-search.component.mjs +3 -3
- package/esm2022/lib/components/sap-installed-instrument-list/sap-installed-instrument-list-table/sap-installed-instrument-list-table.component.mjs +11 -10
- package/fesm2022/ngx-st-sap-installed-instruments.mjs +20 -20
- package/fesm2022/ngx-st-sap-installed-instruments.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -129,15 +129,15 @@ export class SapInstalledInstrumentListSearchComponent {
|
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapInstalledInstrumentListSearchComponent, deps: [{ token: i1.SapInstalledInstrumentsService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.NonNullableFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SapInstalledInstrumentListSearchComponent, selector: "app-sap-installed-instrument-list-search", outputs: { filtersChanged: "filtersChanged" }, viewQueries: [{ propertyName: "multiselectAutocomplete", first: true, predicate: ["multiselectAutocomplete"], descendants: true }], ngImport: i0, template: "<form\r\n class=\"search-filters\"\r\n [formGroup]=\"searchForm\"\r\n (keyup.enter)=\"searchSubmitted()\"\r\n (ngSubmit)=\"searchSubmitted()\"\r\n>\r\n <div class=\"row align-items-center\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <ngx-st-multiselect-autocomplete\r\n #multiselectAutocomplete\r\n [label]=\"\r\n ('sapAdminInstalledInstrument.application' | translate) +\r\n ' (' +\r\n ('sapAdminInstalledInstrument.max' | translate) +\r\n ': 10)'\r\n \"\r\n [searchLabel]=\"\r\n 'sapAdminInstalledInstrument.applicationPlaceholder' | translate\r\n \"\r\n [settings]=\"{\r\n getFilteredOptions: this.getFilteredOptions\r\n }\"\r\n [initSelectedData]=\"searchForm.controls.application.value\"\r\n [maxLengthSelectedData]=\"10\"\r\n (selectedDataChanged)=\"applicationSelected($event)\"\r\n ></ngx-st-multiselect-autocomplete>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"bpName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.bpName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('bpName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"technicianLastName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.technicianLastName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.technicianLastName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('technicianLastName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"serialNumber\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.serialNumber' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.serialNumber.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('serialNumber')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentDesc\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentDescription' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentDesc.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentDesc')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.instrumentStatus' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"status\">\r\n <mat-option [value]=\"''\">{{\r\n 'sapAdminInstalledInstrument.empty' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'A'\">{{\r\n 'sapAdminInstalledInstrument.statusA' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'R'\">{{\r\n 'sapAdminInstalledInstrument.statusR' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'T'\">{{\r\n 'sapAdminInstalledInstrument.statusT' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'L'\">{{\r\n 'sapAdminInstalledInstrument.statusL' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'I'\">{{\r\n 'sapAdminInstalledInstrument.statusI' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"customerNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.customerNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('customerNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('territory') &&\r\n ((territories$ | async) || []) as territories\r\n \"\r\n [options]=\"territories || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.territory' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.territory\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshTerritories()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"city\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.city' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.city.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('city')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"searchForm?.get('state') && ((states$ | async) || []) as states\"\r\n [options]=\"states || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.state' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.state\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n [disabled]=\"!searchForm.controls.country.value\"\r\n (click)=\"refreshStates()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"county\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.county' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.county.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('county')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('country') &&\r\n ((countries$ | async) || []) as countries\r\n \"\r\n [options]=\"countries || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.country' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.country\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshCountries()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateFrom' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n formControlName=\"installationDateFrom\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateTo' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker2\"\r\n formControlName=\"installationDateTo\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker2\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker2></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserCode\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserCode.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserCode')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row justify-content-center\" style=\"margin-bottom: 10px\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"clearAllFilters()\"\r\n *ngIf=\"showFilters\"\r\n style=\"margin-right: 10px\"\r\n >\r\n Clear All\r\n </button>\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n color=\"accent\"\r\n (click)=\"showFilters = !showFilters\"\r\n >\r\n <ng-container *ngIf=\"showFilters\">\r\n {{ 'sapAdminInstalledInstrument.hideFilters' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"!showFilters\">\r\n {{ 'sapAdminInstalledInstrument.showFilters' | translate }}\r\n </ng-container>\r\n </button>\r\n <button\r\n *ngIf=\"showFilters\"\r\n mat-raised-button\r\n type=\"submit\"\r\n color=\"primary\"\r\n style=\"margin-left: 10px\"\r\n >\r\n Search\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".hide{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { 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.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i12.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i12.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i13.NgxStMultiselectAutocompleteComponent, selector: "ngx-st-multiselect-autocomplete[settings]", inputs: ["label", "searchLabel", "settings", "initSelectedData", "maxLengthSelectedData", "clearAfterSelect"], outputs: ["selectedDataChanged"] }, { kind: "component", type: i14.SearchSelectComponent, selector: "ngx-st-search-select", inputs: ["selectLabel", "optionValueField", "optionLabelFields", "filteredByFields", "model", "modelChange", "selectFormControl", "required", "selectBindType", "searchLabel", "showEmptyOption", "useVirtualScrollOptions", "options", "disabled"], outputs: ["selectDataChanged"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SapInstalledInstrumentListSearchComponent, selector: "app-sap-installed-instrument-list-search", outputs: { filtersChanged: "filtersChanged" }, viewQueries: [{ propertyName: "multiselectAutocomplete", first: true, predicate: ["multiselectAutocomplete"], descendants: true }], ngImport: i0, template: "<form\r\n class=\"search-filters\"\r\n [formGroup]=\"searchForm\"\r\n (keyup.enter)=\"searchSubmitted()\"\r\n (ngSubmit)=\"searchSubmitted()\"\r\n>\r\n <div class=\"row align-items-center\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <ngx-st-multiselect-autocomplete\r\n #multiselectAutocomplete\r\n [label]=\"\r\n ('sapAdminInstalledInstrument.application' | translate) +\r\n ' (' +\r\n ('sapAdminInstalledInstrument.max' | translate) +\r\n ': 10)'\r\n \"\r\n [searchLabel]=\"\r\n 'sapAdminInstalledInstrument.applicationPlaceholder' | translate\r\n \"\r\n [settings]=\"{\r\n getFilteredOptions: this.getFilteredOptions\r\n }\"\r\n [initSelectedData]=\"searchForm.controls.application.value\"\r\n [maxLengthSelectedData]=\"10\"\r\n (selectedDataChanged)=\"applicationSelected($event)\"\r\n ></ngx-st-multiselect-autocomplete>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"bpName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.bpName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('bpName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"technicianLastName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.technicianLastName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.technicianLastName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('technicianLastName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"serialNumber\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.serialNumber' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.serialNumber.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('serialNumber')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentDesc\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentDescription' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentDesc.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentDesc')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.instrumentStatus' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"status\">\r\n <mat-option [value]=\"''\">{{\r\n 'sapAdminInstalledInstrument.empty' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'A'\">{{\r\n 'sapAdminInstalledInstrument.statusA' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'R'\">{{\r\n 'sapAdminInstalledInstrument.statusR' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'T'\">{{\r\n 'sapAdminInstalledInstrument.statusT' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'L'\">{{\r\n 'sapAdminInstalledInstrument.statusL' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'I'\">{{\r\n 'sapAdminInstalledInstrument.statusI' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"customerNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.customerNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('customerNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('territory') &&\r\n ((territories$ | async) || []) as territories\r\n \"\r\n [options]=\"territories || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.territory' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.territory\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshTerritories()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"city\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.city' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.city.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('city')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"searchForm?.get('state') && ((states$ | async) || []) as states\"\r\n [options]=\"states || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.state' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.state\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n [disabled]=\"!searchForm.controls.country.value\"\r\n (click)=\"refreshStates()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"county\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.county' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.county.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('county')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('country') &&\r\n ((countries$ | async) || []) as countries\r\n \"\r\n [options]=\"countries || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.country' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.country\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshCountries()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateFrom' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n formControlName=\"installationDateFrom\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateTo' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker2\"\r\n formControlName=\"installationDateTo\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker2\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker2></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserCode\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserCode.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserCode')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"row justify-content-sm-start justify-content-lg-center\"\r\n style=\"margin-bottom: 10px\"\r\n >\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"clearAllFilters()\"\r\n *ngIf=\"showFilters\"\r\n style=\"margin-right: 10px\"\r\n >\r\n Clear All\r\n </button>\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n color=\"accent\"\r\n (click)=\"showFilters = !showFilters\"\r\n >\r\n <ng-container *ngIf=\"showFilters\">\r\n {{ 'sapAdminInstalledInstrument.hideFilters' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"!showFilters\">\r\n {{ 'sapAdminInstalledInstrument.showFilters' | translate }}\r\n </ng-container>\r\n </button>\r\n <button\r\n *ngIf=\"showFilters\"\r\n mat-raised-button\r\n type=\"submit\"\r\n color=\"primary\"\r\n style=\"margin-left: 10px\"\r\n >\r\n Search\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".hide{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { 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.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i12.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i12.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i13.NgxStMultiselectAutocompleteComponent, selector: "ngx-st-multiselect-autocomplete[settings]", inputs: ["label", "searchLabel", "settings", "initSelectedData", "maxLengthSelectedData", "clearAfterSelect"], outputs: ["selectedDataChanged"] }, { kind: "component", type: i14.SearchSelectComponent, selector: "ngx-st-search-select", inputs: ["selectLabel", "optionValueField", "optionLabelFields", "filteredByFields", "model", "modelChange", "selectFormControl", "required", "selectBindType", "searchLabel", "showEmptyOption", "useVirtualScrollOptions", "options", "disabled"], outputs: ["selectDataChanged"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
133
133
|
}
|
|
134
134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapInstalledInstrumentListSearchComponent, decorators: [{
|
|
135
135
|
type: Component,
|
|
136
|
-
args: [{ selector: 'app-sap-installed-instrument-list-search', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\r\n class=\"search-filters\"\r\n [formGroup]=\"searchForm\"\r\n (keyup.enter)=\"searchSubmitted()\"\r\n (ngSubmit)=\"searchSubmitted()\"\r\n>\r\n <div class=\"row align-items-center\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <ngx-st-multiselect-autocomplete\r\n #multiselectAutocomplete\r\n [label]=\"\r\n ('sapAdminInstalledInstrument.application' | translate) +\r\n ' (' +\r\n ('sapAdminInstalledInstrument.max' | translate) +\r\n ': 10)'\r\n \"\r\n [searchLabel]=\"\r\n 'sapAdminInstalledInstrument.applicationPlaceholder' | translate\r\n \"\r\n [settings]=\"{\r\n getFilteredOptions: this.getFilteredOptions\r\n }\"\r\n [initSelectedData]=\"searchForm.controls.application.value\"\r\n [maxLengthSelectedData]=\"10\"\r\n (selectedDataChanged)=\"applicationSelected($event)\"\r\n ></ngx-st-multiselect-autocomplete>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"bpName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.bpName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('bpName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"technicianLastName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.technicianLastName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.technicianLastName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('technicianLastName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"serialNumber\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.serialNumber' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.serialNumber.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('serialNumber')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentDesc\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentDescription' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentDesc.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentDesc')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.instrumentStatus' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"status\">\r\n <mat-option [value]=\"''\">{{\r\n 'sapAdminInstalledInstrument.empty' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'A'\">{{\r\n 'sapAdminInstalledInstrument.statusA' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'R'\">{{\r\n 'sapAdminInstalledInstrument.statusR' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'T'\">{{\r\n 'sapAdminInstalledInstrument.statusT' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'L'\">{{\r\n 'sapAdminInstalledInstrument.statusL' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'I'\">{{\r\n 'sapAdminInstalledInstrument.statusI' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"customerNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.customerNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('customerNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('territory') &&\r\n ((territories$ | async) || []) as territories\r\n \"\r\n [options]=\"territories || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.territory' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.territory\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshTerritories()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"city\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.city' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.city.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('city')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"searchForm?.get('state') && ((states$ | async) || []) as states\"\r\n [options]=\"states || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.state' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.state\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n [disabled]=\"!searchForm.controls.country.value\"\r\n (click)=\"refreshStates()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"county\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.county' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.county.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('county')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('country') &&\r\n ((countries$ | async) || []) as countries\r\n \"\r\n [options]=\"countries || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.country' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.country\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshCountries()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateFrom' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n formControlName=\"installationDateFrom\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateTo' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker2\"\r\n formControlName=\"installationDateTo\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker2\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker2></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserCode\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserCode.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserCode')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row justify-content-center\" style=\"margin-bottom: 10px\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"clearAllFilters()\"\r\n *ngIf=\"showFilters\"\r\n style=\"margin-right: 10px\"\r\n >\r\n Clear All\r\n </button>\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n color=\"accent\"\r\n (click)=\"showFilters = !showFilters\"\r\n >\r\n <ng-container *ngIf=\"showFilters\">\r\n {{ 'sapAdminInstalledInstrument.hideFilters' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"!showFilters\">\r\n {{ 'sapAdminInstalledInstrument.showFilters' | translate }}\r\n </ng-container>\r\n </button>\r\n <button\r\n *ngIf=\"showFilters\"\r\n mat-raised-button\r\n type=\"submit\"\r\n color=\"primary\"\r\n style=\"margin-left: 10px\"\r\n >\r\n Search\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".hide{display:none}\n"] }]
|
|
136
|
+
args: [{ selector: 'app-sap-installed-instrument-list-search', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\r\n class=\"search-filters\"\r\n [formGroup]=\"searchForm\"\r\n (keyup.enter)=\"searchSubmitted()\"\r\n (ngSubmit)=\"searchSubmitted()\"\r\n>\r\n <div class=\"row align-items-center\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <ngx-st-multiselect-autocomplete\r\n #multiselectAutocomplete\r\n [label]=\"\r\n ('sapAdminInstalledInstrument.application' | translate) +\r\n ' (' +\r\n ('sapAdminInstalledInstrument.max' | translate) +\r\n ': 10)'\r\n \"\r\n [searchLabel]=\"\r\n 'sapAdminInstalledInstrument.applicationPlaceholder' | translate\r\n \"\r\n [settings]=\"{\r\n getFilteredOptions: this.getFilteredOptions\r\n }\"\r\n [initSelectedData]=\"searchForm.controls.application.value\"\r\n [maxLengthSelectedData]=\"10\"\r\n (selectedDataChanged)=\"applicationSelected($event)\"\r\n ></ngx-st-multiselect-autocomplete>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"bpName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.bpName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('bpName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"technicianLastName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.technicianLastName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.technicianLastName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('technicianLastName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"serialNumber\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.serialNumber' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.serialNumber.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('serialNumber')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"instrumentDesc\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.instrumentDescription' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.instrumentDesc.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('instrumentDesc')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.instrumentStatus' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"status\">\r\n <mat-option [value]=\"''\">{{\r\n 'sapAdminInstalledInstrument.empty' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'A'\">{{\r\n 'sapAdminInstalledInstrument.statusA' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'R'\">{{\r\n 'sapAdminInstalledInstrument.statusR' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'T'\">{{\r\n 'sapAdminInstalledInstrument.statusT' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'L'\">{{\r\n 'sapAdminInstalledInstrument.statusL' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'I'\">{{\r\n 'sapAdminInstalledInstrument.statusI' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"customerNo\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.accountNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.customerNo.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('customerNo')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-4 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('territory') &&\r\n ((territories$ | async) || []) as territories\r\n \"\r\n [options]=\"territories || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.territory' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.territory\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshTerritories()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"city\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.city' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.city.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('city')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"searchForm?.get('state') && ((states$ | async) || []) as states\"\r\n [options]=\"states || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.state' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.state\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n [disabled]=\"!searchForm.controls.country.value\"\r\n (click)=\"refreshStates()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"county\"\r\n placeholder=\"{{ 'sapAdminInstalledInstrument.county' | translate }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.county.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('county')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center row\">\r\n <ngx-st-search-select\r\n *ngIf=\"\r\n searchForm?.get('country') &&\r\n ((countries$ | async) || []) as countries\r\n \"\r\n [options]=\"countries || []\"\r\n [selectLabel]=\"'sapAdminInstalledInstrument.country' | translate\"\r\n [optionLabelFields]=\"'name'\"\r\n [optionValueField]=\"'id'\"\r\n [selectFormControl]=\"searchForm.controls.country\"\r\n [selectBindType]=\"'control'\"\r\n [searchLabel]=\"'sapAdminInstalledInstrument.search' | translate\"\r\n ></ngx-st-search-select>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'sapAdminInstalledInstrument.refresh' | translate\"\r\n (click)=\"refreshCountries()\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{ hide: !showFilters }\">\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateFrom' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n formControlName=\"installationDateFrom\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'sapAdminInstalledInstrument.installationDateTo' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker2\"\r\n formControlName=\"installationDateTo\"\r\n />\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker2\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker2></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserName\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerName' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserName.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserName')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-xs-12 col-sm-3 align-items-center\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n formControlName=\"endUserCode\"\r\n placeholder=\"{{\r\n 'sapAdminInstalledInstrument.endCustomerNo' | translate\r\n }}\"\r\n />\r\n <button\r\n *ngIf=\"searchForm.controls.endUserCode.value\"\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"clearInputValue('endUserCode')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"row justify-content-sm-start justify-content-lg-center\"\r\n style=\"margin-bottom: 10px\"\r\n >\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"clearAllFilters()\"\r\n *ngIf=\"showFilters\"\r\n style=\"margin-right: 10px\"\r\n >\r\n Clear All\r\n </button>\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n color=\"accent\"\r\n (click)=\"showFilters = !showFilters\"\r\n >\r\n <ng-container *ngIf=\"showFilters\">\r\n {{ 'sapAdminInstalledInstrument.hideFilters' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"!showFilters\">\r\n {{ 'sapAdminInstalledInstrument.showFilters' | translate }}\r\n </ng-container>\r\n </button>\r\n <button\r\n *ngIf=\"showFilters\"\r\n mat-raised-button\r\n type=\"submit\"\r\n color=\"primary\"\r\n style=\"margin-left: 10px\"\r\n >\r\n Search\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".hide{display:none}\n"] }]
|
|
137
137
|
}], ctorParameters: () => [{ type: i1.SapInstalledInstrumentsService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.NonNullableFormBuilder }], propDecorators: { multiselectAutocomplete: [{
|
|
138
138
|
type: ViewChild,
|
|
139
139
|
args: ['multiselectAutocomplete']
|
|
140
140
|
}], filtersChanged: [{
|
|
141
141
|
type: Output
|
|
142
142
|
}] } });
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3Qtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2gvc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3Qtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2gvc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3Qtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFJWixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QjNDLE1BQU0sT0FBTyx5Q0FBeUM7SUFrQ3BELFlBQ1UsNkJBQTZELEVBQzdELE1BQWMsRUFDZCxjQUE4QixFQUM5QixFQUEwQjtRQUgxQixrQ0FBNkIsR0FBN0IsNkJBQTZCLENBQWdDO1FBQzdELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsT0FBRSxHQUFGLEVBQUUsQ0FBd0I7UUFqQ3BDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWdDLENBQUM7UUFFbEUsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsZUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFpQjtZQUN6QyxXQUFXLEVBQUUsQ0FBVyxFQUFFLENBQUM7WUFDM0IsWUFBWSxFQUFFLEVBQUU7WUFDaEIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsY0FBYyxFQUFFLEVBQUU7WUFDbEIsVUFBVSxFQUFFLEVBQUU7WUFDZCxNQUFNLEVBQUUsRUFBRTtZQUNWLElBQUksRUFBRSxFQUFFO1lBQ1IsTUFBTSxFQUFFLEVBQUU7WUFDVixXQUFXLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxFQUFFO1lBQ2YsU0FBUyxFQUFpQixJQUFJO1lBQzlCLGtCQUFrQixFQUFFLEVBQUU7WUFDdEIsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1lBQ1Ysb0JBQW9CLEVBQWUsSUFBSTtZQUN2QyxrQkFBa0IsRUFBZSxJQUFJO1NBQ3RDLENBQUMsQ0FBQztRQU1LLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBOEZ2Qyx1QkFBa0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQztJQXpGQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FDL0MsQ0FBQztRQUVGLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUV4QixlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsSUFDRSxVQUFVLEtBQUssc0JBQXNCO3dCQUNyQyxVQUFVLEtBQUssb0JBQW9CLEVBQ25DLENBQUM7d0JBQ0QsV0FBVyxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQzs0QkFDbEQsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDaEUsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFDO29CQUNKLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixXQUFXLENBQUMsUUFBUSxDQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQ3JELENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUN0QyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBd0I7UUFDdEMsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUE0QjtRQUM1QyxPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGVBQWUsQ0FBQyxlQUF1QjtRQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFNRCxtQkFBbUIsQ0FBQyxJQUFjO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDaEQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekIsQ0FBQyxTQUFTLENBQ1QsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTVDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDOytHQTFKVSx5Q0FBeUM7bUdBQXpDLHlDQUF5QyxtUUNoRHRELHd3YkFxWkE7OzRGRHJXYSx5Q0FBeUM7a0JBTnJELFNBQVM7K0JBQ0UsMENBQTBDLG1CQUduQyx1QkFBdUIsQ0FBQyxNQUFNOzBMQUkvQyx1QkFBdUI7c0JBRHRCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUlwQyxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb25OdWxsYWJsZUZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTYXBUZXJyaXRvcnlNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zYXAtdGVycml0b3J5Lm1vZGVsJztcclxuaW1wb3J0IHsgU2FwU3RhdGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zYXAtc3RhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBDb3VudHJ5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2FwLWNvdW50cnkubW9kZWwnO1xyXG5pbXBvcnQgeyBOZ3hTdE11bHRpc2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnbmd4LXN0LW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTYXBJbnN0YWxsZWRJbnN0cnVtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnN0YWxsZWRJbnN0cnVtZW50Rm9ybU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luc3RhbGxlZC1pbnN0cnVtZW50LWZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdE11bHRpc2VsZWN0QXV0b2NvbXBsZXRlU2V0dGluZ3NNb2RlbCB9IGZyb20gJ25neC1zdC1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUvbGliL21vZGVscy9zdC1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbnRlcmZhY2UgU2VhcmNoRm9ybVR5cGUge1xyXG4gIGFwcGxpY2F0aW9uOiBzdHJpbmdbXVtdO1xyXG4gIHNlcmlhbE51bWJlcjogc3RyaW5nO1xyXG4gIGluc3RydW1lbnRObzogc3RyaW5nO1xyXG4gIGluc3RydW1lbnREZXNjOiBzdHJpbmc7XHJcbiAgY3VzdG9tZXJObzogc3RyaW5nO1xyXG4gIGJwTmFtZTogc3RyaW5nO1xyXG4gIGNpdHk6IHN0cmluZztcclxuICBjb3VudHk6IHN0cmluZztcclxuICBlbmRVc2VyTmFtZTogc3RyaW5nO1xyXG4gIGVuZFVzZXJDb2RlOiBzdHJpbmc7XHJcbiAgdGVycml0b3J5OiBudW1iZXIgfCBudWxsO1xyXG4gIHRlY2huaWNpYW5MYXN0TmFtZTogc3RyaW5nO1xyXG4gIGNvdW50cnk6IHN0cmluZztcclxuICBzdGF0ZTogc3RyaW5nO1xyXG4gIHN0YXR1czogc3RyaW5nO1xyXG4gIGluc3RhbGxhdGlvbkRhdGVGcm9tOiBEYXRlIHwgbnVsbDtcclxuICBpbnN0YWxsYXRpb25EYXRlVG86IERhdGUgfCBudWxsO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnbXVsdGlzZWxlY3RBdXRvY29tcGxldGUnKVxyXG4gIG11bHRpc2VsZWN0QXV0b2NvbXBsZXRlOiBOZ3hTdE11bHRpc2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBmaWx0ZXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SW5zdGFsbGVkSW5zdHJ1bWVudEZvcm1Nb2RlbD4oKTtcclxuXHJcbiAgc2hvd0ZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cDxTZWFyY2hGb3JtVHlwZT4oe1xyXG4gICAgYXBwbGljYXRpb246IFs8c3RyaW5nW10+W11dLFxyXG4gICAgc2VyaWFsTnVtYmVyOiAnJyxcclxuICAgIGluc3RydW1lbnRObzogJycsXHJcbiAgICBpbnN0cnVtZW50RGVzYzogJycsXHJcbiAgICBjdXN0b21lck5vOiAnJyxcclxuICAgIGJwTmFtZTogJycsXHJcbiAgICBjaXR5OiAnJyxcclxuICAgIGNvdW50eTogJycsXHJcbiAgICBlbmRVc2VyTmFtZTogJycsXHJcbiAgICBlbmRVc2VyQ29kZTogJycsXHJcbiAgICB0ZXJyaXRvcnk6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICB0ZWNobmljaWFuTGFzdE5hbWU6ICcnLFxyXG4gICAgY291bnRyeTogJycsXHJcbiAgICBzdGF0ZTogJycsXHJcbiAgICBzdGF0dXM6ICcnLFxyXG4gICAgaW5zdGFsbGF0aW9uRGF0ZUZyb206IDxEYXRlIHwgbnVsbD5udWxsLFxyXG4gICAgaW5zdGFsbGF0aW9uRGF0ZVRvOiA8RGF0ZSB8IG51bGw+bnVsbCxcclxuICB9KTtcclxuXHJcbiAgdGVycml0b3JpZXMkOiBPYnNlcnZhYmxlPFNhcFRlcnJpdG9yeU1vZGVsW10+O1xyXG4gIHN0YXRlcyQ6IE9ic2VydmFibGU8U2FwU3RhdGVNb2RlbFtdPjtcclxuICBjb3VudHJpZXMkOiBPYnNlcnZhYmxlPFNhcENvdW50cnlNb2RlbFtdPjtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzYXBJbnN0YWxsZWRJbnN0cnVtZW50U2VydmljZTogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBmYjogTm9uTnVsbGFibGVGb3JtQnVpbGRlclxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFNlYXJjaEZvcm0oKTtcclxuICAgIHRoaXMuc2V0QXN5bmNGaWx0ZXJzKCk7XHJcblxyXG4gICAgY29uc3QgcXVlcnlQYXJhbXNLZXlzID0gT2JqZWN0LmtleXMoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge31cclxuICAgICk7XHJcblxyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zS2V5cy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSB0cnVlO1xyXG5cclxuICAgICAgcXVlcnlQYXJhbXNLZXlzLmZvckVhY2gocXVlcnlQYXJhbSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KHF1ZXJ5UGFyYW0pO1xyXG4gICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtID09PSAnaW5zdGFsbGF0aW9uRGF0ZUZyb20nIHx8XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW0gPT09ICdpbnN0YWxsYXRpb25EYXRlVG8nXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1txdWVyeVBhcmFtXVxyXG4gICAgICAgICAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1dKVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1dXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMubXVsdGlzZWxlY3RBdXRvY29tcGxldGUuY2xlYXJTZWxlY3RlZERhdGEoKTtcclxuICAgIHRoaXMuc2VhcmNoU3VibWl0dGVkKCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoVGVycml0b3JpZXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMudGVycml0b3J5LnNldFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy50ZXJyaXRvcmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldFRlcnJpdG9yeSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDb3VudHJpZXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMuY291bnRyeS5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLmNvdW50cmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldENvdW50cnkodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoU3RhdGVzKCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLnN0YXRlLnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMuc3RhdGVzJCA9IHRoaXMuc2FwSW5zdGFsbGVkSW5zdHJ1bWVudFNlcnZpY2UuZ2V0U3RhdGUoXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy5jb3VudHJ5LnZhbHVlLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q291bnRyeVZhbHVlKGNvdW50cnk6IFNhcENvdW50cnlNb2RlbCkge1xyXG4gICAgcmV0dXJuIGNvdW50cnkuaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZVZhbHVlKHN0YXRlOiBTYXBTdGF0ZU1vZGVsKSB7XHJcbiAgICByZXR1cm4gc3RhdGUuaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJyaXRvcnlWYWx1ZSh0ZXJyaXRvcnk6IFNhcFRlcnJpdG9yeU1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGVycml0b3J5LmlkO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoU3VibWl0dGVkKCkge1xyXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuc2VhcmNoRm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdCh7IHNmSWQ6IHVuZGVmaW5lZCwgLi4uZm9ybVZhbHVlcyB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFySW5wdXRWYWx1ZShmb3JtQ29udHJvbE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmdldChmb3JtQ29udHJvbE5hbWUpIS5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLnNlYXJjaFN1Ym1pdHRlZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyZWRPcHRpb25zID0gKHNlYXJjaDogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBJbnN0YWxsZWRJbnN0cnVtZW50U2VydmljZS5nZXRBcHBsaWNhdGlvblNlYXJjaChzZWFyY2gpO1xyXG4gIH07XHJcblxyXG4gIGFwcGxpY2F0aW9uU2VsZWN0ZWQoZGF0YTogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy5hcHBsaWNhdGlvbi5zZXRWYWx1ZShkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXN5bmNGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy50ZXJyaXRvcmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldFRlcnJpdG9yeShmYWxzZSk7XHJcbiAgICB0aGlzLmNvdW50cmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldENvdW50cnkoZmFsc2UpO1xyXG4gICAgdGhpcy5zdGF0ZXMkID0gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWFyY2hGb3JtKCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLmNvdW50cnkudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgKS5zdWJzY3JpYmUoXHJcbiAgICAgIChjb3VudHJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMuc3RhdGUuc2V0VmFsdWUoJycpO1xyXG5cclxuICAgICAgICBpZiAoY291bnRyeSkge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZXMkID0gdGhpcy5zYXBJbnN0YWxsZWRJbnN0cnVtZW50U2VydmljZS5nZXRTdGF0ZShjb3VudHJ5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZXMkID0gb2YoW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm1cclxuICBjbGFzcz1cInNlYXJjaC1maWx0ZXJzXCJcclxuICBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIlxyXG4gIChrZXl1cC5lbnRlcik9XCJzZWFyY2hTdWJtaXR0ZWQoKVwiXHJcbiAgKG5nU3VibWl0KT1cInNlYXJjaFN1Ym1pdHRlZCgpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCIgW25nQ2xhc3NdPVwieyBoaWRlOiAhc2hvd0ZpbHRlcnMgfVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG5neC1zdC1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGVcclxuICAgICAgICAjbXVsdGlzZWxlY3RBdXRvY29tcGxldGVcclxuICAgICAgICBbbGFiZWxdPVwiXHJcbiAgICAgICAgICAoJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hcHBsaWNhdGlvbicgfCB0cmFuc2xhdGUpICtcclxuICAgICAgICAgICcgKCcgK1xyXG4gICAgICAgICAgKCdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQubWF4JyB8IHRyYW5zbGF0ZSkgK1xyXG4gICAgICAgICAgJzogMTApJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3NlYXJjaExhYmVsXT1cIlxyXG4gICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hcHBsaWNhdGlvblBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3NldHRpbmdzXT1cIntcclxuICAgICAgICAgIGdldEZpbHRlcmVkT3B0aW9uczogdGhpcy5nZXRGaWx0ZXJlZE9wdGlvbnNcclxuICAgICAgICB9XCJcclxuICAgICAgICBbaW5pdFNlbGVjdGVkRGF0YV09XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmFwcGxpY2F0aW9uLnZhbHVlXCJcclxuICAgICAgICBbbWF4TGVuZ3RoU2VsZWN0ZWREYXRhXT1cIjEwXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlZCk9XCJhcHBsaWNhdGlvblNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICA+PC9uZ3gtc3QtbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnBOYW1lXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50TmFtZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2VhcmNoRm9ybS5jb250cm9scy5icE5hbWUudmFsdWVcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0VmFsdWUoJ2JwTmFtZScpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGVjaG5pY2lhbkxhc3ROYW1lXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC50ZWNobmljaWFuTGFzdE5hbWUnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMudGVjaG5pY2lhbkxhc3ROYW1lLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCd0ZWNobmljaWFuTGFzdE5hbWUnKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiBbbmdDbGFzc109XCJ7IGhpZGU6ICFzaG93RmlsdGVycyB9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VyaWFsTnVtYmVyXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5zZXJpYWxOdW1iZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMuc2VyaWFsTnVtYmVyLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdzZXJpYWxOdW1iZXInKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluc3RydW1lbnROb1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuaW5zdHJ1bWVudE5vJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmluc3RydW1lbnROby52YWx1ZVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRWYWx1ZSgnaW5zdHJ1bWVudE5vJylcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbnN0cnVtZW50RGVzY1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuaW5zdHJ1bWVudERlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmluc3RydW1lbnREZXNjLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdpbnN0cnVtZW50RGVzYycpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiIFtuZ0NsYXNzXT1cInsgaGlkZTogIXNob3dGaWx0ZXJzIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50Lmluc3RydW1lbnRTdGF0dXMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7XHJcbiAgICAgICAgICAgICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuZW1wdHknIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInQSdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c0EnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInUidcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c1InIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInVCdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c1QnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInTCdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c0wnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInSSdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c0knIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21lck5vXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50Tm8nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMuY3VzdG9tZXJOby52YWx1ZVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRWYWx1ZSgnY3VzdG9tZXJObycpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlciByb3dcIj5cclxuICAgICAgPG5neC1zdC1zZWFyY2gtc2VsZWN0XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHNlYXJjaEZvcm0/LmdldCgndGVycml0b3J5JykgJiZcclxuICAgICAgICAgICgodGVycml0b3JpZXMkIHwgYXN5bmMpIHx8IFtdKSBhcyB0ZXJyaXRvcmllc1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW29wdGlvbnNdPVwidGVycml0b3JpZXMgfHwgW11cIlxyXG4gICAgICAgIFtzZWxlY3RMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnRlcnJpdG9yeScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtvcHRpb25MYWJlbEZpZWxkc109XCInbmFtZSdcIlxyXG4gICAgICAgIFtvcHRpb25WYWx1ZUZpZWxkXT1cIidpZCdcIlxyXG4gICAgICAgIFtzZWxlY3RGb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtLmNvbnRyb2xzLnRlcnJpdG9yeVwiXHJcbiAgICAgICAgW3NlbGVjdEJpbmRUeXBlXT1cIidjb250cm9sJ1wiXHJcbiAgICAgICAgW3NlYXJjaExhYmVsXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc2VhcmNoJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgID48L25neC1zdC1zZWFyY2gtc2VsZWN0PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5yZWZyZXNoJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInJlZnJlc2hUZXJyaXRvcmllcygpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiBbbmdDbGFzc109XCJ7IGhpZGU6ICFzaG93RmlsdGVycyB9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2l0eVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuY2l0eScgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmNpdHkudmFsdWVcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0VmFsdWUoJ2NpdHknKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXIgcm93XCI+XHJcbiAgICAgIDxuZ3gtc3Qtc2VhcmNoLXNlbGVjdFxyXG4gICAgICAgICpuZ0lmPVwic2VhcmNoRm9ybT8uZ2V0KCdzdGF0ZScpICYmICgoc3RhdGVzJCB8IGFzeW5jKSB8fCBbXSkgYXMgc3RhdGVzXCJcclxuICAgICAgICBbb3B0aW9uc109XCJzdGF0ZXMgfHwgW11cIlxyXG4gICAgICAgIFtzZWxlY3RMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXRlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW29wdGlvbkxhYmVsRmllbGRzXT1cIiduYW1lJ1wiXHJcbiAgICAgICAgW29wdGlvblZhbHVlRmllbGRdPVwiJ2lkJ1wiXHJcbiAgICAgICAgW3NlbGVjdEZvcm1Db250cm9sXT1cInNlYXJjaEZvcm0uY29udHJvbHMuc3RhdGVcIlxyXG4gICAgICAgIFtzZWxlY3RCaW5kVHlwZV09XCInY29udHJvbCdcIlxyXG4gICAgICAgIFtzZWFyY2hMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnNlYXJjaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICA+PC9uZ3gtc3Qtc2VhcmNoLXNlbGVjdD5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQucmVmcmVzaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc2VhcmNoRm9ybS5jb250cm9scy5jb3VudHJ5LnZhbHVlXCJcclxuICAgICAgICAoY2xpY2spPVwicmVmcmVzaFN0YXRlcygpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvdW50eVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuY291bnR5JyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMuY291bnR5LnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdjb3VudHknKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXIgcm93XCI+XHJcbiAgICAgIDxuZ3gtc3Qtc2VhcmNoLXNlbGVjdFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzZWFyY2hGb3JtPy5nZXQoJ2NvdW50cnknKSAmJlxyXG4gICAgICAgICAgKChjb3VudHJpZXMkIHwgYXN5bmMpIHx8IFtdKSBhcyBjb3VudHJpZXNcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtvcHRpb25zXT1cImNvdW50cmllcyB8fCBbXVwiXHJcbiAgICAgICAgW3NlbGVjdExhYmVsXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuY291bnRyeScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtvcHRpb25MYWJlbEZpZWxkc109XCInbmFtZSdcIlxyXG4gICAgICAgIFtvcHRpb25WYWx1ZUZpZWxkXT1cIidpZCdcIlxyXG4gICAgICAgIFtzZWxlY3RGb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmNvdW50cnlcIlxyXG4gICAgICAgIFtzZWxlY3RCaW5kVHlwZV09XCInY29udHJvbCdcIlxyXG4gICAgICAgIFtzZWFyY2hMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnNlYXJjaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICA+PC9uZ3gtc3Qtc2VhcmNoLXNlbGVjdD5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQucmVmcmVzaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIChjbGljayk9XCJyZWZyZXNoQ291bnRyaWVzKClcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnJlZnJlc2g8L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiIFtuZ0NsYXNzXT1cInsgaGlkZTogIXNob3dGaWx0ZXJzIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTMgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50Lmluc3RhbGxhdGlvbkRhdGVGcm9tJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyMVwiXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbnN0YWxsYXRpb25EYXRlRnJvbVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtmb3JdPVwicGlja2VyMVwiXHJcbiAgICAgICAgPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyMT48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0YWxsYXRpb25EYXRlVG8nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIyXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluc3RhbGxhdGlvbkRhdGVUb1wiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtmb3JdPVwicGlja2VyMlwiXHJcbiAgICAgICAgPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kVXNlck5hbWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmVuZEN1c3RvbWVyTmFtZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2VhcmNoRm9ybS5jb250cm9scy5lbmRVc2VyTmFtZS52YWx1ZVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRWYWx1ZSgnZW5kVXNlck5hbWUnKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuZFVzZXJDb2RlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5lbmRDdXN0b21lck5vJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmVuZFVzZXJDb2RlLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdlbmRVc2VyQ29kZScpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCJcclxuICAgICAgKm5nSWY9XCJzaG93RmlsdGVyc1wiXHJcbiAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCJcclxuICAgID5cclxuICAgICAgQ2xlYXIgQWxsXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJzID0gIXNob3dGaWx0ZXJzXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaWx0ZXJzXCI+XHJcbiAgICAgICAge3sgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5oaWRlRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0ZpbHRlcnNcIj5cclxuICAgICAgICB7eyAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnNob3dGaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJzXCJcclxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIlxyXG4gICAgPlxyXG4gICAgICBTZWFyY2hcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3Qtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2gvc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3Qtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2gvc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3Qtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFJWixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QjNDLE1BQU0sT0FBTyx5Q0FBeUM7SUFrQ3BELFlBQ1UsNkJBQTZELEVBQzdELE1BQWMsRUFDZCxjQUE4QixFQUM5QixFQUEwQjtRQUgxQixrQ0FBNkIsR0FBN0IsNkJBQTZCLENBQWdDO1FBQzdELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsT0FBRSxHQUFGLEVB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QUduQyx1QkFBdUIsQ0FBQyxNQUFNOzBMQUkvQyx1QkFBdUI7c0JBRHRCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUlwQyxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb25OdWxsYWJsZUZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTYXBUZXJyaXRvcnlNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zYXAtdGVycml0b3J5Lm1vZGVsJztcclxuaW1wb3J0IHsgU2FwU3RhdGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zYXAtc3RhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBDb3VudHJ5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2FwLWNvdW50cnkubW9kZWwnO1xyXG5pbXBvcnQgeyBOZ3hTdE11bHRpc2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnbmd4LXN0LW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTYXBJbnN0YWxsZWRJbnN0cnVtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnN0YWxsZWRJbnN0cnVtZW50Rm9ybU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luc3RhbGxlZC1pbnN0cnVtZW50LWZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdE11bHRpc2VsZWN0QXV0b2NvbXBsZXRlU2V0dGluZ3NNb2RlbCB9IGZyb20gJ25neC1zdC1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUvbGliL21vZGVscy9zdC1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbnRlcmZhY2UgU2VhcmNoRm9ybVR5cGUge1xyXG4gIGFwcGxpY2F0aW9uOiBzdHJpbmdbXVtdO1xyXG4gIHNlcmlhbE51bWJlcjogc3RyaW5nO1xyXG4gIGluc3RydW1lbnRObzogc3RyaW5nO1xyXG4gIGluc3RydW1lbnREZXNjOiBzdHJpbmc7XHJcbiAgY3VzdG9tZXJObzogc3RyaW5nO1xyXG4gIGJwTmFtZTogc3RyaW5nO1xyXG4gIGNpdHk6IHN0cmluZztcclxuICBjb3VudHk6IHN0cmluZztcclxuICBlbmRVc2VyTmFtZTogc3RyaW5nO1xyXG4gIGVuZFVzZXJDb2RlOiBzdHJpbmc7XHJcbiAgdGVycml0b3J5OiBudW1iZXIgfCBudWxsO1xyXG4gIHRlY2huaWNpYW5MYXN0TmFtZTogc3RyaW5nO1xyXG4gIGNvdW50cnk6IHN0cmluZztcclxuICBzdGF0ZTogc3RyaW5nO1xyXG4gIHN0YXR1czogc3RyaW5nO1xyXG4gIGluc3RhbGxhdGlvbkRhdGVGcm9tOiBEYXRlIHwgbnVsbDtcclxuICBpbnN0YWxsYXRpb25EYXRlVG86IERhdGUgfCBudWxsO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnbXVsdGlzZWxlY3RBdXRvY29tcGxldGUnKVxyXG4gIG11bHRpc2VsZWN0QXV0b2NvbXBsZXRlOiBOZ3hTdE11bHRpc2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBmaWx0ZXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SW5zdGFsbGVkSW5zdHJ1bWVudEZvcm1Nb2RlbD4oKTtcclxuXHJcbiAgc2hvd0ZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cDxTZWFyY2hGb3JtVHlwZT4oe1xyXG4gICAgYXBwbGljYXRpb246IFs8c3RyaW5nW10+W11dLFxyXG4gICAgc2VyaWFsTnVtYmVyOiAnJyxcclxuICAgIGluc3RydW1lbnRObzogJycsXHJcbiAgICBpbnN0cnVtZW50RGVzYzogJycsXHJcbiAgICBjdXN0b21lck5vOiAnJyxcclxuICAgIGJwTmFtZTogJycsXHJcbiAgICBjaXR5OiAnJyxcclxuICAgIGNvdW50eTogJycsXHJcbiAgICBlbmRVc2VyTmFtZTogJycsXHJcbiAgICBlbmRVc2VyQ29kZTogJycsXHJcbiAgICB0ZXJyaXRvcnk6IDxudW1iZXIgfCBudWxsPm51bGwsXHJcbiAgICB0ZWNobmljaWFuTGFzdE5hbWU6ICcnLFxyXG4gICAgY291bnRyeTogJycsXHJcbiAgICBzdGF0ZTogJycsXHJcbiAgICBzdGF0dXM6ICcnLFxyXG4gICAgaW5zdGFsbGF0aW9uRGF0ZUZyb206IDxEYXRlIHwgbnVsbD5udWxsLFxyXG4gICAgaW5zdGFsbGF0aW9uRGF0ZVRvOiA8RGF0ZSB8IG51bGw+bnVsbCxcclxuICB9KTtcclxuXHJcbiAgdGVycml0b3JpZXMkOiBPYnNlcnZhYmxlPFNhcFRlcnJpdG9yeU1vZGVsW10+O1xyXG4gIHN0YXRlcyQ6IE9ic2VydmFibGU8U2FwU3RhdGVNb2RlbFtdPjtcclxuICBjb3VudHJpZXMkOiBPYnNlcnZhYmxlPFNhcENvdW50cnlNb2RlbFtdPjtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzYXBJbnN0YWxsZWRJbnN0cnVtZW50U2VydmljZTogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBmYjogTm9uTnVsbGFibGVGb3JtQnVpbGRlclxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFNlYXJjaEZvcm0oKTtcclxuICAgIHRoaXMuc2V0QXN5bmNGaWx0ZXJzKCk7XHJcblxyXG4gICAgY29uc3QgcXVlcnlQYXJhbXNLZXlzID0gT2JqZWN0LmtleXMoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge31cclxuICAgICk7XHJcblxyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zS2V5cy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSB0cnVlO1xyXG5cclxuICAgICAgcXVlcnlQYXJhbXNLZXlzLmZvckVhY2gocXVlcnlQYXJhbSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KHF1ZXJ5UGFyYW0pO1xyXG4gICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtID09PSAnaW5zdGFsbGF0aW9uRGF0ZUZyb20nIHx8XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW0gPT09ICdpbnN0YWxsYXRpb25EYXRlVG8nXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1txdWVyeVBhcmFtXVxyXG4gICAgICAgICAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1dKVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1dXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMubXVsdGlzZWxlY3RBdXRvY29tcGxldGUuY2xlYXJTZWxlY3RlZERhdGEoKTtcclxuICAgIHRoaXMuc2VhcmNoU3VibWl0dGVkKCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoVGVycml0b3JpZXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMudGVycml0b3J5LnNldFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy50ZXJyaXRvcmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldFRlcnJpdG9yeSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDb3VudHJpZXMoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMuY291bnRyeS5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLmNvdW50cmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldENvdW50cnkodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoU3RhdGVzKCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLnN0YXRlLnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMuc3RhdGVzJCA9IHRoaXMuc2FwSW5zdGFsbGVkSW5zdHJ1bWVudFNlcnZpY2UuZ2V0U3RhdGUoXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy5jb3VudHJ5LnZhbHVlLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q291bnRyeVZhbHVlKGNvdW50cnk6IFNhcENvdW50cnlNb2RlbCkge1xyXG4gICAgcmV0dXJuIGNvdW50cnkuaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZVZhbHVlKHN0YXRlOiBTYXBTdGF0ZU1vZGVsKSB7XHJcbiAgICByZXR1cm4gc3RhdGUuaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJyaXRvcnlWYWx1ZSh0ZXJyaXRvcnk6IFNhcFRlcnJpdG9yeU1vZGVsKSB7XHJcbiAgICByZXR1cm4gdGVycml0b3J5LmlkO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoU3VibWl0dGVkKCkge1xyXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuc2VhcmNoRm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdCh7IHNmSWQ6IHVuZGVmaW5lZCwgLi4uZm9ybVZhbHVlcyB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFySW5wdXRWYWx1ZShmb3JtQ29udHJvbE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmdldChmb3JtQ29udHJvbE5hbWUpIS5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLnNlYXJjaFN1Ym1pdHRlZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyZWRPcHRpb25zID0gKHNlYXJjaDogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zYXBJbnN0YWxsZWRJbnN0cnVtZW50U2VydmljZS5nZXRBcHBsaWNhdGlvblNlYXJjaChzZWFyY2gpO1xyXG4gIH07XHJcblxyXG4gIGFwcGxpY2F0aW9uU2VsZWN0ZWQoZGF0YTogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy5hcHBsaWNhdGlvbi5zZXRWYWx1ZShkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXN5bmNGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy50ZXJyaXRvcmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldFRlcnJpdG9yeShmYWxzZSk7XHJcbiAgICB0aGlzLmNvdW50cmllcyQgPSB0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRTZXJ2aWNlLmdldENvdW50cnkoZmFsc2UpO1xyXG4gICAgdGhpcy5zdGF0ZXMkID0gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWFyY2hGb3JtKCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLmNvdW50cnkudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxyXG4gICAgKS5zdWJzY3JpYmUoXHJcbiAgICAgIChjb3VudHJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMuc3RhdGUuc2V0VmFsdWUoJycpO1xyXG5cclxuICAgICAgICBpZiAoY291bnRyeSkge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZXMkID0gdGhpcy5zYXBJbnN0YWxsZWRJbnN0cnVtZW50U2VydmljZS5nZXRTdGF0ZShjb3VudHJ5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZXMkID0gb2YoW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm1cclxuICBjbGFzcz1cInNlYXJjaC1maWx0ZXJzXCJcclxuICBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIlxyXG4gIChrZXl1cC5lbnRlcik9XCJzZWFyY2hTdWJtaXR0ZWQoKVwiXHJcbiAgKG5nU3VibWl0KT1cInNlYXJjaFN1Ym1pdHRlZCgpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCIgW25nQ2xhc3NdPVwieyBoaWRlOiAhc2hvd0ZpbHRlcnMgfVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG5neC1zdC1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGVcclxuICAgICAgICAjbXVsdGlzZWxlY3RBdXRvY29tcGxldGVcclxuICAgICAgICBbbGFiZWxdPVwiXHJcbiAgICAgICAgICAoJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hcHBsaWNhdGlvbicgfCB0cmFuc2xhdGUpICtcclxuICAgICAgICAgICcgKCcgK1xyXG4gICAgICAgICAgKCdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQubWF4JyB8IHRyYW5zbGF0ZSkgK1xyXG4gICAgICAgICAgJzogMTApJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3NlYXJjaExhYmVsXT1cIlxyXG4gICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hcHBsaWNhdGlvblBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3NldHRpbmdzXT1cIntcclxuICAgICAgICAgIGdldEZpbHRlcmVkT3B0aW9uczogdGhpcy5nZXRGaWx0ZXJlZE9wdGlvbnNcclxuICAgICAgICB9XCJcclxuICAgICAgICBbaW5pdFNlbGVjdGVkRGF0YV09XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmFwcGxpY2F0aW9uLnZhbHVlXCJcclxuICAgICAgICBbbWF4TGVuZ3RoU2VsZWN0ZWREYXRhXT1cIjEwXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlZCk9XCJhcHBsaWNhdGlvblNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICA+PC9uZ3gtc3QtbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnBOYW1lXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50TmFtZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2VhcmNoRm9ybS5jb250cm9scy5icE5hbWUudmFsdWVcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0VmFsdWUoJ2JwTmFtZScpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGVjaG5pY2lhbkxhc3ROYW1lXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC50ZWNobmljaWFuTGFzdE5hbWUnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMudGVjaG5pY2lhbkxhc3ROYW1lLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCd0ZWNobmljaWFuTGFzdE5hbWUnKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiBbbmdDbGFzc109XCJ7IGhpZGU6ICFzaG93RmlsdGVycyB9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VyaWFsTnVtYmVyXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5zZXJpYWxOdW1iZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMuc2VyaWFsTnVtYmVyLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdzZXJpYWxOdW1iZXInKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluc3RydW1lbnROb1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuaW5zdHJ1bWVudE5vJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmluc3RydW1lbnROby52YWx1ZVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRWYWx1ZSgnaW5zdHJ1bWVudE5vJylcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbnN0cnVtZW50RGVzY1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuaW5zdHJ1bWVudERlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmluc3RydW1lbnREZXNjLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdpbnN0cnVtZW50RGVzYycpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiIFtuZ0NsYXNzXT1cInsgaGlkZTogIXNob3dGaWx0ZXJzIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50Lmluc3RydW1lbnRTdGF0dXMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7XHJcbiAgICAgICAgICAgICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuZW1wdHknIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInQSdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c0EnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInUidcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c1InIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInVCdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c1QnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInTCdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c0wnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInSSdcIj57e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1c0knIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21lck5vXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50Tm8nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMuY3VzdG9tZXJOby52YWx1ZVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRWYWx1ZSgnY3VzdG9tZXJObycpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS00IGFsaWduLWl0ZW1zLWNlbnRlciByb3dcIj5cclxuICAgICAgPG5neC1zdC1zZWFyY2gtc2VsZWN0XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIHNlYXJjaEZvcm0/LmdldCgndGVycml0b3J5JykgJiZcclxuICAgICAgICAgICgodGVycml0b3JpZXMkIHwgYXN5bmMpIHx8IFtdKSBhcyB0ZXJyaXRvcmllc1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW29wdGlvbnNdPVwidGVycml0b3JpZXMgfHwgW11cIlxyXG4gICAgICAgIFtzZWxlY3RMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnRlcnJpdG9yeScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtvcHRpb25MYWJlbEZpZWxkc109XCInbmFtZSdcIlxyXG4gICAgICAgIFtvcHRpb25WYWx1ZUZpZWxkXT1cIidpZCdcIlxyXG4gICAgICAgIFtzZWxlY3RGb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtLmNvbnRyb2xzLnRlcnJpdG9yeVwiXHJcbiAgICAgICAgW3NlbGVjdEJpbmRUeXBlXT1cIidjb250cm9sJ1wiXHJcbiAgICAgICAgW3NlYXJjaExhYmVsXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc2VhcmNoJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgID48L25neC1zdC1zZWFyY2gtc2VsZWN0PlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5yZWZyZXNoJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInJlZnJlc2hUZXJyaXRvcmllcygpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiBbbmdDbGFzc109XCJ7IGhpZGU6ICFzaG93RmlsdGVycyB9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2l0eVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuY2l0eScgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmNpdHkudmFsdWVcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0VmFsdWUoJ2NpdHknKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXIgcm93XCI+XHJcbiAgICAgIDxuZ3gtc3Qtc2VhcmNoLXNlbGVjdFxyXG4gICAgICAgICpuZ0lmPVwic2VhcmNoRm9ybT8uZ2V0KCdzdGF0ZScpICYmICgoc3RhdGVzJCB8IGFzeW5jKSB8fCBbXSkgYXMgc3RhdGVzXCJcclxuICAgICAgICBbb3B0aW9uc109XCJzdGF0ZXMgfHwgW11cIlxyXG4gICAgICAgIFtzZWxlY3RMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXRlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW29wdGlvbkxhYmVsRmllbGRzXT1cIiduYW1lJ1wiXHJcbiAgICAgICAgW29wdGlvblZhbHVlRmllbGRdPVwiJ2lkJ1wiXHJcbiAgICAgICAgW3NlbGVjdEZvcm1Db250cm9sXT1cInNlYXJjaEZvcm0uY29udHJvbHMuc3RhdGVcIlxyXG4gICAgICAgIFtzZWxlY3RCaW5kVHlwZV09XCInY29udHJvbCdcIlxyXG4gICAgICAgIFtzZWFyY2hMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnNlYXJjaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICA+PC9uZ3gtc3Qtc2VhcmNoLXNlbGVjdD5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQucmVmcmVzaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc2VhcmNoRm9ybS5jb250cm9scy5jb3VudHJ5LnZhbHVlXCJcclxuICAgICAgICAoY2xpY2spPVwicmVmcmVzaFN0YXRlcygpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvdW50eVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuY291bnR5JyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNlYXJjaEZvcm0uY29udHJvbHMuY291bnR5LnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdjb3VudHknKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXIgcm93XCI+XHJcbiAgICAgIDxuZ3gtc3Qtc2VhcmNoLXNlbGVjdFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBzZWFyY2hGb3JtPy5nZXQoJ2NvdW50cnknKSAmJlxyXG4gICAgICAgICAgKChjb3VudHJpZXMkIHwgYXN5bmMpIHx8IFtdKSBhcyBjb3VudHJpZXNcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtvcHRpb25zXT1cImNvdW50cmllcyB8fCBbXVwiXHJcbiAgICAgICAgW3NlbGVjdExhYmVsXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuY291bnRyeScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtvcHRpb25MYWJlbEZpZWxkc109XCInbmFtZSdcIlxyXG4gICAgICAgIFtvcHRpb25WYWx1ZUZpZWxkXT1cIidpZCdcIlxyXG4gICAgICAgIFtzZWxlY3RGb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmNvdW50cnlcIlxyXG4gICAgICAgIFtzZWxlY3RCaW5kVHlwZV09XCInY29udHJvbCdcIlxyXG4gICAgICAgIFtzZWFyY2hMYWJlbF09XCInc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnNlYXJjaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICA+PC9uZ3gtc3Qtc2VhcmNoLXNlbGVjdD5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQucmVmcmVzaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIChjbGljayk9XCJyZWZyZXNoQ291bnRyaWVzKClcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnJlZnJlc2g8L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiIFtuZ0NsYXNzXT1cInsgaGlkZTogIXNob3dGaWx0ZXJzIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTMgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50Lmluc3RhbGxhdGlvbkRhdGVGcm9tJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyMVwiXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbnN0YWxsYXRpb25EYXRlRnJvbVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtmb3JdPVwicGlja2VyMVwiXHJcbiAgICAgICAgPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyMT48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0YWxsYXRpb25EYXRlVG8nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIyXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluc3RhbGxhdGlvbkRhdGVUb1wiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtmb3JdPVwicGlja2VyMlwiXHJcbiAgICAgICAgPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kVXNlck5hbWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgICAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmVuZEN1c3RvbWVyTmFtZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2VhcmNoRm9ybS5jb250cm9scy5lbmRVc2VyTmFtZS52YWx1ZVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRWYWx1ZSgnZW5kVXNlck5hbWUnKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuZFVzZXJDb2RlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5lbmRDdXN0b21lck5vJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgfX1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hGb3JtLmNvbnRyb2xzLmVuZFVzZXJDb2RlLnZhbHVlXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dFZhbHVlKCdlbmRVc2VyQ29kZScpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1zbS1zdGFydCBqdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVyXCJcclxuICAgIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweFwiXHJcbiAgPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCJcclxuICAgICAgKm5nSWY9XCJzaG93RmlsdGVyc1wiXHJcbiAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCJcclxuICAgID5cclxuICAgICAgQ2xlYXIgQWxsXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJzID0gIXNob3dGaWx0ZXJzXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaWx0ZXJzXCI+XHJcbiAgICAgICAge3sgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5oaWRlRmlsdGVycycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0ZpbHRlcnNcIj5cclxuICAgICAgICB7eyAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnNob3dGaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJzXCJcclxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIlxyXG4gICAgPlxyXG4gICAgICBTZWFyY2hcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
|
|
@@ -12,12 +12,13 @@ import * as i2 from "../../../services/sap-installed-instruments.service";
|
|
|
12
12
|
import * as i3 from "@angular/common";
|
|
13
13
|
import * as i4 from "@angular/material/button";
|
|
14
14
|
import * as i5 from "@angular/material/menu";
|
|
15
|
-
import * as i6 from "@angular/material/
|
|
16
|
-
import * as i7 from "@angular/material/
|
|
17
|
-
import * as i8 from "@angular/material/
|
|
18
|
-
import * as i9 from "@angular/material/
|
|
19
|
-
import * as i10 from "@
|
|
20
|
-
import * as i11 from "ngx-
|
|
15
|
+
import * as i6 from "@angular/material/icon";
|
|
16
|
+
import * as i7 from "@angular/material/table";
|
|
17
|
+
import * as i8 from "@angular/material/paginator";
|
|
18
|
+
import * as i9 from "@angular/material/checkbox";
|
|
19
|
+
import * as i10 from "@angular/material/sort";
|
|
20
|
+
import * as i11 from "@ngx-translate/core";
|
|
21
|
+
import * as i12 from "ngx-st-date-format";
|
|
21
22
|
export class SapInstalledInstrumentListTableComponent extends StSubscribeDestroyComponent {
|
|
22
23
|
set tableData(data) {
|
|
23
24
|
this.dataSource.data = data;
|
|
@@ -44,7 +45,7 @@ export class SapInstalledInstrumentListTableComponent extends StSubscribeDestroy
|
|
|
44
45
|
'installationDate',
|
|
45
46
|
'status',
|
|
46
47
|
];
|
|
47
|
-
this.showOnMapSelection = new SelectionModel();
|
|
48
|
+
this.showOnMapSelection = new SelectionModel(true);
|
|
48
49
|
}
|
|
49
50
|
ngOnInit() {
|
|
50
51
|
this.setTableColumns();
|
|
@@ -115,11 +116,11 @@ export class SapInstalledInstrumentListTableComponent extends StSubscribeDestroy
|
|
|
115
116
|
};
|
|
116
117
|
}
|
|
117
118
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapInstalledInstrumentListTableComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.SapInstalledInstrumentsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
118
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SapInstalledInstrumentListTableComponent, selector: "app-sap-installed-instrument-list-table", inputs: { tableData: "tableData", useMapButton: "useMapButton" }, outputs: { sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row show-on-map-actions\" *ngIf=\"useMapButton\">\r\n <button mat-button [matMenuTriggerFor]=\"menu\">\r\n Selected: {{ showOnMapSelection.selected.length }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (\r\n instrument of showOnMapSelection.selected;\r\n track instrument.
|
|
119
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SapInstalledInstrumentListTableComponent, selector: "app-sap-installed-instrument-list-table", inputs: { tableData: "tableData", useMapButton: "useMapButton" }, outputs: { sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row justify-content-end show-on-map-actions\" *ngIf=\"useMapButton\">\r\n <button mat-raised-button [matMenuTriggerFor]=\"menu\">\r\n Selected: {{ showOnMapSelection.selected.length }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (\r\n instrument of showOnMapSelection.selected;\r\n track instrument.instrumentNo\r\n ) {\r\n <button mat-menu-item>{{ instrument.instrumentNo }}</button>\r\n <div mat-menu-item (click)=\"showOnMapSelection.deselect(instrument)\">\r\n {{ instrument.instrumentNo }}\r\n <mat-icon\r\n class=\"material-icons\"\r\n style=\"font-size: 20px; width: 20px; height: 20px\"\r\n >delete</mat-icon\r\n >\r\n </div>\r\n }\r\n </mat-menu>\r\n <button\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"redirectToShowOnMap()\"\r\n [disabled]=\"showOnMapSelection.selected.length === 0\"\r\n >\r\n Show On Map\r\n </button>\r\n</div>\r\n\r\n<table\r\n mat-table\r\n [dataSource]=\"dataSource\"\r\n style=\"width: 100%\"\r\n class=\"no-hover\"\r\n matSort\r\n>\r\n <ng-container [matColumnDef]=\"column\" *ngFor=\"let column of tableColumns\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\r\n @if (column !== 'selectToMap') {\r\n {{ mapTableColumns[column] | translate }}\r\n } @else {}\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (column === 'selectToMap') {\r\n <mat-checkbox\r\n color=\"primary\"\r\n [checked]=\"showOnMapSelection.isSelected(element)\"\r\n (click)=\"changeRowSelection($event, element)\"\r\n [disabled]=\"!element.sfId\"\r\n ></mat-checkbox>\r\n } @else if (column === 'installationDate') {\r\n {{ element[column] | stDateFormatPipe }}\r\n } @else {\r\n {{ element[column] }}\r\n }\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"tableColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: tableColumns\"\r\n (click)=\"rowClicked(row)\"\r\n ></tr>\r\n</table>\r\n<mat-paginator\r\n [pageSizeOptions]=\"[10, 20]\"\r\n [showFirstLastButtons]=\"true\"\r\n></mat-paginator>\r\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%;box-shadow:none}table th.mat-mdc-header-cell,table td.mat-mdc-cell,table td.mat-mdc-footer-cell{padding:0}table th.mat-mdc-header-cell:first-of-type,table td.mat-mdc-cell:first-of-type,table td.mat-mdc-footer-cell:first-of-type{padding-left:12px}table th.mat-mdc-header-cell:last-of-type,table td.mat-mdc-cell:last-of-type,table td.mat-mdc-footer-cell:last-of-type{padding-right:12px}table::ng-deep thead tr{background-color:#fff9c4;height:40px!important}table::ng-deep thead tr th{border-color:#fdd835;color:#0000008a;font-size:12px}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr.active td{border-bottom-color:#81c784!important}table::ng-deep tbody>tr:hover{background-color:#a5d6a7!important}table::ng-deep tbody>tr:hover td{border-bottom-color:#81c784!important}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit!important}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent!important}table.no-hover::ng-deep tbody tr.active td{border-bottom-color:#0000001f!important}table.no-hover::ng-deep tbody tr:hover{background-color:transparent!important}table.no-hover::ng-deep tbody tr:hover td{border-bottom-color:#0000001f!important}table.admin-table::ng-deep .actions-cell{width:100px}.show-on-map-actions{justify-content:end;margin-bottom:5px;margin-top:-45px;gap:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }, { kind: "pipe", type: i12.DateFormatPipe, name: "stDateFormatPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
119
120
|
}
|
|
120
121
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapInstalledInstrumentListTableComponent, decorators: [{
|
|
121
122
|
type: Component,
|
|
122
|
-
args: [{ selector: 'app-sap-installed-instrument-list-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"row show-on-map-actions\" *ngIf=\"useMapButton\">\r\n <button mat-button [matMenuTriggerFor]=\"menu\">\r\n Selected: {{ showOnMapSelection.selected.length }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (\r\n instrument of showOnMapSelection.selected;\r\n track instrument.
|
|
123
|
+
args: [{ selector: 'app-sap-installed-instrument-list-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"row justify-content-end show-on-map-actions\" *ngIf=\"useMapButton\">\r\n <button mat-raised-button [matMenuTriggerFor]=\"menu\">\r\n Selected: {{ showOnMapSelection.selected.length }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (\r\n instrument of showOnMapSelection.selected;\r\n track instrument.instrumentNo\r\n ) {\r\n <button mat-menu-item>{{ instrument.instrumentNo }}</button>\r\n <div mat-menu-item (click)=\"showOnMapSelection.deselect(instrument)\">\r\n {{ instrument.instrumentNo }}\r\n <mat-icon\r\n class=\"material-icons\"\r\n style=\"font-size: 20px; width: 20px; height: 20px\"\r\n >delete</mat-icon\r\n >\r\n </div>\r\n }\r\n </mat-menu>\r\n <button\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"redirectToShowOnMap()\"\r\n [disabled]=\"showOnMapSelection.selected.length === 0\"\r\n >\r\n Show On Map\r\n </button>\r\n</div>\r\n\r\n<table\r\n mat-table\r\n [dataSource]=\"dataSource\"\r\n style=\"width: 100%\"\r\n class=\"no-hover\"\r\n matSort\r\n>\r\n <ng-container [matColumnDef]=\"column\" *ngFor=\"let column of tableColumns\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\r\n @if (column !== 'selectToMap') {\r\n {{ mapTableColumns[column] | translate }}\r\n } @else {}\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (column === 'selectToMap') {\r\n <mat-checkbox\r\n color=\"primary\"\r\n [checked]=\"showOnMapSelection.isSelected(element)\"\r\n (click)=\"changeRowSelection($event, element)\"\r\n [disabled]=\"!element.sfId\"\r\n ></mat-checkbox>\r\n } @else if (column === 'installationDate') {\r\n {{ element[column] | stDateFormatPipe }}\r\n } @else {\r\n {{ element[column] }}\r\n }\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"tableColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: tableColumns\"\r\n (click)=\"rowClicked(row)\"\r\n ></tr>\r\n</table>\r\n<mat-paginator\r\n [pageSizeOptions]=\"[10, 20]\"\r\n [showFirstLastButtons]=\"true\"\r\n></mat-paginator>\r\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%;box-shadow:none}table th.mat-mdc-header-cell,table td.mat-mdc-cell,table td.mat-mdc-footer-cell{padding:0}table th.mat-mdc-header-cell:first-of-type,table td.mat-mdc-cell:first-of-type,table td.mat-mdc-footer-cell:first-of-type{padding-left:12px}table th.mat-mdc-header-cell:last-of-type,table td.mat-mdc-cell:last-of-type,table td.mat-mdc-footer-cell:last-of-type{padding-right:12px}table::ng-deep thead tr{background-color:#fff9c4;height:40px!important}table::ng-deep thead tr th{border-color:#fdd835;color:#0000008a;font-size:12px}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr.active td{border-bottom-color:#81c784!important}table::ng-deep tbody>tr:hover{background-color:#a5d6a7!important}table::ng-deep tbody>tr:hover td{border-bottom-color:#81c784!important}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit!important}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent!important}table.no-hover::ng-deep tbody tr.active td{border-bottom-color:#0000001f!important}table.no-hover::ng-deep tbody tr:hover{background-color:transparent!important}table.no-hover::ng-deep tbody tr:hover td{border-bottom-color:#0000001f!important}table.admin-table::ng-deep .actions-cell{width:100px}.show-on-map-actions{justify-content:end;margin-bottom:5px;margin-top:-45px;gap:5px}\n"] }]
|
|
123
124
|
}], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.SapInstalledInstrumentsService }, { type: i0.ChangeDetectorRef }], propDecorators: { paginator: [{
|
|
124
125
|
type: ViewChild,
|
|
125
126
|
args: [MatPaginator, { static: true }]
|
|
@@ -133,4 +134,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
133
134
|
}], sortChanged: [{
|
|
134
135
|
type: Output
|
|
135
136
|
}] } });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXNhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0L3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHcEUsT0FBTyxFQUFFLE9BQU8sRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVB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QUFHO1lBQ3JCLFlBQVksRUFBRSwwQ0FBMEM7WUFDeEQscUJBQXFCLEVBQ25CLG1EQUFtRDtZQUNyRCxZQUFZLEVBQUUsMENBQTBDO1lBQ3hELFVBQVUsRUFBRSx1Q0FBdUM7WUFDbkQsbUJBQW1CLEVBQUUseUNBQXlDO1lBQzlELFdBQVcsRUFBRSx5Q0FBeUM7WUFDdEQsSUFBSSxFQUFFLGtDQUFrQztZQUN4QyxXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELE9BQU8sRUFBRSxxQ0FBcUM7WUFDOUMsTUFBTSxFQUFFLG9DQUFvQztZQUM1QyxnQkFBZ0IsRUFBRSw4Q0FBOEM7WUFDaEUsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztJQUNKLENBQUM7K0dBeklVLHdDQUF3QzttR0FBeEMsd0NBQXdDLHFPQUl4QyxZQUFZLHFGQUNaLE9BQU8sdUVDbENwQiw4MkRBNkRBOzs0RkRoQ2Esd0NBQXdDO2tCQU5wRCxTQUFTOytCQUNFLHlDQUF5QyxtQkFHbEMsdUJBQXVCLENBQUMsTUFBTTtxTEFNSixTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ3JCLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFHZCxTQUFTO3NCQURaLEtBQUs7Z0JBTU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnQgfSBmcm9tICduZ3gtc3QtYmFzZS1mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgSW5zdGFsbGVkSW5zdHJ1bWVudFRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luc3RhbGxlZC1pbnN0cnVtZW50LXRhYmxlLWNvbHVtbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBJbnN0YWxsZWRJbnN0cnVtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0VGFibGVDb21wb25lbnRcclxuICBleHRlbmRzIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0XHJcbntcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB0YWJsZURhdGEoZGF0YTogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RNb2RlbFtdKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHVzZU1hcEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcclxuXHJcbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWw+ID1cclxuICAgIG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuXHJcbiAgdGFibGVDb2x1bW5zOiBJbnN0YWxsZWRJbnN0cnVtZW50VGFibGVDb2x1bW5zTW9kZWxbXSA9IFtcclxuICAgICdpbnN0cnVtZW50Tm8nLFxyXG4gICAgJ2luc3RydW1lbnREZXNjcmlwdGlvbicsXHJcbiAgICAnc2VyaWFsTnVtYmVyJyxcclxuICAgICdjdXN0b21lck5vJyxcclxuICAgICdidXNpbmVzc1BhcnRuZXJOYW1lJyxcclxuICAgICdlbmRVc2VyTmFtZScsXHJcbiAgICAnY2l0eScsXHJcbiAgICAndGVycml0b3J5SWQnLFxyXG4gICAgJ2NvdW50cnknLFxyXG4gICAgJ2luc3RhbGxhdGlvbkRhdGUnLFxyXG4gICAgJ3N0YXR1cycsXHJcbiAgXTtcclxuICBtYXBUYWJsZUNvbHVtbnM6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgc2hvd09uTWFwU2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWw+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBzYXBJbnN0YWxsZWRJbnN0cnVtZW50czogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VGFibGVDb2x1bW5zKCk7XHJcbiAgICBpZiAoIXRoaXMuc2FwSW5zdGFsbGVkSW5zdHJ1bWVudHMudGVycml0b3J5RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy50YWJsZUNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAgIGNvbHVtbiA9PiBjb2x1bW4gIT09ICd0ZXJyaXRvcnlJZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG5cclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChyZXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcXVlcnlQYXJhbXNLZXlzID0gT2JqZWN0LmtleXMoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge31cclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBxdWVyeVBhcmFtc0tleXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydhY3RpdmUnXSAmJlxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydkaXJlY3Rpb24nXVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc29ydC5zb3J0KHtcclxuICAgICAgICBpZDogdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snYWN0aXZlJ10sXHJcbiAgICAgICAgc3RhcnQ6IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ2RpcmVjdGlvbiddLFxyXG4gICAgICAgIGRpc2FibGVDbGVhcjogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm93Q2xpY2tlZChyb3c6IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWwpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZGV0YWlscycsIHJvdy5lcXVpcG1lbnRDYXJkTm9dLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVJvd1NlbGVjdGlvbihldmVudDogYW55LCByb3c6IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWwpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuc2hvd09uTWFwU2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSkge1xyXG4gICAgICB0aGlzLnNob3dPbk1hcFNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG9TaG93T25NYXAoKSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgJ3JlY29yZElkcycsXHJcbiAgICAgICAgdGhpcy5zaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWRcclxuICAgICAgICAgIC5tYXAoaW5zdHJ1bWVudCA9PiBpbnN0cnVtZW50LnNmSWQpXHJcbiAgICAgICAgICAuam9pbignLCcpXHJcbiAgICAgIClcclxuICAgICAgLnNldCgnYmFzZU9iamVjdElkJywgJ2Ewa1FvMDAwMDAybk5hRElBVScpXHJcbiAgICAgIC5zZXQoJ3Rvb2x0aXBGaWVsZCcsICdJbnRydW1lbnROYW1lX19jJylcclxuICAgICAgLnNldCgnem9vbScsICc4JylcclxuICAgICAgLnNldCgnY29sb3InLCAnIzY2RkYwMCcpO1xyXG5cclxuICAgIHdpbmRvdy5vcGVuKFxyXG4gICAgICBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hcGV4L21hcHNfX01hcHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxyXG4gICAgICAnX2JsYW5rJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVDb2x1bW5zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlTWFwQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zLnVuc2hpZnQoJ3NlbGVjdFRvTWFwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXBUYWJsZUNvbHVtbnMgPSB7XHJcbiAgICAgIGluc3RydW1lbnRObzogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0cnVtZW50Tm8nLFxyXG4gICAgICBpbnN0cnVtZW50RGVzY3JpcHRpb246XHJcbiAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0cnVtZW50RGVzY3JpcHRpb24nLFxyXG4gICAgICBzZXJpYWxOdW1iZXI6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc2VyaWFsTnVtYmVyJyxcclxuICAgICAgY3VzdG9tZXJObzogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50Tm8nLFxyXG4gICAgICBidXNpbmVzc1BhcnRuZXJOYW1lOiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmFjY291bnROYW1lJyxcclxuICAgICAgZW5kVXNlck5hbWU6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuZW5kQ3VzdG9tZXInLFxyXG4gICAgICBjaXR5OiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmNpdHknLFxyXG4gICAgICB0ZXJyaXRvcnlJZDogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC50ZXJyaXRvcnknLFxyXG4gICAgICBjb3VudHJ5OiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmNvdW50cnknLFxyXG4gICAgICBzdGF0dXM6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc3RhdHVzJyxcclxuICAgICAgaW5zdGFsbGF0aW9uRGF0ZTogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0YWxsYXRpb25EYXRlJyxcclxuICAgICAgc2VsZWN0VG9NYXA6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBzaG93LW9uLW1hcC1hY3Rpb25zXCIgKm5nSWY9XCJ1c2VNYXBCdXR0b25cIj5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgIFNlbGVjdGVkOiB7eyBzaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoIH19XHJcbiAgPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgQGZvciAoXHJcbiAgICAgIGluc3RydW1lbnQgb2Ygc2hvd09uTWFwU2VsZWN0aW9uLnNlbGVjdGVkO1xyXG4gICAgICB0cmFjayBpbnN0cnVtZW50LmVxdWlwbWVudENhcmROb1xyXG4gICAgKSB7XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT57eyBpbnN0cnVtZW50LmVxdWlwbWVudENhcmRObyB9fTwvYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAoY2xpY2spPVwicmVkaXJlY3RUb1Nob3dPbk1hcCgpXCJcclxuICAgIFtkaXNhYmxlZF09XCJzaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSAwXCJcclxuICA+XHJcbiAgICBTaG93IE9uIE1hcFxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjx0YWJsZVxyXG4gIG1hdC10YWJsZVxyXG4gIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxyXG4gIGNsYXNzPVwibm8taG92ZXJcIlxyXG4gIG1hdFNvcnRcclxuPlxyXG4gIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5cIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29sdW1uc1wiPlxyXG4gICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XHJcbiAgICAgIEBpZiAoY29sdW1uICE9PSAnc2VsZWN0VG9NYXAnKSB7XHJcbiAgICAgICAge3sgbWFwVGFibGVDb2x1bW5zW2NvbHVtbl0gfCB0cmFuc2xhdGUgfX1cclxuICAgICAgfSBAZWxzZSB7fVxyXG4gICAgPC90aD5cclxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgIEBpZiAoY29sdW1uID09PSAnc2VsZWN0VG9NYXAnKSB7XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic2hvd09uTWFwU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVJvd1NlbGVjdGlvbigkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWxlbWVudC5zZklkXCJcclxuICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIH0gQGVsc2UgaWYgKGNvbHVtbiA9PT0gJ2luc3RhbGxhdGlvbkRhdGUnKSB7XHJcbiAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwgc3REYXRlRm9ybWF0UGlwZSB9fVxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgfVxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJ0YWJsZUNvbHVtbnNcIj48L3RyPlxyXG4gIDx0clxyXG4gICAgbWF0LXJvd1xyXG4gICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHRhYmxlQ29sdW1uc1wiXHJcbiAgICAoY2xpY2spPVwicm93Q2xpY2tlZChyb3cpXCJcclxuICA+PC90cj5cclxuPC90YWJsZT5cclxuPG1hdC1wYWdpbmF0b3JcclxuICBbcGFnZVNpemVPcHRpb25zXT1cIlsxMCwgMjBdXCJcclxuICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXHJcbj48L21hdC1wYWdpbmF0b3I+XHJcbiJdfQ==
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXNhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0L3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHcEUsT0FBTyxFQUFFLE9BQU8sRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVB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QUFDLGVBQWUsR0FBRztZQUNyQixZQUFZLEVBQUUsMENBQTBDO1lBQ3hELHFCQUFxQixFQUNuQixtREFBbUQ7WUFDckQsWUFBWSxFQUFFLDBDQUEwQztZQUN4RCxVQUFVLEVBQUUsdUNBQXVDO1lBQ25ELG1CQUFtQixFQUFFLHlDQUF5QztZQUM5RCxXQUFXLEVBQUUseUNBQXlDO1lBQ3RELElBQUksRUFBRSxrQ0FBa0M7WUFDeEMsV0FBVyxFQUFFLHVDQUF1QztZQUNwRCxPQUFPLEVBQUUscUNBQXFDO1lBQzlDLE1BQU0sRUFBRSxvQ0FBb0M7WUFDNUMsZ0JBQWdCLEVBQUUsOENBQThDO1lBQ2hFLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7SUFDSixDQUFDOytHQTNJVSx3Q0FBd0M7bUdBQXhDLHdDQUF3QyxxT0FJeEMsWUFBWSxxRkFDWixPQUFPLHVFQ2xDcEIscXRFQXNFQTs7NEZEekNhLHdDQUF3QztrQkFOcEQsU0FBUzsrQkFDRSx5Q0FBeUMsbUJBR2xDLHVCQUF1QixDQUFDLE1BQU07cUxBTUosU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNyQixJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU87Z0JBR2QsU0FBUztzQkFEWixLQUFLO2dCQU1OLFlBQVk7c0JBRFgsS0FBSztnQkFJTixXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50IH0gZnJvbSAnbmd4LXN0LWJhc2UtZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXRTb3J0LCBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IEluc3RhbGxlZEluc3RydW1lbnRUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbnN0YWxsZWQtaW5zdHJ1bWVudC10YWJsZS1jb2x1bW5zLm1vZGVsJztcclxuaW1wb3J0IHsgU2FwSW5zdGFsbGVkSW5zdHJ1bWVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTYXBJbnN0YWxsZWRJbnN0cnVtZW50TGlzdFRhYmxlQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdGFibGVEYXRhKGRhdGE6IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWxbXSkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICB1c2VNYXBCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc29ydENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XHJcblxyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxTYXBJbnN0YWxsZWRJbnN0cnVtZW50TGlzdE1vZGVsPiA9XHJcbiAgICBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcblxyXG4gIHRhYmxlQ29sdW1uczogSW5zdGFsbGVkSW5zdHJ1bWVudFRhYmxlQ29sdW1uc01vZGVsW10gPSBbXHJcbiAgICAnaW5zdHJ1bWVudE5vJyxcclxuICAgICdpbnN0cnVtZW50RGVzY3JpcHRpb24nLFxyXG4gICAgJ3NlcmlhbE51bWJlcicsXHJcbiAgICAnY3VzdG9tZXJObycsXHJcbiAgICAnYnVzaW5lc3NQYXJ0bmVyTmFtZScsXHJcbiAgICAnZW5kVXNlck5hbWUnLFxyXG4gICAgJ2NpdHknLFxyXG4gICAgJ3RlcnJpdG9yeUlkJyxcclxuICAgICdjb3VudHJ5JyxcclxuICAgICdpbnN0YWxsYXRpb25EYXRlJyxcclxuICAgICdzdGF0dXMnLFxyXG4gIF07XHJcbiAgbWFwVGFibGVDb2x1bW5zOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nIH07XHJcblxyXG4gIHNob3dPbk1hcFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxTYXBJbnN0YWxsZWRJbnN0cnVtZW50TGlzdE1vZGVsPihcclxuICAgIHRydWVcclxuICApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgc2FwSW5zdGFsbGVkSW5zdHJ1bWVudHM6IFNhcEluc3RhbGxlZEluc3RydW1lbnRzU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFRhYmxlQ29sdW1ucygpO1xyXG4gICAgaWYgKCF0aGlzLnNhcEluc3RhbGxlZEluc3RydW1lbnRzLnRlcnJpdG9yeUZpbHRlcikge1xyXG4gICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVDb2x1bW5zLmZpbHRlcihcclxuICAgICAgICBjb2x1bW4gPT4gY29sdW1uICE9PSAndGVycml0b3J5SWQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuXHJcbiAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCkpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnNvcnRDaGFuZ2VkLmVtaXQocmVzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zS2V5cyA9IE9iamVjdC5rZXlzKFxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIHx8IHt9XHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcXVlcnlQYXJhbXNLZXlzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snYWN0aXZlJ10gJiZcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZGlyZWN0aW9uJ11cclxuICAgICkge1xyXG4gICAgICB0aGlzLnNvcnQuc29ydCh7XHJcbiAgICAgICAgaWQ6IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ2FjdGl2ZSddLFxyXG4gICAgICAgIHN0YXJ0OiB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydkaXJlY3Rpb24nXSxcclxuICAgICAgICBkaXNhYmxlQ2xlYXI6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJvd0NsaWNrZWQocm93OiBTYXBJbnN0YWxsZWRJbnN0cnVtZW50TGlzdE1vZGVsKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2RldGFpbHMnLCByb3cuZXF1aXBtZW50Q2FyZE5vXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VSb3dTZWxlY3Rpb24oZXZlbnQ6IGFueSwgcm93OiBTYXBJbnN0YWxsZWRJbnN0cnVtZW50TGlzdE1vZGVsKSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICh0aGlzLnNob3dPbk1hcFNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdykpIHtcclxuICAgICAgdGhpcy5zaG93T25NYXBTZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd09uTWFwU2VsZWN0aW9uLnNlbGVjdChyb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICByZWRpcmVjdFRvU2hvd09uTWFwKCkge1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAuc2V0KFxyXG4gICAgICAgICdyZWNvcmRJZHMnLFxyXG4gICAgICAgIHRoaXMuc2hvd09uTWFwU2VsZWN0aW9uLnNlbGVjdGVkXHJcbiAgICAgICAgICAubWFwKGluc3RydW1lbnQgPT4gaW5zdHJ1bWVudC5zZklkKVxyXG4gICAgICAgICAgLmpvaW4oJywnKVxyXG4gICAgICApXHJcbiAgICAgIC5zZXQoJ2Jhc2VPYmplY3RJZCcsICdhMGtRbzAwMDAwMm5OYURJQVUnKVxyXG4gICAgICAuc2V0KCd0b29sdGlwRmllbGQnLCAnSW50cnVtZW50TmFtZV9fYycpXHJcbiAgICAgIC5zZXQoJ3pvb20nLCAnOCcpXHJcbiAgICAgIC5zZXQoJ2NvbG9yJywgJyM2NkZGMDAnKTtcclxuXHJcbiAgICB3aW5kb3cub3BlbihcclxuICAgICAgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXBleC9tYXBzX19NYXBzPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCxcclxuICAgICAgJ19ibGFuaydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRhYmxlQ29sdW1ucygpIHtcclxuICAgIGlmICh0aGlzLnVzZU1hcEJ1dHRvbikge1xyXG4gICAgICB0aGlzLnRhYmxlQ29sdW1ucy51bnNoaWZ0KCdzZWxlY3RUb01hcCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWFwVGFibGVDb2x1bW5zID0ge1xyXG4gICAgICBpbnN0cnVtZW50Tm86ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuaW5zdHJ1bWVudE5vJyxcclxuICAgICAgaW5zdHJ1bWVudERlc2NyaXB0aW9uOlxyXG4gICAgICAgICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuaW5zdHJ1bWVudERlc2NyaXB0aW9uJyxcclxuICAgICAgc2VyaWFsTnVtYmVyOiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnNlcmlhbE51bWJlcicsXHJcbiAgICAgIGN1c3RvbWVyTm86ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuYWNjb3VudE5vJyxcclxuICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50TmFtZScsXHJcbiAgICAgIGVuZFVzZXJOYW1lOiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmVuZEN1c3RvbWVyJyxcclxuICAgICAgY2l0eTogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5jaXR5JyxcclxuICAgICAgdGVycml0b3J5SWQ6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQudGVycml0b3J5JyxcclxuICAgICAgY291bnRyeTogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5jb3VudHJ5JyxcclxuICAgICAgc3RhdHVzOiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LnN0YXR1cycsXHJcbiAgICAgIGluc3RhbGxhdGlvbkRhdGU6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuaW5zdGFsbGF0aW9uRGF0ZScsXHJcbiAgICAgIHNlbGVjdFRvTWFwOiAnJyxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWVuZCBzaG93LW9uLW1hcC1hY3Rpb25zXCIgKm5nSWY9XCJ1c2VNYXBCdXR0b25cIj5cclxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCI+XHJcbiAgICBTZWxlY3RlZDoge3sgc2hvd09uTWFwU2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCB9fVxyXG4gIDwvYnV0dG9uPlxyXG4gIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgIEBmb3IgKFxyXG4gICAgICBpbnN0cnVtZW50IG9mIHNob3dPbk1hcFNlbGVjdGlvbi5zZWxlY3RlZDtcclxuICAgICAgdHJhY2sgaW5zdHJ1bWVudC5pbnN0cnVtZW50Tm9cclxuICAgICkge1xyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0+e3sgaW5zdHJ1bWVudC5pbnN0cnVtZW50Tm8gfX08L2J1dHRvbj5cclxuICAgICAgPGRpdiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzaG93T25NYXBTZWxlY3Rpb24uZGVzZWxlY3QoaW5zdHJ1bWVudClcIj5cclxuICAgICAgICB7eyBpbnN0cnVtZW50Lmluc3RydW1lbnRObyB9fVxyXG4gICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiXHJcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDsgd2lkdGg6IDIwcHg7IGhlaWdodDogMjBweFwiXHJcbiAgICAgICAgICA+ZGVsZXRlPC9tYXQtaWNvblxyXG4gICAgICAgID5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9tYXQtbWVudT5cclxuICA8YnV0dG9uXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIChjbGljayk9XCJyZWRpcmVjdFRvU2hvd09uTWFwKClcIlxyXG4gICAgW2Rpc2FibGVkXT1cInNob3dPbk1hcFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IDBcIlxyXG4gID5cclxuICAgIFNob3cgT24gTWFwXHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG5cclxuPHRhYmxlXHJcbiAgbWF0LXRhYmxlXHJcbiAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgY2xhc3M9XCJuby1ob3ZlclwiXHJcbiAgbWF0U29ydFxyXG4+XHJcbiAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb2x1bW5zXCI+XHJcbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cclxuICAgICAgQGlmIChjb2x1bW4gIT09ICdzZWxlY3RUb01hcCcpIHtcclxuICAgICAgICB7eyBtYXBUYWJsZUNvbHVtbnNbY29sdW1uXSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICB9IEBlbHNlIHt9XHJcbiAgICA8L3RoPlxyXG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgQGlmIChjb2x1bW4gPT09ICdzZWxlY3RUb01hcCcpIHtcclxuICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic2hvd09uTWFwU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVJvd1NlbGVjdGlvbigkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWxlbWVudC5zZklkXCJcclxuICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIH0gQGVsc2UgaWYgKGNvbHVtbiA9PT0gJ2luc3RhbGxhdGlvbkRhdGUnKSB7XHJcbiAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwgc3REYXRlRm9ybWF0UGlwZSB9fVxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgfVxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJ0YWJsZUNvbHVtbnNcIj48L3RyPlxyXG4gIDx0clxyXG4gICAgbWF0LXJvd1xyXG4gICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHRhYmxlQ29sdW1uc1wiXHJcbiAgICAoY2xpY2spPVwicm93Q2xpY2tlZChyb3cpXCJcclxuICA+PC90cj5cclxuPC90YWJsZT5cclxuPG1hdC1wYWdpbmF0b3JcclxuICBbcGFnZVNpemVPcHRpb25zXT1cIlsxMCwgMjBdXCJcclxuICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXHJcbj48L21hdC1wYWdpbmF0b3I+XHJcbiJdfQ==
|