ngx-st-sap-installed-instruments 17.0.5 → 17.0.8

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.
@@ -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,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+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==
@@ -44,7 +44,7 @@ export class SapInstalledInstrumentListTableComponent extends StSubscribeDestroy
44
44
  'installationDate',
45
45
  'status',
46
46
  ];
47
- this.showOnMapSelection = new SelectionModel();
47
+ this.showOnMapSelection = new SelectionModel(true);
48
48
  }
49
49
  ngOnInit() {
50
50
  this.setTableColumns();
@@ -115,11 +115,11 @@ export class SapInstalledInstrumentListTableComponent extends StSubscribeDestroy
115
115
  };
116
116
  }
117
117
  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.equipmentCardNo\r\n ) {\r\n <button mat-menu-item>{{ instrument.equipmentCardNo }}</button>\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 [checked]=\"showOnMapSelection.isSelected(element)\"\r\n (change)=\"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}\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.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i8.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: i9.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i9.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.DateFormatPipe, name: "stDateFormatPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 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.equipmentCardNo\r\n ) {\r\n <button mat-menu-item>{{ instrument.equipmentCardNo }}</button>\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 [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}\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.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i8.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: i9.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i9.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.DateFormatPipe, name: "stDateFormatPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
119
119
  }
120
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SapInstalledInstrumentListTableComponent, decorators: [{
121
121
  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.equipmentCardNo\r\n ) {\r\n <button mat-menu-item>{{ instrument.equipmentCardNo }}</button>\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 [checked]=\"showOnMapSelection.isSelected(element)\"\r\n (change)=\"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}\n"] }]
