ngx-st-tables 17.0.64 → 17.0.65

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.
@@ -69,7 +69,7 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
69
69
  initFilters: this.filters,
70
70
  columns: this.columns,
71
71
  },
72
- maxWidth: '450px',
72
+ maxWidth: '550px',
73
73
  width: '100%',
74
74
  autoFocus: false,
75
75
  })
@@ -128,8 +128,15 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
128
128
  }
129
129
  setActiveFiltersCount() {
130
130
  const filtersKeys = Object.keys(this.filters);
131
- this.activeFiltersCount =
132
- filtersKeys.filter(key => this.filters[key]).length || 0;
131
+ this.activeFiltersCount = filtersKeys.filter(key => {
132
+ const filterValue = this.filters[key]?.value;
133
+ if (Array.isArray(filterValue)) {
134
+ // Dla filtrów typu date (które są tablicami)
135
+ return filterValue.some(value => value !== null && value !== '');
136
+ }
137
+ // Dla pozostałych typów filtrów
138
+ return filterValue !== null && filterValue !== '';
139
+ }).length;
133
140
  }
134
141
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MaterialTableCaptionComponent, deps: [{ token: i1.StTablesTranslationsService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
135
142
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MaterialTableCaptionComponent, selector: "st-material-table-caption", inputs: { showGlobalSearch: { classPropertyName: "showGlobalSearch", publicName: "showGlobalSearch", isSignal: true, isRequired: false, transformFunction: null }, tableTitle: { classPropertyName: "tableTitle", publicName: "tableTitle", isSignal: true, isRequired: false, transformFunction: null }, allowPickColumns: { classPropertyName: "allowPickColumns", publicName: "allowPickColumns", isSignal: true, isRequired: false, transformFunction: null }, allowReorderColumns: { classPropertyName: "allowReorderColumns", publicName: "allowReorderColumns", isSignal: true, isRequired: false, transformFunction: null }, initGlobalSearch: { classPropertyName: "initGlobalSearch", publicName: "initGlobalSearch", isSignal: true, isRequired: false, transformFunction: null }, initFilters: { classPropertyName: "initFilters", publicName: "initFilters", isSignal: true, isRequired: false, transformFunction: null }, showCreateButton: { classPropertyName: "showCreateButton", publicName: "showCreateButton", isSignal: true, isRequired: false, transformFunction: null }, createButtonLabel: { classPropertyName: "createButtonLabel", publicName: "createButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, createButtonAction: { classPropertyName: "createButtonAction", publicName: "createButtonAction", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { captionDataChanged: "captionDataChanged", resetTableSettings: "resetTableSettings" }, usesInheritance: true, ngImport: i0, template: "@if (\r\n allowPickColumns() ||\r\n tableTitle() ||\r\n allowReorderColumns() ||\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton()\r\n) {\r\n <div\r\n class=\"st-material-table-caption row align-items-center\"\r\n [ngClass]=\"{\r\n 'justify-content-between':\r\n (allowPickColumns() || tableTitle() || allowReorderColumns()) &&\r\n (showGlobalSearch() || showFilterButton || showCreateButton()),\r\n 'justify-content-end':\r\n !allowPickColumns() && !tableTitle() && !allowReorderColumns()\r\n }\"\r\n >\r\n @if (allowPickColumns() || tableTitle() || allowReorderColumns()) {\r\n <div class=\"col-auto d-flex align-items-center\">\r\n @if (tableTitle()) {\r\n <p class=\"table-title\">{{ tableTitle() }}</p>\r\n }\r\n\r\n @if (allowPickColumns()) {\r\n <mat-form-field appearance=\"outline\" class=\"caption-select-columns\">\r\n <mat-select [formControl]=\"selectedColumns\" multiple>\r\n <mat-select-trigger>\r\n {{ selectedColumns.value ? selectedColumns.value!.length : 0 }}\r\n columns selected\r\n </mat-select-trigger>\r\n @for (column of columns; track column.field) {\r\n <mat-option\r\n [value]=\"column.field\"\r\n [disabled]=\"column.type === 'actions'\"\r\n style=\"text-transform: capitalize\"\r\n >{{\r\n column.selectColumnLabel || column.header || column.field\r\n }}</mat-option\r\n >\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @if (allowPickColumns() || tableTitle()) {\r\n <button mat-icon-button (click)=\"resetTable()\">\r\n <mat-icon class=\"reorder-icon\">refresh</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowReorderColumns()) {\r\n <button mat-icon-button (click)=\"openReorderColumnsDialog()\">\r\n <mat-icon class=\"reorder-icon\">low_priority</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (showGlobalSearch() || showFilterButton || showCreateButton()) {\r\n <div class=\"col-auto d-flex align-items-center gap-1\">\r\n @if (showFilterButton) {\r\n <!-- @if (activeFiltersCount) {-->\r\n <!-- <button-->\r\n <!-- mat-icon-button-->\r\n <!-- (click)=\"clearAllFilters()\"-->\r\n <!-- [matTooltip]=\"'Clear Filters'\"-->\r\n <!-- >-->\r\n <!-- <mat-icon>filter_alt_off</mat-icon>-->\r\n <!-- </button>-->\r\n <!-- }-->\r\n\r\n <button mat-icon-button (click)=\"openFilterDialog()\">\r\n <mat-icon\r\n [matBadge]=\"activeFiltersCount\"\r\n [matBadgeHidden]=\"!activeFiltersCount\"\r\n [matBadgeSize]=\"'small'\"\r\n matBadgePosition=\"before\"\r\n >filter_alt</mat-icon\r\n >\r\n </button>\r\n }\r\n\r\n @if (showGlobalSearch()) {\r\n <mat-form-field appearance=\"outline\" class=\"search-field\">\r\n <input\r\n matInput\r\n [formControl]=\"globalSearch\"\r\n [placeholder]=\"\r\n stTableTranslations.getTranslations()().globalSearch\r\n \"\r\n />\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"globalSearch.setValue('')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n\r\n @if (showCreateButton()) {\r\n <button\r\n color=\"primary\"\r\n mat-flat-button\r\n (click)=\"createButtonAction()()\"\r\n >\r\n {{ createButtonLabel() }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n", styles: [".st-material-table-caption{width:100%;margin-top:5px;margin-bottom:5px;padding:0 5px;min-height:48px}.st-material-table-caption>.col-auto{padding:0}.st-material-table-caption .search-field{max-width:210px}.st-material-table-caption .table-title{font-size:1.2rem;margin-bottom:0;font-weight:500}.st-material-table-caption .reorder-icon{transform:scaleX(-1) rotate(90deg)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { 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: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i9.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: "directive", type: i9.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i11.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -140,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
140
147
  }], ctorParameters: () => [{ type: i1.StTablesTranslationsService }, { type: i2.MatDialog }], propDecorators: { columns: [{
141
148
  type: Input
142
149
  }] } });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtY2FwdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWNhcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLDJCQUEyQixHQUM1QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLGtDQUFrQyxHQUVuQyxNQUFNLHVFQUF1RSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLG1GQUFtRixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUzVJLE1BQU0sT0FBTyw2QkFDWCxTQUFRLDJCQUEyQjtJQXVCbkMsSUFDSSxPQUFPLENBQUMsSUFBc0M7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FB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QUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxrQkFBa0I7WUFDckIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7K0dBbktVLDZCQUE2QjttR0FBN0IsNkJBQTZCLHNwRENuQzFDLGttSUFvSEE7OzRGRGpGYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNO3dIQTJCM0MsT0FBTztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIGlucHV0LFxyXG4gIG91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3ZpZXcvdmlldy1zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBTdEJhc2VTZXJ2aWNlLFxyXG4gIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudCxcclxufSBmcm9tICduZ3gtc3QtYmFzZS1mdW5jdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIGRlYm91bmNlVGltZSxcclxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICBmaWx0ZXIsXHJcbiAgdGFrZSxcclxuICB0YWtlVW50aWwsXHJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge1xyXG4gIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQsXHJcbiAgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ1Jlc3VsdCxcclxufSBmcm9tICcuL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbFRhYmxlT3JkZXJDb2x1bW5EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21hdGVyaWFsLXRhYmxlLW9yZGVyLWNvbHVtbi1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtb3JkZXItY29sdW1uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdC10YWJsZXMtdHJhbnNsYXRpb25zLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUYWJsZUNhcHRpb25Db21wb25lbnRcclxuICBleHRlbmRzIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICBzaG93R2xvYmFsU2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4oKTtcclxuXHJcbiAgdGFibGVUaXRsZSA9IGlucHV0KCcnKTtcclxuXHJcbiAgYWxsb3dQaWNrQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBhbGxvd1Jlb3JkZXJDb2x1bW5zID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIGluaXRHbG9iYWxTZWFyY2ggPSBpbnB1dCgnJyk7XHJcblxyXG4gIGluaXRGaWx0ZXJzID0gaW5wdXQ8e1xyXG4gICAgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyO1xyXG4gIH0+KHt9KTtcclxuXHJcbiAgc2hvd0NyZWF0ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY3JlYXRlQnV0dG9uTGFiZWwgPSBpbnB1dCgnQ3JlYXRlJyk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkFjdGlvbiA9IGlucHV0PCgpID0+IHZvaWQ+KCgpID0+IHt9KTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sdW1ucyhkYXRhOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSkge1xyXG4gICAgdGhpcy5fY29sdW1ucyA9IGRhdGEgPyBkYXRhIDogW107XHJcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb2x1bW5zOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSA9IFtdO1xyXG5cclxuICBjYXB0aW9uRGF0YUNoYW5nZWQgPSBvdXRwdXQ8SUNhcHRpb25EYXRhQ2hhbmdlZD4oKTtcclxuXHJcbiAgcmVzZXRUYWJsZVNldHRpbmdzID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHNob3dGaWx0ZXJCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0ZWRDb2x1bW5zID0gbmV3IEZvcm1Db250cm9sKDxzdHJpbmdbXT5bXSk7XHJcbiAgZ2xvYmFsU2VhcmNoID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuXHJcbiAgYWN0aXZlRmlsdGVyc0NvdW50ID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBjb2x1bW5zT3JkZXI6IHN0cmluZ1tdID0gW107XHJcbiAgcHJpdmF0ZSBmaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHN0VGFibGVUcmFuc2xhdGlvbnM6IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoLnNldFZhbHVlKHRoaXMuaW5pdEdsb2JhbFNlYXJjaCgpIHx8ICcnKTtcclxuICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuaW5pdEZpbHRlcnMoKSB8fCB7fTtcclxuICAgIHRoaXMuc2V0QWN0aXZlRmlsdGVyc0NvdW50KCk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXHJcbiAgICAgICAgICAocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoNDAwKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuZW1pdENhcHRpb25EYXRhQ2hhbmdlZCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSg0MDApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZpbHRlckRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgIC5vcGVuKE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBpbml0RmlsdGVyczogdGhpcy5maWx0ZXJzLFxyXG4gICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWF4V2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlKDEpLCBmaWx0ZXIoU3RCYXNlU2VydmljZS5ub3ROdWxsKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gcmVzLmZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVGaWx0ZXJzQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuUmVvcmRlckNvbHVtbnNEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAub3BlbihNYXRlcmlhbFRhYmxlT3JkZXJDb2x1bW5EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhXaWR0aDogJzQ1MHB4JyxcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2UoMSksIGZpbHRlcihTdEJhc2VTZXJ2aWNlLm5vdE51bGwpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IHsgY29sdW1uc09yZGVyOiBzdHJpbmdbXSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXIgPSByZXN1bHQuY29sdW1uc09yZGVyO1xyXG4gICAgICAgIHRoaXMuZW1pdENhcHRpb25EYXRhQ2hhbmdlZCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0VGFibGUoKSB7XHJcbiAgICB0aGlzLnJlc2V0VGFibGVTZXR0aW5ncy5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXJBbGxGaWx0ZXJzKCkge1xyXG4gIC8vICAgY29uc3QgZmlsdGVyc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcnMpO1xyXG4gIC8vICAgZmlsdGVyc0tleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gIC8vICAgICBpZiAodGhpcy5maWx0ZXJzW2tleV0pIHtcclxuICAvLyAgICAgICB0aGlzLmZpbHRlcnNba2V5XSA9ICcnO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvL1xyXG4gIC8vICAgdGhpcy5zZXRBY3RpdmVGaWx0ZXJzQ291bnQoKTtcclxuICAvLyAgIHRoaXMuZW1pdENhcHRpb25EYXRhQ2hhbmdlZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5jYXB0aW9uRGF0YUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgIHNlbGVjdGVkQ29sdW1uczogdGhpcy5zZWxlY3RlZENvbHVtbnMudmFsdWUgfHwgW10sXHJcbiAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy5nbG9iYWxTZWFyY2gudmFsdWUgfHwgJycsXHJcbiAgICAgIGNvbHVtbnNPcmRlcjogdGhpcy5jb2x1bW5zT3JkZXIgfHwgW10sXHJcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zKCkge1xyXG4gICAgY29uc3QgY29sdW1uc0ZpbHRlcnMgPSB0aGlzLl9jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlcik7XHJcbiAgICB0aGlzLnNob3dGaWx0ZXJCdXR0b24gPSBjb2x1bW5zRmlsdGVycy5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMuX2NvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZSkubWFwKGNvbCA9PiBjb2wuZmllbGQpIHx8IFtdXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb2x1bW5zT3JkZXIgPSB0aGlzLl9jb2x1bW5zLm1hcChjb2wgPT4gY29sLmZpZWxkKSB8fCBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QWN0aXZlRmlsdGVyc0NvdW50KCkge1xyXG4gICAgY29uc3QgZmlsdGVyc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcnMpO1xyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJzQ291bnQgPVxyXG4gICAgICBmaWx0ZXJzS2V5cy5maWx0ZXIoa2V5ID0+IHRoaXMuZmlsdGVyc1trZXldKS5sZW5ndGggfHwgMDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNhcHRpb25EYXRhQ2hhbmdlZCB7XHJcbiAgc2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBnbG9iYWxTZWFyY2g6IHN0cmluZztcclxuICBjb2x1bW5zT3JkZXI6IHN0cmluZ1tdO1xyXG4gIGZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RNYXRlcmlhbFRhYmxlRmlsdGVyIHtcclxuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdO1xyXG4gIG1hdGNoTW9kZTogJ2VxdWFsJyB8ICdjb250YWlucycgfCAnYmV0d2Vlbic7XHJcbn1cclxuIiwiQGlmIChcclxuICBhbGxvd1BpY2tDb2x1bW5zKCkgfHxcclxuICB0YWJsZVRpdGxlKCkgfHxcclxuICBhbGxvd1Jlb3JkZXJDb2x1bW5zKCkgfHxcclxuICBzaG93R2xvYmFsU2VhcmNoKCkgfHxcclxuICBzaG93RmlsdGVyQnV0dG9uIHx8XHJcbiAgc2hvd0NyZWF0ZUJ1dHRvbigpXHJcbikge1xyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwic3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvbiByb3cgYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJzpcclxuICAgICAgICAoYWxsb3dQaWNrQ29sdW1ucygpIHx8IHRhYmxlVGl0bGUoKSB8fCBhbGxvd1Jlb3JkZXJDb2x1bW5zKCkpICYmXHJcbiAgICAgICAgKHNob3dHbG9iYWxTZWFyY2goKSB8fCBzaG93RmlsdGVyQnV0dG9uIHx8IHNob3dDcmVhdGVCdXR0b24oKSksXHJcbiAgICAgICdqdXN0aWZ5LWNvbnRlbnQtZW5kJzpcclxuICAgICAgICAhYWxsb3dQaWNrQ29sdW1ucygpICYmICF0YWJsZVRpdGxlKCkgJiYgIWFsbG93UmVvcmRlckNvbHVtbnMoKVxyXG4gICAgfVwiXHJcbiAgPlxyXG4gICAgQGlmIChhbGxvd1BpY2tDb2x1bW5zKCkgfHwgdGFibGVUaXRsZSgpIHx8IGFsbG93UmVvcmRlckNvbHVtbnMoKSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIEBpZiAodGFibGVUaXRsZSgpKSB7XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgdGFibGVUaXRsZSgpIH19PC9wPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChhbGxvd1BpY2tDb2x1bW5zKCkpIHtcclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY2FwdGlvbi1zZWxlY3QtY29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRDb2x1bW5zXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkQ29sdW1ucy52YWx1ZSA/IHNlbGVjdGVkQ29sdW1ucy52YWx1ZSEubGVuZ3RoIDogMCB9fVxyXG4gICAgICAgICAgICAgICAgY29sdW1ucyBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW4uZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2x1bW4uZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zJ1wiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVcIlxyXG4gICAgICAgICAgICAgICAgICA+e3tcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2VsZWN0Q29sdW1uTGFiZWwgfHwgY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKGFsbG93UGlja0NvbHVtbnMoKSB8fCB0YWJsZVRpdGxlKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZXNldFRhYmxlKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicmVvcmRlci1pY29uXCI+cmVmcmVzaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoYWxsb3dSZW9yZGVyQ29sdW1ucygpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib3BlblJlb3JkZXJDb2x1bW5zRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicmVvcmRlci1pY29uXCI+bG93X3ByaW9yaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmIChzaG93R2xvYmFsU2VhcmNoKCkgfHwgc2hvd0ZpbHRlckJ1dHRvbiB8fCBzaG93Q3JlYXRlQnV0dG9uKCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuICAgICAgICBAaWYgKHNob3dGaWx0ZXJCdXR0b24pIHtcclxuICAgICAgICAgIDwhLS0gICAgICAgIEBpZiAoYWN0aXZlRmlsdGVyc0NvdW50KSB7LS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgIDxidXR0b24tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgICBtYXQtaWNvbi1idXR0b24tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGxGaWx0ZXJzKClcIi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidDbGVhciBGaWx0ZXJzJ1wiLS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgID4tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgICA8bWF0LWljb24+ZmlsdGVyX2FsdF9vZmY8L21hdC1pY29uPi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICA8L2J1dHRvbj4tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgIH0tLT5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib3BlbkZpbHRlckRpYWxvZygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgIFttYXRCYWRnZV09XCJhY3RpdmVGaWx0ZXJzQ291bnRcIlxyXG4gICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIhYWN0aXZlRmlsdGVyc0NvdW50XCJcclxuICAgICAgICAgICAgICBbbWF0QmFkZ2VTaXplXT1cIidzbWFsbCdcIlxyXG4gICAgICAgICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgID5maWx0ZXJfYWx0PC9tYXQtaWNvblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoc2hvd0dsb2JhbFNlYXJjaCgpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnbG9iYWxTZWFyY2hcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgICAgIHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5nbG9iYWxTZWFyY2hcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ2xvYmFsU2VhcmNoLnNldFZhbHVlKCcnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKHNob3dDcmVhdGVCdXR0b24oKSkge1xyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZUJ1dHRvbkFjdGlvbigpKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjcmVhdGVCdXR0b25MYWJlbCgpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtY2FwdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWNhcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLDJCQUEyQixHQUM1QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLGtDQUFrQyxHQUVuQyxNQUFNLHVFQUF1RSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLG1GQUFtRixDQUFDOzs7Ozs7Ozs7Ozs7O0FBYTVJLE1BQU0sT0FBTyw2QkFDWCxTQUFRLDJCQUEyQjtJQXVCbkMsSUFDSSxPQUFPLENBQUMsSUFBc0M7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FB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QUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUMvQiw2Q0FBNkM7Z0JBQzdDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFDRCxnQ0FBZ0M7WUFDaEMsT0FBTyxXQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsS0FBSyxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1osQ0FBQzsrR0ExS1UsNkJBQTZCO21HQUE3Qiw2QkFBNkIsc3BEQ3ZDMUMsa21JQW9IQTs7NEZEN0VhLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU07d0hBMkIzQyxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdmlldy92aWV3LXN0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIFN0QmFzZVNlcnZpY2UsXHJcbiAgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50LFxyXG59IGZyb20gJ25neC1zdC1iYXNlLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gIGZpbHRlcixcclxuICB0YWtlLFxyXG4gIHRha2VVbnRpbCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCxcclxuICBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nUmVzdWx0LFxyXG59IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdGVyaWFsVGFibGVPcmRlckNvbHVtbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtb3JkZXItY29sdW1uLWRpYWxvZy9tYXRlcmlhbC10YWJsZS1vcmRlci1jb2x1bW4tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0LXRhYmxlcy10cmFuc2xhdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgSUNhcHRpb25EYXRhQ2hhbmdlZCxcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXIsXHJcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3N0LW1hdGVyaWFsLXRhYmxlLWNhcHRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ2FwdGlvbkNvbXBvbmVudFxyXG4gIGV4dGVuZHMgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gIHNob3dHbG9iYWxTZWFyY2ggPSBpbnB1dDxib29sZWFuPigpO1xyXG5cclxuICB0YWJsZVRpdGxlID0gaW5wdXQoJycpO1xyXG5cclxuICBhbGxvd1BpY2tDb2x1bW5zID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIGFsbG93UmVvcmRlckNvbHVtbnMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgaW5pdEdsb2JhbFNlYXJjaCA9IGlucHV0KCcnKTtcclxuXHJcbiAgaW5pdEZpbHRlcnMgPSBpbnB1dDx7XHJcbiAgICBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXI7XHJcbiAgfT4oe30pO1xyXG5cclxuICBzaG93Q3JlYXRlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjcmVhdGVCdXR0b25MYWJlbCA9IGlucHV0KCdDcmVhdGUnKTtcclxuXHJcbiAgY3JlYXRlQnV0dG9uQWN0aW9uID0gaW5wdXQ8KCkgPT4gdm9pZD4oKCkgPT4ge30pO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2x1bW5zKGRhdGE6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zID0gZGF0YSA/IGRhdGEgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHVtbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdID0gW107XHJcblxyXG4gIGNhcHRpb25EYXRhQ2hhbmdlZCA9IG91dHB1dDxJQ2FwdGlvbkRhdGFDaGFuZ2VkPigpO1xyXG5cclxuICByZXNldFRhYmxlU2V0dGluZ3MgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcclxuXHJcbiAgc2hvd0ZpbHRlckJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RlZENvbHVtbnMgPSBuZXcgRm9ybUNvbnRyb2woPHN0cmluZ1tdPltdKTtcclxuICBnbG9iYWxTZWFyY2ggPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG5cclxuICBhY3RpdmVGaWx0ZXJzQ291bnQgPSAwO1xyXG5cclxuICBwcml2YXRlIGNvbHVtbnNPcmRlcjogc3RyaW5nW10gPSBbXTtcclxuICBwcml2YXRlIGZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc3RUYWJsZVRyYW5zbGF0aW9uczogU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2guc2V0VmFsdWUodGhpcy5pbml0R2xvYmFsU2VhcmNoKCkgfHwgJycpO1xyXG4gICAgdGhpcy5maWx0ZXJzID0gdGhpcy5pbml0RmlsdGVycygpIHx8IHt9O1xyXG4gICAgdGhpcy5zZXRBY3RpdmVGaWx0ZXJzQ291bnQoKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSg0MDApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxyXG4gICAgICAgICAgKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDQwMClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLmVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuRmlsdGVyRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dcclxuICAgICAgLm9wZW4oTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGluaXRGaWx0ZXJzOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhXaWR0aDogJzU1MHB4JyxcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2UoMSksIGZpbHRlcihTdEJhc2VTZXJ2aWNlLm5vdE51bGwpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dSZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlcnMgPSByZXMuZmlsdGVycztcclxuICAgICAgICB0aGlzLnNldEFjdGl2ZUZpbHRlcnNDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdENhcHRpb25EYXRhQ2hhbmdlZCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5SZW9yZGVyQ29sdW1uc0RpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgIC5vcGVuKE1hdGVyaWFsVGFibGVPcmRlckNvbHVtbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1heFdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgfSlcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZSgxKSwgZmlsdGVyKFN0QmFzZVNlcnZpY2Uubm90TnVsbCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBjb2x1bW5zT3JkZXI6IHN0cmluZ1tdIH0pID0+IHtcclxuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlciA9IHJlc3VsdC5jb2x1bW5zT3JkZXI7XHJcbiAgICAgICAgdGhpcy5lbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUYWJsZSgpIHtcclxuICAgIHRoaXMucmVzZXRUYWJsZVNldHRpbmdzLmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgLy8gICBjb25zdCBmaWx0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycyk7XHJcbiAgLy8gICBmaWx0ZXJzS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgLy8gICAgIGlmICh0aGlzLmZpbHRlcnNba2V5XSkge1xyXG4gIC8vICAgICAgIHRoaXMuZmlsdGVyc1trZXldID0gJyc7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vXHJcbiAgLy8gICB0aGlzLnNldEFjdGl2ZUZpbHRlcnNDb3VudCgpO1xyXG4gIC8vICAgdGhpcy5lbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCk7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIGVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLmNhcHRpb25EYXRhQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zOiB0aGlzLnNlbGVjdGVkQ29sdW1ucy52YWx1ZSB8fCBbXSxcclxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLmdsb2JhbFNlYXJjaC52YWx1ZSB8fCAnJyxcclxuICAgICAgY29sdW1uc09yZGVyOiB0aGlzLmNvbHVtbnNPcmRlciB8fCBbXSxcclxuICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnMoKSB7XHJcbiAgICBjb25zdCBjb2x1bW5zRmlsdGVycyA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKTtcclxuICAgIHRoaXMuc2hvd0ZpbHRlckJ1dHRvbiA9IGNvbHVtbnNGaWx0ZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zZXRWYWx1ZShcclxuICAgICAgdGhpcy5fY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlKS5tYXAoY29sID0+IGNvbC5maWVsZCkgfHwgW11cclxuICAgICk7XHJcbiAgICB0aGlzLmNvbHVtbnNPcmRlciA9IHRoaXMuX2NvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmllbGQpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBY3RpdmVGaWx0ZXJzQ291bnQoKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycyk7XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlcnNDb3VudCA9IGZpbHRlcnNLZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuZmlsdGVyc1trZXldPy52YWx1ZTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgLy8gRGxhIGZpbHRyw7N3IHR5cHUgZGF0ZSAoa3TDs3JlIHPEhSB0YWJsaWNhbWkpXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBEbGEgcG96b3N0YcWCeWNoIHR5cMOzdyBmaWx0csOzd1xyXG4gICAgICByZXR1cm4gZmlsdGVyVmFsdWUgIT09IG51bGwgJiYgZmlsdGVyVmFsdWUgIT09ICcnO1xyXG4gICAgfSkubGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKFxyXG4gIGFsbG93UGlja0NvbHVtbnMoKSB8fFxyXG4gIHRhYmxlVGl0bGUoKSB8fFxyXG4gIGFsbG93UmVvcmRlckNvbHVtbnMoKSB8fFxyXG4gIHNob3dHbG9iYWxTZWFyY2goKSB8fFxyXG4gIHNob3dGaWx0ZXJCdXR0b24gfHxcclxuICBzaG93Q3JlYXRlQnV0dG9uKClcclxuKSB7XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJzdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nOlxyXG4gICAgICAgIChhbGxvd1BpY2tDb2x1bW5zKCkgfHwgdGFibGVUaXRsZSgpIHx8IGFsbG93UmVvcmRlckNvbHVtbnMoKSkgJiZcclxuICAgICAgICAoc2hvd0dsb2JhbFNlYXJjaCgpIHx8IHNob3dGaWx0ZXJCdXR0b24gfHwgc2hvd0NyZWF0ZUJ1dHRvbigpKSxcclxuICAgICAgJ2p1c3RpZnktY29udGVudC1lbmQnOlxyXG4gICAgICAgICFhbGxvd1BpY2tDb2x1bW5zKCkgJiYgIXRhYmxlVGl0bGUoKSAmJiAhYWxsb3dSZW9yZGVyQ29sdW1ucygpXHJcbiAgICB9XCJcclxuICA+XHJcbiAgICBAaWYgKGFsbG93UGlja0NvbHVtbnMoKSB8fCB0YWJsZVRpdGxlKCkgfHwgYWxsb3dSZW9yZGVyQ29sdW1ucygpKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgQGlmICh0YWJsZVRpdGxlKCkpIHtcclxuICAgICAgICAgIDxwIGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyB0YWJsZVRpdGxlKCkgfX08L3A+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKGFsbG93UGlja0NvbHVtbnMoKSkge1xyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjYXB0aW9uLXNlbGVjdC1jb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzZWxlY3RlZENvbHVtbnNcIiBtdWx0aXBsZT5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRDb2x1bW5zLnZhbHVlID8gc2VsZWN0ZWRDb2x1bW5zLnZhbHVlIS5sZW5ndGggOiAwIH19XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zIHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbi5maWVsZCkge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbi5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbnMnXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5zZWxlY3RDb2x1bW5MYWJlbCB8fCBjb2x1bW4uaGVhZGVyIHx8IGNvbHVtbi5maWVsZFxyXG4gICAgICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoYWxsb3dQaWNrQ29sdW1ucygpIHx8IHRhYmxlVGl0bGUoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0VGFibGUoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW9yZGVyLWljb25cIj5yZWZyZXNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChhbGxvd1Jlb3JkZXJDb2x1bW5zKCkpIHtcclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvcGVuUmVvcmRlckNvbHVtbnNEaWFsb2coKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW9yZGVyLWljb25cIj5sb3dfcHJpb3JpdHk8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKHNob3dHbG9iYWxTZWFyY2goKSB8fCBzaG93RmlsdGVyQnV0dG9uIHx8IHNob3dDcmVhdGVCdXR0b24oKSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgIEBpZiAoc2hvd0ZpbHRlckJ1dHRvbikge1xyXG4gICAgICAgICAgPCEtLSAgICAgICAgQGlmIChhY3RpdmVGaWx0ZXJzQ291bnQpIHstLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgPGJ1dHRvbi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIChjbGljayk9XCJjbGVhckFsbEZpbHRlcnMoKVwiLS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0NsZWFyIEZpbHRlcnMnXCItLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgPi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIDxtYXQtaWNvbj5maWx0ZXJfYWx0X29mZjwvbWF0LWljb24+LS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgIDwvYnV0dG9uPi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgfS0tPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvcGVuRmlsdGVyRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgW21hdEJhZGdlXT1cImFjdGl2ZUZpbHRlcnNDb3VudFwiXHJcbiAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiFhY3RpdmVGaWx0ZXJzQ291bnRcIlxyXG4gICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwiJ3NtYWxsJ1wiXHJcbiAgICAgICAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImJlZm9yZVwiXHJcbiAgICAgICAgICAgICAgPmZpbHRlcl9hbHQ8L21hdC1pY29uXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChzaG93R2xvYmFsU2VhcmNoKCkpIHtcclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2VhcmNoLWZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdsb2JhbFNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgICAgICAgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmdsb2JhbFNlYXJjaFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJnbG9iYWxTZWFyY2guc2V0VmFsdWUoJycpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoc2hvd0NyZWF0ZUJ1dHRvbigpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlQnV0dG9uQWN0aW9uKCkoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNyZWF0ZUJ1dHRvbkxhYmVsKCkgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
@@ -1,93 +1,108 @@
1
- import { ChangeDetectionStrategy, Component, Inject, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Inject, signal, } from '@angular/core';
2
2
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/material/dialog";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "../../../../services/st-tables-translations.service";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "@angular/material/button";
9
- import * as i6 from "@angular/material/icon";
10
- import * as i7 from "@angular/material/form-field";
11
- import * as i8 from "@angular/material/input";
12
- import * as i9 from "@angular/material/tooltip";
13
- import * as i10 from "@angular/material/select";
14
- import * as i11 from "@angular/material/core";
15
- import * as i12 from "@angular/material/datepicker";
5
+ import * as i2 from "../../../../services/st-tables-translations.service";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/material/button";
8
+ import * as i5 from "@angular/material/icon";
9
+ import * as i6 from "@angular/material/tooltip";
10
+ import * as i7 from "./material-table-filter.component";
16
11
  export class MaterialTableFilterDialogComponent {
17
- constructor(dialogData, dialogRef, fb, changeDetectorRef, stTableTranslations) {
12
+ constructor(dialogData, dialogRef, changeDetectorRef, stTableTranslations) {
18
13
  this.dialogData = dialogData;
19
14
  this.dialogRef = dialogRef;
20
- this.fb = fb;
21
15
  this.changeDetectorRef = changeDetectorRef;
22
16
  this.stTableTranslations = stTableTranslations;
23
- this.filterColumns = [];
24
- this.formGroup = this.fb.group({});
25
- this.allVisible = true;
17
+ this.filterColumns = signal([]);
18
+ this.allVisible = signal(true);
19
+ this.filtersValue = signal({});
20
+ }
21
+ hasFilterValue(column) {
22
+ const filter = this.filtersValue()[column.field];
23
+ if (!filter?.value)
24
+ return false;
25
+ if (column.filterType === 'date') {
26
+ const dateValues = filter.value;
27
+ return !!(dateValues?.[0] || dateValues?.[1]);
28
+ }
29
+ return !!filter.value;
26
30
  }
27
31
  ngOnInit() {
28
- this.filterColumns = this.dialogData.columns
32
+ const columns = this.dialogData.columns
29
33
  .filter(column => column.filter)
30
34
  .map(col => {
31
- const valueGroup = this.fb.group({
32
- value: this.fb.control(''),
33
- matchMode: this.fb.control(MaterialTableFilterDialogComponent.getBaseMatchModeByType(col.filterType)),
34
- });
35
- valueGroup.controls.matchMode.disable();
36
- this.formGroup.addControl(col.field, valueGroup);
35
+ let filterValue = null;
36
+ if (col.filterType === 'boolean' || col.filterType === 'number') {
37
+ filterValue = null;
38
+ }
39
+ else if (col.filterType === 'string') {
40
+ filterValue = '';
41
+ }
42
+ else if (col.filterType === 'date') {
43
+ filterValue = [null, null];
44
+ }
45
+ this.filtersValue.update(current => ({
46
+ ...current,
47
+ [col.field]: {
48
+ value: filterValue,
49
+ matchMode: MaterialTableFilterDialogComponent.getBaseMatchModeByType(col.filterType),
50
+ },
51
+ }));
37
52
  return {
38
53
  ...col,
54
+ expanded: true,
39
55
  };
40
56
  });
57
+ this.filterColumns.set(columns);
41
58
  if (this.dialogData.initFilters) {
42
- const filtersKeys = Object.keys(this.dialogData.initFilters);
43
- filtersKeys.forEach(key => {
44
- if (this.formGroup.get(key)) {
45
- this.formGroup.get([key, 'matchMode']).setValue(this.dialogData.initFilters[key].matchMode);
46
- this.formGroup.get([key, 'value']).setValue(this.dialogData.initFilters[key].value);
47
- }
48
- });
59
+ this.filtersValue.set(this.dialogData.initFilters);
49
60
  }
50
61
  }
62
+ clearFilter(column) {
63
+ this.filtersValue.update(current => ({
64
+ ...current,
65
+ [column.field]: {
66
+ value: this.getDefaultFilterValue(column.filterType),
67
+ matchMode: current[column.field].matchMode,
68
+ },
69
+ }));
70
+ }
51
71
  clearAllFilters() {
52
- this.filterColumns.forEach(column => {
53
- if (this.formGroup.get(column.field)) {
54
- this.formGroup.get([column.field, 'value']).setValue('');
55
- }
72
+ this.filterColumns().forEach(column => {
73
+ this.clearFilter(column);
56
74
  });
57
- this.changeDetectorRef.markForCheck();
58
75
  }
59
76
  showAllFilters() {
60
- this.filterColumns.forEach(column => {
61
- column.expanded = true;
62
- });
63
- this.allVisible = true;
64
- this.changeDetectorRef.markForCheck();
77
+ this.filterColumns.update(columns => columns.map(column => ({ ...column, expanded: true })));
78
+ this.allVisible.set(true);
65
79
  }
66
80
  hideAllFilters() {
67
- this.filterColumns.forEach(column => {
68
- column.expanded = false;
69
- });
70
- this.allVisible = false;
71
- this.changeDetectorRef.markForCheck();
81
+ this.filterColumns.update(columns => columns.map(column => ({ ...column, expanded: false })));
82
+ this.allVisible.set(false);
72
83
  }
73
84
  saveFilters() {
74
- const filters = {};
75
- const formValues = this.formGroup.getRawValue();
76
- const filterKeys = Object.keys(formValues);
77
- filterKeys.forEach(key => {
78
- const value = formValues[key].value;
79
- const matchMode = formValues[key].matchMode;
80
- if (value !== '' && value !== null && value !== undefined) {
81
- filters[key] = {
82
- value: value,
83
- matchMode: matchMode,
84
- };
85
- }
86
- });
87
85
  this.dialogRef.close({
88
- filters: filters,
86
+ filters: this.filtersValue(),
89
87
  });
90
88
  }
89
+ filterValueChanged(column, newFilter) {
90
+ this.filtersValue.update(current => ({
91
+ ...current,
92
+ [column.field]: newFilter,
93
+ }));
94
+ }
95
+ getDefaultFilterValue(filterType) {
96
+ switch (filterType) {
97
+ case 'date':
98
+ return [null, null];
99
+ case 'boolean':
100
+ case 'number':
101
+ return null;
102
+ default:
103
+ return '';
104
+ }
105
+ }
91
106
  static getBaseMatchModeByType(filterType) {
92
107
  if (filterType === 'date') {
93
108
  return 'between';
@@ -101,14 +116,14 @@ export class MaterialTableFilterDialogComponent {
101
116
  return 'contains';
102
117
  }
103
118
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MaterialTableFilterDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.NonNullableFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.StTablesTranslationsService }], target: i0.ɵɵFactoryTarget.Component }); }
105
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MaterialTableFilterDialogComponent, selector: "st-material-table-filter-dialog", ngImport: i0, template: "<h3 mat-dialog-title class=\"filters-dialog-title\">\r\n {{ stTableTranslations.getTranslations()().filterTitle }}\r\n <div class=\"filters-show-hide\">\r\n @if (!allVisible) {\r\n <button\r\n mat-icon-button\r\n (click)=\"showAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().expandAllFilters\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n }\r\n @if (allVisible) {\r\n <button\r\n mat-icon-button\r\n (click)=\"hideAllFilters()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().collapseAllFilters\r\n \"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n }\r\n <button\r\n mat-icon-button\r\n (click)=\"clearAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().clearFilters\"\r\n >\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n </div>\r\n</h3>\r\n\r\n<mat-dialog-content>\r\n <form [formGroup]=\"formGroup\">\r\n @for (column of filterColumns; track column.field) {\r\n @switch (column.filterType || column.type || 'string') {\r\n @case ('string') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n [value]=\"'Contains'\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().searchFilter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"column.visible\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n />\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"\r\n formGroup.controls[column.field].controls[\r\n 'value'\r\n ].setValue('')\r\n \"\r\n >\r\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('number') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"number\"\r\n [disabled]=\"column.visible\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('date') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filterChooseDate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n [disabled]=\"column.visible\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('boolean') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().booleanPickValue\r\n }}</mat-label>\r\n <mat-select\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n >\r\n <mat-option value=\"\">{{\r\n stTableTranslations.getTranslations()().booleanNone\r\n }}</mat-option>\r\n <mat-option [value]=\"true\">{{\r\n stTableTranslations.getTranslations()().booleanYes\r\n }}</mat-option>\r\n <mat-option [value]=\"false\">{{\r\n stTableTranslations.getTranslations()().booleanNo\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('custom') {\r\n @if (column.customFilterOptions) {}\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().customPickValue\r\n }}</mat-label>\r\n <mat-select\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n >\r\n <mat-option value=\"\">{{\r\n stTableTranslations.getTranslations()().customNone\r\n }}</mat-option>\r\n @for (option of column.customFilterOptions; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n }\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between\" style=\"width: 100%\">\r\n <button mat-flat-button mat-dialog-close>\r\n {{ stTableTranslations.getTranslations()().cancel }}\r\n </button>\r\n <button mat-flat-button color=\"accent\" (click)=\"saveFilters()\">\r\n {{ stTableTranslations.getTranslations()().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n\r\n<ng-template #filterHeader let-column>\r\n <div\r\n class=\"filter-title row justify-content-between\"\r\n [ngClass]=\"{\r\n 'value-set': formGroup.controls[column.field].controls['value'].value\r\n }\"\r\n >\r\n <p>\r\n {{ column.header }}\r\n </p>\r\n\r\n @if (column.expanded) {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_up</mat-icon\r\n >\r\n } @else {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_down</mat-icon\r\n >\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".filters-dialog-title .filters-show-hide{position:absolute;top:6px;right:15px}.filter{width:100%;margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid var(--surface-100, #e0e0e0)}.filter .filter-title{padding:.5rem 0;font-size:1rem;font-weight:500}.filter .filter-title p{margin:0}.filter .filter-title mat-icon{cursor:pointer}.filter .filter-content{margin-top:.5rem;gap:.5rem}.filter .filter-content.hide{display:none}.filter .filter-content>div.col-auto,.filter .filter-content>div.col{padding:0!important}.filter .filter-content mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.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: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.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: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
119
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MaterialTableFilterDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i0.ChangeDetectorRef }, { token: i2.StTablesTranslationsService }], target: i0.ɵɵFactoryTarget.Component }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MaterialTableFilterDialogComponent, selector: "st-material-table-filter-dialog", ngImport: i0, template: "<h3 mat-dialog-title class=\"filters-dialog-title\">\r\n {{ stTableTranslations.getTranslations()().filterTitle }}\r\n <div class=\"filters-show-hide\">\r\n @if (!allVisible()) {\r\n <button\r\n mat-icon-button\r\n (click)=\"showAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().expandAllFilters\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n }\r\n @if (allVisible()) {\r\n <button\r\n mat-icon-button\r\n (click)=\"hideAllFilters()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().collapseAllFilters\r\n \"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n }\r\n <button\r\n mat-icon-button\r\n (click)=\"clearAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().clearAllFilters\"\r\n >\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n </div>\r\n</h3>\r\n\r\n<mat-dialog-content>\r\n <hr />\r\n @for (column of filterColumns(); track column.field) {\r\n <div class=\"filter\">\r\n <div class=\"filter-title row justify-content-between\">\r\n <div class=\"row align-items-center\">\r\n <p>\r\n {{ column.header }}\r\n </p>\r\n @if (hasFilterValue(column)) {\r\n <mat-icon\r\n (click)=\"clearFilter(column)\"\r\n class=\"filter-value-clear\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().clearFilter\"\r\n >filter_alt_off</mat-icon\r\n >\r\n }\r\n </div>\r\n\r\n @if (column.expanded) {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_up</mat-icon\r\n >\r\n } @else {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_down</mat-icon\r\n >\r\n }\r\n </div>\r\n <div class=\"filter-content row\" [ngClass]=\"{ hide: !column.expanded }\">\r\n <ngx-st-material-table-filter\r\n [column]=\"column\"\r\n [filterValue]=\"filtersValue()[column.field]\"\r\n (filterValueChanged)=\"filterValueChanged(column, $event)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between\" style=\"width: 100%\">\r\n <button mat-flat-button mat-dialog-close>\r\n {{ stTableTranslations.getTranslations()().cancel }}\r\n </button>\r\n <button mat-flat-button color=\"accent\" (click)=\"saveFilters()\">\r\n {{ stTableTranslations.getTranslations()().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n", styles: [".filters-dialog-title .filters-show-hide{position:absolute;top:6px;right:15px}.filter{width:100%;margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid var(--surface-100, #e0e0e0)}.filter .filter-title{padding:.5rem 0;font-size:1rem;font-weight:500}.filter .filter-title p{margin:0;font-weight:500}.filter .filter-title mat-icon{cursor:pointer}.filter .filter-title .filter-value-clear{font-size:1.2rem;width:1.2rem;height:1.2rem;margin-top:-2px;margin-left:.5rem;color:red}.filter .filter-content{margin-top:.5rem;gap:.5rem}.filter .filter-content.hide{display:none}.filter .filter-content>div.col-auto,.filter .filter-content>div.col{padding:0!important}.filter .filter-content mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i7.MaterialTableFilterComponent, selector: "ngx-st-material-table-filter", inputs: ["column", "filterValue"], outputs: ["filterValueChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
106
121
  }
107
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MaterialTableFilterDialogComponent, decorators: [{
108
123
  type: Component,
109
- args: [{ selector: 'st-material-table-filter-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h3 mat-dialog-title class=\"filters-dialog-title\">\r\n {{ stTableTranslations.getTranslations()().filterTitle }}\r\n <div class=\"filters-show-hide\">\r\n @if (!allVisible) {\r\n <button\r\n mat-icon-button\r\n (click)=\"showAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().expandAllFilters\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n }\r\n @if (allVisible) {\r\n <button\r\n mat-icon-button\r\n (click)=\"hideAllFilters()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().collapseAllFilters\r\n \"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n }\r\n <button\r\n mat-icon-button\r\n (click)=\"clearAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().clearFilters\"\r\n >\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n </div>\r\n</h3>\r\n\r\n<mat-dialog-content>\r\n <form [formGroup]=\"formGroup\">\r\n @for (column of filterColumns; track column.field) {\r\n @switch (column.filterType || column.type || 'string') {\r\n @case ('string') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n [value]=\"'Contains'\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().searchFilter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"column.visible\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n />\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"\r\n formGroup.controls[column.field].controls[\r\n 'value'\r\n ].setValue('')\r\n \"\r\n >\r\n <mat-icon style=\"font-size: 22px\">close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('number') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"number\"\r\n [disabled]=\"column.visible\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('date') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filterChooseDate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n [disabled]=\"column.visible\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('boolean') {\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().booleanPickValue\r\n }}</mat-label>\r\n <mat-select\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n >\r\n <mat-option value=\"\">{{\r\n stTableTranslations.getTranslations()().booleanNone\r\n }}</mat-option>\r\n <mat-option [value]=\"true\">{{\r\n stTableTranslations.getTranslations()().booleanYes\r\n }}</mat-option>\r\n <mat-option [value]=\"false\">{{\r\n stTableTranslations.getTranslations()().booleanNo\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @case ('custom') {\r\n @if (column.customFilterOptions) {}\r\n <div class=\"filter\">\r\n <ng-container\r\n *ngTemplateOutlet=\"filterHeader; context: { $implicit: column }\"\r\n ></ng-container>\r\n <div\r\n class=\"filter-content row\"\r\n [ngClass]=\"{ hide: !column.expanded }\"\r\n >\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100px\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().filter\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [disabled]=\"true\"\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['matchMode']\r\n \"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>{{\r\n stTableTranslations.getTranslations()().customPickValue\r\n }}</mat-label>\r\n <mat-select\r\n [formControl]=\"\r\n formGroup.controls[column.field].controls['value']\r\n \"\r\n >\r\n <mat-option value=\"\">{{\r\n stTableTranslations.getTranslations()().customNone\r\n }}</mat-option>\r\n @for (option of column.customFilterOptions; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n }\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between\" style=\"width: 100%\">\r\n <button mat-flat-button mat-dialog-close>\r\n {{ stTableTranslations.getTranslations()().cancel }}\r\n </button>\r\n <button mat-flat-button color=\"accent\" (click)=\"saveFilters()\">\r\n {{ stTableTranslations.getTranslations()().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n\r\n<ng-template #filterHeader let-column>\r\n <div\r\n class=\"filter-title row justify-content-between\"\r\n [ngClass]=\"{\r\n 'value-set': formGroup.controls[column.field].controls['value'].value\r\n }\"\r\n >\r\n <p>\r\n {{ column.header }}\r\n </p>\r\n\r\n @if (column.expanded) {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_up</mat-icon\r\n >\r\n } @else {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_down</mat-icon\r\n >\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".filters-dialog-title .filters-show-hide{position:absolute;top:6px;right:15px}.filter{width:100%;margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid var(--surface-100, #e0e0e0)}.filter .filter-title{padding:.5rem 0;font-size:1rem;font-weight:500}.filter .filter-title p{margin:0}.filter .filter-title mat-icon{cursor:pointer}.filter .filter-content{margin-top:.5rem;gap:.5rem}.filter .filter-content.hide{display:none}.filter .filter-content>div.col-auto,.filter .filter-content>div.col{padding:0!important}.filter .filter-content mat-form-field{width:100%}\n"] }]
124
+ args: [{ selector: 'st-material-table-filter-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h3 mat-dialog-title class=\"filters-dialog-title\">\r\n {{ stTableTranslations.getTranslations()().filterTitle }}\r\n <div class=\"filters-show-hide\">\r\n @if (!allVisible()) {\r\n <button\r\n mat-icon-button\r\n (click)=\"showAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().expandAllFilters\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n }\r\n @if (allVisible()) {\r\n <button\r\n mat-icon-button\r\n (click)=\"hideAllFilters()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().collapseAllFilters\r\n \"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n }\r\n <button\r\n mat-icon-button\r\n (click)=\"clearAllFilters()\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().clearAllFilters\"\r\n >\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n </div>\r\n</h3>\r\n\r\n<mat-dialog-content>\r\n <hr />\r\n @for (column of filterColumns(); track column.field) {\r\n <div class=\"filter\">\r\n <div class=\"filter-title row justify-content-between\">\r\n <div class=\"row align-items-center\">\r\n <p>\r\n {{ column.header }}\r\n </p>\r\n @if (hasFilterValue(column)) {\r\n <mat-icon\r\n (click)=\"clearFilter(column)\"\r\n class=\"filter-value-clear\"\r\n [matTooltip]=\"stTableTranslations.getTranslations()().clearFilter\"\r\n >filter_alt_off</mat-icon\r\n >\r\n }\r\n </div>\r\n\r\n @if (column.expanded) {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_up</mat-icon\r\n >\r\n } @else {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_down</mat-icon\r\n >\r\n }\r\n </div>\r\n <div class=\"filter-content row\" [ngClass]=\"{ hide: !column.expanded }\">\r\n <ngx-st-material-table-filter\r\n [column]=\"column\"\r\n [filterValue]=\"filtersValue()[column.field]\"\r\n (filterValueChanged)=\"filterValueChanged(column, $event)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between\" style=\"width: 100%\">\r\n <button mat-flat-button mat-dialog-close>\r\n {{ stTableTranslations.getTranslations()().cancel }}\r\n </button>\r\n <button mat-flat-button color=\"accent\" (click)=\"saveFilters()\">\r\n {{ stTableTranslations.getTranslations()().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n", styles: [".filters-dialog-title .filters-show-hide{position:absolute;top:6px;right:15px}.filter{width:100%;margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid var(--surface-100, #e0e0e0)}.filter .filter-title{padding:.5rem 0;font-size:1rem;font-weight:500}.filter .filter-title p{margin:0;font-weight:500}.filter .filter-title mat-icon{cursor:pointer}.filter .filter-title .filter-value-clear{font-size:1.2rem;width:1.2rem;height:1.2rem;margin-top:-2px;margin-left:.5rem;color:red}.filter .filter-content{margin-top:.5rem;gap:.5rem}.filter .filter-content.hide{display:none}.filter .filter-content>div.col-auto,.filter .filter-content>div.col{padding:0!important}.filter .filter-content mat-form-field{width:100%}\n"] }]
110
125
  }], ctorParameters: () => [{ type: undefined, decorators: [{
111
126
  type: Inject,
112
127
  args: [MAT_DIALOG_DATA]
113
- }] }, { type: i1.MatDialogRef }, { type: i2.NonNullableFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i3.StTablesTranslationsService }] });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFhekUsTUFBTSxPQUFPLGtDQUFrQztJQVk3QyxZQUVTLFVBR04sRUFDTSxTQUdOLEVBQ08sRUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3JDLG1CQUFnRDtRQVZoRCxlQUFVLEdBQVYsVUFBVSxDQUdoQjtRQUNNLGNBQVMsR0FBVCxTQUFTLENBR2Y7UUFDTyxPQUFFLEdBQUYsRUFBRSxDQUF3QjtRQUMxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3JDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBNkI7UUF2QnpELGtCQUFhLEdBQXFDLEVBQUUsQ0FBQztRQUVyRCxjQUFTLEdBS0osSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxD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LFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQzsrR0EvSFUsa0NBQWtDLGtCQWFuQyxlQUFlO21HQWJkLGtDQUFrQyx1RUNwQi9DLHk1WEFpVUE7OzRGRDdTYSxrQ0FBa0M7a0JBTjlDLFNBQVM7K0JBQ0UsaUNBQWlDLG1CQUcxQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFlNUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5qZWN0LFxyXG4gIE9uSW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdmlldy92aWV3LXN0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3N0LXRhYmxlcy10cmFuc2xhdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9IGZyb20gJy4uL21hdGVyaWFsLXRhYmxlLWNhcHRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RNYXRlcmlhbENvbHVtbkZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3QtbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGZpbHRlckNvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdID0gW107XHJcblxyXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwPHtcclxuICAgIFtrZXk6IHN0cmluZ106IEZvcm1Hcm91cDx7XHJcbiAgICAgIHZhbHVlOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudW1iZXI+O1xyXG4gICAgICBtYXRjaE1vZGU6IEZvcm1Db250cm9sPCdjb250YWlucycgfCAnZXF1YWwnIHwgJ2JldHdlZW4nPjtcclxuICAgIH0+O1xyXG4gIH0+ID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcblxyXG4gIGFsbFZpc2libGUgPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKVxyXG4gICAgcHVibGljIGRpYWxvZ0RhdGE6IHtcclxuICAgICAgY29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW107XHJcbiAgICAgIGluaXRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9O1xyXG4gICAgfSxcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxcclxuICAgICAgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ1Jlc3VsdFxyXG4gICAgPixcclxuICAgIHByaXZhdGUgZmI6IE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBzdFRhYmxlVHJhbnNsYXRpb25zOiBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5maWx0ZXJDb2x1bW5zID0gdGhpcy5kaWFsb2dEYXRhLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlcilcclxuICAgICAgLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nIHwgbnVtYmVyPignJyksXHJcbiAgICAgICAgICBtYXRjaE1vZGU6IHRoaXMuZmIuY29udHJvbDwnY29udGFpbnMnIHwgJ2VxdWFsJyB8ICdiZXR3ZWVuJz4oXHJcbiAgICAgICAgICAgIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQuZ2V0QmFzZU1hdGNoTW9kZUJ5VHlwZShcclxuICAgICAgICAgICAgICBjb2wuZmlsdGVyVHlwZSFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YWx1ZUdyb3VwLmNvbnRyb2xzLm1hdGNoTW9kZS5kaXNhYmxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woY29sLmZpZWxkLCB2YWx1ZUdyb3VwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmluaXRGaWx0ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcnNLZXlzID0gT2JqZWN0LmtleXModGhpcy5kaWFsb2dEYXRhLmluaXRGaWx0ZXJzKTtcclxuICAgICAgZmlsdGVyc0tleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5nZXQoa2V5KSkge1xyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoW2tleSwgJ21hdGNoTW9kZSddKSBhcyBGb3JtQ29udHJvbDxzdHJpbmc+XHJcbiAgICAgICAgICApLnNldFZhbHVlKHRoaXMuZGlhbG9nRGF0YS5pbml0RmlsdGVyc1trZXldLm1hdGNoTW9kZSk7XHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChba2V5LCAndmFsdWUnXSkgYXMgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVtYmVyPlxyXG4gICAgICAgICAgKS5zZXRWYWx1ZSh0aGlzLmRpYWxvZ0RhdGEuaW5pdEZpbHRlcnNba2V5XS52YWx1ZSBhcyBzdHJpbmcgfCBudW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KGNvbHVtbi5maWVsZCkpIHtcclxuICAgICAgICAoXHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoW2NvbHVtbi5maWVsZCwgJ3ZhbHVlJ10pIGFzIEZvcm1Db250cm9sPFxyXG4gICAgICAgICAgICBzdHJpbmcgfCBudW1iZXJcclxuICAgICAgICAgID5cclxuICAgICAgICApLnNldFZhbHVlKCcnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0FsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBjb2x1bW4uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFsbFZpc2libGUgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGhpZGVBbGxGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5maWx0ZXJDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgY29sdW1uLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWxsVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHNhdmVGaWx0ZXJzKCkge1xyXG4gICAgY29uc3QgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSA9IHt9O1xyXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICBjb25zdCBmaWx0ZXJLZXlzID0gT2JqZWN0LmtleXMoZm9ybVZhbHVlcyk7XHJcbiAgICBmaWx0ZXJLZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBmb3JtVmFsdWVzW2tleV0udmFsdWU7XHJcbiAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IGZvcm1WYWx1ZXNba2V5XS5tYXRjaE1vZGU7XHJcblxyXG4gICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBmaWx0ZXJzW2tleV0gPSB7XHJcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XHJcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRCYXNlTWF0Y2hNb2RlQnlUeXBlKFxyXG4gICAgZmlsdGVyVHlwZTogU3RNYXRlcmlhbENvbHVtbkZpbHRlclR5cGVcclxuICApOiAnY29udGFpbnMnIHwgJ2VxdWFsJyB8ICdiZXR3ZWVuJyB7XHJcbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIHJldHVybiAnYmV0d2Vlbic7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBmaWx0ZXJUeXBlID09PSAnbnVtYmVyJyB8fFxyXG4gICAgICBmaWx0ZXJUeXBlID09PSAnYm9vbGVhbicgfHxcclxuICAgICAgZmlsdGVyVHlwZSA9PT0gJ2N1c3RvbSdcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gJ2VxdWFsJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnY29udGFpbnMnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nUmVzdWx0IHtcclxuICBmaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9O1xyXG59XHJcbiIsIjxoMyBtYXQtZGlhbG9nLXRpdGxlIGNsYXNzPVwiZmlsdGVycy1kaWFsb2ctdGl0bGVcIj5cclxuICB7eyBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuZmlsdGVyVGl0bGUgfX1cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVycy1zaG93LWhpZGVcIj5cclxuICAgIEBpZiAoIWFsbFZpc2libGUpIHtcclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJzaG93QWxsRmlsdGVycygpXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuZXhwYW5kQWxsRmlsdGVyc1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+dW5mb2xkX21vcmU8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoYWxsVmlzaWJsZSkge1xyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImhpZGVBbGxGaWx0ZXJzKClcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgICAgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmNvbGxhcHNlQWxsRmlsdGVyc1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+dW5mb2xkX2xlc3M8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIChjbGljayk9XCJjbGVhckFsbEZpbHRlcnMoKVwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cInN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5jbGVhckZpbHRlcnNcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+ZmlsdGVyX2FsdF9vZmY8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvaDM+XHJcblxyXG48bWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgICBAZm9yIChjb2x1bW4gb2YgZmlsdGVyQ29sdW1uczsgdHJhY2sgY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgIEBzd2l0Y2ggKGNvbHVtbi5maWx0ZXJUeXBlIHx8IGNvbHVtbi50eXBlIHx8ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgQGNhc2UgKCdzdHJpbmcnKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckhlYWRlcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbiB9XCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItY29udGVudCByb3dcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgaGlkZTogIWNvbHVtbi5leHBhbmRlZCB9XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgICAgICAgICAgIHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5maWx0ZXJcclxuICAgICAgICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4uZmllbGRdLmNvbnRyb2xzWydtYXRjaE1vZGUnXVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIidDb250YWlucydcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuc2VhcmNoRmlsdGVyXHJcbiAgICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4udmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5maWVsZF0uY29udHJvbHNbJ3ZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLmZpZWxkXS5jb250cm9sc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgXS5zZXRWYWx1ZSgnJylcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAyMnB4XCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJIZWFkZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiXHJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWNvbnRlbnQgcm93XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGhpZGU6ICFjb2x1bW4uZXhwYW5kZWQgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuZmlsdGVyXHJcbiAgICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLmZpZWxkXS5jb250cm9sc1snbWF0Y2hNb2RlJ11cclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuZmlsdGVyXHJcbiAgICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi52aXNpYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLmZpZWxkXS5jb250cm9sc1sndmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAY2FzZSAoJ2RhdGUnKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckhlYWRlcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbiB9XCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItY29udGVudCByb3dcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgaGlkZTogIWNvbHVtbi5leHBhbmRlZCB9XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgICAgICAgICAgIHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5maWx0ZXJcclxuICAgICAgICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4uZmllbGRdLmNvbnRyb2xzWydtYXRjaE1vZGUnXVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgICAgICAgICAgIHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5maWx0ZXJDaG9vc2VEYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLnZpc2libGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4uZmllbGRdLmNvbnRyb2xzWyd2YWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXhcclxuICAgICAgICAgICAgICAgICAgICBbZm9yXT1cInBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBjYXNlICgnYm9vbGVhbicpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVySGVhZGVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uIH1cIlxyXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1jb250ZW50IHJvd1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBoaWRlOiAhY29sdW1uLmV4cGFuZGVkIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmZpbHRlclxyXG4gICAgICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5maWVsZF0uY29udHJvbHNbJ21hdGNoTW9kZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmJvb2xlYW5QaWNrVmFsdWVcclxuICAgICAgICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLmZpZWxkXS5jb250cm9sc1sndmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuYm9vbGVhbk5vbmVcclxuICAgICAgICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuYm9vbGVhblllc1xyXG4gICAgICAgICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuYm9vbGVhbk5vXHJcbiAgICAgICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBjYXNlICgnY3VzdG9tJykge1xyXG4gICAgICAgICAgQGlmIChjb2x1bW4uY3VzdG9tRmlsdGVyT3B0aW9ucykge31cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVySGVhZGVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uIH1cIlxyXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1jb250ZW50IHJvd1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBoaWRlOiAhY29sdW1uLmV4cGFuZGVkIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmZpbHRlclxyXG4gICAgICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5maWVsZF0uY29udHJvbHNbJ21hdGNoTW9kZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmN1c3RvbVBpY2tWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4uZmllbGRdLmNvbnRyb2xzWyd2YWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5jdXN0b21Ob25lXHJcbiAgICAgICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIGNvbHVtbi5jdXN0b21GaWx0ZXJPcHRpb25zOyB0cmFjayBvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvZm9ybT5cclxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbjxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2U+XHJcbiAgICAgIHt7IHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5jYW5jZWwgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwic2F2ZUZpbHRlcnMoKVwiPlxyXG4gICAgICB7eyBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuc2F2ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmaWx0ZXJIZWFkZXIgbGV0LWNvbHVtbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImZpbHRlci10aXRsZSByb3cganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAndmFsdWUtc2V0JzogZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5maWVsZF0uY29udHJvbHNbJ3ZhbHVlJ10udmFsdWVcclxuICAgIH1cIlxyXG4gID5cclxuICAgIDxwPlxyXG4gICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XHJcbiAgICA8L3A+XHJcblxyXG4gICAgQGlmIChjb2x1bW4uZXhwYW5kZWQpIHtcclxuICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjb2x1bW4uZXhwYW5kZWQgPSAhY29sdW1uLmV4cGFuZGVkXCJcclxuICAgICAgICA+a2V5Ym9hcmRfYXJyb3dfdXA8L21hdC1pY29uXHJcbiAgICAgID5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8bWF0LWljb24gKGNsaWNrKT1cImNvbHVtbi5leHBhbmRlZCA9ICFjb2x1bW4uZXhwYW5kZWRcIlxyXG4gICAgICAgID5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
128
+ }] }, { type: i1.MatDialogRef }, { type: i0.ChangeDetectorRef }, { type: i2.StTablesTranslationsService }] });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBR04sTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7OztBQWV6RSxNQUFNLE9BQU8sa0NBQWtDO0lBSzdDLFlBRVMsVUFHTixFQUNNLFNBR04sRUFDTyxpQkFBb0MsRUFDckMsbUJBQWdEO1FBVGhELGVBQVUsR0FBVixVQUFVLENBR2hCO1FBQ00sY0FBUyxHQUFULFNBQVMsQ0FHZjtRQUNPLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDckMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUE2QjtRQWZ6RCxrQkFBYSxHQUFHLE1BQU0sQ0FBbUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixpQkFBWSxHQUFHLE1BQU0sQ0FBMkMsRUFB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TyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUMzQixVQUFzQztRQUV0QyxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMxQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO2FBQU0sSUFDTCxVQUFVLEtBQUssUUFBUTtZQUN2QixVQUFVLEtBQUssU0FBUztZQUN4QixVQUFVLEtBQUssUUFBUSxFQUN2QixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQzsrR0EvSVUsa0NBQWtDLGtCQU1uQyxlQUFlO21HQU5kLGtDQUFrQyx1RUMxQi9DLHN1RkFrRkE7OzRGRHhEYSxrQ0FBa0M7a0JBTjlDLFNBQVM7K0JBQ0UsaUNBQWlDLG1CQUcxQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFRNUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5qZWN0LFxyXG4gIG1vZGVsLFxyXG4gIE9uSW5pdCxcclxuICBzaWduYWwsXHJcbiAgV3JpdGFibGVTaWduYWwsXHJcbiAgZWZmZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy92aWV3L3ZpZXctc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvc3QtdGFibGVzLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RNYXRlcmlhbENvbHVtbkZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXIsXHJcbiAgU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzdC1tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZmlsdGVyQ29sdW1ucyA9IHNpZ25hbDxWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXT4oW10pO1xyXG4gIGFsbFZpc2libGUgPSBzaWduYWwodHJ1ZSk7XHJcbiAgZmlsdGVyc1ZhbHVlID0gc2lnbmFsPHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0+KHt9KTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSlcclxuICAgIHB1YmxpYyBkaWFsb2dEYXRhOiB7XHJcbiAgICAgIGNvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdO1xyXG4gICAgICBpbml0RmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxuICAgIH0sXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8XHJcbiAgICAgIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dSZXN1bHRcclxuICAgID4sXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBzdFRhYmxlVHJhbnNsYXRpb25zOiBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGhhc0ZpbHRlclZhbHVlKGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcnNWYWx1ZSgpW2NvbHVtbi5maWVsZF07XHJcbiAgICBpZiAoIWZpbHRlcj8udmFsdWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoY29sdW1uLmZpbHRlclR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWVzID0gZmlsdGVyLnZhbHVlIGFzIFtzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsXTtcclxuICAgICAgcmV0dXJuICEhKGRhdGVWYWx1ZXM/LlswXSB8fCBkYXRlVmFsdWVzPy5bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhIWZpbHRlci52YWx1ZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZGlhbG9nRGF0YS5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpXHJcbiAgICAgIC5tYXAoY29sID0+IHtcclxuICAgICAgICBsZXQgZmlsdGVyVmFsdWU6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChjb2wuZmlsdGVyVHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IGNvbC5maWx0ZXJUeXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgZmlsdGVyVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sLmZpbHRlclR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBmaWx0ZXJWYWx1ZSA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sLmZpbHRlclR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgZmlsdGVyVmFsdWUgPSBbbnVsbCwgbnVsbF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlcnNWYWx1ZS51cGRhdGUoY3VycmVudCA9PiAoe1xyXG4gICAgICAgICAgLi4uY3VycmVudCxcclxuICAgICAgICAgIFtjb2wuZmllbGRdOiB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJWYWx1ZSxcclxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxyXG4gICAgICAgICAgICAgIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQuZ2V0QmFzZU1hdGNoTW9kZUJ5VHlwZShcclxuICAgICAgICAgICAgICAgIGNvbC5maWx0ZXJUeXBlIVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIGV4cGFuZGVkOiB0cnVlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucy5zZXQoY29sdW1ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5pbml0RmlsdGVycykge1xyXG4gICAgICB0aGlzLmZpbHRlcnNWYWx1ZS5zZXQodGhpcy5kaWFsb2dEYXRhLmluaXRGaWx0ZXJzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVyKGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKSB7XHJcbiAgICB0aGlzLmZpbHRlcnNWYWx1ZS51cGRhdGUoY3VycmVudCA9PiAoe1xyXG4gICAgICAuLi5jdXJyZW50LFxyXG4gICAgICBbY29sdW1uLmZpZWxkXToge1xyXG4gICAgICAgIHZhbHVlOiB0aGlzLmdldERlZmF1bHRGaWx0ZXJWYWx1ZShjb2x1bW4uZmlsdGVyVHlwZSEpLFxyXG4gICAgICAgIG1hdGNoTW9kZTogY3VycmVudFtjb2x1bW4uZmllbGRdLm1hdGNoTW9kZSxcclxuICAgICAgfSxcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcclxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucygpLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlcihjb2x1bW4pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93QWxsRmlsdGVycygpIHtcclxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucy51cGRhdGUoY29sdW1ucyA9PlxyXG4gICAgICBjb2x1bW5zLm1hcChjb2x1bW4gPT4gKHsgLi4uY29sdW1uLCBleHBhbmRlZDogdHJ1ZSB9KSlcclxuICAgICk7XHJcbiAgICB0aGlzLmFsbFZpc2libGUuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT5cclxuICAgICAgY29sdW1ucy5tYXAoY29sdW1uID0+ICh7IC4uLmNvbHVtbiwgZXhwYW5kZWQ6IGZhbHNlIH0pKVxyXG4gICAgKTtcclxuICAgIHRoaXMuYWxsVmlzaWJsZS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XHJcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVyc1ZhbHVlKCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZpbHRlclZhbHVlQ2hhbmdlZChcclxuICAgIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLFxyXG4gICAgbmV3RmlsdGVyOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXJcclxuICApIHtcclxuICAgIHRoaXMuZmlsdGVyc1ZhbHVlLnVwZGF0ZShjdXJyZW50ID0+ICh7XHJcbiAgICAgIC4uLmN1cnJlbnQsXHJcbiAgICAgIFtjb2x1bW4uZmllbGRdOiBuZXdGaWx0ZXIsXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRGaWx0ZXJWYWx1ZShcclxuICAgIGZpbHRlclR5cGU6IFN0TWF0ZXJpYWxDb2x1bW5GaWx0ZXJUeXBlXHJcbiAgKTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlIHtcclxuICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xyXG4gICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICByZXR1cm4gW251bGwsIG51bGxdO1xyXG4gICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0QmFzZU1hdGNoTW9kZUJ5VHlwZShcclxuICAgIGZpbHRlclR5cGU6IFN0TWF0ZXJpYWxDb2x1bW5GaWx0ZXJUeXBlXHJcbiAgKTogJ2NvbnRhaW5zJyB8ICdlcXVhbCcgfCAnYmV0d2Vlbicge1xyXG4gICAgaWYgKGZpbHRlclR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICByZXR1cm4gJ2JldHdlZW4nO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgZmlsdGVyVHlwZSA9PT0gJ251bWJlcicgfHxcclxuICAgICAgZmlsdGVyVHlwZSA9PT0gJ2Jvb2xlYW4nIHx8XHJcbiAgICAgIGZpbHRlclR5cGUgPT09ICdjdXN0b20nXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICdlcXVhbCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2NvbnRhaW5zJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ1Jlc3VsdCB7XHJcbiAgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxufVxyXG4iLCI8aDMgbWF0LWRpYWxvZy10aXRsZSBjbGFzcz1cImZpbHRlcnMtZGlhbG9nLXRpdGxlXCI+XHJcbiAge3sgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmZpbHRlclRpdGxlIH19XHJcbiAgPGRpdiBjbGFzcz1cImZpbHRlcnMtc2hvdy1oaWRlXCI+XHJcbiAgICBAaWYgKCFhbGxWaXNpYmxlKCkpIHtcclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJzaG93QWxsRmlsdGVycygpXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuZXhwYW5kQWxsRmlsdGVyc1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+dW5mb2xkX21vcmU8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoYWxsVmlzaWJsZSgpKSB7XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAoY2xpY2spPVwiaGlkZUFsbEZpbHRlcnMoKVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuY29sbGFwc2VBbGxGaWx0ZXJzXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbj51bmZvbGRfbGVzczwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwic3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLmNsZWFyQWxsRmlsdGVyc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbj5maWx0ZXJfYWx0X29mZjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9oMz5cclxuXHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPGhyIC8+XHJcbiAgQGZvciAoY29sdW1uIG9mIGZpbHRlckNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmZpZWxkKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGl0bGUgcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICBAaWYgKGhhc0ZpbHRlclZhbHVlKGNvbHVtbikpIHtcclxuICAgICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVyKGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXZhbHVlLWNsZWFyXCJcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuY2xlYXJGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgID5maWx0ZXJfYWx0X29mZjwvbWF0LWljb25cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYgKGNvbHVtbi5leHBhbmRlZCkge1xyXG4gICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjb2x1bW4uZXhwYW5kZWQgPSAhY29sdW1uLmV4cGFuZGVkXCJcclxuICAgICAgICAgICAgPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjb2x1bW4uZXhwYW5kZWQgPSAhY29sdW1uLmV4cGFuZGVkXCJcclxuICAgICAgICAgICAgPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250ZW50IHJvd1wiIFtuZ0NsYXNzXT1cInsgaGlkZTogIWNvbHVtbi5leHBhbmRlZCB9XCI+XHJcbiAgICAgICAgPG5neC1zdC1tYXRlcmlhbC10YWJsZS1maWx0ZXJcclxuICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgIFtmaWx0ZXJWYWx1ZV09XCJmaWx0ZXJzVmFsdWUoKVtjb2x1bW4uZmllbGRdXCJcclxuICAgICAgICAgIChmaWx0ZXJWYWx1ZUNoYW5nZWQpPVwiZmlsdGVyVmFsdWVDaGFuZ2VkKGNvbHVtbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG48bWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPlxyXG4gICAgICB7eyBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuY2FuY2VsIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cInNhdmVGaWx0ZXJzKClcIj5cclxuICAgICAge3sgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnNhdmUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuIl19