@yuuvis/app-drive 0.7.4 → 0.9.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.
Files changed (30) hide show
  1. package/esm2022/lib/actions/updateContent/update.content.action.mjs +5 -2
  2. package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs +2 -2
  3. package/esm2022/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.mjs +343 -0
  4. package/esm2022/lib/components/drive-search/drive-search.component.mjs +83 -0
  5. package/esm2022/lib/components/index.mjs +2 -2
  6. package/esm2022/lib/components/search-filter/search-filter.component.mjs +14 -330
  7. package/esm2022/lib/components/sort/sort.component.mjs +7 -6
  8. package/esm2022/lib/drive.icons.mjs +5 -2
  9. package/esm2022/lib/pages/files/files.component.mjs +31 -26
  10. package/esm2022/lib/pages/object/object.component.mjs +14 -6
  11. package/esm2022/lib/services/drive/drive.interface.mjs +1 -1
  12. package/esm2022/lib/services/drive/drive.service.mjs +9 -4
  13. package/fesm2022/yuuvis-app-drive.mjs +507 -440
  14. package/fesm2022/yuuvis-app-drive.mjs.map +1 -1
  15. package/lib/assets/i18n/de.json +100 -0
  16. package/lib/assets/i18n/en.json +100 -0
  17. package/lib/assets/yuvManifest.json +15 -0
  18. package/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.d.ts +52 -0
  19. package/lib/components/drive-search/drive-search.component.d.ts +21 -0
  20. package/lib/components/index.d.ts +1 -0
  21. package/lib/components/search-filter/search-filter.component.d.ts +0 -2
  22. package/lib/container/drive/drive.component.d.ts +3 -0
  23. package/lib/drive.icons.d.ts +3 -0
  24. package/lib/pages/files/files.component.d.ts +10 -7
  25. package/lib/pages/object/object.component.d.ts +2 -1
  26. package/lib/services/drive/drive.interface.d.ts +1 -0
  27. package/lib/services/drive/drive.service.d.ts +1 -1
  28. package/package.json +2 -2
  29. package/esm2022/lib/components/search-filter/date-range-picker/date-range-picker.component.mjs +0 -38
  30. package/lib/components/search-filter/date-range-picker/date-range-picker.component.d.ts +0 -13
@@ -3,12 +3,11 @@ import { Component, inject, input, output, signal } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
5
5
  import { TranslateModule, TranslateService } from '@ngx-translate/core';
6
- import { BaseObjectTypeField, ContentStreamField, LocaleDatePipe, Operator, OperatorLabel } from '@yuuvis/client-core';
6
+ import { BaseObjectTypeField, ContentStreamField, Operator, SearchService } from '@yuuvis/client-core';
7
+ import { RangeSelectDateComponent, RangeSelectFilesizeComponent } from '@yuuvis/client-framework/forms';
7
8
  import { ShellService } from '@yuuvis/client-shell-core';
8
9
  import { YvcDragScrollModule } from '@yuuvis/components/drag-scroll';
9
10
  import { YvcDropdownModule } from '@yuuvis/components/dropdown';
10
- import { YvcOverlayService } from '@yuuvis/components/overlay';
11
- import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';
12
11
  import * as i0 from "@angular/core";
13
12
  import * as i1 from "@yuuvis/components/dropdown";
14
13
  import * as i2 from "@yuuvis/client-core";
@@ -17,21 +16,16 @@ import * as i4 from "@yuuvis/components/drag-scroll";
17
16
  export class SearchFilterComponent {
18
17
  #shell;
19
18
  #fb;
20
- #overlay;
21
- #CREATED_CUSTOM;
19
+ #search;
22
20
  #flavors;
23
- #customDateRange;
24
21
  constructor() {
25
22
  this.#shell = inject(ShellService);
26
23
  this.#fb = inject(FormBuilder);
27
- this.#overlay = inject(YvcOverlayService);
28
- this.#CREATED_CUSTOM = 'custom';
24
+ this.#search = inject(SearchService);
29
25
  this.translate = inject(TranslateService);
30
26
  this.ANY_OPTION = 'any';
31
27
  this.#flavors = this.#shell.getObjectFlavors();
32
28
  this.typeOptions = signal([]);
33
- this.dateOptions = signal([]);
34
- this.sizeOptions = signal([]);
35
29
  this.query = input(null);
36
30
  this.queryChange = output();
37
31
  this.filtersActive = signal(false);
@@ -43,57 +37,6 @@ export class SearchFilterComponent {
43
37
  this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());
44
38
  this.#setupOptions();
45
39
  this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));
46
- // listen to created filter changes to catch custom date range
47
- this.filterForm
48
- .get('created')
49
- ?.valueChanges.pipe(takeUntilDestroyed())
50
- .subscribe((v) => {
51
- if (v === this.#CREATED_CUSTOM) {
52
- // open date range picker
53
- console.log(this.#customDateRange);
54
- const o = this.#overlay.open(DateRangePickerComponent, {
55
- range: this.#customDateRange
56
- });
57
- o.afterClosed$.subscribe((res) => {
58
- this.#customDateRange = res.data;
59
- if (!res.data) {
60
- this.filterForm.get('created')?.patchValue(this.ANY_OPTION);
61
- this.#setupDateOptions();
62
- }
63
- else {
64
- this.#onFormValueChange(this.filterForm.value);
65
- this.#setupDateOptions(this.#customDateRangeToString());
66
- setTimeout(() => {
67
- this.filterForm.patchValue({
68
- created: this.#CREATED_CUSTOM
69
- }, {
70
- emitEvent: false
71
- });
72
- });
73
- }
74
- });
75
- }
76
- });
77
- }
78
- #customDateRangeToString() {
79
- if (!this.#customDateRange)
80
- return undefined;
81
- const dp = new LocaleDatePipe(this.translate);
82
- switch (this.#customDateRange.operator) {
83
- case Operator.EQUAL: {
84
- return dp.transform(this.#customDateRange.firstValue, 'shortDate');
85
- }
86
- case Operator.GREATER_OR_EQUAL: {
87
- return `${OperatorLabel.GREATER_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
88
- }
89
- case Operator.LESS_OR_EQUAL: {
90
- return `${OperatorLabel.LESS_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
91
- }
92
- case Operator.INTERVAL_INCLUDE_BOTH: {
93
- return `${dp.transform(this.#customDateRange.firstValue, 'shortDate')} ${OperatorLabel.INTERVAL_INCLUDE_BOTH} ${dp.transform(this.#customDateRange.secondValue, 'shortDate')}`;
94
- }
95
- }
96
- return undefined;
97
40
  }
98
41
  reset() {
99
42
  const q = this.query();
@@ -103,13 +46,6 @@ export class SearchFilterComponent {
103
46
  }
104
47
  }
105
48
  #onFormValueChange(v) {
106
- // do not create a new query if custom date range is selected but not set
107
- if (v.created === this.#CREATED_CUSTOM && !this.#customDateRange)
108
- return;
109
- if (v.created !== this.#CREATED_CUSTOM) {
110
- this.#customDateRange = undefined;
111
- this.#setupDateOptions();
112
- }
113
49
  const updatedQuery = this.#applyFilters(v);
114
50
  this.queryChange.emit(updatedQuery);
115
51
  this.filtersActive.set(!!updatedQuery.filters && updatedQuery.filters.length > 0);
@@ -125,19 +61,17 @@ export class SearchFilterComponent {
125
61
  if (typeFilter)
126
62
  updatedQuery.filters.push(typeFilter);
127
63
  // file size filter
128
- const sizeFilter = this.#toSizeFilter(v.size);
64
+ const sizeFilter = v.size !== this.ANY_OPTION ? this.#toSizeFilter(v.size) : undefined;
129
65
  if (sizeFilter)
130
66
  updatedQuery.filters.push(sizeFilter);
131
67
  // creation date filter
132
- const dateFilter = this.#toDateFilter(v.created);
68
+ const dateFilter = v.created !== this.ANY_OPTION ? this.#toDateFilter(v.created) : undefined;
133
69
  if (dateFilter)
134
70
  updatedQuery.filters.push(dateFilter);
135
71
  return updatedQuery;
136
72
  }
137
73
  #setupOptions() {
138
74
  this.#setupTypeOptions();
139
- this.#setupDateOptions();
140
- this.#setupSizeOptions();
141
75
  }
142
76
  #setupTypeOptions() {
143
77
  this.typeOptions.set([
@@ -151,264 +85,11 @@ export class SearchFilterComponent {
151
85
  }))
152
86
  ]);
153
87
  }
154
- #setupDateOptions(custom) {
155
- this.dateOptions.set([
156
- ...[
157
- {
158
- label: this.translate.instant('yuv.app.drive.search.filter.option.date.any'),
159
- value: this.ANY_OPTION
160
- },
161
- {
162
- label: this.translate.instant('yuv.app.drive.search.filter.option.date.today'),
163
- value: 'today'
164
- },
165
- {
166
- label: this.translate.instant('yuv.app.drive.search.filter.option.date.yesterday'),
167
- value: 'yesterday'
168
- },
169
- {
170
- label: this.translate.instant('yuv.app.drive.search.filter.option.date.thisweek'),
171
- value: 'thisweek'
172
- },
173
- // {
174
- // label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastweek'),
175
- // value: 'lastweek'
176
- // },
177
- {
178
- label: this.translate.instant('yuv.app.drive.search.filter.option.date.thismonth'),
179
- value: 'thismonth'
180
- },
181
- // {
182
- // label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastmonth'),
183
- // value: 'lastmonth'
184
- // },
185
- {
186
- label: this.translate.instant('yuv.app.drive.search.filter.option.date.thisyear'),
187
- value: 'thisyear'
188
- },
189
- // {
190
- // label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastyear'),
191
- // value: 'lastyear'
192
- // },
193
- {
194
- label: custom || this.translate.instant('yuv.app.drive.search.filter.option.date.custom'),
195
- value: this.#CREATED_CUSTOM
196
- }
197
- ]
198
- ]);
199
- }
200
- #setupSizeOptions() {
201
- this.sizeOptions.set([
202
- {
203
- label: this.translate.instant('yuv.app.drive.search.filter.option.size.any'),
204
- value: this.ANY_OPTION
205
- },
206
- {
207
- label: this.translate.instant('yuv.app.drive.search.filter.option.size.small'),
208
- value: 's'
209
- },
210
- {
211
- label: this.translate.instant('yuv.app.drive.search.filter.option.size.medium'),
212
- value: 'm'
213
- },
214
- {
215
- label: this.translate.instant('yuv.app.drive.search.filter.option.size.large'),
216
- value: 'l'
217
- },
218
- {
219
- label: this.translate.instant('yuv.app.drive.search.filter.option.size.verylarge'),
220
- value: 'xl'
221
- }
222
- ]);
223
- }
224
88
  #toDateFilter(value) {
225
- let dateFilter = undefined;
226
- switch (value) {
227
- case 'today': {
228
- dateFilter = {
229
- f: BaseObjectTypeField.CREATION_DATE,
230
- o: Operator.INTERVAL_INCLUDE_BOTH,
231
- v1: new Date().toISOString().split('T')[0] + 'T00:00:00.000',
232
- v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
233
- };
234
- break;
235
- }
236
- case 'yesterday': {
237
- const yesterday = new Date();
238
- yesterday.setDate(yesterday.getDate() - 1);
239
- dateFilter = {
240
- f: BaseObjectTypeField.CREATION_DATE,
241
- o: Operator.INTERVAL_INCLUDE_BOTH,
242
- v1: yesterday.toISOString().split('T')[0] + 'T00:00:00.000',
243
- v2: yesterday.toISOString().split('T')[0] + 'T23:59:59.000'
244
- };
245
- break;
246
- }
247
- case 'thisweek': {
248
- const firstDay = new Date();
249
- firstDay.setDate(firstDay.getDate() - firstDay.getDay());
250
- dateFilter = {
251
- f: BaseObjectTypeField.CREATION_DATE,
252
- o: Operator.INTERVAL_INCLUDE_BOTH,
253
- v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
254
- v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
255
- };
256
- break;
257
- }
258
- // case 'lastweek': {
259
- // const firstDay = new Date();
260
- // firstDay.setDate(firstDay.getDate() - firstDay.getDay() - 7);
261
- // const lastDay = new Date();
262
- // lastDay.setDate(lastDay.getDate() - lastDay.getDay() - 1);
263
- // dateFilter = {
264
- // f: BaseObjectTypeField.CREATION_DATE,
265
- // o: Operator.INTERVAL_INCLUDE_BOTH,
266
- // v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
267
- // v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
268
- // };
269
- // break;
270
- // }
271
- case 'thismonth': {
272
- const firstDay = new Date();
273
- firstDay.setDate(1);
274
- dateFilter = {
275
- f: BaseObjectTypeField.CREATION_DATE,
276
- o: Operator.INTERVAL_INCLUDE_BOTH,
277
- v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
278
- v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
279
- };
280
- break;
281
- }
282
- // case 'lastmonth': {
283
- // const firstDay = new Date();
284
- // firstDay.setDate(1);
285
- // firstDay.setMonth(firstDay.getMonth() - 1);
286
- // const lastDay = new Date();
287
- // lastDay.setDate(0);
288
- // dateFilter = {
289
- // f: BaseObjectTypeField.CREATION_DATE,
290
- // o: Operator.INTERVAL_INCLUDE_BOTH,
291
- // v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
292
- // v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
293
- // };
294
- // break;
295
- // }
296
- case 'thisyear': {
297
- const firstDay = new Date();
298
- firstDay.setMonth(0);
299
- firstDay.setDate(1);
300
- dateFilter = {
301
- f: BaseObjectTypeField.CREATION_DATE,
302
- o: Operator.INTERVAL_INCLUDE_BOTH,
303
- v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
304
- v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
305
- };
306
- break;
307
- }
308
- // case 'lastyear': {
309
- // const firstDay = new Date();
310
- // firstDay.setFullYear(firstDay.getFullYear() - 1);
311
- // firstDay.setMonth(0);
312
- // firstDay.setDate(1);
313
- // const lastDay = new Date();
314
- // lastDay.setFullYear(lastDay.getFullYear() - 1);
315
- // lastDay.setMonth(11);
316
- // lastDay.setDate(31);
317
- // dateFilter = {
318
- // f: BaseObjectTypeField.CREATION_DATE,
319
- // o: Operator.INTERVAL_INCLUDE_BOTH,
320
- // v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
321
- // v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
322
- // };
323
- // break;
324
- // }
325
- case this.#CREATED_CUSTOM: {
326
- if (this.#customDateRange)
327
- dateFilter = this.#customRangeToFilter(this.#customDateRange);
328
- else
329
- this.filterForm.get('created')?.patchValue(this.ANY_OPTION);
330
- break;
331
- }
332
- }
333
- return dateFilter;
334
- }
335
- #customRangeToFilter(rv) {
336
- const v1 = rv.firstValue.toISOString();
337
- const v2 = rv.secondValue ? rv.secondValue.toISOString() : undefined;
338
- let filter;
339
- switch (rv.operator) {
340
- case Operator.EQUAL: {
341
- filter = {
342
- f: BaseObjectTypeField.CREATION_DATE,
343
- o: Operator.INTERVAL_INCLUDE_BOTH,
344
- v1: v1.split('T')[0] + 'T00:00:00.000',
345
- v2: v1.split('T')[0] + 'T23:59:59.000'
346
- };
347
- break;
348
- }
349
- case Operator.GREATER_OR_EQUAL: {
350
- filter = {
351
- f: BaseObjectTypeField.CREATION_DATE,
352
- o: rv.operator,
353
- v1: v1.split('T')[0] + 'T00:00:00.000'
354
- };
355
- break;
356
- }
357
- case Operator.LESS_OR_EQUAL: {
358
- filter = {
359
- f: BaseObjectTypeField.CREATION_DATE,
360
- o: rv.operator,
361
- v1: v1.split('T')[0] + 'T23:59:59.000'
362
- };
363
- break;
364
- }
365
- case Operator.INTERVAL_INCLUDE_BOTH: {
366
- filter = {
367
- f: BaseObjectTypeField.CREATION_DATE,
368
- o: rv.operator,
369
- v1: v1.split('T')[0] + 'T00:00:00.000',
370
- v2: v2.split('T')[0] + 'T23:59:59.000'
371
- };
372
- break;
373
- }
374
- }
375
- return filter;
89
+ return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, BaseObjectTypeField.CREATION_DATE) : undefined;
376
90
  }
