@tolle_/tolle-ui 18.2.13 → 18.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { Component, Input, forwardRef, inject, ViewChild, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';
1
+ import { Component, Input, forwardRef, inject, ViewChild, ChangeDetectorRef, Output, EventEmitter, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
4
  import { DomSanitizer } from '@angular/platform-browser';
@@ -26,6 +26,7 @@ export class CountrySelectorComponent {
26
26
  showName = true;
27
27
  onSelect = new EventEmitter();
28
28
  popover;
29
+ searchInput;
29
30
  countryCodesService = inject(CountryCodesService);
30
31
  sanitizer = inject(DomSanitizer);
31
32
  cdr = inject(ChangeDetectorRef);
@@ -52,20 +53,20 @@ export class CountrySelectorComponent {
52
53
  'focus:ring-4',
53
54
  'focus:ring-ring/30',
54
55
  'focus:ring-offset-0',
55
- 'focus:border-primary/80'
56
+ 'focus:border-primary/80',
56
57
  ], !(this.readonly || this.disabled) && 'hover:border-accent', this.error && [
57
58
  'border-destructive',
58
59
  !(this.readonly || this.disabled) && [
59
60
  'focus:border-destructive/80',
60
- 'focus:ring-destructive/30'
61
- ]
61
+ 'focus:ring-destructive/30',
62
+ ],
62
63
  ], this.disabled && 'cursor-not-allowed opacity-50 border-opacity-50', this.readonly && 'cursor-default border-dashed', this.class);
63
64
  }
64
65
  get computedLabelClass() {
65
- return cn("text-sm font-medium text-foreground leading-none transition-opacity duration-200", this.disabled && "opacity-50");
66
+ return cn('text-sm font-medium text-foreground leading-none transition-opacity duration-200', this.disabled && 'opacity-50');
66
67
  }
67
68
  get iconClass() {
68
- return cn('ri-arrow-down-s-line text-muted-foreground ml-2 transition-transform duration-200', this.popover?.isOpen ? 'rotate-180' : '', (this.size === 'xs' || this.size === 'sm') ? 'text-[14px]' : 'text-[18px]', (this.disabled || this.readonly) && 'opacity-30');
69
+ return cn('ri-arrow-down-s-line text-muted-foreground ml-2 transition-transform duration-200', this.popover?.isOpen ? 'rotate-180' : '', this.size === 'xs' || this.size === 'sm' ? 'text-[14px]' : 'text-[18px]', (this.disabled || this.readonly) && 'opacity-30');
69
70
  }
70
71
  getItemClass(country) {
71
72
  const isSelected = this.selectedCountry?.isoAlpha2 === country.isoAlpha2;
@@ -89,11 +90,16 @@ export class CountrySelectorComponent {
89
90
  }
90
91
  getReturnValue(country) {
91
92
  switch (this.returnValue) {
92
- case 'object': return country;
93
- case 'isoAlpha2': return country.isoAlpha2;
94
- case 'dialCode': return country.dialCode;
95
- case 'name': return country.name;
96
- default: return country.isoAlpha2;
93
+ case 'object':
94
+ return country;
95
+ case 'isoAlpha2':
96
+ return country.isoAlpha2;
97
+ case 'dialCode':
98
+ return country.dialCode;
99
+ case 'name':
100
+ return country.name;
101
+ default:
102
+ return country.isoAlpha2;
97
103
  }
98
104
  }
99
105
  onFocus() {
@@ -103,6 +109,11 @@ export class CountrySelectorComponent {
103
109
  this.isFocused = false;
104
110
  this.onTouched();
105
111
  }
112
+ onPopoverOpen() {
113
+ setTimeout(() => {
114
+ this.searchInput?.nativeElement?.focus();
115
+ }, 0);
116
+ }
106
117
  onPopoverClose() {
107
118
  this.searchQuery = '';
108
119
  this.filterCountries('');
@@ -128,26 +139,33 @@ export class CountrySelectorComponent {
128
139
  }
129
140
  this.cdr.markForCheck();
130
141
  }
131
- registerOnChange(fn) { this.onChange = fn; }
132
- registerOnTouched(fn) { this.onTouched = fn; }
133
- setDisabledState(isDisabled) { this.disabled = isDisabled; }
142
+ registerOnChange(fn) {
143
+ this.onChange = fn;
144
+ }
145
+ registerOnTouched(fn) {
146
+ this.onTouched = fn;
147
+ }
148
+ setDisabledState(isDisabled) {
149
+ this.disabled = isDisabled;
150
+ }
134
151
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CountrySelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
135
152
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CountrySelectorComponent, isStandalone: true, selector: "tolle-country-selector", inputs: { id: "id", label: "label", hint: "hint", errorMessage: "errorMessage", error: "error", hideHintOnFocus: "hideHintOnFocus", placeholder: "placeholder", class: "class", disabled: "disabled", readonly: "readonly", size: "size", defaultCountryCode: "defaultCountryCode", returnValue: "returnValue", showName: "showName" }, outputs: { onSelect: "onSelect" }, providers: [
136
153
  {
137
154
  provide: NG_VALUE_ACCESSOR,
138
155
  useExisting: forwardRef(() => CountrySelectorComponent),
139
- multi: true
140
- }
141
- ], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }], ngImport: i0, template: `
142
- <div class="flex flex-col gap-1.5 w-full">
143
- <label
144
- *ngIf="label"
145
- [for]="id"
146
- [class]="computedLabelClass">
156
+ multi: true,
157
+ },
158
+ ], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: `
159
+ <div class="flex w-full flex-col gap-1.5">
160
+ <label *ngIf="label" [for]="id" [class]="computedLabelClass">
147
161
  {{ label }}
