@seniorsistemas/components-ai 1.3.0 → 2.0.0
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.
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +263 -368
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-checkbox.component.mjs +53 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-date.component.mjs +5 -3
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-datetime.component.mjs +5 -3
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-dropdown.component.mjs +5 -3
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-image.component.mjs +162 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-lookup.component.mjs +203 -49
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-multiselect.component.mjs +90 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-number.component.mjs +3 -3
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-text.component.mjs +7 -7
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-time.component.mjs +66 -0
- package/esm2022/lib/components/dynamic-form/fields/index.mjs +5 -1
- package/esm2022/lib/components/dynamic-form/models/dynamic-form.models.mjs +1 -1
- package/esm2022/lib/components/loading/iassist-icon.component.mjs +14 -0
- package/esm2022/lib/components/loading/loading.component.mjs +47 -4
- package/esm2022/lib/i18n/en-US.json +4 -1
- package/esm2022/lib/i18n/es-ES.json +4 -1
- package/esm2022/lib/i18n/pt-BR.json +4 -1
- package/esm2022/lib/models/entity-list.config.mjs +1 -1
- package/esm2022/lib/services/websocket.service.mjs +184 -0
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/seniorsistemas-components-ai.mjs +1283 -661
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -1
- package/lib/components/dynamic-form/dynamic-form.component.d.ts +8 -17
- package/lib/components/dynamic-form/fields/dynamic-field-checkbox.component.d.ts +8 -0
- package/lib/components/dynamic-form/fields/dynamic-field-image.component.d.ts +21 -0
- package/lib/components/dynamic-form/fields/dynamic-field-lookup.component.d.ts +19 -6
- package/lib/components/dynamic-form/fields/dynamic-field-multiselect.component.d.ts +10 -0
- package/lib/components/dynamic-form/fields/dynamic-field-time.component.d.ts +9 -0
- package/lib/components/dynamic-form/fields/index.d.ts +4 -0
- package/lib/components/dynamic-form/models/dynamic-form.models.d.ts +30 -84
- package/lib/components/loading/iassist-icon.component.d.ts +6 -0
- package/lib/components/loading/loading.component.d.ts +1 -1
- package/lib/models/entity-list.config.d.ts +12 -132
- package/lib/services/websocket.service.d.ts +63 -0
- package/package.json +3 -2
- package/public-api.d.ts +2 -0
- package/src/lib/i18n/en-US.json +4 -1
- package/src/lib/i18n/es-ES.json +4 -1
- package/src/lib/i18n/pt-BR.json +4 -1
|
@@ -6,10 +6,13 @@ import { InputTextModule } from 'primeng/inputtext';
|
|
|
6
6
|
import { DialogModule } from 'primeng/dialog';
|
|
7
7
|
import { TableModule } from 'primeng/table';
|
|
8
8
|
import { TooltipModule } from 'primeng/tooltip';
|
|
9
|
+
import { OverlayPanelModule } from 'primeng/overlaypanel';
|
|
9
10
|
import { TranslatePipe } from '../../../pipes/translate.pipe';
|
|
10
11
|
import { TranslationHelper } from '../../../utils/translation.helper';
|
|
11
12
|
import { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';
|
|
12
|
-
import {
|
|
13
|
+
import { TableLoadingDirective } from '../../../directives/table-loading/table-loading.directive';
|
|
14
|
+
import { Subject } from 'rxjs';
|
|
15
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
13
16
|
import * as i0 from "@angular/core";
|
|
14
17
|
import * as i1 from "../../../services/translation.service";
|
|
15
18
|
import * as i2 from "@angular/common";
|
|
@@ -22,7 +25,6 @@ import * as i8 from "primeng/table";
|
|
|
22
25
|
import * as i9 from "primeng/tooltip";
|
|
23
26
|
export class DynamicFieldLookupComponent {
|
|
24
27
|
translationService;
|
|
25
|
-
cdr;
|
|
26
28
|
field;
|
|
27
29
|
form;
|
|
28
30
|
formGroup;
|
|
@@ -35,20 +37,124 @@ export class DynamicFieldLookupComponent {
|
|
|
35
37
|
filteredData = [];
|
|
36
38
|
totalRecords = 0;
|
|
37
39
|
currentPage = 0;
|
|
38
|
-
pageSize =
|
|
40
|
+
pageSize = 10;
|
|
39
41
|
selectedItem = null;
|
|
40
|
-
skipNextLazyLoad = false;
|
|
41
42
|
columns = [];
|
|
42
43
|
displayField = 'name';
|
|
43
44
|
valueField = 'id';
|
|
44
45
|
searchFields = ['name'];
|
|
45
|
-
|
|
46
|
+
// Autocomplete state
|
|
47
|
+
autocompleteText = '';
|
|
48
|
+
suggestions = [];
|
|
49
|
+
showSuggestions = false;
|
|
50
|
+
autocompleteLoading = false;
|
|
51
|
+
autocompleteSubject = new Subject();
|
|
52
|
+
autocompleteSub;
|
|
53
|
+
get isAutocomplete() {
|
|
54
|
+
return this.field?.lookupAutocomplete === true;
|
|
55
|
+
}
|
|
56
|
+
get minLength() {
|
|
57
|
+
return this.field?.lookupAutocompleteMinLength ?? 2;
|
|
58
|
+
}
|
|
59
|
+
constructor(translationService) {
|
|
46
60
|
this.translationService = translationService;
|
|
47
|
-
this.cdr = cdr;
|
|
48
61
|
}
|
|
49
62
|
ngOnInit() {
|
|
50
63
|
this.setupLookupConfig();
|
|
51
64
|
this.watchValueChanges();
|
|
65
|
+
this.setupAutocomplete();
|
|
66
|
+
}
|
|
67
|
+
ngOnDestroy() {
|
|
68
|
+
this.autocompleteSub?.unsubscribe();
|
|
69
|
+
}
|
|
70
|
+
setupAutocomplete() {
|
|
71
|
+
if (!this.isAutocomplete)
|
|
72
|
+
return;
|
|
73
|
+
this.autocompleteSub = this.autocompleteSubject.pipe(debounceTime(300), distinctUntilChanged()).subscribe(term => {
|
|
74
|
+
if (term.length >= this.minLength) {
|
|
75
|
+
this.searchSuggestions(term);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.suggestions = [];
|
|
79
|
+
this.showSuggestions = false;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
onAutocompleteInput(event) {
|
|
84
|
+
const value = event.target.value;
|
|
85
|
+
this.autocompleteText = value;
|
|
86
|
+
if (!value) {
|
|
87
|
+
this.clearValue();
|
|
88
|
+
this.suggestions = [];
|
|
89
|
+
this.showSuggestions = false;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.autocompleteSubject.next(value);
|
|
93
|
+
}
|
|
94
|
+
onAutocompleteFocus() {
|
|
95
|
+
if (this.autocompleteText.length >= this.minLength && this.suggestions.length > 0) {
|
|
96
|
+
this.showSuggestions = true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
onAutocompleteBlur() {
|
|
100
|
+
// Delay to allow click on suggestion
|
|
101
|
+
setTimeout(() => { this.showSuggestions = false; }, 200);
|
|
102
|
+
}
|
|
103
|
+
selectSuggestion(item) {
|
|
104
|
+
this.setValue(item);
|
|
105
|
+
this.displayValue = this.formatDisplayValue(item);
|
|
106
|
+
this.autocompleteText = this.displayValue;
|
|
107
|
+
this.suggestions = [];
|
|
108
|
+
this.showSuggestions = false;
|
|
109
|
+
}
|
|
110
|
+
searchSuggestions(term) {
|
|
111
|
+
if (!this.field?.lookupService)
|
|
112
|
+
return;
|
|
113
|
+
this.autocompleteLoading = true;
|
|
114
|
+
this.showSuggestions = true;
|
|
115
|
+
const listParams = { page: 0, size: 10 };
|
|
116
|
+
if (this.field.lookupSort) {
|
|
117
|
+
listParams.sort = this.field.lookupSort;
|
|
118
|
+
}
|
|
119
|
+
const filterConditions = [];
|
|
120
|
+
const isNumericTerm = !isNaN(Number(term)) && term !== '';
|
|
121
|
+
this.searchFields.forEach(field => {
|
|
122
|
+
const column = this.columns.find(col => col.field === field);
|
|
123
|
+
const fieldType = column?.type || 'text';
|
|
124
|
+
if (fieldType === 'number') {
|
|
125
|
+
if (isNumericTerm) {
|
|
126
|
+
filterConditions.push(`${field} eq ${term}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const upperTerm = term.toUpperCase();
|
|
131
|
+
filterConditions.push(`UPPER(${field}) like '%${upperTerm}%'`);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
if (filterConditions.length > 0) {
|
|
135
|
+
listParams.filterQuery = filterConditions.join(' or ');
|
|
136
|
+
}
|
|
137
|
+
// Apply lookupFilters
|
|
138
|
+
if (this.field.lookupFilters) {
|
|
139
|
+
const extra = typeof this.field.lookupFilters === 'function'
|
|
140
|
+
? this.field.lookupFilters(this.formGroup?.value || {})
|
|
141
|
+
: this.field.lookupFilters;
|
|
142
|
+
if (extra) {
|
|
143
|
+
listParams.filterQuery = listParams.filterQuery
|
|
144
|
+
? `(${listParams.filterQuery}) and (${extra})`
|
|
145
|
+
: extra;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.field.lookupService.list(listParams).subscribe({
|
|
149
|
+
next: (res) => {
|
|
150
|
+
this.suggestions = res.contents || [];
|
|
151
|
+
this.autocompleteLoading = false;
|
|
152
|
+
},
|
|
153
|
+
error: () => {
|
|
154
|
+
this.suggestions = [];
|
|
155
|
+
this.autocompleteLoading = false;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
52
158
|
}
|
|
53
159
|
watchValueChanges() {
|
|
54
160
|
const control = this.getFormControl();
|
|
@@ -102,17 +208,17 @@ export class DynamicFieldLookupComponent {
|
|
|
102
208
|
handleValueDisplay(value) {
|
|
103
209
|
if (value === null || value === undefined || value === '') {
|
|
104
210
|
this.displayValue = '';
|
|
211
|
+
this.autocompleteText = '';
|
|
105
212
|
return;
|
|
106
213
|
}
|
|
107
214
|
if (typeof value === 'object' && value !== null) {
|
|
108
215
|
this.displayValue = this.formatDisplayValue(value);
|
|
109
|
-
|
|
216
|
+
this.autocompleteText = this.displayValue;
|
|
110
217
|
return;
|
|
111
218
|
}
|
|
112
|
-
// Se é um ID (string ou number), não fazer requisição
|
|
113
|
-
// Deixar vazio e só carregar quando abrir o lookup
|
|
114
219
|
if (typeof value === 'string' || typeof value === 'number') {
|
|
115
220
|
this.displayValue = '';
|
|
221
|
+
this.autocompleteText = '';
|
|
116
222
|
return;
|
|
117
223
|
}
|
|
118
224
|
}
|
|
@@ -158,13 +264,11 @@ export class DynamicFieldLookupComponent {
|
|
|
158
264
|
if (!this.showLookupDialog) {
|
|
159
265
|
return;
|
|
160
266
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (this.skipNextLazyLoad) {
|
|
164
|
-
this.skipNextLazyLoad = false;
|
|
267
|
+
const newPage = event.first / event.rows;
|
|
268
|
+
if (newPage === this.currentPage && this.filteredData.length > 0) {
|
|
165
269
|
return;
|
|
166
270
|
}
|
|
167
|
-
this.currentPage =
|
|
271
|
+
this.currentPage = newPage;
|
|
168
272
|
this.loadData();
|
|
169
273
|
}
|
|
170
274
|
loadData() {
|
|
@@ -201,26 +305,19 @@ export class DynamicFieldLookupComponent {
|
|
|
201
305
|
}
|
|
202
306
|
}
|
|
203
307
|
if (this.field.lookupFilters) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
const value = dynamicFilters[key];
|
|
213
|
-
if (value !== null && value !== undefined) {
|
|
214
|
-
dynamicFilterConditions.push(`${key} eq '${value}'`);
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
if (dynamicFilterConditions.length > 0) {
|
|
218
|
-
const dynamicFilterQuery = dynamicFilterConditions.join(' and ');
|
|
308
|
+
let extraFilter = '';
|
|
309
|
+
if (typeof this.field.lookupFilters === 'function') {
|
|
310
|
+
extraFilter = this.field.lookupFilters(this.formGroup?.value || {});
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
extraFilter = this.field.lookupFilters;
|
|
314
|
+
}
|
|
315
|
+
if (extraFilter) {
|
|
219
316
|
if (listParams.filterQuery) {
|
|
220
|
-
listParams.filterQuery = `(${listParams.filterQuery}) and (${
|
|
317
|
+
listParams.filterQuery = `(${listParams.filterQuery}) and (${extraFilter})`;
|
|
221
318
|
}
|
|
222
319
|
else {
|
|
223
|
-
listParams.filterQuery =
|
|
320
|
+
listParams.filterQuery = extraFilter;
|
|
224
321
|
}
|
|
225
322
|
}
|
|
226
323
|
}
|
|
@@ -239,15 +336,12 @@ export class DynamicFieldLookupComponent {
|
|
|
239
336
|
}
|
|
240
337
|
}
|
|
241
338
|
this.loading = false;
|
|
242
|
-
// The table will fire onLazyLoad when it first renders — skip it
|
|
243
|
-
this.skipNextLazyLoad = true;
|
|
244
339
|
},
|
|
245
340
|
error: (_error) => {
|
|
246
341
|
this.data = [];
|
|
247
342
|
this.filteredData = [];
|
|
248
343
|
this.totalRecords = 0;
|
|
249
344
|
this.loading = false;
|
|
250
|
-
this.skipNextLazyLoad = true;
|
|
251
345
|
}
|
|
252
346
|
});
|
|
253
347
|
}
|
|
@@ -256,10 +350,16 @@ export class DynamicFieldLookupComponent {
|
|
|
256
350
|
this.selectedItem = null;
|
|
257
351
|
return;
|
|
258
352
|
}
|
|
259
|
-
|
|
353
|
+
// value can be a full object or just an ID
|
|
354
|
+
const valueId = typeof this.value === 'object' ? this.value[this.valueField] : this.value;
|
|
355
|
+
const item = this.filteredData.find(i => i[this.valueField] === valueId);
|
|
260
356
|
if (item) {
|
|
261
357
|
this.selectedItem = item;
|
|
262
358
|
}
|
|
359
|
+
else if (typeof this.value === 'object') {
|
|
360
|
+
// Item not in current page but we have the full object from autocomplete
|
|
361
|
+
this.selectedItem = this.value;
|
|
362
|
+
}
|
|
263
363
|
}
|
|
264
364
|
onSearch() {
|
|
265
365
|
if (!this.showLookupDialog) {
|
|
@@ -285,12 +385,15 @@ export class DynamicFieldLookupComponent {
|
|
|
285
385
|
clearValue() {
|
|
286
386
|
this.setValue(null);
|
|
287
387
|
this.displayValue = '';
|
|
388
|
+
this.autocompleteText = '';
|
|
288
389
|
this.selectedItem = null;
|
|
390
|
+
this.suggestions = [];
|
|
391
|
+
this.showSuggestions = false;
|
|
289
392
|
}
|
|
290
393
|
getFieldValue(item, field) {
|
|
291
394
|
return field.split('.').reduce((obj, key) => obj?.[key], item) || '';
|
|
292
395
|
}
|
|
293
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldLookupComponent, deps: [{ token: i1.TranslationService }
|
|
396
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldLookupComponent, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
294
397
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicFieldLookupComponent, isStandalone: true, selector: "sia-dynamic-field-lookup", inputs: { field: "field", form: "form", formGroup: "formGroup", mode: "mode" }, ngImport: i0, template: `
|
|
295
398
|
<sia-dynamic-field-wrapper [field]="field" [form]="form" [mode]="mode">
|
|
296
399
|
<div [formGroup]="form" class="lookup-field" [ngClass]="{'disabled': isFieldDisabled()}">
|
|
@@ -298,7 +401,23 @@ export class DynamicFieldLookupComponent {
|
|
|
298
401
|
<input type="hidden" [formControlName]="field.field" />
|
|
299
402
|
|
|
300
403
|
<div class="lookup-input-group">
|
|
404
|
+
<!-- Autocomplete mode: editable input -->
|
|
405
|
+
<input
|
|
406
|
+
*ngIf="isAutocomplete"
|
|
407
|
+
#autocompleteInput
|
|
408
|
+
pInputText
|
|
409
|
+
[value]="autocompleteText"
|
|
410
|
+
[placeholder]="getPlaceholder()"
|
|
411
|
+
[class.p-invalid]="isFieldInvalid()"
|
|
412
|
+
[disabled]="isFieldDisabled()"
|
|
413
|
+
class="lookup-display"
|
|
414
|
+
(input)="onAutocompleteInput($event)"
|
|
415
|
+
(focus)="onAutocompleteFocus()"
|
|
416
|
+
(blur)="onAutocompleteBlur()"
|
|
417
|
+
/>
|
|
418
|
+
<!-- Standard mode: readonly input -->
|
|
301
419
|
<input
|
|
420
|
+
*ngIf="!isAutocomplete"
|
|
302
421
|
pInputText
|
|
303
422
|
[value]="displayValue"
|
|
304
423
|
[placeholder]="getPlaceholder()"
|
|
@@ -308,6 +427,18 @@ export class DynamicFieldLookupComponent {
|
|
|
308
427
|
class="lookup-display"
|
|
309
428
|
(click)="openLookup()"
|
|
310
429
|
/>
|
|
430
|
+
<!-- Autocomplete suggestions dropdown -->
|
|
431
|
+
<div class="autocomplete-suggestions" *ngIf="showSuggestions && suggestions.length > 0">
|
|
432
|
+
<div
|
|
433
|
+
class="suggestion-item"
|
|
434
|
+
*ngFor="let item of suggestions"
|
|
435
|
+
(mousedown)="selectSuggestion(item)">
|
|
436
|
+
{{ formatDisplayValue(item) }}
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
<div class="autocomplete-suggestions" *ngIf="showSuggestions && suggestions.length === 0 && autocompleteLoading">
|
|
440
|
+
<div class="suggestion-item suggestion-loading">Buscando...</div>
|
|
441
|
+
</div>
|
|
311
442
|
<div class="lookup-buttons">
|
|
312
443
|
<p-button
|
|
313
444
|
*ngIf="currentValue"
|
|
@@ -383,18 +514,15 @@ export class DynamicFieldLookupComponent {
|
|
|
383
514
|
</div>
|
|
384
515
|
</div>
|
|
385
516
|
|
|
386
|
-
<!-- Loading State -->
|
|
387
|
-
<sia-loading *ngIf="loading" padding="2rem 0" [size]="48"></sia-loading>
|
|
388
|
-
|
|
389
517
|
<!-- Data Table -->
|
|
390
518
|
<p-table
|
|
391
|
-
*ngIf="!loading"
|
|
392
519
|
[value]="filteredData"
|
|
393
520
|
[paginator]="true"
|
|
394
521
|
[rows]="pageSize"
|
|
395
522
|
[totalRecords]="totalRecords"
|
|
396
523
|
[lazy]="true"
|
|
397
524
|
(onLazyLoad)="onPageChange($event)"
|
|
525
|
+
[loading]="loading" siaTableLoading
|
|
398
526
|
[showCurrentPageReport]="true"
|
|
399
527
|
currentPageReportTemplate="Mostrando {first} a {last} de {totalRecords} registros"
|
|
400
528
|
dataKey="id"
|
|
@@ -436,7 +564,7 @@ export class DynamicFieldLookupComponent {
|
|
|
436
564
|
</div>
|
|
437
565
|
</p-dialog>
|
|
438
566
|
</sia-dynamic-field-wrapper>
|
|
439
|
-
`, isInline: true, styles: [".lookup-field{width:100%;position:relative}.lookup-input-group{position:relative;width:100%;.lookup-display{width:100%;cursor:pointer;height:2.857rem;padding:.75rem 4rem .75rem .75rem;font-size:1rem;line-height:1.5;box-sizing:border-box;display:flex;align-items:center;&:focus{outline:none}&:hover{background:transparent}}.lookup-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}}.lookup-dialog-content{height:100%;display:flex;flex-direction:column;padding:0;.search-wrapper{position:relative;margin-bottom:16px;width:100%;.search-input-full{width:100%;padding-right:5.5rem}.search-buttons-inside{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;::ng-deep .p-button{width:2.5rem!important;height:2.5rem!important}}}.lookup-table{flex:1;.empty-state{text-align:center;padding:32px;color:var(--p-text-color-secondary);i{font-size:48px;margin-bottom:16px;display:block}p{margin:8px 0;font-size:16px}small{font-size:14px}}}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i7.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: DynamicFieldWrapperComponent, selector: "sia-dynamic-field-wrapper", inputs: ["field", "form", "mode"] }, { kind: "
|
|
567
|
+
`, isInline: true, styles: [".lookup-field{width:100%;position:relative}.lookup-input-group{position:relative;width:100%;.lookup-display{width:100%;cursor:pointer;height:2.857rem;padding:.75rem 4rem .75rem .75rem;font-size:1rem;line-height:1.5;box-sizing:border-box;display:flex;align-items:center;&:focus{outline:none}&:hover{background:transparent}}.lookup-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}.autocomplete-suggestions{position:absolute;top:100%;left:0;right:0;z-index:1000;background:var(--p-surface-0, #fff);border:1px solid var(--p-surface-300, #d1d5db);border-top:none;border-radius:0 0 6px 6px;max-height:200px;overflow-y:auto;box-shadow:0 4px 6px #0000001a;.suggestion-item{padding:.625rem .75rem;cursor:pointer;font-size:.875rem;color:var(--p-text-color, #333);transition:background .15s;&:hover{background:var(--p-surface-100, #f3f4f6)}&.suggestion-loading{color:var(--p-text-muted-color, #999);cursor:default;font-style:italic}}}}.lookup-dialog-content{height:100%;display:flex;flex-direction:column;padding:0;.search-wrapper{position:relative;margin-bottom:16px;width:100%;.search-input-full{width:100%;padding-right:5.5rem}.search-buttons-inside{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;::ng-deep .p-button{width:2.5rem!important;height:2.5rem!important}}}.lookup-table{flex:1;.empty-state{text-align:center;padding:32px;color:var(--p-text-color-secondary);i{font-size:48px;margin-bottom:16px;display:block}p{margin:8px 0;font-size:16px}small{font-size:14px}}}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i7.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: OverlayPanelModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: DynamicFieldWrapperComponent, selector: "sia-dynamic-field-wrapper", inputs: ["field", "form", "mode"] }, { kind: "directive", type: TableLoadingDirective, selector: "p-table[siaTableLoading]", inputs: ["loading", "siaLoadingVariant", "siaLoadingColor", "siaLoadingSize"] }] });
|
|
440
568
|
}
|
|
441
569
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldLookupComponent, decorators: [{
|
|
442
570
|
type: Component,
|
|
@@ -449,9 +577,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
449
577
|
DialogModule,
|
|
450
578
|
TableModule,
|
|
451
579
|
TooltipModule,
|
|
580
|
+
OverlayPanelModule,
|
|
452
581
|
TranslatePipe,
|
|
453
582
|
DynamicFieldWrapperComponent,
|
|
454
|
-
|
|
583
|
+
TableLoadingDirective
|
|
455
584
|
], template: `
|
|
456
585
|
<sia-dynamic-field-wrapper [field]="field" [form]="form" [mode]="mode">
|
|
457
586
|
<div [formGroup]="form" class="lookup-field" [ngClass]="{'disabled': isFieldDisabled()}">
|
|
@@ -459,7 +588,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
459
588
|
<input type="hidden" [formControlName]="field.field" />
|
|
460
589
|
|
|
461
590
|
<div class="lookup-input-group">
|
|
591
|
+
<!-- Autocomplete mode: editable input -->
|
|
462
592
|
<input
|
|
593
|
+
*ngIf="isAutocomplete"
|
|
594
|
+
#autocompleteInput
|
|
595
|
+
pInputText
|
|
596
|
+
[value]="autocompleteText"
|
|
597
|
+
[placeholder]="getPlaceholder()"
|
|
598
|
+
[class.p-invalid]="isFieldInvalid()"
|
|
599
|
+
[disabled]="isFieldDisabled()"
|
|
600
|
+
class="lookup-display"
|
|
601
|
+
(input)="onAutocompleteInput($event)"
|
|
602
|
+
(focus)="onAutocompleteFocus()"
|
|
603
|
+
(blur)="onAutocompleteBlur()"
|
|
604
|
+
/>
|
|
605
|
+
<!-- Standard mode: readonly input -->
|
|
606
|
+
<input
|
|
607
|
+
*ngIf="!isAutocomplete"
|
|
463
608
|
pInputText
|
|
464
609
|
[value]="displayValue"
|
|
465
610
|
[placeholder]="getPlaceholder()"
|
|
@@ -469,6 +614,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
469
614
|
class="lookup-display"
|
|
470
615
|
(click)="openLookup()"
|
|
471
616
|
/>
|
|
617
|
+
<!-- Autocomplete suggestions dropdown -->
|
|
618
|
+
<div class="autocomplete-suggestions" *ngIf="showSuggestions && suggestions.length > 0">
|
|
619
|
+
<div
|
|
620
|
+
class="suggestion-item"
|
|
621
|
+
*ngFor="let item of suggestions"
|
|
622
|
+
(mousedown)="selectSuggestion(item)">
|
|
623
|
+
{{ formatDisplayValue(item) }}
|
|
624
|
+
</div>
|
|
625
|
+
</div>
|
|
626
|
+
<div class="autocomplete-suggestions" *ngIf="showSuggestions && suggestions.length === 0 && autocompleteLoading">
|
|
627
|
+
<div class="suggestion-item suggestion-loading">Buscando...</div>
|
|
628
|
+
</div>
|
|
472
629
|
<div class="lookup-buttons">
|
|
473
630
|
<p-button
|
|
474
631
|
*ngIf="currentValue"
|
|
@@ -544,18 +701,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
544
701
|
</div>
|
|
545
702
|
</div>
|
|
546
703
|
|
|
547
|
-
<!-- Loading State -->
|
|
548
|
-
<sia-loading *ngIf="loading" padding="2rem 0" [size]="48"></sia-loading>
|
|
549
|
-
|
|
550
704
|
<!-- Data Table -->
|
|
551
705
|
<p-table
|
|
552
|
-
*ngIf="!loading"
|
|
553
706
|
[value]="filteredData"
|
|
554
707
|
[paginator]="true"
|
|
555
708
|
[rows]="pageSize"
|
|
556
709
|
[totalRecords]="totalRecords"
|
|
557
710
|
[lazy]="true"
|
|
558
711
|
(onLazyLoad)="onPageChange($event)"
|
|
712
|
+
[loading]="loading" siaTableLoading
|
|
559
713
|
[showCurrentPageReport]="true"
|
|
560
714
|
currentPageReportTemplate="Mostrando {first} a {last} de {totalRecords} registros"
|
|
561
715
|
dataKey="id"
|
|
@@ -597,8 +751,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
597
751
|
</div>
|
|
598
752
|
</p-dialog>
|
|
599
753
|
</sia-dynamic-field-wrapper>
|
|
600
|
-
`, styles: [".lookup-field{width:100%;position:relative}.lookup-input-group{position:relative;width:100%;.lookup-display{width:100%;cursor:pointer;height:2.857rem;padding:.75rem 4rem .75rem .75rem;font-size:1rem;line-height:1.5;box-sizing:border-box;display:flex;align-items:center;&:focus{outline:none}&:hover{background:transparent}}.lookup-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}}.lookup-dialog-content{height:100%;display:flex;flex-direction:column;padding:0;.search-wrapper{position:relative;margin-bottom:16px;width:100%;.search-input-full{width:100%;padding-right:5.5rem}.search-buttons-inside{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;::ng-deep .p-button{width:2.5rem!important;height:2.5rem!important}}}.lookup-table{flex:1;.empty-state{text-align:center;padding:32px;color:var(--p-text-color-secondary);i{font-size:48px;margin-bottom:16px;display:block}p{margin:8px 0;font-size:16px}small{font-size:14px}}}}\n"] }]
|
|
601
|
-
}], ctorParameters: () => [{ type: i1.TranslationService }
|
|
754
|
+
`, styles: [".lookup-field{width:100%;position:relative}.lookup-input-group{position:relative;width:100%;.lookup-display{width:100%;cursor:pointer;height:2.857rem;padding:.75rem 4rem .75rem .75rem;font-size:1rem;line-height:1.5;box-sizing:border-box;display:flex;align-items:center;&:focus{outline:none}&:hover{background:transparent}}.lookup-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}.autocomplete-suggestions{position:absolute;top:100%;left:0;right:0;z-index:1000;background:var(--p-surface-0, #fff);border:1px solid var(--p-surface-300, #d1d5db);border-top:none;border-radius:0 0 6px 6px;max-height:200px;overflow-y:auto;box-shadow:0 4px 6px #0000001a;.suggestion-item{padding:.625rem .75rem;cursor:pointer;font-size:.875rem;color:var(--p-text-color, #333);transition:background .15s;&:hover{background:var(--p-surface-100, #f3f4f6)}&.suggestion-loading{color:var(--p-text-muted-color, #999);cursor:default;font-style:italic}}}}.lookup-dialog-content{height:100%;display:flex;flex-direction:column;padding:0;.search-wrapper{position:relative;margin-bottom:16px;width:100%;.search-input-full{width:100%;padding-right:5.5rem}.search-buttons-inside{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;::ng-deep .p-button{width:2.5rem!important;height:2.5rem!important}}}.lookup-table{flex:1;.empty-state{text-align:center;padding:32px;color:var(--p-text-color-secondary);i{font-size:48px;margin-bottom:16px;display:block}p{margin:8px 0;font-size:16px}small{font-size:14px}}}}\n"] }]
|
|
755
|
+
}], ctorParameters: () => [{ type: i1.TranslationService }], propDecorators: { field: [{
|
|
602
756
|
type: Input
|
|
603
757
|
}], form: [{
|
|
604
758
|
type: Input
|
|
@@ -607,4 +761,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
607
761
|
}], mode: [{
|
|
608
762
|
type: Input
|
|
609
763
|
}] } });
|
|
610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2ZpZWxkcy9keW5hbWljLWZpZWxkLWxvb2t1cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7OztBQTZSbkUsTUFBTSxPQUFPLDJCQUEyQjtJQXdCbEI7SUFBZ0Q7SUF2QjNELEtBQUssQ0FBMEI7SUFDL0IsSUFBSSxDQUFhO0lBQ2pCLFNBQVMsQ0FBYTtJQUN0QixJQUFJLEdBQXNCLE1BQU0sQ0FBQztJQUUxQyxZQUFZLEdB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WixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYiw0QkFBNEI7d0JBQzVCLGdCQUFnQjtxQkFDakIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlKVDt1SEEySFEsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1GaWVsZENvbmZpZyB9IGZyb20gJy4uL21vZGVscy9keW5hbWljLWZvcm0ubW9kZWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RyYW5zbGF0aW9uLmhlbHBlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IER5bmFtaWNGaWVsZFdyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZmllbGQtd3JhcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9va3VwQ29sdW1uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VudGl0eS1saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpYS1keW5hbWljLWZpZWxkLWxvb2t1cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgIERpYWxvZ01vZHVsZSxcbiAgICBUYWJsZU1vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgRHluYW1pY0ZpZWxkV3JhcHBlckNvbXBvbmVudCxcbiAgICBMb2FkaW5nQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNpYS1keW5hbWljLWZpZWxkLXdyYXBwZXIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIm1vZGVcIj5cbiAgICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJsb29rdXAtZmllbGRcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogaXNGaWVsZERpc2FibGVkKCl9XCI+XG4gICAgICAgIDwhLS0gSGlkZGVuIGlucHV0IHBhcmEgbyBmb3JtQ29udHJvbCAtLT5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmZpZWxkXCIgLz5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb29rdXAtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgW2NsYXNzLnAtaW52YWxpZF09XCJpc0ZpZWxkSW52YWxpZCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtZGlzcGxheVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb29rdXAtYnV0dG9uc1wiPlxuICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImNsZWFyVmFsdWUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiTGltcGFyXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1zZWFyY2hcIlxuICAgICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib3Blbkxvb2t1cCgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRmllbGREaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgcFRvb2x0aXA9XCJCdXNjYXJcIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgPjwvcC1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTG9va3VwIERpYWxvZyAtLT5cbiAgICAgIDxwLWRpYWxvZ1xuICAgICAgICBbKHZpc2libGUpXT1cInNob3dMb29rdXBEaWFsb2dcIlxuICAgICAgICBbbW9kYWxdPVwidHJ1ZVwiXG4gICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnODAwcHgnLCBtYXhIZWlnaHQ6ICc4MHZoJyB9XCJcbiAgICAgICAgW2NvbnRlbnRTdHlsZV09XCJ7IG1heEhlaWdodDogJ2NhbGMoODB2aCAtIDEyMHB4KScsIG92ZXJmbG93OiAnYXV0bycgfVwiXG4gICAgICAgIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgICAgICBbcmVzaXphYmxlXT1cInRydWVcIlxuICAgICAgICBbaGVhZGVyXT1cIidTZWxlY2lvbmFyICcgKyAoZmllbGQubGFiZWwgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgIChvbkhpZGUpPVwib25EaWFsb2dIaWRlKClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9va3VwLWRpYWxvZy1jb250ZW50XCI+XG4gICAgICAgICAgPCEtLSBTZWFyY2ggSW5wdXQgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0J1c2NhciAnICsgKGZpZWxkLmxhYmVsIHwgdHJhbnNsYXRlKS50b0xvd2VyQ2FzZSgpICsgJy4uLidcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXQtZnVsbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1idXR0b25zLWluc2lkZVwiPlxuICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImNsZWFyU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWJ1dHRvbi1jbGVhclwiXG4gICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJMaW1wYXIgYnVzY2FcIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktc2VhcmNoXCJcbiAgICAgICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25TZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtYnV0dG9uLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJCdXNjYXJcIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gICAgICAgICAgPHNpYS1sb2FkaW5nICpuZ0lmPVwibG9hZGluZ1wiIHBhZGRpbmc9XCIycmVtIDBcIiBbc2l6ZV09XCI0OFwiPjwvc2lhLWxvYWRpbmc+XG5cbiAgICAgICAgICA8IS0tIERhdGEgVGFibGUgLS0+XG4gICAgICAgICAgPHAtdGFibGVcbiAgICAgICAgICAgICpuZ0lmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlcmVkRGF0YVwiXG4gICAgICAgICAgICBbcGFnaW5hdG9yXT1cInRydWVcIlxuICAgICAgICAgICAgW3Jvd3NdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgICAgICAgICAgW2xhenldPVwidHJ1ZVwiXG4gICAgICAgICAgICAob25MYXp5TG9hZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgICAgICAgICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIk1vc3RyYW5kbyB7Zmlyc3R9IGEge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiXG4gICAgICAgICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgICAgICAgW3Jvd0hvdmVyXT1cInRydWVcIlxuICAgICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZCBsb29rdXAtdGFibGVcIlxuICAgICAgICAgICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbVwiXG4gICAgICAgICAgICAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwic2luZ2xlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiPlxuICAgICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8dHIgW3BTZWxlY3RhYmxlUm93XT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRGaWVsZFZhbHVlKGl0ZW0sIGNvbC5maWVsZCkgfX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGhcIiBjbGFzcz1cImVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHA+TmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG88L3A+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5UZW50ZSBhanVzdGFyIG9zIHRlcm1vcyBkZSBidXNjYTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9wLWRpYWxvZz5cbiAgICA8L3NpYS1keW5hbWljLWZpZWxkLXdyYXBwZXI+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAubG9va3VwLWZpZWxkIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC5sb29rdXAtaW5wdXQtZ3JvdXAge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBcbiAgICAgIC5sb29rdXAtZGlzcGxheSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGhlaWdodDogMi44NTdyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gNHJlbSAwLjc1cmVtIDAuNzVyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5sb29rdXAtYnV0dG9ucyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDRweDtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgfVxuXG4gICAgICA6Om5nLWRlZXAgLnAtYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi13aWR0aDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBtaW4taGVpZ2h0OiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG4gICAgICAgIFxuICAgICAgICAucC1idXR0b24taWNvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAucC1idXR0b24tbGFiZWwge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5sb29rdXAtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAuc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgIC5zZWFyY2gtaW5wdXQtZnVsbCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogNS41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1idXR0b25zLWluc2lkZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgICAgXG4gICAgICAgICAgOjpuZy1kZWVwIC5wLWJ1dHRvbiB7XG4gICAgICAgICAgICB3aWR0aDogMi41cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBoZWlnaHQ6IDIuNXJlbSAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubG9va3VwLXRhYmxlIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgXG4gICAgICAgIC5lbXB0eS1zdGF0ZSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDMycHg7XG4gICAgICAgICAgY29sb3I6IHZhcigtLXAtdGV4dC1jb2xvci1zZWNvbmRhcnkpO1xuXG4gICAgICAgICAgaSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNtYWxsIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZpZWxkITogRHluYW1pY0Zvcm1GaWVsZENvbmZpZztcbiAgQElucHV0KCkgZm9ybSE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBtb2RlOiAnZm9ybScgfCAnZmlsdGVyJyA9ICdmb3JtJztcblxuICBkaXNwbGF5VmFsdWU6IHN0cmluZyA9ICcnO1xuICBzaG93TG9va3VwRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG4gIFxuICBkYXRhOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZERhdGE6IGFueVtdID0gW107XG4gIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSA1O1xuICBzZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XG4gIHByaXZhdGUgc2tpcE5leHRMYXp5TG9hZDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgY29sdW1uczogTG9va3VwQ29sdW1uW10gPSBbXTtcbiAgZGlzcGxheUZpZWxkOiBzdHJpbmcgPSAnbmFtZSc7XG4gIHZhbHVlRmllbGQ6IHN0cmluZyA9ICdpZCc7XG4gIHNlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbJ25hbWUnXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cExvb2t1cENvbmZpZygpO1xuICAgIHRoaXMud2F0Y2hWYWx1ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hWYWx1ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgLy8gQ2FycmVnYXIgdmFsb3IgaW5pY2lhbFxuICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZURpc3BsYXkoY29udHJvbC52YWx1ZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE9ic2VydmFyIG11ZGFuw6dhc1xuICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVEaXNwbGF5KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT2J0w6ltIG8gRm9ybUNvbnRyb2wsIGxpZGFuZG8gY29tIGNhbXBvcyBhbmluaGFkb3MgKGNvbSBwb250byBubyBub21lKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGb3JtQ29udHJvbCgpIHtcbiAgICBpZiAoIXRoaXMuZmllbGQ/LmZpZWxkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBBY2Vzc2EgZGlyZXRhbWVudGUgdmlhIGNvbnRyb2xzW10gcG9pcyBmb3JtLmdldCgpIG7Do28gZnVuY2lvbmEgY29tIGNhbXBvcyBxdWUgdMOqbSBwb250b1xuICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5maWVsZC5maWVsZF07XG4gIH1cblxuICBwcml2YXRlIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuIGNvbnRyb2w/LnZhbHVlO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICBjb250cm9sPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTG9va3VwQ29uZmlnKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpZWxkKSB7XG4gICAgICB0aGlzLmRpc3BsYXlGaWVsZCA9IHRoaXMuZmllbGQubG9va3VwRGlzcGxheUZpZWxkIHx8ICduYW1lJztcbiAgICAgIHRoaXMudmFsdWVGaWVsZCA9IHRoaXMuZmllbGQubG9va3VwVmFsdWVGaWVsZCB8fCAnaWQnO1xuICAgICAgdGhpcy5zZWFyY2hGaWVsZHMgPSB0aGlzLmZpZWxkLmxvb2t1cFNlYXJjaEZpZWxkcyB8fCBbJ25hbWUnXTtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZmllbGQubG9va3VwQ29sdW1ucyB8fCBbXG4gICAgICAgIHsgZmllbGQ6IHRoaXMuZGlzcGxheUZpZWxkLCBoZWFkZXI6ICdOb21lJywgd2lkdGg6ICcxMDAlJyB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmFsdWVEaXNwbGF5KHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMuZm9ybWF0RGlzcGxheVZhbHVlKHZhbHVlKTtcbiAgICAgIC8vIEtlZXAgdGhlIGZ1bGwgb2JqZWN0IGluIHRoZSBmb3JtIGNvbnRyb2xcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gU2Ugw6kgdW0gSUQgKHN0cmluZyBvdSBudW1iZXIpLCBuw6NvIGZhemVyIHJlcXVpc2nDp8Ojb1xuICAgIC8vIERlaXhhciB2YXppbyBlIHPDsyBjYXJyZWdhciBxdWFuZG8gYWJyaXIgbyBsb29rdXBcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGlzcGxheVZhbHVlKGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4gJyc7XG4gICAgXG4gICAgaWYgKHRoaXMuZmllbGQ/Lmxvb2t1cERpc3BsYXlGaWVsZHMgJiYgdGhpcy5maWVsZC5sb29rdXBEaXNwbGF5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZmllbGQubG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAubWFwKGZpZWxkTmFtZSA9PiB0aGlzLmdldEZpZWxkVmFsdWUoaXRlbSwgZmllbGROYW1lKSlcbiAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJyk7XG4gICAgICBcbiAgICAgIHJldHVybiB2YWx1ZXMuam9pbignIC0gJyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkVmFsdWUoaXRlbSwgdGhpcy5kaXNwbGF5RmllbGQpIHx8ICcnO1xuICB9XG5cbiAgaXNGaWVsZEludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICByZXR1cm4gISEoY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKSk7XG4gIH1cblxuICBpc0ZpZWxkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICByZXR1cm4gY29udHJvbD8uZGlzYWJsZWQgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUcmFuc2xhdGlvbkhlbHBlci5nZXRGaWx0ZXJQbGFjZWhvbGRlcihcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgICAgdGhpcy5tb2RlLFxuICAgICAgdGhpcy5maWVsZC5sYWJlbCxcbiAgICAgIHRoaXMuZmllbGQucGxhY2Vob2xkZXJcbiAgICApO1xuICB9XG5cbiAgb3Blbkxvb2t1cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0ZpZWxkRGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSXRlbSgpO1xuICAgIFxuICAgIHRoaXMuc2hvd0xvb2t1cERpYWxvZyA9IHRydWU7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgLy8gRGVsYXkgbG9hZERhdGEgdG8gbmV4dCBtYWNyb3Rhc2sgdG8gYXZvaWQgTkcwMTAwXG4gICAgLy8gKHAtZGlhbG9nIHRyaWdnZXJzIGEgQ0QgY3ljbGUgb24gb3BlbiB0aGF0IGNvbmZsaWN0cyB3aXRoIGxvYWRpbmcgc3RhdGUgY2hhbmdlKVxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkRGF0YSgpLCAwKTtcbiAgfVxuXG4gIG9uRGlhbG9nSGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dMb29rdXBEaWFsb2cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBwLXRhYmxlIGZpcmVzIG9uTGF6eUxvYWQgd2hlbiBpdCBmaXJzdCByZW5kZXJzIOKAlCBza2lwIGl0IHNpbmNlXG4gICAgLy8gb3Blbkxvb2t1cCBhbHJlYWR5IHRyaWdnZXJlZCBsb2FkRGF0YVxuICAgIGlmICh0aGlzLnNraXBOZXh0TGF6eUxvYWQpIHtcbiAgICAgIHRoaXMuc2tpcE5leHRMYXp5TG9hZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkPy5sb29rdXBTZXJ2aWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBsaXN0UGFyYW1zOiBhbnkgPSB7IFxuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgIHNpemU6IHRoaXMucGFnZVNpemVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZmllbGQubG9va3VwU29ydCkge1xuICAgICAgbGlzdFBhcmFtcy5zb3J0ID0gdGhpcy5maWVsZC5sb29rdXBTb3J0O1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSkge1xuICAgICAgY29uc3QgdGVybSA9IHRoaXMuc2VhcmNoVGVybS50cmltKCk7XG4gICAgICBjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3QgaXNOdW1lcmljVGVybSA9ICFpc05hTihOdW1iZXIodGVybSkpICYmIHRlcm0gIT09ICcnO1xuICAgICAgXG4gICAgICB0aGlzLnNlYXJjaEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBjb2x1bW4/LnR5cGUgfHwgJ3RleHQnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBpZiAoaXNOdW1lcmljVGVybSkge1xuICAgICAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2ZpZWxkfSBlcSAke3Rlcm19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVwcGVyVGVybSA9IHRlcm0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBmaWx0ZXJDb25kaXRpb25zLnB1c2goYFVQUEVSKCR7ZmllbGR9KSBsaWtlICclJHt1cHBlclRlcm19JSdgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmIChmaWx0ZXJDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGlzdFBhcmFtcy5maWx0ZXJRdWVyeSA9IGZpbHRlckNvbmRpdGlvbnMuam9pbignIG9yICcpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLmxvb2t1cEZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGlzdFBhcmFtc1trZXldID0gdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzIVtrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkLmxvb2t1cER5bmFtaWNGaWx0ZXJzICYmIHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICBjb25zdCBkeW5hbWljRmlsdGVycyA9IHRoaXMuZmllbGQubG9va3VwRHluYW1pY0ZpbHRlcnModGhpcy5mb3JtR3JvdXAudmFsdWUpO1xuICAgICAgXG4gICAgICBjb25zdCBkeW5hbWljRmlsdGVyQ29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICAgIE9iamVjdC5rZXlzKGR5bmFtaWNGaWx0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZHluYW1pY0ZpbHRlcnNba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkeW5hbWljRmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2tleX0gZXEgJyR7dmFsdWV9J2ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKGR5bmFtaWNGaWx0ZXJDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZHluYW1pY0ZpbHRlclF1ZXJ5ID0gZHluYW1pY0ZpbHRlckNvbmRpdGlvbnMuam9pbignIGFuZCAnKTtcbiAgICAgICAgaWYgKGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkpIHtcbiAgICAgICAgICBsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5ID0gYCgke2xpc3RQYXJhbXMuZmlsdGVyUXVlcnl9KSBhbmQgKCR7ZHluYW1pY0ZpbHRlclF1ZXJ5fSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSBkeW5hbWljRmlsdGVyUXVlcnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5maWVsZC5sb29rdXBTZXJ2aWNlLmxpc3QobGlzdFBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmNvbnRlbnRzIHx8IFtdO1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHJlc3BvbnNlLnRvdGFsRWxlbWVudHMgfHwgMDtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJdGVtKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBBcMOzcyBjYXJyZWdhciBvcyBkYWRvcyBkYSBncmlkLCBzZSB0ZW1vcyB1bSB2YWxvciBzZWxlY2lvbmFkbyBtYXMgc2VtIGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgLy8gdGVudGFyIGVuY29udHJhciBvIGl0ZW0gbm9zIGRhZG9zIGNhcnJlZ2Fkb3NcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgIXRoaXMuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQoaSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMudmFsdWUpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMuZm9ybWF0RGlzcGxheVZhbHVlKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFRoZSB0YWJsZSB3aWxsIGZpcmUgb25MYXp5TG9hZCB3aGVuIGl0IGZpcnN0IHJlbmRlcnMg4oCUIHNraXAgaXRcbiAgICAgICAgdGhpcy5za2lwTmV4dExhenlMb2FkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKF9lcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSAwO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5za2lwTmV4dExhenlMb2FkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBpdGVtID0gdGhpcy5maWx0ZXJlZERhdGEuZmluZChpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd0xvb2t1cERpYWxvZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBzZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBzZXQgdGhlIGZ1bGwgb2JqZWN0LCBub3QganVzdCB0aGUgSURcbiAgICB0aGlzLnNldFZhbHVlKGl0ZW0pO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5mb3JtYXREaXNwbGF5VmFsdWUoaXRlbSk7XG4gICAgdGhpcy5zaG93TG9va3VwRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBvblJvd1NlbGVjdChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RJdGVtKGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZShpdGVtOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrZXkpID0+IG9iaj8uW2tleV0sIGl0ZW0pIHx8ICcnO1xuICB9XG59XG4iXX0=
|
|
764
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2ZpZWxkcy9keW5hbWljLWZpZWxkLWxvb2t1cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0Is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WTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLDRCQUE0Qjt3QkFDNUIscUJBQXFCO3FCQUN0QixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBLVDt1RkE0SlEsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IER5bmFtaWNGb3JtRmllbGRDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvZHluYW1pYy1mb3JtLm1vZGVscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25IZWxwZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy90cmFuc2xhdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IExvb2t1cENvbHVtbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbnRpdHktbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgVGFibGVMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy90YWJsZS1sb2FkaW5nL3RhYmxlLWxvYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhLWR5bmFtaWMtZmllbGQtbG9va3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIFRhYmxlTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgT3ZlcmxheVBhbmVsTW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgRHluYW1pY0ZpZWxkV3JhcHBlckNvbXBvbmVudCxcbiAgICBUYWJsZUxvYWRpbmdEaXJlY3RpdmVcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2lhLWR5bmFtaWMtZmllbGQtd3JhcHBlciBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwibW9kZVwiPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImxvb2t1cC1maWVsZFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBpc0ZpZWxkRGlzYWJsZWQoKX1cIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gaW5wdXQgcGFyYSBvIGZvcm1Db250cm9sIC0tPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuZmllbGRcIiAvPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDwhLS0gQXV0b2NvbXBsZXRlIG1vZGU6IGVkaXRhYmxlIGlucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nSWY9XCJpc0F1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAjYXV0b2NvbXBsZXRlSW5wdXRcbiAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJhdXRvY29tcGxldGVUZXh0XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wLWludmFsaWRdPVwiaXNGaWVsZEludmFsaWQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaWVsZERpc2FibGVkKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtZGlzcGxheVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25BdXRvY29tcGxldGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkF1dG9jb21wbGV0ZUZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BdXRvY29tcGxldGVCbHVyKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPCEtLSBTdGFuZGFyZCBtb2RlOiByZWFkb25seSBpbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzQXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgW2NsYXNzLnAtaW52YWxpZF09XCJpc0ZpZWxkSW52YWxpZCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtZGlzcGxheVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gQXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIGRyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvY29tcGxldGUtc3VnZ2VzdGlvbnNcIiAqbmdJZj1cInNob3dTdWdnZXN0aW9ucyAmJiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICAobW91c2Vkb3duKT1cInNlbGVjdFN1Z2dlc3Rpb24oaXRlbSlcIj5cbiAgICAgICAgICAgICAge3sgZm9ybWF0RGlzcGxheVZhbHVlKGl0ZW0pIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zXCIgKm5nSWY9XCJzaG93U3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwICYmIGF1dG9jb21wbGV0ZUxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW0gc3VnZ2VzdGlvbi1sb2FkaW5nXCI+QnVzY2FuZG8uLi48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9va3VwLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjbGVhclZhbHVlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaWVsZERpc2FibGVkKClcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkxpbXBhclwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktc2VhcmNoXCJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9wZW5Mb29rdXAoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiQnVzY2FyXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExvb2t1cCBEaWFsb2cgLS0+XG4gICAgICA8cC1kaWFsb2dcbiAgICAgICAgWyh2aXNpYmxlKV09XCJzaG93TG9va3VwRGlhbG9nXCJcbiAgICAgICAgW21vZGFsXT1cInRydWVcIlxuICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzgwMHB4JywgbWF4SGVpZ2h0OiAnODB2aCcgfVwiXG4gICAgICAgIFtjb250ZW50U3R5bGVdPVwieyBtYXhIZWlnaHQ6ICdjYWxjKDgwdmggLSAxMjBweCknLCBvdmVyZmxvdzogJ2F1dG8nIH1cIlxuICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgW2hlYWRlcl09XCInU2VsZWNpb25hciAnICsgKGZpZWxkLmxhYmVsIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAob25IaWRlKT1cIm9uRGlhbG9nSGlkZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1kaWFsb2ctY29udGVudFwiPlxuICAgICAgICAgIDwhLS0gU2VhcmNoIElucHV0IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidCdXNjYXIgJyArIChmaWVsZC5sYWJlbCB8IHRyYW5zbGF0ZSkudG9Mb3dlckNhc2UoKSArICcuLi4nXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2goKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0LWZ1bGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYnV0dG9ucy1pbnNpZGVcIj5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1idXR0b24tY2xlYXJcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiTGltcGFyIGJ1c2NhXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWJ1dHRvbi1zZWFyY2hcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiQnVzY2FyXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEYXRhIFRhYmxlIC0tPlxuICAgICAgICAgIDxwLXRhYmxlXG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyZWREYXRhXCJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcm93c109XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgICAgICAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICAgICAgICAgIChvbkxhenlMb2FkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBzaWFUYWJsZUxvYWRpbmdcbiAgICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiTW9zdHJhbmRvIHtmaXJzdH0gYSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgICBbcm93SG92ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkIGxvb2t1cC10YWJsZVwiXG4gICAgICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgICAgIChvblJvd1NlbGVjdCk9XCJvblJvd1NlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDx0ciBbcFNlbGVjdGFibGVSb3ddPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEZpZWxkVmFsdWUoaXRlbSwgY29sLmZpZWxkKSB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwiZW1wdHktbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8cD5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlRlbnRlIGFqdXN0YXIgb3MgdGVybW9zIGRlIGJ1c2NhPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3AtZGlhbG9nPlxuICAgIDwvc2lhLWR5bmFtaWMtZmllbGQtd3JhcHBlcj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5sb29rdXAtZmllbGQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLmxvb2t1cC1pbnB1dC1ncm91cCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIFxuICAgICAgLmxvb2t1cC1kaXNwbGF5IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgaGVpZ2h0OiAyLjg1N3JlbTtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSA0cmVtIDAuNzVyZW0gMC43NXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmxvb2t1cC1idXR0b25zIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogNHB4O1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICB9XG5cbiAgICAgIDo6bmctZGVlcCAucC1idXR0b24ge1xuICAgICAgICB3aWR0aDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDtcbiAgICAgICAgXG4gICAgICAgIC5wLWJ1dHRvbi1pY29uIHtcbiAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5wLWJ1dHRvbi1sYWJlbCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXAtc3VyZmFjZS0wLCAjZmZmKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcC1zdXJmYWNlLTMwMCwgI2QxZDVkYik7XG4gICAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4O1xuICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblxuICAgICAgICAuc3VnZ2VzdGlvbi1pdGVtIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1wLXRleHQtY29sb3IsICMzMzMpO1xuICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXAtc3VyZmFjZS0xMDAsICNmM2Y0ZjYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICYuc3VnZ2VzdGlvbi1sb2FkaW5nIHtcbiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1wLXRleHQtbXV0ZWQtY29sb3IsICM5OTkpO1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5sb29rdXAtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAuc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgIC5zZWFyY2gtaW5wdXQtZnVsbCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogNS41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1idXR0b25zLWluc2lkZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgICAgXG4gICAgICAgICAgOjpuZy1kZWVwIC5wLWJ1dHRvbiB7XG4gICAgICAgICAgICB3aWR0aDogMi41cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBoZWlnaHQ6IDIuNXJlbSAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubG9va3VwLXRhYmxlIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgXG4gICAgICAgIC5lbXB0eS1zdGF0ZSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDMycHg7XG4gICAgICAgICAgY29sb3I6IHZhcigtLXAtdGV4dC1jb2xvci1zZWNvbmRhcnkpO1xuXG4gICAgICAgICAgaSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNtYWxsIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZmllbGQhOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBmb3JtITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIG1vZGU6ICdmb3JtJyB8ICdmaWx0ZXInID0gJ2Zvcm0nO1xuXG4gIGRpc3BsYXlWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHNob3dMb29rdXBEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcbiAgXG4gIGRhdGE6IGFueVtdID0gW107XG4gIGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBzZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XG4gIFxuICBjb2x1bW5zOiBMb29rdXBDb2x1bW5bXSA9IFtdO1xuICBkaXNwbGF5RmllbGQ6IHN0cmluZyA9ICduYW1lJztcbiAgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJztcbiAgc2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IFsnbmFtZSddO1xuXG4gIC8vIEF1dG9jb21wbGV0ZSBzdGF0ZVxuICBhdXRvY29tcGxldGVUZXh0OiBzdHJpbmcgPSAnJztcbiAgc3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gIHNob3dTdWdnZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuICBhdXRvY29tcGxldGVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGVTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IGlzQXV0b2NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkPy5sb29rdXBBdXRvY29tcGxldGUgPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBtaW5MZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZD8ubG9va3VwQXV0b2NvbXBsZXRlTWluTGVuZ3RoID8/IDI7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBMb29rdXBDb25maWcoKTtcbiAgICB0aGlzLndhdGNoVmFsdWVDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXR1cEF1dG9jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b2NvbXBsZXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0F1dG9jb21wbGV0ZSkgcmV0dXJuO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3ViID0gdGhpcy5hdXRvY29tcGxldGVTdWJqZWN0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApLnN1YnNjcmliZSh0ZXJtID0+IHtcbiAgICAgIGlmICh0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlYXJjaFN1Z2dlc3Rpb25zKHRlcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25BdXRvY29tcGxldGVJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5hdXRvY29tcGxldGVUZXh0ID0gdmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBvbkF1dG9jb21wbGV0ZUZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVRleHQubGVuZ3RoID49IHRoaXMubWluTGVuZ3RoICYmIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQXV0b2NvbXBsZXRlQmx1cigpOiB2b2lkIHtcbiAgICAvLyBEZWxheSB0byBhbGxvdyBjbGljayBvbiBzdWdnZXN0aW9uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuc2hvd1N1Z2dlc3Rpb25zID0gZmFsc2U7IH0sIDIwMCk7XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWUoaXRlbSk7XG4gICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdERpc3BsYXlWYWx1ZShpdGVtKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVRleHQgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoU3VnZ2VzdGlvbnModGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkPy5sb29rdXBTZXJ2aWNlKSByZXR1cm47XG4gICAgdGhpcy5hdXRvY29tcGxldGVMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IHRydWU7XG5cbiAgICBjb25zdCBsaXN0UGFyYW1zOiBhbnkgPSB7IHBhZ2U6IDAsIHNpemU6IDEwIH07XG5cbiAgICBpZiAodGhpcy5maWVsZC5sb29rdXBTb3J0KSB7XG4gICAgICBsaXN0UGFyYW1zLnNvcnQgPSB0aGlzLmZpZWxkLmxvb2t1cFNvcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBpc051bWVyaWNUZXJtID0gIWlzTmFOKE51bWJlcih0ZXJtKSkgJiYgdGVybSAhPT0gJyc7XG5cbiAgICB0aGlzLnNlYXJjaEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGZpZWxkKTtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNvbHVtbj8udHlwZSB8fCAndGV4dCc7XG5cbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChpc051bWVyaWNUZXJtKSB7XG4gICAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2ZpZWxkfSBlcSAke3Rlcm19YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVwcGVyVGVybSA9IHRlcm0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGBVUFBFUigke2ZpZWxkfSkgbGlrZSAnJSR7dXBwZXJUZXJtfSUnYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmlsdGVyQ29uZGl0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5ID0gZmlsdGVyQ29uZGl0aW9ucy5qb2luKCcgb3IgJyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgbG9va3VwRmlsdGVyc1xuICAgIGlmICh0aGlzLmZpZWxkLmxvb2t1cEZpbHRlcnMpIHtcbiAgICAgIGNvbnN0IGV4dHJhID0gdHlwZW9mIHRoaXMuZmllbGQubG9va3VwRmlsdGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHRoaXMuZmllbGQubG9va3VwRmlsdGVycyh0aGlzLmZvcm1Hcm91cD8udmFsdWUgfHwge30pXG4gICAgICAgIDogdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzO1xuICAgICAgaWYgKGV4dHJhKSB7XG4gICAgICAgIGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSBsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5XG4gICAgICAgICAgPyBgKCR7bGlzdFBhcmFtcy5maWx0ZXJRdWVyeX0pIGFuZCAoJHtleHRyYX0pYFxuICAgICAgICAgIDogZXh0cmE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maWVsZC5sb29rdXBTZXJ2aWNlLmxpc3QobGlzdFBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gcmVzLmNvbnRlbnRzIHx8IFtdO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaFZhbHVlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICAvLyBDYXJyZWdhciB2YWxvciBpbmljaWFsXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmhhbmRsZVZhbHVlRGlzcGxheShjb250cm9sLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gT2JzZXJ2YXIgbXVkYW7Dp2FzXG4gICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZURpc3BsYXkodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnTDqW0gbyBGb3JtQ29udHJvbCwgbGlkYW5kbyBjb20gY2FtcG9zIGFuaW5oYWRvcyAoY29tIHBvbnRvIG5vIG5vbWUpXG4gICAqL1xuICBwcml2YXRlIGdldEZvcm1Db250cm9sKCkge1xuICAgIGlmICghdGhpcy5maWVsZD8uZmllbGQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEFjZXNzYSBkaXJldGFtZW50ZSB2aWEgY29udHJvbHNbXSBwb2lzIGZvcm0uZ2V0KCkgbsOjbyBmdW5jaW9uYSBjb20gY2FtcG9zIHF1ZSB0w6ptIHBvbnRvXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmZpZWxkLmZpZWxkXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICByZXR1cm4gY29udHJvbD8udmFsdWU7XG4gIH1cblxuICBnZXQgY3VycmVudFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgIGNvbnRyb2w/LnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMb29rdXBDb25maWcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmllbGQpIHtcbiAgICAgIHRoaXMuZGlzcGxheUZpZWxkID0gdGhpcy5maWVsZC5sb29rdXBEaXNwbGF5RmllbGQgfHwgJ25hbWUnO1xuICAgICAgdGhpcy52YWx1ZUZpZWxkID0gdGhpcy5maWVsZC5sb29rdXBWYWx1ZUZpZWxkIHx8ICdpZCc7XG4gICAgICB0aGlzLnNlYXJjaEZpZWxkcyA9IHRoaXMuZmllbGQubG9va3VwU2VhcmNoRmllbGRzIHx8IFsnbmFtZSddO1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5maWVsZC5sb29rdXBDb2x1bW5zIHx8IFtcbiAgICAgICAgeyBmaWVsZDogdGhpcy5kaXNwbGF5RmllbGQsIGhlYWRlcjogJ05vbWUnLCB3aWR0aDogJzEwMCUnIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZURpc3BsYXkodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRleHQgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdERpc3BsYXlWYWx1ZShpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkPy5sb29rdXBEaXNwbGF5RmllbGRzICYmIHRoaXMuZmllbGQubG9va3VwRGlzcGxheUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgLm1hcChmaWVsZE5hbWUgPT4gdGhpcy5nZXRGaWVsZFZhbHVlKGl0ZW0sIGZpZWxkTmFtZSkpXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpO1xuICAgICAgXG4gICAgICByZXR1cm4gdmFsdWVzLmpvaW4oJyAtICcpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFZhbHVlKGl0ZW0sIHRoaXMuZGlzcGxheUZpZWxkKSB8fCAnJztcbiAgfVxuXG4gIGlzRmllbGRJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuICEhKGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZCkpO1xuICB9XG5cbiAgaXNGaWVsZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuIGNvbnRyb2w/LmRpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVHJhbnNsYXRpb25IZWxwZXIuZ2V0RmlsdGVyUGxhY2Vob2xkZXIoXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZSxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIHRoaXMuZmllbGQubGFiZWwsXG4gICAgICB0aGlzLmZpZWxkLnBsYWNlaG9sZGVyXG4gICAgKTtcbiAgfVxuXG4gIG9wZW5Mb29rdXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNGaWVsZERpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTtcbiAgICBcbiAgICB0aGlzLnNob3dMb29rdXBEaWFsb2cgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIC8vIERlbGF5IGxvYWREYXRhIHRvIG5leHQgbWFjcm90YXNrIHRvIGF2b2lkIE5HMDEwMFxuICAgIC8vIChwLWRpYWxvZyB0cmlnZ2VycyBhIENEIGN5Y2xlIG9uIG9wZW4gdGhhdCBjb25mbGljdHMgd2l0aCBsb2FkaW5nIHN0YXRlIGNoYW5nZSlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZERhdGEoKSwgMCk7XG4gIH1cblxuICBvbkRpYWxvZ0hpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93TG9va3VwRGlhbG9nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFnZSA9IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cztcbiAgICBpZiAobmV3UGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSAmJiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBuZXdQYWdlO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkPy5sb29rdXBTZXJ2aWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBsaXN0UGFyYW1zOiBhbnkgPSB7IFxuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgIHNpemU6IHRoaXMucGFnZVNpemVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZmllbGQubG9va3VwU29ydCkge1xuICAgICAgbGlzdFBhcmFtcy5zb3J0ID0gdGhpcy5maWVsZC5sb29rdXBTb3J0O1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSkge1xuICAgICAgY29uc3QgdGVybSA9IHRoaXMuc2VhcmNoVGVybS50cmltKCk7XG4gICAgICBjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3QgaXNOdW1lcmljVGVybSA9ICFpc05hTihOdW1iZXIodGVybSkpICYmIHRlcm0gIT09ICcnO1xuICAgICAgXG4gICAgICB0aGlzLnNlYXJjaEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBjb2x1bW4/LnR5cGUgfHwgJ3RleHQnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBpZiAoaXNOdW1lcmljVGVybSkge1xuICAgICAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2ZpZWxkfSBlcSAke3Rlcm19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVwcGVyVGVybSA9IHRlcm0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBmaWx0ZXJDb25kaXRpb25zLnB1c2goYFVQUEVSKCR7ZmllbGR9KSBsaWtlICclJHt1cHBlclRlcm19JSdgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmIChmaWx0ZXJDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGlzdFBhcmFtcy5maWx0ZXJRdWVyeSA9IGZpbHRlckNvbmRpdGlvbnMuam9pbignIG9yICcpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzKSB7XG4gICAgICBsZXQgZXh0cmFGaWx0ZXIgPSAnJztcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGV4dHJhRmlsdGVyID0gdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzKHRoaXMuZm9ybUdyb3VwPy52YWx1ZSB8fCB7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRyYUZpbHRlciA9IHRoaXMuZmllbGQubG9va3VwRmlsdGVycztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGV4dHJhRmlsdGVyKSB7XG4gICAgICAgIGlmIChsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5KSB7XG4gICAgICAgICAgbGlzdFBhcmFtcy5maWx0ZXJRdWVyeSA9IGAoJHtsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5fSkgYW5kICgke2V4dHJhRmlsdGVyfSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSBleHRyYUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmZpZWxkLmxvb2t1cFNlcnZpY2UubGlzdChsaXN0UGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuY29udGVudHMgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2UudG90YWxFbGVtZW50cyB8fCAwO1xuICAgICAgICBcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFww7NzIGNhcnJlZ2FyIG9zIGRhZG9zIGRhIGdyaWQsIHNlIHRlbW9zIHVtIHZhbG9yIHNlbGVjaW9uYWRvIG1hcyBzZW0gZGlzcGxheVZhbHVlLFxuICAgICAgICAvLyB0ZW50YXIgZW5jb250cmFyIG8gaXRlbSBub3MgZGFkb3MgY2FycmVnYWRvc1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiAhdGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5maWx0ZXJlZERhdGEuZmluZChpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5mb3JtYXREaXNwbGF5VmFsdWUoaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKF9lcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSAwO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyB2YWx1ZSBjYW4gYmUgYSBmdWxsIG9iamVjdCBvciBqdXN0IGFuIElEXG4gICAgY29uc3QgdmFsdWVJZCA9IHR5cGVvZiB0aGlzLnZhbHVlID09PSAnb2JqZWN0JyA/IHRoaXMudmFsdWVbdGhpcy52YWx1ZUZpZWxkXSA6IHRoaXMudmFsdWU7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQoaSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT09IHZhbHVlSWQpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIEl0ZW0gbm90IGluIGN1cnJlbnQgcGFnZSBidXQgd2UgaGF2ZSB0aGUgZnVsbCBvYmplY3QgZnJvbSBhdXRvY29tcGxldGVcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd0xvb2t1cERpYWxvZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBzZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBzZXQgdGhlIGZ1bGwgb2JqZWN0LCBub3QganVzdCB0aGUgSURcbiAgICB0aGlzLnNldFZhbHVlKGl0ZW0pO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5mb3JtYXREaXNwbGF5VmFsdWUoaXRlbSk7XG4gICAgdGhpcy5zaG93TG9va3VwRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBvblJvd1NlbGVjdChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RJdGVtKGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgdGhpcy5hdXRvY29tcGxldGVUZXh0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZShpdGVtOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrZXkpID0+IG9iaj8uW2tleV0sIGl0ZW0pIHx8ICcnO1xuICB9XG59XG4iXX0=
|