valtech-components 2.0.382 → 2.0.384

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.
@@ -0,0 +1,391 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, forwardRef, inject, Input, ViewChild, signal, computed } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { IonicModule } from '@ionic/angular';
5
+ import { LangService } from '../../../services/lang-provider/lang-provider.service';
6
+ import { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';
7
+ import { replaceSpecialChars } from '../../../shared/utils/text';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@ionic/angular";
11
+ import * as i3 from "@angular/forms";
12
+ export class MultiSelectSimpleComponent {
13
+ constructor() {
14
+ this.labelProperty = 'name';
15
+ this.valueProperty = 'id';
16
+ this.placeholder = '';
17
+ this.langService = inject(LangService);
18
+ // Signals for reactive state management
19
+ this.isOpen = signal(false);
20
+ this.searchTerm = signal('');
21
+ this.selectedValues = signal([]);
22
+ // Computed signals
23
+ this.displayValue = computed(() => {
24
+ const selected = this.selectedValues();
25
+ if (selected.length === 0) {
26
+ return '';
27
+ }
28
+ if (selected.length === 1) {
29
+ const option = this.getOptionByValue(selected[0]);
30
+ return option ? option[this.labelProperty] : '';
31
+ }
32
+ return `${selected.length} elementos seleccionados`;
33
+ });
34
+ this.filteredOptions = computed(() => {
35
+ const options = this.props?.options || [];
36
+ const search = this.searchTerm().toLowerCase();
37
+ if (!search) {
38
+ return options;
39
+ }
40
+ return options.filter(option => {
41
+ const label = option[this.labelProperty]
42
+ ? replaceSpecialChars(String(option[this.labelProperty]).toLowerCase())
43
+ : '';
44
+ const value = option[this.valueProperty]
45
+ ? replaceSpecialChars(String(option[this.valueProperty]).toLowerCase())
46
+ : '';
47
+ const searchTerm = replaceSpecialChars(search);
48
+ return label.includes(searchTerm) || value.includes(searchTerm);
49
+ });
50
+ });
51
+ this.searchPlaceholder = '';
52
+ // ControlValueAccessor
53
+ this.onChange = (_value) => { };
54
+ this.onTouched = () => { };
55
+ this.placeholder = this.langService.getText('_global', 'selectOptions', 'Seleccione opciones');
56
+ this.searchPlaceholder = this.langService.getText('_global', 'search', 'Buscar');
57
+ // Close dropdown when clicking outside
58
+ document.addEventListener('click', this.handleClickOutside.bind(this));
59
+ }
60
+ ngOnInit() {
61
+ this.applyDefaultValue();
62
+ this.syncSelectedValues();
63
+ }
64
+ ngOnDestroy() {
65
+ document.removeEventListener('click', this.handleClickOutside.bind(this));
66
+ }
67
+ ngOnChanges(changes) {
68
+ if (changes['props'] && this.props) {
69
+ this.syncSelectedValues();
70
+ }
71
+ }
72
+ // ControlValueAccessor implementation
73
+ writeValue(value) {
74
+ const valueArray = this.parseValue(value);
75
+ this.selectedValues.set(valueArray);
76
+ }
77
+ registerOnChange(fn) {
78
+ this.onChange = fn;
79
+ }
80
+ registerOnTouched(fn) {
81
+ this.onTouched = fn;
82
+ }
83
+ setDisabledState(_isDisabled) {
84
+ // Handle disabled state if needed
85
+ }
86
+ // Component methods
87
+ toggleDropdown(event) {
88
+ event.stopPropagation();
89
+ this.isOpen.update(value => !value);
90
+ if (this.isOpen()) {
91
+ this.onTouched();
92
+ // Focus search bar when opening
93
+ setTimeout(() => {
94
+ const searchbar = this.dropdownRef?.nativeElement?.querySelector('ion-searchbar');
95
+ if (searchbar) {
96
+ searchbar.setFocus();
97
+ }
98
+ }, 100);
99
+ }
100
+ }
101
+ onSearch(event) {
102
+ this.searchTerm.set(event.detail.value || '');
103
+ }
104
+ toggleOption(option) {
105
+ const value = option[this.valueProperty];
106
+ const currentSelected = this.selectedValues();
107
+ if (this.isSelected(option)) {
108
+ // Remove from selection
109
+ this.selectedValues.set(currentSelected.filter(v => v !== value));
110
+ }
111
+ else {
112
+ // Add to selection
113
+ this.selectedValues.set([...currentSelected, value]);
114
+ }
115
+ this.emitValue();
116
+ }
117
+ selectAll() {
118
+ const allValues = this.filteredOptions().map(option => option[this.valueProperty]);
119
+ const currentSelected = this.selectedValues();
120
+ // Add only new values to avoid duplicates
121
+ const newValues = allValues.filter(value => !currentSelected.includes(value));
122
+ this.selectedValues.set([...currentSelected, ...newValues]);
123
+ this.emitValue();
124
+ }
125
+ clearAll() {
126
+ this.selectedValues.set([]);
127
+ this.emitValue();
128
+ }
129
+ isSelected(option) {
130
+ return this.selectedValues().includes(option[this.valueProperty]);
131
+ }
132
+ trackByFn(_index, option) {
133
+ return option[this.valueProperty];
134
+ }
135
+ handleClickOutside(event) {
136
+ if (this.isOpen() &&
137
+ !this.mainInputRef?.nativeElement?.contains(event.target) &&
138
+ !this.dropdownRef?.nativeElement?.contains(event.target)) {
139
+ this.isOpen.set(false);
140
+ this.searchTerm.set('');
141
+ }
142
+ }
143
+ parseValue(value) {
144
+ if (!value)
145
+ return [];
146
+ if (Array.isArray(value))
147
+ return value.map(v => String(v));
148
+ if (typeof value === 'string') {
149
+ return value.split(',').map(v => v.trim()).filter(v => v !== '');
150
+ }
151
+ return [String(value)];
152
+ }
153
+ emitValue() {
154
+ const value = this.selectedValues().join(',');
155
+ this.onChange(value);
156
+ if (this.props?.control) {
157
+ this.props.control.setValue(value);
158
+ this.props.control.markAsDirty();
159
+ this.props.control.markAsTouched();
160
+ }
161
+ }
162
+ getOptionByValue(value) {
163
+ return this.props?.options?.find(option => option[this.valueProperty] === value);
164
+ }
165
+ applyDefaultValue() {
166
+ if (this.props) {
167
+ applyDefaultValueToControl(this.props);
168
+ }
169
+ }
170
+ syncSelectedValues() {
171
+ if (this.props?.control?.value) {
172
+ const valueArray = this.parseValue(this.props.control.value);
173
+ this.selectedValues.set(valueArray);
174
+ }
175
+ }
176
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiSelectSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MultiSelectSimpleComponent, isStandalone: true, selector: "val-multi-select-simple", inputs: { props: "props", labelProperty: "labelProperty", valueProperty: "valueProperty", placeholder: "placeholder" }, providers: [
178
+ {
179
+ provide: NG_VALUE_ACCESSOR,
180
+ useExisting: forwardRef(() => MultiSelectSimpleComponent),
181
+ multi: true
182
+ }
183
+ ], viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: ["dropdown"], descendants: true }, { propertyName: "mainInputRef", first: true, predicate: ["mainInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
184
+ <div class="multi-select-container" (click)="toggleDropdown($event)">
185
+ <!-- Main input display -->
186
+ <ion-input
187
+ #mainInput
188
+ type="text"
189
+ [value]="displayValue()"
190
+ [placeholder]="props?.placeholder || placeholder"
191
+ readonly
192
+ class="main-input"
193
+ [class.is-open]="isOpen()"
194
+ />
195
+
196
+ <!-- Dropdown icon -->
197
+ <ion-icon
198
+ name="chevron-down-outline"
199
+ class="dropdown-icon"
200
+ [class.rotated]="isOpen()"
201
+ ></ion-icon>
202
+
203
+ <!-- Hidden input for form control -->
204
+ <ion-input
205
+ style="position: absolute; opacity: 0; pointer-events: none;"
206
+ [formControl]="props?.control"
207
+ type="hidden"
208
+ />
209
+ </div>
210
+
211
+ <!-- Dropdown overlay -->
212
+ <div
213
+ class="dropdown-overlay"
214
+ [class.visible]="isOpen()"
215
+ #dropdown
216
+ >
217
+ <!-- Search bar -->
218
+ <div class="search-container">
219
+ <ion-searchbar
220
+ #searchbar
221
+ [placeholder]="searchPlaceholder"
222
+ (ionInput)="onSearch($event)"
223
+ [value]="searchTerm()"
224
+ show-clear-button="focus"
225
+ ></ion-searchbar>
226
+ </div>
227
+
228
+ <!-- Action buttons -->
229
+ <div class="actions-container">
230
+ <ion-button
231
+ fill="clear"
232
+ size="small"
233
+ (click)="selectAll()"
234
+ [disabled]="filteredOptions().length === 0"
235
+ >
236
+ Seleccionar todos
237
+ </ion-button>
238
+ <ion-button
239
+ fill="clear"
240
+ size="small"
241
+ color="medium"
242
+ (click)="clearAll()"
243
+ [disabled]="selectedValues().length === 0"
244
+ >
245
+ Limpiar
246
+ </ion-button>
247
+ </div>
248
+
249
+ <!-- Options list -->
250
+ <div class="options-container">
251
+ <ion-list class="options-list">
252
+ <ion-item
253
+ *ngFor="let option of filteredOptions(); trackBy: trackByFn"
254
+ button
255
+ (click)="toggleOption(option)"
256
+ class="option-item"
257
+ >
258
+ <ion-checkbox
259
+ slot="start"
260
+ [checked]="isSelected(option)"
261
+ ></ion-checkbox>
262
+ <ion-label>{{ option[labelProperty] }}</ion-label>
263
+ </ion-item>
264
+
265
+ <!-- No results message -->
266
+ <ion-item *ngIf="filteredOptions().length === 0" class="no-results">
267
+ <ion-label color="medium">
268
+ {{ searchTerm() ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
269
+ </ion-label>
270
+ </ion-item>
271
+ </ion-list>
272
+ </div>
273
+ </div>
274
+ `, isInline: true, styles: [":host{display:block;position:relative;width:100%}.multi-select-container{position:relative;display:flex;align-items:center;cursor:pointer}.multi-select-container .main-input{flex:1;cursor:pointer}.multi-select-container .main-input.is-open{--border-color: var(--ion-color-primary)}.multi-select-container .dropdown-icon{position:absolute;right:12px;font-size:16px;color:var(--ion-color-medium);transition:transform .2s ease;pointer-events:none;z-index:2}.multi-select-container .dropdown-icon.rotated{transform:rotate(180deg)}.dropdown-overlay{position:absolute;top:100%;left:0;right:0;background:var(--ion-background-color);border:1px solid var(--ion-color-light);border-radius:8px;box-shadow:0 4px 16px #0000001a;z-index:1000;max-height:400px;opacity:0;transform:translateY(-8px);pointer-events:none;transition:all .2s ease}.dropdown-overlay.visible{opacity:1;transform:translateY(4px);pointer-events:all}.search-container{padding:12px;border-bottom:1px solid var(--ion-color-light)}.search-container ion-searchbar{--background: var(--ion-color-light);--border-radius: 8px;--box-shadow: none;--padding-start: 12px;--padding-end: 12px;height:40px}.actions-container{display:flex;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--ion-color-light)}.actions-container ion-button{--padding-start: 8px;--padding-end: 8px;height:32px;font-size:14px}.options-container{max-height:240px;overflow-y:auto}.options-container .options-list{padding:0}.options-container .option-item{--padding-start: 16px;--padding-end: 16px;--min-height: 48px;cursor:pointer}.options-container .option-item:hover{--background: var(--ion-color-light)}.options-container .option-item ion-checkbox{--size: 20px;margin-right:12px}.options-container .option-item ion-label{font-size:16px;line-height:1.4}.options-container .no-results{--padding-start: 16px;--padding-end: 16px;--min-height: 48px;text-align:center}.options-container .no-results ion-label{font-style:italic;font-size:14px}@media (max-width: 768px){.dropdown-overlay{max-height:300px}.options-container{max-height:200px}.actions-container ion-button{font-size:12px;--padding-start: 6px;--padding-end: 6px}}@media (prefers-color-scheme: dark){.dropdown-overlay{box-shadow:0 4px 16px #0000004d}}.option-item:focus-within{--background: var(--ion-color-primary-tint);outline:2px solid var(--ion-color-primary);outline-offset:-2px}.option-item{transition:background-color .15s ease}.dropdown-icon{transition:transform .2s cubic-bezier(.4,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocapitalize", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "maxlength", "minlength", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "directive", type: i2.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
275
+ }
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiSelectSimpleComponent, decorators: [{
277
+ type: Component,
278
+ args: [{ selector: 'val-multi-select-simple', standalone: true, imports: [CommonModule, IonicModule, FormsModule, ReactiveFormsModule], providers: [
279
+ {
280
+ provide: NG_VALUE_ACCESSOR,
281
+ useExisting: forwardRef(() => MultiSelectSimpleComponent),
282
+ multi: true
283
+ }
284
+ ], template: `
285
+ <div class="multi-select-container" (click)="toggleDropdown($event)">
286
+ <!-- Main input display -->
287
+ <ion-input
288
+ #mainInput
289
+ type="text"
290
+ [value]="displayValue()"
291
+ [placeholder]="props?.placeholder || placeholder"
292
+ readonly
293
+ class="main-input"
294
+ [class.is-open]="isOpen()"
295
+ />
296
+
297
+ <!-- Dropdown icon -->
298
+ <ion-icon
299
+ name="chevron-down-outline"
300
+ class="dropdown-icon"
301
+ [class.rotated]="isOpen()"
302
+ ></ion-icon>
303
+
304
+ <!-- Hidden input for form control -->
305
+ <ion-input
306
+ style="position: absolute; opacity: 0; pointer-events: none;"
307
+ [formControl]="props?.control"
308
+ type="hidden"
309
+ />
310
+ </div>
311
+
312
+ <!-- Dropdown overlay -->
313
+ <div
314
+ class="dropdown-overlay"
315
+ [class.visible]="isOpen()"
316
+ #dropdown
317
+ >
318
+ <!-- Search bar -->
319
+ <div class="search-container">
320
+ <ion-searchbar
321
+ #searchbar
322
+ [placeholder]="searchPlaceholder"
323
+ (ionInput)="onSearch($event)"
324
+ [value]="searchTerm()"
325
+ show-clear-button="focus"
326
+ ></ion-searchbar>
327
+ </div>
328
+
329
+ <!-- Action buttons -->
330
+ <div class="actions-container">
331
+ <ion-button
332
+ fill="clear"
333
+ size="small"
334
+ (click)="selectAll()"
335
+ [disabled]="filteredOptions().length === 0"
336
+ >
337
+ Seleccionar todos
338
+ </ion-button>
339
+ <ion-button
340
+ fill="clear"
341
+ size="small"
342
+ color="medium"
343
+ (click)="clearAll()"
344
+ [disabled]="selectedValues().length === 0"
345
+ >
346
+ Limpiar
347
+ </ion-button>
348
+ </div>
349
+
350
+ <!-- Options list -->
351
+ <div class="options-container">
352
+ <ion-list class="options-list">
353
+ <ion-item
354
+ *ngFor="let option of filteredOptions(); trackBy: trackByFn"
355
+ button
356
+ (click)="toggleOption(option)"
357
+ class="option-item"
358
+ >
359
+ <ion-checkbox
360
+ slot="start"
361
+ [checked]="isSelected(option)"
362
+ ></ion-checkbox>
363
+ <ion-label>{{ option[labelProperty] }}</ion-label>
364
+ </ion-item>
365
+
366
+ <!-- No results message -->
367
+ <ion-item *ngIf="filteredOptions().length === 0" class="no-results">
368
+ <ion-label color="medium">
369
+ {{ searchTerm() ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
370
+ </ion-label>
371
+ </ion-item>
372
+ </ion-list>
373
+ </div>
374
+ </div>
375
+ `, styles: [":host{display:block;position:relative;width:100%}.multi-select-container{position:relative;display:flex;align-items:center;cursor:pointer}.multi-select-container .main-input{flex:1;cursor:pointer}.multi-select-container .main-input.is-open{--border-color: var(--ion-color-primary)}.multi-select-container .dropdown-icon{position:absolute;right:12px;font-size:16px;color:var(--ion-color-medium);transition:transform .2s ease;pointer-events:none;z-index:2}.multi-select-container .dropdown-icon.rotated{transform:rotate(180deg)}.dropdown-overlay{position:absolute;top:100%;left:0;right:0;background:var(--ion-background-color);border:1px solid var(--ion-color-light);border-radius:8px;box-shadow:0 4px 16px #0000001a;z-index:1000;max-height:400px;opacity:0;transform:translateY(-8px);pointer-events:none;transition:all .2s ease}.dropdown-overlay.visible{opacity:1;transform:translateY(4px);pointer-events:all}.search-container{padding:12px;border-bottom:1px solid var(--ion-color-light)}.search-container ion-searchbar{--background: var(--ion-color-light);--border-radius: 8px;--box-shadow: none;--padding-start: 12px;--padding-end: 12px;height:40px}.actions-container{display:flex;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--ion-color-light)}.actions-container ion-button{--padding-start: 8px;--padding-end: 8px;height:32px;font-size:14px}.options-container{max-height:240px;overflow-y:auto}.options-container .options-list{padding:0}.options-container .option-item{--padding-start: 16px;--padding-end: 16px;--min-height: 48px;cursor:pointer}.options-container .option-item:hover{--background: var(--ion-color-light)}.options-container .option-item ion-checkbox{--size: 20px;margin-right:12px}.options-container .option-item ion-label{font-size:16px;line-height:1.4}.options-container .no-results{--padding-start: 16px;--padding-end: 16px;--min-height: 48px;text-align:center}.options-container .no-results ion-label{font-style:italic;font-size:14px}@media (max-width: 768px){.dropdown-overlay{max-height:300px}.options-container{max-height:200px}.actions-container ion-button{font-size:12px;--padding-start: 6px;--padding-end: 6px}}@media (prefers-color-scheme: dark){.dropdown-overlay{box-shadow:0 4px 16px #0000004d}}.option-item:focus-within{--background: var(--ion-color-primary-tint);outline:2px solid var(--ion-color-primary);outline-offset:-2px}.option-item{transition:background-color .15s ease}.dropdown-icon{transition:transform .2s cubic-bezier(.4,0,.2,1)}\n"] }]
376
+ }], ctorParameters: () => [], propDecorators: { dropdownRef: [{
377
+ type: ViewChild,
378
+ args: ['dropdown']
379
+ }], mainInputRef: [{
380
+ type: ViewChild,
381
+ args: ['mainInput']
382
+ }], props: [{
383
+ type: Input
384
+ }], labelProperty: [{
385
+ type: Input
386
+ }], valueProperty: [{
387
+ type: Input
388
+ }], placeholder: [{
389
+ type: Input
390
+ }] } });
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LXNpbXBsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9tdWx0aS1zZWxlY3Qtc2ltcGxlL211bHRpLXNlbGVjdC1zaW1wbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUtMLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUE0R2pFLE1BQU0sT0FBTywwQkFBMEI7SUF1RHJDO1FBbERTLGtCQUFhLEdBQVcsTUFBTSxDQUFDO1FBQy9CLGtCQUFhLEdBQVcsSUFBSSxDQUFDO1FBQzdCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRTFCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFDLHdDQUF3QztRQUN4QyxXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxNQUFN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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJGVDt3REFJc0IsV0FBVztzQkFBakMsU0FBUzt1QkFBQyxVQUFVO2dCQUNHLFlBQVk7c0JBQW5DLFNBQVM7dUJBQUMsV0FBVztnQkFFYixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xhbmctcHJvdmlkZXIvbGFuZy1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IGFwcGx5RGVmYXVsdFZhbHVlVG9Db250cm9sIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL2Zvcm0tZGVmYXVsdHMnO1xuaW1wb3J0IHsgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy90ZXh0JztcbmltcG9ydCB7IElucHV0TWV0YWRhdGEsIElucHV0T3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbXVsdGktc2VsZWN0LXNpbXBsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbmljTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlTZWxlY3RTaW1wbGVDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm11bHRpLXNlbGVjdC1jb250YWluZXJcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oJGV2ZW50KVwiPlxuICAgICAgPCEtLSBNYWluIGlucHV0IGRpc3BsYXkgLS0+XG4gICAgICA8aW9uLWlucHV0XG4gICAgICAgICNtYWluSW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbdmFsdWVdPVwiZGlzcGxheVZhbHVlKClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHM/LnBsYWNlaG9sZGVyIHx8IHBsYWNlaG9sZGVyXCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgY2xhc3M9XCJtYWluLWlucHV0XCJcbiAgICAgICAgW2NsYXNzLmlzLW9wZW5dPVwiaXNPcGVuKClcIlxuICAgICAgLz5cbiAgICAgIFxuICAgICAgPCEtLSBEcm9wZG93biBpY29uIC0tPlxuICAgICAgPGlvbi1pY29uIFxuICAgICAgICBuYW1lPVwiY2hldnJvbi1kb3duLW91dGxpbmVcIiBcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pY29uXCIgXG4gICAgICAgIFtjbGFzcy5yb3RhdGVkXT1cImlzT3BlbigpXCJcbiAgICAgID48L2lvbi1pY29uPlxuICAgICAgXG4gICAgICA8IS0tIEhpZGRlbiBpbnB1dCBmb3IgZm9ybSBjb250cm9sIC0tPlxuICAgICAgPGlvbi1pbnB1dCBcbiAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IG9wYWNpdHk6IDA7IHBvaW50ZXItZXZlbnRzOiBub25lO1wiIFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwicHJvcHM/LmNvbnRyb2xcIiBcbiAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEcm9wZG93biBvdmVybGF5IC0tPlxuICAgIDxkaXYgXG4gICAgICBjbGFzcz1cImRyb3Bkb3duLW92ZXJsYXlcIiBcbiAgICAgIFtjbGFzcy52aXNpYmxlXT1cImlzT3BlbigpXCJcbiAgICAgICNkcm9wZG93blxuICAgID5cbiAgICAgIDwhLS0gU2VhcmNoIGJhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24tc2VhcmNoYmFyXG4gICAgICAgICAgI3NlYXJjaGJhclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgKGlvbklucHV0KT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXJtKClcIlxuICAgICAgICAgIHNob3ctY2xlYXItYnV0dG9uPVwiZm9jdXNcIlxuICAgICAgICA+PC9pb24tc2VhcmNoYmFyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDwhLS0gQWN0aW9uIGJ1dHRvbnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1idXR0b24gXG4gICAgICAgICAgZmlsbD1cImNsZWFyXCIgXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCIgXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyZWRPcHRpb25zKCkubGVuZ3RoID09PSAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIFNlbGVjY2lvbmFyIHRvZG9zXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b24gXG4gICAgICAgICAgZmlsbD1cImNsZWFyXCIgXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCIgXG4gICAgICAgICAgY29sb3I9XCJtZWRpdW1cIiBcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGwoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdGVkVmFsdWVzKCkubGVuZ3RoID09PSAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIExpbXBpYXJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDwhLS0gT3B0aW9ucyBsaXN0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24tbGlzdCBjbGFzcz1cIm9wdGlvbnMtbGlzdFwiPlxuICAgICAgICAgIDxpb24taXRlbSBcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrQnk6IHRyYWNrQnlGblwiIFxuICAgICAgICAgICAgYnV0dG9uIFxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24tY2hlY2tib3hcbiAgICAgICAgICAgICAgc2xvdD1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgID48L2lvbi1jaGVja2JveD5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgb3B0aW9uW2xhYmVsUHJvcGVydHldIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICA8aW9uLWl0ZW0gKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggPT09IDBcIiBjbGFzcz1cIm5vLXJlc3VsdHNcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAge3sgc2VhcmNoVGVybSgpID8gJ05vIHNlIGVuY29udHJhcm9uIHJlc3VsdGFkb3MnIDogJ05vIGhheSBvcGNpb25lcyBkaXNwb25pYmxlcycgfX1cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0LXNpbXBsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU2VsZWN0U2ltcGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duUmVmITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbWFpbklucHV0JykgbWFpbklucHV0UmVmITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBwcm9wcyE6IElucHV0TWV0YWRhdGE7XG4gIEBJbnB1dCgpIGxhYmVsUHJvcGVydHk6IHN0cmluZyA9ICduYW1lJztcbiAgQElucHV0KCkgdmFsdWVQcm9wZXJ0eTogc3RyaW5nID0gJ2lkJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgbGFuZ1NlcnZpY2UgPSBpbmplY3QoTGFuZ1NlcnZpY2UpO1xuICBcbiAgLy8gU2lnbmFscyBmb3IgcmVhY3RpdmUgc3RhdGUgbWFuYWdlbWVudFxuICBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBzZWFyY2hUZXJtID0gc2lnbmFsKCcnKTtcbiAgc2VsZWN0ZWRWYWx1ZXMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgXG4gIC8vIENvbXB1dGVkIHNpZ25hbHNcbiAgZGlzcGxheVZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFZhbHVlcygpO1xuICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHNlbGVjdGVkWzBdKTtcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bdGhpcy5sYWJlbFByb3BlcnR5XSA6ICcnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQubGVuZ3RofSBlbGVtZW50b3Mgc2VsZWNjaW9uYWRvc2A7XG4gIH0pO1xuXG4gIGZpbHRlcmVkT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wcz8ub3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaFRlcm0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIGlmICghc2VhcmNoKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IG9wdGlvblt0aGlzLmxhYmVsUHJvcGVydHldXG4gICAgICAgID8gcmVwbGFjZVNwZWNpYWxDaGFycyhTdHJpbmcob3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV0pLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldXG4gICAgICAgID8gcmVwbGFjZVNwZWNpYWxDaGFycyhTdHJpbmcob3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV0pLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBzZWFyY2hUZXJtID0gcmVwbGFjZVNwZWNpYWxDaGFycyhzZWFyY2gpO1xuICAgICAgcmV0dXJuIGxhYmVsLmluY2x1ZGVzKHNlYXJjaFRlcm0pIHx8IHZhbHVlLmluY2x1ZGVzKHNlYXJjaFRlcm0pO1xuICAgIH0pO1xuICB9KTtcblxuICBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfdmFsdWU6IGFueSkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dCgnX2dsb2JhbCcsICdzZWxlY3RPcHRpb25zJywgJ1NlbGVjY2lvbmUgb3BjaW9uZXMnKTtcbiAgICB0aGlzLnNlYXJjaFBsYWNlaG9sZGVyID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgJ3NlYXJjaCcsICdCdXNjYXInKTtcbiAgICBcbiAgICAvLyBDbG9zZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGVcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hcHBseURlZmF1bHRWYWx1ZSgpO1xuICAgIHRoaXMuc3luY1NlbGVjdGVkVmFsdWVzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddICYmIHRoaXMucHJvcHMpIHtcbiAgICAgIHRoaXMuc3luY1NlbGVjdGVkVmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWVBcnJheSA9IHRoaXMucGFyc2VWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5zZXQodmFsdWVBcnJheSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoX2lzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgZGlzYWJsZWQgc3RhdGUgaWYgbmVlZGVkXG4gIH1cblxuICAvLyBDb21wb25lbnQgbWV0aG9kc1xuICB0b2dnbGVEcm9wZG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzT3Blbi51cGRhdGUodmFsdWUgPT4gIXZhbHVlKTtcbiAgICBcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIC8vIEZvY3VzIHNlYXJjaCBiYXIgd2hlbiBvcGVuaW5nXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoYmFyID0gdGhpcy5kcm9wZG93blJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW9uLXNlYXJjaGJhcicpO1xuICAgICAgICBpZiAoc2VhcmNoYmFyKSB7XG4gICAgICAgICAgc2VhcmNoYmFyLnNldEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoZXZlbnQuZGV0YWlsLnZhbHVlIHx8ICcnKTtcbiAgfVxuXG4gIHRvZ2dsZU9wdGlvbihvcHRpb246IElucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XTtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkVmFsdWVzKCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc2V0KGN1cnJlbnRTZWxlY3RlZC5maWx0ZXIodiA9PiB2ICE9PSB2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgdG8gc2VsZWN0aW9uXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnNldChbLi4uY3VycmVudFNlbGVjdGVkLCB2YWx1ZV0pO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbFZhbHVlcyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zKCkubWFwKG9wdGlvbiA9PiBvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSk7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFZhbHVlcygpO1xuICAgIFxuICAgIC8vIEFkZCBvbmx5IG5ldyB2YWx1ZXMgdG8gYXZvaWQgZHVwbGljYXRlc1xuICAgIGNvbnN0IG5ld1ZhbHVlcyA9IGFsbFZhbHVlcy5maWx0ZXIodmFsdWUgPT4gIWN1cnJlbnRTZWxlY3RlZC5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc2V0KFsuLi5jdXJyZW50U2VsZWN0ZWQsIC4uLm5ld1ZhbHVlc10pO1xuICAgIFxuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnNldChbXSk7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQob3B0aW9uOiBJbnB1dE9wdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmFsdWVzKCkuaW5jbHVkZXMob3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV0pO1xuICB9XG5cbiAgdHJhY2tCeUZuKF9pbmRleDogbnVtYmVyLCBvcHRpb246IElucHV0T3B0aW9uKTogYW55IHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSAmJiBcbiAgICAgICAgIXRoaXMubWFpbklucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICF0aGlzLmRyb3Bkb3duUmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWFyY2hUZXJtLnNldCgnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IFN0cmluZyh2KSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpKS5maWx0ZXIodiA9PiB2ICE9PSAnJyk7XG4gICAgfVxuICAgIHJldHVybiBbU3RyaW5nKHZhbHVlKV07XG4gIH1cblxuICBwcml2YXRlIGVtaXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMoKS5qb2luKCcsJyk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgXG4gICAgaWYgKHRoaXMucHJvcHM/LmNvbnRyb2wpIHtcbiAgICAgIHRoaXMucHJvcHMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnByb3BzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIHRoaXMucHJvcHMuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25CeVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBJbnB1dE9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM/Lm9wdGlvbnM/LmZpbmQob3B0aW9uID0+IG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldID09PSB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGVmYXVsdFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzKSB7XG4gICAgICBhcHBseURlZmF1bHRWYWx1ZVRvQ29udHJvbCh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWxlY3RlZFZhbHVlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcz8uY29udHJvbD8udmFsdWUpIHtcbiAgICAgIGNvbnN0IHZhbHVlQXJyYXkgPSB0aGlzLnBhcnNlVmFsdWUodGhpcy5wcm9wcy5jb250cm9sLnZhbHVlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc2V0KHZhbHVlQXJyYXkpO1xuICAgIH1cbiAgfVxufSJdfQ==
@@ -127,7 +127,7 @@ export class PopoverSelectorComponent {
127
127
 
128
128
  <span class="trigger-text">{{ getDisplayText() }}</span>
129
129
 
130
- <ion-icon name="chevron-down" slot="end" class="chevron-icon"> </ion-icon>
130
+ <ion-icon name="chevron-down-outline" slot="end" class="chevron-icon"> </ion-icon>
131
131
  </ion-button>
132
132
 
133
133
  <ion-select-option *ngFor="let option of props.options" [value]="option.value" [disabled]="option.disabled">
@@ -169,7 +169,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
169
169
 
170
170
  <span class="trigger-text">{{ getDisplayText() }}</span>
171
171
 
172
- <ion-icon name="chevron-down" slot="end" class="chevron-icon"> </ion-icon>
172
+ <ion-icon name="chevron-down-outline" slot="end" class="chevron-icon"> </ion-icon>
173
173
  </ion-button>
174
174
 
175
175
  <ion-select-option *ngFor="let option of props.options" [value]="option.value" [disabled]="option.disabled">
@@ -186,4 +186,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
186
186
  }], selectionChange: [{
187
187
  type: Output
188
188
  }] } });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7O0FBZ0RwRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQWlCbkM7UUFUQTs7O1dBR0c7UUFFSCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRWhELGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBR3hDLDBCQUEwQjtRQUMxQixRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFR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QkFESixLQUFLO2dCQVFOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkljb24sIElvbkxhYmVsLCBJb25TZWxlY3QsIElvblNlbGVjdE9wdGlvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjaGV2cm9uRG93biB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IExhbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXBvcG92ZXItc2VsZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25CdXR0b24sIElvbkljb24sIElvblNlbGVjdCwgSW9uU2VsZWN0T3B0aW9uLCBJb25MYWJlbF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBvcG92ZXItc2VsZWN0b3ItY29udGFpbmVyXCI+XG4gICAgICA8aW9uLWxhYmVsICpuZ0lmPVwicHJvcHMubGFiZWxcIiBjbGFzcz1cInNlbGVjdG9yLWxhYmVsXCI+e3sgcHJvcHMubGFiZWwgfX08L2lvbi1sYWJlbD5cbiAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgIFt2YWx1ZV09XCJwcm9wcy5zZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyVGV4dCgpXCJcbiAgICAgICAgW2ludGVyZmFjZV09XCJwcm9wcy5pbnRlcmZhY2UgfHwgJ3BvcG92ZXInXCJcbiAgICAgICAgW211bHRpcGxlXT1cInByb3BzLm11bHRpcGxlIHx8IGZhbHNlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInByb3BzLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgW2NhbmNlbFRleHRdPVwiZ2V0Q2FuY2VsVGV4dCgpXCJcbiAgICAgICAgW29rVGV4dF09XCJnZXRPa1RleHQoKVwiXG4gICAgICAgIChpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwicG9wb3Zlci1zZWxlY3Rvci1zZWxlY3RcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICBbZmlsbF09XCJwcm9wcy5maWxsIHx8ICdjbGVhcidcIlxuICAgICAgICAgIFtzaXplXT1cInByb3BzLnNpemUgfHwgJ2RlZmF1bHQnXCJcbiAgICAgICAgICBbc2hhcGVdPVwiJ3JvdW5kJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cInByb3BzLmNvbG9yIHx8ICdtZWRpdW0nXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0b3ItdHJpZ2dlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJwcm9wcy5pY29uXCIgW25hbWVdPVwicHJvcHMuaWNvblwiIHNsb3Q9XCJzdGFydFwiPiA8L2lvbi1pY29uPlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmlnZ2VyLXRleHRcIj57eyBnZXREaXNwbGF5VGV4dCgpIH19PC9zcGFuPlxuXG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWRvd25cIiBzbG90PVwiZW5kXCIgY2xhc3M9XCJjaGV2cm9uLWljb25cIj4gPC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3BzLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCIgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgPGlvbi1pY29uICpuZ0lmPVwib3B0aW9uLmljb25cIiBbbmFtZV09XCJvcHRpb24uaWNvblwiIGNsYXNzPVwib3B0aW9uLWljb25cIj4gPC9pb24taWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tc2VsZWN0LW9wdGlvbj5cbiAgICAgIDwvaW9uLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vcG9wb3Zlci1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLXBvcG92ZXItc2VsZWN0b3JcbiAqXG4gKiBBIGdlbmVyaWMgcmV1c2FibGUgcG9wb3ZlciBzZWxlY3RvciBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYW55IHR5cGUgb2Ygc2VsZWN0aW9uLlxuICogUHJvdmlkZXMgYSBidXR0b24gdHJpZ2dlciB0aGF0IG9wZW5zIGEgcG9wb3ZlciB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgdXNhZ2VcbiAqIDx2YWwtcG9wb3Zlci1zZWxlY3RvclxuICogICBbcHJvcHNdPVwic2VsZWN0b3JQcm9wc1wiXG4gKiAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICogPC92YWwtcG9wb3Zlci1zZWxlY3Rvcj5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2l0aCBpY29uIGFuZCBjdXN0b20gc3R5bGluZ1xuICogY29uc3Qgc2VsZWN0b3JQcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gKiAgIG9wdGlvbnM6IFtcbiAqICAgICB7IHZhbHVlOiAnb3B0aW9uMScsIGxhYmVsOiAnT3B0aW9uIDEnLCBpY29uOiAnc3RhcicgfSxcbiAqICAgICB7IHZhbHVlOiAnb3B0aW9uMicsIGxhYmVsOiAnT3B0aW9uIDInLCBpY29uOiAnaGVhcnQnIH1cbiAqICAgXSxcbiAqICAgc2VsZWN0ZWRWYWx1ZTogJ29wdGlvbjEnLFxuICogICBsYWJlbDogJ0Nob29zZSBvcHRpb24nLFxuICogICBpY29uOiAnc2V0dGluZ3MnLFxuICogICBjb2xvcjogJ3ByaW1hcnknLFxuICogICBzaXplOiAnbGFyZ2UnLFxuICogICBmaWxsOiAnc29saWQnXG4gKiB9O1xuICpcbiAqIEBpbnB1dCBwcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0b3JcbiAqIEBvdXRwdXQgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgc3RyaW5nW10+IC0gRW1pdHRlZCB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBjbGFzcyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQge1xuICAvKipcbiAgICogUG9wb3ZlciBzZWxlY3RvciBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHR5cGUge1BvcG92ZXJTZWxlY3Rvck1ldGFkYXRhfVxuICAgKi9cbiAgQElucHV0KClcbiAgcHJvcHM6IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgdmFsdWUocykuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBzdHJpbmdbXT4oKTtcblxuICBwcml2YXRlIGxhbmdTZXJ2aWNlID0gaW5qZWN0KExhbmdTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWdpc3RlciByZXF1aXJlZCBpY29uc1xuICAgIGFkZEljb25zKHsgY2hldnJvbkRvd24gfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aXZlIHBsYWNlaG9sZGVyIHRleHQuXG4gICAqL1xuICBnZXRQbGFjZWhvbGRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wbGFjZWhvbGRlciB8fCB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ19nbG9iYWwnLCAnc2VsZWN0JywgJ1NlbGVjY2lvbmFyLi4uJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aXZlIGNhbmNlbCB0ZXh0LlxuICAgKi9cbiAgZ2V0Q2FuY2VsVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNhbmNlbFRleHQgfHwgdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgJ2NhbmNlbCcsICdDYW5jZWxhcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWFjdGl2ZSBvayB0ZXh0LlxuICAgKi9cbiAgZ2V0T2tUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMub2tUZXh0IHx8IHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dCgnX2dsb2JhbCcsICdvaycsICdBY2VwdGFyJyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2UgZnJvbSB0aGUgaW9uLXNlbGVjdC5cbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGlvbi1zZWxlY3QgY2hhbmdlIGV2ZW50XG4gICAqL1xuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LmRldGFpbC52YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGlzcGxheSB0ZXh0IGZvciB0aGUgdHJpZ2dlciBidXR0b24uXG4gICAqIFNob3dzIHRoZSBzZWxlY3RlZCBvcHRpb24ncyBsYWJlbCBvciBwbGFjZWhvbGRlci5cbiAgICogQHJldHVybnMgVGhlIGRpc3BsYXkgdGV4dFxuICAgKi9cbiAgZ2V0RGlzcGxheVRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGxhY2Vob2xkZXJUZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlKSkge1xuICAgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQbGFjZWhvbGRlclRleHQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT09IHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZVswXSk7XG4gICAgICAgIHJldHVybiBvcHRpb24/LmxhYmVsIHx8IHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZVswXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dCgnX2dsb2JhbCcsICdzZWxlY3RlZCcsICdzZWxlY2Npb25hZG9zJyk7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlLmxlbmd0aH0gJHtzZWxlY3RlZFRleHR9YDtcbiAgICB9XG5cbiAgICAvLyBTaW5nbGUgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09PSB0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWUpO1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbj8ubGFiZWwgfHwgdGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlO1xuICB9XG59XG4iXX0=
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7O0FBZ0RwRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQWlCbkM7UUFUQTs7O1dBR0c7UUFFSCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRWhELGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBR3hDLDBCQUEwQjtRQUMxQixRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFR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QkFESixLQUFLO2dCQVFOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkljb24sIElvbkxhYmVsLCBJb25TZWxlY3QsIElvblNlbGVjdE9wdGlvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjaGV2cm9uRG93biB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IExhbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXBvcG92ZXItc2VsZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25CdXR0b24sIElvbkljb24sIElvblNlbGVjdCwgSW9uU2VsZWN0T3B0aW9uLCBJb25MYWJlbF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBvcG92ZXItc2VsZWN0b3ItY29udGFpbmVyXCI+XG4gICAgICA8aW9uLWxhYmVsICpuZ0lmPVwicHJvcHMubGFiZWxcIiBjbGFzcz1cInNlbGVjdG9yLWxhYmVsXCI+e3sgcHJvcHMubGFiZWwgfX08L2lvbi1sYWJlbD5cbiAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgIFt2YWx1ZV09XCJwcm9wcy5zZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyVGV4dCgpXCJcbiAgICAgICAgW2ludGVyZmFjZV09XCJwcm9wcy5pbnRlcmZhY2UgfHwgJ3BvcG92ZXInXCJcbiAgICAgICAgW211bHRpcGxlXT1cInByb3BzLm11bHRpcGxlIHx8IGZhbHNlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInByb3BzLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgW2NhbmNlbFRleHRdPVwiZ2V0Q2FuY2VsVGV4dCgpXCJcbiAgICAgICAgW29rVGV4dF09XCJnZXRPa1RleHQoKVwiXG4gICAgICAgIChpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwicG9wb3Zlci1zZWxlY3Rvci1zZWxlY3RcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICBbZmlsbF09XCJwcm9wcy5maWxsIHx8ICdjbGVhcidcIlxuICAgICAgICAgIFtzaXplXT1cInByb3BzLnNpemUgfHwgJ2RlZmF1bHQnXCJcbiAgICAgICAgICBbc2hhcGVdPVwiJ3JvdW5kJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cInByb3BzLmNvbG9yIHx8ICdtZWRpdW0nXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0b3ItdHJpZ2dlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJwcm9wcy5pY29uXCIgW25hbWVdPVwicHJvcHMuaWNvblwiIHNsb3Q9XCJzdGFydFwiPiA8L2lvbi1pY29uPlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmlnZ2VyLXRleHRcIj57eyBnZXREaXNwbGF5VGV4dCgpIH19PC9zcGFuPlxuXG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWRvd24tb3V0bGluZVwiIHNsb3Q9XCJlbmRcIiBjbGFzcz1cImNoZXZyb24taWNvblwiPiA8L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcHMub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJvcHRpb24uaWNvblwiIFtuYW1lXT1cIm9wdGlvbi5pY29uXCIgY2xhc3M9XCJvcHRpb24taWNvblwiPiA8L2lvbi1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgPC9pb24tc2VsZWN0PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9wb3BvdmVyLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtcG9wb3Zlci1zZWxlY3RvclxuICpcbiAqIEEgZ2VuZXJpYyByZXVzYWJsZSBwb3BvdmVyIHNlbGVjdG9yIGNvbXBvbmVudCB0aGF0IGNhbiBiZSB1c2VkIGZvciBhbnkgdHlwZSBvZiBzZWxlY3Rpb24uXG4gKiBQcm92aWRlcyBhIGJ1dHRvbiB0cmlnZ2VyIHRoYXQgb3BlbnMgYSBwb3BvdmVyIHdpdGggc2VsZWN0YWJsZSBvcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZVxuICogPHZhbC1wb3BvdmVyLXNlbGVjdG9yXG4gKiAgIFtwcm9wc109XCJzZWxlY3RvclByb3BzXCJcbiAqICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gKiA8L3ZhbC1wb3BvdmVyLXNlbGVjdG9yPlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaXRoIGljb24gYW5kIGN1c3RvbSBzdHlsaW5nXG4gKiBjb25zdCBzZWxlY3RvclByb3BzOiBQb3BvdmVyU2VsZWN0b3JNZXRhZGF0YSA9IHtcbiAqICAgb3B0aW9uczogW1xuICogICAgIHsgdmFsdWU6ICdvcHRpb24xJywgbGFiZWw6ICdPcHRpb24gMScsIGljb246ICdzdGFyJyB9LFxuICogICAgIHsgdmFsdWU6ICdvcHRpb24yJywgbGFiZWw6ICdPcHRpb24gMicsIGljb246ICdoZWFydCcgfVxuICogICBdLFxuICogICBzZWxlY3RlZFZhbHVlOiAnb3B0aW9uMScsXG4gKiAgIGxhYmVsOiAnQ2hvb3NlIG9wdGlvbicsXG4gKiAgIGljb246ICdzZXR0aW5ncycsXG4gKiAgIGNvbG9yOiAncHJpbWFyeScsXG4gKiAgIHNpemU6ICdsYXJnZScsXG4gKiAgIGZpbGw6ICdzb2xpZCdcbiAqIH07XG4gKlxuICogQGlucHV0IHByb3BzOiBQb3BvdmVyU2VsZWN0b3JNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3RvclxuICogQG91dHB1dCBzZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBzdHJpbmdbXT4gLSBFbWl0dGVkIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFBvcG92ZXJTZWxlY3RvckNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBQb3BvdmVyIHNlbGVjdG9yIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAdHlwZSB7UG9wb3ZlclNlbGVjdG9yTWV0YWRhdGF9XG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAqIEVtaXRzIHRoZSBzZWxlY3RlZCB2YWx1ZShzKS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHN0cmluZ1tdPigpO1xuXG4gIHByaXZhdGUgbGFuZ1NlcnZpY2UgPSBpbmplY3QoTGFuZ1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFJlZ2lzdGVyIHJlcXVpcmVkIGljb25zXG4gICAgYWRkSWNvbnMoeyBjaGV2cm9uRG93biB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmVhY3RpdmUgcGxhY2Vob2xkZXIgdGV4dC5cbiAgICovXG4gIGdldFBsYWNlaG9sZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8IHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dCgnX2dsb2JhbCcsICdzZWxlY3QnLCAnU2VsZWNjaW9uYXIuLi4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmVhY3RpdmUgY2FuY2VsIHRleHQuXG4gICAqL1xuICBnZXRDYW5jZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2FuY2VsVGV4dCB8fCB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ19nbG9iYWwnLCAnY2FuY2VsJywgJ0NhbmNlbGFyJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aXZlIG9rIHRleHQuXG4gICAqL1xuICBnZXRPa1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5va1RleHQgfHwgdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgJ29rJywgJ0FjZXB0YXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VsZWN0aW9uIGNoYW5nZSBmcm9tIHRoZSBpb24tc2VsZWN0LlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgaW9uLXNlbGVjdCBjaGFuZ2UgZXZlbnRcbiAgICovXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gZXZlbnQuZGV0YWlsLnZhbHVlO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkaXNwbGF5IHRleHQgZm9yIHRoZSB0cmlnZ2VyIGJ1dHRvbi5cbiAgICogU2hvd3MgdGhlIHNlbGVjdGVkIG9wdGlvbidzIGxhYmVsIG9yIHBsYWNlaG9sZGVyLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzcGxheSB0ZXh0XG4gICAqL1xuICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQbGFjZWhvbGRlclRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBsYWNlaG9sZGVyVGV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PT0gdGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlWzBdKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbj8ubGFiZWwgfHwgdGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlWzBdO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgJ3NlbGVjdGVkJywgJ3NlbGVjY2lvbmFkb3MnKTtcbiAgICAgIHJldHVybiBgJHt0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWUubGVuZ3RofSAke3NlbGVjdGVkVGV4dH1gO1xuICAgIH1cblxuICAgIC8vIFNpbmdsZSBzZWxlY3Rpb25cbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT09IHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uPy5sYWJlbCB8fCB0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWU7XG4gIH1cbn1cbiJdfQ==