@oneluiz/dual-datepicker 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +154 -7
- package/dual-datepicker.component.d.ts +7 -1
- package/esm2022/dual-datepicker.component.mjs +22 -5
- package/esm2022/preset-utils.mjs +276 -0
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/oneluiz-dual-datepicker.mjs +298 -5
- package/fesm2022/oneluiz-dual-datepicker.mjs.map +1 -1
- package/package.json +1 -1
- package/preset-utils.d.ts +91 -0
- package/public-api.d.ts +2 -1
package/README.md
CHANGED
|
@@ -456,7 +456,11 @@ export class DayJSAdapter extends DateAdapter<Dayjs> {
|
|
|
456
456
|
</ngx-dual-datepicker>
|
|
457
457
|
```
|
|
458
458
|
|
|
459
|
-
### Custom Presets
|
|
459
|
+
### ⚡ Custom Presets (Power Feature)
|
|
460
|
+
|
|
461
|
+
**This is where our library shines!** Unlike Angular Material, we offer an incredibly flexible preset system perfect for dashboards, reporting, POS, BI apps, and ERP systems.
|
|
462
|
+
|
|
463
|
+
#### Simple Pattern (Backward Compatible)
|
|
460
464
|
|
|
461
465
|
```typescript
|
|
462
466
|
customPresets: PresetConfig[] = [
|
|
@@ -467,6 +471,132 @@ customPresets: PresetConfig[] = [
|
|
|
467
471
|
];
|
|
468
472
|
```
|
|
469
473
|
|
|
474
|
+
#### **NEW v2.6.0** - Flexible Pattern with `getValue()` 🔥
|
|
475
|
+
|
|
476
|
+
The real power comes with the `getValue()` pattern. Define **any custom logic** you need:
|
|
477
|
+
|
|
478
|
+
```typescript
|
|
479
|
+
import { PresetConfig } from '@oneluiz/dual-datepicker';
|
|
480
|
+
|
|
481
|
+
customPresets: PresetConfig[] = [
|
|
482
|
+
{
|
|
483
|
+
label: 'Today',
|
|
484
|
+
getValue: () => {
|
|
485
|
+
const today = new Date();
|
|
486
|
+
return {
|
|
487
|
+
start: formatDate(today),
|
|
488
|
+
end: formatDate(today)
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
label: 'This Month',
|
|
494
|
+
getValue: () => {
|
|
495
|
+
const today = new Date();
|
|
496
|
+
const start = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
497
|
+
const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
|
|
498
|
+
return {
|
|
499
|
+
start: formatDate(start),
|
|
500
|
+
end: formatDate(end)
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
label: 'Last Month',
|
|
506
|
+
getValue: () => {
|
|
507
|
+
const today = new Date();
|
|
508
|
+
const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);
|
|
509
|
+
const end = new Date(today.getFullYear(), today.getMonth(), 0);
|
|
510
|
+
return {
|
|
511
|
+
start: formatDate(start),
|
|
512
|
+
end: formatDate(end)
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
label: 'Quarter to Date',
|
|
518
|
+
getValue: () => {
|
|
519
|
+
const today = new Date();
|
|
520
|
+
const currentMonth = today.getMonth();
|
|
521
|
+
const quarterStartMonth = Math.floor(currentMonth / 3) * 3;
|
|
522
|
+
const start = new Date(today.getFullYear(), quarterStartMonth, 1);
|
|
523
|
+
return {
|
|
524
|
+
start: formatDate(start),
|
|
525
|
+
end: formatDate(today)
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
];
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
#### **Even Better** - Use Pre-built Utilities 🚀
|
|
533
|
+
|
|
534
|
+
We provide **ready-to-use preset utilities** for common scenarios:
|
|
535
|
+
|
|
536
|
+
```typescript
|
|
537
|
+
import { CommonPresets } from '@oneluiz/dual-datepicker';
|
|
538
|
+
|
|
539
|
+
// Dashboard presets
|
|
540
|
+
presets = CommonPresets.dashboard;
|
|
541
|
+
// → Today, Yesterday, Last 7 days, Last 30 days, This month, Last month
|
|
542
|
+
|
|
543
|
+
// Reporting presets
|
|
544
|
+
presets = CommonPresets.reporting;
|
|
545
|
+
// → Today, This week, Last week, This month, Last month, This quarter, Last quarter
|
|
546
|
+
|
|
547
|
+
// Financial/ERP presets
|
|
548
|
+
presets = CommonPresets.financial;
|
|
549
|
+
// → Month to date, Quarter to date, Year to date, Last month, Last quarter, Last year
|
|
550
|
+
|
|
551
|
+
// Analytics/BI presets
|
|
552
|
+
presets = CommonPresets.analytics;
|
|
553
|
+
// → Last 7/14/30/60/90/180/365 days
|
|
554
|
+
|
|
555
|
+
// Simple presets
|
|
556
|
+
presets = CommonPresets.simple;
|
|
557
|
+
// → Today, Last 7 days, Last 30 days, This year
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
#### Create Your Own Utilities
|
|
561
|
+
|
|
562
|
+
Import individual utilities and mix them:
|
|
563
|
+
|
|
564
|
+
```typescript
|
|
565
|
+
import {
|
|
566
|
+
getToday,
|
|
567
|
+
getThisMonth,
|
|
568
|
+
getLastMonth,
|
|
569
|
+
getQuarterToDate,
|
|
570
|
+
getYearToDate,
|
|
571
|
+
PresetConfig
|
|
572
|
+
} from '@oneluiz/dual-datepicker';
|
|
573
|
+
|
|
574
|
+
customPresets: PresetConfig[] = [
|
|
575
|
+
{ label: 'Today', getValue: getToday },
|
|
576
|
+
{ label: 'This Month', getValue: getThisMonth },
|
|
577
|
+
{ label: 'Last Month', getValue: getLastMonth },
|
|
578
|
+
{ label: 'Quarter to Date', getValue: getQuarterToDate },
|
|
579
|
+
{ label: 'Year to Date', getValue: getYearToDate },
|
|
580
|
+
{
|
|
581
|
+
label: 'Custom Logic',
|
|
582
|
+
getValue: () => {
|
|
583
|
+
// Your custom date calculation
|
|
584
|
+
return { start: '2026-01-01', end: '2026-12-31' };
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
];
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
#### Why This Is Powerful
|
|
591
|
+
|
|
592
|
+
✅ **Perfect for Dashboards** - "Last 7 days", "Month to date", "Quarter to date"
|
|
593
|
+
✅ **Perfect for Reporting** - "This week", "Last week", "This quarter"
|
|
594
|
+
✅ **Perfect for Financial Systems** - "Quarter to date", "Year to date", "Fiscal year"
|
|
595
|
+
✅ **Perfect for Analytics** - Consistent date ranges for BI tools
|
|
596
|
+
✅ **Perfect for ERP** - Custom business logic and fiscal calendars
|
|
597
|
+
|
|
598
|
+
**Angular Material doesn't offer this level of flexibility!** 🎯
|
|
599
|
+
|
|
470
600
|
```html
|
|
471
601
|
<ngx-dual-datepicker
|
|
472
602
|
[(ngModel)]="dateRange"
|
|
@@ -534,14 +664,23 @@ export class MyComponent {
|
|
|
534
664
|
### Types
|
|
535
665
|
|
|
536
666
|
```typescript
|
|
537
|
-
|
|
667
|
+
interface DateRange {
|
|
668
|
+
fechaInicio: string; // ISO date format: 'YYYY-MM-DD'
|
|
538
669
|
fechaFin: string; // ISO date format: 'YYYY-MM-DD'
|
|
539
670
|
rangoTexto: string; // Display text: 'DD Mon - DD Mon'
|
|
540
671
|
}
|
|
541
672
|
|
|
673
|
+
interface PresetRange {
|
|
674
|
+
start: string; // ISO date format: 'YYYY-MM-DD'
|
|
675
|
+
end: string; // ISO date format: 'YYYY-MM-DD'
|
|
676
|
+
}
|
|
677
|
+
|
|
542
678
|
interface PresetConfig {
|
|
543
679
|
label: string;
|
|
544
|
-
|
|
680
|
+
/** @deprecated Use getValue() instead for more flexibility */
|
|
681
|
+
daysAgo?: number;
|
|
682
|
+
/** NEW v2.6.0 - Function that returns date range with custom logic */
|
|
683
|
+
getValue?: () => PresetRange;
|
|
545
684
|
}
|
|
546
685
|
|
|
547
686
|
interface LocaleConfig {
|
|
@@ -550,7 +689,6 @@ interface LocaleConfig {
|
|
|
550
689
|
dayNames?: string[]; // Full day names (7 items, starting Sunday)
|
|
551
690
|
dayNamesShort?: string[]; // Short day names (7 items, starting Sunday)
|
|
552
691
|
firstDayOfWeek?: number; // 0 = Sunday, 1 = Monday, etc. (not yet implemented)
|
|
553
|
-
daysAgo: number;
|
|
554
692
|
}
|
|
555
693
|
```
|
|
556
694
|
|
|
@@ -678,17 +816,26 @@ export class ExampleComponent {
|
|
|
678
816
|
- Angular 19.0.0 or higher
|
|
679
817
|
- Angular 20.0.0 or higher
|
|
680
818
|
|
|
681
|
-
##
|
|
819
|
+
## 🗺️ Roadmap
|
|
820
|
+
|
|
821
|
+
Recently shipped:
|
|
822
|
+
|
|
823
|
+
**v2.6.0:**
|
|
824
|
+
- ✅ **Flexible Preset System** - `getValue()` pattern for custom date logic (This month, Last month, Quarter to date, etc.)
|
|
825
|
+
- ✅ **Pre-built Preset Utilities** - CommonPresets for Dashboard, Reporting, Financial, Analytics
|
|
826
|
+
- ✅ **Real Differentiator** - Perfect for ERP, BI, POS, and Reporting systems
|
|
827
|
+
|
|
828
|
+
**v2.5.0:**
|
|
829
|
+
- ✅ **Date Adapter System** - Support for DayJS, date-fns, Luxon, and custom date libraries
|
|
682
830
|
|
|
683
831
|
Planned features and improvements:
|
|
684
832
|
|
|
685
833
|
- ⬜ **Complete keyboard navigation** - Arrow keys, Enter/Space, Tab, Escape
|
|
686
834
|
- ⬜ **Full accessibility audit** - WCAG 2.1 AA compliance
|
|
687
|
-
- ⬜ **Presets improvements** - More flexible preset configurations
|
|
688
835
|
- ⬜ **Multi-range support** - Select multiple date ranges
|
|
689
836
|
- ⬜ **Theming system** - Pre-built theme presets
|
|
690
837
|
|
|
691
|
-
##
|
|
838
|
+
## 📄 License
|
|
692
839
|
|
|
693
840
|
MIT © Luis Cortes
|
|
694
841
|
|
|
@@ -6,9 +6,15 @@ export interface DateRange {
|
|
|
6
6
|
fechaFin: string;
|
|
7
7
|
rangoTexto: string;
|
|
8
8
|
}
|
|
9
|
+
export interface PresetRange {
|
|
10
|
+
start: string;
|
|
11
|
+
end: string;
|
|
12
|
+
}
|
|
9
13
|
export interface PresetConfig {
|
|
10
14
|
label: string;
|
|
11
|
-
|
|
15
|
+
/** @deprecated Use getValue() instead for more flexibility */
|
|
16
|
+
daysAgo?: number;
|
|
17
|
+
getValue?: () => PresetRange;
|
|
12
18
|
}
|
|
13
19
|
export interface LocaleConfig {
|
|
14
20
|
monthNames?: string[];
|
|
@@ -210,10 +210,27 @@ export class DualDatepickerComponent {
|
|
|
210
210
|
return this.locale.dayNamesShort || this.defaultDayNamesShort;
|
|
211
211
|
}
|
|
212
212
|
seleccionarRangoPredefinido(preset) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
213
|
+
let start;
|
|
214
|
+
let end;
|
|
215
|
+
// New flexible pattern with getValue()
|
|
216
|
+
if (preset.getValue) {
|
|
217
|
+
const range = preset.getValue();
|
|
218
|
+
start = range.start;
|
|
219
|
+
end = range.end;
|
|
220
|
+
}
|
|
221
|
+
// Backward compatibility with daysAgo pattern
|
|
222
|
+
else if (preset.daysAgo !== undefined) {
|
|
223
|
+
const hoy = this.dateAdapter.today();
|
|
224
|
+
const fechaInicio = this.dateAdapter.addDays(hoy, -preset.daysAgo);
|
|
225
|
+
start = this.formatearFecha(fechaInicio);
|
|
226
|
+
end = this.formatearFecha(hoy);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
console.error('PresetConfig must have either getValue() or daysAgo');
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
this.fechaInicio = start;
|
|
233
|
+
this.fechaFin = end;
|
|
217
234
|
this.actualizarRangoFechasTexto();
|
|
218
235
|
this.generarCalendarios();
|
|
219
236
|
if (this.closeOnPresetSelection) {
|
|
@@ -342,4 +359,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
342
359
|
type: HostListener,
|
|
343
360
|
args: ['document:click', ['$event']]
|
|
344
361
|
}] } });
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vc3JjL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxZQUFZLEVBQWMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQXVDMUQsTUFBTSxPQUFPLHVCQUF1QjtJQW9EZDtJQW5EWCxXQUFXLEdBQVcsbUJBQW1CLENBQUM7SUFDMUMsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDakMsc0JBQXNCLEdBQVksSUFBSSxDQUFDO0lBQ3ZDLG1CQUFtQixHQUFZLElBQUksQ0FBQztJQUNwQyxPQUFPLEdBQW1CO1FBQ2pDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1FBQ3BDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLEVBQUUsS0FBSyxF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Q0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQXdDUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgc2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIERBVEVfQURBUFRFUiB9IGZyb20gJy4vZGF0ZS1hZGFwdGVyJztcbmltcG9ydCB7IE5hdGl2ZURhdGVBZGFwdGVyIH0gZnJvbSAnLi9uYXRpdmUtZGF0ZS1hZGFwdGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXRlUmFuZ2Uge1xuICBmZWNoYUluaWNpbzogc3RyaW5nO1xuICBmZWNoYUZpbjogc3RyaW5nO1xuICByYW5nb1RleHRvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0Q29uZmlnIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGF5c0FnbzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsZUNvbmZpZyB7XG4gIG1vbnRoTmFtZXM/OiBzdHJpbmdbXTtcbiAgbW9udGhOYW1lc1Nob3J0Pzogc3RyaW5nW107XG4gIGRheU5hbWVzPzogc3RyaW5nW107XG4gIGRheU5hbWVzU2hvcnQ/OiBzdHJpbmdbXTtcbiAgZmlyc3REYXlPZldlZWs/OiBudW1iZXI7IC8vIDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy5cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWR1YWwtZGF0ZXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IER1YWxEYXRlcGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQVRFX0FEQVBURVIsXG4gICAgICB1c2VDbGFzczogTmF0aXZlRGF0ZUFkYXB0ZXJcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRHVhbERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBkYXRlIHJhbmdlJztcbiAgQElucHV0KCkgZmVjaGFJbmljaW86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBmZWNoYUZpbjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dQcmVzZXRzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NsZWFyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uUHJlc2V0U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xvc2VPbkNsaWNrT3V0c2lkZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHByZXNldHM6IFByZXNldENvbmZpZ1tdID0gW1xuICAgIHsgbGFiZWw6ICdMYXN0IG1vbnRoJywgZGF5c0FnbzogMzAgfSxcbiAgICB7IGxhYmVsOiAnTGFzdCA2IG1vbnRocycsIGRheXNBZ286IDE4MCB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IHllYXInLCBkYXlzQWdvOiAzNjUgfVxuICBdO1xuICBASW5wdXQoKSBpbnB1dEJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmZmYnO1xuICBASW5wdXQoKSBpbnB1dFRleHRDb2xvcjogc3RyaW5nID0gJyM0OTUwNTcnO1xuICBASW5wdXQoKSBpbnB1dEJvcmRlckNvbG9yOiBzdHJpbmcgPSAnI2NlZDRkYSc7XG4gIEBJbnB1dCgpIGlucHV0Qm9yZGVyQ29sb3JIb3Zlcjogc3RyaW5nID0gJyNjZWQ0ZGEnO1xuICBASW5wdXQoKSBpbnB1dEJvcmRlckNvbG9yRm9jdXM6IHN0cmluZyA9ICcjODBiZGZmJztcbiAgQElucHV0KCkgaW5wdXRQYWRkaW5nOiBzdHJpbmcgPSAnMC4zNzVyZW0gMC43NXJlbSc7XG4gIEBJbnB1dCgpIGxvY2FsZTogTG9jYWxlQ29uZmlnID0ge307XG5cbiAgQE91dHB1dCgpIGRhdGVSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPigpO1xuICBAT3V0cHV0KCkgZGF0ZVJhbmdlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZT4oKTtcblxuICAvLyBEYXRlIGFkYXB0ZXIgaW5qZWN0aW9uXG4gIHByaXZhdGUgZGF0ZUFkYXB0ZXIgPSBpbmplY3Q8RGF0ZUFkYXB0ZXI+KERBVEVfQURBUFRFUik7XG5cbiAgLy8gU2lnbmFscyBmb3IgcmVhY3RpdmUgc3RhdGVcbiAgbW9zdHJhckRhdGVQaWNrZXIgPSBzaWduYWwoZmFsc2UpO1xuICByYW5nb0ZlY2hhcyA9IHNpZ25hbCgnJyk7XG4gIGZlY2hhU2VsZWNjaW9uYW5kb0luaWNpbyA9IHNpZ25hbCh0cnVlKTtcbiAgbWVzQWN0dWFsID0gc2lnbmFsKHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKSk7XG4gIG1lc0FudGVyaW9yID0gc2lnbmFsKHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKSk7XG4gIGRpYXNNZXNBY3R1YWwgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgZGlhc01lc0FudGVyaW9yID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIGlzRGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIENvbXB1dGVkIHZhbHVlc1xuICBub21icmVNZXNBY3R1YWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldE5vbWJyZU1lcyh0aGlzLm1lc0FjdHVhbCgpKSk7XG4gIG5vbWJyZU1lc0FudGVyaW9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXROb21icmVNZXModGhpcy5tZXNBbnRlcmlvcigpKSk7XG4gIGRpYXNTZW1hbmEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldERheU5hbWVzKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE1vbnRoTmFtZXMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TW9udGhOYW1lc1Nob3J0ID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHREYXlOYW1lcyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0RGF5TmFtZXNTaG9ydCA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddO1xuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGNhbGxiYWNrc1xuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAvLyBFZmZlY3QgdG8gZW1pdCBjaGFuZ2VzIHdoZW4gZGF0ZXMgY2hhbmdlXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdvID0gdGhpcy5yYW5nb0ZlY2hhcygpO1xuICAgICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gfHwgdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0RGF0ZVJhbmdlVmFsdWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9zdHJhckRhdGVQaWNrZXIoKSAmJiB0aGlzLmNsb3NlT25DbGlja091dHNpZGUpIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XG4gICAgICAgIHRoaXMuY2VycmFyRGF0ZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgIHRoaXMuYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTtcbiAgICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydmZWNoYUluaWNpbyddIHx8IGNoYW5nZXNbJ2ZlY2hhRmluJ10pIHtcbiAgICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgICAgdGhpcy5hY3R1YWxpemFyUmFuZ29GZWNoYXNUZXh0bygpO1xuICAgICAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5mZWNoYUluaWNpbyAmJiAhdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLnJhbmdvRmVjaGFzLnNldCgnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0ZWFyRmVjaGEoZmVjaGE6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoZmVjaGEpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZmVjaGEpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcodGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGZlY2hhKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgfVxuXG4gIGZvcm1hdGVhckZlY2hhRGlzcGxheShmZWNoYVN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWZlY2hhU3RyKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZmVjaGEgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGZlY2hhU3RyKTtcbiAgICBpZiAoIWZlY2hhKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IHRoaXMubG9jYWxlLm1vbnRoTmFtZXNTaG9ydCB8fCB0aGlzLmRlZmF1bHRNb250aE5hbWVzU2hvcnQ7XG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShmZWNoYSl9ICR7bW9udGhOYW1lc1t0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGZlY2hhKV19YDtcbiAgfVxuXG4gIGFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgIGNvbnN0IGluaWNpbyA9IHRoaXMuZm9ybWF0ZWFyRmVjaGFEaXNwbGF5KHRoaXMuZmVjaGFJbmljaW8pO1xuICAgICAgY29uc3QgZmluID0gdGhpcy5mb3JtYXRlYXJGZWNoYURpc3BsYXkodGhpcy5mZWNoYUZpbik7XG4gICAgICB0aGlzLnJhbmdvRmVjaGFzLnNldChgJHtpbmljaW99IC0gJHtmaW59YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEYXRlUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIudXBkYXRlKHZhbHVlID0+ICF2YWx1ZSk7XG4gICAgaWYgKHRoaXMubW9zdHJhckRhdGVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8uc2V0KHRydWUpO1xuICAgICAgY29uc3QgbWVzQWN0dWFsVmFsdWUgPSB0aGlzLm1lc0FjdHVhbCgpO1xuICAgICAgY29uc3QgYcOxbyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihtZXNBY3R1YWxWYWx1ZSk7XG4gICAgICBjb25zdCBtZXMgPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKG1lc0FjdHVhbFZhbHVlKTtcbiAgICAgIGNvbnN0IG1lc0FudGVyaW9yRGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShhw7FvLCBtZXMgLSAxLCAxKTtcbiAgICAgIHRoaXMubWVzQW50ZXJpb3Iuc2V0KG1lc0FudGVyaW9yRGF0ZSk7XG4gICAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgY2VycmFyRGF0ZVBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLm1vc3RyYXJEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGdlbmVyYXJDYWxlbmRhcmlvcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYXNNZXNBbnRlcmlvci5zZXQodGhpcy5nZW5lcmFyQ2FsZW5kYXJpb01lcyh0aGlzLm1lc0FudGVyaW9yKCkpKTtcbiAgICB0aGlzLmRpYXNNZXNBY3R1YWwuc2V0KHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9NZXModGhpcy5tZXNBY3R1YWwoKSkpO1xuICB9XG5cbiAgZ2VuZXJhckNhbGVuZGFyaW9NZXMoZmVjaGE6IERhdGUpOiBhbnlbXSB7XG4gICAgY29uc3QgYcOxbyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihmZWNoYSk7XG4gICAgY29uc3QgbWVzID0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChmZWNoYSk7XG4gICAgY29uc3QgcHJpbWVyRGlhID0gdGhpcy5kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGHDsW8sIG1lcywgMSk7XG4gICAgY29uc3QgdWx0aW1vRGlhID0gdGhpcy5kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGHDsW8sIG1lcyArIDEsIDApO1xuICAgIGNvbnN0IGRpYXNFbk1lcyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh1bHRpbW9EaWEpO1xuICAgIGNvbnN0IHByaW1lckRpYVNlbWFuYSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF5KHByaW1lckRpYSk7XG5cbiAgICBjb25zdCBkaWFzTWVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1lckRpYVNlbWFuYTsgaSsrKSB7XG4gICAgICBkaWFzTWVzLnB1c2goeyBkaWE6IG51bGwsIGVzTWVzQWN0dWFsOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBkaWEgPSAxOyBkaWEgPD0gZGlhc0VuTWVzOyBkaWErKykge1xuICAgICAgY29uc3QgZmVjaGFEaWEgPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoYcOxbywgbWVzLCBkaWEpO1xuICAgICAgY29uc3QgZmVjaGFTdHIgPSB0aGlzLmZvcm1hdGVhckZlY2hhKGZlY2hhRGlhKTtcbiAgICAgIGRpYXNNZXMucHVzaCh7XG4gICAgICAgIGRpYTogZGlhLFxuICAgICAgICBmZWNoYTogZmVjaGFTdHIsXG4gICAgICAgIGVzTWVzQWN0dWFsOiB0cnVlLFxuICAgICAgICBlc0luaWNpbzogdGhpcy5mZWNoYUluaWNpbyA9PT0gZmVjaGFTdHIsXG4gICAgICAgIGVzRmluOiB0aGlzLmZlY2hhRmluID09PSBmZWNoYVN0cixcbiAgICAgICAgZW5SYW5nbzogdGhpcy5lc3RhRW5SYW5nbyhmZWNoYVN0cilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkaWFzTWVzO1xuICB9XG5cbiAgZXN0YUVuUmFuZ28oZmVjaGFTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5mZWNoYUluaWNpbyB8fCAhdGhpcy5mZWNoYUZpbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBmZWNoYVN0ciA+PSB0aGlzLmZlY2hhSW5pY2lvICYmIGZlY2hhU3RyIDw9IHRoaXMuZmVjaGFGaW47XG4gIH1cblxuICBzZWxlY2Npb25hckRpYShkaWFPYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZGlhT2JqLmVzTWVzQWN0dWFsIHx8IHRoaXMuaXNEaXNhYmxlZCgpKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8oKSkge1xuICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IGRpYU9iai5mZWNoYTtcbiAgICAgIHRoaXMuZmVjaGFGaW4gPSAnJztcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVtaXRpckNhbWJpbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGlhT2JqLmZlY2hhIDwgdGhpcy5mZWNoYUluaWNpbykge1xuICAgICAgICB0aGlzLmZlY2hhRmluID0gdGhpcy5mZWNoYUluaWNpbztcbiAgICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IGRpYU9iai5mZWNoYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmVjaGFGaW4gPSBkaWFPYmouZmVjaGE7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk7XG4gICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZW1pdGlyQ2FtYmlvKCk7XG4gICAgICB0aGlzLmVtaXRpclNlbGVjY2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICB9XG5cbiAgY2FtYmlhck1lcyhkaXJlY2Npb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1lc0FjdHVhbFZhbHVlID0gdGhpcy5tZXNBY3R1YWwoKTtcbiAgICBjb25zdCBhw7FvID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKG1lc0FjdHVhbFZhbHVlKTtcbiAgICBjb25zdCBtZXMgPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKG1lc0FjdHVhbFZhbHVlKTtcbiAgICBjb25zdCBudWV2b01lc0FjdHVhbCA9IHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShhw7FvLCBtZXMgKyBkaXJlY2Npb24sIDEpO1xuICAgIHRoaXMubWVzQWN0dWFsLnNldChudWV2b01lc0FjdHVhbCk7XG4gICAgXG4gICAgY29uc3QgYcOxb051ZXZvID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKG51ZXZvTWVzQWN0dWFsKTtcbiAgICBjb25zdCBtZXNOdWV2byA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobnVldm9NZXNBY3R1YWwpO1xuICAgIGNvbnN0IG1lc0FudGVyaW9yTnVldm8gPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoYcOxb051ZXZvLCBtZXNOdWV2byAtIDEsIDEpO1xuICAgIHRoaXMubWVzQW50ZXJpb3Iuc2V0KG1lc0FudGVyaW9yTnVldm8pO1xuICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gIH1cblxuICBnZXROb21icmVNZXMoZmVjaGE6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSB0aGlzLmxvY2FsZS5tb250aE5hbWVzIHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXM7XG4gICAgcmV0dXJuIGAke21vbnRoTmFtZXNbdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChmZWNoYSldfSAke3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihmZWNoYSl9YDtcbiAgfVxuXG4gIGdldERheU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUuZGF5TmFtZXNTaG9ydCB8fCB0aGlzLmRlZmF1bHREYXlOYW1lc1Nob3J0O1xuICB9XG5cbiAgc2VsZWNjaW9uYXJSYW5nb1ByZWRlZmluaWRvKHByZXNldDogUHJlc2V0Q29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgaG95ID0gdGhpcy5kYXRlQWRhcHRlci50b2RheSgpO1xuICAgIGNvbnN0IGZlY2hhSW5pY2lvID0gdGhpcy5kYXRlQWRhcHRlci5hZGREYXlzKGhveSwgLXByZXNldC5kYXlzQWdvKTtcblxuICAgIHRoaXMuZmVjaGFJbmljaW8gPSB0aGlzLmZvcm1hdGVhckZlY2hhKGZlY2hhSW5pY2lvKTtcbiAgICB0aGlzLmZlY2hhRmluID0gdGhpcy5mb3JtYXRlYXJGZWNoYShob3kpO1xuICAgIHRoaXMuYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTtcbiAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgIGlmICh0aGlzLmNsb3NlT25QcmVzZXRTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0aXJTZWxlY2Npb24oKTtcbiAgfVxuXG4gIGxpbXBpYXIoKTogdm9pZCB7XG4gICAgdGhpcy5mZWNoYUluaWNpbyA9ICcnO1xuICAgIHRoaXMuZmVjaGFGaW4gPSAnJztcbiAgICB0aGlzLnJhbmdvRmVjaGFzLnNldCgnJyk7XG4gICAgdGhpcy5tb3N0cmFyRGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldCh0cnVlKTtcbiAgICB0aGlzLmVtaXRpckNhbWJpbygpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRpckNhbWJpbygpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVSYW5nZUNoYW5nZS5lbWl0KHtcbiAgICAgIGZlY2hhSW5pY2lvOiB0aGlzLmZlY2hhSW5pY2lvLFxuICAgICAgZmVjaGFGaW46IHRoaXMuZmVjaGFGaW4sXG4gICAgICByYW5nb1RleHRvOiB0aGlzLnJhbmdvRmVjaGFzKClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdGlyU2VsZWNjaW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVJhbmdlU2VsZWN0ZWQuZW1pdCh7XG4gICAgICBmZWNoYUluaWNpbzogdGhpcy5mZWNoYUluaWNpbyxcbiAgICAgIGZlY2hhRmluOiB0aGlzLmZlY2hhRmluLFxuICAgICAgcmFuZ29UZXh0bzogdGhpcy5yYW5nb0ZlY2hhcygpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVSYW5nZVZhbHVlKCk6IERhdGVSYW5nZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZlY2hhSW5pY2lvOiB0aGlzLmZlY2hhSW5pY2lvLFxuICAgICAgZmVjaGFGaW46IHRoaXMuZmVjaGFGaW4sXG4gICAgICByYW5nb1RleHRvOiB0aGlzLnJhbmdvRmVjaGFzKClcbiAgICB9O1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IHZhbHVlLmZlY2hhSW5pY2lvIHx8ICcnO1xuICAgICAgdGhpcy5mZWNoYUZpbiA9IHZhbHVlLmZlY2hhRmluIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gJiYgdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLmFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk7XG4gICAgICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmVjaGFJbmljaW8gPSAnJztcbiAgICAgIHRoaXMuZmVjaGFGaW4gPSAnJztcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci13cmFwcGVyXCIgXG4gIFtzdHlsZS4tLWlucHV0LWJvcmRlci1ob3Zlcl09XCJpbnB1dEJvcmRlckNvbG9ySG92ZXJcIlxuICBbc3R5bGUuLS1pbnB1dC1ib3JkZXItZm9jdXNdPVwiaW5wdXRCb3JkZXJDb2xvckZvY3VzXCI+XG4gIDxpbnB1dCBcbiAgICB0eXBlPVwidGV4dFwiIFxuICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1pbnB1dFwiIFxuICAgIFt2YWx1ZV09XCJyYW5nb0ZlY2hhcygpXCIgXG4gICAgKGNsaWNrKT1cInRvZ2dsZURhdGVQaWNrZXIoKVwiIFxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBpbnB1dEJhY2tncm91bmRDb2xvcixcbiAgICAgICdjb2xvcic6IGlucHV0VGV4dENvbG9yLFxuICAgICAgJ2JvcmRlci1jb2xvcic6IGlucHV0Qm9yZGVyQ29sb3IsXG4gICAgICAncGFkZGluZyc6IGlucHV0UGFkZGluZ1xuICAgIH1cIlxuICAgIHJlYWRvbmx5PlxuXG4gIEBpZiAobW9zdHJhckRhdGVQaWNrZXIoKSkge1xuICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZHJvcGRvd25cIj5cbiAgICBAaWYgKHNob3dQcmVzZXRzKSB7XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXByZXNldHNcIj5cbiAgICAgIEBmb3IgKHByZXNldCBvZiBwcmVzZXRzOyB0cmFjayBwcmVzZXQubGFiZWwpIHtcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY2Npb25hclJhbmdvUHJlZGVmaW5pZG8ocHJlc2V0KVwiPnt7IHByZXNldC5sYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UtY2FsZW5kYXJcIiAoY2xpY2spPVwiY2VycmFyRGF0ZVBpY2tlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmICghc2hvd1ByZXNldHMpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyLW9ubHktY2xvc2VcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLWNhbGVuZGFyXCIgKGNsaWNrKT1cImNlcnJhckRhdGVQaWNrZXIoKVwiIHRpdGxlPVwiQ2xvc2VcIj5cbiAgICAgICAgw5dcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gQ2FsZW5kYXJzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhcnNcIj5cbiAgICAgIDwhLS0gUHJldmlvdXMgbW9udGggY2FsZW5kYXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItY2FsZW5kYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW1iaWFyTWVzKC0xKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMS4zNTQgMS42NDZhLjUuNSAwIDAgMSAwIC43MDhMNS43MDcgOGw1LjY0NyA1LjY0NmEuNS41IDAgMCAxLS43MDguNzA4bC02LTZhLjUuNSAwIDAgMSAwLS43MDhsNi02YS41LjUgMCAwIDEgLjcwOCAwelwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuPnt7IG5vbWJyZU1lc0FudGVyaW9yKCkgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4elwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXdlZWtkYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5TmFtZSBvZiBkaWFzU2VtYW5hKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHNwYW4+e3sgZGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRpYU9iaiBvZiBkaWFzTWVzQW50ZXJpb3IoKTsgdHJhY2sgZGlhT2JqLmZlY2hhIHx8ICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5XCIgXG4gICAgICAgICAgICAgIFtjbGFzcy5lbXB0eV09XCIhZGlhT2JqLmVzTWVzQWN0dWFsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRpYU9iai5lc0luaWNpbyB8fCBkaWFPYmouZXNGaW5cIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGlhT2JqLmVuUmFuZ28gJiYgIWRpYU9iai5lc0luaWNpbyAmJiAhZGlhT2JqLmVzRmluXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjY2lvbmFyRGlhKGRpYU9iailcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRpYU9iai5lc01lc0FjdHVhbFwiPlxuICAgICAgICAgICAgICB7eyBkaWFPYmouZGlhIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ3VycmVudCBtb250aCBjYWxlbmRhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTExLjM1NCAxLjY0NmEuNS41IDAgMCAxIDAgLjcwOEw1LjcwNyA4bDUuNjQ3IDUuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhsLTYtNmEuNS41IDAgMCAxIDAtLjcwOGw2LTZhLjUuNSAwIDAgMSAuNzA4IDB6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4+e3sgbm9tYnJlTWVzQWN0dWFsKCkgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbWJpYXJNZXMoMSlcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNC42NDYgMS42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEgMCAuNzA4bC02IDZhLjUuNSAwIDAgMS0uNzA4LS43MDhMMTAuMjkzIDggNC42NDYgMi4zNTRhLjUuNSAwIDAgMSAwLS43MDh6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItd2Vla2RheXNcIj5cbiAgICAgICAgICBAZm9yIChkYXlOYW1lIG9mIGRpYXNTZW1hbmEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBkYXlOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGlhT2JqIG9mIGRpYXNNZXNBY3R1YWwoKTsgdHJhY2sgZGlhT2JqLmZlY2hhIHx8ICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5XCIgXG4gICAgICAgICAgICAgIFtjbGFzcy5lbXB0eV09XCIhZGlhT2JqLmVzTWVzQWN0dWFsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRpYU9iai5lc0luaWNpbyB8fCBkaWFPYmouZXNGaW5cIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGlhT2JqLmVuUmFuZ28gJiYgIWRpYU9iai5lc0luaWNpbyAmJiAhZGlhT2JqLmVzRmluXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjY2lvbmFyRGlhKGRpYU9iailcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRpYU9iai5lc01lc0FjdHVhbFwiPlxuICAgICAgICAgICAgICB7eyBkaWFPYmouZGlhIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvb3RlciB3aXRoIGNsZWFyIGJ1dHRvbiAtLT5cbiAgICBAaWYgKHNob3dDbGVhckJ1dHRvbikge1xuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1mb290ZXJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsZWFyXCIgKGNsaWNrKT1cImxpbXBpYXIoKVwiIHRpdGxlPVwiQ2xlYXIgc2VsZWN0aW9uXCI+XG4gICAgICAgIENsZWFyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
|
|
362
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vc3JjL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxZQUFZLEVBQWMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQThDMUQsTUFBTSxPQUFPLHVCQUF1QjtJQW9EZDtJQW5EWCxXQUFXLEdBQVcsbUJBQW1CLENBQUM7SUFDMUMsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDakMsc0JBQXNCLEdBQVksSUFBSSxDQUFDO0lBQ3ZDLG1CQUFtQixHQUFZLElBQUksQ0FBQztJQUNwQyxPQUFPLEdBQW1CO1FBQ2pDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1FBQ3BDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLEVBQUUsS0FBSyxF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d0IsQ0FBQzs0QkFDdEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLFlBQVk7NEJBQ3JCLFFBQVEsRUFBRSxpQkFBaUI7eUJBQzVCO3FCQUNGOytFQUdRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBd0NQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBzaWduYWwsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgREFURV9BREFQVEVSIH0gZnJvbSAnLi9kYXRlLWFkYXB0ZXInO1xuaW1wb3J0IHsgTmF0aXZlRGF0ZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLWFkYXB0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVSYW5nZSB7XG4gIGZlY2hhSW5pY2lvOiBzdHJpbmc7XG4gIGZlY2hhRmluOiBzdHJpbmc7XG4gIHJhbmdvVGV4dG86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRSYW5nZSB7XG4gIHN0YXJ0OiBzdHJpbmc7XG4gIGVuZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByZXNldENvbmZpZyB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgZ2V0VmFsdWUoKSBpbnN0ZWFkIGZvciBtb3JlIGZsZXhpYmlsaXR5ICovXG4gIGRheXNBZ28/OiBudW1iZXI7XG4gIGdldFZhbHVlPzogKCkgPT4gUHJlc2V0UmFuZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxlQ29uZmlnIHtcbiAgbW9udGhOYW1lcz86IHN0cmluZ1tdO1xuICBtb250aE5hbWVzU2hvcnQ/OiBzdHJpbmdbXTtcbiAgZGF5TmFtZXM/OiBzdHJpbmdbXTtcbiAgZGF5TmFtZXNTaG9ydD86IHN0cmluZ1tdO1xuICBmaXJzdERheU9mV2Vlaz86IG51bWJlcjsgLy8gMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLlxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZHVhbC1kYXRlcGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRHVhbERhdGVwaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IERBVEVfQURBUFRFUixcbiAgICAgIHVzZUNsYXNzOiBOYXRpdmVEYXRlQWRhcHRlclxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGRhdGUgcmFuZ2UnO1xuICBASW5wdXQoKSBmZWNoYUluaWNpbzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGZlY2hhRmluOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2hvd1ByZXNldHM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q2xlYXJCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2xvc2VPblNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NlT25QcmVzZXRTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uQ2xpY2tPdXRzaWRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHJlc2V0czogUHJlc2V0Q29uZmlnW10gPSBbXG4gICAgeyBsYWJlbDogJ0xhc3QgbW9udGgnLCBkYXlzQWdvOiAzMCB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IDYgbW9udGhzJywgZGF5c0FnbzogMTgwIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgeWVhcicsIGRheXNBZ286IDM2NSB9XG4gIF07XG4gIEBJbnB1dCgpIGlucHV0QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2ZmZic7XG4gIEBJbnB1dCgpIGlucHV0VGV4dENvbG9yOiBzdHJpbmcgPSAnIzQ5NTA1Nyc7XG4gIEBJbnB1dCgpIGlucHV0Qm9yZGVyQ29sb3I6IHN0cmluZyA9ICcjY2VkNGRhJztcbiAgQElucHV0KCkgaW5wdXRCb3JkZXJDb2xvckhvdmVyOiBzdHJpbmcgPSAnI2NlZDRkYSc7XG4gIEBJbnB1dCgpIGlucHV0Qm9yZGVyQ29sb3JGb2N1czogc3RyaW5nID0gJyM4MGJkZmYnO1xuICBASW5wdXQoKSBpbnB1dFBhZGRpbmc6IHN0cmluZyA9ICcwLjM3NXJlbSAwLjc1cmVtJztcbiAgQElucHV0KCkgbG9jYWxlOiBMb2NhbGVDb25maWcgPSB7fTtcblxuICBAT3V0cHV0KCkgZGF0ZVJhbmdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U+KCk7XG4gIEBPdXRwdXQoKSBkYXRlUmFuZ2VTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPigpO1xuXG4gIC8vIERhdGUgYWRhcHRlciBpbmplY3Rpb25cbiAgcHJpdmF0ZSBkYXRlQWRhcHRlciA9IGluamVjdDxEYXRlQWRhcHRlcj4oREFURV9BREFQVEVSKTtcblxuICAvLyBTaWduYWxzIGZvciByZWFjdGl2ZSBzdGF0ZVxuICBtb3N0cmFyRGF0ZVBpY2tlciA9IHNpZ25hbChmYWxzZSk7XG4gIHJhbmdvRmVjaGFzID0gc2lnbmFsKCcnKTtcbiAgZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvID0gc2lnbmFsKHRydWUpO1xuICBtZXNBY3R1YWwgPSBzaWduYWwodGhpcy5kYXRlQWRhcHRlci50b2RheSgpKTtcbiAgbWVzQW50ZXJpb3IgPSBzaWduYWwodGhpcy5kYXRlQWRhcHRlci50b2RheSgpKTtcbiAgZGlhc01lc0FjdHVhbCA9IHNpZ25hbDxhbnlbXT4oW10pO1xuICBkaWFzTWVzQW50ZXJpb3IgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgaXNEaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLy8gQ29tcHV0ZWQgdmFsdWVzXG4gIG5vbWJyZU1lc0FjdHVhbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2V0Tm9tYnJlTWVzKHRoaXMubWVzQWN0dWFsKCkpKTtcbiAgbm9tYnJlTWVzQW50ZXJpb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldE5vbWJyZU1lcyh0aGlzLm1lc0FudGVyaW9yKCkpKTtcbiAgZGlhc1NlbWFuYSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2V0RGF5TmFtZXMoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TW9udGhOYW1lcyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRNb250aE5hbWVzU2hvcnQgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdERheU5hbWVzID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHREYXlOYW1lc1Nob3J0ID0gWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ107XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgY2FsbGJhY2tzXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogRGF0ZVJhbmdlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIC8vIEVmZmVjdCB0byBlbWl0IGNoYW5nZXMgd2hlbiBkYXRlcyBjaGFuZ2VcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcmFuZ28gPSB0aGlzLnJhbmdvRmVjaGFzKCk7XG4gICAgICBpZiAodGhpcy5mZWNoYUluaWNpbyB8fCB0aGlzLmZlY2hhRmluKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5nZXREYXRlUmFuZ2VWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb3N0cmFyRGF0ZVBpY2tlcigpICYmIHRoaXMuY2xvc2VPbkNsaWNrT3V0c2lkZSkge1xuICAgICAgY29uc3QgY2xpY2tlZEluc2lkZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcbiAgICAgICAgdGhpcy5jZXJyYXJEYXRlUGlja2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gJiYgdGhpcy5mZWNoYUZpbikge1xuICAgICAgdGhpcy5hY3R1YWxpemFyUmFuZ29GZWNoYXNUZXh0bygpO1xuICAgICAgdGhpcy5nZW5lcmFyQ2FsZW5kYXJpb3MoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2ZlY2hhSW5pY2lvJ10gfHwgY2hhbmdlc1snZmVjaGFGaW4nXSkge1xuICAgICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gJiYgdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLmFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk7XG4gICAgICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmZlY2hhSW5pY2lvICYmICF0aGlzLmZlY2hhRmluKSB7XG4gICAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3JtYXRlYXJGZWNoYShmZWNoYTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihmZWNoYSk7XG4gICAgY29uc3QgbW9udGggPSBTdHJpbmcodGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChmZWNoYSkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyh0aGlzLmRhdGVBZGFwdGVyLmdldERhdGUoZmVjaGEpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICB9XG5cbiAgZm9ybWF0ZWFyRmVjaGFEaXNwbGF5KGZlY2hhU3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZmVjaGFTdHIpIHJldHVybiAnJztcbiAgICBjb25zdCBmZWNoYSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZmVjaGFTdHIpO1xuICAgIGlmICghZmVjaGEpIHJldHVybiAnJztcbiAgICBjb25zdCBtb250aE5hbWVzID0gdGhpcy5sb2NhbGUubW9udGhOYW1lc1Nob3J0IHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXNTaG9ydDtcbiAgICByZXR1cm4gYCR7dGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGZlY2hhKX0gJHttb250aE5hbWVzW3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZmVjaGEpXX1gO1xuICB9XG5cbiAgYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gJiYgdGhpcy5mZWNoYUZpbikge1xuICAgICAgY29uc3QgaW5pY2lvID0gdGhpcy5mb3JtYXRlYXJGZWNoYURpc3BsYXkodGhpcy5mZWNoYUluaWNpbyk7XG4gICAgICBjb25zdCBmaW4gPSB0aGlzLmZvcm1hdGVhckZlY2hhRGlzcGxheSh0aGlzLmZlY2hhRmluKTtcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KGAke2luaWNpb30gLSAke2Zpbn1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYW5nb0ZlY2hhcy5zZXQoJycpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZURhdGVQaWNrZXIoKTogdm9pZCB7XG4gICAgdGhpcy5tb3N0cmFyRGF0ZVBpY2tlci51cGRhdGUodmFsdWUgPT4gIXZhbHVlKTtcbiAgICBpZiAodGhpcy5tb3N0cmFyRGF0ZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLmZlY2hhU2VsZWNjaW9uYW5kb0luaWNpby5zZXQodHJ1ZSk7XG4gICAgICBjb25zdCBtZXNBY3R1YWxWYWx1ZSA9IHRoaXMubWVzQWN0dWFsKCk7XG4gICAgICBjb25zdCBhw7FvID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKG1lc0FjdHVhbFZhbHVlKTtcbiAgICAgIGNvbnN0IG1lcyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobWVzQWN0dWFsVmFsdWUpO1xuICAgICAgY29uc3QgbWVzQW50ZXJpb3JEYXRlID0gdGhpcy5kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGHDsW8sIG1lcyAtIDEsIDEpO1xuICAgICAgdGhpcy5tZXNBbnRlcmlvci5zZXQobWVzQW50ZXJpb3JEYXRlKTtcbiAgICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBjZXJyYXJEYXRlUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgZ2VuZXJhckNhbGVuZGFyaW9zKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhc01lc0FudGVyaW9yLnNldCh0aGlzLmdlbmVyYXJDYWxlbmRhcmlvTWVzKHRoaXMubWVzQW50ZXJpb3IoKSkpO1xuICAgIHRoaXMuZGlhc01lc0FjdHVhbC5zZXQodGhpcy5nZW5lcmFyQ2FsZW5kYXJpb01lcyh0aGlzLm1lc0FjdHVhbCgpKSk7XG4gIH1cblxuICBnZW5lcmFyQ2FsZW5kYXJpb01lcyhmZWNoYTogRGF0ZSk6IGFueVtdIHtcbiAgICBjb25zdCBhw7FvID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKGZlY2hhKTtcbiAgICBjb25zdCBtZXMgPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGZlY2hhKTtcbiAgICBjb25zdCBwcmltZXJEaWEgPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoYcOxbywgbWVzLCAxKTtcbiAgICBjb25zdCB1bHRpbW9EaWEgPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoYcOxbywgbWVzICsgMSwgMCk7XG4gICAgY29uc3QgZGlhc0VuTWVzID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKHVsdGltb0RpYSk7XG4gICAgY29uc3QgcHJpbWVyRGlhU2VtYW5hID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXkocHJpbWVyRGlhKTtcblxuICAgIGNvbnN0IGRpYXNNZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbWVyRGlhU2VtYW5hOyBpKyspIHtcbiAgICAgIGRpYXNNZXMucHVzaCh7IGRpYTogbnVsbCwgZXNNZXNBY3R1YWw6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGRpYSA9IDE7IGRpYSA8PSBkaWFzRW5NZXM7IGRpYSsrKSB7XG4gICAgICBjb25zdCBmZWNoYURpYSA9IHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShhw7FvLCBtZXMsIGRpYSk7XG4gICAgICBjb25zdCBmZWNoYVN0ciA9IHRoaXMuZm9ybWF0ZWFyRmVjaGEoZmVjaGFEaWEpO1xuICAgICAgZGlhc01lcy5wdXNoKHtcbiAgICAgICAgZGlhOiBkaWEsXG4gICAgICAgIGZlY2hhOiBmZWNoYVN0cixcbiAgICAgICAgZXNNZXNBY3R1YWw6IHRydWUsXG4gICAgICAgIGVzSW5pY2lvOiB0aGlzLmZlY2hhSW5pY2lvID09PSBmZWNoYVN0cixcbiAgICAgICAgZXNGaW46IHRoaXMuZmVjaGFGaW4gPT09IGZlY2hhU3RyLFxuICAgICAgICBlblJhbmdvOiB0aGlzLmVzdGFFblJhbmdvKGZlY2hhU3RyKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpYXNNZXM7XG4gIH1cblxuICBlc3RhRW5SYW5nbyhmZWNoYVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZlY2hhSW5pY2lvIHx8ICF0aGlzLmZlY2hhRmluKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGZlY2hhU3RyID49IHRoaXMuZmVjaGFJbmljaW8gJiYgZmVjaGFTdHIgPD0gdGhpcy5mZWNoYUZpbjtcbiAgfVxuXG4gIHNlbGVjY2lvbmFyRGlhKGRpYU9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKCFkaWFPYmouZXNNZXNBY3R1YWwgfHwgdGhpcy5pc0Rpc2FibGVkKCkpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmZlY2hhU2VsZWNjaW9uYW5kb0luaWNpbygpKSB7XG4gICAgICB0aGlzLmZlY2hhSW5pY2lvID0gZGlhT2JqLmZlY2hhO1xuICAgICAgdGhpcy5mZWNoYUZpbiA9ICcnO1xuICAgICAgdGhpcy5yYW5nb0ZlY2hhcy5zZXQoJycpO1xuICAgICAgdGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZW1pdGlyQ2FtYmlvKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkaWFPYmouZmVjaGEgPCB0aGlzLmZlY2hhSW5pY2lvKSB7XG4gICAgICAgIHRoaXMuZmVjaGFGaW4gPSB0aGlzLmZlY2hhSW5pY2lvO1xuICAgICAgICB0aGlzLmZlY2hhSW5pY2lvID0gZGlhT2JqLmZlY2hhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mZWNoYUZpbiA9IGRpYU9iai5mZWNoYTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5tb3N0cmFyRGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8uc2V0KHRydWUpO1xuICAgICAgdGhpcy5lbWl0aXJDYW1iaW8oKTtcbiAgICAgIHRoaXMuZW1pdGlyU2VsZWNjaW9uKCk7XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gIH1cblxuICBjYW1iaWFyTWVzKGRpcmVjY2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbWVzQWN0dWFsVmFsdWUgPSB0aGlzLm1lc0FjdHVhbCgpO1xuICAgIGNvbnN0IGHDsW8gPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIobWVzQWN0dWFsVmFsdWUpO1xuICAgIGNvbnN0IG1lcyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobWVzQWN0dWFsVmFsdWUpO1xuICAgIGNvbnN0IG51ZXZvTWVzQWN0dWFsID0gdGhpcy5kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGHDsW8sIG1lcyArIGRpcmVjY2lvbiwgMSk7XG4gICAgdGhpcy5tZXNBY3R1YWwuc2V0KG51ZXZvTWVzQWN0dWFsKTtcbiAgICBcbiAgICBjb25zdCBhw7FvTnVldm8gPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIobnVldm9NZXNBY3R1YWwpO1xuICAgIGNvbnN0IG1lc051ZXZvID0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChudWV2b01lc0FjdHVhbCk7XG4gICAgY29uc3QgbWVzQW50ZXJpb3JOdWV2byA9IHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShhw7FvTnVldm8sIG1lc051ZXZvIC0gMSwgMSk7XG4gICAgdGhpcy5tZXNBbnRlcmlvci5zZXQobWVzQW50ZXJpb3JOdWV2byk7XG4gICAgdGhpcy5nZW5lcmFyQ2FsZW5kYXJpb3MoKTtcbiAgfVxuXG4gIGdldE5vbWJyZU1lcyhmZWNoYTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IHRoaXMubG9jYWxlLm1vbnRoTmFtZXMgfHwgdGhpcy5kZWZhdWx0TW9udGhOYW1lcztcbiAgICByZXR1cm4gYCR7bW9udGhOYW1lc1t0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGZlY2hhKV19ICR7dGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKGZlY2hhKX1gO1xuICB9XG5cbiAgZ2V0RGF5TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZS5kYXlOYW1lc1Nob3J0IHx8IHRoaXMuZGVmYXVsdERheU5hbWVzU2hvcnQ7XG4gIH1cblxuICBzZWxlY2Npb25hclJhbmdvUHJlZGVmaW5pZG8ocHJlc2V0OiBQcmVzZXRDb25maWcpOiB2b2lkIHtcbiAgICBsZXQgc3RhcnQ6IHN0cmluZztcbiAgICBsZXQgZW5kOiBzdHJpbmc7XG5cbiAgICAvLyBOZXcgZmxleGlibGUgcGF0dGVybiB3aXRoIGdldFZhbHVlKClcbiAgICBpZiAocHJlc2V0LmdldFZhbHVlKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHByZXNldC5nZXRWYWx1ZSgpO1xuICAgICAgc3RhcnQgPSByYW5nZS5zdGFydDtcbiAgICAgIGVuZCA9IHJhbmdlLmVuZDtcbiAgICB9XG4gICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGRheXNBZ28gcGF0dGVyblxuICAgIGVsc2UgaWYgKHByZXNldC5kYXlzQWdvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhveSA9IHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgICAgIGNvbnN0IGZlY2hhSW5pY2lvID0gdGhpcy5kYXRlQWRhcHRlci5hZGREYXlzKGhveSwgLXByZXNldC5kYXlzQWdvKTtcbiAgICAgIHN0YXJ0ID0gdGhpcy5mb3JtYXRlYXJGZWNoYShmZWNoYUluaWNpbyk7XG4gICAgICBlbmQgPSB0aGlzLmZvcm1hdGVhckZlY2hhKGhveSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignUHJlc2V0Q29uZmlnIG11c3QgaGF2ZSBlaXRoZXIgZ2V0VmFsdWUoKSBvciBkYXlzQWdvJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mZWNoYUluaWNpbyA9IHN0YXJ0O1xuICAgIHRoaXMuZmVjaGFGaW4gPSBlbmQ7XG4gICAgdGhpcy5hY3R1YWxpemFyUmFuZ29GZWNoYXNUZXh0bygpO1xuICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgaWYgKHRoaXMuY2xvc2VPblByZXNldFNlbGVjdGlvbikge1xuICAgICAgdGhpcy5tb3N0cmFyRGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmVtaXRpclNlbGVjY2lvbigpO1xuICB9XG5cbiAgbGltcGlhcigpOiB2b2lkIHtcbiAgICB0aGlzLmZlY2hhSW5pY2lvID0gJyc7XG4gICAgdGhpcy5mZWNoYUZpbiA9ICcnO1xuICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICB0aGlzLm1vc3RyYXJEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgdGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8uc2V0KHRydWUpO1xuICAgIHRoaXMuZW1pdGlyQ2FtYmlvKCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdGlyQ2FtYmlvKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVJhbmdlQ2hhbmdlLmVtaXQoe1xuICAgICAgZmVjaGFJbmljaW86IHRoaXMuZmVjaGFJbmljaW8sXG4gICAgICBmZWNoYUZpbjogdGhpcy5mZWNoYUZpbixcbiAgICAgIHJhbmdvVGV4dG86IHRoaXMucmFuZ29GZWNoYXMoKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0aXJTZWxlY2Npb24oKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZC5lbWl0KHtcbiAgICAgIGZlY2hhSW5pY2lvOiB0aGlzLmZlY2hhSW5pY2lvLFxuICAgICAgZmVjaGFGaW46IHRoaXMuZmVjaGFGaW4sXG4gICAgICByYW5nb1RleHRvOiB0aGlzLnJhbmdvRmVjaGFzKClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVJhbmdlVmFsdWUoKTogRGF0ZVJhbmdlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmVjaGFJbmljaW86IHRoaXMuZmVjaGFJbmljaW8sXG4gICAgICBmZWNoYUZpbjogdGhpcy5mZWNoYUZpbixcbiAgICAgIHJhbmdvVGV4dG86IHRoaXMucmFuZ29GZWNoYXMoKVxuICAgIH07XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlUmFuZ2UgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmZlY2hhSW5pY2lvID0gdmFsdWUuZmVjaGFJbmljaW8gfHwgJyc7XG4gICAgICB0aGlzLmZlY2hhRmluID0gdmFsdWUuZmVjaGFGaW4gfHwgJyc7XG4gICAgICBpZiAodGhpcy5mZWNoYUluaWNpbyAmJiB0aGlzLmZlY2hhRmluKSB7XG4gICAgICAgIHRoaXMuYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTtcbiAgICAgICAgdGhpcy5nZW5lcmFyQ2FsZW5kYXJpb3MoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mZWNoYUluaWNpbyA9ICcnO1xuICAgICAgdGhpcy5mZWNoYUZpbiA9ICcnO1xuICAgICAgdGhpcy5yYW5nb0ZlY2hhcy5zZXQoJycpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogRGF0ZVJhbmdlIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNEaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLXdyYXBwZXJcIiBcbiAgW3N0eWxlLi0taW5wdXQtYm9yZGVyLWhvdmVyXT1cImlucHV0Qm9yZGVyQ29sb3JIb3ZlclwiXG4gIFtzdHlsZS4tLWlucHV0LWJvcmRlci1mb2N1c109XCJpbnB1dEJvcmRlckNvbG9yRm9jdXNcIj5cbiAgPGlucHV0IFxuICAgIHR5cGU9XCJ0ZXh0XCIgXG4gICAgY2xhc3M9XCJkYXRlcGlja2VyLWlucHV0XCIgXG4gICAgW3ZhbHVlXT1cInJhbmdvRmVjaGFzKClcIiBcbiAgICAoY2xpY2spPVwidG9nZ2xlRGF0ZVBpY2tlcigpXCIgXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGlucHV0QmFja2dyb3VuZENvbG9yLFxuICAgICAgJ2NvbG9yJzogaW5wdXRUZXh0Q29sb3IsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogaW5wdXRCb3JkZXJDb2xvcixcbiAgICAgICdwYWRkaW5nJzogaW5wdXRQYWRkaW5nXG4gICAgfVwiXG4gICAgcmVhZG9ubHk+XG5cbiAgQGlmIChtb3N0cmFyRGF0ZVBpY2tlcigpKSB7XG4gIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kcm9wZG93blwiPlxuICAgIEBpZiAoc2hvd1ByZXNldHMpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItcHJlc2V0c1wiPlxuICAgICAgQGZvciAocHJlc2V0IG9mIHByZXNldHM7IHRyYWNrIHByZXNldC5sYWJlbCkge1xuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbGVjY2lvbmFyUmFuZ29QcmVkZWZpbmlkbyhwcmVzZXQpXCI+e3sgcHJlc2V0LmxhYmVsIH19PC9idXR0b24+XG4gICAgICB9XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZS1jYWxlbmRhclwiIChjbGljayk9XCJjZXJyYXJEYXRlUGlja2VyKClcIiB0aXRsZT1cIkNsb3NlXCI+XG4gICAgICAgIMOXXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKCFzaG93UHJlc2V0cykge1xuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1oZWFkZXItb25seS1jbG9zZVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UtY2FsZW5kYXJcIiAoY2xpY2spPVwiY2VycmFyRGF0ZVBpY2tlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBDYWxlbmRhcnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiPlxuICAgICAgPCEtLSBQcmV2aW91cyBtb250aCBjYWxlbmRhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbWJpYXJNZXMoLTEpXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTExLjM1NCAxLjY0NmEuNS41IDAgMCAxIDAgLjcwOEw1LjcwNyA4bDUuNjQ3IDUuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhsLTYtNmEuNS41IDAgMCAxIDAtLjcwOGw2LTZhLjUuNSAwIDAgMSAuNzA4IDB6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4+e3sgbm9tYnJlTWVzQW50ZXJpb3IoKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNC42NDYgMS42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEgMCAuNzA4bC02IDZhLjUuNSAwIDAgMS0uNzA4LS43MDhMMTAuMjkzIDggNC42NDYgMi4zNTRhLjUuNSAwIDAgMSAwLS43MDh6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItd2Vla2RheXNcIj5cbiAgICAgICAgICBAZm9yIChkYXlOYW1lIG9mIGRpYXNTZW1hbmEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBkYXlOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGlhT2JqIG9mIGRpYXNNZXNBbnRlcmlvcigpOyB0cmFjayBkaWFPYmouZmVjaGEgfHwgJGluZGV4KSB7XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1kYXlcIiBcbiAgICAgICAgICAgICAgW2NsYXNzLmVtcHR5XT1cIiFkaWFPYmouZXNNZXNBY3R1YWxcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZGlhT2JqLmVzSW5pY2lvIHx8IGRpYU9iai5lc0ZpblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pbi1yYW5nZV09XCJkaWFPYmouZW5SYW5nbyAmJiAhZGlhT2JqLmVzSW5pY2lvICYmICFkaWFPYmouZXNGaW5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWNjaW9uYXJEaWEoZGlhT2JqKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZGlhT2JqLmVzTWVzQWN0dWFsXCI+XG4gICAgICAgICAgICAgIHt7IGRpYU9iai5kaWEgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDdXJyZW50IG1vbnRoIGNhbGVuZGFyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1oZWFkZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTEuMzU0IDEuNjQ2YS41LjUgMCAwIDEgMCAuNzA4TDUuNzA3IDhsNS42NDcgNS42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOGwtNi02YS41LjUgMCAwIDEgMC0uNzA4bDYtNmEuNS41IDAgMCAxIC43MDggMHpcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3Bhbj57eyBub21icmVNZXNBY3R1YWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FtYmlhck1lcygxKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00LjY0NiAxLjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMSAwIC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDgtLjcwOEwxMC4yOTMgOCA0LjY0NiAyLjM1NGEuNS41IDAgMCAxIDAtLjcwOHpcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci13ZWVrZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRheU5hbWUgb2YgZGlhc1NlbWFuYSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxzcGFuPnt7IGRheU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWRheXNcIj5cbiAgICAgICAgICBAZm9yIChkaWFPYmogb2YgZGlhc01lc0FjdHVhbCgpOyB0cmFjayBkaWFPYmouZmVjaGEgfHwgJGluZGV4KSB7XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1kYXlcIiBcbiAgICAgICAgICAgICAgW2NsYXNzLmVtcHR5XT1cIiFkaWFPYmouZXNNZXNBY3R1YWxcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZGlhT2JqLmVzSW5pY2lvIHx8IGRpYU9iai5lc0ZpblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pbi1yYW5nZV09XCJkaWFPYmouZW5SYW5nbyAmJiAhZGlhT2JqLmVzSW5pY2lvICYmICFkaWFPYmouZXNGaW5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWNjaW9uYXJEaWEoZGlhT2JqKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZGlhT2JqLmVzTWVzQWN0dWFsXCI+XG4gICAgICAgICAgICAgIHt7IGRpYU9iai5kaWEgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9vdGVyIHdpdGggY2xlYXIgYnV0dG9uIC0tPlxuICAgIEBpZiAoc2hvd0NsZWFyQnV0dG9uKSB7XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xlYXJcIiAoY2xpY2spPVwibGltcGlhcigpXCIgdGl0bGU9XCJDbGVhciBzZWxlY3Rpb25cIj5cbiAgICAgICAgQ2xlYXJcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|