ecabs-components 1.0.13 → 1.0.14

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.
@@ -1,7 +1,7 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
2
  import { UntypedFormControl, NgControl, NG_VALUE_ACCESSOR, } from '@angular/forms';
3
3
  import { MatSelectSearchComponent } from 'ngx-mat-select-search';
4
- import { combineLatest, debounceTime, map, ReplaySubject, Subscription, } from 'rxjs';
4
+ import { BehaviorSubject, combineLatest, debounceTime, map, Subscription, } from 'rxjs';
5
5
  import ElementBaseComponent from '../base/element-base';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/common";
@@ -31,10 +31,12 @@ export class EcabsSelectComponent extends ElementBaseComponent {
31
31
  this.othersLabel = 'Others';
32
32
  this.updateFilterItems = new EventEmitter();
33
33
  this.selectionChange = new EventEmitter();
34
- this.filteredItems$ = new ReplaySubject(1);
34
+ this.filteredItems$ = new BehaviorSubject([]);
35
35
  this.itemFilterCtrl = new UntypedFormControl();
36
36
  this.isClearAll = false;
37
37
  this.showFilteredAllOption = true;
38
+ this.selectedItems = [];
39
+ this.notSelectedItems = [];
38
40
  this.subscriptions = new Subscription();
39
41
  // eslint-disable-next-line @typescript-eslint/no-empty-function
40
42
  this.onChange = () => { };
@@ -47,22 +49,20 @@ export class EcabsSelectComponent extends ElementBaseComponent {
47
49
  set value(val) {
48
50
  if (this.val !== val) {
49
51
  this.val = val;
52
+ this.setSelectedItems();
50
53
  this.onChange(val);
51
54
  this.onTouch(val);
52
55
  }
53
56
  }
54
57
  ngOnChanges(changes) {
55
- if (changes['items'] && changes['items'].currentValue) {
56
- this.filteredItems$.next(changes['items'].currentValue.slice());
58
+ const { items } = changes;
59
+ if (items && items.currentValue) {
57
60
  this.filterItems();
58
- if (this.multiple &&
59
- this.useSelectAllOption &&
60
- this.allSelected?.selected) {
61
+ if (this.multiple && this.useSelectAllOption && this.allSelected?.selected) {
61
62
  setTimeout(() => {
62
- this.control.patchValue([
63
- ...this.items.map((item) => item.value),
64
- this.selectAllValue,
65
- ], { emitEvent: false });
63
+ this.control.patchValue([...this.filteredItems$.value.map((item) => item.value), this.selectAllValue], {
64
+ emitEvent: false,
65
+ });
66
66
  }, 100);
67
67
  }
68
68
  }
@@ -88,17 +88,19 @@ export class EcabsSelectComponent extends ElementBaseComponent {
88
88
  this.filterItems();
89
89
  this.updateFilterItems.emit(value);
90
90
  if (this.isClearAll) {
91
- this.control.patchValue([]);
91
+ this.control.patchValue([], { emitEvent: false });
92
92
  this.isClearAll = false;
93
93
  }
94
94
  }));
95
95
  }
96
96
  toggleAllSelection() {
97
97
  if (this.allSelected.selected) {
98
- this.control.patchValue([
99
- ...this.items.map((item) => item.value),
100
- this.selectAllValue,
101
- ]);
98
+ if (this.useSearchOption) {
99
+ this.control.patchValue([...this.filteredItems$.value.map((item) => item.value), this.selectAllValue]);
100
+ }
101
+ else {
102
+ this.control.patchValue([...this.items.map((item) => item.value), this.selectAllValue]);
103
+ }
102
104
  }
103
105
  else {
104
106
  this.control.patchValue([]);
@@ -120,19 +122,30 @@ export class EcabsSelectComponent extends ElementBaseComponent {
120
122
  });
121
123
  this.isClearAll = false;
122
124
  }
125
+ toggleNone() {
126
+ this.selectedItems = [];
127
+ }
123
128
  getAllSelectedChecked() {
124
129
  return this.allSelected !== undefined && this.allSelected.selected;
125
130
  }
126
131
  getLabel(val) {
127
- if (this.useSelectAllOption &&
128
- this.allSelected?.selected &&
129
- this.items &&
130
- this.items.length > 0) {
132
+ if (this.useSelectAllOption && this.allSelected?.selected && this.items && this.items.length > 0) {
131
133
  return this.items[0].label;
132
134
  }
133
- if (val !== undefined && this.items && this.items.length > 0) {
134
- // eslint-disable-next-line @typescript-eslint/no-shadow
135
- const item = this.items.find((item) => item.value === val);
135
+ let item;
136
+ if (val !== undefined) {
137
+ if (this.useSearchOption) {
138
+ if (this.selectedItems && this.selectedItems.length > 0) {
139
+ // eslint-disable-next-line @typescript-eslint/no-shadow
140
+ item = this.selectedItems.find((item) => item.value === val);
141
+ }
142
+ }
143
+ else {
144
+ if (this.items && this.items.length > 0) {
145
+ // eslint-disable-next-line @typescript-eslint/no-shadow
146
+ item = this.items.find((item) => item.value === val);
147
+ }
148
+ }
136
149
  return item ? item.label : '';
137
150
  }
138
151
  return '';
@@ -153,25 +166,89 @@ export class EcabsSelectComponent extends ElementBaseComponent {
153
166
  this.selectionChange.emit($event);
154
167
  }
155
168
  filterItems() {
169
+ this.setSelectedItems();
156
170
  if (!this.items) {
157
171
  return;
158
172
  }
159
173
  // get the search keyword
160
174
  let search = this.itemFilterCtrl.value;
161
175
  if (!search || search === '') {
162
- this.filteredItems$.next(this.items.slice());
176
+ if (this.useSearchOption) {
177
+ this.filteredItems$.next([...this.selectedItems]);
178
+ }
179
+ else {
180
+ this.filteredItems$.next(this.items?.slice());
181
+ }
163
182
  this.showFilteredAllOption = true;
164
183
  return;
165
184
  }
166
185
  search = search.toLowerCase();
167
- this.showFilteredAllOption = this.allLabel.toLowerCase().includes(search.toLowerCase());
186
+ this.showFilteredAllOption =
187
+ this.allLabel.toLowerCase().includes(search.toLowerCase()) ||
188
+ (this.value instanceof Array && this.value.includes(this.selectAllValue)) ||
189
+ (!(this.value instanceof Array) && this.value === this.selectAllValue);
168
190
  this.changeDetectorRef.detectChanges();
169
- this.filteredItems$.next(this.items && this.items.length > 0
170
- ? this.items.filter((item) => item.label.toLowerCase().includes(search.toLowerCase()))
171
- : []);
172
- this.filteredItems$.next(this.items && this.items.length > 0
173
- ? this.items.filter((item) => item.label.toLowerCase().includes(search.toLowerCase()))
174
- : []);
191
+ if (this.useSearchOption) {
192
+ const filteredItems = this.notSelectedItems?.length > 0
193
+ ? this.notSelectedItems.filter((item) => item.label.toLowerCase().includes(search.toLowerCase()))
194
+ : [];
195
+ this.filteredItems$.next([...this.selectedItems, ...filteredItems]);
196
+ }
197
+ else {
198
+ this.filteredItems$.next(this.items?.length > 0
199
+ ? this.items.filter((item) => item.label.toLowerCase().includes(search.toLowerCase()))
200
+ : []);
201
+ }
202
+ }
203
+ setSelectedItems() {
204
+ if (this.useSearchOption) {
205
+ const selectedItems = [];
206
+ if (this.value) {
207
+ if (this.value instanceof Array) {
208
+ const skipSteps = this.value.includes(this.selectAllValue);
209
+ if (!skipSteps) {
210
+ this.value.forEach((value) => {
211
+ const index = this.selectedItems.findIndex((selectedItem) => selectedItem.value === value);
212
+ if (index !== -1) {
213
+ selectedItems.push(this.selectedItems[index]);
214
+ }
215
+ else {
216
+ // eslint-disable-next-line @typescript-eslint/no-shadow
217
+ const item = this.items.find((item) => item.value === value);
218
+ if (item) {
219
+ selectedItems.push(item);
220
+ }
221
+ }
222
+ });
223
+ this.selectedItems.forEach((selectedItem) => {
224
+ const index = this.value.find((value) => selectedItem.value === value);
225
+ if (index === -1) {
226
+ selectedItems.splice(index, 1);
227
+ }
228
+ });
229
+ }
230
+ }
231
+ else {
232
+ const index = this.selectedItems.findIndex((selectedItem) => selectedItem.value === this.value);
233
+ if (index !== -1) {
234
+ selectedItems.push(this.selectedItems[index]);
235
+ }
236
+ else {
237
+ // eslint-disable-next-line @typescript-eslint/no-shadow
238
+ const item = this.items.find((item) => item.value === this.value);
239
+ // eslint-disable-next-line max-depth
240
+ if (item) {
241
+ selectedItems.push(item);
242
+ }
243
+ }
244
+ }
245
+ this.selectedItems = [...selectedItems];
246
+ this.notSelectedItems = this.items?.filter((item) => this.selectedItems.findIndex((selectedItem) => selectedItem.value === item.value) === -1);
247
+ }
248
+ else {
249
+ this.notSelectedItems = this.items?.slice();
250
+ }
251
+ }
175
252
  }
176
253
  }
177
254
  EcabsSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EcabsSelectComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
@@ -181,7 +258,7 @@ EcabsSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
181
258
  useExisting: EcabsSelectComponent,
182
259
  multi: true,
183
260
  },
184
- ], viewQueries: [{ propertyName: "allSelected", first: true, predicate: ["allSelected"], descendants: true }, { propertyName: "matSelectSearchComponent", first: true, predicate: MatSelectSearchComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n class=\"form-field__select\"\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n [id]=\"name\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n [disableRipple]=\"true\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\">{{ noneLabel }}</mat-option>\r\n <mat-option\r\n #allSelected\r\n *ngIf=\"useSelectAllOption && showFilteredAllOption\"\r\n (click)=\"toggleAllSelection()\"\r\n [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
261
+ ], viewQueries: [{ propertyName: "allSelected", first: true, predicate: ["allSelected"], descendants: true }, { propertyName: "matSelectSearchComponent", first: true, predicate: MatSelectSearchComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n class=\"form-field__select\"\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n [id]=\"name\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n [disableRipple]=\"true\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\" (click)=\"toggleNone()\">{{ noneLabel }}</mat-option>\r\n <mat-option\r\n #allSelected\r\n *ngIf=\"useSelectAllOption && showFilteredAllOption\"\r\n (click)=\"toggleAllSelection()\"\r\n [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
185
262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EcabsSelectComponent, decorators: [{
186
263
  type: Component,
187
264
  args: [{ selector: 'ecabs-select', providers: [
@@ -190,7 +267,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
190
267
  useExisting: EcabsSelectComponent,
191
268
  multi: true,
192
269
  },
193
- ], template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n class=\"form-field__select\"\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n [id]=\"name\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n [disableRipple]=\"true\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\">{{ noneLabel }}</mat-option>\r\n <mat-option\r\n #allSelected\r\n *ngIf=\"useSelectAllOption && showFilteredAllOption\"\r\n (click)=\"toggleAllSelection()\"\r\n [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n" }]
270
+ ], template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n class=\"form-field__select\"\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n [id]=\"name\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n [disableRipple]=\"true\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\" (click)=\"toggleNone()\">{{ noneLabel }}</mat-option>\r\n <mat-option\r\n #allSelected\r\n *ngIf=\"useSelectAllOption && showFilteredAllOption\"\r\n (click)=\"toggleAllSelection()\"\r\n [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n" }]
194
271
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
195
272
  type: Input
196
273
  }], multiple: [{
@@ -230,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
230
307
  type: ViewChild,
231
308
  args: [MatSelectSearchComponent]
232
309
  }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLEdBQUcsRUFDSCxhQUFhLEVBQ2IsWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7O0FBYXhELE1BQU0sT0FBTyxvQkFDWCxTQUFRLG9CQUFvQjtJQTRDNUIsWUFDbUIsUUFBa0IsRUFDbEIsaUJBQW9DO1FBRXJELEtBQUssRUFBRSxDQUFDO1FBSFMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBM0M5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBVyxRQUFRLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG9DQUErQixHQUFHLElBQUksQ0FBQztRQUN2QyxtQkFBYyxHQUFRLENBQUMsQ0FBQztRQUN4Qix3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUMxQyxjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ25CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLE9BQU8sQ0FBQztRQUNyQixnQkFBVyxHQUFHLFFBQVEsQ0FBQztRQUN0QixzQkFBaUIsR0FDekIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuQixvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBT3ZFLG1CQUFjLEdBQ1osSUFBSSxhQUFhLENBQW1DLENBQUMsQ0FBRSxDQUFDO1FBQzFELG1CQUFjLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQWtGbkMsZ0VBQWdFO1FBQ2hFLGFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUIsZ0VBQWdFO1FBQ2hFLFlBQU8sR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFsRXpCLENBQUM7SUFqQkQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBRSxHQUFHO1FBQ1osSUFBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRztZQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksQ0FBQyxRQUFRLENBQUUsR0FBRyxDQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBRSxHQUFHLENBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFTRCxXQUFXLENBQUUsT0FBc0I7UUFDakMsSUFBSyxPQUFPLENBQUUsT0FBTyxDQUFFLElBQUksT0FBTyxDQUFFLE9BQU8sQ0FBRSxDQUFDLFlBQVksRUFBRztZQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBRSxPQUFPLENBQUUsT0FBTyxDQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRW5CLElBQ0UsSUFBSSxDQUFDLFFBQVE7Z0JBQ2IsSUFBSSxDQUFDLGtCQUFrQjtnQkFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQzFCO2dCQUNBLFVBQVUsQ0FBRSxHQUFHLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUU7d0JBQ3ZCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUUsQ0FBRSxJQUFJLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUU7d0JBQzNDLElBQUksQ0FBQyxjQUFjO3FCQUNwQixFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFFLENBQUM7Z0JBQzVCLENBQUMsRUFBRSxHQUFHLENBQUUsQ0FBQzthQUNWO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sU0FBUyxHQUFjLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUM1QyxTQUFTLEVBQ1QsSUFBSSxDQUNRLENBQUM7UUFFZixJQUFLLFNBQVMsRUFBRztZQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQTZCLENBQUM7U0FDeEQ7UUFFRCxJQUFLLElBQUksQ0FBQyx3QkFBd0IsRUFBRztZQUNuQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFFO2dCQUNsRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVk7Z0JBQ2hDLElBQUksQ0FBQyxjQUFjO2FBQ3BCLENBQUUsQ0FBQyxJQUFJLENBQ04sR0FBRyxDQUNELENBQUUsQ0FBRSxLQUFLLEVBQUUsS0FBSyxDQUFFLEVBQUcsRUFBRSxDQUNyQixJQUFJLENBQUMsd0JBQXdCLENBQUMsbUJBQW1CO2dCQUNqRCxLQUFLO2dCQUNMLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUNyQixDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWTthQUM3QixJQUFJLENBQUUsWUFBWSxDQUFFLEdBQUcsQ0FBRSxDQUFFO2FBQzNCLFNBQVMsQ0FBRSxDQUFFLEtBQVUsRUFBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFFLEtBQUssQ0FBRSxDQUFDO1lBRXJDLElBQUssSUFBSSxDQUFDLFVBQVUsRUFBRztnQkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUUsRUFBRSxDQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFFLENBQ04sQ0FBQztJQUNKLENBQUM7SUFPRCxrQkFBa0I7UUFDaEIsSUFBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRztZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBRTtnQkFDdkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBRSxDQUFFLElBQUksRUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRTtnQkFDM0MsSUFBSSxDQUFDLGNBQWM7YUFDcEIsQ0FBRSxDQUFDO1NBQ0w7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFFLEVBQUUsQ0FBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixVQUFVLENBQUUsR0FBRyxFQUFFLENBQUMsQ0FBRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFFLENBQUUsQ0FBQztRQUUxRCxVQUFVLENBQUUsR0FBRyxFQUFFO1lBQ2YsSUFBSyxJQUFJLENBQUMsV0FBVyxFQUFHO2dCQUN0QixJQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFHO29CQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUM3QjtnQkFDRCxJQUFLLElBQUksQ0FBQywrQkFBK0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUc7b0JBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzNCO2FBQ0Y7WUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUMsQ0FBRSxDQUFDO1FBRUosSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxRQUFRLENBQUUsR0FBUTtRQUNoQixJQUNFLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRO1lBQzFCLElBQUksQ0FBQyxLQUFLO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNyQjtZQUNBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUUsQ0FBQyxLQUFLLENBQUM7U0FDOUI7UUFFRCxJQUFLLEdBQUcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUc7WUFDOUQsd0RBQXdEO1lBQ3hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLENBQUUsSUFBSSxFQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBRSxDQUFDO1lBRS9ELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDL0I7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxVQUFVLENBQUUsS0FBVTtRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCLENBQUUsRUFBTztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUUsRUFBTztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQixDQUFFLE1BQVc7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUUsTUFBTSxDQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUc7WUFDakIsT0FBTztTQUNSO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBRS9DLElBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRztZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUVsQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUUsQ0FBQztRQUMxRixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RCLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUUsQ0FBRSxJQUFJLEVBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBRSxDQUFFO1lBQzVGLENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN0QixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFFLENBQUUsSUFBSSxFQUFHLEVBQUUsQ0FDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFFLENBQzFEO1lBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FDUCxDQUFDO0lBQ0osQ0FBQzs7aUhBbE9VLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHNuQkFScEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLG9CQUFvQjtZQUNqQyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsaUxBd0JXLHdCQUF3Qiw0RkMvRHRDLGs0REE2Q0E7MkZESmEsb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLGNBQWMsYUFFYjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHNCQUFzQjs0QkFDakMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7K0hBS1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVxQixXQUFXO3NCQUF0QyxTQUFTO3VCQUFFLGFBQWE7Z0JBRXpCLHdCQUF3QjtzQkFEdkIsU0FBUzt1QkFBRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIE5nQ29udHJvbCxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICduZ3gtbWF0LXNlbGVjdC1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIGNvbWJpbmVMYXRlc3QsXHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIG1hcCxcclxuICBSZXBsYXlTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IEVsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoIHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VjYWJzLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogRWNhYnNTZWxlY3RDb21wb25lbnQsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG59IClcclxuZXhwb3J0IGNsYXNzIEVjYWJzU2VsZWN0Q29tcG9uZW50XHJcbiAgZXh0ZW5kcyBFbGVtZW50QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgaXRlbXMhOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdO1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdXNlTm9uZU9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZU9ubHlEaXNhYmxlZENsYXNzID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlYXJjaCc7XHJcbiAgQElucHV0KCkgdXNlU2VhcmNoT3B0aW9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdXNlU2VsZWN0QWxsT3B0aW9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2V0QWxsT3B0aW9uQWZ0ZXJDaG9zZW5BbGxJdGVtcyA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VsZWN0QWxsVmFsdWU6IGFueSA9IDA7XHJcbiAgQElucHV0KCkgbm9FbnRyaWVzRm91bmRMYWJlbCA9ICdObyBtYXRjaGluZyBmb3VuZCc7XHJcbiAgQElucHV0KCkgbm9uZUxhYmVsID0gJ05vbmUnO1xyXG4gIEBJbnB1dCgpIGFsbExhYmVsID0gJ0FsbCc7XHJcbiAgQElucHV0KCkgb3RoZXJMYWJlbCA9ICdPdGhlcic7XHJcbiAgQElucHV0KCkgb3RoZXJzTGFiZWwgPSAnT3RoZXJzJztcclxuICBAT3V0cHV0KCkgdXBkYXRlRmlsdGVySXRlbXM6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoICdhbGxTZWxlY3RlZCcgKSBhbGxTZWxlY3RlZCE6IE1hdE9wdGlvbjtcclxuICBAVmlld0NoaWxkKCBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnQgKVxyXG4gIG1hdFNlbGVjdFNlYXJjaENvbXBvbmVudCE6IE1hdFNlbGVjdFNlYXJjaENvbXBvbmVudDtcclxuXHJcbiAgdmFsITogYW55O1xyXG4gIGZpbHRlcmVkSXRlbXMkOiBSZXBsYXlTdWJqZWN0PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10+ID1cclxuICAgIG5ldyBSZXBsYXlTdWJqZWN0PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10+KCAxICk7XHJcbiAgaXRlbUZpbHRlckN0cmwgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgaXNDbGVhckFsbCA9IGZhbHNlO1xyXG4gIHNob3dGaWx0ZXJlZEFsbE9wdGlvbiA9IHRydWU7XHJcbiAgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWw7XHJcbiAgfVxyXG5cclxuICBzZXQgdmFsdWUoIHZhbCApIHtcclxuICAgIGlmICggdGhpcy52YWwgIT09IHZhbCApIHtcclxuICAgICAgdGhpcy52YWwgPSB2YWw7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UoIHZhbCApO1xyXG4gICAgICB0aGlzLm9uVG91Y2goIHZhbCApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMgKTogdm9pZCB7XHJcbiAgICBpZiAoIGNoYW5nZXNbICdpdGVtcycgXSAmJiBjaGFuZ2VzWyAnaXRlbXMnIF0uY3VycmVudFZhbHVlICkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoIGNoYW5nZXNbICdpdGVtcycgXS5jdXJyZW50VmFsdWUuc2xpY2UoKSApO1xyXG4gICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5tdWx0aXBsZSAmJlxyXG4gICAgICAgIHRoaXMudXNlU2VsZWN0QWxsT3B0aW9uICYmXHJcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZD8uc2VsZWN0ZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFtcclxuICAgICAgICAgICAgLi4udGhpcy5pdGVtcy5tYXAoICggaXRlbSApID0+IGl0ZW0udmFsdWUgKSxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxWYWx1ZSxcclxuICAgICAgICAgIF0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9ICk7XHJcbiAgICAgICAgfSwgMTAwICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoXHJcbiAgICAgIE5nQ29udHJvbCxcclxuICAgICAgbnVsbFxyXG4gICAgKSBhcyBOZ0NvbnRyb2w7XHJcblxyXG4gICAgaWYgKCBuZ0NvbnRyb2wgKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIHRoaXMubWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50ICkge1xyXG4gICAgICB0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudC5fc2hvd05vRW50cmllc0ZvdW5kJCA9IGNvbWJpbmVMYXRlc3QoIFtcclxuICAgICAgICB0aGlzLml0ZW1GaWx0ZXJDdHJsLnZhbHVlQ2hhbmdlcyxcclxuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLFxyXG4gICAgICBdICkucGlwZShcclxuICAgICAgICBtYXAoXHJcbiAgICAgICAgICAoIFsgdmFsdWUsIGl0ZW1zIF0gKSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudC5ub0VudHJpZXNGb3VuZExhYmVsICYmXHJcbiAgICAgICAgICAgIHZhbHVlICYmXHJcbiAgICAgICAgICAgIGl0ZW1zLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcclxuICAgICAgdGhpcy5pdGVtRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSggZGVib3VuY2VUaW1lKCAyMDAgKSApXHJcbiAgICAgICAgLnN1YnNjcmliZSggKCB2YWx1ZTogYW55ICkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJJdGVtcy5lbWl0KCB2YWx1ZSApO1xyXG5cclxuICAgICAgICAgIGlmICggdGhpcy5pc0NsZWFyQWxsICkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wucGF0Y2hWYWx1ZSggW10gKTtcclxuICAgICAgICAgICAgdGhpcy5pc0NsZWFyQWxsID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIG9uVG91Y2g6IGFueSA9ICgpID0+IHsgfTtcclxuXHJcbiAgdG9nZ2xlQWxsU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCB0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdGVkICkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wucGF0Y2hWYWx1ZSggW1xyXG4gICAgICAgIC4uLnRoaXMuaXRlbXMubWFwKCAoIGl0ZW0gKSA9PiBpdGVtLnZhbHVlICksXHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxWYWx1ZSxcclxuICAgICAgXSApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFtdICk7XHJcbiAgICAgIHRoaXMuaXNDbGVhckFsbCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQZXJPbmUoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiAoIHRoaXMuc2hvd0ZpbHRlcmVkQWxsT3B0aW9uID0gdHJ1ZSApICk7XHJcblxyXG4gICAgc2V0VGltZW91dCggKCkgPT4ge1xyXG4gICAgICBpZiAoIHRoaXMuYWxsU2VsZWN0ZWQgKSB7XHJcbiAgICAgICAgaWYgKCB0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdGVkICkge1xyXG4gICAgICAgICAgdGhpcy5hbGxTZWxlY3RlZC5kZXNlbGVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIHRoaXMuc2V0QWxsT3B0aW9uQWZ0ZXJDaG9zZW5BbGxJdGVtcyAmJiB0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aCApIHtcclxuICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dGaWx0ZXJlZEFsbE9wdGlvbiA9IGZhbHNlO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHRoaXMuaXNDbGVhckFsbCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2VsZWN0ZWRDaGVja2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWxsU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFiZWwoIHZhbDogYW55ICk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudXNlU2VsZWN0QWxsT3B0aW9uICYmXHJcbiAgICAgIHRoaXMuYWxsU2VsZWN0ZWQ/LnNlbGVjdGVkICYmXHJcbiAgICAgIHRoaXMuaXRlbXMgJiZcclxuICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbIDAgXS5sYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIHZhbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwICkge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvd1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcy5maW5kKCAoIGl0ZW0gKSA9PiBpdGVtLnZhbHVlID09PSB2YWwgKTtcclxuXHJcbiAgICAgIHJldHVybiBpdGVtID8gaXRlbS5sYWJlbCA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoIHZhbHVlOiBhbnkgKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKCBmbjogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoIGZuOiBhbnkgKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQoICRldmVudDogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCggJGV2ZW50ICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckl0ZW1zKCk6IHZvaWQge1xyXG4gICAgaWYgKCAhdGhpcy5pdGVtcyApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCB0aGUgc2VhcmNoIGtleXdvcmRcclxuICAgIGxldCBzZWFyY2g6IHN0cmluZyA9IHRoaXMuaXRlbUZpbHRlckN0cmwudmFsdWU7XHJcblxyXG4gICAgaWYgKCAhc2VhcmNoIHx8IHNlYXJjaCA9PT0gJycgKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dCggdGhpcy5pdGVtcy5zbGljZSgpICk7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlcmVkQWxsT3B0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICB0aGlzLnNob3dGaWx0ZXJlZEFsbE9wdGlvbiA9IHRoaXMuYWxsTGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyggc2VhcmNoLnRvTG93ZXJDYXNlKCkgKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dChcclxuICAgICAgdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDBcclxuICAgICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKCAoIGl0ZW0gKSA9PiBpdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoIHNlYXJjaC50b0xvd2VyQ2FzZSgpICkgKVxyXG4gICAgICAgIDogW11cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zJC5uZXh0KFxyXG4gICAgICB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5pdGVtcy5maWx0ZXIoICggaXRlbSApID0+XHJcbiAgICAgICAgICBpdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoIHNlYXJjaC50b0xvd2VyQ2FzZSgpIClcclxuICAgICAgICApXHJcbiAgICAgICAgOiBbXVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1lbGVtZW50LXdyYXBwZXIgW2RhdGFdPVwiZ2V0RGF0YSgpXCI+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IHVzZU9ubHlEaXNhYmxlZENsYXNzIH1cIj5cclxuICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgIGNsYXNzPVwiZm9ybS1maWVsZF9fc2VsZWN0XCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAgIChjbG9zZWQpPVwib25Ub3VjaCgpXCJcclxuICAgICAgW2lkXT1cIm5hbWVcIlxyXG4gICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxyXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImdldEFsbFNlbGVjdGVkQ2hlY2tlZCgpXCI+e3sgYWxsTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhZ2V0QWxsU2VsZWN0ZWRDaGVja2VkKClcIlxyXG4gICAgICAgICAgPnt7IHZhbCAmJiBtdWx0aXBsZSA/IGdldExhYmVsKHZhbFswXSkgOiBnZXRMYWJlbCh2YWwpIH19XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIm11bHRpcGxlICYmIHZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJhZGRpdGlvbmFsLXNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAoK3t7IHVzZVNlbGVjdEFsbE9wdGlvbiAmJiB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZCA/IHZhbHVlPy5sZW5ndGggLSAyIDogdmFsdWU/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAge3sgKHZhbHVlPy5sZW5ndGggPT09IDIgPyBvdGhlckxhYmVsIDogb3RoZXJzTGFiZWwpIH19KVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwidXNlU2VhcmNoT3B0aW9uXCI+XHJcbiAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cIml0ZW1GaWx0ZXJDdHJsXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cInNlYXJjaEZpZWxkUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgW25vRW50cmllc0ZvdW5kTGFiZWxdPVwibm9FbnRyaWVzRm91bmRMYWJlbFwiXHJcbiAgICAgICAgPjwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwidXNlTm9uZU9wdGlvblwiPnt7IG5vbmVMYWJlbCB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgI2FsbFNlbGVjdGVkXHJcbiAgICAgICpuZ0lmPVwidXNlU2VsZWN0QWxsT3B0aW9uICYmIHNob3dGaWx0ZXJlZEFsbE9wdGlvblwiXHJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVBbGxTZWxlY3Rpb24oKVwiXHJcbiAgICAgIFt2YWx1ZV09XCJzZWxlY3RBbGxWYWx1ZVwiPnt7XHJcbiAgICAgICAgYWxsTGFiZWxcclxuICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkSXRlbXMkIHwgYXN5bmNcIiBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIChjbGljayk9XCJ0b2dnbGVQZXJPbmUoKVwiPlxyXG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvYXBwLWVsZW1lbnQtd3JhcHBlcj5cclxuIl19
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixHQUFHLEVBQ0gsWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7O0FBYXhELE1BQU0sT0FBTyxvQkFDWCxTQUFRLG9CQUFvQjtJQWdENUIsWUFDbUIsUUFBa0IsRUFDbEIsaUJBQW9DO1FBRXJELEtBQUssRUFBRSxDQUFDO1FBSFMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBL0M5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBVyxRQUFRLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsS0FB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QUNqQyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsaUxBd0JXLHdCQUF3Qiw0RkMvRHRDLDI1REE2Q0E7MkZESmEsb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLGNBQWMsYUFFYjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHNCQUFzQjs0QkFDakMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7K0hBS1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVxQixXQUFXO3NCQUF0QyxTQUFTO3VCQUFFLGFBQWE7Z0JBRXpCLHdCQUF3QjtzQkFEdkIsU0FBUzt1QkFBRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIE5nQ29udHJvbCxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICduZ3gtbWF0LXNlbGVjdC1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCxcclxuICBjb21iaW5lTGF0ZXN0LFxyXG4gIGRlYm91bmNlVGltZSxcclxuICBtYXAsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgRWxlbWVudEJhc2VDb21wb25lbnQgZnJvbSAnLi4vYmFzZS9lbGVtZW50LWJhc2UnO1xyXG5cclxuQENvbXBvbmVudCgge1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBFY2Fic1NlbGVjdENvbXBvbmVudCxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0gKVxyXG5leHBvcnQgY2xhc3MgRWNhYnNTZWxlY3RDb21wb25lbnRcclxuICBleHRlbmRzIEVsZW1lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBpdGVtcyE6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W107XHJcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VOb25lT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdXNlT25seURpc2FibGVkQ2xhc3MgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoJztcclxuICBASW5wdXQoKSB1c2VTZWFyY2hPcHRpb24gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VTZWxlY3RBbGxPcHRpb24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXRBbGxPcHRpb25BZnRlckNob3NlbkFsbEl0ZW1zID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWxlY3RBbGxWYWx1ZTogYW55ID0gMDtcclxuICBASW5wdXQoKSBub0VudHJpZXNGb3VuZExhYmVsID0gJ05vIG1hdGNoaW5nIGZvdW5kJztcclxuICBASW5wdXQoKSBub25lTGFiZWwgPSAnTm9uZSc7XHJcbiAgQElucHV0KCkgYWxsTGFiZWwgPSAnQWxsJztcclxuICBASW5wdXQoKSBvdGhlckxhYmVsID0gJ090aGVyJztcclxuICBASW5wdXQoKSBvdGhlcnNMYWJlbCA9ICdPdGhlcnMnO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVGaWx0ZXJJdGVtczogRXZlbnRFbWl0dGVyPHN0cmluZz4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCggJ2FsbFNlbGVjdGVkJyApIGFsbFNlbGVjdGVkITogTWF0T3B0aW9uO1xyXG4gIEBWaWV3Q2hpbGQoIE1hdFNlbGVjdFNlYXJjaENvbXBvbmVudCApXHJcbiAgbWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50ITogTWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50O1xyXG5cclxuICB2YWwhOiBhbnk7XHJcbiAgZmlsdGVyZWRJdGVtcyQ6IEJlaGF2aW9yU3ViamVjdDx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdXHJcbiAgPiggW10gKTtcclxuICBpdGVtRmlsdGVyQ3RybDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICBzaG93RmlsdGVyZWRBbGxPcHRpb24gPSB0cnVlO1xyXG4gIHNlbGVjdGVkSXRlbXM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10gPSBbXTtcclxuICBub3RTZWxlY3RlZEl0ZW1zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdID0gW107XHJcbiAgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWw7XHJcbiAgfVxyXG5cclxuICBzZXQgdmFsdWUoIHZhbCApIHtcclxuICAgIGlmICggdGhpcy52YWwgIT09IHZhbCApIHtcclxuICAgICAgdGhpcy52YWwgPSB2YWw7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKCB2YWwgKTtcclxuICAgICAgdGhpcy5vblRvdWNoKCB2YWwgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzICk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBpdGVtcyB9ID0gY2hhbmdlcztcclxuXHJcbiAgICBpZiAoIGl0ZW1zICYmIGl0ZW1zLmN1cnJlbnRWYWx1ZSApIHtcclxuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG5cclxuICAgICAgaWYgKCB0aGlzLm11bHRpcGxlICYmIHRoaXMudXNlU2VsZWN0QWxsT3B0aW9uICYmIHRoaXMuYWxsU2VsZWN0ZWQ/LnNlbGVjdGVkICkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKCBbIC4uLnRoaXMuZmlsdGVyZWRJdGVtcyQudmFsdWUubWFwKCAoIGl0ZW0gKSA9PiBpdGVtLnZhbHVlICksIHRoaXMuc2VsZWN0QWxsVmFsdWUgXSwge1xyXG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSApO1xyXG4gICAgICAgIH0sIDEwMCApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBOZ0NvbnRyb2wsXHJcbiAgICAgIG51bGxcclxuICAgICkgYXMgTmdDb250cm9sO1xyXG5cclxuICAgIGlmICggbmdDb250cm9sICkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCB0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudCApIHtcclxuICAgICAgdGhpcy5tYXRTZWxlY3RTZWFyY2hDb21wb25lbnQuX3Nob3dOb0VudHJpZXNGb3VuZCQgPSBjb21iaW5lTGF0ZXN0KCBbXHJcbiAgICAgICAgdGhpcy5pdGVtRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXMsXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJCxcclxuICAgICAgXSApLnBpcGUoXHJcbiAgICAgICAgbWFwKFxyXG4gICAgICAgICAgKCBbIHZhbHVlLCBpdGVtcyBdICkgPT5cclxuICAgICAgICAgICAgdGhpcy5tYXRTZWxlY3RTZWFyY2hDb21wb25lbnQubm9FbnRyaWVzRm91bmRMYWJlbCAmJlxyXG4gICAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgICBpdGVtcy5sZW5ndGggPT09IDBcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgIHRoaXMuaXRlbUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoIGRlYm91bmNlVGltZSggMjAwICkgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoICggdmFsdWU6IGFueSApID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVySXRlbXMuZW1pdCggdmFsdWUgKTtcclxuXHJcbiAgICAgICAgICBpZiAoIHRoaXMuaXNDbGVhckFsbCApIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFtdLCB7IGVtaXRFdmVudDogZmFsc2UgfSApO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgb25Ub3VjaDogYW55ID0gKCkgPT4geyB9O1xyXG5cclxuICB0b2dnbGVBbGxTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICBpZiAoIHRoaXMuYWxsU2VsZWN0ZWQuc2VsZWN0ZWQgKSB7XHJcbiAgICAgIGlmICggdGhpcy51c2VTZWFyY2hPcHRpb24gKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFsgLi4udGhpcy5maWx0ZXJlZEl0ZW1zJC52YWx1ZS5tYXAoICggaXRlbSApID0+IGl0ZW0udmFsdWUgKSwgdGhpcy5zZWxlY3RBbGxWYWx1ZSBdICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFsgLi4udGhpcy5pdGVtcy5tYXAoICggaXRlbSApID0+IGl0ZW0udmFsdWUgKSwgdGhpcy5zZWxlY3RBbGxWYWx1ZSBdICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKCBbXSApO1xyXG4gICAgICB0aGlzLmlzQ2xlYXJBbGwgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGVyT25lKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCggKCkgPT4gKCB0aGlzLnNob3dGaWx0ZXJlZEFsbE9wdGlvbiA9IHRydWUgKSApO1xyXG5cclxuICAgIHNldFRpbWVvdXQoICgpID0+IHtcclxuICAgICAgaWYgKCB0aGlzLmFsbFNlbGVjdGVkICkge1xyXG4gICAgICAgIGlmICggdGhpcy5hbGxTZWxlY3RlZC5zZWxlY3RlZCApIHtcclxuICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQuZGVzZWxlY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCB0aGlzLnNldEFsbE9wdGlvbkFmdGVyQ2hvc2VuQWxsSXRlbXMgJiYgdGhpcy5jb250cm9sLnZhbHVlLmxlbmd0aCA9PT0gdGhpcy5pdGVtcy5sZW5ndGggKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RmlsdGVyZWRBbGxPcHRpb24gPSBmYWxzZTtcclxuICAgIH0gKTtcclxuXHJcbiAgICB0aGlzLmlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU5vbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlbGVjdGVkQ2hlY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFNlbGVjdGVkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hbGxTZWxlY3RlZC5zZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIGdldExhYmVsKCB2YWw6IGFueSApOiBzdHJpbmcge1xyXG4gICAgaWYgKCB0aGlzLnVzZVNlbGVjdEFsbE9wdGlvbiAmJiB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbIDAgXS5sYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXRlbTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH07XHJcblxyXG4gICAgaWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHtcclxuICAgICAgaWYgKCB0aGlzLnVzZVNlYXJjaE9wdGlvbiApIHtcclxuICAgICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCApIHtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XHJcbiAgICAgICAgICBpdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbmQoICggaXRlbSApID0+IGl0ZW0udmFsdWUgPT09IHZhbCApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwICkge1xyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoICggaXRlbSApID0+IGl0ZW0udmFsdWUgPT09IHZhbCApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmxhYmVsIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSggdmFsdWU6IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoIGZuOiBhbnkgKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZCggZm46IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZCggJGV2ZW50OiBhbnkgKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KCAkZXZlbnQgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVySXRlbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXMoKTtcclxuXHJcbiAgICBpZiAoICF0aGlzLml0ZW1zICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0IHRoZSBzZWFyY2gga2V5d29yZFxyXG4gICAgbGV0IHNlYXJjaDogc3RyaW5nID0gdGhpcy5pdGVtRmlsdGVyQ3RybC52YWx1ZTtcclxuXHJcbiAgICBpZiAoICFzZWFyY2ggfHwgc2VhcmNoID09PSAnJyApIHtcclxuICAgICAgaWYgKCB0aGlzLnVzZVNlYXJjaE9wdGlvbiApIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoIFsgLi4udGhpcy5zZWxlY3RlZEl0ZW1zIF0gKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoIHRoaXMuaXRlbXM/LnNsaWNlKCkgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RmlsdGVyZWRBbGxPcHRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHRoaXMuc2hvd0ZpbHRlcmVkQWxsT3B0aW9uID1cclxuICAgICAgdGhpcy5hbGxMYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCBzZWFyY2gudG9Mb3dlckNhc2UoKSApIHx8XHJcbiAgICAgICggdGhpcy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIHRoaXMudmFsdWUuaW5jbHVkZXMoIHRoaXMuc2VsZWN0QWxsVmFsdWUgKSApIHx8XHJcbiAgICAgICggISggdGhpcy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkgJiYgdGhpcy52YWx1ZSA9PT0gdGhpcy5zZWxlY3RBbGxWYWx1ZSApO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgaWYgKCB0aGlzLnVzZVNlYXJjaE9wdGlvbiApIHtcclxuICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9XHJcbiAgICAgICAgdGhpcy5ub3RTZWxlY3RlZEl0ZW1zPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMubm90U2VsZWN0ZWRJdGVtcy5maWx0ZXIoICggaXRlbSApID0+IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyggc2VhcmNoLnRvTG93ZXJDYXNlKCkgKSApXHJcbiAgICAgICAgICA6IFtdO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoIFsgLi4udGhpcy5zZWxlY3RlZEl0ZW1zLCAuLi5maWx0ZXJlZEl0ZW1zIF0gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dChcclxuICAgICAgICB0aGlzLml0ZW1zPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKCAoIGl0ZW0gKSA9PiBpdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoIHNlYXJjaC50b0xvd2VyQ2FzZSgpICkgKVxyXG4gICAgICAgICAgOiBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1zKCk6IHZvaWQge1xyXG4gICAgaWYgKCB0aGlzLnVzZVNlYXJjaE9wdGlvbiApIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKCB0aGlzLnZhbHVlICkge1xyXG4gICAgICAgIGlmICggdGhpcy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkge1xyXG4gICAgICAgICAgY29uc3Qgc2tpcFN0ZXBzID0gdGhpcy52YWx1ZS5pbmNsdWRlcyggdGhpcy5zZWxlY3RBbGxWYWx1ZSApO1xyXG5cclxuICAgICAgICAgIGlmICggIXNraXBTdGVwcyApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKCAoIHZhbHVlICkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleCggKCBzZWxlY3RlZEl0ZW0gKSA9PiBzZWxlY3RlZEl0ZW0udmFsdWUgPT09IHZhbHVlICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICggaW5kZXggIT09IC0xICkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5wdXNoKCB0aGlzLnNlbGVjdGVkSXRlbXNbIGluZGV4IF0gKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoICggaXRlbSApID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCBpdGVtICkge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goIGl0ZW0gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKCAoIHNlbGVjdGVkSXRlbSApID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUuZmluZCggKCB2YWx1ZSApID0+IHNlbGVjdGVkSXRlbS52YWx1ZSA9PT0gdmFsdWUgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCBpbmRleCA9PT0gLTEgKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnNwbGljZSggaW5kZXgsIDEgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KCAoIHNlbGVjdGVkSXRlbSApID0+IHNlbGVjdGVkSXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZSApO1xyXG5cclxuICAgICAgICAgIGlmICggaW5kZXggIT09IC0xICkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goIHRoaXMuc2VsZWN0ZWRJdGVtc1sgaW5kZXggXSApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmluZCggKCBpdGVtICkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZSApO1xyXG5cclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1kZXB0aFxyXG4gICAgICAgICAgICBpZiAoIGl0ZW0gKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5wdXNoKCBpdGVtICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsgLi4uc2VsZWN0ZWRJdGVtcyBdO1xyXG4gICAgICAgIHRoaXMubm90U2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXM/LmZpbHRlcihcclxuICAgICAgICAgICggaXRlbSApID0+IHRoaXMuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgoICggc2VsZWN0ZWRJdGVtICkgPT4gc2VsZWN0ZWRJdGVtLnZhbHVlID09PSBpdGVtLnZhbHVlICkgPT09IC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm5vdFNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zPy5zbGljZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxhcHAtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiB1c2VPbmx5RGlzYWJsZWRDbGFzcyB9XCI+XHJcbiAgICA8bWF0LXNlbGVjdFxyXG4gICAgICBjbGFzcz1cImZvcm0tZmllbGRfX3NlbGVjdFwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAoY2xvc2VkKT1cIm9uVG91Y2goKVwiXHJcbiAgICAgIFtpZF09XCJuYW1lXCJcclxuICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcclxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRBbGxTZWxlY3RlZENoZWNrZWQoKVwiPnt7IGFsbExhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWdldEFsbFNlbGVjdGVkQ2hlY2tlZCgpXCJcclxuICAgICAgICAgID57eyB2YWwgJiYgbXVsdGlwbGUgPyBnZXRMYWJlbCh2YWxbMF0pIDogZ2V0TGFiZWwodmFsKSB9fVxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJtdWx0aXBsZSAmJiB2YWx1ZT8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiYWRkaXRpb25hbC1zZWxlY3Rpb25cIj5cclxuICAgICAgICAgICAgKCt7eyB1c2VTZWxlY3RBbGxPcHRpb24gJiYgdGhpcy5hbGxTZWxlY3RlZD8uc2VsZWN0ZWQgPyB2YWx1ZT8ubGVuZ3RoIC0gMiA6IHZhbHVlPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgIHt7ICh2YWx1ZT8ubGVuZ3RoID09PSAyID8gb3RoZXJMYWJlbCA6IG90aGVyc0xhYmVsKSB9fSlcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInVzZVNlYXJjaE9wdGlvblwiPlxyXG4gICAgICAgIDxuZ3gtbWF0LXNlbGVjdC1zZWFyY2hcclxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpdGVtRmlsdGVyQ3RybFwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJMYWJlbF09XCJzZWFyY2hGaWVsZFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtub0VudHJpZXNGb3VuZExhYmVsXT1cIm5vRW50cmllc0ZvdW5kTGFiZWxcIlxyXG4gICAgICAgID48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInVzZU5vbmVPcHRpb25cIiAoY2xpY2spPVwidG9nZ2xlTm9uZSgpXCI+e3sgbm9uZUxhYmVsIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAjYWxsU2VsZWN0ZWRcclxuICAgICAgKm5nSWY9XCJ1c2VTZWxlY3RBbGxPcHRpb24gJiYgc2hvd0ZpbHRlcmVkQWxsT3B0aW9uXCJcclxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbFNlbGVjdGlvbigpXCJcclxuICAgICAgW3ZhbHVlXT1cInNlbGVjdEFsbFZhbHVlXCI+e3tcclxuICAgICAgICBhbGxMYWJlbFxyXG4gICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRJdGVtcyQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgKGNsaWNrKT1cInRvZ2dsZVBlck9uZSgpXCI+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9hcHAtZWxlbWVudC13cmFwcGVyPlxyXG4iXX0=