377
91
  #toSizeFilter(value) {
378
- let sizeFilter = undefined;
379
- switch (value) {
380
- case 's':
381
- sizeFilter = {
382
- f: ContentStreamField.LENGTH,
383
- o: Operator.LESS_THAN,
384
- v1: 1024 * 1024
385
- };
386
- break;
387
- case 'm':
388
- sizeFilter = {
389
- f: ContentStreamField.LENGTH,
390
- o: Operator.INTERVAL_INCLUDE_BOTH,
391
- v1: 1024 * 1024,
392
- v2: 1024 * 1024 * 10
393
- };
394
- break;
395
- case 'l':
396
- sizeFilter = {
397
- f: ContentStreamField.LENGTH,
398
- o: Operator.INTERVAL_INCLUDE_BOTH,
399
- v1: 1024 * 1024 * 10,
400
- v2: 1024 * 1024 * 100
401
- };
402
- break;
403
- case 'xl':
404
- sizeFilter = {
405
- f: ContentStreamField.LENGTH,
406
- o: Operator.GREATER_THAN,
407
- v1: 1024 * 1024 * 100
408
- };
409
- break;
410
- }
411
- return sizeFilter;
92
+ return value ? this.#search.rangeValueToSearchFilter(value.rangeValue, ContentStreamField.LENGTH) : undefined;
412
93
  }
413
94
  #toTypeFilter(value) {
414
95
  return value === this.ANY_OPTION
@@ -420,10 +101,13 @@ export class SearchFilterComponent {
420
101
  };
421
102
  }
422
103
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
423
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SearchFilterComponent, isStandalone: true, selector: "ymd-search-filter", inputs: { query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"size\" [options]=\"sizeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"created\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2)}:host form yvc-dropdown{--icon-size: 18px;font-size:var(--font-caption);color:var(--text-color-caption);border:0;outline-offset:-2px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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: YvcDragScrollModule }, { kind: "directive", type: i4.DragScrollDirective, selector: "[yvcDragScroll]" }] }); }
104
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SearchFilterComponent, isStandalone: true, selector: "ymd-search-filter", inputs: { query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yuv-range-select-filesize formControlName=\"size\"></yuv-range-select-filesize>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2);padding:2px}:host form yuv-range-select-filesize,:host form yuv-range-select-date,:host form yvc-dropdown{--icon-size: 18px;--form-element-border-color: transparent;font-size:var(--font-caption);color:var(--text-color-caption);outline-offset:0px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: RangeSelectFilesizeComponent, selector: "yuv-range-select-filesize", inputs: ["ranges"] }, { kind: "component", type: RangeSelectDateComponent, selector: "yuv-range-select-date", inputs: ["ranges", "customRange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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: YvcDragScrollModule }, { kind: "directive", type: i4.DragScrollDirective, selector: "[yvcDragScroll]" }] }); }
424
105
  }
