ngx-st-tables 17.0.131 → 17.0.133

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.
Files changed (15) hide show
  1. package/esm2022/lib/components/material-table/material-table-caption/material-table-caption.component.mjs +59 -57
  2. package/esm2022/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component.mjs +44 -67
  3. package/esm2022/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter.component.mjs +101 -119
  4. package/esm2022/lib/components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component.mjs +24 -25
  5. package/esm2022/lib/components/material-table/material-table-row-cell/material-table-row-cell.component.mjs +45 -39
  6. package/esm2022/lib/components/material-table/material-table.component.mjs +223 -209
  7. package/fesm2022/ngx-st-tables.mjs +480 -499
  8. package/fesm2022/ngx-st-tables.mjs.map +1 -1
  9. package/lib/components/material-table/material-table-caption/material-table-caption.component.d.ts +7 -9
  10. package/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component.d.ts +7 -14
  11. package/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter.component.d.ts +8 -7
  12. package/lib/components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component.d.ts +3 -8
  13. package/lib/components/material-table/material-table-row-cell/material-table-row-cell.component.d.ts +10 -11
  14. package/lib/components/material-table/material-table.component.d.ts +20 -15
  15. package/package.json +1 -1
@@ -1,34 +1,27 @@
1
- import { ChangeDetectionStrategy, Component, Input, input, output, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, input, output, signal, computed, inject, } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
3
  import { StBaseService, StSubscribeDestroyComponent, } from 'ngx-st-base-functions';
4
- import { debounceTime, distinctUntilChanged, filter, take, takeUntil, } from 'rxjs/operators';
4
+ import { debounceTime, filter, take, takeUntil } from 'rxjs/operators';
5
+ import { MatDialog } from '@angular/material/dialog';
5
6
  import { MaterialTableFilterDialogComponent, } from './material-table-filter-dialog/material-table-filter-dialog.component';
6
7
  import { MaterialTableOrderColumnDialogComponent } from './material-table-order-column-dialog/material-table-order-column-dialog.component';
8
+ import { StTablesTranslationsService } from '../../../services/st-tables-translations.service';
7
9
  import * as i0 from "@angular/core";
8
- import * as i1 from "../../../services/st-tables-translations.service";
9
- import * as i2 from "@angular/material/dialog";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "@angular/material/button";
12
- import * as i5 from "@angular/material/icon";
13
- import * as i6 from "@angular/material/form-field";
14
- import * as i7 from "@angular/material/input";
15
- import * as i8 from "@angular/material/tooltip";
16
- import * as i9 from "@angular/forms";
17
- import * as i10 from "@angular/material/select";
18
- import * as i11 from "@angular/material/core";
19
- import * as i12 from "@angular/material/badge";
10
+ import * as i1 from "@angular/common";
11
+ import * as i2 from "@angular/material/button";
12
+ import * as i3 from "@angular/material/icon";
13
+ import * as i4 from "@angular/material/form-field";
14
+ import * as i5 from "@angular/material/input";
15
+ import * as i6 from "@angular/material/tooltip";
16
+ import * as i7 from "@angular/forms";
17
+ import * as i8 from "@angular/material/select";
18
+ import * as i9 from "@angular/material/core";
19
+ import * as i10 from "@angular/material/badge";
20
20
  export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