148
162
  </label>
149
163
 
150
- <tolle-popover #popover [placement]="'bottom-start'" (onClose)="onPopoverClose()">
164
+ <tolle-popover
165
+ #popover
166
+ [placement]="'bottom-start'"
167
+ (onOpen)="onPopoverOpen()"
168
+ (onClose)="onPopoverClose()">
151
169
  <div trigger class="w-full">
152
170
  <button
153
171
  type="button"
@@ -157,19 +175,17 @@ export class CountrySelectorComponent {
157
175
  (blur)="onBlur()"
158
176
  (focus)="onFocus()"
159
177
  [attr.aria-invalid]="error"
160
- [attr.aria-describedby]="error && errorMessage ? id + '-error' : null"
161
- >
178
+ [attr.aria-describedby]="error && errorMessage ? id + '-error' : null">
162
179
  <div class="flex items-center gap-2 truncate">
163
180
  <img
164
181
  *ngIf="selectedCountry"
165
182
  [src]="getFlagUrl(selectedCountry.flag)"
166
- class="h-4 w-6 rounded-sm border border-border object-cover flex-shrink-0"
167
- [alt]="selectedCountry.name"
168
- />
183
+ class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
184
+ [alt]="selectedCountry.name" />
169
185
  <span *ngIf="selectedCountry && showName" class="truncate font-medium">
170
186
  {{ selectedCountry.name }}
171
187
  </span>
172
- <span *ngIf="!selectedCountry" class="text-muted-foreground truncate">
188
+ <span *ngIf="!selectedCountry" class="truncate text-muted-foreground">
173
189
  {{ placeholder }}
174
190
  </span>
175
191
  </div>
@@ -177,16 +193,16 @@ export class CountrySelectorComponent {
177
193
  </button>
178
194
  </div>
179
195
 
180
- <div class="flex flex-col bg-popover rounded-md border border-border shadow-md min-w-[300px] max-w-[400px] overflow-hidden">
181
- <div class="p-2 border-b border-border bg-popover shadow-sm sticky top-0 z-10">
196
+ <div
197
+ class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover shadow-md">
198
+ <div class="sticky top-0 z-10 border-b border-border bg-popover p-2 shadow-sm">
182
199
  <tolle-input
183
200
  size="sm"
184
201
  placeholder="Search country..."
185
202
  [(ngModel)]="searchQuery"
186
203
  (ngModelChange)="filterCountries($event)"
187
204
  class="w-full"
188
- #searchInput
189
- >
205
+ #searchInput>
190
206
  <i prefix class="ri-search-line"></i>
191
207
  </tolle-input>
192
208
  </div>
@@ -195,20 +211,22 @@ export class CountrySelectorComponent {
195
211
  <div
196
212
  *ngFor="let country of shadowCountries"
197
213
  (click)="selectCountry(country)"
198
- [class]="getItemClass(country)"
199
- >
200
- <div class="flex items-center gap-3 w-full">
214
+ [class]="getItemClass(country)">
215
+ <div class="flex w-full items-center gap-3">
201
216
  <img
202
217
  [src]="getFlagUrl(country.flag)"
203
- class="h-4 w-6 rounded-sm border border-border object-cover flex-shrink-0"
204
- [alt]="country.name"
205
- />
206
- <span class="text-sm flex-1 truncate">{{ country.name }}</span>
218
+ class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
219
+ [alt]="country.name" />
220
+ <span class="flex-1 truncate text-sm">{{ country.name }}</span>
207
221
  <span class="text-xs text-muted-foreground">{{ country.dialCode }}</span>
208
- <i *ngIf="selectedCountry?.isoAlpha2 === country.isoAlpha2" class="ri-check-line text-primary"></i>
222
+ <i
223
+ *ngIf="selectedCountry?.isoAlpha2 === country.isoAlpha2"
224
+ class="ri-check-line text-primary"></i>
209
225
  </div>
210
226
  </div>
211
- <div *ngIf="shadowCountries.length === 0" class="py-6 text-center text-sm text-muted-foreground">
227
+ <div
228
+ *ngIf="shadowCountries.length === 0"
229
+ class="py-6 text-center text-sm text-muted-foreground">
212
230
  No countries found.
213
231
  </div>
214
232
  </div>
@@ -218,16 +236,14 @@ export class CountrySelectorComponent {
218
236
  <ng-container *ngIf="!disabled">
219
237
  <p
220
238
  *ngIf="hint && !error"
221
- class="text-xs text-muted-foreground px-1 transition-opacity duration-200"
222
- [class.opacity-0]="isFocused && hideHintOnFocus"
223
- >
239
+ class="px-1 text-xs text-muted-foreground transition-opacity duration-200"
240
+ [class.opacity-0]="isFocused && hideHintOnFocus">
224
241
  {{ hint }}
225
242
  </p>
226
243
  <p
227
244
  *ngIf="error && errorMessage"
228
245
  [id]="id + '-error'"
229
- class="text-xs text-destructive px-1 font-medium"
230
- >
246
+ class="px-1 text-xs font-medium text-destructive">
231
247
  {{ errorMessage }}
232
248
  </p>
233
249
  </ng-container>
@@ -244,19 +260,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
244
260
  {
245
261
  provide: NG_VALUE_ACCESSOR,
246
262
  useExisting: forwardRef(() => CountrySelectorComponent),
247
- multi: true
248
- }
263
+ multi: true,
264
+ },
249
265
  ],
250
266
  template: `
251
- <div class="flex flex-col gap-1.5 w-full">
252
- <label
253
- *ngIf="label"
254
- [for]="id"
255
- [class]="computedLabelClass">
267
+ <div class="flex w-full flex-col gap-1.5">
268
+ <label *ngIf="label" [for]="id" [class]="computedLabelClass">
256
269
  {{ label }}
257
270
  </label>
258
271
 
259
- <tolle-popover #popover [placement]="'bottom-start'" (onClose)="onPopoverClose()">
272
+ <tolle-popover
273
+ #popover
274
+ [placement]="'bottom-start'"
275
+ (onOpen)="onPopoverOpen()"
276
+ (onClose)="onPopoverClose()">
260
277
  <div trigger class="w-full">
261
278
  <button
262
279
  type="button"
@@ -266,19 +283,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
266
283
  (blur)="onBlur()"
267
284
  (focus)="onFocus()"
268
285
  [attr.aria-invalid]="error"
269
- [attr.aria-describedby]="error && errorMessage ? id + '-error' : null"
270
- >
286
+ [attr.aria-describedby]="error && errorMessage ? id + '-error' : null">
271
287
  <div class="flex items-center gap-2 truncate">
272
288
  <img
273
289
  *ngIf="selectedCountry"
274
290
  [src]="getFlagUrl(selectedCountry.flag)"
275
- class="h-4 w-6 rounded-sm border border-border object-cover flex-shrink-0"
276
- [alt]="selectedCountry.name"
277
- />
291
+ class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
292
+ [alt]="selectedCountry.name" />
278
293
  <span *ngIf="selectedCountry && showName" class="truncate font-medium">
279
294
  {{ selectedCountry.name }}
280
295
  </span>
281
- <span *ngIf="!selectedCountry" class="text-muted-foreground truncate">
296
+ <span *ngIf="!selectedCountry" class="truncate text-muted-foreground">
282
297
  {{ placeholder }}
283
298
  </span>
284
299
  </div>
@@ -286,16 +301,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
286
301
  </button>
287
302
  </div>
288
303
 
289
- <div class="flex flex-col bg-popover rounded-md border border-border shadow-md min-w-[300px] max-w-[400px] overflow-hidden">
290
- <div class="p-2 border-b border-border bg-popover shadow-sm sticky top-0 z-10">
304
+ <div
305
+ class="flex min-w-[300px] max-w-[400px] flex-col overflow-hidden rounded-md border border-border bg-popover shadow-md">
306
+ <div class="sticky top-0 z-10 border-b border-border bg-popover p-2 shadow-sm">
291
307
  <tolle-input
292
308
  size="sm"
293
309
  placeholder="Search country..."
294
310
  [(ngModel)]="searchQuery"
295
311
  (ngModelChange)="filterCountries($event)"
296
312
  class="w-full"
297
- #searchInput
298
- >
313
+ #searchInput>
299
314
  <i prefix class="ri-search-line"></i>
300
315
  </tolle-input>
301
316
  </div>
@@ -304,20 +319,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
304
319
  <div
305
320
  *ngFor="let country of shadowCountries"
306
321
  (click)="selectCountry(country)"
307
- [class]="getItemClass(country)"
308
- >
309
- <div class="flex items-center gap-3 w-full">
322
+ [class]="getItemClass(country)">
323
+ <div class="flex w-full items-center gap-3">
310
324
  <img
311
325
  [src]="getFlagUrl(country.flag)"
312
- class="h-4 w-6 rounded-sm border border-border object-cover flex-shrink-0"
313
- [alt]="country.name"
314
- />
315
- <span class="text-sm flex-1 truncate">{{ country.name }}</span>
326
+ class="h-4 w-6 flex-shrink-0 rounded-sm border border-border object-cover"
327
+ [alt]="country.name" />
328
+ <span class="flex-1 truncate text-sm">{{ country.name }}</span>
316
329
  <span class="text-xs text-muted-foreground">{{ country.dialCode }}</span>
317
- <i *ngIf="selectedCountry?.isoAlpha2 === country.isoAlpha2" class="ri-check-line text-primary"></i>
330
+ <i
331
+ *ngIf="selectedCountry?.isoAlpha2 === country.isoAlpha2"
332
+ class="ri-check-line text-primary"></i>
318
333
  </div>
319
334
  </div>
320
- <div *ngIf="shadowCountries.length === 0" class="py-6 text-center text-sm text-muted-foreground">
335
+ <div
336
+ *ngIf="shadowCountries.length === 0"
337
+ class="py-6 text-center text-sm text-muted-foreground">
321
338
  No countries found.
322
339
  </div>
323
340
  </div>
@@ -327,21 +344,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
327
344
  <ng-container *ngIf="!disabled">
328
345
  <p
329
346
  *ngIf="hint && !error"
330
- class="text-xs text-muted-foreground px-1 transition-opacity duration-200"
331
- [class.opacity-0]="isFocused && hideHintOnFocus"
332
- >
347
+ class="px-1 text-xs text-muted-foreground transition-opacity duration-200"
348
+ [class.opacity-0]="isFocused && hideHintOnFocus">
333
349
  {{ hint }}
334
350
  </p>
335
351
  <p
336
352
  *ngIf="error && errorMessage"
337
353
  [id]="id + '-error'"
338
- class="text-xs text-destructive px-1 font-medium"
339
- >
354
+ class="px-1 text-xs font-medium text-destructive">
340
355
  {{ errorMessage }}
341
356
  </p>
342
357
  </ng-container>
343
358
  </div>
344
- `
359
+ `,
345
360
  }]
346
361
  }], propDecorators: { id: [{
347
362
  type: Input
@@ -376,5 +391,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
376
391
  }], popover: [{
377
392
  type: ViewChild,
378
393
  args: ['popover']
394
+ }], searchInput: [{
395
+ type: ViewChild,
396
+ args: ['searchInput']
379
397
  }] } });
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUE2R2hDLE1BQU0sT0FBTyx3QkFBd0I7SUFDMUIsRUFBRSxHQUFHLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsV0FBVyxHQUFHLGdCQUFnQixDQUFDO0lBQy9C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QUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWUsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ291bnRyeUNvZGVzU2VydmljZSB9IGZyb20gJy4vY291bnRyeS1jb2Rlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtY291bnRyeS1zZWxlY3RvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBQb3BvdmVyQ29tcG9uZW50LCBJbnB1dENvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ291bnRyeVNlbGVjdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xLjUgdy1mdWxsXCI+XG4gICAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJsYWJlbFwiXG4gICAgICAgIFtmb3JdPVwiaWRcIlxuICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRMYWJlbENsYXNzXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8dG9sbGUtcG9wb3ZlciAjcG9wb3ZlciBbcGxhY2VtZW50XT1cIidib3R0b20tc3RhcnQnXCIgKG9uQ2xvc2UpPVwib25Qb3BvdmVyQ2xvc2UoKVwiPlxuICAgICAgICA8ZGl2IHRyaWdnZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkVHJpZ2dlckNsYXNzXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gaWQgKyAnLWVycm9yJyA6IG51bGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnlcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChzZWxlY3RlZENvdW50cnkuZmxhZylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiByb3VuZGVkLXNtIGJvcmRlciBib3JkZXItYm9yZGVyIG9iamVjdC1jb3ZlciBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cInNlbGVjdGVkQ291bnRyeS5uYW1lXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZENvdW50cnkgJiYgc2hvd05hbWVcIiBjbGFzcz1cInRydW5jYXRlIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRDb3VudHJ5Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZENvdW50cnlcIiBjbGFzcz1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgYmctcG9wb3ZlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYm9yZGVyIHNoYWRvdy1tZCBtaW4tdy1bMzAwcHhdIG1heC13LVs0MDBweF0gb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXItYiBib3JkZXItYm9yZGVyIGJnLXBvcG92ZXIgc2hhZG93LXNtIHN0aWNreSB0b3AtMCB6LTEwXCI+XG4gICAgICAgICAgICA8dG9sbGUtaW5wdXRcbiAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY291bnRyeS4uLlwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDb3VudHJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtaC1bMzAwcHhdIG92ZXJmbG93LXktYXV0byBwLTFcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvdW50cnkgb2Ygc2hhZG93Q291bnRyaWVzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvdW50cnkoY291bnRyeSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0SXRlbUNsYXNzKGNvdW50cnkpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChjb3VudHJ5LmZsYWcpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiByb3VuZGVkLXNtIGJvcmRlciBib3JkZXItYm9yZGVyIG9iamVjdC1jb3ZlciBmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiY291bnRyeS5uYW1lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmbGV4LTEgdHJ1bmNhdGVcIj57eyBjb3VudHJ5Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IGNvdW50cnkuZGlhbENvZGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJzZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTJcIiBjbGFzcz1cInJpLWNoZWNrLWxpbmUgdGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNoYWRvd0NvdW50cmllcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgTm8gY291bnRyaWVzIGZvdW5kLlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90b2xsZS1wb3BvdmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJoaW50ICYmICFlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0xIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNGb2N1c2VkICYmIGhpZGVIaW50T25Gb2N1c1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBoaW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImVycm9yICYmIGVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1lcnJvcidcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB0ZXh0LWRlc3RydWN0aXZlIHB4LTEgZm9udC1tZWRpdW1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICAgIDwvcD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIENvdW50cnlTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBpZCA9IGBjb3VudHJ5LXNlbGVjdG9yLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVIaW50T25Gb2N1cyA9IHRydWU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBjb3VudHJ5JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBkZWZhdWx0Q291bnRyeUNvZGUgPSAnR0gnO1xuICBASW5wdXQoKSByZXR1cm5WYWx1ZTogJ29iamVjdCcgfCAnaXNvQWxwaGEyJyB8ICdkaWFsQ29kZScgfCAnbmFtZScgPSAnaXNvQWxwaGEyJztcbiAgQElucHV0KCkgc2hvd05hbWUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogUG9wb3ZlckNvbXBvbmVudDtcblxuICBwcml2YXRlIGNvdW50cnlDb2Rlc1NlcnZpY2UgPSBpbmplY3QoQ291bnRyeUNvZGVzU2VydmljZSk7XG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICB2YWx1ZTogYW55ID0gbnVsbDtcbiAgc2VsZWN0ZWRDb3VudHJ5OiBhbnkgPSBudWxsO1xuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBzaGFkb3dDb3VudHJpZXM6IGFueVtdID0gW107XG4gIGlzRm9jdXNlZCA9IGZhbHNlO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2hhZG93Q291bnRyaWVzID0gdGhpcy5jb3VudHJ5Q29kZXNTZXJ2aWNlLmNvdW50cmllcztcbiAgICBpZiAodGhpcy5kZWZhdWx0Q291bnRyeUNvZGUgJiYgIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5jb3VudHJ5Q29kZXNTZXJ2aWNlLmNvdW50cmllcy5maW5kKFxuICAgICAgICBjID0+IGMuaXNvQWxwaGEyID09PSB0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ291bnRyeSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRSZXR1cm5WYWx1ZSh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbXB1dGVkVHJpZ2dlckNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCcsXG4gICAgICAnYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgJ2JvcmRlci1pbnB1dCBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmICdoLTggcHgtMiB0ZXh0LXhzJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiAnaC05IHB4LTMgdGV4dC1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICdkZWZhdWx0JyAmJiAnaC0xMCBweC0zIHRleHQtc20nLFxuICAgICAgdGhpcy5zaXplID09PSAnbGcnICYmICdoLTExIHB4LTQgdGV4dC1iYXNlJyxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICdmb2N1czpvdXRsaW5lLW5vbmUnLFxuICAgICAgICAnZm9jdXM6cmluZy00JyxcbiAgICAgICAgJ2ZvY3VzOnJpbmctcmluZy8zMCcsXG4gICAgICAgICdmb2N1czpyaW5nLW9mZnNldC0wJyxcbiAgICAgICAgJ2ZvY3VzOmJvcmRlci1wcmltYXJ5LzgwJ1xuICAgICAgXSxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG4gICAgICB0aGlzLmVycm9yICYmIFtcbiAgICAgICAgJ2JvcmRlci1kZXN0cnVjdGl2ZScsXG4gICAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICAgJ2ZvY3VzOmJvcmRlci1kZXN0cnVjdGl2ZS84MCcsXG4gICAgICAgICAgJ2ZvY3VzOnJpbmctZGVzdHJ1Y3RpdmUvMzAnXG4gICAgICAgIF1cbiAgICAgIF0sXG4gICAgICB0aGlzLmRpc2FibGVkICYmICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCBib3JkZXItb3BhY2l0eS01MCcsXG4gICAgICB0aGlzLnJlYWRvbmx5ICYmICdjdXJzb3ItZGVmYXVsdCBib3JkZXItZGFzaGVkJyxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkTGFiZWxDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIGxlYWRpbmctbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwXCIsXG4gICAgICB0aGlzLmRpc2FibGVkICYmIFwib3BhY2l0eS01MFwiXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBtbC0yIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLnBvcG92ZXI/LmlzT3BlbiA/ICdyb3RhdGUtMTgwJyA6ICcnLFxuICAgICAgKHRoaXMuc2l6ZSA9PT0gJ3hzJyB8fCB0aGlzLnNpemUgPT09ICdzbScpID8gJ3RleHQtWzE0cHhdJyA6ICd0ZXh0LVsxOHB4XScsXG4gICAgICAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSAmJiAnb3BhY2l0eS0zMCdcbiAgICApO1xuICB9XG5cbiAgZ2V0SXRlbUNsYXNzKGNvdW50cnk6IGFueSkge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ291bnRyeT8uaXNvQWxwaGEyID09PSBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICByZXR1cm4gY24oXG4gICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTMgcHktMiBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgcm91bmRlZC1zbSB3LWZ1bGwnLFxuICAgICAgaXNTZWxlY3RlZCA/ICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcgOiAnaG92ZXI6YmctYWNjZW50LzUwIHRleHQtZm9yZWdyb3VuZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0RmxhZ1VybChmbGFnQmFzZTY0OiBzdHJpbmcpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICAnZGF0YTppbWFnZS8qO2Jhc2U2NCwnICsgZmxhZ0Jhc2U2NFxuICAgICk7XG4gIH1cblxuICBmaWx0ZXJDb3VudHJpZXMocXVlcnk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlciA9IChxdWVyeSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbHRlcihjID0+XG4gICAgICBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpIHx8XG4gICAgICBjLmRpYWxDb2RlLmluY2x1ZGVzKGZpbHRlcikgfHxcbiAgICAgIGMuaXNvQWxwaGEyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RDb3VudHJ5KGNvdW50cnk6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gY291bnRyeTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRSZXR1cm5WYWx1ZShjb3VudHJ5KTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25TZWxlY3QuZW1pdChjb3VudHJ5KTtcbiAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0dXJuVmFsdWUoY291bnRyeTogYW55KSB7XG4gICAgc3dpdGNoICh0aGlzLnJldHVyblZhbHVlKSB7XG4gICAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gY291bnRyeTtcbiAgICAgIGNhc2UgJ2lzb0FscGhhMic6IHJldHVybiBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICAgIGNhc2UgJ2RpYWxDb2RlJzogcmV0dXJuIGNvdW50cnkuZGlhbENvZGU7XG4gICAgICBjYXNlICduYW1lJzogcmV0dXJuIGNvdW50cnkubmFtZTtcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBjb3VudHJ5Lmlzb0FscGhhMjtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBvblBvcG92ZXJDbG9zZSgpIHtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5maWx0ZXJDb3VudHJpZXMoJycpO1xuICAgIHRoaXMub25CbHVyKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuY291bnRyeUNvZGVzU2VydmljZS5jb3VudHJpZXMuZmluZChjID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlLmlzb0FscGhhMjtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdpc29BbHBoYTInKSByZXR1cm4gYy5pc29BbHBoYTIgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ2RpYWxDb2RlJykgcmV0dXJuIGMuZGlhbENvZGUgPT09IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5yZXR1cm5WYWx1ZSA9PT0gJ25hbWUnKSByZXR1cm4gYy5uYW1lID09PSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHsgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7IH1cbn1cbiJdfQ==
398
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUE0R2hDLE1BQU0sT0FBTyx3QkFBd0I7SUFDMUIsRUFBRSxHQUFHLG9CQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsV0FBVyxHQUFHLGdCQUFnQixDQUFDO0lBQy9C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QXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWUsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUNNLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBDb3VudHJ5Q29kZXNTZXJ2aWNlIH0gZnJvbSAnLi9jb3VudHJ5LWNvZGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2lucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1jb3VudHJ5LXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFBvcG92ZXJDb21wb25lbnQsIElucHV0Q29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb3VudHJ5U2VsZWN0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTEuNVwiPlxuICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCIgW2NsYXNzXT1cImNvbXB1dGVkTGFiZWxDbGFzc1wiPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPHRvbGxlLXBvcG92ZXJcbiAgICAgICAgI3BvcG92ZXJcbiAgICAgICAgW3BsYWNlbWVudF09XCInYm90dG9tLXN0YXJ0J1wiXG4gICAgICAgIChvbk9wZW4pPVwib25Qb3BvdmVyT3BlbigpXCJcbiAgICAgICAgKG9uQ2xvc2UpPVwib25Qb3BvdmVyQ2xvc2UoKVwiPlxuICAgICAgICA8ZGl2IHRyaWdnZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkVHJpZ2dlckNsYXNzXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gaWQgKyAnLWVycm9yJyA6IG51bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnlcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0RmxhZ1VybChzZWxlY3RlZENvdW50cnkuZmxhZylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNiBmbGV4LXNocmluay0wIHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1ib3JkZXIgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cInNlbGVjdGVkQ291bnRyeS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZENvdW50cnkgJiYgc2hvd05hbWVcIiBjbGFzcz1cInRydW5jYXRlIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRDb3VudHJ5Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZENvdW50cnlcIiBjbGFzcz1cInRydW5jYXRlIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBtaW4tdy1bMzAwcHhdIG1heC13LVs0MDBweF0gZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctcG9wb3ZlciBzaGFkb3ctbWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5IHRvcC0wIHotMTAgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHAtMiBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDx0b2xsZS1pbnB1dFxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb3VudHJ5Li4uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNvdW50cmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAjc2VhcmNoSW5wdXQ+XG4gICAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC90b2xsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtaC1bMzAwcHhdIG92ZXJmbG93LXktYXV0byBwLTFcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvdW50cnkgb2Ygc2hhZG93Q291bnRyaWVzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENvdW50cnkoY291bnRyeSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0SXRlbUNsYXNzKGNvdW50cnkpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImdldEZsYWdVcmwoY291bnRyeS5mbGFnKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImgtNCB3LTYgZmxleC1zaHJpbmstMCByb3VuZGVkLXNtIGJvcmRlciBib3JkZXItYm9yZGVyIG9iamVjdC1jb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbYWx0XT1cImNvdW50cnkubmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LTEgdHJ1bmNhdGUgdGV4dC1zbVwiPnt7IGNvdW50cnkubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgY291bnRyeS5kaWFsQ29kZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvdW50cnk/Lmlzb0FscGhhMiA9PT0gY291bnRyeS5pc29BbHBoYTJcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyaS1jaGVjay1saW5lIHRleHQtcHJpbWFyeVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaGFkb3dDb3VudHJpZXMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgIE5vIGNvdW50cmllcyBmb3VuZC5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdG9sbGUtcG9wb3Zlcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaXNhYmxlZFwiPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwiaGludCAmJiAhZXJyb3JcIlxuICAgICAgICAgIGNsYXNzPVwicHgtMSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICBbY2xhc3Mub3BhY2l0eS0wXT1cImlzRm9jdXNlZCAmJiBoaWRlSGludE9uRm9jdXNcIj5cbiAgICAgICAgICB7eyBoaW50IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImVycm9yICYmIGVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1lcnJvcidcIlxuICAgICAgICAgIGNsYXNzPVwicHgtMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZGVzdHJ1Y3RpdmVcIj5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvdW50cnlTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBpZCA9IGBjb3VudHJ5LXNlbGVjdG9yLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVIaW50T25Gb2N1cyA9IHRydWU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBjb3VudHJ5JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBkZWZhdWx0Q291bnRyeUNvZGUgPSAnR0gnO1xuICBASW5wdXQoKSByZXR1cm5WYWx1ZTogJ29iamVjdCcgfCAnaXNvQWxwaGEyJyB8ICdkaWFsQ29kZScgfCAnbmFtZScgPSAnaXNvQWxwaGEyJztcbiAgQElucHV0KCkgc2hvd05hbWUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogUG9wb3ZlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBjb3VudHJ5Q29kZXNTZXJ2aWNlID0gaW5qZWN0KENvdW50cnlDb2Rlc1NlcnZpY2UpO1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgdmFsdWU6IGFueSA9IG51bGw7XG4gIHNlbGVjdGVkQ291bnRyeTogYW55ID0gbnVsbDtcbiAgc2VhcmNoUXVlcnkgPSAnJztcbiAgc2hhZG93Q291bnRyaWVzOiBhbnlbXSA9IFtdO1xuICBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzO1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb3VudHJ5Q29kZSAmJiAhdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoXG4gICAgICAgIGMgPT4gYy5pc29BbHBoYTIgPT09IHRoaXMuZGVmYXVsdENvdW50cnlDb2RlXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFJldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRUcmlnZ2VyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ2ZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1tZCBib3JkZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwJyxcbiAgICAgICdiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZCcsXG4gICAgICAnYm9yZGVyLWlucHV0IHNoYWRvdy1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgJiYgJ2gtOCBweC0yIHRleHQteHMnLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmICdoLTkgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmICdoLTEwIHB4LTMgdGV4dC1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgJ2gtMTEgcHgtNCB0ZXh0LWJhc2UnLFxuICAgICAgISh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpICYmIFtcbiAgICAgICAgJ2ZvY3VzOm91dGxpbmUtbm9uZScsXG4gICAgICAgICdmb2N1czpyaW5nLTQnLFxuICAgICAgICAnZm9jdXM6cmluZy1yaW5nLzMwJyxcbiAgICAgICAgJ2ZvY3VzOnJpbmctb2Zmc2V0LTAnLFxuICAgICAgICAnZm9jdXM6Ym9yZGVyLXByaW1hcnkvODAnLFxuICAgICAgXSxcbiAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiAnaG92ZXI6Ym9yZGVyLWFjY2VudCcsXG4gICAgICB0aGlzLmVycm9yICYmIFtcbiAgICAgICAgJ2JvcmRlci1kZXN0cnVjdGl2ZScsXG4gICAgICAgICEodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSAmJiBbXG4gICAgICAgICAgJ2ZvY3VzOmJvcmRlci1kZXN0cnVjdGl2ZS84MCcsXG4gICAgICAgICAgJ2ZvY3VzOnJpbmctZGVzdHJ1Y3RpdmUvMzAnLFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgJ2N1cnNvci1ub3QtYWxsb3dlZCBvcGFjaXR5LTUwIGJvcmRlci1vcGFjaXR5LTUwJyxcbiAgICAgIHRoaXMucmVhZG9ubHkgJiYgJ2N1cnNvci1kZWZhdWx0IGJvcmRlci1kYXNoZWQnLFxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRMYWJlbENsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICd0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBsZWFkaW5nLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCcsXG4gICAgICB0aGlzLmRpc2FibGVkICYmICdvcGFjaXR5LTUwJ1xuICAgICk7XG4gIH1cblxuICBnZXQgaWNvbkNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgICdyaS1hcnJvdy1kb3duLXMtbGluZSB0ZXh0LW11dGVkLWZvcmVncm91bmQgbWwtMiB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0yMDAnLFxuICAgICAgdGhpcy5wb3BvdmVyPy5pc09wZW4gPyAncm90YXRlLTE4MCcgOiAnJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyB8fCB0aGlzLnNpemUgPT09ICdzbScgPyAndGV4dC1bMTRweF0nIDogJ3RleHQtWzE4cHhdJyxcbiAgICAgICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpICYmICdvcGFjaXR5LTMwJ1xuICAgICk7XG4gIH1cblxuICBnZXRJdGVtQ2xhc3MoY291bnRyeTogYW55KSB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5pc29BbHBoYTIgPT09IGNvdW50cnkuaXNvQWxwaGEyO1xuICAgIHJldHVybiBjbihcbiAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMyBweS0yIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCByb3VuZGVkLXNtIHctZnVsbCcsXG4gICAgICBpc1NlbGVjdGVkID8gJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyA6ICdob3ZlcjpiZy1hY2NlbnQvNTAgdGV4dC1mb3JlZ3JvdW5kJ1xuICAgICk7XG4gIH1cblxuICBnZXRGbGFnVXJsKGZsYWdCYXNlNjQ6IHN0cmluZyk6IFNhZmVSZXNvdXJjZVVybCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgnZGF0YTppbWFnZS8qO2Jhc2U2NCwnICsgZmxhZ0Jhc2U2NCk7XG4gIH1cblxuICBmaWx0ZXJDb3VudHJpZXMocXVlcnk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlciA9IChxdWVyeSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdGhpcy5zaGFkb3dDb3VudHJpZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbHRlcihcbiAgICAgIGMgPT5cbiAgICAgICAgYy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKSB8fFxuICAgICAgICBjLmRpYWxDb2RlLmluY2x1ZGVzKGZpbHRlcikgfHxcbiAgICAgICAgYy5pc29BbHBoYTIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdENvdW50cnkoY291bnRyeTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBjb3VudHJ5O1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldFJldHVyblZhbHVlKGNvdW50cnkpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vblNlbGVjdC5lbWl0KGNvdW50cnkpO1xuICAgIHRoaXMucG9wb3Zlci5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXR1cm5WYWx1ZShjb3VudHJ5OiBhbnkpIHtcbiAgICBzd2l0Y2ggKHRoaXMucmV0dXJuVmFsdWUpIHtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiBjb3VudHJ5O1xuICAgICAgY2FzZSAnaXNvQWxwaGEyJzpcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuaXNvQWxwaGEyO1xuICAgICAgY2FzZSAnZGlhbENvZGUnOlxuICAgICAgICByZXR1cm4gY291bnRyeS5kaWFsQ29kZTtcbiAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICByZXR1cm4gY291bnRyeS5uYW1lO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuaXNvQWxwaGEyO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIG9uUG9wb3Zlck9wZW4oKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgb25Qb3BvdmVyQ2xvc2UoKSB7XG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgIHRoaXMuZmlsdGVyQ291bnRyaWVzKCcnKTtcbiAgICB0aGlzLm9uQmx1cigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB0aGlzLmNvdW50cnlDb2Rlc1NlcnZpY2UuY291bnRyaWVzLmZpbmQoYyA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZS5pc29BbHBoYTI7XG4gICAgICAgIGlmICh0aGlzLnJldHVyblZhbHVlID09PSAnaXNvQWxwaGEyJykgcmV0dXJuIGMuaXNvQWxwaGEyID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICdkaWFsQ29kZScpIHJldHVybiBjLmRpYWxDb2RlID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucmV0dXJuVmFsdWUgPT09ICduYW1lJykgcmV0dXJuIGMubmFtZSA9PT0gdmFsdWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iXX0=