122
+ 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.equipmentCardNo\r\n ) {\r\n <button mat-menu-item>{{ instrument.equipmentCardNo }}</button>\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 [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}\n"] }]
123
123
  }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.SapInstalledInstrumentsService }, { type: i0.ChangeDetectorRef }], propDecorators: { paginator: [{
124
124
  type: ViewChild,
125
125
  args: [MatPaginator, { static: true }]
@@ -133,4 +133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
133
133
  }], sortChanged: [{
134
134
  type: Output
135
135
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXNhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0L3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHcEUsT0FBTyxFQUFFLE9BQU8sRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVB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QUFHO1lBQ3JCLFlBQVksRUFBRSwwQ0FBMEM7WUFDeEQscUJBQXFCLEVBQ25CLG1EQUFtRDtZQUNyRCxZQUFZLEVBQUUsMENBQTBDO1lBQ3hELFVBQVUsRUFBRSx1Q0FBdUM7WUFDbkQsbUJBQW1CLEVBQUUseUNBQXlDO1lBQzlELFdBQVcsRUFBRSx5Q0FBeUM7WUFDdEQsSUFBSSxFQUFFLGtDQUFrQztZQUN4QyxXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELE9BQU8sRUFBRSxxQ0FBcUM7WUFDOUMsTUFBTSxFQUFFLG9DQUFvQztZQUM1QyxnQkFBZ0IsRUFBRSw4Q0FBOEM7WUFDaEUsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztJQUNKLENBQUM7K0dBeklVLHdDQUF3QzttR0FBeEMsd0NBQXdDLHFPQUl4QyxZQUFZLHFGQUNaLE9BQU8sdUVDbENwQiwrMkRBNkRBOzs0RkRoQ2Esd0NBQXdDO2tCQU5wRCxTQUFTOytCQUNFLHlDQUF5QyxtQkFHbEMsdUJBQXVCLENBQUMsTUFBTTtxTEFNSixTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ3JCLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFHZCxTQUFTO3NCQURaLEtBQUs7Z0JBTU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnQgfSBmcm9tICduZ3gtc3QtYmFzZS1mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgSW5zdGFsbGVkSW5zdHJ1bWVudFRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luc3RhbGxlZC1pbnN0cnVtZW50LXRhYmxlLWNvbHVtbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBJbnN0YWxsZWRJbnN0cnVtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0VGFibGVDb21wb25lbnRcclxuICBleHRlbmRzIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0XHJcbntcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB0YWJsZURhdGEoZGF0YTogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RNb2RlbFtdKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHVzZU1hcEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcclxuXHJcbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWw+ID1cclxuICAgIG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuXHJcbiAgdGFibGVDb2x1bW5zOiBJbnN0YWxsZWRJbnN0cnVtZW50VGFibGVDb2x1bW5zTW9kZWxbXSA9IFtcclxuICAgICdpbnN0cnVtZW50Tm8nLFxyXG4gICAgJ2luc3RydW1lbnREZXNjcmlwdGlvbicsXHJcbiAgICAnc2VyaWFsTnVtYmVyJyxcclxuICAgICdjdXN0b21lck5vJyxcclxuICAgICdidXNpbmVzc1BhcnRuZXJOYW1lJyxcclxuICAgICdlbmRVc2VyTmFtZScsXHJcbiAgICAnY2l0eScsXHJcbiAgICAndGVycml0b3J5SWQnLFxyXG4gICAgJ2NvdW50cnknLFxyXG4gICAgJ2luc3RhbGxhdGlvbkRhdGUnLFxyXG4gICAgJ3N0YXR1cycsXHJcbiAgXTtcclxuICBtYXBUYWJsZUNvbHVtbnM6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgc2hvd09uTWFwU2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWw+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBzYXBJbnN0YWxsZWRJbnN0cnVtZW50czogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VGFibGVDb2x1bW5zKCk7XHJcbiAgICBpZiAoIXRoaXMuc2FwSW5zdGFsbGVkSW5zdHJ1bWVudHMudGVycml0b3J5RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy50YWJsZUNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAgIGNvbHVtbiA9PiBjb2x1bW4gIT09ICd0ZXJyaXRvcnlJZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG5cclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChyZXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcXVlcnlQYXJhbXNLZXlzID0gT2JqZWN0LmtleXMoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge31cclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBxdWVyeVBhcmFtc0tleXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydhY3RpdmUnXSAmJlxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydkaXJlY3Rpb24nXVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc29ydC5zb3J0KHtcclxuICAgICAgICBpZDogdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snYWN0aXZlJ10sXHJcbiAgICAgICAgc3RhcnQ6IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ2RpcmVjdGlvbiddLFxyXG4gICAgICAgIGRpc2FibGVDbGVhcjogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm93Q2xpY2tlZChyb3c6IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWwpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZGV0YWlscycsIHJvdy5lcXVpcG1lbnRDYXJkTm9dLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVJvd1NlbGVjdGlvbihldmVudDogYW55LCByb3c6IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWwpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuc2hvd09uTWFwU2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSkge1xyXG4gICAgICB0aGlzLnNob3dPbk1hcFNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG9TaG93T25NYXAoKSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgJ3JlY29yZElkcycsXHJcbiAgICAgICAgdGhpcy5zaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWRcclxuICAgICAgICAgIC5tYXAoaW5zdHJ1bWVudCA9PiBpbnN0cnVtZW50LnNmSWQpXHJcbiAgICAgICAgICAuam9pbignLCcpXHJcbiAgICAgIClcclxuICAgICAgLnNldCgnYmFzZU9iamVjdElkJywgJ2Ewa1FvMDAwMDAybk5hRElBVScpXHJcbiAgICAgIC5zZXQoJ3Rvb2x0aXBGaWVsZCcsICdJbnRydW1lbnROYW1lX19jJylcclxuICAgICAgLnNldCgnem9vbScsICc4JylcclxuICAgICAgLnNldCgnY29sb3InLCAnIzY2RkYwMCcpO1xyXG5cclxuICAgIHdpbmRvdy5vcGVuKFxyXG4gICAgICBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hcGV4L21hcHNfX01hcHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxyXG4gICAgICAnX2JsYW5rJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVDb2x1bW5zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlTWFwQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zLnVuc2hpZnQoJ3NlbGVjdFRvTWFwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXBUYWJsZUNvbHVtbnMgPSB7XHJcbiAgICAgIGluc3RydW1lbnRObzogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0cnVtZW50Tm8nLFxyXG4gICAgICBpbnN0cnVtZW50RGVzY3JpcHRpb246XHJcbiAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0cnVtZW50RGVzY3JpcHRpb24nLFxyXG4gICAgICBzZXJpYWxOdW1iZXI6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc2VyaWFsTnVtYmVyJyxcclxuICAgICAgY3VzdG9tZXJObzogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50Tm8nLFxyXG4gICAgICBidXNpbmVzc1BhcnRuZXJOYW1lOiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmFjY291bnROYW1lJyxcclxuICAgICAgZW5kVXNlck5hbWU6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuZW5kQ3VzdG9tZXInLFxyXG4gICAgICBjaXR5OiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmNpdHknLFxyXG4gICAgICB0ZXJyaXRvcnlJZDogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC50ZXJyaXRvcnknLFxyXG4gICAgICBjb3VudHJ5OiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmNvdW50cnknLFxyXG4gICAgICBzdGF0dXM6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc3RhdHVzJyxcclxuICAgICAgaW5zdGFsbGF0aW9uRGF0ZTogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0YWxsYXRpb25EYXRlJyxcclxuICAgICAgc2VsZWN0VG9NYXA6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBzaG93LW9uLW1hcC1hY3Rpb25zXCIgKm5nSWY9XCJ1c2VNYXBCdXR0b25cIj5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgIFNlbGVjdGVkOiB7eyBzaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoIH19XHJcbiAgPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgQGZvciAoXHJcbiAgICAgIGluc3RydW1lbnQgb2Ygc2hvd09uTWFwU2VsZWN0aW9uLnNlbGVjdGVkO1xyXG4gICAgICB0cmFjayBpbnN0cnVtZW50LmVxdWlwbWVudENhcmROb1xyXG4gICAgKSB7XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT57eyBpbnN0cnVtZW50LmVxdWlwbWVudENhcmRObyB9fTwvYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAoY2xpY2spPVwicmVkaXJlY3RUb1Nob3dPbk1hcCgpXCJcclxuICAgIFtkaXNhYmxlZF09XCJzaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSAwXCJcclxuICA+XHJcbiAgICBTaG93IE9uIE1hcFxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjx0YWJsZVxyXG4gIG1hdC10YWJsZVxyXG4gIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxyXG4gIGNsYXNzPVwibm8taG92ZXJcIlxyXG4gIG1hdFNvcnRcclxuPlxyXG4gIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5cIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29sdW1uc1wiPlxyXG4gICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XHJcbiAgICAgIEBpZiAoY29sdW1uICE9PSAnc2VsZWN0VG9NYXAnKSB7XHJcbiAgICAgICAge3sgbWFwVGFibGVDb2x1bW5zW2NvbHVtbl0gfCB0cmFuc2xhdGUgfX1cclxuICAgICAgfSBAZWxzZSB7fVxyXG4gICAgPC90aD5cclxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgIEBpZiAoY29sdW1uID09PSAnc2VsZWN0VG9NYXAnKSB7XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic2hvd09uTWFwU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VSb3dTZWxlY3Rpb24oJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVsZW1lbnQuc2ZJZFwiXHJcbiAgICAgICAgPjwvbWF0LWNoZWNrYm94PlxyXG4gICAgICB9IEBlbHNlIGlmIChjb2x1bW4gPT09ICdpbnN0YWxsYXRpb25EYXRlJykge1xyXG4gICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB8IHN0RGF0ZUZvcm1hdFBpcGUgfX1cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIH19XHJcbiAgICAgIH1cclxuICAgIDwvdGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwidGFibGVDb2x1bW5zXCI+PC90cj5cclxuICA8dHJcclxuICAgIG1hdC1yb3dcclxuICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiB0YWJsZUNvbHVtbnNcIlxyXG4gICAgKGNsaWNrKT1cInJvd0NsaWNrZWQocm93KVwiXHJcbiAgPjwvdHI+XHJcbjwvdGFibGU+XHJcbjxtYXQtcGFnaW5hdG9yXHJcbiAgW3BhZ2VTaXplT3B0aW9uc109XCJbMTAsIDIwXVwiXHJcbiAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxyXG4+PC9tYXQtcGFnaW5hdG9yPlxyXG4iXX0=
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXNhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0L3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlL3NhcC1pbnN0YWxsZWQtaW5zdHJ1bWVudC1saXN0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdC1zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHcEUsT0FBTyxFQUFFLE9BQU8sRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVB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QUMsZUFBZSxHQUFHO1lBQ3JCLFlBQVksRUFBRSwwQ0FBMEM7WUFDeEQscUJBQXFCLEVBQ25CLG1EQUFtRDtZQUNyRCxZQUFZLEVBQUUsMENBQTBDO1lBQ3hELFVBQVUsRUFBRSx1Q0FBdUM7WUFDbkQsbUJBQW1CLEVBQUUseUNBQXlDO1lBQzlELFdBQVcsRUFBRSx5Q0FBeUM7WUFDdEQsSUFBSSxFQUFFLGtDQUFrQztZQUN4QyxXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELE9BQU8sRUFBRSxxQ0FBcUM7WUFDOUMsTUFBTSxFQUFFLG9DQUFvQztZQUM1QyxnQkFBZ0IsRUFBRSw4Q0FBOEM7WUFDaEUsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztJQUNKLENBQUM7K0dBM0lVLHdDQUF3QzttR0FBeEMsd0NBQXdDLHFPQUl4QyxZQUFZLHFGQUNaLE9BQU8sdUVDbENwQix5NERBNkRBOzs0RkRoQ2Esd0NBQXdDO2tCQU5wRCxTQUFTOytCQUNFLHlDQUF5QyxtQkFHbEMsdUJBQXVCLENBQUMsTUFBTTtxTEFNSixTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ3JCLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFHZCxTQUFTO3NCQURaLEtBQUs7Z0JBTU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnQgfSBmcm9tICduZ3gtc3QtYmFzZS1mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgSW5zdGFsbGVkSW5zdHJ1bWVudFRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2luc3RhbGxlZC1pbnN0cnVtZW50LXRhYmxlLWNvbHVtbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBTYXBJbnN0YWxsZWRJbnN0cnVtZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXAtaW5zdGFsbGVkLWluc3RydW1lbnQtbGlzdC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2FwLWluc3RhbGxlZC1pbnN0cnVtZW50LWxpc3QtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0VGFibGVDb21wb25lbnRcclxuICBleHRlbmRzIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0XHJcbntcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB0YWJsZURhdGEoZGF0YTogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudExpc3RNb2RlbFtdKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHVzZU1hcEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcclxuXHJcbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWw+ID1cclxuICAgIG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuXHJcbiAgdGFibGVDb2x1bW5zOiBJbnN0YWxsZWRJbnN0cnVtZW50VGFibGVDb2x1bW5zTW9kZWxbXSA9IFtcclxuICAgICdpbnN0cnVtZW50Tm8nLFxyXG4gICAgJ2luc3RydW1lbnREZXNjcmlwdGlvbicsXHJcbiAgICAnc2VyaWFsTnVtYmVyJyxcclxuICAgICdjdXN0b21lck5vJyxcclxuICAgICdidXNpbmVzc1BhcnRuZXJOYW1lJyxcclxuICAgICdlbmRVc2VyTmFtZScsXHJcbiAgICAnY2l0eScsXHJcbiAgICAndGVycml0b3J5SWQnLFxyXG4gICAgJ2NvdW50cnknLFxyXG4gICAgJ2luc3RhbGxhdGlvbkRhdGUnLFxyXG4gICAgJ3N0YXR1cycsXHJcbiAgXTtcclxuICBtYXBUYWJsZUNvbHVtbnM6IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgc2hvd09uTWFwU2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWw+KFxyXG4gICAgdHJ1ZVxyXG4gICk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBzYXBJbnN0YWxsZWRJbnN0cnVtZW50czogU2FwSW5zdGFsbGVkSW5zdHJ1bWVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VGFibGVDb2x1bW5zKCk7XHJcbiAgICBpZiAoIXRoaXMuc2FwSW5zdGFsbGVkSW5zdHJ1bWVudHMudGVycml0b3J5RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy50YWJsZUNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAgIGNvbHVtbiA9PiBjb2x1bW4gIT09ICd0ZXJyaXRvcnlJZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG5cclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChyZXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcXVlcnlQYXJhbXNLZXlzID0gT2JqZWN0LmtleXMoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfHwge31cclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBxdWVyeVBhcmFtc0tleXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydhY3RpdmUnXSAmJlxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydkaXJlY3Rpb24nXVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc29ydC5zb3J0KHtcclxuICAgICAgICBpZDogdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snYWN0aXZlJ10sXHJcbiAgICAgICAgc3RhcnQ6IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ2RpcmVjdGlvbiddLFxyXG4gICAgICAgIGRpc2FibGVDbGVhcjogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm93Q2xpY2tlZChyb3c6IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWwpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZGV0YWlscycsIHJvdy5lcXVpcG1lbnRDYXJkTm9dLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVJvd1NlbGVjdGlvbihldmVudDogYW55LCByb3c6IFNhcEluc3RhbGxlZEluc3RydW1lbnRMaXN0TW9kZWwpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuc2hvd09uTWFwU2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSkge1xyXG4gICAgICB0aGlzLnNob3dPbk1hcFNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG9TaG93T25NYXAoKSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXHJcbiAgICAgICAgJ3JlY29yZElkcycsXHJcbiAgICAgICAgdGhpcy5zaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWRcclxuICAgICAgICAgIC5tYXAoaW5zdHJ1bWVudCA9PiBpbnN0cnVtZW50LnNmSWQpXHJcbiAgICAgICAgICAuam9pbignLCcpXHJcbiAgICAgIClcclxuICAgICAgLnNldCgnYmFzZU9iamVjdElkJywgJ2Ewa1FvMDAwMDAybk5hRElBVScpXHJcbiAgICAgIC5zZXQoJ3Rvb2x0aXBGaWVsZCcsICdJbnRydW1lbnROYW1lX19jJylcclxuICAgICAgLnNldCgnem9vbScsICc4JylcclxuICAgICAgLnNldCgnY29sb3InLCAnIzY2RkYwMCcpO1xyXG5cclxuICAgIHdpbmRvdy5vcGVuKFxyXG4gICAgICBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hcGV4L21hcHNfX01hcHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxyXG4gICAgICAnX2JsYW5rJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGFibGVDb2x1bW5zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlTWFwQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMudGFibGVDb2x1bW5zLnVuc2hpZnQoJ3NlbGVjdFRvTWFwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXBUYWJsZUNvbHVtbnMgPSB7XHJcbiAgICAgIGluc3RydW1lbnRObzogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0cnVtZW50Tm8nLFxyXG4gICAgICBpbnN0cnVtZW50RGVzY3JpcHRpb246XHJcbiAgICAgICAgJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0cnVtZW50RGVzY3JpcHRpb24nLFxyXG4gICAgICBzZXJpYWxOdW1iZXI6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc2VyaWFsTnVtYmVyJyxcclxuICAgICAgY3VzdG9tZXJObzogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5hY2NvdW50Tm8nLFxyXG4gICAgICBidXNpbmVzc1BhcnRuZXJOYW1lOiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmFjY291bnROYW1lJyxcclxuICAgICAgZW5kVXNlck5hbWU6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuZW5kQ3VzdG9tZXInLFxyXG4gICAgICBjaXR5OiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmNpdHknLFxyXG4gICAgICB0ZXJyaXRvcnlJZDogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC50ZXJyaXRvcnknLFxyXG4gICAgICBjb3VudHJ5OiAnc2FwQWRtaW5JbnN0YWxsZWRJbnN0cnVtZW50LmNvdW50cnknLFxyXG4gICAgICBzdGF0dXM6ICdzYXBBZG1pbkluc3RhbGxlZEluc3RydW1lbnQuc3RhdHVzJyxcclxuICAgICAgaW5zdGFsbGF0aW9uRGF0ZTogJ3NhcEFkbWluSW5zdGFsbGVkSW5zdHJ1bWVudC5pbnN0YWxsYXRpb25EYXRlJyxcclxuICAgICAgc2VsZWN0VG9NYXA6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHNob3ctb24tbWFwLWFjdGlvbnNcIiAqbmdJZj1cInVzZU1hcEJ1dHRvblwiPlxyXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgIFNlbGVjdGVkOiB7eyBzaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoIH19XHJcbiAgPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgQGZvciAoXHJcbiAgICAgIGluc3RydW1lbnQgb2Ygc2hvd09uTWFwU2VsZWN0aW9uLnNlbGVjdGVkO1xyXG4gICAgICB0cmFjayBpbnN0cnVtZW50LmVxdWlwbWVudENhcmROb1xyXG4gICAgKSB7XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT57eyBpbnN0cnVtZW50LmVxdWlwbWVudENhcmRObyB9fTwvYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAoY2xpY2spPVwicmVkaXJlY3RUb1Nob3dPbk1hcCgpXCJcclxuICAgIFtkaXNhYmxlZF09XCJzaG93T25NYXBTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID09PSAwXCJcclxuICA+XHJcbiAgICBTaG93IE9uIE1hcFxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjx0YWJsZVxyXG4gIG1hdC10YWJsZVxyXG4gIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxyXG4gIGNsYXNzPVwibm8taG92ZXJcIlxyXG4gIG1hdFNvcnRcclxuPlxyXG4gIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5cIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29sdW1uc1wiPlxyXG4gICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XHJcbiAgICAgIEBpZiAoY29sdW1uICE9PSAnc2VsZWN0VG9NYXAnKSB7XHJcbiAgICAgICAge3sgbWFwVGFibGVDb2x1bW5zW2NvbHVtbl0gfCB0cmFuc2xhdGUgfX1cclxuICAgICAgfSBAZWxzZSB7fVxyXG4gICAgPC90aD5cclxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XHJcbiAgICAgIEBpZiAoY29sdW1uID09PSAnc2VsZWN0VG9NYXAnKSB7XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwic2hvd09uTWFwU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVJvd1NlbGVjdGlvbigkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWxlbWVudC5zZklkXCJcclxuICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIH0gQGVsc2UgaWYgKGNvbHVtbiA9PT0gJ2luc3RhbGxhdGlvbkRhdGUnKSB7XHJcbiAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwgc3REYXRlRm9ybWF0UGlwZSB9fVxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgfVxyXG4gICAgPC90ZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJ0YWJsZUNvbHVtbnNcIj48L3RyPlxyXG4gIDx0clxyXG4gICAgbWF0LXJvd1xyXG4gICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHRhYmxlQ29sdW1uc1wiXHJcbiAgICAoY2xpY2spPVwicm93Q2xpY2tlZChyb3cpXCJcclxuICA+PC90cj5cclxuPC90YWJsZT5cclxuPG1hdC1wYWdpbmF0b3JcclxuICBbcGFnZVNpemVPcHRpb25zXT1cIlsxMCwgMjBdXCJcclxuICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXHJcbj48L21hdC1wYWdpbmF0b3I+XHJcbiJdfQ==