21
- set columns(data) {
22
- this._columns = data ? data : [];
23
- this.updateColumns();
24
- }
25
- get columns() {
26
- return this._columns;
27
- }
28
- constructor(stTableTranslations, dialog) {
29
- super();
30
- this.stTableTranslations = stTableTranslations;
31
- this.dialog = dialog;
21
+ constructor() {
22
+ super(...arguments);
23
+ this.stTableTranslations = inject(StTablesTranslationsService);
24
+ this.dialog = inject(MatDialog);
32
25
  this.showGlobalSearch = input();
33
26
  this.tableTitle = input('');
34
27
  this.allowPickColumns = input(true);
@@ -37,11 +30,18 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
37
30
  this.initFilters = input({});
38
31
  this.showCreateButton = input(false);
39
32
  this.createButtonLabel = input('Create');
40
- this.createButtonAction = input(() => { });
33
+ this.createButtonAction = input();
41
34
  this.allowCreateRow = input(false);
42
35
  this.disableCreateButton = input(false);
43
36
  this.creatingRow = input(false);
44
37
  this.extraCustomFilter = input();
38
+ this.columns = input([], {
39
+ transform: (data) => {
40
+ this._columns = data ? data : [];
41
+ this.updateColumns();
42
+ return this._columns;
43
+ },
44
+ });
45
45
  this._columns = [];
46
46
  this.captionDataChanged = output();
47
47
  this.resetTableSettings = output();
@@ -49,22 +49,38 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
49
49
  this.showFilterButton = false;
50
50
  this.selectedColumns = new FormControl([]);
51
51
  this.globalSearch = new FormControl('');
52
- this.activeFiltersCount = 0;
52
+ this.filtersSignal = signal({});
53
+ // Computed property for active filters count - more efficient than recalculating every time
54
+ this.activeFiltersCount = computed(() => {
55
+ const filters = this.filtersSignal();
56
+ return Object.keys(filters).filter(key => {
57
+ const filterValue = filters[key]?.value;
58
+ if (Array.isArray(filterValue)) {
59
+ return filterValue.some(value => value !== null && value !== '');
60
+ }
61
+ return filterValue !== null && filterValue !== '';
62
+ }).length;
63
+ });
53
64
  this.columnsOrder = [];
54
- this.filters = {};
65
+ }
66
+ get filters() {
67
+ return this.filtersSignal();
68
+ }
69
+ set filters(value) {
70
+ this.filtersSignal.set(value);
55
71
  }
56
72
  ngOnInit() {
57
73
  this.globalSearch.setValue(this.initGlobalSearch() || '');
58
74
  this.filters = this.initFilters() || {};
59
- this.setActiveFiltersCount();
75
+ // Optimized: debounceTime already prevents rapid emissions, no need for distinctUntilChanged
60
76
  this.selectedColumns.valueChanges
61
- .pipe(takeUntil(this.ngDestroyed$), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)), debounceTime(400))
62
- .subscribe(value => {
77
+ .pipe(takeUntil(this.ngDestroyed$), debounceTime(400))
78
+ .subscribe(() => {
63
79
  this.emitCaptionDataChanged();
64
80
  });
65
81
  this.globalSearch.valueChanges
66
- .pipe(takeUntil(this.ngDestroyed$), distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)), debounceTime(400))
67
- .subscribe(value => {
82
+ .pipe(takeUntil(this.ngDestroyed$), debounceTime(400))
83
+ .subscribe(() => {
68
84
  this.emitCaptionDataChanged();
69
85
  });
70
86
  }
@@ -73,7 +89,7 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
73
89
  .open(MaterialTableFilterDialogComponent, {
74
90
  data: {
75
91
  initFilters: this.filters,
76
- columns: this.columns,
92
+ columns: this.columns(),
77
93
  },
78
94
  maxWidth: '550px',
79
95
  width: '100%',
@@ -83,7 +99,6 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
83
99
  .pipe(take(1), filter(StBaseService.notNull))
84
100
  .subscribe((res) => {
85
101
  this.filters = res.filters;
86
- this.setActiveFiltersCount();
87
102
  this.emitCaptionDataChanged();
88
103
  });
89
104
  }
@@ -91,7 +106,7 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
91
106
  this.dialog
92
107
  .open(MaterialTableOrderColumnDialogComponent, {
93
108
  data: {
94
- columns: this.columns,
109
+ columns: this.columns(),
95
110
  },
96
111
  maxWidth: '450px',
97
112
  width: '100%',
@@ -113,8 +128,9 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
113
128
  }
114
129
  }
115
130
  createButtonClicked() {
116
- if (this.createButtonAction()) {
117
- this.createButtonAction()();
131
+ const action = this.createButtonAction();
132
+ if (action) {
133
+ action();
118
134
  }
119
135
  }
120
136
  // clearAllFilters() {
@@ -142,25 +158,11 @@ export class MaterialTableCaptionComponent extends StSubscribeDestroyComponent {
142
158
  this.selectedColumns.setValue(this._columns.filter(col => col.visible).map(col => col.field) || []);
143
159
  this.columnsOrder = this._columns.map(col => col.field) || [];
144
160
  }
145
- setActiveFiltersCount() {
146
- const filtersKeys = Object.keys(this.filters);
147
- this.activeFiltersCount = filtersKeys.filter(key => {
148
- const filterValue = this.filters[key]?.value;
149
- if (Array.isArray(filterValue)) {
150
- // Dla filtrów typu date (które są tablicami)
151
- return filterValue.some(value => value !== null && value !== '');
152
- }
153
- // Dla pozostałych typów filtrów
154
- return filterValue !== null && filterValue !== '';
155
- }).length;
156
- }
157
- 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 }); }
158
- 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 }, allowCreateRow: { classPropertyName: "allowCreateRow", publicName: "allowCreateRow", isSignal: true, isRequired: false, transformFunction: null }, disableCreateButton: { classPropertyName: "disableCreateButton", publicName: "disableCreateButton", isSignal: true, isRequired: false, transformFunction: null }, creatingRow: { classPropertyName: "creatingRow", publicName: "creatingRow", isSignal: true, isRequired: false, transformFunction: null }, extraCustomFilter: { classPropertyName: "extraCustomFilter", publicName: "extraCustomFilter", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { captionDataChanged: "captionDataChanged", resetTableSettings: "resetTableSettings", addNewRow: "addNewRow" }, 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() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()),\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\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"resetTable()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().resetTableSettings\r\n \"\r\n >\r\n <mat-icon class=\"reorder-icon\">refresh</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowReorderColumns()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"openReorderColumnsDialog()\"\r\n >\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 (\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()\r\n ) {\r\n <div class=\"col-auto d-flex align-items-center gap-1\">\r\n @if (extraCustomFilter()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"extraCustomFilter()!\"\r\n ></ng-container>\r\n }\r\n\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 type=\"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 type=\"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 (allowCreateRow()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createRowClicked()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (showCreateButton()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-flat-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createButtonClicked()\"\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: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], 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: "directive", type: i10.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i12.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MaterialTableCaptionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
162
+ 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 }, allowCreateRow: { classPropertyName: "allowCreateRow", publicName: "allowCreateRow", isSignal: true, isRequired: false, transformFunction: null }, disableCreateButton: { classPropertyName: "disableCreateButton", publicName: "disableCreateButton", isSignal: true, isRequired: false, transformFunction: null }, creatingRow: { classPropertyName: "creatingRow", publicName: "creatingRow", isSignal: true, isRequired: false, transformFunction: null }, extraCustomFilter: { classPropertyName: "extraCustomFilter", publicName: "extraCustomFilter", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { captionDataChanged: "captionDataChanged", resetTableSettings: "resetTableSettings", addNewRow: "addNewRow" }, 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() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()),\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\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"resetTable()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().resetTableSettings\r\n \"\r\n >\r\n <mat-icon class=\"reorder-icon\">refresh</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowReorderColumns()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"openReorderColumnsDialog()\"\r\n >\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 (\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()\r\n ) {\r\n <div class=\"col-auto d-flex align-items-center gap-1\">\r\n @if (extraCustomFilter()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"extraCustomFilter()!\"\r\n ></ng-container>\r\n }\r\n\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 type=\"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 type=\"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 (allowCreateRow()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createRowClicked()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (showCreateButton()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-flat-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createButtonClicked()\"\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: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.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: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i8.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i10.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
159
163
  }