425
106
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchFilterComponent, decorators: [{
426
107
  type: Component,
427
- args: [{ selector: 'ymd-search-filter', standalone: true, imports: [CommonModule, YvcDropdownModule, TranslateModule, ReactiveFormsModule, YvcDragScrollModule], template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"size\" [options]=\"sizeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"created\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2)}:host form yvc-dropdown{--icon-size: 18px;font-size:var(--font-caption);color:var(--text-color-caption);border:0;outline-offset:-2px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"] }]
108
+ args: [{ selector: 'ymd-search-filter', standalone: true, imports: [CommonModule, YvcDropdownModule, TranslateModule,
109
+ RangeSelectFilesizeComponent,
110
+ RangeSelectDateComponent,
111
+ ReactiveFormsModule, YvcDragScrollModule], template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yuv-range-select-filesize formControlName=\"size\"></yuv-range-select-filesize>\n <yuv-range-select-date formControlName=\"created\"></yuv-range-select-date>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2);padding:2px}:host form yuv-range-select-filesize,:host form yuv-range-select-date,:host form yvc-dropdown{--icon-size: 18px;--form-element-border-color: transparent;font-size:var(--font-caption);color:var(--text-color-caption);outline-offset:0px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"] }]
428
112
  }], ctorParameters: () => [] });
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQXlDLE1BQU0scUJBQXFCLENBQUM7QUFDOUosT0FBTyxFQUFnQixZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQWtCLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEYsT0FBTyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7QUFTM0YsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLENBQXdCO0lBQzlCLEdBQUcsQ0FBdUI7SUFDMUIsUUFBUSxDQUE2QjtJQUVyQyxlQUFlLENBQVk7SUFLM0IsUUFBUSxDQUFrQztJQWdCMUMsZ0JBQWdCLENBQWM7SUFFOUI7UUEzQkEsV0FBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QixRQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLGFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVyQyxvQkFBZSxHQUFHLFFBQVEsQ0FBQztRQUVuQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0MsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTFDLGdCQUFXLEdBQUcsTUFBTSxDQUFtQixFQUFFLENBQUMsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLE1BQU0sQ0FBbUIsRUFBRSxDQUFDLENBQUM7UUFDM0MsZ0JBQVcsR0FBRyxNQUFNLENBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLFVBQUssR0FBRyxLQUFLLENBQXFCLElBQUksQ0FBQyxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxFQUFlLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFdkMsZUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN0QyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3ZCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUMzQixDQUFDLENBQUM7UUFLRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRyw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFVBQVU7YUFDWixHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ2YsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDeEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQy9CLHlCQUF5QjtnQkFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFFbkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7b0JBQ3JELEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2lCQUM3QixDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFrQyxFQUFFLEVBQUU7b0JBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzVELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMzQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RCxVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUN4QjtnQ0FDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWU7NkJBQzlCLEVBQ0Q7Z0NBQ0UsU0FBUyxFQUFFLEtBQUs7NkJBQ2pCLENBQ0YsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzdDLE1BQU0sRUFBRSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUNELEtBQUssUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDcEgsQ0FBQztZQUNELEtBQUssUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE9BQU8sR0FBRyxhQUFhLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxDQUFDO1lBQ0QsS0FBSyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxXQUFXLENBQUMsSUFBSSxhQUFhLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBbUIsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2pNLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUs7UUFDSCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxDQUFNO1FBQ3ZCLHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBRXpFLElBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztZQUNsQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQWdCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFNO1FBQ2xCLE1BQU0sWUFBWSxHQUFnQjtZQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFDRixZQUFZLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUUxQixtQkFBbUI7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxVQUFVO1lBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEQsbUJBQW1CO1FBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksVUFBVTtZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXRELHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLFVBQVU7WUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0RCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNuQjtnQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUM7Z0JBQ3ZFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVTthQUN2QjtZQUNELEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUc7YUFDYixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBZTtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNuQixHQUFHO2dCQUNEO29CQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztvQkFDNUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVO2lCQUN2QjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0NBQStDLENBQUM7b0JBQzlFLEtBQUssRUFBRSxPQUFPO2lCQUNmO2dCQUNEO29CQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtREFBbUQsQ0FBQztvQkFDbEYsS0FBSyxFQUFFLFdBQVc7aUJBQ25CO2dCQUNEO29CQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQztvQkFDakYsS0FBSyxFQUFFLFVBQVU7aUJBQ2xCO2dCQUNELElBQUk7Z0JBQ0osdUZBQXVGO2dCQUN2RixzQkFBc0I7Z0JBQ3RCLEtBQUs7Z0JBQ0w7b0JBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1EQUFtRCxDQUFDO29CQUNsRixLQUFLLEVBQUUsV0FBVztpQkFDbkI7Z0JBQ0QsSUFBSTtnQkFDSix3RkFBd0Y7Z0JBQ3hGLHVCQUF1QjtnQkFDdkIsS0FBSztnQkFDTDtvQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0RBQWtELENBQUM7b0JBQ2pGLEtBQUssRUFBRSxVQUFVO2lCQUNsQjtnQkFDRCxJQUFJO2dCQUNKLHVGQUF1RjtnQkFDdkYsc0JBQXNCO2dCQUN0QixLQUFLO2dCQUNMO29CQUNFLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7b0JBQ3pGLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZTtpQkFDNUI7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNuQjtnQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUM7Z0JBQzVFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVTthQUN2QjtZQUNEO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQztnQkFDOUUsS0FBSyxFQUFFLEdBQUc7YUFDWDtZQUNEO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDL0UsS0FBSyxFQUFFLEdBQUc7YUFDWDtZQUNEO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQztnQkFDOUUsS0FBSyxFQUFFLEdBQUc7YUFDWDtZQUNEO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtREFBbUQsQ0FBQztnQkFDbEYsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLFVBQVUsR0FBNkIsU0FBUyxDQUFDO1FBQ3JELFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsVUFBVSxHQUFHO29CQUNYLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxDQUFDLEVBQUUsUUFBUSxDQUFDLHFCQUFxQjtvQkFDakMsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7b0JBQzVELEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO2lCQUM3RCxDQUFDO2dCQUNGLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM3QixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsVUFBVSxHQUFHO29CQUNYLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxDQUFDLEVBQUUsUUFBUSxDQUFDLHFCQUFxQjtvQkFDakMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZTtvQkFDM0QsRUFBRSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZTtpQkFDNUQsQ0FBQztnQkFDRixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3pELFVBQVUsR0FBRztvQkFDWCxDQUFDLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxxQkFBcUI7b0JBQ2pDLEVBQUUsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7b0JBQzFELEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO2lCQUM3RCxDQUFDO2dCQUNGLE1BQU07WUFDUixDQUFDO1lBQ0QscUJBQXFCO1lBQ3JCLGlDQUFpQztZQUNqQyxrRUFBa0U7WUFDbEUsZ0NBQWdDO1lBQ2hDLCtEQUErRDtZQUMvRCxtQkFBbUI7WUFDbkIsNENBQTRDO1lBQzVDLHlDQUF5QztZQUN6QyxrRUFBa0U7WUFDbEUsZ0VBQWdFO1lBQ2hFLE9BQU87WUFDUCxXQUFXO1lBQ1gsSUFBSTtZQUNKLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsVUFBVSxHQUFHO29CQUNYLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxDQUFDLEVBQUUsUUFBUSxDQUFDLHFCQUFxQjtvQkFDakMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZTtvQkFDMUQsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7aUJBQzdELENBQUM7Z0JBQ0YsTUFBTTtZQUNSLENBQUM7WUFDRCxzQkFBc0I7WUFDdEIsaUNBQWlDO1lBQ2pDLHlCQUF5QjtZQUN6QixnREFBZ0Q7WUFDaEQsZ0NBQWdDO1lBQ2hDLHdCQUF3QjtZQUN4QixtQkFBbUI7WUFDbkIsNENBQTRDO1lBQzVDLHlDQUF5QztZQUN6QyxrRUFBa0U7WUFDbEUsZ0VBQWdFO1lBQ2hFLE9BQU87WUFDUCxXQUFXO1lBQ1gsSUFBSTtZQUNKLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsVUFBVSxHQUFHO29CQUNYLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO29CQUNwQyxDQUFDLEVBQUUsUUFBUSxDQUFDLHFCQUFxQjtvQkFDakMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZTtvQkFDMUQsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7aUJBQzdELENBQUM7Z0JBQ0YsTUFBTTtZQUNSLENBQUM7WUFDRCxxQkFBcUI7WUFDckIsaUNBQWlDO1lBQ2pDLHNEQUFzRDtZQUN0RCwwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLGdDQUFnQztZQUNoQyxvREFBb0Q7WUFDcEQsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUN6QixtQkFBbUI7WUFDbkIsNENBQTRDO1lBQzVDLHlDQUF5QztZQUN6QyxrRUFBa0U7WUFDbEUsZ0VBQWdFO1lBQ2hFLE9BQU87WUFDUCxXQUFXO1lBQ1gsSUFBSTtZQUNKLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQjtvQkFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOztvQkFDcEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDakUsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLEVBQWM7UUFDakMsTUFBTSxFQUFFLEdBQUksRUFBRSxDQUFDLFVBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakQsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFDLFdBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRSxJQUFJLE1BQU0sQ0FBQztRQUNYLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sR0FBRztvQkFDUCxDQUFDLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxxQkFBcUI7b0JBQ2pDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7b0JBQ3RDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7aUJBQ3ZDLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sR0FBRztvQkFDUCxDQUFDLEVBQUUsbUJBQW1CLENBQUMsYUFBYTtvQkFDcEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRO29CQUNkLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7aUJBQ3ZDLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLEdBQUc7b0JBQ1AsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUTtvQkFDZCxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO2lCQUN2QyxDQUFDO2dCQUNGLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLEdBQUc7b0JBQ1AsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLGFBQWE7b0JBQ3BDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUTtvQkFDZCxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO29CQUN0QyxFQUFFLEVBQUUsRUFBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO2lCQUN4QyxDQUFDO2dCQUNGLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLFVBQVUsR0FBNkIsU0FBUyxDQUFDO1FBQ3JELFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLEdBQUc7Z0JBQ04sVUFBVSxHQUFHO29CQUNYLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO29CQUM1QixDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVM7b0JBQ3JCLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSTtpQkFDaEIsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLFVBQVUsR0FBRztvQkFDWCxDQUFDLEVBQUUsa0JBQWtCLENBQUMsTUFBTTtvQkFDNUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxxQkFBcUI7b0JBQ2pDLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSTtvQkFDZixFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO2lCQUNyQixDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sVUFBVSxHQUFHO29CQUNYLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO29CQUM1QixDQUFDLEVBQUUsUUFBUSxDQUFDLHFCQUFxQjtvQkFDakMsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtvQkFDcEIsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRztpQkFDdEIsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxJQUFJO2dCQUNQLFVBQVUsR0FBRztvQkFDWCxDQUFDLEVBQUUsa0JBQWtCLENBQUMsTUFBTTtvQkFDNUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxZQUFZO29CQUN4QixFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHO2lCQUN0QixDQUFDO2dCQUNGLE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVO1lBQzlCLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDO2dCQUNFLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyx5QkFBeUI7Z0JBQ2hELENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDZCxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDWixDQUFDO0lBQ1IsQ0FBQzsrR0F2YVUscUJBQXFCO21HQUFyQixxQkFBcUIsMFBDbkJsQyx3akJBU0EsK2RETVksWUFBWSw4QkFBRSxpQkFBaUIsb05BQUUsZUFBZSwyRkFBRSxtQkFBbUIsNHJCQUFFLG1CQUFtQjs7NEZBSXpGLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmFzZU9iamVjdFR5cGVGaWVsZCwgQ29udGVudFN0cmVhbUZpZWxkLCBMb2NhbGVEYXRlUGlwZSwgT3BlcmF0b3IsIE9wZXJhdG9yTGFiZWwsIFJhbmdlVmFsdWUsIFNlYXJjaEZpbHRlciwgU2VhcmNoUXVlcnkgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNEcmFnU2Nyb2xsTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2RyYWctc2Nyb2xsJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBPdmVybGF5Q2xvc2VFdmVudCwgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1zZWFyY2gtZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjRHJvcGRvd25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgWXZjRHJhZ1Njcm9sbE1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpbHRlckNvbXBvbmVudCB7XG4gICNzaGVsbCA9IGluamVjdChTaGVsbFNlcnZpY2UpO1xuICAjZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAjb3ZlcmxheSA9IGluamVjdChZdmNPdmVybGF5U2VydmljZSk7XG5cbiAgI0NSRUFURURfQ1VTVE9NID0gJ2N1c3RvbSc7XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQU5ZX09QVElPTiA9ICdhbnknO1xuICAjZmxhdm9ycyA9IHRoaXMuI3NoZWxsLmdldE9iamVjdEZsYXZvcnMoKTtcblxuICB0eXBlT3B0aW9ucyA9IHNpZ25hbDxEcm9wZG93bk9wdGlvbltdPihbXSk7XG4gIGRhdGVPcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcbiAgc2l6ZU9wdGlvbnMgPSBzaWduYWw8RHJvcGRvd25PcHRpb25bXT4oW10pO1xuXG4gIHF1ZXJ5ID0gaW5wdXQ8U2VhcmNoUXVlcnkgfCBudWxsPihudWxsKTtcbiAgcXVlcnlDaGFuZ2UgPSBvdXRwdXQ8U2VhcmNoUXVlcnk+KCk7XG4gIGZpbHRlcnNBY3RpdmUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZpbHRlckZvcm0gPSB0aGlzLiNmYi5ub25OdWxsYWJsZS5ncm91cCh7XG4gICAgdHlwZTogW3RoaXMuQU5ZX09QVElPTl0sXG4gICAgc2l6ZTogW3RoaXMuQU5ZX09QVElPTl0sXG4gICAgY3JlYXRlZDogW3RoaXMuQU5ZX09QVElPTl1cbiAgfSk7XG5cbiAgI2N1c3RvbURhdGVSYW5nZT86IFJhbmdlVmFsdWU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoXykgPT4gdGhpcy4jc2V0dXBPcHRpb25zKCkpO1xuICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcblxuICAgIC8vIGxpc3RlbiB0byBjcmVhdGVkIGZpbHRlciBjaGFuZ2VzIHRvIGNhdGNoIGN1c3RvbSBkYXRlIHJhbmdlXG4gICAgdGhpcy5maWx0ZXJGb3JtXG4gICAgICAuZ2V0KCdjcmVhdGVkJylcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLiNDUkVBVEVEX0NVU1RPTSkge1xuICAgICAgICAgIC8vIG9wZW4gZGF0ZSByYW5nZSBwaWNrZXJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLiNjdXN0b21EYXRlUmFuZ2UpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG8gPSB0aGlzLiNvdmVybGF5Lm9wZW4oRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LCB7XG4gICAgICAgICAgICByYW5nZTogdGhpcy4jY3VzdG9tRGF0ZVJhbmdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgby5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKChyZXM6IE92ZXJsYXlDbG9zZUV2ZW50PFJhbmdlVmFsdWU+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjdXN0b21EYXRlUmFuZ2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnY3JlYXRlZCcpPy5wYXRjaFZhbHVlKHRoaXMuQU5ZX09QVElPTik7XG4gICAgICAgICAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnModGhpcy4jY3VzdG9tRGF0ZVJhbmdlVG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkOiB0aGlzLiNDUkVBVEVEX0NVU1RPTVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNjdXN0b21EYXRlUmFuZ2VUb1N0cmluZygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy4jY3VzdG9tRGF0ZVJhbmdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRwID0gbmV3IExvY2FsZURhdGVQaXBlKHRoaXMudHJhbnNsYXRlKTtcbiAgICBzd2l0Y2ggKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICByZXR1cm4gZHAudHJhbnNmb3JtKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5maXJzdFZhbHVlIGFzIERhdGUsICdzaG9ydERhdGUnKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5HUkVBVEVSX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuTEVTU19PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5MRVNTX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RIOiB7XG4gICAgICAgIHJldHVybiBgJHtkcC50cmFuc2Zvcm0odGhpcy4jY3VzdG9tRGF0ZVJhbmdlLmZpcnN0VmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfSAke09wZXJhdG9yTGFiZWwuSU5URVJWQUxfSU5DTFVERV9CT1RIfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2Uuc2Vjb25kVmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICBjb25zdCBxID0gdGhpcy5xdWVyeSgpO1xuICAgIGlmIChxKSB7XG4gICAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQocSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICAjb25Gb3JtVmFsdWVDaGFuZ2UodjogYW55KSB7XG4gICAgLy8gZG8gbm90IGNyZWF0ZSBhIG5ldyBxdWVyeSBpZiBjdXN0b20gZGF0ZSByYW5nZSBpcyBzZWxlY3RlZCBidXQgbm90IHNldFxuICAgIGlmICh2LmNyZWF0ZWQgPT09IHRoaXMuI0NSRUFURURfQ1VTVE9NICYmICF0aGlzLiNjdXN0b21EYXRlUmFuZ2UpIHJldHVybjtcblxuICAgIGlmKHYuY3JlYXRlZCAhPT0gdGhpcy4jQ1JFQVRFRF9DVVNUT00pIHtcbiAgICAgIHRoaXMuI2N1c3RvbURhdGVSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkUXVlcnk6IFNlYXJjaFF1ZXJ5ID0gdGhpcy4jYXBwbHlGaWx0ZXJzKHYpO1xuICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdCh1cGRhdGVkUXVlcnkpO1xuICAgIHRoaXMuZmlsdGVyc0FjdGl2ZS5zZXQoISF1cGRhdGVkUXVlcnkuZmlsdGVycyAmJiB1cGRhdGVkUXVlcnkuZmlsdGVycy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gICNhcHBseUZpbHRlcnModjogYW55KTogU2VhcmNoUXVlcnkge1xuICAgIGNvbnN0IHVwZGF0ZWRRdWVyeTogU2VhcmNoUXVlcnkgPSB7XG4gICAgICAuLi4odGhpcy5xdWVyeSgpIHx8IHt9KSxcbiAgICAgIGZpbHRlcnM6IFtdXG4gICAgfTtcbiAgICB1cGRhdGVkUXVlcnkuZmlsdGVycyA9IFtdO1xuXG4gICAgLy8gZmlsZSBzaXplIGZpbHRlclxuICAgIGNvbnN0IHR5cGVGaWx0ZXIgPSB0aGlzLiN0b1R5cGVGaWx0ZXIodi50eXBlKTtcbiAgICBpZiAodHlwZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaCh0eXBlRmlsdGVyKTtcblxuICAgIC8vIGZpbGUgc2l6ZSBmaWx0ZXJcbiAgICBjb25zdCBzaXplRmlsdGVyID0gdGhpcy4jdG9TaXplRmlsdGVyKHYuc2l6ZSk7XG4gICAgaWYgKHNpemVGaWx0ZXIpIHVwZGF0ZWRRdWVyeS5maWx0ZXJzLnB1c2goc2l6ZUZpbHRlcik7XG5cbiAgICAvLyBjcmVhdGlvbiBkYXRlIGZpbHRlclxuICAgIGNvbnN0IGRhdGVGaWx0ZXIgPSB0aGlzLiN0b0RhdGVGaWx0ZXIodi5jcmVhdGVkKTtcbiAgICBpZiAoZGF0ZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaChkYXRlRmlsdGVyKTtcblxuICAgIHJldHVybiB1cGRhdGVkUXVlcnk7XG4gIH1cblxuICAjc2V0dXBPcHRpb25zKCkge1xuICAgIHRoaXMuI3NldHVwVHlwZU9wdGlvbnMoKTtcbiAgICB0aGlzLiNzZXR1cERhdGVPcHRpb25zKCk7XG4gICAgdGhpcy4jc2V0dXBTaXplT3B0aW9ucygpO1xuICB9XG5cbiAgI3NldHVwVHlwZU9wdGlvbnMoKSB7XG4gICAgdGhpcy50eXBlT3B0aW9ucy5zZXQoW1xuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5hbnknKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuI2ZsYXZvcnMubWFwKChmOiBPYmplY3RGbGF2b3IpID0+ICh7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGYuaWQpLFxuICAgICAgICB2YWx1ZTogZi5zb3RcbiAgICAgIH0pKVxuICAgIF0pO1xuICB9XG5cbiAgI3NldHVwRGF0ZU9wdGlvbnMoY3VzdG9tPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kYXRlT3B0aW9ucy5zZXQoW1xuICAgICAgLi4uW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uZGF0ZS5hbnknKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5BTllfT1BUSU9OXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRvZGF5JyksXG4gICAgICAgICAgdmFsdWU6ICd0b2RheSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUueWVzdGVyZGF5JyksXG4gICAgICAgICAgdmFsdWU6ICd5ZXN0ZXJkYXknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRoaXN3ZWVrJyksXG4gICAgICAgICAgdmFsdWU6ICd0aGlzd2VlaydcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdHdlZWsnKSxcbiAgICAgICAgLy8gICB2YWx1ZTogJ2xhc3R3ZWVrJ1xuICAgICAgICAvLyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uZGF0ZS50aGlzbW9udGgnKSxcbiAgICAgICAgICB2YWx1ZTogJ3RoaXNtb250aCdcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdG1vbnRoJyksXG4gICAgICAgIC8vICAgdmFsdWU6ICdsYXN0bW9udGgnXG4gICAgICAgIC8vIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRoaXN5ZWFyJyksXG4gICAgICAgICAgdmFsdWU6ICd0aGlzeWVhcidcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdHllYXInKSxcbiAgICAgICAgLy8gICB2YWx1ZTogJ2xhc3R5ZWFyJ1xuICAgICAgICAvLyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IGN1c3RvbSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUuY3VzdG9tJyksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuI0NSRUFURURfQ1VTVE9NXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICBdKTtcbiAgfVxuXG4gICNzZXR1cFNpemVPcHRpb25zKCkge1xuICAgIHRoaXMuc2l6ZU9wdGlvbnMuc2V0KFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uc2l6ZS5hbnknKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uc2l6ZS5zbWFsbCcpLFxuICAgICAgICB2YWx1ZTogJ3MnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5zaXplLm1lZGl1bScpLFxuICAgICAgICB2YWx1ZTogJ20nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5zaXplLmxhcmdlJyksXG4gICAgICAgIHZhbHVlOiAnbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLnNpemUudmVyeWxhcmdlJyksXG4gICAgICAgIHZhbHVlOiAneGwnXG4gICAgICB9XG4gICAgXSk7XG4gIH1cblxuICAjdG9EYXRlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlRmlsdGVyOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAndG9kYXknOiB7XG4gICAgICAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDAwOjAwOjAwLjAwMCcsXG4gICAgICAgICAgdjI6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QyMzo1OTo1OS4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVzdGVyZGF5Jzoge1xuICAgICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogeWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogeWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoaXN3ZWVrJzoge1xuICAgICAgICBjb25zdCBmaXJzdERheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGZpcnN0RGF5LnNldERhdGUoZmlyc3REYXkuZ2V0RGF0ZSgpIC0gZmlyc3REYXkuZ2V0RGF5KCkpO1xuICAgICAgICBkYXRlRmlsdGVyID0ge1xuICAgICAgICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBjYXNlICdsYXN0d2Vlayc6IHtcbiAgICAgIC8vICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgLy8gICBmaXJzdERheS5zZXREYXRlKGZpcnN0RGF5LmdldERhdGUoKSAtIGZpcnN0RGF5LmdldERheSgpIC0gNyk7XG4gICAgICAvLyAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgLy8gICBsYXN0RGF5LnNldERhdGUobGFzdERheS5nZXREYXRlKCkgLSBsYXN0RGF5LmdldERheSgpIC0gMSk7XG4gICAgICAvLyAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAvLyAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgLy8gICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgIC8vICAgICB2MTogZmlyc3REYXkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnLFxuICAgICAgLy8gICAgIHYyOiBsYXN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgLy8gICB9O1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIH1cbiAgICAgIGNhc2UgJ3RoaXNtb250aCc6IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBmaXJzdERheS5zZXREYXRlKDEpO1xuICAgICAgICBkYXRlRmlsdGVyID0ge1xuICAgICAgICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBjYXNlICdsYXN0bW9udGgnOiB7XG4gICAgICAvLyAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0TW9udGgoZmlyc3REYXkuZ2V0TW9udGgoKSAtIDEpO1xuICAgICAgLy8gICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgbGFzdERheS5zZXREYXRlKDApO1xuICAgICAgLy8gICBkYXRlRmlsdGVyID0ge1xuICAgICAgLy8gICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgIC8vICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAvLyAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgIC8vICAgICB2MjogbGFzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgIC8vICAgfTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyB9XG4gICAgICBjYXNlICd0aGlzeWVhcic6IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBmaXJzdERheS5zZXRNb250aCgwKTtcbiAgICAgICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgICAgZGF0ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUsXG4gICAgICAgICAgbzogT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RILFxuICAgICAgICAgIHYxOiBmaXJzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDAwOjAwOjAwLjAwMCcsXG4gICAgICAgICAgdjI6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QyMzo1OTo1OS4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gY2FzZSAnbGFzdHllYXInOiB7XG4gICAgICAvLyAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RnVsbFllYXIoZmlyc3REYXkuZ2V0RnVsbFllYXIoKSAtIDEpO1xuICAgICAgLy8gICBmaXJzdERheS5zZXRNb250aCgwKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgIC8vICAgY29uc3QgbGFzdERheSA9IG5ldyBEYXRlKCk7XG4gICAgICAvLyAgIGxhc3REYXkuc2V0RnVsbFllYXIobGFzdERheS5nZXRGdWxsWWVhcigpIC0gMSk7XG4gICAgICAvLyAgIGxhc3REYXkuc2V0TW9udGgoMTEpO1xuICAgICAgLy8gICBsYXN0RGF5LnNldERhdGUoMzEpO1xuICAgICAgLy8gICBkYXRlRmlsdGVyID0ge1xuICAgICAgLy8gICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgIC8vICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAvLyAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgIC8vICAgICB2MjogbGFzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgIC8vICAgfTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyB9XG4gICAgICBjYXNlIHRoaXMuI0NSRUFURURfQ1VTVE9NOiB7XG4gICAgICAgIGlmICh0aGlzLiNjdXN0b21EYXRlUmFuZ2UpIGRhdGVGaWx0ZXIgPSB0aGlzLiNjdXN0b21SYW5nZVRvRmlsdGVyKHRoaXMuI2N1c3RvbURhdGVSYW5nZSk7XG4gICAgICAgIGVsc2UgdGhpcy5maWx0ZXJGb3JtLmdldCgnY3JlYXRlZCcpPy5wYXRjaFZhbHVlKHRoaXMuQU5ZX09QVElPTik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0ZUZpbHRlcjtcbiAgfVxuXG4gICNjdXN0b21SYW5nZVRvRmlsdGVyKHJ2OiBSYW5nZVZhbHVlKTogU2VhcmNoRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2MSA9IChydi5maXJzdFZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgdjIgPSBydi5zZWNvbmRWYWx1ZSA/IChydi5zZWNvbmRWYWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpIDogdW5kZWZpbmVkO1xuICAgIGxldCBmaWx0ZXI7XG4gICAgc3dpdGNoIChydi5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogdjEuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogdjEuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IHJ2Lm9wZXJhdG9yLFxuICAgICAgICAgIHYxOiB2MS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBPcGVyYXRvci5MRVNTX09SX0VRVUFMOiB7XG4gICAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUsXG4gICAgICAgICAgbzogcnYub3BlcmF0b3IsXG4gICAgICAgICAgdjE6IHYxLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IHJ2Lm9wZXJhdG9yLFxuICAgICAgICAgIHYxOiB2MS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnLFxuICAgICAgICAgIHYyOiB2MiEuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gICN0b1NpemVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNpemVGaWx0ZXI6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdzJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLkxFU1NfVEhBTixcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjRcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjQsXG4gICAgICAgICAgdjI6IDEwMjQgKiAxMDI0ICogMTBcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjQgKiAxMCxcbiAgICAgICAgICB2MjogMTAyNCAqIDEwMjQgKiAxMDBcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd4bCc6XG4gICAgICAgIHNpemVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSCxcbiAgICAgICAgICBvOiBPcGVyYXRvci5HUkVBVEVSX1RIQU4sXG4gICAgICAgICAgdjE6IDEwMjQgKiAxMDI0ICogMTAwXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZUZpbHRlcjtcbiAgfVxuXG4gICN0b1R5cGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB0aGlzLkFOWV9PUFRJT05cbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFMsXG4gICAgICAgICAgbzogT3BlcmF0b3IuSU4sXG4gICAgICAgICAgdjE6IFt2YWx1ZV1cbiAgICAgICAgfTtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgeXZjRHJhZ1Njcm9sbD5cbiAgPHl2Yy1kcm9wZG93biBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCIgW29wdGlvbnNdPVwidHlwZU9wdGlvbnMoKVwiIFtkaXNhYmxlQ2xlYXJCdXR0b25dPVwidHJ1ZVwiPjwveXZjLWRyb3Bkb3duPlxuICA8eXZjLWRyb3Bkb3duIGZvcm1Db250cm9sTmFtZT1cInNpemVcIiBbb3B0aW9uc109XCJzaXplT3B0aW9ucygpXCIgW2Rpc2FibGVDbGVhckJ1dHRvbl09XCJ0cnVlXCI+PC95dmMtZHJvcGRvd24+XG4gIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRlZFwiIFtvcHRpb25zXT1cImRhdGVPcHRpb25zKClcIiBbZGlzYWJsZUNsZWFyQnV0dG9uXT1cInRydWVcIj48L3l2Yy1kcm9wZG93bj5cblxuICBAaWYgKGZpbHRlcnNBY3RpdmUoKSkge1xuICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwicmVzZXQoKVwiPnt7ICd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIuYnV0dG9uLnJlc2V0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICB9XG48L2Zvcm0+XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUE2QixhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsSSxPQUFPLEVBQUUsd0JBQXdCLEVBQXdCLDRCQUE0QixFQUE0QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hKLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFrQixpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFZaEYsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLENBQXdC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RSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3hILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBK0I7UUFDM0MsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVTtZQUM5QixDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQztnQkFDRSxDQUFDLEVBQUUsbUJBQW1CLENBQUMseUJBQXlCO2dCQUNoRCxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ2QsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ1osQ0FBQztJQUNSLENBQUM7K0dBakdVLHFCQUFxQjttR0FBckIscUJBQXFCLDBQQ3JCbEMsZ2ZBU0EsZ2xCREtZLFlBQVksOEJBQUUsaUJBQWlCLG9OQUFFLGVBQWUsNEZBQ3hELDRCQUE0QiwwRkFDNUIsd0JBQXdCLG9HQUN4QixtQkFBbUIsNHJCQUFFLG1CQUFtQjs7NEZBSS9CLHFCQUFxQjtrQkFWakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGVBQWU7d0JBQ3hELDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4QixtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmFzZU9iamVjdFR5cGVGaWVsZCwgQ29udGVudFN0cmVhbUZpZWxkLCBPcGVyYXRvciwgU2VhcmNoRmlsdGVyLCBTZWFyY2hRdWVyeSwgU2VhcmNoU2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgUmFuZ2VTZWxlY3REYXRlQ29tcG9uZW50LCBSYW5nZVNlbGVjdERhdGVWYWx1ZSwgUmFuZ2VTZWxlY3RGaWxlc2l6ZUNvbXBvbmVudCwgUmFuZ2VTZWxlY3RGaWxlc2l6ZVZhbHVlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2Zvcm1zJztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNEcmFnU2Nyb2xsTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2RyYWctc2Nyb2xsJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1zZWFyY2gtZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjRHJvcGRvd25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgXG4gICAgUmFuZ2VTZWxlY3RGaWxlc2l6ZUNvbXBvbmVudCwgXG4gICAgUmFuZ2VTZWxlY3REYXRlQ29tcG9uZW50LCBcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBZdmNEcmFnU2Nyb2xsTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmlsdGVyQ29tcG9uZW50IHtcbiAgI3NoZWxsID0gaW5qZWN0KFNoZWxsU2VydmljZSk7XG4gICNmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gICNzZWFyY2ggPSBpbmplY3QoU2VhcmNoU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQU5ZX09QVElPTiA9ICdhbnknO1xuICAjZmxhdm9ycyA9IHRoaXMuI3NoZWxsLmdldE9iamVjdEZsYXZvcnMoKTtcblxuICB0eXBlT3B0aW9ucyA9IHNpZ25hbDxEcm9wZG93bk9wdGlvbltdPihbXSk7XG5cbiAgcXVlcnkgPSBpbnB1dDxTZWFyY2hRdWVyeSB8IG51bGw+KG51bGwpO1xuICBxdWVyeUNoYW5nZSA9IG91dHB1dDxTZWFyY2hRdWVyeT4oKTtcbiAgZmlsdGVyc0FjdGl2ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgZmlsdGVyRm9ybSA9IHRoaXMuI2ZiLm5vbk51bGxhYmxlLmdyb3VwKHtcbiAgICB0eXBlOiBbdGhpcy5BTllfT1BUSU9OXSxcbiAgICBzaXplOiBbdGhpcy5BTllfT1BUSU9OXSxcbiAgICBjcmVhdGVkOiBbdGhpcy5BTllfT1BUSU9OXVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChfKSA9PiB0aGlzLiNzZXR1cE9wdGlvbnMoKSk7XG4gICAgdGhpcy4jc2V0dXBPcHRpb25zKCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IHEgPSB0aGlzLnF1ZXJ5KCk7XG4gICAgaWYgKHEpIHtcbiAgICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdChxKTtcbiAgICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gICNvbkZvcm1WYWx1ZUNoYW5nZSh2OiBhbnkpIHtcbiAgICBjb25zdCB1cGRhdGVkUXVlcnk6IFNlYXJjaFF1ZXJ5ID0gdGhpcy4jYXBwbHlGaWx0ZXJzKHYpO1xuICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdCh1cGRhdGVkUXVlcnkpO1xuICAgIHRoaXMuZmlsdGVyc0FjdGl2ZS5zZXQoISF1cGRhdGVkUXVlcnkuZmlsdGVycyAmJiB1cGRhdGVkUXVlcnkuZmlsdGVycy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gICNhcHBseUZpbHRlcnModjogYW55KTogU2VhcmNoUXVlcnkge1xuICAgIGNvbnN0IHVwZGF0ZWRRdWVyeTogU2VhcmNoUXVlcnkgPSB7XG4gICAgICAuLi4odGhpcy5xdWVyeSgpIHx8IHt9KSxcbiAgICAgIGZpbHRlcnM6IFtdXG4gICAgfTtcbiAgICB1cGRhdGVkUXVlcnkuZmlsdGVycyA9IFtdO1xuXG4gICAgLy8gZmlsZSBzaXplIGZpbHRlclxuICAgIGNvbnN0IHR5cGVGaWx0ZXIgPSB0aGlzLiN0b1R5cGVGaWx0ZXIodi50eXBlKTtcbiAgICBpZiAodHlwZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaCh0eXBlRmlsdGVyKTtcblxuICAgIC8vIGZpbGUgc2l6ZSBmaWx0ZXJcbiAgICBjb25zdCBzaXplRmlsdGVyID0gdi5zaXplICE9PSB0aGlzLkFOWV9PUFRJT04gPyB0aGlzLiN0b1NpemVGaWx0ZXIodi5zaXplKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2l6ZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaChzaXplRmlsdGVyKTtcblxuICAgIC8vIGNyZWF0aW9uIGRhdGUgZmlsdGVyXG4gICAgY29uc3QgZGF0ZUZpbHRlciA9IHYuY3JlYXRlZCAhPT0gdGhpcy5BTllfT1BUSU9OID8gdGhpcy4jdG9EYXRlRmlsdGVyKHYuY3JlYXRlZCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGRhdGVGaWx0ZXIpIHVwZGF0ZWRRdWVyeS5maWx0ZXJzLnB1c2goZGF0ZUZpbHRlcik7XG5cbiAgICByZXR1cm4gdXBkYXRlZFF1ZXJ5O1xuICB9XG5cbiAgI3NldHVwT3B0aW9ucygpIHtcbiAgICB0aGlzLiNzZXR1cFR5cGVPcHRpb25zKCk7XG4gIH1cblxuICAjc2V0dXBUeXBlT3B0aW9ucygpIHtcbiAgICB0aGlzLnR5cGVPcHRpb25zLnNldChbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmFueScpLFxuICAgICAgICB2YWx1ZTogdGhpcy5BTllfT1BUSU9OXG4gICAgICB9LFxuICAgICAgLi4udGhpcy4jZmxhdm9ycy5tYXAoKGY6IE9iamVjdEZsYXZvcikgPT4gKHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZi5pZCksXG4gICAgICAgIHZhbHVlOiBmLnNvdFxuICAgICAgfSkpXG4gICAgXSk7XG4gIH1cblxuICAjdG9EYXRlRmlsdGVyKHZhbHVlOiBSYW5nZVNlbGVjdERhdGVWYWx1ZSk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy4jc2VhcmNoLnJhbmdlVmFsdWVUb1NlYXJjaEZpbHRlcih2YWx1ZS5yYW5nZVZhbHVlLCBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUpIDogdW5kZWZpbmVkO1xuICB9XG4gIFxuICAjdG9TaXplRmlsdGVyKHZhbHVlOiBSYW5nZVNlbGVjdEZpbGVzaXplVmFsdWUpOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuI3NlYXJjaC5yYW5nZVZhbHVlVG9TZWFyY2hGaWx0ZXIodmFsdWUucmFuZ2VWYWx1ZSwgQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAjdG9UeXBlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdGhpcy5BTllfT1BUSU9OXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOLFxuICAgICAgICAgIHYxOiBbdmFsdWVdXG4gICAgICAgIH07XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIHl2Y0RyYWdTY3JvbGw+XG4gIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiIFtvcHRpb25zXT1cInR5cGVPcHRpb25zKClcIiBbZGlzYWJsZUNsZWFyQnV0dG9uXT1cInRydWVcIj48L3l2Yy1kcm9wZG93bj5cbiAgPHl1di1yYW5nZS1zZWxlY3QtZmlsZXNpemUgZm9ybUNvbnRyb2xOYW1lPVwic2l6ZVwiPjwveXV2LXJhbmdlLXNlbGVjdC1maWxlc2l6ZT5cbiAgPHl1di1yYW5nZS1zZWxlY3QtZGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJjcmVhdGVkXCI+PC95dXYtcmFuZ2Utc2VsZWN0LWRhdGU+XG5cbiAgQGlmIChmaWx0ZXJzQWN0aXZlKCkpIHtcbiAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJlc2V0KClcIj57eyAneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLmJ1dHRvbi5yZXNldCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgfVxuPC9mb3JtPlxuIl19