160
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MaterialTableCaptionComponent, decorators: [{
161
165
  type: Component,
162
- args: [{ selector: 'st-material-table-caption', changeDetection: ChangeDetectionStrategy.OnPush, 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() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()),\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\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"resetTable()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().resetTableSettings\r\n \"\r\n >\r\n <mat-icon class=\"reorder-icon\">refresh</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowReorderColumns()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"openReorderColumnsDialog()\"\r\n >\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 (\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()\r\n ) {\r\n <div class=\"col-auto d-flex align-items-center gap-1\">\r\n @if (extraCustomFilter()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"extraCustomFilter()!\"\r\n ></ng-container>\r\n }\r\n\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 type=\"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 type=\"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 (allowCreateRow()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createRowClicked()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (showCreateButton()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-flat-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createButtonClicked()\"\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"] }]
163
- }], ctorParameters: () => [{ type: i1.StTablesTranslationsService }, { type: i2.MatDialog }], propDecorators: { columns: [{
164
- type: Input
165
- }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtY2FwdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWNhcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxLQUFLLEVBQ0wsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLDJCQUEyQixHQUM1QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLGtDQUFrQyxHQUVuQyxNQUFNLHVFQUF1RSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLG1GQUFtRixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWE1SSxNQUFNLE9BQU8sNkJBQ1gsU0FBUSwyQkFBMkI7SUErQm5DLElBQ0ksT0FBTyxDQUFDLElBQXNDO1FBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztR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d0VDeEMxQyxpcUtBNEpBOzs0RkRwSGEsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNFLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTTt3SEFtQzNDLE9BQU87c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBpbnB1dCxcclxuICBvdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy92aWV3L3ZpZXctc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgU3RCYXNlU2VydmljZSxcclxuICBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnQsXHJcbn0gZnJvbSAnbmd4LXN0LWJhc2UtZnVuY3Rpb25zJztcclxuaW1wb3J0IHtcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgZmlsdGVyLFxyXG4gIHRha2UsXHJcbiAgdGFrZVVudGlsLFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtcclxuICBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nQ29tcG9uZW50LFxyXG4gIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dSZXN1bHQsXHJcbn0gZnJvbSAnLi9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0ZXJpYWxUYWJsZU9yZGVyQ29sdW1uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9tYXRlcmlhbC10YWJsZS1vcmRlci1jb2x1bW4tZGlhbG9nL21hdGVyaWFsLXRhYmxlLW9yZGVyLWNvbHVtbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3QtdGFibGVzLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBJQ2FwdGlvbkRhdGFDaGFuZ2VkLFxyXG4gIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcixcclxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLXRhYmxlLWNhcHRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLXRhYmxlLWNhcHRpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVGFibGVDYXB0aW9uQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgc2hvd0dsb2JhbFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHRhYmxlVGl0bGUgPSBpbnB1dCgnJyk7XHJcblxyXG4gIGFsbG93UGlja0NvbHVtbnMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgYWxsb3dSZW9yZGVyQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBpbml0R2xvYmFsU2VhcmNoID0gaW5wdXQoJycpO1xyXG5cclxuICBpbml0RmlsdGVycyA9IGlucHV0PHtcclxuICAgIFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICB9Pih7fSk7XHJcblxyXG4gIHNob3dDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkxhYmVsID0gaW5wdXQoJ0NyZWF0ZScpO1xyXG5cclxuICBjcmVhdGVCdXR0b25BY3Rpb24gPSBpbnB1dDwoKSA9PiB2b2lkPigoKSA9PiB7fSk7XHJcblxyXG4gIGFsbG93Q3JlYXRlUm93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBkaXNhYmxlQ3JlYXRlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjcmVhdGluZ1JvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXh0cmFDdXN0b21GaWx0ZXIgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2x1bW5zKGRhdGE6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zID0gZGF0YSA/IGRhdGEgOiBbXTtcclxuICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHVtbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdID0gW107XHJcblxyXG4gIGNhcHRpb25EYXRhQ2hhbmdlZCA9IG91dHB1dDxJQ2FwdGlvbkRhdGFDaGFuZ2VkPigpO1xyXG5cclxuICByZXNldFRhYmxlU2V0dGluZ3MgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcclxuXHJcbiAgYWRkTmV3Um93ID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHNob3dGaWx0ZXJCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0ZWRDb2x1bW5zID0gbmV3IEZvcm1Db250cm9sKDxzdHJpbmdbXT5bXSk7XHJcbiAgZ2xvYmFsU2VhcmNoID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuXHJcbiAgYWN0aXZlRmlsdGVyc0NvdW50ID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBjb2x1bW5zT3JkZXI6IHN0cmluZ1tdID0gW107XHJcbiAgcHJpdmF0ZSBmaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHN0VGFibGVUcmFuc2xhdGlvbnM6IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoLnNldFZhbHVlKHRoaXMuaW5pdEdsb2JhbFNlYXJjaCgpIHx8ICcnKTtcclxuICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuaW5pdEZpbHRlcnMoKSB8fCB7fTtcclxuICAgIHRoaXMuc2V0QWN0aXZlRmlsdGVyc0NvdW50KCk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXHJcbiAgICAgICAgICAocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoNDAwKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuZW1pdENhcHRpb25EYXRhQ2hhbmdlZCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSg0MDApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZpbHRlckRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgIC5vcGVuKE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBpbml0RmlsdGVyczogdGhpcy5maWx0ZXJzLFxyXG4gICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWF4V2lkdGg6ICc1NTBweCcsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlKDEpLCBmaWx0ZXIoU3RCYXNlU2VydmljZS5ub3ROdWxsKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gcmVzLmZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVGaWx0ZXJzQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuUmVvcmRlckNvbHVtbnNEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAub3BlbihNYXRlcmlhbFRhYmxlT3JkZXJDb2x1bW5EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYXhXaWR0aDogJzQ1MHB4JyxcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2UoMSksIGZpbHRlcihTdEJhc2VTZXJ2aWNlLm5vdE51bGwpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IHsgY29sdW1uc09yZGVyOiBzdHJpbmdbXSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXIgPSByZXN1bHQuY29sdW1uc09yZGVyO1xyXG4gICAgICAgIHRoaXMuZW1pdENhcHRpb25EYXRhQ2hhbmdlZCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0VGFibGUoKSB7XHJcbiAgICB0aGlzLnJlc2V0VGFibGVTZXR0aW5ncy5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlUm93Q2xpY2tlZCgpIHtcclxuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRlUm93KCkpIHtcclxuICAgICAgdGhpcy5hZGROZXdSb3cuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkNsaWNrZWQoKSB7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVCdXR0b25BY3Rpb24oKSkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUJ1dHRvbkFjdGlvbigpKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgLy8gICBjb25zdCBmaWx0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycyk7XHJcbiAgLy8gICBmaWx0ZXJzS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgLy8gICAgIGlmICh0aGlzLmZpbHRlcnNba2V5XSkge1xyXG4gIC8vICAgICAgIHRoaXMuZmlsdGVyc1trZXldID0gJyc7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vXHJcbiAgLy8gICB0aGlzLnNldEFjdGl2ZUZpbHRlcnNDb3VudCgpO1xyXG4gIC8vICAgdGhpcy5lbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCk7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIGVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLmNhcHRpb25EYXRhQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zOiB0aGlzLnNlbGVjdGVkQ29sdW1ucy52YWx1ZSB8fCBbXSxcclxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLmdsb2JhbFNlYXJjaC52YWx1ZSB8fCAnJyxcclxuICAgICAgY29sdW1uc09yZGVyOiB0aGlzLmNvbHVtbnNPcmRlciB8fCBbXSxcclxuICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnMoKSB7XHJcbiAgICBjb25zdCBjb2x1bW5zRmlsdGVycyA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKTtcclxuICAgIHRoaXMuc2hvd0ZpbHRlckJ1dHRvbiA9IGNvbHVtbnNGaWx0ZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zZXRWYWx1ZShcclxuICAgICAgdGhpcy5fY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlKS5tYXAoY29sID0+IGNvbC5maWVsZCkgfHwgW11cclxuICAgICk7XHJcbiAgICB0aGlzLmNvbHVtbnNPcmRlciA9IHRoaXMuX2NvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmllbGQpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBY3RpdmVGaWx0ZXJzQ291bnQoKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycyk7XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlcnNDb3VudCA9IGZpbHRlcnNLZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuZmlsdGVyc1trZXldPy52YWx1ZTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgLy8gRGxhIGZpbHRyw7N3IHR5cHUgZGF0ZSAoa3TDs3JlIHPEhSB0YWJsaWNhbWkpXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBEbGEgcG96b3N0YcWCeWNoIHR5cMOzdyBmaWx0csOzd1xyXG4gICAgICByZXR1cm4gZmlsdGVyVmFsdWUgIT09IG51bGwgJiYgZmlsdGVyVmFsdWUgIT09ICcnO1xyXG4gICAgfSkubGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKFxyXG4gIGFsbG93UGlja0NvbHVtbnMoKSB8fFxyXG4gIHRhYmxlVGl0bGUoKSB8fFxyXG4gIGFsbG93UmVvcmRlckNvbHVtbnMoKSB8fFxyXG4gIHNob3dHbG9iYWxTZWFyY2goKSB8fFxyXG4gIHNob3dGaWx0ZXJCdXR0b24gfHxcclxuICBzaG93Q3JlYXRlQnV0dG9uKClcclxuKSB7XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJzdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nOlxyXG4gICAgICAgIChhbGxvd1BpY2tDb2x1bW5zKCkgfHwgdGFibGVUaXRsZSgpIHx8IGFsbG93UmVvcmRlckNvbHVtbnMoKSkgJiZcclxuICAgICAgICAoc2hvd0dsb2JhbFNlYXJjaCgpIHx8XHJcbiAgICAgICAgICBzaG93RmlsdGVyQnV0dG9uIHx8XHJcbiAgICAgICAgICBzaG93Q3JlYXRlQnV0dG9uKCkgfHxcclxuICAgICAgICAgIGV4dHJhQ3VzdG9tRmlsdGVyKCkpLFxyXG4gICAgICAnanVzdGlmeS1jb250ZW50LWVuZCc6XHJcbiAgICAgICAgIWFsbG93UGlja0NvbHVtbnMoKSAmJiAhdGFibGVUaXRsZSgpICYmICFhbGxvd1Jlb3JkZXJDb2x1bW5zKClcclxuICAgIH1cIlxyXG4gID5cclxuICAgIEBpZiAoYWxsb3dQaWNrQ29sdW1ucygpIHx8IHRhYmxlVGl0bGUoKSB8fCBhbGxvd1Jlb3JkZXJDb2x1bW5zKCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICBAaWYgKHRhYmxlVGl0bGUoKSkge1xyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHRhYmxlVGl0bGUoKSB9fTwvcD5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoYWxsb3dQaWNrQ29sdW1ucygpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNhcHRpb24tc2VsZWN0LWNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkQ29sdW1uc1wiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvbHVtbnMudmFsdWUgPyBzZWxlY3RlZENvbHVtbnMudmFsdWUhLmxlbmd0aCA6IDAgfX1cclxuICAgICAgICAgICAgICAgIGNvbHVtbnMgc2VsZWN0ZWRcclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29sdW1uLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi50eXBlID09PSAnYWN0aW9ucydcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplXCJcclxuICAgICAgICAgICAgICAgICAgPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNlbGVjdENvbHVtbkxhYmVsIHx8IGNvbHVtbi5oZWFkZXIgfHwgY29sdW1uLmZpZWxkXHJcbiAgICAgICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChhbGxvd1BpY2tDb2x1bW5zKCkgfHwgdGFibGVUaXRsZSgpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0VGFibGUoKVwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgIHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yZXNldFRhYmxlU2V0dGluZ3NcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicmVvcmRlci1pY29uXCI+cmVmcmVzaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoYWxsb3dSZW9yZGVyQ29sdW1ucygpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SZW9yZGVyQ29sdW1uc0RpYWxvZygpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicmVvcmRlci1pY29uXCI+bG93X3ByaW9yaXR5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmIChcclxuICAgICAgc2hvd0dsb2JhbFNlYXJjaCgpIHx8XHJcbiAgICAgIHNob3dGaWx0ZXJCdXR0b24gfHxcclxuICAgICAgc2hvd0NyZWF0ZUJ1dHRvbigpIHx8XHJcbiAgICAgIGV4dHJhQ3VzdG9tRmlsdGVyKClcclxuICAgICkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgIEBpZiAoZXh0cmFDdXN0b21GaWx0ZXIoKSkge1xyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJleHRyYUN1c3RvbUZpbHRlcigpIVwiXHJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKHNob3dGaWx0ZXJCdXR0b24pIHtcclxuICAgICAgICAgIDwhLS0gICAgICAgIEBpZiAoYWN0aXZlRmlsdGVyc0NvdW50KSB7LS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgIDxidXR0b24tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgICBtYXQtaWNvbi1idXR0b24tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGxGaWx0ZXJzKClcIi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidDbGVhciBGaWx0ZXJzJ1wiLS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgID4tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgICA8bWF0LWljb24+ZmlsdGVyX2FsdF9vZmY8L21hdC1pY29uPi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICA8L2J1dHRvbj4tLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgIH0tLT5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5GaWx0ZXJEaWFsb2coKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICBbbWF0QmFkZ2VdPVwiYWN0aXZlRmlsdGVyc0NvdW50XCJcclxuICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiIWFjdGl2ZUZpbHRlcnNDb3VudFwiXHJcbiAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICA+ZmlsdGVyX2FsdDwvbWF0LWljb25cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKHNob3dHbG9iYWxTZWFyY2goKSkge1xyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzZWFyY2gtZmllbGRcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2xvYmFsU2VhcmNoXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuZ2xvYmFsU2VhcmNoXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdsb2JhbFNlYXJjaC5zZXRWYWx1ZSgnJylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChhbGxvd0NyZWF0ZVJvdygpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVDcmVhdGVCdXR0b24oKSB8fCBjcmVhdGluZ1JvdygpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVJvd0NsaWNrZWQoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKHNob3dDcmVhdGVCdXR0b24oKSkge1xyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQ3JlYXRlQnV0dG9uKCkgfHwgY3JlYXRpbmdSb3coKVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVCdXR0b25DbGlja2VkKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjcmVhdGVCdXR0b25MYWJlbCgpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==
166
+ args: [{ selector: 'st-material-table-caption', changeDetection: ChangeDetectionStrategy.OnPush, 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() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()),\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\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"resetTable()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().resetTableSettings\r\n \"\r\n >\r\n <mat-icon class=\"reorder-icon\">refresh</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowReorderColumns()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"openReorderColumnsDialog()\"\r\n >\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 (\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()\r\n ) {\r\n <div class=\"col-auto d-flex align-items-center gap-1\">\r\n @if (extraCustomFilter()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"extraCustomFilter()!\"\r\n ></ng-container>\r\n }\r\n\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 type=\"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 type=\"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 (allowCreateRow()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createRowClicked()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (showCreateButton()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-flat-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createButtonClicked()\"\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"] }]
167
+ }] });
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtY2FwdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWNhcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEdBQzVCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsa0NBQWtDLEdBRW5DLE1BQU0sdUVBQXVFLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sbUZBQW1GLENBQUM7QUFDNUksT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7OztBQVkvRixNQUFNLE9BQU8sNkJBQ1gsU0FBUSwyQkFBMkI7SUFQckM7O1FBVVMs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QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIGlucHV0LFxyXG4gIG91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBzaWduYWwsXHJcbiAgY29tcHV0ZWQsXHJcbiAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdmlldy92aWV3LXN0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIFN0QmFzZVNlcnZpY2UsXHJcbiAgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50LFxyXG59IGZyb20gJ25neC1zdC1iYXNlLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCxcclxuICBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nUmVzdWx0LFxyXG59IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdGVyaWFsVGFibGVPcmRlckNvbHVtbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtb3JkZXItY29sdW1uLWRpYWxvZy9tYXRlcmlhbC10YWJsZS1vcmRlci1jb2x1bW4tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0LXRhYmxlcy10cmFuc2xhdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgSUNhcHRpb25EYXRhQ2hhbmdlZCxcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXIsXHJcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3N0LW1hdGVyaWFsLXRhYmxlLWNhcHRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ2FwdGlvbkNvbXBvbmVudFxyXG4gIGV4dGVuZHMgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gIHB1YmxpYyBzdFRhYmxlVHJhbnNsYXRpb25zID0gaW5qZWN0KFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcclxuXHJcbiAgc2hvd0dsb2JhbFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KCk7XHJcbiAgdGFibGVUaXRsZSA9IGlucHV0KCcnKTtcclxuICBhbGxvd1BpY2tDb2x1bW5zID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgYWxsb3dSZW9yZGVyQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIGluaXRHbG9iYWxTZWFyY2ggPSBpbnB1dCgnJyk7XHJcbiAgaW5pdEZpbHRlcnMgPSBpbnB1dDx7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9Pih7fSk7XHJcbiAgc2hvd0NyZWF0ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjcmVhdGVCdXR0b25MYWJlbCA9IGlucHV0KCdDcmVhdGUnKTtcclxuICBjcmVhdGVCdXR0b25BY3Rpb24gPSBpbnB1dDwoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ+KCk7XHJcbiAgYWxsb3dDcmVhdGVSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgZGlzYWJsZUNyZWF0ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjcmVhdGluZ1JvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBleHRyYUN1c3RvbUZpbHRlciA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KCk7XHJcbiAgY29sdW1ucyA9IGlucHV0KFtdLCB7XHJcbiAgICB0cmFuc2Zvcm06IChkYXRhOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSkgPT4ge1xyXG4gICAgICB0aGlzLl9jb2x1bW5zID0gZGF0YSA/IGRhdGEgOiBbXTtcclxuICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xyXG4gICAgfSxcclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBfY29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgY2FwdGlvbkRhdGFDaGFuZ2VkID0gb3V0cHV0PElDYXB0aW9uRGF0YUNoYW5nZWQ+KCk7XHJcbiAgcmVzZXRUYWJsZVNldHRpbmdzID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcbiAgYWRkTmV3Um93ID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHNob3dGaWx0ZXJCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0ZWRDb2x1bW5zID0gbmV3IEZvcm1Db250cm9sKDxzdHJpbmdbXT5bXSk7XHJcbiAgZ2xvYmFsU2VhcmNoID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJzU2lnbmFsID0gc2lnbmFsPHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0+KHt9KTtcclxuXHJcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydHkgZm9yIGFjdGl2ZSBmaWx0ZXJzIGNvdW50IC0gbW9yZSBlZmZpY2llbnQgdGhhbiByZWNhbGN1bGF0aW5nIGV2ZXJ5IHRpbWVcclxuICBhY3RpdmVGaWx0ZXJzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzU2lnbmFsKCk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycykuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZmlsdGVyc1trZXldPy52YWx1ZTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmlsdGVyVmFsdWUgIT09IG51bGwgJiYgZmlsdGVyVmFsdWUgIT09ICcnO1xyXG4gICAgfSkubGVuZ3RoO1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIGNvbHVtbnNPcmRlcjogc3RyaW5nW10gPSBbXTtcclxuICBwcml2YXRlIGdldCBmaWx0ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyc1NpZ25hbCgpO1xyXG4gIH1cclxuICBwcml2YXRlIHNldCBmaWx0ZXJzKHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9KSB7XHJcbiAgICB0aGlzLmZpbHRlcnNTaWduYWwuc2V0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2guc2V0VmFsdWUodGhpcy5pbml0R2xvYmFsU2VhcmNoKCkgfHwgJycpO1xyXG4gICAgdGhpcy5maWx0ZXJzID0gdGhpcy5pbml0RmlsdGVycygpIHx8IHt9O1xyXG5cclxuICAgIC8vIE9wdGltaXplZDogZGVib3VuY2VUaW1lIGFscmVhZHkgcHJldmVudHMgcmFwaWQgZW1pc3Npb25zLCBubyBuZWVkIGZvciBkaXN0aW5jdFVudGlsQ2hhbmdlZFxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksIGRlYm91bmNlVGltZSg0MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2gudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksIGRlYm91bmNlVGltZSg0MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuRmlsdGVyRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dcclxuICAgICAgLm9wZW4oTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGluaXRGaWx0ZXJzOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMoKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1heFdpZHRoOiAnNTUwcHgnLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgfSlcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZSgxKSwgZmlsdGVyKFN0QmFzZVNlcnZpY2Uubm90TnVsbCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVycyA9IHJlcy5maWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuZW1pdENhcHRpb25EYXRhQ2hhbmdlZCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5SZW9yZGVyQ29sdW1uc0RpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgIC5vcGVuKE1hdGVyaWFsVGFibGVPcmRlckNvbHVtbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucygpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWF4V2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlKDEpLCBmaWx0ZXIoU3RCYXNlU2VydmljZS5ub3ROdWxsKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiB7IGNvbHVtbnNPcmRlcjogc3RyaW5nW10gfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc09yZGVyID0gcmVzdWx0LmNvbHVtbnNPcmRlcjtcclxuICAgICAgICB0aGlzLmVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldFRhYmxlKCkge1xyXG4gICAgdGhpcy5yZXNldFRhYmxlU2V0dGluZ3MuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJvd0NsaWNrZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hbGxvd0NyZWF0ZVJvdygpKSB7XHJcbiAgICAgIHRoaXMuYWRkTmV3Um93LmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVCdXR0b25DbGlja2VkKCkge1xyXG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jcmVhdGVCdXR0b25BY3Rpb24oKTtcclxuICAgIGlmIChhY3Rpb24pIHtcclxuICAgICAgYWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgLy8gICBjb25zdCBmaWx0ZXJzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycyk7XHJcbiAgLy8gICBmaWx0ZXJzS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgLy8gICAgIGlmICh0aGlzLmZpbHRlcnNba2V5XSkge1xyXG4gIC8vICAgICAgIHRoaXMuZmlsdGVyc1trZXldID0gJyc7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vXHJcbiAgLy8gICB0aGlzLnNldEFjdGl2ZUZpbHRlcnNDb3VudCgpO1xyXG4gIC8vICAgdGhpcy5lbWl0Q2FwdGlvbkRhdGFDaGFuZ2VkKCk7XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIGVtaXRDYXB0aW9uRGF0YUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLmNhcHRpb25EYXRhQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zOiB0aGlzLnNlbGVjdGVkQ29sdW1ucy52YWx1ZSB8fCBbXSxcclxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLmdsb2JhbFNlYXJjaC52YWx1ZSB8fCAnJyxcclxuICAgICAgY29sdW1uc09yZGVyOiB0aGlzLmNvbHVtbnNPcmRlciB8fCBbXSxcclxuICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnMoKSB7XHJcbiAgICBjb25zdCBjb2x1bW5zRmlsdGVycyA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKTtcclxuICAgIHRoaXMuc2hvd0ZpbHRlckJ1dHRvbiA9IGNvbHVtbnNGaWx0ZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zZXRWYWx1ZShcclxuICAgICAgdGhpcy5fY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlKS5tYXAoY29sID0+IGNvbC5maWVsZCkgfHwgW11cclxuICAgICk7XHJcbiAgICB0aGlzLmNvbHVtbnNPcmRlciA9IHRoaXMuX2NvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmllbGQpIHx8IFtdO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKFxyXG4gIGFsbG93UGlja0NvbHVtbnMoKSB8fFxyXG4gIHRhYmxlVGl0bGUoKSB8fFxyXG4gIGFsbG93UmVvcmRlckNvbHVtbnMoKSB8fFxyXG4gIHNob3dHbG9iYWxTZWFyY2goKSB8fFxyXG4gIHNob3dGaWx0ZXJCdXR0b24gfHxcclxuICBzaG93Q3JlYXRlQnV0dG9uKClcclxuKSB7XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJzdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nOlxyXG4gICAgICAgIChhbGxvd1BpY2tDb2x1bW5zKCkgfHwgdGFibGVUaXRsZSgpIHx8IGFsbG93UmVvcmRlckNvbHVtbnMoKSkgJiZcclxuICAgICAgICAoc2hvd0dsb2JhbFNlYXJjaCgpIHx8XHJcbiAgICAgICAgICBzaG93RmlsdGVyQnV0dG9uIHx8XHJcbiAgICAgICAgICBzaG93Q3JlYXRlQnV0dG9uKCkgfHxcclxuICAgICAgICAgIGV4dHJhQ3VzdG9tRmlsdGVyKCkpLFxyXG4gICAgICAnanVzdGlmeS1jb250ZW50LWVuZCc6XHJcbiAgICAgICAgIWFsbG93UGlja0NvbHVtbnMoKSAmJiAhdGFibGVUaXRsZSgpICYmICFhbGxvd1Jlb3JkZXJDb2x1bW5zKClcclxuICAgIH1cIlxyXG4gID5cclxuICAgIEBpZiAoYWxsb3dQaWNrQ29sdW1ucygpIHx8IHRhYmxlVGl0bGUoKSB8fCBhbGxvd1Jlb3JkZXJDb2x1bW5zKCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICBAaWYgKHRhYmxlVGl0bGUoKSkge1xyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHRhYmxlVGl0bGUoKSB9fTwvcD5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoYWxsb3dQaWNrQ29sdW1ucygpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNhcHRpb24tc2VsZWN0LWNvbHVtbnNcIj5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkQ29sdW1uc1wiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvbHVtbnMudmFsdWUgPyBzZWxlY3RlZENvbHVtbnMudmFsdWUhLmxlbmd0aCA6IDAgfX1cclxuICAgICAgICAgICAgICAgIGNvbHVtbnMgc2VsZWN0ZWRcclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1ucygpOyB0cmFjayBjb2x1bW4uZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2x1bW4uZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zJ1wiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVcIlxyXG4gICAgICAgICAgICAgICAgICA+e3tcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2VsZWN0Q29sdW1uTGFiZWwgfHwgY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKGFsbG93UGlja0NvbHVtbnMoKSB8fCB0YWJsZVRpdGxlKCkpIHtcclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwicmVzZXRUYWJsZSgpXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnJlc2V0VGFibGVTZXR0aW5nc1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW9yZGVyLWljb25cIj5yZWZyZXNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChhbGxvd1Jlb3JkZXJDb2x1bW5zKCkpIHtcclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblJlb3JkZXJDb2x1bW5zRGlhbG9nKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW9yZGVyLWljb25cIj5sb3dfcHJpb3JpdHk8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKFxyXG4gICAgICBzaG93R2xvYmFsU2VhcmNoKCkgfHxcclxuICAgICAgc2hvd0ZpbHRlckJ1dHRvbiB8fFxyXG4gICAgICBzaG93Q3JlYXRlQnV0dG9uKCkgfHxcclxuICAgICAgZXh0cmFDdXN0b21GaWx0ZXIoKVxyXG4gICAgKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICAgICAgQGlmIChleHRyYUN1c3RvbUZpbHRlcigpKSB7XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImV4dHJhQ3VzdG9tRmlsdGVyKCkhXCJcclxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoc2hvd0ZpbHRlckJ1dHRvbikge1xyXG4gICAgICAgICAgPCEtLSAgICAgICAgQGlmIChhY3RpdmVGaWx0ZXJzQ291bnQpIHstLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgPGJ1dHRvbi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIChjbGljayk9XCJjbGVhckFsbEZpbHRlcnMoKVwiLS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0NsZWFyIEZpbHRlcnMnXCItLT5cclxuICAgICAgICAgIDwhLS0gICAgICAgICAgPi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgICAgIDxtYXQtaWNvbj5maWx0ZXJfYWx0X29mZjwvbWF0LWljb24+LS0+XHJcbiAgICAgICAgICA8IS0tICAgICAgICAgIDwvYnV0dG9uPi0tPlxyXG4gICAgICAgICAgPCEtLSAgICAgICAgfS0tPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib3BlbkZpbHRlckRpYWxvZygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgIFttYXRCYWRnZV09XCJhY3RpdmVGaWx0ZXJzQ291bnQoKVwiXHJcbiAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiFhY3RpdmVGaWx0ZXJzQ291bnQoKVwiXHJcbiAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYmVmb3JlXCJcclxuICAgICAgICAgICAgICA+ZmlsdGVyX2FsdDwvbWF0LWljb25cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKHNob3dHbG9iYWxTZWFyY2goKSkge1xyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzZWFyY2gtZmllbGRcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2xvYmFsU2VhcmNoXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAgICAgICBzdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkuZ2xvYmFsU2VhcmNoXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdsb2JhbFNlYXJjaC5zZXRWYWx1ZSgnJylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChhbGxvd0NyZWF0ZVJvdygpKSB7XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVDcmVhdGVCdXR0b24oKSB8fCBjcmVhdGluZ1JvdygpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVJvd0NsaWNrZWQoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKHNob3dDcmVhdGVCdXR0b24oKSkge1xyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQ3JlYXRlQnV0dG9uKCkgfHwgY3JlYXRpbmdSb3coKVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVCdXR0b25DbGlja2VkKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjcmVhdGVCdXR0b25MYWJlbCgpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==