@oneluiz/dual-datepicker 3.9.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dual-datepicker.component.d.ts +4 -4
- package/esm2022/core/internal.mjs +92 -0
- package/esm2022/core/public.mjs +94 -0
- package/esm2022/core/testing/date.helpers.mjs +49 -0
- package/esm2022/core/testing/fixed-clock.mjs +30 -0
- package/esm2022/core/testing/index.mjs +8 -0
- package/esm2022/dual-datepicker.component.mjs +34 -32
- package/esm2022/public-api.mjs +39 -9
- package/fesm2022/oneluiz-dual-datepicker.mjs +629 -975
- package/fesm2022/oneluiz-dual-datepicker.mjs.map +1 -1
- package/package.json +11 -1
- package/public-api.d.ts +39 -4
- package/core/built-in-presets.d.ts +0 -98
- package/core/calendar-grid/cache.config.d.ts +0 -34
- package/core/calendar-grid/calendar-grid.cache.d.ts +0 -39
- package/core/calendar-grid/calendar-grid.factory.d.ts +0 -26
- package/core/calendar-grid/calendar-grid.types.d.ts +0 -57
- package/core/calendar-grid/index.d.ts +0 -56
- package/core/calendar-grid/range-highlighter.cache.d.ts +0 -106
- package/core/calendar-grid/range-highlighter.d.ts +0 -85
- package/core/calendar-grid/range-highlighter.types.d.ts +0 -182
- package/core/calendar-grid/virtual-weeks.logic.d.ts +0 -116
- package/core/calendar-grid/virtual-weeks.types.d.ts +0 -71
- package/core/date-adapter.d.ts +0 -298
- package/core/date-clock.d.ts +0 -82
- package/core/dual-date-range.store.d.ts +0 -113
- package/core/index.d.ts +0 -33
- package/core/native-date-adapter.d.ts +0 -152
- package/core/preset-providers.d.ts +0 -176
- package/core/preset-registry.d.ts +0 -181
- package/core/preset.engine.d.ts +0 -124
- package/core/range-preset.plugin.d.ts +0 -188
- package/core/range.validator.d.ts +0 -37
- package/core/system-clock.d.ts +0 -13
- package/date-adapter.d.ts +0 -116
- package/esm2022/core/calendar-grid/index.mjs +0 -57
- package/esm2022/core/index.mjs +0 -37
- package/esm2022/date-adapter.mjs +0 -12
- package/esm2022/native-date-adapter.mjs +0 -117
- package/esm2022/preset-utils.mjs +0 -276
- package/native-date-adapter.d.ts +0 -26
- package/preset-utils.d.ts +0 -91
- package/src/themes/bootstrap.scss +0 -202
- package/src/themes/bulma.scss +0 -209
- package/src/themes/custom.scss +0 -236
- package/src/themes/foundation.scss +0 -201
- package/src/themes/tailwind.scss +0 -109
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, HostListener, forwardRef, signal, computed, effect, inject, APP_INITIALIZER } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
4
|
+
// Public API imports
|
|
5
|
+
import { DATE_ADAPTER } from './core/public';
|
|
6
|
+
import { NativeDateAdapter } from './core/public';
|
|
7
|
+
import { DualDateRangeStore } from './core/public';
|
|
8
|
+
import { PresetRegistry } from './core/public';
|
|
9
|
+
import { BUILT_IN_PRESETS } from './core/public';
|
|
10
|
+
// Internal API imports (component implementation)
|
|
11
|
+
import { CalendarGridCache, RangeHighlighterCache, getVisibleWeeks, navigateWeekWindow, isVirtualWeeksEnabled } from './core/internal';
|
|
10
12
|
import * as i0 from "@angular/core";
|
|
11
13
|
import * as i1 from "@angular/common";
|
|
12
14
|
export class DualDatepickerComponent {
|
|
@@ -14,7 +16,7 @@ export class DualDatepickerComponent {
|
|
|
14
16
|
placeholder = 'Select date range';
|
|
15
17
|
set startDate(value) {
|
|
16
18
|
if (value) {
|
|
17
|
-
const date = this.dateAdapter.
|
|
19
|
+
const date = this.dateAdapter.parseISODate(value);
|
|
18
20
|
if (date)
|
|
19
21
|
this.rangeStore.setStart(date);
|
|
20
22
|
}
|
|
@@ -25,7 +27,7 @@ export class DualDatepickerComponent {
|
|
|
25
27
|
}
|
|
26
28
|
set endDate(value) {
|
|
27
29
|
if (value) {
|
|
28
|
-
const date = this.dateAdapter.
|
|
30
|
+
const date = this.dateAdapter.parseISODate(value);
|
|
29
31
|
if (date)
|
|
30
32
|
this.rangeStore.setEnd(date);
|
|
31
33
|
}
|
|
@@ -91,8 +93,8 @@ export class DualDatepickerComponent {
|
|
|
91
93
|
rangeStore = inject(DualDateRangeStore);
|
|
92
94
|
// UI-only signals
|
|
93
95
|
showDatePicker = signal(false);
|
|
94
|
-
currentMonth = signal(this.dateAdapter.
|
|
95
|
-
previousMonth = signal(this.dateAdapter.
|
|
96
|
+
currentMonth = signal(this.dateAdapter.normalize(new Date()));
|
|
97
|
+
previousMonth = signal(this.dateAdapter.normalize(new Date()));
|
|
96
98
|
currentMonthDays = signal([]);
|
|
97
99
|
previousMonthDays = signal([]);
|
|
98
100
|
isDisabled = signal(false);
|
|
@@ -305,7 +307,7 @@ export class DualDatepickerComponent {
|
|
|
305
307
|
}
|
|
306
308
|
else {
|
|
307
309
|
// startDate is not visible, focus on today if visible
|
|
308
|
-
const today = this.dateAdapter.
|
|
310
|
+
const today = this.dateAdapter.toISODate(this.dateAdapter.normalize(new Date()));
|
|
309
311
|
const inCurrMonth = this.isDateInMonth(today, this.currentMonth());
|
|
310
312
|
if (inCurrMonth) {
|
|
311
313
|
this.focusedDay.set({ date: today, monthIndex: 1 });
|
|
@@ -327,7 +329,7 @@ export class DualDatepickerComponent {
|
|
|
327
329
|
}
|
|
328
330
|
else {
|
|
329
331
|
// endDate is not visible, focus on today if visible
|
|
330
|
-
const today = this.dateAdapter.
|
|
332
|
+
const today = this.dateAdapter.toISODate(this.dateAdapter.normalize(new Date()));
|
|
331
333
|
const inCurrMonth = this.isDateInMonth(today, this.currentMonth());
|
|
332
334
|
if (inCurrMonth) {
|
|
333
335
|
this.focusedDay.set({ date: today, monthIndex: 1 });
|
|
@@ -343,7 +345,7 @@ export class DualDatepickerComponent {
|
|
|
343
345
|
}
|
|
344
346
|
else {
|
|
345
347
|
// Focus on today if visible, otherwise first day of current month
|
|
346
|
-
const today = this.dateAdapter.
|
|
348
|
+
const today = this.dateAdapter.toISODate(this.dateAdapter.normalize(new Date()));
|
|
347
349
|
const inCurrMonth = this.isDateInMonth(today, this.currentMonth());
|
|
348
350
|
if (inCurrMonth) {
|
|
349
351
|
this.focusedDay.set({ date: today, monthIndex: 1 });
|
|
@@ -359,7 +361,7 @@ export class DualDatepickerComponent {
|
|
|
359
361
|
}
|
|
360
362
|
}
|
|
361
363
|
isDateInMonth(dateStr, monthDate) {
|
|
362
|
-
const date = this.dateAdapter.
|
|
364
|
+
const date = this.dateAdapter.parseISODate(dateStr);
|
|
363
365
|
if (!date)
|
|
364
366
|
return false;
|
|
365
367
|
const year = this.dateAdapter.getYear(date);
|
|
@@ -374,7 +376,7 @@ export class DualDatepickerComponent {
|
|
|
374
376
|
this.initializeFocus();
|
|
375
377
|
return;
|
|
376
378
|
}
|
|
377
|
-
const currentDate = this.dateAdapter.
|
|
379
|
+
const currentDate = this.dateAdapter.parseISODate(focused.date);
|
|
378
380
|
if (!currentDate)
|
|
379
381
|
return;
|
|
380
382
|
const newDate = this.dateAdapter.addDays(currentDate, direction);
|
|
@@ -411,7 +413,7 @@ export class DualDatepickerComponent {
|
|
|
411
413
|
this.initializeFocus();
|
|
412
414
|
return;
|
|
413
415
|
}
|
|
414
|
-
const currentDate = this.dateAdapter.
|
|
416
|
+
const currentDate = this.dateAdapter.parseISODate(focused.date);
|
|
415
417
|
if (!currentDate)
|
|
416
418
|
return;
|
|
417
419
|
const newDate = this.dateAdapter.addDays(currentDate, direction * 7); // Move by week
|
|
@@ -462,17 +464,17 @@ export class DualDatepickerComponent {
|
|
|
462
464
|
this.initializeFocus();
|
|
463
465
|
return;
|
|
464
466
|
}
|
|
465
|
-
const currentDate = this.dateAdapter.
|
|
467
|
+
const currentDate = this.dateAdapter.parseISODate(focused.date);
|
|
466
468
|
if (!currentDate)
|
|
467
469
|
return;
|
|
468
470
|
const currentYear = this.dateAdapter.getYear(currentDate);
|
|
469
471
|
const currentMonth = this.dateAdapter.getMonth(currentDate);
|
|
470
472
|
const currentDay = this.dateAdapter.getDate(currentDate);
|
|
471
|
-
const newDate = this.dateAdapter.
|
|
473
|
+
const newDate = this.dateAdapter.normalize(new Date(currentYear + direction, currentMonth, currentDay));
|
|
472
474
|
const newDateStr = this.formatDate(newDate);
|
|
473
475
|
// Update months to show the new year
|
|
474
|
-
this.currentMonth.set(this.dateAdapter.
|
|
475
|
-
this.previousMonth.set(this.dateAdapter.
|
|
476
|
+
this.currentMonth.set(this.dateAdapter.normalize(new Date(currentYear + direction, currentMonth, 1)));
|
|
477
|
+
this.previousMonth.set(this.dateAdapter.normalize(new Date(currentYear + direction, currentMonth - 1, 1)));
|
|
476
478
|
this.generateCalendars();
|
|
477
479
|
const inPrevMonth = this.isDateInMonth(newDateStr, this.previousMonth());
|
|
478
480
|
this.focusedDay.set({
|
|
@@ -522,12 +524,12 @@ export class DualDatepickerComponent {
|
|
|
522
524
|
});
|
|
523
525
|
// Initialize dates in store if provided
|
|
524
526
|
if (this.startDate) {
|
|
525
|
-
const date = this.dateAdapter.
|
|
527
|
+
const date = this.dateAdapter.parseISODate(this.startDate);
|
|
526
528
|
if (date)
|
|
527
529
|
this.rangeStore.setStart(date);
|
|
528
530
|
}
|
|
529
531
|
if (this.endDate) {
|
|
530
|
-
const date = this.dateAdapter.
|
|
532
|
+
const date = this.dateAdapter.parseISODate(this.endDate);
|
|
531
533
|
if (date)
|
|
532
534
|
this.rangeStore.setEnd(date);
|
|
533
535
|
}
|
|
@@ -539,12 +541,12 @@ export class DualDatepickerComponent {
|
|
|
539
541
|
if (changes['startDate'] || changes['endDate']) {
|
|
540
542
|
// Sync with store
|
|
541
543
|
if (changes['startDate'] && this.startDate) {
|
|
542
|
-
const date = this.dateAdapter.
|
|
544
|
+
const date = this.dateAdapter.parseISODate(this.startDate);
|
|
543
545
|
if (date)
|
|
544
546
|
this.rangeStore.setStart(date);
|
|
545
547
|
}
|
|
546
548
|
if (changes['endDate'] && this.endDate) {
|
|
547
|
-
const date = this.dateAdapter.
|
|
549
|
+
const date = this.dateAdapter.parseISODate(this.endDate);
|
|
548
550
|
if (date)
|
|
549
551
|
this.rangeStore.setEnd(date);
|
|
550
552
|
}
|
|
@@ -572,7 +574,7 @@ export class DualDatepickerComponent {
|
|
|
572
574
|
formatDateDisplay(dateStr) {
|
|
573
575
|
if (!dateStr)
|
|
574
576
|
return '';
|
|
575
|
-
const date = this.dateAdapter.
|
|
577
|
+
const date = this.dateAdapter.parseISODate(dateStr);
|
|
576
578
|
if (!date)
|
|
577
579
|
return '';
|
|
578
580
|
const year = this.dateAdapter.getYear(date);
|
|
@@ -607,7 +609,7 @@ export class DualDatepickerComponent {
|
|
|
607
609
|
const currentMonthValue = this.currentMonth();
|
|
608
610
|
const year = this.dateAdapter.getYear(currentMonthValue);
|
|
609
611
|
const month = this.dateAdapter.getMonth(currentMonthValue);
|
|
610
|
-
const previousMonthDate = this.dateAdapter.
|
|
612
|
+
const previousMonthDate = this.dateAdapter.normalize(new Date(year, month - 1, 1));
|
|
611
613
|
this.previousMonth.set(previousMonthDate);
|
|
612
614
|
this.generateCalendars();
|
|
613
615
|
// Initialize keyboard focus only if keyboard navigation is enabled
|
|
@@ -825,7 +827,7 @@ export class DualDatepickerComponent {
|
|
|
825
827
|
selectDay(dayObj) {
|
|
826
828
|
if (!dayObj.isCurrentMonth || this.isDisabled() || dayObj.isDisabled)
|
|
827
829
|
return;
|
|
828
|
-
const selectedDate = this.dateAdapter.
|
|
830
|
+
const selectedDate = this.dateAdapter.parseISODate(dayObj.date);
|
|
829
831
|
if (!selectedDate)
|
|
830
832
|
return;
|
|
831
833
|
if (this.multiRange) {
|
|
@@ -937,11 +939,11 @@ export class DualDatepickerComponent {
|
|
|
937
939
|
const currentMonthValue = this.currentMonth();
|
|
938
940
|
const year = this.dateAdapter.getYear(currentMonthValue);
|
|
939
941
|
const month = this.dateAdapter.getMonth(currentMonthValue);
|
|
940
|
-
const newCurrentMonth = this.dateAdapter.
|
|
942
|
+
const newCurrentMonth = this.dateAdapter.normalize(new Date(year, month + direction, 1));
|
|
941
943
|
this.currentMonth.set(newCurrentMonth);
|
|
942
944
|
const newYear = this.dateAdapter.getYear(newCurrentMonth);
|
|
943
945
|
const newMonth = this.dateAdapter.getMonth(newCurrentMonth);
|
|
944
|
-
const newPreviousMonth = this.dateAdapter.
|
|
946
|
+
const newPreviousMonth = this.dateAdapter.normalize(new Date(newYear, newMonth - 1, 1));
|
|
945
947
|
this.previousMonth.set(newPreviousMonth);
|
|
946
948
|
this.generateCalendars();
|
|
947
949
|
}
|
|
@@ -958,8 +960,8 @@ export class DualDatepickerComponent {
|
|
|
958
960
|
return;
|
|
959
961
|
}
|
|
960
962
|
const range = preset.getValue();
|
|
961
|
-
const startDate = this.dateAdapter.
|
|
962
|
-
const endDate = this.dateAdapter.
|
|
963
|
+
const startDate = this.dateAdapter.parseISODate(range.start);
|
|
964
|
+
const endDate = this.dateAdapter.parseISODate(range.end);
|
|
963
965
|
if (startDate && endDate) {
|
|
964
966
|
this.rangeStore.setRange(startDate, endDate);
|
|
965
967
|
}
|
|
@@ -1309,4 +1311,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1309
1311
|
type: HostListener,
|
|
1310
1312
|
args: ['keydown', ['$event']]
|
|
1311
1313
|
}] } });
|
|
1312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vc3JjL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxZQUFZLEVBQWMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbE0sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQThCLHFCQUFxQixFQUFxQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBK0QzTSxNQUFNLE9BQU8sdUJBQXVCO0lBc09kO0lBck9YLFdBQVcsR0FBVyxtQkFBbUIsQ0FBQztJQUNuRCxJQUFhLFNBQVMsQ0FBQyxLQUFhO1FBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxD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QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQTBLUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVzFDLHdCQUF3QjtzQkFEdkIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgc2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIEFQUF9JTklUSUFMSVpFUiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgREFURV9BREFQVEVSIH0gZnJvbSAnLi9kYXRlLWFkYXB0ZXInO1xuaW1wb3J0IHsgTmF0aXZlRGF0ZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLWFkYXB0ZXInO1xuaW1wb3J0IHsgRHVhbERhdGVSYW5nZVN0b3JlIH0gZnJvbSAnLi9jb3JlL2R1YWwtZGF0ZS1yYW5nZS5zdG9yZSc7XG5pbXBvcnQgeyBQcmVzZXRSZWdpc3RyeSB9IGZyb20gJy4vY29yZS9wcmVzZXQtcmVnaXN0cnknO1xuaW1wb3J0IHsgQlVJTFRfSU5fUFJFU0VUUyB9IGZyb20gJy4vY29yZS9idWlsdC1pbi1wcmVzZXRzJztcbmltcG9ydCB7IENhbGVuZGFyR3JpZENhY2hlLCBDYWxlbmRhckdyaWQsIENhbGVuZGFyQ2VsbCwgUmFuZ2VIaWdobGlnaHRlckNhY2hlLCBEZWNvcmF0ZWRDZWxsLCBWaXJ0dWFsV2Vla3NDb25maWcsIGdldFZpc2libGVXZWVrcywgbmF2aWdhdGVXZWVrV2luZG93LCBpc1ZpcnR1YWxXZWVrc0VuYWJsZWQgfSBmcm9tICcuL2NvcmUvY2FsZW5kYXItZ3JpZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlIHtcbiAgc3RhcnREYXRlOiBzdHJpbmc7XG4gIGVuZERhdGU6IHN0cmluZztcbiAgcmFuZ2VUZXh0OiBzdHJpbmc7XG4gIHN0YXJ0VGltZT86IHN0cmluZzsgLy8gSEg6bW0gZm9ybWF0IChvcHRpb25hbClcbiAgZW5kVGltZT86IHN0cmluZzsgLy8gSEg6bW0gZm9ybWF0IChvcHRpb25hbClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aURhdGVSYW5nZSB7XG4gIHJhbmdlczogRGF0ZVJhbmdlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0UmFuZ2Uge1xuICBzdGFydDogc3RyaW5nO1xuICBlbmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRDb25maWcge1xuICBsYWJlbDogc3RyaW5nO1xuICBnZXRWYWx1ZTogKCkgPT4gUHJlc2V0UmFuZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxlQ29uZmlnIHtcbiAgbW9udGhOYW1lcz86IHN0cmluZ1tdO1xuICBtb250aE5hbWVzU2hvcnQ/OiBzdHJpbmdbXTtcbiAgZGF5TmFtZXM/OiBzdHJpbmdbXTtcbiAgZGF5TmFtZXNTaG9ydD86IHN0cmluZ1tdO1xuICBmaXJzdERheU9mV2Vlaz86IG51bWJlcjsgLy8gMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLlxufVxuXG5leHBvcnQgdHlwZSBUaGVtZVR5cGUgPSAnZGVmYXVsdCcgfCAnYm9vdHN0cmFwJyB8ICdidWxtYScgfCAnZm91bmRhdGlvbicgfCAndGFpbHdpbmQnIHwgJ2N1c3RvbSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kdWFsLWRhdGVwaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogREFURV9BREFQVEVSLFxuICAgICAgdXNlQ2xhc3M6IE5hdGl2ZURhdGVBZGFwdGVyXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogUHJlc2V0UmVnaXN0cnkpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAvLyBBdXRvLXJlZ2lzdGVyIGJ1aWx0LWluIHByZXNldHNcbiAgICAgICAgICBCVUlMVF9JTl9QUkVTRVRTLmZvckVhY2gocHJlc2V0ID0+IHJlZ2lzdHJ5LnJlZ2lzdGVyKHByZXNldCkpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGRlcHM6IFtQcmVzZXRSZWdpc3RyeV1cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRHVhbERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBkYXRlIHJhbmdlJztcbiAgQElucHV0KCkgc2V0IHN0YXJ0RGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5wYXJzZSh2YWx1ZSk7XG4gICAgICBpZiAoZGF0ZSkgdGhpcy5yYW5nZVN0b3JlLnNldFN0YXJ0KGRhdGUpO1xuICAgIH1cbiAgfVxuICBnZXQgc3RhcnREYXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydERhdGUoKTtcbiAgICByZXR1cm4gZGF0ZSA/IHRoaXMuZm9ybWF0RGF0ZShkYXRlKSA6ICcnO1xuICB9XG4gIFxuICBASW5wdXQoKSBzZXQgZW5kRGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5wYXJzZSh2YWx1ZSk7XG4gICAgICBpZiAoZGF0ZSkgdGhpcy5yYW5nZVN0b3JlLnNldEVuZChkYXRlKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGVuZERhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5yYW5nZVN0b3JlLmVuZERhdGUoKTtcbiAgICByZXR1cm4gZGF0ZSA/IHRoaXMuZm9ybWF0RGF0ZShkYXRlKSA6ICcnO1xuICB9XG4gIEBJbnB1dCgpIHNob3dQcmVzZXRzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NsZWFyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpUmFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2xvc2VPblNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NlT25QcmVzZXRTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uQ2xpY2tPdXRzaWRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHJlc2V0czogUHJlc2V0Q29uZmlnW10gPSBbXTtcbiAgQElucHV0KCkgdGhlbWU6IFRoZW1lVHlwZSA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgaW5wdXRCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZmZmJztcbiAgQElucHV0KCkgaW5wdXRUZXh0Q29sb3I6IHN0cmluZyA9ICcjNDk1MDU3JztcbiAgQElucHV0KCkgaW5wdXRCb3JkZXJDb2xvcjogc3RyaW5nID0gJyNjZWQ0ZGEnO1xuICBASW5wdXQoKSBpbnB1dEJvcmRlckNvbG9ySG92ZXI6IHN0cmluZyA9ICcjY2VkNGRhJztcbiAgQElucHV0KCkgaW5wdXRCb3JkZXJDb2xvckZvY3VzOiBzdHJpbmcgPSAnIzgwYmRmZic7XG4gIEBJbnB1dCgpIGlucHV0UGFkZGluZzogc3RyaW5nID0gJzAuMzc1cmVtIDAuNzVyZW0nO1xuICBASW5wdXQoKSBsb2NhbGU6IExvY2FsZUNvbmZpZyA9IHt9O1xuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW10gfCAoKGRhdGU6IERhdGUpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBkaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnRCBNTU0nOyAvLyBGb3JtYXQgZm9yIGRpc3BsYXlpbmcgZGF0ZXMgaW4gaW5wdXRcbiAgQElucHV0KCkgcmVxdWlyZUFwcGx5OiBib29sZWFuID0gZmFsc2U7IC8vIFJlcXVpcmUgQXBwbHkgYnV0dG9uIGNvbmZpcm1hdGlvblxuICBASW5wdXQoKSBlbmFibGVUaW1lUGlja2VyOiBib29sZWFuID0gZmFsc2U7IC8vIEVuYWJsZSB0aW1lIHNlbGVjdGlvblxuICBASW5wdXQoKSB0aW1lRm9ybWF0OiAnMTJoJyB8ICcyNGgnID0gJzI0aCc7IC8vIFRpbWUgZm9ybWF0XG4gIEBJbnB1dCgpIG1pbnV0ZVN0ZXA6IG51bWJlciA9IDE1OyAvLyBTdGVwIGZvciBtaW51dGUgc2VsZWN0b3IgKDEsIDUsIDE1LCAzMClcbiAgQElucHV0KCkgZGVmYXVsdFN0YXJ0VGltZTogc3RyaW5nID0gJzAwOjAwJzsgLy8gRGVmYXVsdCBzdGFydCB0aW1lIEhIOm1tXG4gIEBJbnB1dCgpIGRlZmF1bHRFbmRUaW1lOiBzdHJpbmcgPSAnMjM6NTknOyAvLyBEZWZhdWx0IGVuZCB0aW1lIEhIOm1tXG4gIFxuICAvKipcbiAgICogVmlydHVhbCBXZWVrcyBDb25maWd1cmF0aW9uICh2My45LjArKVxuICAgKiBcbiAgICogRW5hYmxlcyB3aW5kb3dlZCByZW5kZXJpbmcgdG8gcmVkdWNlIERPTSBjb21wbGV4aXR5IGFuZCBpbXByb3ZlIG1vYmlsZSBwZXJmb3JtYW5jZS5cbiAgICogT25seSByZW5kZXJzIGEgc3Vic2V0IG9mIGNhbGVuZGFyIHdlZWtzIGluc3RlYWQgb2YgYWxsIDYuXG4gICAqIFxuICAgKiBFeGFtcGxlOiBgeyB3aW5kb3dTaXplOiAzIH1gIHJlbmRlcnMgb25seSAzIHdlZWtzICgyMSBjZWxscykgaW5zdGVhZCBvZiA2IHdlZWtzICg0MiBjZWxscyksXG4gICAqIHJlZHVjaW5nIERPTSBub2RlcyBieSB+NTAlIHBlciBjYWxlbmRhci5cbiAgICogXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAoZGlzYWJsZWQgLSByZW5kZXJzIGFsbCA2IHdlZWtzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgKiBcbiAgICogRXhhbXBsZTpcbiAgICogYGBgaHRtbFxuICAgKiA8bmd4LWR1YWwtZGF0ZXBpY2tlclxuICAgKiAgIFt2aXJ0dWFsV2Vla3NdPVwieyB3aW5kb3dTaXplOiAzIH1cIj5cbiAgICogPC9uZ3gtZHVhbC1kYXRlcGlja2VyPlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpIHZpcnR1YWxXZWVrcz86IFZpcnR1YWxXZWVrc0NvbmZpZztcblxuICBAT3V0cHV0KCkgZGF0ZVJhbmdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U+KCk7XG4gIEBPdXRwdXQoKSBkYXRlUmFuZ2VTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPigpO1xuICBAT3V0cHV0KCkgbXVsdGlEYXRlUmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE11bHRpRGF0ZVJhbmdlPigpO1xuICBAT3V0cHV0KCkgbXVsdGlEYXRlUmFuZ2VTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TXVsdGlEYXRlUmFuZ2U+KCk7XG5cbiAgLy8gRGF0ZSBhZGFwdGVyIGluamVjdGlvblxuICBwcml2YXRlIGRhdGVBZGFwdGVyID0gaW5qZWN0PERhdGVBZGFwdGVyPihEQVRFX0FEQVBURVIpO1xuICBcbiAgLy8gQ2FsZW5kYXIgZ3JpZCBjYWNoZSAodjMuNy4wKykgLSBtZW1vaXplcyBtb250aCBncmlkIGdlbmVyYXRpb25cbiAgcHJpdmF0ZSBncmlkQ2FjaGUgPSBpbmplY3QoQ2FsZW5kYXJHcmlkQ2FjaGUpO1xuICBcbiAgLy8gUmFuZ2UgaGlnaGxpZ2h0ZXIgY2FjaGUgKHYzLjguMCspIC0gbWVtb2l6ZXMgZGVjb3JhdGlvbnNcbiAgcHJpdmF0ZSBoaWdobGlnaHRlckNhY2hlID0gaW5qZWN0KFJhbmdlSGlnaGxpZ2h0ZXJDYWNoZSk7XG4gIFxuICAvLyBIZWFkbGVzcyBzdG9yZSBmb3IgZGF0ZSByYW5nZSBzdGF0ZSAodjMuNS4wKylcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJhbmdlU3RvcmUgPSBpbmplY3QoRHVhbERhdGVSYW5nZVN0b3JlKTtcblxuICAvLyBVSS1vbmx5IHNpZ25hbHNcbiAgc2hvd0RhdGVQaWNrZXIgPSBzaWduYWwoZmFsc2UpO1xuICBjdXJyZW50TW9udGggPSBzaWduYWwodGhpcy5kYXRlQWRhcHRlci50b2RheSgpKTtcbiAgcHJldmlvdXNNb250aCA9IHNpZ25hbCh0aGlzLmRhdGVBZGFwdGVyLnRvZGF5KCkpO1xuICBjdXJyZW50TW9udGhEYXlzID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIHByZXZpb3VzTW9udGhEYXlzID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIGlzRGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuICBzaG93U3RhcnRUaW1lUGlja2VyID0gc2lnbmFsKGZhbHNlKTtcbiAgc2hvd0VuZFRpbWVQaWNrZXIgPSBzaWduYWwoZmFsc2UpO1xuICBob3ZlckRhdGUgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIFxuICAvKipcbiAgICogVmlydHVhbCBXZWVrcyBTdGF0ZSAodjMuOS4wKylcbiAgICogXG4gICAqIFNpZ25hbHMgdG8gdHJhY2sgd2hpY2ggd2VlayB3aW5kb3cgaXMgY3VycmVudGx5IHZpc2libGUgZm9yIGVhY2ggY2FsZW5kYXIuXG4gICAqIC0gd2Vla1N0YXJ0ID0gMDogU2hvd3MgZmlyc3QgTiB3ZWVrcyAod2luZG93U2l6ZSlcbiAgICogLSB3ZWVrU3RhcnQgPSAxOiBTaG93cyB3ZWVrcyAxIHRvIE4rMSwgZXRjLlxuICAgKiBcbiAgICogUmVzZXQgdG8gMCB3aGVuIG1vbnRoIGNoYW5nZXMgZm9yIGNvbnNpc3RlbnQgVVguXG4gICAqL1xuICBwcmV2aW91c01vbnRoV2Vla1N0YXJ0ID0gc2lnbmFsKDApO1xuICBjdXJyZW50TW9udGhXZWVrU3RhcnQgPSBzaWduYWwoMCk7XG4gIFxuICAvKipcbiAgICogQ29tcHV0ZWQ6IFZpc2libGUgd2Vla3MgZm9yIHdpbmRvd2VkIHJlbmRlcmluZyAodjMuOS4wKylcbiAgICogXG4gICAqIElmIHZpcnR1YWxXZWVrcyBpcyBlbmFibGVkLCByZXR1cm5zIG9ubHkgdGhlIHZpc2libGUgc3Vic2V0IG9mIHdlZWtzLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgYWxsIHdlZWtzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKiBcbiAgICogRXhhbXBsZTogSWYgd2luZG93U2l6ZT0zIGFuZCB3ZWVrU3RhcnQ9MCwgcmV0dXJucyBmaXJzdCAzIHdlZWtzIChyb3dzIDAtMikuXG4gICAqL1xuICBwcmV2aW91c01vbnRoVmlzaWJsZURheXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWxsRGF5cyA9IHRoaXMucHJldmlvdXNNb250aERheXMoKTtcbiAgICBpZiAoIXRoaXMudmlydHVhbFdlZWtzIHx8ICFpc1ZpcnR1YWxXZWVrc0VuYWJsZWQodGhpcy52aXJ0dWFsV2Vla3Mud2luZG93U2l6ZSwgNikpIHtcbiAgICAgIHJldHVybiBhbGxEYXlzO1xuICAgIH1cbiAgICBcbiAgICAvLyBDYWxlbmRhciBoYXMgNiB3ZWVrcyAoNDIgY2VsbHMgPSA3IGRheXMgw5cgNiB3ZWVrcylcbiAgICBjb25zdCBhbGxXZWVrczogYW55W11bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICBhbGxXZWVrcy5wdXNoKGFsbERheXMuc2xpY2UoaSAqIDcsIChpICsgMSkgKiA3KSk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZpc2libGVXZWVrcyA9IGdldFZpc2libGVXZWVrcyhcbiAgICAgIGFsbFdlZWtzLFxuICAgICAgdGhpcy5wcmV2aW91c01vbnRoV2Vla1N0YXJ0KCksXG4gICAgICB0aGlzLnZpcnR1YWxXZWVrcy53aW5kb3dTaXplXG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4gdmlzaWJsZVdlZWtzLmZsYXQoKTtcbiAgfSk7XG4gIFxuICBjdXJyZW50TW9udGhWaXNpYmxlRGF5cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhbGxEYXlzID0gdGhpcy5jdXJyZW50TW9udGhEYXlzKCk7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxXZWVrcyB8fCAhaXNWaXJ0dWFsV2Vla3NFbmFibGVkKHRoaXMudmlydHVhbFdlZWtzLndpbmRvd1NpemUsIDYpKSB7XG4gICAgICByZXR1cm4gYWxsRGF5cztcbiAgICB9XG4gICAgXG4gICAgLy8gQ2FsZW5kYXIgaGFzIDYgd2Vla3MgKDQyIGNlbGxzID0gNyBkYXlzIMOXIDYgd2Vla3MpXG4gICAgY29uc3QgYWxsV2Vla3M6IGFueVtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgYWxsV2Vla3MucHVzaChhbGxEYXlzLnNsaWNlKGkgKiA3LCAoaSArIDEpICogNykpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB2aXNpYmxlV2Vla3MgPSBnZXRWaXNpYmxlV2Vla3MoXG4gICAgICBhbGxXZWVrcyxcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoV2Vla1N0YXJ0KCksXG4gICAgICB0aGlzLnZpcnR1YWxXZWVrcy53aW5kb3dTaXplXG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4gdmlzaWJsZVdlZWtzLmZsYXQoKTtcbiAgfSk7XG4gIFxuICAvLyBDb21wdXRlZCB0aW1lIHByb3BlcnRpZXMgZnJvbSBzdG9yZVxuICBnZXQgc3RhcnRIb3VyKCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydFRpbWUoKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRpbWUodGltZSkuaG91cjtcbiAgfVxuICBcbiAgZ2V0IHN0YXJ0TWludXRlKCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydFRpbWUoKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRpbWUodGltZSkubWludXRlO1xuICB9XG4gIFxuICBnZXQgZW5kSG91cigpOiBudW1iZXIge1xuICAgIGNvbnN0IHRpbWUgPSB0aGlzLnJhbmdlU3RvcmUuZW5kVGltZSgpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlVGltZSh0aW1lKS5ob3VyO1xuICB9XG4gIFxuICBnZXQgZW5kTWludXRlKCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMucmFuZ2VTdG9yZS5lbmRUaW1lKCk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUaW1lKHRpbWUpLm1pbnV0ZTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBzZXRTdGFydEhvdXJNaW51dGUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVTdHIgPSB0aGlzLmZvcm1hdFRpbWUoaG91ciwgbWludXRlKTtcbiAgICB0aGlzLnJhbmdlU3RvcmUuc2V0U3RhcnRUaW1lKHRpbWVTdHIpO1xuICB9XG4gIFxuICBwcml2YXRlIHNldEVuZEhvdXJNaW51dGUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVTdHIgPSB0aGlzLmZvcm1hdFRpbWUoaG91ciwgbWludXRlKTtcbiAgICB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kVGltZSh0aW1lU3RyKTtcbiAgfVxuICBcbiAgLy8gTXVsdGktcmFuZ2Ugc3VwcG9ydCAoVUktc3BlY2lmaWMpXG4gIHNlbGVjdGVkUmFuZ2VzID0gc2lnbmFsPERhdGVSYW5nZVtdPihbXSk7XG4gIGN1cnJlbnRSYW5nZUluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIC8vIEtleWJvYXJkIG5hdmlnYXRpb24gKFVJLXNwZWNpZmljKVxuICBmb2N1c2VkRGF5ID0gc2lnbmFsPHsgZGF0ZTogc3RyaW5nOyBtb250aEluZGV4OiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xuICBcbiAgLy8gQ29tcHV0ZWQgdmFsdWVzXG4gIGN1cnJlbnRNb250aE5hbWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldE1vbnRoTmFtZSh0aGlzLmN1cnJlbnRNb250aCgpKSk7XG4gIHByZXZpb3VzTW9udGhOYW1lID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXRNb250aE5hbWUodGhpcy5wcmV2aW91c01vbnRoKCkpKTtcbiAgd2Vla0RheU5hbWVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXREYXlOYW1lcygpKTtcbiAgXG4gIC8vIENvbXB1dGVkIGZyb20gc3RvcmVcbiAgZGF0ZVJhbmdlVGV4dCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmFuZ2VTdG9yZS5yYW5nZVRleHQoKSk7XG4gIHNlbGVjdGluZ1N0YXJ0RGF0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmFuZ2VTdG9yZS5zZWxlY3RpbmdTdGFydCgpKTtcbiAgaGFzUGVuZGluZ0NoYW5nZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJhbmdlU3RvcmUuaGFzUGVuZGluZ0NoYW5nZXMoKSk7XG4gIFxuICAvLyBDb21wdXRlZCBmb3IgdGVtcGxhdGUgYWNjZXNzIHRvIHBlbmRpbmcgZGF0ZXMgKHJlcXVpcmVBcHBseSBtb2RlKVxuICBnZXQgcGVuZGluZ1N0YXJ0RGF0ZSgpOiBzdHJpbmcge1xuICAgIC8vIEluIHJlcXVpcmVBcHBseSBtb2RlLCBzdG9yZSBrZWVwcyBwZW5kaW5nIHZhbHVlc1xuICAgIC8vIEZvciBub3csIHVzZSBhY3R1YWwgc3RvcmUgdmFsdWVzIGFzIHBlbmRpbmcgKHN0b3JlIGhhbmRsZXMgdGhpcylcbiAgICBpZiAoIXRoaXMucmVxdWlyZUFwcGx5KSByZXR1cm4gJyc7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydERhdGUoKTtcbiAgICByZXR1cm4gZGF0ZSAmJiB0aGlzLmhhc1BlbmRpbmdDaGFuZ2VzKCkgPyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgOiAnJztcbiAgfVxuICBcbiAgZ2V0IHBlbmRpbmdFbmREYXRlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVBcHBseSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnJhbmdlU3RvcmUuZW5kRGF0ZSgpO1xuICAgIHJldHVybiBkYXRlICYmIHRoaXMuaGFzUGVuZGluZ0NoYW5nZXMoKSA/IHRoaXMuZm9ybWF0RGF0ZShkYXRlKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TW9udGhOYW1lcyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRNb250aE5hbWVzU2hvcnQgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdERheU5hbWVzID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHREYXlOYW1lc1Nob3J0ID0gWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ107XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgY2FsbGJhY2tzXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogRGF0ZVJhbmdlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIC8vIEVmZmVjdCB0byBlbWl0IGNoYW5nZXMgd2hlbiBkYXRlcyBjaGFuZ2UgaW4gc3RvcmVcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnJhbmdlU3RvcmUucmFuZ2UoKTtcbiAgICAgIGlmIChyYW5nZS5zdGFydCB8fCByYW5nZS5lbmQpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmdldERhdGVSYW5nZVZhbHVlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3dEYXRlUGlja2VyKCkgJiYgdGhpcy5jbG9zZU9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGlmICghY2xpY2tlZEluc2lkZSkge1xuICAgICAgICB0aGlzLmNsb3NlRGF0ZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZE5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNob3dEYXRlUGlja2VyKCkpIHtcbiAgICAgIC8vIFdoZW4gcGlja2VyIGlzIGNsb3NlZCwgYWxsb3cgRW50ZXIvU3BhY2UgdG8gb3BlbiBpdFxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXRlcGlja2VyLWlucHV0JykpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMudG9nZ2xlRGF0ZVBpY2tlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2hlbiBwaWNrZXIgaXMgb3BlblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsb3NlRGF0ZVBpY2tlcigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzVmVydGljYWwoLTEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNWZXJ0aWNhbCgxKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzSG9yaXpvbnRhbCgtMSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNIb3Jpem9udGFsKDEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0Rm9jdXNlZERheSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzVG9GaXJzdERheSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNUb0xhc3REYXkoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMubW92ZUZvY3VzWWVhcigtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VNb250aCgtMSk7XG4gICAgICAgICAgdGhpcy5hZGp1c3RGb2N1c0FmdGVyTW9udGhDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLm1vdmVGb2N1c1llYXIoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VNb250aCgxKTtcbiAgICAgICAgICB0aGlzLmFkanVzdEZvY3VzQWZ0ZXJNb250aENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEtleWJvYXJkIG5hdmlnYXRpb24gbWV0aG9kc1xuICBwcml2YXRlIGluaXRpYWxpemVGb2N1cygpOiB2b2lkIHtcbiAgICAvLyBTZXQgaW5pdGlhbCBmb2N1cyB0byBzdGFydCBkYXRlLCBlbmQgZGF0ZSwgb3IgZmlyc3QgYXZhaWxhYmxlIGRheVxuICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgY29uc3QgaW5QcmV2TW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodGhpcy5zdGFydERhdGUsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICAgIGNvbnN0IGluQ3Vyck1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKHRoaXMuc3RhcnREYXRlLCB0aGlzLmN1cnJlbnRNb250aCgpKTtcbiAgICAgIFxuICAgICAgaWYgKGluUHJldk1vbnRoIHx8IGluQ3Vyck1vbnRoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSwgbW9udGhJbmRleDogaW5QcmV2TW9udGggPyAwIDogMSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHN0YXJ0RGF0ZSBpcyBub3QgdmlzaWJsZSwgZm9jdXMgb24gdG9kYXkgaWYgdmlzaWJsZVxuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgY29uc3QgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodG9kYXksIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGluQ3Vyck1vbnRoKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IHRvZGF5LCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb250aERheXMgPSB0aGlzLmN1cnJlbnRNb250aERheXMoKTtcbiAgICAgICAgICBjb25zdCBmaXJzdERheSA9IGN1cnJlbnRNb250aERheXMuZmluZChkYXkgPT4gZGF5LmlzQ3VycmVudE1vbnRoKTtcbiAgICAgICAgICBpZiAoZmlyc3REYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiBmaXJzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICBjb25zdCBpblByZXZNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aCh0aGlzLmVuZERhdGUsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICAgIGNvbnN0IGluQ3Vyck1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKHRoaXMuZW5kRGF0ZSwgdGhpcy5jdXJyZW50TW9udGgoKSk7XG4gICAgICBcbiAgICAgIGlmIChpblByZXZNb250aCB8fCBpbkN1cnJNb250aCkge1xuICAgICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgZGF0ZTogdGhpcy5lbmREYXRlLCBtb250aEluZGV4OiBpblByZXZNb250aCA/IDAgOiAxIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW5kRGF0ZSBpcyBub3QgdmlzaWJsZSwgZm9jdXMgb24gdG9kYXkgaWYgdmlzaWJsZVxuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgY29uc3QgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodG9kYXksIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGluQ3Vyck1vbnRoKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IHRvZGF5LCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb250aERheXMgPSB0aGlzLmN1cnJlbnRNb250aERheXMoKTtcbiAgICAgICAgICBjb25zdCBmaXJzdERheSA9IGN1cnJlbnRNb250aERheXMuZmluZChkYXkgPT4gZGF5LmlzQ3VycmVudE1vbnRoKTtcbiAgICAgICAgICBpZiAoZmlyc3REYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiBmaXJzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb2N1cyBvbiB0b2RheSBpZiB2aXNpYmxlLCBvdGhlcndpc2UgZmlyc3QgZGF5IG9mIGN1cnJlbnQgbW9udGhcbiAgICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5mb3JtYXQodGhpcy5kYXRlQWRhcHRlci50b2RheSgpLCAneXl5eS1NTS1kZCcpO1xuICAgICAgY29uc3QgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodG9kYXksIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgXG4gICAgICBpZiAoaW5DdXJyTW9udGgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IHRvZGF5LCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVG9kYXkgaXMgbm90IGluIGN1cnJlbnQgbW9udGgsIGZvY3VzIG9uIGZpcnN0IGRheSBvZiBjdXJyZW50IG1vbnRoXG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aERheXMgPSB0aGlzLmN1cnJlbnRNb250aERheXMoKTtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBjdXJyZW50TW9udGhEYXlzLmZpbmQoZGF5ID0+IGRheS5pc0N1cnJlbnRNb250aCk7XG4gICAgICAgIGlmIChmaXJzdERheSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiBmaXJzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0RhdGVJbk1vbnRoKGRhdGVTdHI6IHN0cmluZywgbW9udGhEYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF0ZVN0cik7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKTtcbiAgICBjb25zdCBtb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSk7XG4gICAgY29uc3QgbW9udGhZZWFyID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKG1vbnRoRGF0ZSk7XG4gICAgY29uc3QgbW9udGhNb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobW9udGhEYXRlKTtcbiAgICByZXR1cm4geWVhciA9PT0gbW9udGhZZWFyICYmIG1vbnRoID09PSBtb250aE1vbnRoO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNIb3Jpem9udGFsKGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZERheSgpO1xuICAgIGlmICghZm9jdXNlZCkge1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZm9jdXNlZC5kYXRlKTtcbiAgICBpZiAoIWN1cnJlbnREYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5kYXRlQWRhcHRlci5hZGREYXlzKGN1cnJlbnREYXRlLCBkaXJlY3Rpb24pO1xuICAgIGNvbnN0IG5ld0RhdGVTdHIgPSB0aGlzLmZvcm1hdERhdGUobmV3RGF0ZSk7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2hpY2ggbW9udGggdGhlIG5ldyBkYXRlIGJlbG9uZ3MgdG9cbiAgICBsZXQgaW5QcmV2TW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgobmV3RGF0ZVN0ciwgdGhpcy5wcmV2aW91c01vbnRoKCkpO1xuICAgIGxldCBpbkN1cnJNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChuZXdEYXRlU3RyLCB0aGlzLmN1cnJlbnRNb250aCgpKTtcblxuICAgIGlmIChpblByZXZNb250aCB8fCBpbkN1cnJNb250aCkge1xuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IFxuICAgICAgICBkYXRlOiBuZXdEYXRlU3RyLCBcbiAgICAgICAgbW9udGhJbmRleDogaW5QcmV2TW9udGggPyAwIDogMSBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEYXRlIGlzIG91dHNpZGUgdmlzaWJsZSBtb250aHMsIG5hdmlnYXRlIG1vbnRoXG4gICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICB0aGlzLmNoYW5nZU1vbnRoKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VNb250aCgtMSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJlY2FsY3VsYXRlIGFmdGVyIG1vbnRoIGNoYW5nZVxuICAgICAgaW5QcmV2TW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgobmV3RGF0ZVN0ciwgdGhpcy5wcmV2aW91c01vbnRoKCkpO1xuICAgICAgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgobmV3RGF0ZVN0ciwgdGhpcy5jdXJyZW50TW9udGgoKSk7XG4gICAgICBcbiAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBcbiAgICAgICAgZGF0ZTogbmV3RGF0ZVN0ciwgXG4gICAgICAgIG1vbnRoSW5kZXg6IGluUHJldk1vbnRoID8gMCA6IChpbkN1cnJNb250aCA/IDEgOiAwKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNWZXJ0aWNhbChkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvY3VzZWQgPSB0aGlzLmZvY3VzZWREYXkoKTtcbiAgICBpZiAoIWZvY3VzZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGZvY3VzZWQuZGF0ZSk7XG4gICAgaWYgKCFjdXJyZW50RGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIuYWRkRGF5cyhjdXJyZW50RGF0ZSwgZGlyZWN0aW9uICogNyk7IC8vIE1vdmUgYnkgd2Vla1xuICAgIGNvbnN0IG5ld0RhdGVTdHIgPSB0aGlzLmZvcm1hdERhdGUobmV3RGF0ZSk7XG5cbiAgICBsZXQgaW5QcmV2TW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgobmV3RGF0ZVN0ciwgdGhpcy5wcmV2aW91c01vbnRoKCkpO1xuICAgIGxldCBpbkN1cnJNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChuZXdEYXRlU3RyLCB0aGlzLmN1cnJlbnRNb250aCgpKTtcblxuICAgIGlmIChpblByZXZNb250aCB8fCBpbkN1cnJNb250aCkge1xuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IFxuICAgICAgICBkYXRlOiBuZXdEYXRlU3RyLCBcbiAgICAgICAgbW9udGhJbmRleDogaW5QcmV2TW9udGggPyAwIDogMSBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOYXZpZ2F0ZSB0byBtb250aCBjb250YWluaW5nIHRoZSBuZXcgZGF0ZVxuICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VNb250aCgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hhbmdlTW9udGgoLTEpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZWNhbGN1bGF0ZSBhZnRlciBtb250aCBjaGFuZ2VcbiAgICAgIGluUHJldk1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKG5ld0RhdGVTdHIsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICAgIGluQ3Vyck1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKG5ld0RhdGVTdHIsIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgXG4gICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgXG4gICAgICAgIGRhdGU6IG5ld0RhdGVTdHIsIFxuICAgICAgICBtb250aEluZGV4OiBpblByZXZNb250aCA/IDAgOiAoaW5DdXJyTW9udGggPyAxIDogMClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUZvY3VzVG9GaXJzdERheSgpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2TW9udGhEYXlzID0gdGhpcy5wcmV2aW91c01vbnRoRGF5cygpO1xuICAgIGNvbnN0IGZpcnN0RGF5ID0gcHJldk1vbnRoRGF5cy5maW5kKGRheSA9PiBkYXkuaXNDdXJyZW50TW9udGgpO1xuICAgIGlmIChmaXJzdERheSkge1xuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IGZpcnN0RGF5LmRhdGUsIG1vbnRoSW5kZXg6IDAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNUb0xhc3REYXkoKTogdm9pZCB7XG4gICAgY29uc3QgY3Vyck1vbnRoRGF5cyA9IHRoaXMuY3VycmVudE1vbnRoRGF5cygpO1xuICAgIGNvbnN0IHZhbGlkRGF5cyA9IGN1cnJNb250aERheXMuZmlsdGVyKGRheSA9PiBkYXkuaXNDdXJyZW50TW9udGgpO1xuICAgIGNvbnN0IGxhc3REYXkgPSB2YWxpZERheXNbdmFsaWREYXlzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0RGF5KSB7XG4gICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgZGF0ZTogbGFzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUZvY3VzWWVhcihkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvY3VzZWQgPSB0aGlzLmZvY3VzZWREYXkoKTtcbiAgICBpZiAoIWZvY3VzZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGZvY3VzZWQuZGF0ZSk7XG4gICAgaWYgKCFjdXJyZW50RGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVudFllYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoY3VycmVudERhdGUpO1xuICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoY3VycmVudERhdGUpO1xuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmRhdGVBZGFwdGVyLmdldERhdGUoY3VycmVudERhdGUpO1xuICAgIFxuICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoY3VycmVudFllYXIgKyBkaXJlY3Rpb24sIGN1cnJlbnRNb250aCwgY3VycmVudERheSk7XG4gICAgY29uc3QgbmV3RGF0ZVN0ciA9IHRoaXMuZm9ybWF0RGF0ZShuZXdEYXRlKTtcblxuICAgIC8vIFVwZGF0ZSBtb250aHMgdG8gc2hvdyB0aGUgbmV3IHllYXJcbiAgICB0aGlzLmN1cnJlbnRNb250aC5zZXQodGhpcy5kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGN1cnJlbnRZZWFyICsgZGlyZWN0aW9uLCBjdXJyZW50TW9udGgsIDEpKTtcbiAgICB0aGlzLnByZXZpb3VzTW9udGguc2V0KHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShjdXJyZW50WWVhciArIGRpcmVjdGlvbiwgY3VycmVudE1vbnRoIC0gMSwgMSkpO1xuICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcnMoKTtcblxuICAgIGNvbnN0IGluUHJldk1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKG5ld0RhdGVTdHIsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgXG4gICAgICBkYXRlOiBuZXdEYXRlU3RyLCBcbiAgICAgIG1vbnRoSW5kZXg6IGluUHJldk1vbnRoID8gMCA6IDEgXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdEZvY3VzQWZ0ZXJNb250aENoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmb2N1c2VkID0gdGhpcy5mb2N1c2VkRGF5KCk7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm47XG5cbiAgICBjb25zdCBpblByZXZNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChmb2N1c2VkLmRhdGUsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICBjb25zdCBpbkN1cnJNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChmb2N1c2VkLmRhdGUsIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuXG4gICAgaWYgKCFpblByZXZNb250aCAmJiAhaW5DdXJyTW9udGgpIHtcbiAgICAgIC8vIEZvY3VzZWQgZGF5IGlzIG5vIGxvbmdlciB2aXNpYmxlLCBtb3ZlIHRvIGVxdWl2YWxlbnQgZGF5IGluIHZpc2libGUgbW9udGhzXG4gICAgICB0aGlzLmluaXRpYWxpemVGb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgbW9udGggaW5kZXggaWYgbmVlZGVkXG4gICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHtcbiAgICAgICAgZGF0ZTogZm9jdXNlZC5kYXRlLFxuICAgICAgICBtb250aEluZGV4OiBpblByZXZNb250aCA/IDAgOiAxXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEZvY3VzZWREYXkoKTogdm9pZCB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZERheSgpO1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9udGhEYXlzID0gZm9jdXNlZC5tb250aEluZGV4ID09PSAwID8gdGhpcy5wcmV2aW91c01vbnRoRGF5cygpIDogdGhpcy5jdXJyZW50TW9udGhEYXlzKCk7XG4gICAgY29uc3QgZGF5T2JqID0gbW9udGhEYXlzLmZpbmQoZGF5ID0+IGRheS5kYXRlID09PSBmb2N1c2VkLmRhdGUgJiYgZGF5LmlzQ3VycmVudE1vbnRoKTtcbiAgICBcbiAgICBpZiAoZGF5T2JqKSB7XG4gICAgICB0aGlzLnNlbGVjdERheShkYXlPYmopO1xuICAgIH1cbiAgfVxuXG4gIGhhc0tleWJvYXJkRm9jdXMoZGF0ZTogc3RyaW5nLCBtb250aEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBmb2N1c2VkID0gdGhpcy5mb2N1c2VkRGF5KCk7XG4gICAgcmV0dXJuIGZvY3VzZWQgIT09IG51bGwgJiYgZm9jdXNlZC5kYXRlID09PSBkYXRlICYmIGZvY3VzZWQubW9udGhJbmRleCA9PT0gbW9udGhJbmRleDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIENvbmZpZ3VyZSB0aGUgaGVhZGxlc3Mgc3RvcmVcbiAgICB0aGlzLnJhbmdlU3RvcmUuY29uZmlndXJlKHtcbiAgICAgIGVuYWJsZVRpbWVQaWNrZXI6IHRoaXMuZW5hYmxlVGltZVBpY2tlcixcbiAgICAgIGRlZmF1bHRTdGFydFRpbWU6IHRoaXMuZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIGRlZmF1bHRFbmRUaW1lOiB0aGlzLmRlZmF1bHRFbmRUaW1lLFxuICAgICAgZGlzYWJsZWREYXRlczogdGhpcy5kaXNhYmxlZERhdGVzXG4gICAgfSk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBkYXRlcyBpbiBzdG9yZSBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UodGhpcy5zdGFydERhdGUpO1xuICAgICAgaWYgKGRhdGUpIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydChkYXRlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5kRGF0ZSkge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UodGhpcy5lbmREYXRlKTtcbiAgICAgIGlmIChkYXRlKSB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKGRhdGUpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXJzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzdGFydERhdGUnXSB8fCBjaGFuZ2VzWydlbmREYXRlJ10pIHtcbiAgICAgIC8vIFN5bmMgd2l0aCBzdG9yZVxuICAgICAgaWYgKGNoYW5nZXNbJ3N0YXJ0RGF0ZSddICYmIHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKHRoaXMuc3RhcnREYXRlKTtcbiAgICAgICAgaWYgKGRhdGUpIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydChkYXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzWydlbmREYXRlJ10gJiYgdGhpcy5lbmREYXRlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKHRoaXMuZW5kRGF0ZSk7XG4gICAgICAgIGlmIChkYXRlKSB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKGRhdGUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIHN0b3JlIGNvbmZpZ3VyYXRpb24gaWYgcmVsZXZhbnQgaW5wdXRzIGNoYW5nZVxuICAgIGlmIChjaGFuZ2VzWydlbmFibGVUaW1lUGlja2VyJ10gfHwgY2hhbmdlc1snZGVmYXVsdFN0YXJ0VGltZSddIHx8IFxuICAgICAgICBjaGFuZ2VzWydkZWZhdWx0RW5kVGltZSddIHx8IGNoYW5nZXNbJ2Rpc2FibGVkRGF0ZXMnXSkge1xuICAgICAgdGhpcy5yYW5nZVN0b3JlLmNvbmZpZ3VyZSh7XG4gICAgICAgIGVuYWJsZVRpbWVQaWNrZXI6IHRoaXMuZW5hYmxlVGltZVBpY2tlcixcbiAgICAgICAgZGVmYXVsdFN0YXJ0VGltZTogdGhpcy5kZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgICBkZWZhdWx0RW5kVGltZTogdGhpcy5kZWZhdWx0RW5kVGltZSxcbiAgICAgICAgZGlzYWJsZWREYXRlczogdGhpcy5kaXNhYmxlZERhdGVzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSBTdHJpbmcodGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShkYXRlKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgfVxuXG4gIGZvcm1hdERhdGVEaXNwbGF5KGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF0ZVN0cik7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKTtcbiAgICBjb25zdCBtb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSk7XG4gICAgY29uc3QgZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGRhdGUpO1xuICAgIFxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSB0aGlzLmxvY2FsZS5tb250aE5hbWVzIHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXM7XG4gICAgY29uc3QgbW9udGhOYW1lc1Nob3J0ID0gdGhpcy5sb2NhbGUubW9udGhOYW1lc1Nob3J0IHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXNTaG9ydDtcbiAgICBcbiAgICAvLyBSZXBsYWNlIGZvcm1hdCB0b2tlbnMgd2l0aCB2YWx1ZXNcbiAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5kaXNwbGF5Rm9ybWF0O1xuICAgIFxuICAgIC8vIFllYXIgdG9rZW5zXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1lZWVkvZywgU3RyaW5nKHllYXIpKTtcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvWVkvZywgU3RyaW5nKHllYXIpLnNsaWNlKC0yKSk7XG4gICAgXG4gICAgLy8gTW9udGggdG9rZW5zIChvcmRlciBtYXR0ZXJzOiBNTU1NIGJlZm9yZSBNTU0gYmVmb3JlIE1NIGJlZm9yZSBNKVxuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9NTU1NL2csIG1vbnRoTmFtZXNbbW9udGhdKTtcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvTU1NL2csIG1vbnRoTmFtZXNTaG9ydFttb250aF0pO1xuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9NTS9nLCBTdHJpbmcobW9udGggKyAxKS5wYWRTdGFydCgyLCAnMCcpKTtcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvTS9nLCBTdHJpbmcobW9udGggKyAxKSk7XG4gICAgXG4gICAgLy8gRGF5IHRva2VucyAob3JkZXIgbWF0dGVyczogREQgYmVmb3JlIEQpXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL0REL2csIFN0cmluZyhkYXkpLnBhZFN0YXJ0KDIsICcwJykpO1xuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9EL2csIFN0cmluZyhkYXkpKTtcbiAgICBcbiAgICByZXR1cm4gZm9ybWF0dGVkO1xuICB9XG5cbiAgLy8gTm90ZTogdXBkYXRlRGF0ZVJhbmdlVGV4dCBpcyBub3cgaGFuZGxlZCBieSBjb21wdXRlZCBkYXRlUmFuZ2VUZXh0IGZyb20gc3RvcmVcbiAgLy8gS2VlcGluZyB0aGlzIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgaXQncyBhIG5vLW9wXG4gIHVwZGF0ZURhdGVSYW5nZVRleHQoKTogdm9pZCB7XG4gICAgLy8gVGV4dCBpcyBub3cgYXV0b21hdGljYWxseSBjb21wdXRlZCBmcm9tIHN0b3JlLnJhbmdlVGV4dCgpXG4gIH1cblxuICB0b2dnbGVEYXRlUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RhdGVQaWNrZXIudXBkYXRlKHZhbHVlID0+ICF2YWx1ZSk7XG4gICAgaWYgKHRoaXMuc2hvd0RhdGVQaWNrZXIoKSkge1xuICAgICAgLy8gc2VsZWN0aW5nU3RhcnQgaXMgbWFuYWdlZCBieSBzdG9yZSwgbm8gbmVlZCB0byBzZXQgaGVyZVxuICAgICAgY29uc3QgY3VycmVudE1vbnRoVmFsdWUgPSB0aGlzLmN1cnJlbnRNb250aCgpO1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihjdXJyZW50TW9udGhWYWx1ZSk7XG4gICAgICBjb25zdCBtb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoY3VycmVudE1vbnRoVmFsdWUpO1xuICAgICAgY29uc3QgcHJldmlvdXNNb250aERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGggLSAxLCAxKTtcbiAgICAgIHRoaXMucHJldmlvdXNNb250aC5zZXQocHJldmlvdXNNb250aERhdGUpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgICAgLy8gSW5pdGlhbGl6ZSBrZXlib2FyZCBmb2N1cyBvbmx5IGlmIGtleWJvYXJkIG5hdmlnYXRpb24gaXMgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsZWFyIGZvY3VzIHdoZW4gY2xvc2luZ1xuICAgICAgaWYgKHRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBjbG9zZURhdGVQaWNrZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbikge1xuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldChudWxsKTtcbiAgICB9XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGdlbmVyYXRlQ2FsZW5kYXJzKCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlvdXNNb250aERheXMuc2V0KHRoaXMuZ2VuZXJhdGVNb250aENhbGVuZGFyKHRoaXMucHJldmlvdXNNb250aCgpKSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXlzLnNldCh0aGlzLmdlbmVyYXRlTW9udGhDYWxlbmRhcih0aGlzLmN1cnJlbnRNb250aCgpKSk7XG4gICAgXG4gICAgLy8gUmVzZXQgdmlydHVhbCB3ZWVrIHdpbmRvd3Mgd2hlbiBtb250aCBjaGFuZ2VzICh2My45LjArKVxuICAgIC8vIEFsd2F5cyBzdGFydCBhdCBmaXJzdCB3ZWVrIGZvciBjb25zaXN0ZW50IFVYXG4gICAgaWYgKHRoaXMudmlydHVhbFdlZWtzKSB7XG4gICAgICB0aGlzLnByZXZpb3VzTW9udGhXZWVrU3RhcnQuc2V0KDApO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhXZWVrU3RhcnQuc2V0KDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIHdpdGggZGVjb3JhdGlvbnMgKHYzLjguMCspXG4gICAqIFxuICAgKiBVc2VzIENhbGVuZGFyR3JpZENhY2hlIGZvciBiYXNlIGdyaWQgc3RydWN0dXJlIChtZW1vaXplZCBieSBtb250aCksXG4gICAqIHRoZW4gdXNlcyBSYW5nZUhpZ2hsaWdodGVyQ2FjaGUgZm9yIGRlY29yYXRpb25zIChtZW1vaXplZCBieSByYW5nZS9jb25zdHJhaW50cykuXG4gICAqIFxuICAgKiBQZXJmb3JtYW5jZTpcbiAgICogLSBHcmlkIHN0cnVjdHVyZTogQ2FjaGVkIGJ5IG1vbnRoIChzYW1lIG1vbnRoID0gc2FtZSBncmlkIG9iamVjdClcbiAgICogLSBEZWNvcmF0aW9uczogQ2FjaGVkIGJ5IHJhbmdlK2hvdmVyK2Rpc2FibGVkIChzYW1lIHN0YXRlID0gc2FtZSBkZWNvcmF0ZWQgZ3JpZClcbiAgICogLSBSZXN1bHQ6IH45NSUgY2FjaGUgaGl0IHJhdGUgaW4gdHlwaWNhbCB1c2FnZVxuICAgKiBcbiAgICogQ2FjaGUga2V5czpcbiAgICogLSBHcmlkOiBgJHt5ZWFyfS0ke21vbnRofS0ke3dlZWtTdGFydH1gXG4gICAqIC0gRGVjb3JhdGlvbnM6IGAke21vbnRoS2V5fXwke3N0YXJ0fXwke2VuZH18JHtob3Zlcn18JHtkaXNhYmxlZH1gXG4gICAqL1xuICBnZW5lcmF0ZU1vbnRoQ2FsZW5kYXIoZGF0ZTogRGF0ZSk6IGFueVtdIHtcbiAgICAvLyBHZXQgYmFzZSBncmlkIGZyb20gY2FjaGUgKHdlZWtTdGFydCA9IDAgZm9yIFN1bmRheSwgbm8gbG9jYWxlIGZvciBub3cpXG4gICAgY29uc3QgZ3JpZDogQ2FsZW5kYXJHcmlkID0gdGhpcy5ncmlkQ2FjaGUuZ2V0KGRhdGUsIDApO1xuICAgIFxuICAgIC8vIEdldCBkYXRlcyBmcm9tIHN0b3JlXG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5yYW5nZVN0b3JlLnN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLnJhbmdlU3RvcmUuZW5kRGF0ZSgpO1xuICAgIGNvbnN0IGhvdmVySVNPID0gdGhpcy5ob3ZlckRhdGUoKTtcbiAgICBcbiAgICAvLyBHZXQgZGVjb3JhdGVkIGdyaWQgZnJvbSBjYWNoZSAoaGFuZGxlcyBhbGwgZGVjb3JhdGlvbiBsb2dpYylcbiAgICBjb25zdCBkZWNvcmF0ZWQgPSB0aGlzLmhpZ2hsaWdodGVyQ2FjaGUuZ2V0KGdyaWQsIHtcbiAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICBlbmQ6IGVuZERhdGUsXG4gICAgICBob3ZlckRhdGU6IGhvdmVySVNPLFxuICAgICAgZGlzYWJsZWREYXRlczogdGhpcy5kaXNhYmxlZERhdGVzLFxuICAgICAgbXVsdGlSYW5nZTogdGhpcy5tdWx0aVJhbmdlLFxuICAgICAgc2VsZWN0aW5nU3RhcnREYXRlOiB0aGlzLnNlbGVjdGluZ1N0YXJ0RGF0ZSgpXG4gICAgICAvLyBtaW5EYXRlL21heERhdGUgb21pdHRlZCBmb3Igbm93IChub3QgaW4gY3VycmVudCBBUEkpXG4gICAgfSk7XG4gICAgXG4gICAgLy8gTWFwIGRlY29yYXRlZCBjZWxscyB0byBsZWdhY3kgZm9ybWF0IChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICBjb25zdCBtb250aERheXMgPSBkZWNvcmF0ZWQuY2VsbHMubWFwKChjZWxsOiBEZWNvcmF0ZWRDZWxsKSA9PiB7XG4gICAgICBpZiAoIWNlbGwuaW5DdXJyZW50TW9udGgpIHtcbiAgICAgICAgLy8gUGFkZGluZyBjZWxsIChwcmV2aW91cy9uZXh0IG1vbnRoKVxuICAgICAgICByZXR1cm4geyBkYXk6IG51bGwsIGlzQ3VycmVudE1vbnRoOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDdXJyZW50IG1vbnRoIGNlbGwgLSB1c2UgY2FjaGVkIGRlY29yYXRpb25zXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXk6IGNlbGwuZGF5LFxuICAgICAgICBkYXRlOiBjZWxsLmlzbyxcbiAgICAgICAgaXNDdXJyZW50TW9udGg6IHRydWUsXG4gICAgICAgIGlzU3RhcnQ6IGNlbGwuaXNTZWxlY3RlZFN0YXJ0LFxuICAgICAgICBpc0VuZDogY2VsbC5pc1NlbGVjdGVkRW5kLFxuICAgICAgICBpblJhbmdlOiBjZWxsLmlzSW5SYW5nZSxcbiAgICAgICAgaW5Ib3ZlclJhbmdlOiBjZWxsLmlzSW5Ib3ZlclJhbmdlLFxuICAgICAgICBpc0Rpc2FibGVkOiBjZWxsLmlzRGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW9udGhEYXlzO1xuICB9XG5cbiAgaXNJblJhbmdlKGRhdGVTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm11bHRpUmFuZ2UpIHtcbiAgICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgaW4gYW55IG9mIHRoZSBzZWxlY3RlZCByYW5nZXNcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2VzKCkuc29tZShyYW5nZSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRlU3RyID49IHJhbmdlLnN0YXJ0RGF0ZSAmJiBkYXRlU3RyIDw9IHJhbmdlLmVuZERhdGU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSB8fCAhdGhpcy5lbmREYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gZGF0ZVN0ciA+PSB0aGlzLnN0YXJ0RGF0ZSAmJiBkYXRlU3RyIDw9IHRoaXMuZW5kRGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmlydHVhbCBXZWVrcyBOYXZpZ2F0aW9uICh2My45LjArKVxuICAgKiBcbiAgICogTmF2aWdhdGUgdGhlIHZpc2libGUgd2VlayB3aW5kb3cgdXAvZG93biBmb3Igd2luZG93ZWQgcmVuZGVyaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIG1vbnRoSW5kZXggMCA9IHByZXZpb3VzIG1vbnRoLCAxID0gY3VycmVudCBtb250aFxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIC0xID0gc2Nyb2xsIHVwIChwcmV2aW91cyB3ZWVrcyksICsxID0gc2Nyb2xsIGRvd24gKG5leHQgd2Vla3MpXG4gICAqIFxuICAgKiBFeGFtcGxlOiBJZiB3aW5kb3dTaXplPTMgYW5kIHdlZWtTdGFydD0wLCBuYXZpZ2F0ZVdlZWtzKDAsICsxKSBzaG93cyB3ZWVrcyAxLTMuXG4gICAqL1xuICBuYXZpZ2F0ZVdlZWtzKG1vbnRoSW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFdlZWtzKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdG90YWxXZWVrcyA9IDY7IC8vIFN0YW5kYXJkIGNhbGVuZGFyIGdyaWQgaGFzIDYgd2Vla3NcbiAgICBjb25zdCBjdXJyZW50U3RhcnQgPSBtb250aEluZGV4ID09PSAwIFxuICAgICAgPyB0aGlzLnByZXZpb3VzTW9udGhXZWVrU3RhcnQoKSBcbiAgICAgIDogdGhpcy5jdXJyZW50TW9udGhXZWVrU3RhcnQoKTtcbiAgICBcbiAgICBjb25zdCBuZXdTdGFydCA9IG5hdmlnYXRlV2Vla1dpbmRvdyhcbiAgICAgIGN1cnJlbnRTdGFydCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHRvdGFsV2Vla3MsXG4gICAgICB0aGlzLnZpcnR1YWxXZWVrcy53aW5kb3dTaXplXG4gICAgKTtcbiAgICBcbiAgICBpZiAobW9udGhJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5wcmV2aW91c01vbnRoV2Vla1N0YXJ0LnNldChuZXdTdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoV2Vla1N0YXJ0LnNldChuZXdTdGFydCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlZWsgbmF2aWdhdGlvbiBpcyBhdmFpbGFibGUgKHYzLjkuMCspXG4gICAqIFxuICAgKiBAcGFyYW0gbW9udGhJbmRleCAwID0gcHJldmlvdXMgbW9udGgsIDEgPSBjdXJyZW50IG1vbnRoXG4gICAqIEBwYXJhbSBkaXJlY3Rpb24gLTEgPSB1cCAoY2FuIHNjcm9sbCB0byBwcmV2aW91cyB3ZWVrcz8pLCArMSA9IGRvd24gKGNhbiBzY3JvbGwgdG8gbmV4dCB3ZWVrcz8pXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbmF2aWdhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhhdCBkaXJlY3Rpb25cbiAgICovXG4gIGNhbk5hdmlnYXRlV2Vla3MobW9udGhJbmRleDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52aXJ0dWFsV2Vla3MpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCB0b3RhbFdlZWtzID0gNjtcbiAgICBjb25zdCBjdXJyZW50U3RhcnQgPSBtb250aEluZGV4ID09PSAwIFxuICAgICAgPyB0aGlzLnByZXZpb3VzTW9udGhXZWVrU3RhcnQoKSBcbiAgICAgIDogdGhpcy5jdXJyZW50TW9udGhXZWVrU3RhcnQoKTtcbiAgICBcbiAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgLy8gQ2FuIHNjcm9sbCB1cCBpZiBub3QgYXQgc3RhcnRcbiAgICAgIHJldHVybiBjdXJyZW50U3RhcnQgPiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYW4gc2Nyb2xsIGRvd24gaWYgd2luZG93IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgZW5kXG4gICAgICByZXR1cm4gY3VycmVudFN0YXJ0ICsgdGhpcy52aXJ0dWFsV2Vla3Mud2luZG93U2l6ZSA8IHRvdGFsV2Vla3M7XG4gICAgfVxuICB9XG5cbiAgaXNEYXRlRGlzYWJsZWQoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZERhdGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHdpdGggdGhlIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMoZGF0ZSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGlzYWJsZWREYXRlcykpIHtcbiAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIGNoZWNrIGlmIHRoZSBkYXRlIG1hdGNoZXMgYW55IGRpc2FibGVkIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZShkaXNhYmxlZERhdGUgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpID09PSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoZGlzYWJsZWREYXRlKSAmJlxuICAgICAgICAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSA9PT0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChkaXNhYmxlZERhdGUpICYmXG4gICAgICAgICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLmdldERhdGUoZGF0ZSkgPT09IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShkaXNhYmxlZERhdGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzSW5Ib3ZlclJhbmdlKGRhdGVTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvdmVyID0gdGhpcy5ob3ZlckRhdGUoKTtcbiAgICBpZiAoIWhvdmVyKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBJbiBtdWx0aVJhbmdlIG1vZGUsIG9ubHkgc2hvdyBob3ZlciBwcmV2aWV3IHdoZW4gc2VsZWN0aW5nIGVuZCBkYXRlXG4gICAgaWYgKHRoaXMubXVsdGlSYW5nZSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW5nU3RhcnREYXRlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGFydCA9IHRoaXMuc3RhcnREYXRlO1xuICAgICAgaWYgKCFjdXJyZW50U3RhcnQpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSBjdXJyZW50U3RhcnQgPCBob3ZlciA/IGN1cnJlbnRTdGFydCA6IGhvdmVyO1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IGN1cnJlbnRTdGFydCA+IGhvdmVyID8gY3VycmVudFN0YXJ0IDogaG92ZXI7XG4gICAgICByZXR1cm4gZGF0ZVN0ciA+PSBtaW5EYXRlICYmIGRhdGVTdHIgPD0gbWF4RGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gc2luZ2xlIHJhbmdlIG1vZGUgIFxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW5nU3RhcnREYXRlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMucmVxdWlyZUFwcGx5KSB7XG4gICAgICAgIC8vIFVzZSBwZW5kaW5nIGRhdGVzIGZyb20gc3RvcmVcbiAgICAgICAgY29uc3QgcGVuZGluZ1N0YXJ0ID0gdGhpcy5yYW5nZVN0b3JlLnN0YXJ0RGF0ZSgpO1xuICAgICAgICBpZiAoIXBlbmRpbmdTdGFydCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBwZW5kaW5nU3RhcnRTdHIgPSB0aGlzLmZvcm1hdERhdGUocGVuZGluZ1N0YXJ0KTtcbiAgICAgICAgY29uc3QgbWluRGF0ZSA9IHBlbmRpbmdTdGFydFN0ciA8IGhvdmVyID8gcGVuZGluZ1N0YXJ0U3RyIDogaG92ZXI7XG4gICAgICAgIGNvbnN0IG1heERhdGUgPSBwZW5kaW5nU3RhcnRTdHIgPiBob3ZlciA/IHBlbmRpbmdTdGFydFN0ciA6IGhvdmVyO1xuICAgICAgICByZXR1cm4gZGF0ZVN0ciA+PSBtaW5EYXRlICYmIGRhdGVTdHIgPD0gbWF4RGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZSBhY3R1YWwgZGF0ZXNcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXJ0ID0gdGhpcy5zdGFydERhdGU7XG4gICAgICAgIGlmICghY3VycmVudFN0YXJ0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1pbkRhdGUgPSBjdXJyZW50U3RhcnQgPCBob3ZlciA/IGN1cnJlbnRTdGFydCA6IGhvdmVyO1xuICAgICAgICBjb25zdCBtYXhEYXRlID0gY3VycmVudFN0YXJ0ID4gaG92ZXIgPyBjdXJyZW50U3RhcnQgOiBob3ZlcjtcbiAgICAgICAgcmV0dXJuIGRhdGVTdHIgPj0gbWluRGF0ZSAmJiBkYXRlU3RyIDw9IG1heERhdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXlIb3ZlcihkYXlPYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZGF5T2JqLmlzQ3VycmVudE1vbnRoIHx8IHRoaXMuaXNEaXNhYmxlZCgpIHx8IGRheU9iai5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmhvdmVyRGF0ZS5zZXQobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaG92ZXJEYXRlLnNldChkYXlPYmouZGF0ZSk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG5cbiAgY2xlYXJEYXlIb3ZlcigpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyRGF0ZS5zZXQobnVsbCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG5cbiAgc2VsZWN0RGF5KGRheU9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKCFkYXlPYmouaXNDdXJyZW50TW9udGggfHwgdGhpcy5pc0Rpc2FibGVkKCkgfHwgZGF5T2JqLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGRheU9iai5kYXRlKTtcbiAgICBpZiAoIXNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMubXVsdGlSYW5nZSkge1xuICAgICAgLy8gTXVsdGktcmFuZ2UgbW9kZTogYWRkIHJhbmdlcyB0byBhcnJheVxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW5nU3RhcnREYXRlKCkpIHtcbiAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldFN0YXJ0KHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmQobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhcnQgPSB0aGlzLnJhbmdlU3RvcmUuc3RhcnREYXRlKCk7XG4gICAgICAgIGlmIChjdXJyZW50U3RhcnQgJiYgc2VsZWN0ZWREYXRlIDwgY3VycmVudFN0YXJ0KSB7XG4gICAgICAgICAgLy8gU3dhcDogc2VsZWN0ZWQgYmVjb21lcyBzdGFydCwgY3VycmVudCBzdGFydCBiZWNvbWVzIGVuZFxuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmQoY3VycmVudFN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEFkZCB0aGUgbmV3IHJhbmdlIHRvIHRoZSBhcnJheVxuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucmFuZ2VTdG9yZS5yYW5nZSgpO1xuICAgICAgICBjb25zdCBuZXdSYW5nZTogRGF0ZVJhbmdlID0ge1xuICAgICAgICAgIHN0YXJ0RGF0ZTogcmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgZW5kRGF0ZTogcmFuZ2UuZW5kLFxuICAgICAgICAgIHJhbmdlVGV4dDogdGhpcy5mb3JtYXREYXRlRGlzcGxheShyYW5nZS5zdGFydCkgKyAnIOKAkyAnICsgdGhpcy5mb3JtYXREYXRlRGlzcGxheShyYW5nZS5lbmQpLFxuICAgICAgICAgIC4uLih0aGlzLmVuYWJsZVRpbWVQaWNrZXIgJiYgeyBzdGFydFRpbWU6IHJhbmdlLnN0YXJ0VGltZSwgZW5kVGltZTogcmFuZ2UuZW5kVGltZSB9KVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgY29uc3QgY3VycmVudFJhbmdlcyA9IFsuLi50aGlzLnNlbGVjdGVkUmFuZ2VzKCldO1xuICAgICAgICBjdXJyZW50UmFuZ2VzLnB1c2gobmV3UmFuZ2UpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VzLnNldChjdXJyZW50UmFuZ2VzKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlc2V0IGZvciBuZXh0IHJhbmdlIHNlbGVjdGlvblxuICAgICAgICB0aGlzLnJhbmdlU3RvcmUucmVzZXQoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSBkaXNwbGF5IHRleHRcbiAgICAgICAgdGhpcy51cGRhdGVNdWx0aVJhbmdlVGV4dCgpO1xuICAgICAgICBcbiAgICAgICAgLy8gRG9uJ3QgY2xvc2UgaWYgbXVsdGlSYW5nZSwgYWxsb3cgYWRkaW5nIG1vcmUgcmFuZ2VzXG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3Rpb24gJiYgIXRoaXMubXVsdGlSYW5nZSkge1xuICAgICAgICAgIHRoaXMuc2hvd0RhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5lbWl0TXVsdGlDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5lbWl0TXVsdGlTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2luZ2xlIHJhbmdlIG1vZGVcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVBcHBseSkge1xuICAgICAgICAvLyBBcHBseSBtb2RlOiB1c2UgcGVuZGluZyBkYXRlcywgZG9uJ3QgZW1pdCB1bnRpbCBBcHBseSBpcyBjbGlja2VkXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGluZ1N0YXJ0RGF0ZSgpKSB7XG4gICAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldFBlbmRpbmdTdGFydChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRQZW5kaW5nRW5kKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBlbmRpbmdTdGFydCA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydERhdGUoKTtcbiAgICAgICAgICBpZiAocGVuZGluZ1N0YXJ0ICYmIHNlbGVjdGVkRGF0ZSA8IHBlbmRpbmdTdGFydCkge1xuICAgICAgICAgICAgLy8gU3dhcFxuICAgICAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldFBlbmRpbmdTdGFydChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldFBlbmRpbmdFbmQocGVuZGluZ1N0YXJ0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldFBlbmRpbmdFbmQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSW1tZWRpYXRlIG1vZGU6IGVtaXQgY2hhbmdlcyBpbW1lZGlhdGVseVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RpbmdTdGFydERhdGUoKSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmQobnVsbCk7XG4gICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFN0YXJ0ID0gdGhpcy5yYW5nZVN0b3JlLnN0YXJ0RGF0ZSgpO1xuICAgICAgICAgIGlmIChjdXJyZW50U3RhcnQgJiYgc2VsZWN0ZWREYXRlIDwgY3VycmVudFN0YXJ0KSB7XG4gICAgICAgICAgICAvLyBTd2FwXG4gICAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0U3RhcnQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmQoY3VycmVudFN0YXJ0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldEVuZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzUGVuZGluZ0NoYW5nZXMoKSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIEFwcGx5IHBlbmRpbmcgZGF0ZXMgdGhyb3VnaCBzdG9yZVxuICAgIHRoaXMucmFuZ2VTdG9yZS5hcHBseVBlbmRpbmcoKTtcbiAgICBcbiAgICAvLyBFbWl0IGNoYW5nZXNcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgICBcbiAgICAvLyBDbG9zZSBwaWNrZXJcbiAgICB0aGlzLnNob3dEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gIH1cblxuICBjYW5jZWxTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gRGlzY2FyZCBwZW5kaW5nIGNoYW5nZXMgdGhyb3VnaCBzdG9yZVxuICAgIHRoaXMucmFuZ2VTdG9yZS5jYW5jZWxQZW5kaW5nKCk7XG4gICAgXG4gICAgLy8gUmVnZW5lcmF0ZSBjYWxlbmRhcnMgdG8gY2xlYXIgcGVuZGluZyB2aXN1YWwgc3RhdGVcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXJzKCk7XG4gIH1cblxuICBjaGFuZ2VNb250aChkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRNb250aFZhbHVlID0gdGhpcy5jdXJyZW50TW9udGgoKTtcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKGN1cnJlbnRNb250aFZhbHVlKTtcbiAgICBjb25zdCBtb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoY3VycmVudE1vbnRoVmFsdWUpO1xuICAgIGNvbnN0IG5ld0N1cnJlbnRNb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCArIGRpcmVjdGlvbiwgMSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGguc2V0KG5ld0N1cnJlbnRNb250aCk7XG4gICAgXG4gICAgY29uc3QgbmV3WWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihuZXdDdXJyZW50TW9udGgpO1xuICAgIGNvbnN0IG5ld01vbnRoID0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChuZXdDdXJyZW50TW9udGgpO1xuICAgIGNvbnN0IG5ld1ByZXZpb3VzTW9udGggPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUobmV3WWVhciwgbmV3TW9udGggLSAxLCAxKTtcbiAgICB0aGlzLnByZXZpb3VzTW9udGguc2V0KG5ld1ByZXZpb3VzTW9udGgpO1xuICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcnMoKTtcbiAgfVxuXG4gIGdldE1vbnRoTmFtZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb250aE5hbWVzID0gdGhpcy5sb2NhbGUubW9udGhOYW1lcyB8fCB0aGlzLmRlZmF1bHRNb250aE5hbWVzO1xuICAgIHJldHVybiBgJHttb250aE5hbWVzW3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSldfSAke3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKX1gO1xuICB9XG5cbiAgZ2V0RGF5TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZS5kYXlOYW1lc1Nob3J0IHx8IHRoaXMuZGVmYXVsdERheU5hbWVzU2hvcnQ7XG4gIH1cblxuICBzZWxlY3RQcmVzZXRSYW5nZShwcmVzZXQ6IFByZXNldENvbmZpZyk6IHZvaWQge1xuICAgIGlmICghcHJlc2V0LmdldFZhbHVlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdQcmVzZXRDb25maWcgbXVzdCBoYXZlIGdldFZhbHVlKCkgZnVuY3Rpb24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IHByZXNldC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UocmFuZ2Uuc3RhcnQpO1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKHJhbmdlLmVuZCk7XG4gICAgXG4gICAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0UmFuZ2Uoc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgIGlmICh0aGlzLmNsb3NlT25QcmVzZXRTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2hvd0RhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnJhbmdlU3RvcmUucmVzZXQoKTtcbiAgICB0aGlzLnNob3dEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgXG4gICAgaWYgKHRoaXMubXVsdGlSYW5nZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlcy5zZXQoW10pO1xuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VJbmRleC5zZXQoLTEpO1xuICAgICAgdGhpcy5lbWl0TXVsdGlDaGFuZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG4gIFxuICByZW1vdmVSYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpUmFuZ2UpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjdXJyZW50UmFuZ2VzID0gWy4uLnRoaXMuc2VsZWN0ZWRSYW5nZXMoKV07XG4gICAgY3VycmVudFJhbmdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZXMuc2V0KGN1cnJlbnRSYW5nZXMpO1xuICAgIFxuICAgIHRoaXMudXBkYXRlTXVsdGlSYW5nZVRleHQoKTtcbiAgICB0aGlzLmVtaXRNdWx0aUNoYW5nZSgpO1xuICAgIHRoaXMuZW1pdE11bHRpU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG4gIFxuICBwcml2YXRlIHVwZGF0ZU11bHRpUmFuZ2VUZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5zZWxlY3RlZFJhbmdlcygpLmxlbmd0aDtcbiAgICAvLyBOb3RlOiBkYXRlUmFuZ2VUZXh0IGlzIG5vdyBjb21wdXRlZCBmcm9tIHN0b3JlLCB0aGlzIGlzIGZvciBtdWx0aS1yYW5nZSBVSSBvbmx5XG4gICAgLy8gV2UgY291bGQgc3RvcmUgdGhpcyBpbiBhIHNlcGFyYXRlIHNpZ25hbCBpZiBuZWVkZWQsIGJ1dCBmb3Igbm93IGp1c3QgdHJhY2sgcmFuZ2VzIGNvdW50XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmVSYW5nZSA9IHRoaXMucmFuZ2VTdG9yZS5yYW5nZSgpO1xuICAgIGNvbnN0IHJhbmdlOiBEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydERhdGU6IHN0b3JlUmFuZ2Uuc3RhcnQsXG4gICAgICBlbmREYXRlOiBzdG9yZVJhbmdlLmVuZCxcbiAgICAgIHJhbmdlVGV4dDogdGhpcy5kYXRlUmFuZ2VUZXh0KClcbiAgICB9O1xuICAgIFxuICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgIHJhbmdlLnN0YXJ0VGltZSA9IHN0b3JlUmFuZ2Uuc3RhcnRUaW1lO1xuICAgICAgcmFuZ2UuZW5kVGltZSA9IHN0b3JlUmFuZ2UuZW5kVGltZTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdChyYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmVSYW5nZSA9IHRoaXMucmFuZ2VTdG9yZS5yYW5nZSgpO1xuICAgIGNvbnN0IHJhbmdlOiBEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydERhdGU6IHN0b3JlUmFuZ2Uuc3RhcnQsXG4gICAgICBlbmREYXRlOiBzdG9yZVJhbmdlLmVuZCxcbiAgICAgIHJhbmdlVGV4dDogdGhpcy5kYXRlUmFuZ2VUZXh0KClcbiAgICB9O1xuICAgIFxuICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgIHJhbmdlLnN0YXJ0VGltZSA9IHN0b3JlUmFuZ2Uuc3RhcnRUaW1lO1xuICAgICAgcmFuZ2UuZW5kVGltZSA9IHN0b3JlUmFuZ2UuZW5kVGltZTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZC5lbWl0KHJhbmdlKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBlbWl0TXVsdGlDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5tdWx0aURhdGVSYW5nZUNoYW5nZS5lbWl0KHtcbiAgICAgIHJhbmdlczogdGhpcy5zZWxlY3RlZFJhbmdlcygpXG4gICAgfSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgZW1pdE11bHRpU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMubXVsdGlEYXRlUmFuZ2VTZWxlY3RlZC5lbWl0KHtcbiAgICAgIHJhbmdlczogdGhpcy5zZWxlY3RlZFJhbmdlcygpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVSYW5nZVZhbHVlKCk6IERhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RvcmVSYW5nZSA9IHRoaXMucmFuZ2VTdG9yZS5yYW5nZSgpO1xuICAgIGNvbnN0IHJhbmdlOiBEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydERhdGU6IHN0b3JlUmFuZ2Uuc3RhcnQsXG4gICAgICBlbmREYXRlOiBzdG9yZVJhbmdlLmVuZCxcbiAgICAgIHJhbmdlVGV4dDogdGhpcy5kYXRlUmFuZ2VUZXh0KClcbiAgICB9O1xuICAgIFxuICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgIHJhbmdlLnN0YXJ0VGltZSA9IHN0b3JlUmFuZ2Uuc3RhcnRUaW1lO1xuICAgICAgcmFuZ2UuZW5kVGltZSA9IHN0b3JlUmFuZ2UuZW5kVGltZTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLy8gVGltZSBQaWNrZXIgTWV0aG9kc1xuICB0b2dnbGVTdGFydFRpbWVQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdGFydFRpbWVQaWNrZXIuc2V0KCF0aGlzLnNob3dTdGFydFRpbWVQaWNrZXIoKSk7XG4gICAgdGhpcy5zaG93RW5kVGltZVBpY2tlci5zZXQoZmFsc2UpO1xuICB9XG5cbiAgdG9nZ2xlRW5kVGltZVBpY2tlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlVGltZVBpY2tlcikgcmV0dXJuO1xuICAgIHRoaXMuc2hvd0VuZFRpbWVQaWNrZXIuc2V0KCF0aGlzLnNob3dFbmRUaW1lUGlja2VyKCkpO1xuICAgIHRoaXMuc2hvd1N0YXJ0VGltZVBpY2tlci5zZXQoZmFsc2UpO1xuICB9XG5cbiAgaW5jcmVtZW50U3RhcnRIb3VyKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0hvdXIgPSAodGhpcy5zdGFydEhvdXIgKyAxKSAlIDI0O1xuICAgIHRoaXMuc2V0U3RhcnRIb3VyTWludXRlKG5ld0hvdXIsIHRoaXMuc3RhcnRNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlY3JlbWVudFN0YXJ0SG91cigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdIb3VyID0gdGhpcy5zdGFydEhvdXIgPT09IDAgPyAyMyA6IHRoaXMuc3RhcnRIb3VyIC0gMTtcbiAgICB0aGlzLnNldFN0YXJ0SG91ck1pbnV0ZShuZXdIb3VyLCB0aGlzLnN0YXJ0TWludXRlKTtcbiAgICBpZiAoIXRoaXMucmVxdWlyZUFwcGx5KSB7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBpbmNyZW1lbnRTdGFydE1pbnV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdNaW51dGUgPSAodGhpcy5zdGFydE1pbnV0ZSArIHRoaXMubWludXRlU3RlcCkgJSA2MDtcbiAgICB0aGlzLnNldFN0YXJ0SG91ck1pbnV0ZSh0aGlzLnN0YXJ0SG91ciwgbmV3TWludXRlKTtcbiAgICBpZiAoIXRoaXMucmVxdWlyZUFwcGx5KSB7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBkZWNyZW1lbnRTdGFydE1pbnV0ZSgpOiB2b2lkIHtcbiAgICBsZXQgbmV3TWludXRlID0gdGhpcy5zdGFydE1pbnV0ZSAtIHRoaXMubWludXRlU3RlcDtcbiAgICBpZiAobmV3TWludXRlIDwgMCkge1xuICAgICAgbmV3TWludXRlID0gNjAgLSB0aGlzLm1pbnV0ZVN0ZXA7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhcnRIb3VyTWludXRlKHRoaXMuc3RhcnRIb3VyLCBuZXdNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGluY3JlbWVudEVuZEhvdXIoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SG91ciA9ICh0aGlzLmVuZEhvdXIgKyAxKSAlIDI0O1xuICAgIHRoaXMuc2V0RW5kSG91ck1pbnV0ZShuZXdIb3VyLCB0aGlzLmVuZE1pbnV0ZSk7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVBcHBseSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgZGVjcmVtZW50RW5kSG91cigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdIb3VyID0gdGhpcy5lbmRIb3VyID09PSAwID8gMjMgOiB0aGlzLmVuZEhvdXIgLSAxO1xuICAgIHRoaXMuc2V0RW5kSG91ck1pbnV0ZShuZXdIb3VyLCB0aGlzLmVuZE1pbnV0ZSk7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVBcHBseSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgaW5jcmVtZW50RW5kTWludXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld01pbnV0ZSA9ICh0aGlzLmVuZE1pbnV0ZSArIHRoaXMubWludXRlU3RlcCkgJSA2MDtcbiAgICB0aGlzLnNldEVuZEhvdXJNaW51dGUodGhpcy5lbmRIb3VyLCBuZXdNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlY3JlbWVudEVuZE1pbnV0ZSgpOiB2b2lkIHtcbiAgICBsZXQgbmV3TWludXRlID0gdGhpcy5lbmRNaW51dGUgLSB0aGlzLm1pbnV0ZVN0ZXA7XG4gICAgaWYgKG5ld01pbnV0ZSA8IDApIHtcbiAgICAgIG5ld01pbnV0ZSA9IDYwIC0gdGhpcy5taW51dGVTdGVwO1xuICAgIH1cbiAgICB0aGlzLnNldEVuZEhvdXJNaW51dGUodGhpcy5lbmRIb3VyLCBuZXdNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFRpbWUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaCA9IGhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG0gPSBtaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIFxuICAgIGlmICh0aGlzLnRpbWVGb3JtYXQgPT09ICcxMmgnKSB7XG4gICAgICBjb25zdCBpc1BNID0gaG91ciA+PSAxMjtcbiAgICAgIGNvbnN0IGhvdXIxMiA9IGhvdXIgPT09IDAgPyAxMiA6IGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXI7XG4gICAgICBjb25zdCBwZXJpb2QgPSBpc1BNID8gJ1BNJyA6ICdBTSc7XG4gICAgICByZXR1cm4gYCR7aG91cjEyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttfSAke3BlcmlvZH1gO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYCR7aH06JHttfWA7XG4gIH1cblxuICBwYXJzZVRpbWUodGltZVN0cmluZzogc3RyaW5nKTogeyBob3VyOiBudW1iZXI7IG1pbnV0ZTogbnVtYmVyIH0ge1xuICAgIGlmICghdGltZVN0cmluZykgcmV0dXJuIHsgaG91cjogMCwgbWludXRlOiAwIH07XG4gICAgXG4gICAgY29uc3QgdGltZTEyaFJlZ2V4ID0gL14oXFxkezEsMn0pOihcXGR7Mn0pXFxzPyhBTXxQTSkkL2k7XG4gICAgY29uc3QgdGltZTI0aFJlZ2V4ID0gL14oXFxkezEsMn0pOihcXGR7Mn0pJC87XG4gICAgXG4gICAgbGV0IG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCh0aW1lMTJoUmVnZXgpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcbiAgICAgIGNvbnN0IHBlcmlvZCA9IG1hdGNoWzNdLnRvVXBwZXJDYXNlKCk7XG4gICAgICBcbiAgICAgIGlmIChwZXJpb2QgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIGhvdXIgKz0gMTI7XG4gICAgICBpZiAocGVyaW9kID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSBob3VyID0gMDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgaG91ciwgbWludXRlIH07XG4gICAgfVxuICAgIFxuICAgIG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCh0aW1lMjRoUmVnZXgpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG91cjogcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSxcbiAgICAgICAgbWludXRlOiBwYXJzZUludChtYXRjaFsyXSwgMTApXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyBob3VyOiAwLCBtaW51dGU6IDAgfTtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIC8vIFVzZSBzZXR0ZXJzIHdoaWNoIGRlbGVnYXRlIHRvIHN0b3JlXG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHZhbHVlLnN0YXJ0RGF0ZSB8fCAnJztcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IHZhbHVlLmVuZERhdGUgfHwgJyc7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0VGltZSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydFRpbWUodmFsdWUuc3RhcnRUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuZW5kVGltZSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmRUaW1lKHZhbHVlLmVuZFRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJhbmdlU3RvcmUucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci13cmFwcGVyXCIgXG4gIFtjbGFzc109XCIndGhlbWUtJyArIHRoZW1lXCJcbiAgW3N0eWxlLi0taW5wdXQtYm9yZGVyLWhvdmVyXT1cImlucHV0Qm9yZGVyQ29sb3JIb3ZlclwiXG4gIFtzdHlsZS4tLWlucHV0LWJvcmRlci1mb2N1c109XCJpbnB1dEJvcmRlckNvbG9yRm9jdXNcIj5cbiAgPGlucHV0IFxuICAgIHR5cGU9XCJ0ZXh0XCIgXG4gICAgY2xhc3M9XCJkYXRlcGlja2VyLWlucHV0XCIgXG4gICAgW3ZhbHVlXT1cImRhdGVSYW5nZVRleHQoKVwiIFxuICAgIChjbGljayk9XCJ0b2dnbGVEYXRlUGlja2VyKClcIiBcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGxhY2Vob2xkZXJcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwic2hvd0RhdGVQaWNrZXIoKVwiXG4gICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCInZGlhbG9nJ1wiXG4gICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGlucHV0QmFja2dyb3VuZENvbG9yLFxuICAgICAgJ2NvbG9yJzogaW5wdXRUZXh0Q29sb3IsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogaW5wdXRCb3JkZXJDb2xvcixcbiAgICAgICdwYWRkaW5nJzogaW5wdXRQYWRkaW5nXG4gICAgfVwiXG4gICAgcmVhZG9ubHk+XG5cbiAgQGlmIChzaG93RGF0ZVBpY2tlcigpKSB7XG4gIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kcm9wZG93blwiPlxuICAgIEBpZiAoc2hvd1ByZXNldHMpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItcHJlc2V0c1wiPlxuICAgICAgQGZvciAocHJlc2V0IG9mIHByZXNldHM7IHRyYWNrIHByZXNldC5sYWJlbCkge1xuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbGVjdFByZXNldFJhbmdlKHByZXNldClcIj57eyBwcmVzZXQubGFiZWwgfX08L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLWNhbGVuZGFyXCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmICghc2hvd1ByZXNldHMpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyLW9ubHktY2xvc2VcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLWNhbGVuZGFyXCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBDYWxlbmRhcnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiPlxuICAgICAgPCEtLSBQcmV2aW91cyBtb250aCBjYWxlbmRhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNoYW5nZU1vbnRoKC0xKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMS4zNTQgMS42NDZhLjUuNSAwIDAgMSAwIC43MDhMNS43MDcgOGw1LjY0NyA1LjY0NmEuNS41IDAgMCAxLS43MDguNzA4bC02LTZhLjUuNSAwIDAgMSAwLS43MDhsNi02YS41LjUgMCAwIDEgLjcwOCAwelwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuPnt7IHByZXZpb3VzTW9udGhOYW1lKCkgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4elwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXdlZWtkYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5TmFtZSBvZiB3ZWVrRGF5TmFtZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBkYXlOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5T2JqIG9mIHByZXZpb3VzTW9udGhWaXNpYmxlRGF5cygpOyB0cmFjayBkYXlPYmouZGF0ZSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWRheVwiIFxuICAgICAgICAgICAgICBbY2xhc3MuZW1wdHldPVwiIWRheU9iai5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkYXlPYmouaXNTdGFydCB8fCBkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGF5T2JqLmluUmFuZ2UgJiYgIWRheU9iai5pc1N0YXJ0ICYmICFkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4taG92ZXItcmFuZ2VdPVwiZGF5T2JqLmluSG92ZXJSYW5nZSAmJiAhZGF5T2JqLmlzU3RhcnQgJiYgIWRheU9iai5pc0VuZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkYXlPYmouaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5rZXlib2FyZC1mb2N1c2VkXT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBoYXNLZXlib2FyZEZvY3VzKGRheU9iai5kYXRlLCAwKVwiXG4gICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBkYXlPYmouaXNDdXJyZW50TW9udGggJiYgaGFzS2V5Ym9hcmRGb2N1cyhkYXlPYmouZGF0ZSwgMCkgPyAwIDogLTFcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZvcm1hdERhdGVEaXNwbGF5KGRheU9iai5kYXRlKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZGF5T2JqLmlzU3RhcnQgfHwgZGF5T2JqLmlzRW5kXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImRheU9iai5pc1N0YXJ0ID8gJ2RhdGUnIDogbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF5T2JqLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkRheUhvdmVyKGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbGVhckRheUhvdmVyKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRheU9iai5pc0N1cnJlbnRNb250aCB8fCBkYXlPYmouaXNEaXNhYmxlZFwiPlxuICAgICAgICAgICAgICB7eyBkYXlPYmouZGF5IH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ3VycmVudCBtb250aCBjYWxlbmRhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTExLjM1NCAxLjY0NmEuNS41IDAgMCAxIDAgLjcwOEw1LjcwNyA4bDUuNjQ3IDUuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhsLTYtNmEuNS41IDAgMCAxIDAtLjcwOGw2LTZhLjUuNSAwIDAgMSAuNzA4IDB6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4+e3sgY3VycmVudE1vbnRoTmFtZSgpIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VNb250aCgxKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00LjY0NiAxLjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMSAwIC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDgtLjcwOEwxMC4yOTMgOCA0LjY0NiAyLjM1NGEuNS41IDAgMCAxIDAtLjcwOHpcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci13ZWVrZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRheU5hbWUgb2Ygd2Vla0RheU5hbWVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHNwYW4+e3sgZGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRheU9iaiBvZiBjdXJyZW50TW9udGhWaXNpYmxlRGF5cygpOyB0cmFjayBkYXlPYmouZGF0ZSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWRheVwiIFxuICAgICAgICAgICAgICBbY2xhc3MuZW1wdHldPVwiIWRheU9iai5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkYXlPYmouaXNTdGFydCB8fCBkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGF5T2JqLmluUmFuZ2UgJiYgIWRheU9iai5pc1N0YXJ0ICYmICFkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4taG92ZXItcmFuZ2VdPVwiZGF5T2JqLmluSG92ZXJSYW5nZSAmJiAhZGF5T2JqLmlzU3RhcnQgJiYgIWRheU9iai5pc0VuZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkYXlPYmouaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5rZXlib2FyZC1mb2N1c2VkXT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBoYXNLZXlib2FyZEZvY3VzKGRheU9iai5kYXRlLCAxKVwiXG4gICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBkYXlPYmouaXNDdXJyZW50TW9udGggJiYgaGFzS2V5Ym9hcmRGb2N1cyhkYXlPYmouZGF0ZSwgMSkgPyAwIDogLTFcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZvcm1hdERhdGVEaXNwbGF5KGRheU9iai5kYXRlKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZGF5T2JqLmlzU3RhcnQgfHwgZGF5T2JqLmlzRW5kXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImRheU9iai5pc1N0YXJ0ID8gJ2RhdGUnIDogbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF5T2JqLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkRheUhvdmVyKGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbGVhckRheUhvdmVyKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRheU9iai5pc0N1cnJlbnRNb250aCB8fCBkYXlPYmouaXNEaXNhYmxlZFwiPlxuICAgICAgICAgICAgICB7eyBkYXlPYmouZGF5IH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE11bHRpLVJhbmdlIExpc3QgLS0+XG4gICAgQGlmIChtdWx0aVJhbmdlICYmIHNlbGVjdGVkUmFuZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgIDxkaXYgY2xhc3M9XCJtdWx0aS1yYW5nZS1saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXVsdGktcmFuZ2UtaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGktcmFuZ2UtdGl0bGVcIj5TZWxlY3RlZCBSYW5nZXMgKHt7IHNlbGVjdGVkUmFuZ2VzKCkubGVuZ3RoIH19KTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXJhbmdlLWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKHJhbmdlIG9mIHNlbGVjdGVkUmFuZ2VzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGktcmFuZ2UtaXRlbVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGktcmFuZ2UtdGV4dFwiPnt7IHJhbmdlLnJhbmdlVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVtb3ZlLXJhbmdlXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUmFuZ2UoJGluZGV4KVwiXG4gICAgICAgICAgICB0aXRsZT1cIlJlbW92ZSB0aGlzIHJhbmdlXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMi4xNDYgMi44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w1LjE0Ni01LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNS4xNDcgNS4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC01LjE0NiA1LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDIuMTQ2IDIuODU0WlwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBUaW1lIFBpY2tlciAtLT5cbiAgICBAaWYgKGVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItY29udGFpbmVyXCI+XG4gICAgICA8IS0tIFN0YXJ0IFRpbWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItbGFiZWxcIj5TdGFydCBUaW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbnB1dHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtYnRuIHRpbWUtYnRuLXVwXCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbmNyZW1lbnRTdGFydEhvdXIoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiSW5jcmVtZW50IGhvdXJcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgNC44NmwtNC43OTYgNS40ODFjLS41NjYuNjQ3LS4xMDYgMS42NTkuNzUzIDEuNjU5aDkuNTkyYTEgMSAwIDAgMCAuNzUzLTEuNjU5bC00Ljc5Ni01LjQ4YTEgMSAwIDAgMC0xLjUwNiAwelwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydEhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgdGl0bGU9XCJTdGFydCBob3VyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1idG4gdGltZS1idG4tZG93blwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVjcmVtZW50U3RhcnRIb3VyKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlY3JlbWVudCBob3VyXCI+XG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuMjQ3IDExLjE0bC00Ljc5Ni01LjQ4MUMxLjg4NSA1LjAxMyAyLjM0NSA0IDMuMjA0IDRoOS41OTJhMSAxIDAgMCAxIC43NTMgMS42NTlsLTQuNzk2IDUuNDhhMSAxIDAgMCAxLTEuNTA2IDB6XCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1zZXBhcmF0b3JcIj46PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1idG4gdGltZS1idG4tdXBcIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImluY3JlbWVudFN0YXJ0TWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkluY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgNC44NmwtNC43OTYgNS40ODFjLS41NjYuNjQ3LS4xMDYgMS42NTkuNzUzIDEuNjU5aDkuNTkyYTEgMSAwIDAgMCAuNzUzLTEuNjU5bC00Ljc5Ni01LjQ4YTEgMSAwIDAgMC0xLjUwNiAwelwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydE1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICB0aXRsZT1cIlN0YXJ0IG1pbnV0ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtYnRuIHRpbWUtYnRuLWRvd25cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlY3JlbWVudFN0YXJ0TWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgMTEuMTRsLTQuNzk2LTUuNDgxQzEuODg1IDUuMDEzIDIuMzQ1IDQgMy4yMDQgNGg5LjU5MmExIDEgMCAwIDEgLjc1MyAxLjY1OWwtNC43OTYgNS40OGExIDEgMCAwIDEtMS41MDYgMHpcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICh0aW1lRm9ybWF0ID09PSAnMTJoJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBlcmlvZFwiPlxuICAgICAgICAgICAge3sgc3RhcnRIb3VyID49IDEyID8gJ1BNJyA6ICdBTScgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yLXZlcnRpY2FsXCI+PC9kaXY+XG5cbiAgICAgIDwhLS0gRW5kIFRpbWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItbGFiZWxcIj5FbmQgVGltZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItaW5wdXRzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWJ0biB0aW1lLWJ0bi11cFwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVtZW50RW5kSG91cigpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJJbmNyZW1lbnQgaG91clwiPlxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk03LjI0NyA0Ljg2bC00Ljc5NiA1LjQ4MWMtLjU2Ni42NDctLjEwNiAxLjY1OS43NTMgMS42NTloOS41OTJhMSAxIDAgMCAwIC43NTMtMS42NTlsLTQuNzk2LTUuNDhhMSAxIDAgMCAwLTEuNTA2IDB6XCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImVuZEhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgdGl0bGU9XCJFbmQgaG91clwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtYnRuIHRpbWUtYnRuLWRvd25cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlY3JlbWVudEVuZEhvdXIoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiRGVjcmVtZW50IGhvdXJcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgMTEuMTRsLTQuNzk2LTUuNDgxQzEuODg1IDUuMDEzIDIuMzQ1IDQgMy4yMDQgNGg5LjU5MmExIDEgMCAwIDEgLjc1MyAxLjY1OWwtNC43OTYgNS40OGExIDEgMCAwIDEtMS41MDYgMHpcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWJ0biB0aW1lLWJ0bi11cFwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVtZW50RW5kTWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkluY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgNC44NmwtNC43OTYgNS40ODFjLS41NjYuNjQ3LS4xMDYgMS42NTkuNzUzIDEuNjU5aDkuNTkyYTEgMSAwIDAgMCAuNzUzLTEuNjU5bC00Ljc5Ni01LjQ4YTEgMSAwIDAgMC0xLjUwNiAwelwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJlbmRNaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgdGl0bGU9XCJFbmQgbWludXRlXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1idG4gdGltZS1idG4tZG93blwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVjcmVtZW50RW5kTWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgMTEuMTRsLTQuNzk2LTUuNDgxQzEuODg1IDUuMDEzIDIuMzQ1IDQgMy4yMDQgNGg5LjU5MmExIDEgMCAwIDEgLjc1MyAxLjY1OWwtNC43OTYgNS40OGExIDEgMCAwIDEtMS41MDYgMHpcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICh0aW1lRm9ybWF0ID09PSAnMTJoJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBlcmlvZFwiPlxuICAgICAgICAgICAge3sgZW5kSG91ciA+PSAxMiA/ICdQTScgOiAnQU0nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gRm9vdGVyIHdpdGggYnV0dG9ucyAtLT5cbiAgICBAaWYgKHNob3dDbGVhckJ1dHRvbiB8fCBtdWx0aVJhbmdlIHx8IHJlcXVpcmVBcHBseSkge1xuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1mb290ZXJcIj5cbiAgICAgIEBpZiAocmVxdWlyZUFwcGx5ICYmICFtdWx0aVJhbmdlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHBseS1mb290ZXItYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1jYW5jZWxcIiBcbiAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTZWxlY3Rpb24oKVwiIFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNQZW5kaW5nQ2hhbmdlcygpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiQ2FuY2VsIHNlbGVjdGlvblwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWFwcGx5XCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlTZWxlY3Rpb24oKVwiIFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNQZW5kaW5nQ2hhbmdlcygpIHx8ICFwZW5kaW5nU3RhcnREYXRlIHx8ICFwZW5kaW5nRW5kRGF0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cIkFwcGx5IHNlbGVjdGlvblwiPlxuICAgICAgICAgICAgQXBwbHlcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKG11bHRpUmFuZ2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXJhbmdlLWZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xlYXJcIiAoY2xpY2spPVwiY2xlYXIoKVwiIHRpdGxlPVwiQ2xlYXIgYWxsIHJhbmdlc1wiPlxuICAgICAgICAgICAgQ2xlYXIgQWxsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZG9uZVwiIChjbGljayk9XCJjbG9zZURhdGVQaWNrZXIoKVwiIHRpdGxlPVwiRG9uZSBzZWxlY3RpbmdcIj5cbiAgICAgICAgICAgIERvbmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKCFtdWx0aVJhbmdlICYmICFyZXF1aXJlQXBwbHkgJiYgc2hvd0NsZWFyQnV0dG9uKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsZWFyXCIgKGNsaWNrKT1cImNsZWFyKClcIiB0aXRsZT1cIkNsZWFyIHNlbGVjdGlvblwiPlxuICAgICAgICAgIENsZWFyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
1314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vc3JjL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxZQUFZLEVBQWMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbE0sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0cscUJBQXFCO0FBQ3JCLE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxrREFBa0Q7QUFDbEQsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixxQkFBcUIsRUFHckIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDdEIsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBK0R6QixNQUFNLE9BQU8sdUJBQXVCO0lBc09kO0lBck9YLFdBQVcsR0FBVyxtQkFBbUIsQ0FBQztJQUNuRCxJQUFhLFNBQVMsQ0FBQyxLQUFhO1FBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksR0FB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QUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBb0JHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkEwS1AsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVcxQyx3QkFBd0I7c0JBRHZCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBBUFBfSU5JVElBTElaRVIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBQdWJsaWMgQVBJIGltcG9ydHNcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBEQVRFX0FEQVBURVIgfSBmcm9tICcuL2NvcmUvcHVibGljJztcbmltcG9ydCB7IE5hdGl2ZURhdGVBZGFwdGVyIH0gZnJvbSAnLi9jb3JlL3B1YmxpYyc7XG5pbXBvcnQgeyBEdWFsRGF0ZVJhbmdlU3RvcmUgfSBmcm9tICcuL2NvcmUvcHVibGljJztcbmltcG9ydCB7IFByZXNldFJlZ2lzdHJ5IH0gZnJvbSAnLi9jb3JlL3B1YmxpYyc7XG5pbXBvcnQgeyBCVUlMVF9JTl9QUkVTRVRTIH0gZnJvbSAnLi9jb3JlL3B1YmxpYyc7XG5cbi8vIEludGVybmFsIEFQSSBpbXBvcnRzIChjb21wb25lbnQgaW1wbGVtZW50YXRpb24pXG5pbXBvcnQge1xuICBDYWxlbmRhckdyaWRDYWNoZSxcbiAgQ2FsZW5kYXJHcmlkLFxuICBDYWxlbmRhckNlbGwsXG4gIFJhbmdlSGlnaGxpZ2h0ZXJDYWNoZSxcbiAgRGVjb3JhdGVkQ2VsbCxcbiAgVmlydHVhbFdlZWtzQ29uZmlnLFxuICBnZXRWaXNpYmxlV2Vla3MsXG4gIG5hdmlnYXRlV2Vla1dpbmRvdyxcbiAgaXNWaXJ0dWFsV2Vla3NFbmFibGVkXG59IGZyb20gJy4vY29yZS9pbnRlcm5hbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlIHtcbiAgc3RhcnREYXRlOiBzdHJpbmc7XG4gIGVuZERhdGU6IHN0cmluZztcbiAgcmFuZ2VUZXh0OiBzdHJpbmc7XG4gIHN0YXJ0VGltZT86IHN0cmluZzsgLy8gSEg6bW0gZm9ybWF0IChvcHRpb25hbClcbiAgZW5kVGltZT86IHN0cmluZzsgLy8gSEg6bW0gZm9ybWF0IChvcHRpb25hbClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aURhdGVSYW5nZSB7XG4gIHJhbmdlczogRGF0ZVJhbmdlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0UmFuZ2Uge1xuICBzdGFydDogc3RyaW5nO1xuICBlbmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRDb25maWcge1xuICBsYWJlbDogc3RyaW5nO1xuICBnZXRWYWx1ZTogKCkgPT4gUHJlc2V0UmFuZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxlQ29uZmlnIHtcbiAgbW9udGhOYW1lcz86IHN0cmluZ1tdO1xuICBtb250aE5hbWVzU2hvcnQ/OiBzdHJpbmdbXTtcbiAgZGF5TmFtZXM/OiBzdHJpbmdbXTtcbiAgZGF5TmFtZXNTaG9ydD86IHN0cmluZ1tdO1xuICBmaXJzdERheU9mV2Vlaz86IG51bWJlcjsgLy8gMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLlxufVxuXG5leHBvcnQgdHlwZSBUaGVtZVR5cGUgPSAnZGVmYXVsdCcgfCAnYm9vdHN0cmFwJyB8ICdidWxtYScgfCAnZm91bmRhdGlvbicgfCAndGFpbHdpbmQnIHwgJ2N1c3RvbSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kdWFsLWRhdGVwaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogREFURV9BREFQVEVSLFxuICAgICAgdXNlQ2xhc3M6IE5hdGl2ZURhdGVBZGFwdGVyXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogUHJlc2V0UmVnaXN0cnkpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAvLyBBdXRvLXJlZ2lzdGVyIGJ1aWx0LWluIHByZXNldHNcbiAgICAgICAgICBCVUlMVF9JTl9QUkVTRVRTLmZvckVhY2gocHJlc2V0ID0+IHJlZ2lzdHJ5LnJlZ2lzdGVyKHByZXNldCkpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGRlcHM6IFtQcmVzZXRSZWdpc3RyeV1cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRHVhbERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBkYXRlIHJhbmdlJztcbiAgQElucHV0KCkgc2V0IHN0YXJ0RGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5wYXJzZUlTT0RhdGUodmFsdWUpO1xuICAgICAgaWYgKGRhdGUpIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydChkYXRlKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHN0YXJ0RGF0ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnJhbmdlU3RvcmUuc3RhcnREYXRlKCk7XG4gICAgcmV0dXJuIGRhdGUgPyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgOiAnJztcbiAgfVxuICBcbiAgQElucHV0KCkgc2V0IGVuZERhdGUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2VJU09EYXRlKHZhbHVlKTtcbiAgICAgIGlmIChkYXRlKSB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKGRhdGUpO1xuICAgIH1cbiAgfVxuICBnZXQgZW5kRGF0ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnJhbmdlU3RvcmUuZW5kRGF0ZSgpO1xuICAgIHJldHVybiBkYXRlID8gdGhpcy5mb3JtYXREYXRlKGRhdGUpIDogJyc7XG4gIH1cbiAgQElucHV0KCkgc2hvd1ByZXNldHM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q2xlYXJCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbXVsdGlSYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjbG9zZU9uU2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xvc2VPblByZXNldFNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NlT25DbGlja091dHNpZGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBlbmFibGVLZXlib2FyZE5hdmlnYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBwcmVzZXRzOiBQcmVzZXRDb25maWdbXSA9IFtdO1xuICBASW5wdXQoKSB0aGVtZTogVGhlbWVUeXBlID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBpbnB1dEJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmZmYnO1xuICBASW5wdXQoKSBpbnB1dFRleHRDb2xvcjogc3RyaW5nID0gJyM0OTUwNTcnO1xuICBASW5wdXQoKSBpbnB1dEJvcmRlckNvbG9yOiBzdHJpbmcgPSAnI2NlZDRkYSc7XG4gIEBJbnB1dCgpIGlucHV0Qm9yZGVyQ29sb3JIb3Zlcjogc3RyaW5nID0gJyNjZWQ0ZGEnO1xuICBASW5wdXQoKSBpbnB1dEJvcmRlckNvbG9yRm9jdXM6IHN0cmluZyA9ICcjODBiZGZmJztcbiAgQElucHV0KCkgaW5wdXRQYWRkaW5nOiBzdHJpbmcgPSAnMC4zNzVyZW0gMC43NXJlbSc7XG4gIEBJbnB1dCgpIGxvY2FsZTogTG9jYWxlQ29uZmlnID0ge307XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSB8ICgoZGF0ZTogRGF0ZSkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGRpc3BsYXlGb3JtYXQ6IHN0cmluZyA9ICdEIE1NTSc7IC8vIEZvcm1hdCBmb3IgZGlzcGxheWluZyBkYXRlcyBpbiBpbnB1dFxuICBASW5wdXQoKSByZXF1aXJlQXBwbHk6IGJvb2xlYW4gPSBmYWxzZTsgLy8gUmVxdWlyZSBBcHBseSBidXR0b24gY29uZmlybWF0aW9uXG4gIEBJbnB1dCgpIGVuYWJsZVRpbWVQaWNrZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRW5hYmxlIHRpbWUgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHRpbWVGb3JtYXQ6ICcxMmgnIHwgJzI0aCcgPSAnMjRoJzsgLy8gVGltZSBmb3JtYXRcbiAgQElucHV0KCkgbWludXRlU3RlcDogbnVtYmVyID0gMTU7IC8vIFN0ZXAgZm9yIG1pbnV0ZSBzZWxlY3RvciAoMSwgNSwgMTUsIDMwKVxuICBASW5wdXQoKSBkZWZhdWx0U3RhcnRUaW1lOiBzdHJpbmcgPSAnMDA6MDAnOyAvLyBEZWZhdWx0IHN0YXJ0IHRpbWUgSEg6bW1cbiAgQElucHV0KCkgZGVmYXVsdEVuZFRpbWU6IHN0cmluZyA9ICcyMzo1OSc7IC8vIERlZmF1bHQgZW5kIHRpbWUgSEg6bW1cbiAgXG4gIC8qKlxuICAgKiBWaXJ0dWFsIFdlZWtzIENvbmZpZ3VyYXRpb24gKHYzLjkuMCspXG4gICAqIFxuICAgKiBFbmFibGVzIHdpbmRvd2VkIHJlbmRlcmluZyB0byByZWR1Y2UgRE9NIGNvbXBsZXhpdHkgYW5kIGltcHJvdmUgbW9iaWxlIHBlcmZvcm1hbmNlLlxuICAgKiBPbmx5IHJlbmRlcnMgYSBzdWJzZXQgb2YgY2FsZW5kYXIgd2Vla3MgaW5zdGVhZCBvZiBhbGwgNi5cbiAgICogXG4gICAqIEV4YW1wbGU6IGB7IHdpbmRvd1NpemU6IDMgfWAgcmVuZGVycyBvbmx5IDMgd2Vla3MgKDIxIGNlbGxzKSBpbnN0ZWFkIG9mIDYgd2Vla3MgKDQyIGNlbGxzKSxcbiAgICogcmVkdWNpbmcgRE9NIG5vZGVzIGJ5IH41MCUgcGVyIGNhbGVuZGFyLlxuICAgKiBcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIChkaXNhYmxlZCAtIHJlbmRlcnMgYWxsIDYgd2Vla3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGBodG1sXG4gICAqIDxuZ3gtZHVhbC1kYXRlcGlja2VyXG4gICAqICAgW3ZpcnR1YWxXZWVrc109XCJ7IHdpbmRvd1NpemU6IDMgfVwiPlxuICAgKiA8L25neC1kdWFsLWRhdGVwaWNrZXI+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCkgdmlydHVhbFdlZWtzPzogVmlydHVhbFdlZWtzQ29uZmlnO1xuXG4gIEBPdXRwdXQoKSBkYXRlUmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZT4oKTtcbiAgQE91dHB1dCgpIGRhdGVSYW5nZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U+KCk7XG4gIEBPdXRwdXQoKSBtdWx0aURhdGVSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TXVsdGlEYXRlUmFuZ2U+KCk7XG4gIEBPdXRwdXQoKSBtdWx0aURhdGVSYW5nZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aURhdGVSYW5nZT4oKTtcblxuICAvLyBEYXRlIGFkYXB0ZXIgaW5qZWN0aW9uXG4gIHByaXZhdGUgZGF0ZUFkYXB0ZXIgPSBpbmplY3Q8RGF0ZUFkYXB0ZXI+KERBVEVfQURBUFRFUik7XG4gIFxuICAvLyBDYWxlbmRhciBncmlkIGNhY2hlICh2My43LjArKSAtIG1lbW9pemVzIG1vbnRoIGdyaWQgZ2VuZXJhdGlvblxuICBwcml2YXRlIGdyaWRDYWNoZSA9IGluamVjdChDYWxlbmRhckdyaWRDYWNoZSk7XG4gIFxuICAvLyBSYW5nZSBoaWdobGlnaHRlciBjYWNoZSAodjMuOC4wKykgLSBtZW1vaXplcyBkZWNvcmF0aW9uc1xuICBwcml2YXRlIGhpZ2hsaWdodGVyQ2FjaGUgPSBpbmplY3QoUmFuZ2VIaWdobGlnaHRlckNhY2hlKTtcbiAgXG4gIC8vIEhlYWRsZXNzIHN0b3JlIGZvciBkYXRlIHJhbmdlIHN0YXRlICh2My41LjArKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmFuZ2VTdG9yZSA9IGluamVjdChEdWFsRGF0ZVJhbmdlU3RvcmUpO1xuXG4gIC8vIFVJLW9ubHkgc2lnbmFsc1xuICBzaG93RGF0ZVBpY2tlciA9IHNpZ25hbChmYWxzZSk7XG4gIGN1cnJlbnRNb250aCA9IHNpZ25hbCh0aGlzLmRhdGVBZGFwdGVyLm5vcm1hbGl6ZShuZXcgRGF0ZSgpKSk7XG4gIHByZXZpb3VzTW9udGggPSBzaWduYWwodGhpcy5kYXRlQWRhcHRlci5ub3JtYWxpemUobmV3IERhdGUoKSkpO1xuICBjdXJyZW50TW9udGhEYXlzID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIHByZXZpb3VzTW9udGhEYXlzID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIGlzRGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuICBzaG93U3RhcnRUaW1lUGlja2VyID0gc2lnbmFsKGZhbHNlKTtcbiAgc2hvd0VuZFRpbWVQaWNrZXIgPSBzaWduYWwoZmFsc2UpO1xuICBob3ZlckRhdGUgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIFxuICAvKipcbiAgICogVmlydHVhbCBXZWVrcyBTdGF0ZSAodjMuOS4wKylcbiAgICogXG4gICAqIFNpZ25hbHMgdG8gdHJhY2sgd2hpY2ggd2VlayB3aW5kb3cgaXMgY3VycmVudGx5IHZpc2libGUgZm9yIGVhY2ggY2FsZW5kYXIuXG4gICAqIC0gd2Vla1N0YXJ0ID0gMDogU2hvd3MgZmlyc3QgTiB3ZWVrcyAod2luZG93U2l6ZSlcbiAgICogLSB3ZWVrU3RhcnQgPSAxOiBTaG93cyB3ZWVrcyAxIHRvIE4rMSwgZXRjLlxuICAgKiBcbiAgICogUmVzZXQgdG8gMCB3aGVuIG1vbnRoIGNoYW5nZXMgZm9yIGNvbnNpc3RlbnQgVVguXG4gICAqL1xuICBwcmV2aW91c01vbnRoV2Vla1N0YXJ0ID0gc2lnbmFsKDApO1xuICBjdXJyZW50TW9udGhXZWVrU3RhcnQgPSBzaWduYWwoMCk7XG4gIFxuICAvKipcbiAgICogQ29tcHV0ZWQ6IFZpc2libGUgd2Vla3MgZm9yIHdpbmRvd2VkIHJlbmRlcmluZyAodjMuOS4wKylcbiAgICogXG4gICAqIElmIHZpcnR1YWxXZWVrcyBpcyBlbmFibGVkLCByZXR1cm5zIG9ubHkgdGhlIHZpc2libGUgc3Vic2V0IG9mIHdlZWtzLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgYWxsIHdlZWtzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKiBcbiAgICogRXhhbXBsZTogSWYgd2luZG93U2l6ZT0zIGFuZCB3ZWVrU3RhcnQ9MCwgcmV0dXJucyBmaXJzdCAzIHdlZWtzIChyb3dzIDAtMikuXG4gICAqL1xuICBwcmV2aW91c01vbnRoVmlzaWJsZURheXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWxsRGF5cyA9IHRoaXMucHJldmlvdXNNb250aERheXMoKTtcbiAgICBpZiAoIXRoaXMudmlydHVhbFdlZWtzIHx8ICFpc1ZpcnR1YWxXZWVrc0VuYWJsZWQodGhpcy52aXJ0dWFsV2Vla3Mud2luZG93U2l6ZSwgNikpIHtcbiAgICAgIHJldHVybiBhbGxEYXlzO1xuICAgIH1cbiAgICBcbiAgICAvLyBDYWxlbmRhciBoYXMgNiB3ZWVrcyAoNDIgY2VsbHMgPSA3IGRheXMgw5cgNiB3ZWVrcylcbiAgICBjb25zdCBhbGxXZWVrczogYW55W11bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICBhbGxXZWVrcy5wdXNoKGFsbERheXMuc2xpY2UoaSAqIDcsIChpICsgMSkgKiA3KSk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZpc2libGVXZWVrcyA9IGdldFZpc2libGVXZWVrcyhcbiAgICAgIGFsbFdlZWtzLFxuICAgICAgdGhpcy5wcmV2aW91c01vbnRoV2Vla1N0YXJ0KCksXG4gICAgICB0aGlzLnZpcnR1YWxXZWVrcy53aW5kb3dTaXplXG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4gdmlzaWJsZVdlZWtzLmZsYXQoKTtcbiAgfSk7XG4gIFxuICBjdXJyZW50TW9udGhWaXNpYmxlRGF5cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhbGxEYXlzID0gdGhpcy5jdXJyZW50TW9udGhEYXlzKCk7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxXZWVrcyB8fCAhaXNWaXJ0dWFsV2Vla3NFbmFibGVkKHRoaXMudmlydHVhbFdlZWtzLndpbmRvd1NpemUsIDYpKSB7XG4gICAgICByZXR1cm4gYWxsRGF5cztcbiAgICB9XG4gICAgXG4gICAgLy8gQ2FsZW5kYXIgaGFzIDYgd2Vla3MgKDQyIGNlbGxzID0gNyBkYXlzIMOXIDYgd2Vla3MpXG4gICAgY29uc3QgYWxsV2Vla3M6IGFueVtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgYWxsV2Vla3MucHVzaChhbGxEYXlzLnNsaWNlKGkgKiA3LCAoaSArIDEpICogNykpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB2aXNpYmxlV2Vla3MgPSBnZXRWaXNpYmxlV2Vla3MoXG4gICAgICBhbGxXZWVrcyxcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoV2Vla1N0YXJ0KCksXG4gICAgICB0aGlzLnZpcnR1YWxXZWVrcy53aW5kb3dTaXplXG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4gdmlzaWJsZVdlZWtzLmZsYXQoKTtcbiAgfSk7XG4gIFxuICAvLyBDb21wdXRlZCB0aW1lIHByb3BlcnRpZXMgZnJvbSBzdG9yZVxuICBnZXQgc3RhcnRIb3VyKCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydFRpbWUoKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRpbWUodGltZSkuaG91cjtcbiAgfVxuICBcbiAgZ2V0IHN0YXJ0TWludXRlKCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydFRpbWUoKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRpbWUodGltZSkubWludXRlO1xuICB9XG4gIFxuICBnZXQgZW5kSG91cigpOiBudW1iZXIge1xuICAgIGNvbnN0IHRpbWUgPSB0aGlzLnJhbmdlU3RvcmUuZW5kVGltZSgpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlVGltZSh0aW1lKS5ob3VyO1xuICB9XG4gIFxuICBnZXQgZW5kTWludXRlKCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHRoaXMucmFuZ2VTdG9yZS5lbmRUaW1lKCk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUaW1lKHRpbWUpLm1pbnV0ZTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBzZXRTdGFydEhvdXJNaW51dGUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVTdHIgPSB0aGlzLmZvcm1hdFRpbWUoaG91ciwgbWludXRlKTtcbiAgICB0aGlzLnJhbmdlU3RvcmUuc2V0U3RhcnRUaW1lKHRpbWVTdHIpO1xuICB9XG4gIFxuICBwcml2YXRlIHNldEVuZEhvdXJNaW51dGUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVTdHIgPSB0aGlzLmZvcm1hdFRpbWUoaG91ciwgbWludXRlKTtcbiAgICB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kVGltZSh0aW1lU3RyKTtcbiAgfVxuICBcbiAgLy8gTXVsdGktcmFuZ2Ugc3VwcG9ydCAoVUktc3BlY2lmaWMpXG4gIHNlbGVjdGVkUmFuZ2VzID0gc2lnbmFsPERhdGVSYW5nZVtdPihbXSk7XG4gIGN1cnJlbnRSYW5nZUluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIC8vIEtleWJvYXJkIG5hdmlnYXRpb24gKFVJLXNwZWNpZmljKVxuICBmb2N1c2VkRGF5ID0gc2lnbmFsPHsgZGF0ZTogc3RyaW5nOyBtb250aEluZGV4OiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xuICBcbiAgLy8gQ29tcHV0ZWQgdmFsdWVzXG4gIGN1cnJlbnRNb250aE5hbWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldE1vbnRoTmFtZSh0aGlzLmN1cnJlbnRNb250aCgpKSk7XG4gIHByZXZpb3VzTW9udGhOYW1lID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXRNb250aE5hbWUodGhpcy5wcmV2aW91c01vbnRoKCkpKTtcbiAgd2Vla0RheU5hbWVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXREYXlOYW1lcygpKTtcbiAgXG4gIC8vIENvbXB1dGVkIGZyb20gc3RvcmVcbiAgZGF0ZVJhbmdlVGV4dCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmFuZ2VTdG9yZS5yYW5nZVRleHQoKSk7XG4gIHNlbGVjdGluZ1N0YXJ0RGF0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmFuZ2VTdG9yZS5zZWxlY3RpbmdTdGFydCgpKTtcbiAgaGFzUGVuZGluZ0NoYW5nZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJhbmdlU3RvcmUuaGFzUGVuZGluZ0NoYW5nZXMoKSk7XG4gIFxuICAvLyBDb21wdXRlZCBmb3IgdGVtcGxhdGUgYWNjZXNzIHRvIHBlbmRpbmcgZGF0ZXMgKHJlcXVpcmVBcHBseSBtb2RlKVxuICBnZXQgcGVuZGluZ1N0YXJ0RGF0ZSgpOiBzdHJpbmcge1xuICAgIC8vIEluIHJlcXVpcmVBcHBseSBtb2RlLCBzdG9yZSBrZWVwcyBwZW5kaW5nIHZhbHVlc1xuICAgIC8vIEZvciBub3csIHVzZSBhY3R1YWwgc3RvcmUgdmFsdWVzIGFzIHBlbmRpbmcgKHN0b3JlIGhhbmRsZXMgdGhpcylcbiAgICBpZiAoIXRoaXMucmVxdWlyZUFwcGx5KSByZXR1cm4gJyc7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydERhdGUoKTtcbiAgICByZXR1cm4gZGF0ZSAmJiB0aGlzLmhhc1BlbmRpbmdDaGFuZ2VzKCkgPyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgOiAnJztcbiAgfVxuICBcbiAgZ2V0IHBlbmRpbmdFbmREYXRlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVBcHBseSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnJhbmdlU3RvcmUuZW5kRGF0ZSgpO1xuICAgIHJldHVybiBkYXRlICYmIHRoaXMuaGFzUGVuZGluZ0NoYW5nZXMoKSA/IHRoaXMuZm9ybWF0RGF0ZShkYXRlKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TW9udGhOYW1lcyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRNb250aE5hbWVzU2hvcnQgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdERheU5hbWVzID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHREYXlOYW1lc1Nob3J0ID0gWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ107XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgY2FsbGJhY2tzXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogRGF0ZVJhbmdlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIC8vIEVmZmVjdCB0byBlbWl0IGNoYW5nZXMgd2hlbiBkYXRlcyBjaGFuZ2UgaW4gc3RvcmVcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnJhbmdlU3RvcmUucmFuZ2UoKTtcbiAgICAgIGlmIChyYW5nZS5zdGFydCB8fCByYW5nZS5lbmQpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmdldERhdGVSYW5nZVZhbHVlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3dEYXRlUGlja2VyKCkgJiYgdGhpcy5jbG9zZU9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGlmICghY2xpY2tlZEluc2lkZSkge1xuICAgICAgICB0aGlzLmNsb3NlRGF0ZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlib2FyZE5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNob3dEYXRlUGlja2VyKCkpIHtcbiAgICAgIC8vIFdoZW4gcGlja2VyIGlzIGNsb3NlZCwgYWxsb3cgRW50ZXIvU3BhY2UgdG8gb3BlbiBpdFxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXRlcGlja2VyLWlucHV0JykpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMudG9nZ2xlRGF0ZVBpY2tlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2hlbiBwaWNrZXIgaXMgb3BlblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsb3NlRGF0ZVBpY2tlcigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzVmVydGljYWwoLTEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNWZXJ0aWNhbCgxKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzSG9yaXpvbnRhbCgtMSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNIb3Jpem9udGFsKDEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0Rm9jdXNlZERheSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzVG9GaXJzdERheSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNUb0xhc3REYXkoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMubW92ZUZvY3VzWWVhcigtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VNb250aCgtMSk7XG4gICAgICAgICAgdGhpcy5hZGp1c3RGb2N1c0FmdGVyTW9udGhDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLm1vdmVGb2N1c1llYXIoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VNb250aCgxKTtcbiAgICAgICAgICB0aGlzLmFkanVzdEZvY3VzQWZ0ZXJNb250aENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEtleWJvYXJkIG5hdmlnYXRpb24gbWV0aG9kc1xuICBwcml2YXRlIGluaXRpYWxpemVGb2N1cygpOiB2b2lkIHtcbiAgICAvLyBTZXQgaW5pdGlhbCBmb2N1cyB0byBzdGFydCBkYXRlLCBlbmQgZGF0ZSwgb3IgZmlyc3QgYXZhaWxhYmxlIGRheVxuICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgY29uc3QgaW5QcmV2TW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodGhpcy5zdGFydERhdGUsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICAgIGNvbnN0IGluQ3Vyck1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKHRoaXMuc3RhcnREYXRlLCB0aGlzLmN1cnJlbnRNb250aCgpKTtcbiAgICAgIFxuICAgICAgaWYgKGluUHJldk1vbnRoIHx8IGluQ3Vyck1vbnRoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSwgbW9udGhJbmRleDogaW5QcmV2TW9udGggPyAwIDogMSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHN0YXJ0RGF0ZSBpcyBub3QgdmlzaWJsZSwgZm9jdXMgb24gdG9kYXkgaWYgdmlzaWJsZVxuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUFkYXB0ZXIudG9JU09EYXRlKHRoaXMuZGF0ZUFkYXB0ZXIubm9ybWFsaXplKG5ldyBEYXRlKCkpKTtcbiAgICAgICAgY29uc3QgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodG9kYXksIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGluQ3Vyck1vbnRoKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IHRvZGF5LCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb250aERheXMgPSB0aGlzLmN1cnJlbnRNb250aERheXMoKTtcbiAgICAgICAgICBjb25zdCBmaXJzdERheSA9IGN1cnJlbnRNb250aERheXMuZmluZChkYXkgPT4gZGF5LmlzQ3VycmVudE1vbnRoKTtcbiAgICAgICAgICBpZiAoZmlyc3REYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiBmaXJzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICBjb25zdCBpblByZXZNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aCh0aGlzLmVuZERhdGUsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICAgIGNvbnN0IGluQ3Vyck1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKHRoaXMuZW5kRGF0ZSwgdGhpcy5jdXJyZW50TW9udGgoKSk7XG4gICAgICBcbiAgICAgIGlmIChpblByZXZNb250aCB8fCBpbkN1cnJNb250aCkge1xuICAgICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgZGF0ZTogdGhpcy5lbmREYXRlLCBtb250aEluZGV4OiBpblByZXZNb250aCA/IDAgOiAxIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW5kRGF0ZSBpcyBub3QgdmlzaWJsZSwgZm9jdXMgb24gdG9kYXkgaWYgdmlzaWJsZVxuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUFkYXB0ZXIudG9JU09EYXRlKHRoaXMuZGF0ZUFkYXB0ZXIubm9ybWFsaXplKG5ldyBEYXRlKCkpKTtcbiAgICAgICAgY29uc3QgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodG9kYXksIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGluQ3Vyck1vbnRoKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IHRvZGF5LCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb250aERheXMgPSB0aGlzLmN1cnJlbnRNb250aERheXMoKTtcbiAgICAgICAgICBjb25zdCBmaXJzdERheSA9IGN1cnJlbnRNb250aERheXMuZmluZChkYXkgPT4gZGF5LmlzQ3VycmVudE1vbnRoKTtcbiAgICAgICAgICBpZiAoZmlyc3REYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiBmaXJzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb2N1cyBvbiB0b2RheSBpZiB2aXNpYmxlLCBvdGhlcndpc2UgZmlyc3QgZGF5IG9mIGN1cnJlbnQgbW9udGhcbiAgICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5kYXRlQWRhcHRlci50b0lTT0RhdGUodGhpcy5kYXRlQWRhcHRlci5ub3JtYWxpemUobmV3IERhdGUoKSkpO1xuICAgICAgY29uc3QgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgodG9kYXksIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgXG4gICAgICBpZiAoaW5DdXJyTW9udGgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IHRvZGF5LCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVG9kYXkgaXMgbm90IGluIGN1cnJlbnQgbW9udGgsIGZvY3VzIG9uIGZpcnN0IGRheSBvZiBjdXJyZW50IG1vbnRoXG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aERheXMgPSB0aGlzLmN1cnJlbnRNb250aERheXMoKTtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBjdXJyZW50TW9udGhEYXlzLmZpbmQoZGF5ID0+IGRheS5pc0N1cnJlbnRNb250aCk7XG4gICAgICAgIGlmIChmaXJzdERheSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQoeyBkYXRlOiBmaXJzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0RhdGVJbk1vbnRoKGRhdGVTdHI6IHN0cmluZywgbW9udGhEYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2VJU09EYXRlKGRhdGVTdHIpO1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpO1xuICAgIGNvbnN0IG1vbnRoWWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihtb250aERhdGUpO1xuICAgIGNvbnN0IG1vbnRoTW9udGggPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKG1vbnRoRGF0ZSk7XG4gICAgcmV0dXJuIHllYXIgPT09IG1vbnRoWWVhciAmJiBtb250aCA9PT0gbW9udGhNb250aDtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUZvY3VzSG9yaXpvbnRhbChkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvY3VzZWQgPSB0aGlzLmZvY3VzZWREYXkoKTtcbiAgICBpZiAoIWZvY3VzZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlSVNPRGF0ZShmb2N1c2VkLmRhdGUpO1xuICAgIGlmICghY3VycmVudERhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLmFkZERheXMoY3VycmVudERhdGUsIGRpcmVjdGlvbik7XG4gICAgY29uc3QgbmV3RGF0ZVN0ciA9IHRoaXMuZm9ybWF0RGF0ZShuZXdEYXRlKTtcblxuICAgIC8vIERldGVybWluZSB3aGljaCBtb250aCB0aGUgbmV3IGRhdGUgYmVsb25ncyB0b1xuICAgIGxldCBpblByZXZNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChuZXdEYXRlU3RyLCB0aGlzLnByZXZpb3VzTW9udGgoKSk7XG4gICAgbGV0IGluQ3Vyck1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKG5ld0RhdGVTdHIsIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuXG4gICAgaWYgKGluUHJldk1vbnRoIHx8IGluQ3Vyck1vbnRoKSB7XG4gICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgXG4gICAgICAgIGRhdGU6IG5ld0RhdGVTdHIsIFxuICAgICAgICBtb250aEluZGV4OiBpblByZXZNb250aCA/IDAgOiAxIFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERhdGUgaXMgb3V0c2lkZSB2aXNpYmxlIG1vbnRocywgbmF2aWdhdGUgbW9udGhcbiAgICAgIGlmIChkaXJlY3Rpb24gPiAwKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlTW9udGgoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoYW5nZU1vbnRoKC0xKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmVjYWxjdWxhdGUgYWZ0ZXIgbW9udGggY2hhbmdlXG4gICAgICBpblByZXZNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChuZXdEYXRlU3RyLCB0aGlzLnByZXZpb3VzTW9udGgoKSk7XG4gICAgICBpbkN1cnJNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChuZXdEYXRlU3RyLCB0aGlzLmN1cnJlbnRNb250aCgpKTtcbiAgICAgIFxuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IFxuICAgICAgICBkYXRlOiBuZXdEYXRlU3RyLCBcbiAgICAgICAgbW9udGhJbmRleDogaW5QcmV2TW9udGggPyAwIDogKGluQ3Vyck1vbnRoID8gMSA6IDApXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVGb2N1c1ZlcnRpY2FsKGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZERheSgpO1xuICAgIGlmICghZm9jdXNlZCkge1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2VJU09EYXRlKGZvY3VzZWQuZGF0ZSk7XG4gICAgaWYgKCFjdXJyZW50RGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIuYWRkRGF5cyhjdXJyZW50RGF0ZSwgZGlyZWN0aW9uICogNyk7IC8vIE1vdmUgYnkgd2Vla1xuICAgIGNvbnN0IG5ld0RhdGVTdHIgPSB0aGlzLmZvcm1hdERhdGUobmV3RGF0ZSk7XG5cbiAgICBsZXQgaW5QcmV2TW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgobmV3RGF0ZVN0ciwgdGhpcy5wcmV2aW91c01vbnRoKCkpO1xuICAgIGxldCBpbkN1cnJNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChuZXdEYXRlU3RyLCB0aGlzLmN1cnJlbnRNb250aCgpKTtcblxuICAgIGlmIChpblByZXZNb250aCB8fCBpbkN1cnJNb250aCkge1xuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IFxuICAgICAgICBkYXRlOiBuZXdEYXRlU3RyLCBcbiAgICAgICAgbW9udGhJbmRleDogaW5QcmV2TW9udGggPyAwIDogMSBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOYXZpZ2F0ZSB0byBtb250aCBjb250YWluaW5nIHRoZSBuZXcgZGF0ZVxuICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VNb250aCgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hhbmdlTW9udGgoLTEpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZWNhbGN1bGF0ZSBhZnRlciBtb250aCBjaGFuZ2VcbiAgICAgIGluUHJldk1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKG5ld0RhdGVTdHIsIHRoaXMucHJldmlvdXNNb250aCgpKTtcbiAgICAgIGluQ3Vyck1vbnRoID0gdGhpcy5pc0RhdGVJbk1vbnRoKG5ld0RhdGVTdHIsIHRoaXMuY3VycmVudE1vbnRoKCkpO1xuICAgICAgXG4gICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgXG4gICAgICAgIGRhdGU6IG5ld0RhdGVTdHIsIFxuICAgICAgICBtb250aEluZGV4OiBpblByZXZNb250aCA/IDAgOiAoaW5DdXJyTW9udGggPyAxIDogMClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUZvY3VzVG9GaXJzdERheSgpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2TW9udGhEYXlzID0gdGhpcy5wcmV2aW91c01vbnRoRGF5cygpO1xuICAgIGNvbnN0IGZpcnN0RGF5ID0gcHJldk1vbnRoRGF5cy5maW5kKGRheSA9PiBkYXkuaXNDdXJyZW50TW9udGgpO1xuICAgIGlmIChmaXJzdERheSkge1xuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IGRhdGU6IGZpcnN0RGF5LmRhdGUsIG1vbnRoSW5kZXg6IDAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNUb0xhc3REYXkoKTogdm9pZCB7XG4gICAgY29uc3QgY3Vyck1vbnRoRGF5cyA9IHRoaXMuY3VycmVudE1vbnRoRGF5cygpO1xuICAgIGNvbnN0IHZhbGlkRGF5cyA9IGN1cnJNb250aERheXMuZmlsdGVyKGRheSA9PiBkYXkuaXNDdXJyZW50TW9udGgpO1xuICAgIGNvbnN0IGxhc3REYXkgPSB2YWxpZERheXNbdmFsaWREYXlzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0RGF5KSB7XG4gICAgICB0aGlzLmZvY3VzZWREYXkuc2V0KHsgZGF0ZTogbGFzdERheS5kYXRlLCBtb250aEluZGV4OiAxIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUZvY3VzWWVhcihkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvY3VzZWQgPSB0aGlzLmZvY3VzZWREYXkoKTtcbiAgICBpZiAoIWZvY3VzZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlSVNPRGF0ZShmb2N1c2VkLmRhdGUpO1xuICAgIGlmICghY3VycmVudERhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKGN1cnJlbnREYXRlKTtcbiAgICBjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGN1cnJlbnREYXRlKTtcbiAgICBjb25zdCBjdXJyZW50RGF5ID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGN1cnJlbnREYXRlKTtcbiAgICBcbiAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5kYXRlQWRhcHRlci5ub3JtYWxpemUobmV3IERhdGUoY3VycmVudFllYXIgKyBkaXJlY3Rpb24sIGN1cnJlbnRNb250aCwgY3VycmVudERheSkpO1xuICAgIGNvbnN0IG5ld0RhdGVTdHIgPSB0aGlzLmZvcm1hdERhdGUobmV3RGF0ZSk7XG5cbiAgICAvLyBVcGRhdGUgbW9udGhzIHRvIHNob3cgdGhlIG5ldyB5ZWFyXG4gICAgdGhpcy5jdXJyZW50TW9udGguc2V0KHRoaXMuZGF0ZUFkYXB0ZXIubm9ybWFsaXplKG5ldyBEYXRlKGN1cnJlbnRZZWFyICsgZGlyZWN0aW9uLCBjdXJyZW50TW9udGgsIDEpKSk7XG4gICAgdGhpcy5wcmV2aW91c01vbnRoLnNldCh0aGlzLmRhdGVBZGFwdGVyLm5vcm1hbGl6ZShuZXcgRGF0ZShjdXJyZW50WWVhciArIGRpcmVjdGlvbiwgY3VycmVudE1vbnRoIC0gMSwgMSkpKTtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXJzKCk7XG5cbiAgICBjb25zdCBpblByZXZNb250aCA9IHRoaXMuaXNEYXRlSW5Nb250aChuZXdEYXRlU3RyLCB0aGlzLnByZXZpb3VzTW9udGgoKSk7XG4gICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7IFxuICAgICAgZGF0ZTogbmV3RGF0ZVN0ciwgXG4gICAgICBtb250aEluZGV4OiBpblByZXZNb250aCA/IDAgOiAxIFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGp1c3RGb2N1c0FmdGVyTW9udGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZERheSgpO1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaW5QcmV2TW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgoZm9jdXNlZC5kYXRlLCB0aGlzLnByZXZpb3VzTW9udGgoKSk7XG4gICAgY29uc3QgaW5DdXJyTW9udGggPSB0aGlzLmlzRGF0ZUluTW9udGgoZm9jdXNlZC5kYXRlLCB0aGlzLmN1cnJlbnRNb250aCgpKTtcblxuICAgIGlmICghaW5QcmV2TW9udGggJiYgIWluQ3Vyck1vbnRoKSB7XG4gICAgICAvLyBGb2N1c2VkIGRheSBpcyBubyBsb25nZXIgdmlzaWJsZSwgbW92ZSB0byBlcXVpdmFsZW50IGRheSBpbiB2aXNpYmxlIG1vbnRoc1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlIG1vbnRoIGluZGV4IGlmIG5lZWRlZFxuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldCh7XG4gICAgICAgIGRhdGU6IGZvY3VzZWQuZGF0ZSxcbiAgICAgICAgbW9udGhJbmRleDogaW5QcmV2TW9udGggPyAwIDogMVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RGb2N1c2VkRGF5KCk6IHZvaWQge1xuICAgIGNvbnN0IGZvY3VzZWQgPSB0aGlzLmZvY3VzZWREYXkoKTtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVybjtcblxuICAgIGNvbnN0IG1vbnRoRGF5cyA9IGZvY3VzZWQubW9udGhJbmRleCA9PT0gMCA/IHRoaXMucHJldmlvdXNNb250aERheXMoKSA6IHRoaXMuY3VycmVudE1vbnRoRGF5cygpO1xuICAgIGNvbnN0IGRheU9iaiA9IG1vbnRoRGF5cy5maW5kKGRheSA9PiBkYXkuZGF0ZSA9PT0gZm9jdXNlZC5kYXRlICYmIGRheS5pc0N1cnJlbnRNb250aCk7XG4gICAgXG4gICAgaWYgKGRheU9iaikge1xuICAgICAgdGhpcy5zZWxlY3REYXkoZGF5T2JqKTtcbiAgICB9XG4gIH1cblxuICBoYXNLZXlib2FyZEZvY3VzKGRhdGU6IHN0cmluZywgbW9udGhJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZERheSgpO1xuICAgIHJldHVybiBmb2N1c2VkICE9PSBudWxsICYmIGZvY3VzZWQuZGF0ZSA9PT0gZGF0ZSAmJiBmb2N1c2VkLm1vbnRoSW5kZXggPT09IG1vbnRoSW5kZXg7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBDb25maWd1cmUgdGhlIGhlYWRsZXNzIHN0b3JlXG4gICAgdGhpcy5yYW5nZVN0b3JlLmNvbmZpZ3VyZSh7XG4gICAgICBlbmFibGVUaW1lUGlja2VyOiB0aGlzLmVuYWJsZVRpbWVQaWNrZXIsXG4gICAgICBkZWZhdWx0U3RhcnRUaW1lOiB0aGlzLmRlZmF1bHRTdGFydFRpbWUsXG4gICAgICBkZWZhdWx0RW5kVGltZTogdGhpcy5kZWZhdWx0RW5kVGltZSxcbiAgICAgIGRpc2FibGVkRGF0ZXM6IHRoaXMuZGlzYWJsZWREYXRlc1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgZGF0ZXMgaW4gc3RvcmUgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5zdGFydERhdGUpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlSVNPRGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICBpZiAoZGF0ZSkgdGhpcy5yYW5nZVN0b3JlLnNldFN0YXJ0KGRhdGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5wYXJzZUlTT0RhdGUodGhpcy5lbmREYXRlKTtcbiAgICAgIGlmIChkYXRlKSB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKGRhdGUpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXJzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzdGFydERhdGUnXSB8fCBjaGFuZ2VzWydlbmREYXRlJ10pIHtcbiAgICAgIC8vIFN5bmMgd2l0aCBzdG9yZVxuICAgICAgaWYgKGNoYW5nZXNbJ3N0YXJ0RGF0ZSddICYmIHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlSVNPRGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICAgIGlmIChkYXRlKSB0aGlzLnJhbmdlU3RvcmUuc2V0U3RhcnQoZGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1snZW5kRGF0ZSddICYmIHRoaXMuZW5kRGF0ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5wYXJzZUlTT0RhdGUodGhpcy5lbmREYXRlKTtcbiAgICAgICAgaWYgKGRhdGUpIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmQoZGF0ZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgc3RvcmUgY29uZmlndXJhdGlvbiBpZiByZWxldmFudCBpbnB1dHMgY2hhbmdlXG4gICAgaWYgKGNoYW5nZXNbJ2VuYWJsZVRpbWVQaWNrZXInXSB8fCBjaGFuZ2VzWydkZWZhdWx0U3RhcnRUaW1lJ10gfHwgXG4gICAgICAgIGNoYW5nZXNbJ2RlZmF1bHRFbmRUaW1lJ10gfHwgY2hhbmdlc1snZGlzYWJsZWREYXRlcyddKSB7XG4gICAgICB0aGlzLnJhbmdlU3RvcmUuY29uZmlndXJlKHtcbiAgICAgICAgZW5hYmxlVGltZVBpY2tlcjogdGhpcy5lbmFibGVUaW1lUGlja2VyLFxuICAgICAgICBkZWZhdWx0U3RhcnRUaW1lOiB0aGlzLmRlZmF1bHRTdGFydFRpbWUsXG4gICAgICAgIGRlZmF1bHRFbmRUaW1lOiB0aGlzLmRlZmF1bHRFbmRUaW1lLFxuICAgICAgICBkaXNhYmxlZERhdGVzOiB0aGlzLmRpc2FibGVkRGF0ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKTtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyh0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcodGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGRhdGUpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICB9XG5cbiAgZm9ybWF0RGF0ZURpc3BsYXkoZGF0ZVN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGVTdHIpIHJldHVybiAnJztcbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5wYXJzZUlTT0RhdGUoZGF0ZVN0cik7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKTtcbiAgICBjb25zdCBtb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSk7XG4gICAgY29uc3QgZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGRhdGUpO1xuICAgIFxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSB0aGlzLmxvY2FsZS5tb250aE5hbWVzIHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXM7XG4gICAgY29uc3QgbW9udGhOYW1lc1Nob3J0ID0gdGhpcy5sb2NhbGUubW9udGhOYW1lc1Nob3J0IHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXNTaG9ydDtcbiAgICBcbiAgICAvLyBSZXBsYWNlIGZvcm1hdCB0b2tlbnMgd2l0aCB2YWx1ZXNcbiAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5kaXNwbGF5Rm9ybWF0O1xuICAgIFxuICAgIC8vIFllYXIgdG9rZW5zXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1lZWVkvZywgU3RyaW5nKHllYXIpKTtcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvWVkvZywgU3RyaW5nKHllYXIpLnNsaWNlKC0yKSk7XG4gICAgXG4gICAgLy8gTW9udGggdG9rZW5zIChvcmRlciBtYXR0ZXJzOiBNTU1NIGJlZm9yZSBNTU0gYmVmb3JlIE1NIGJlZm9yZSBNKVxuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9NTU1NL2csIG1vbnRoTmFtZXNbbW9udGhdKTtcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvTU1NL2csIG1vbnRoTmFtZXNTaG9ydFttb250aF0pO1xuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9NTS9nLCBTdHJpbmcobW9udGggKyAxKS5wYWRTdGFydCgyLCAnMCcpKTtcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvTS9nLCBTdHJpbmcobW9udGggKyAxKSk7XG4gICAgXG4gICAgLy8gRGF5IHRva2VucyAob3JkZXIgbWF0dGVyczogREQgYmVmb3JlIEQpXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL0REL2csIFN0cmluZyhkYXkpLnBhZFN0YXJ0KDIsICcwJykpO1xuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9EL2csIFN0cmluZyhkYXkpKTtcbiAgICBcbiAgICByZXR1cm4gZm9ybWF0dGVkO1xuICB9XG5cbiAgLy8gTm90ZTogdXBkYXRlRGF0ZVJhbmdlVGV4dCBpcyBub3cgaGFuZGxlZCBieSBjb21wdXRlZCBkYXRlUmFuZ2VUZXh0IGZyb20gc3RvcmVcbiAgLy8gS2VlcGluZyB0aGlzIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgaXQncyBhIG5vLW9wXG4gIHVwZGF0ZURhdGVSYW5nZVRleHQoKTogdm9pZCB7XG4gICAgLy8gVGV4dCBpcyBub3cgYXV0b21hdGljYWxseSBjb21wdXRlZCBmcm9tIHN0b3JlLnJhbmdlVGV4dCgpXG4gIH1cblxuICB0b2dnbGVEYXRlUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RhdGVQaWNrZXIudXBkYXRlKHZhbHVlID0+ICF2YWx1ZSk7XG4gICAgaWYgKHRoaXMuc2hvd0RhdGVQaWNrZXIoKSkge1xuICAgICAgLy8gc2VsZWN0aW5nU3RhcnQgaXMgbWFuYWdlZCBieSBzdG9yZSwgbm8gbmVlZCB0byBzZXQgaGVyZVxuICAgICAgY29uc3QgY3VycmVudE1vbnRoVmFsdWUgPSB0aGlzLmN1cnJlbnRNb250aCgpO1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihjdXJyZW50TW9udGhWYWx1ZSk7XG4gICAgICBjb25zdCBtb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoY3VycmVudE1vbnRoVmFsdWUpO1xuICAgICAgY29uc3QgcHJldmlvdXNNb250aERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLm5vcm1hbGl6ZShuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIDEpKTtcbiAgICAgIHRoaXMucHJldmlvdXNNb250aC5zZXQocHJldmlvdXNNb250aERhdGUpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgICAgLy8gSW5pdGlhbGl6ZSBrZXlib2FyZCBmb2N1cyBvbmx5IGlmIGtleWJvYXJkIG5hdmlnYXRpb24gaXMgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsZWFyIGZvY3VzIHdoZW4gY2xvc2luZ1xuICAgICAgaWYgKHRoaXMuZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZERheS5zZXQobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBjbG9zZURhdGVQaWNrZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbikge1xuICAgICAgdGhpcy5mb2N1c2VkRGF5LnNldChudWxsKTtcbiAgICB9XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGdlbmVyYXRlQ2FsZW5kYXJzKCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlvdXNNb250aERheXMuc2V0KHRoaXMuZ2VuZXJhdGVNb250aENhbGVuZGFyKHRoaXMucHJldmlvdXNNb250aCgpKSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXlzLnNldCh0aGlzLmdlbmVyYXRlTW9udGhDYWxlbmRhcih0aGlzLmN1cnJlbnRNb250aCgpKSk7XG4gICAgXG4gICAgLy8gUmVzZXQgdmlydHVhbCB3ZWVrIHdpbmRvd3Mgd2hlbiBtb250aCBjaGFuZ2VzICh2My45LjArKVxuICAgIC8vIEFsd2F5cyBzdGFydCBhdCBmaXJzdCB3ZWVrIGZvciBjb25zaXN0ZW50IFVYXG4gICAgaWYgKHRoaXMudmlydHVhbFdlZWtzKSB7XG4gICAgICB0aGlzLnByZXZpb3VzTW9udGhXZWVrU3RhcnQuc2V0KDApO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhXZWVrU3RhcnQuc2V0KDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIHdpdGggZGVjb3JhdGlvbnMgKHYzLjguMCspXG4gICAqIFxuICAgKiBVc2VzIENhbGVuZGFyR3JpZENhY2hlIGZvciBiYXNlIGdyaWQgc3RydWN0dXJlIChtZW1vaXplZCBieSBtb250aCksXG4gICAqIHRoZW4gdXNlcyBSYW5nZUhpZ2hsaWdodGVyQ2FjaGUgZm9yIGRlY29yYXRpb25zIChtZW1vaXplZCBieSByYW5nZS9jb25zdHJhaW50cykuXG4gICAqIFxuICAgKiBQZXJmb3JtYW5jZTpcbiAgICogLSBHcmlkIHN0cnVjdHVyZTogQ2FjaGVkIGJ5IG1vbnRoIChzYW1lIG1vbnRoID0gc2FtZSBncmlkIG9iamVjdClcbiAgICogLSBEZWNvcmF0aW9uczogQ2FjaGVkIGJ5IHJhbmdlK2hvdmVyK2Rpc2FibGVkIChzYW1lIHN0YXRlID0gc2FtZSBkZWNvcmF0ZWQgZ3JpZClcbiAgICogLSBSZXN1bHQ6IH45NSUgY2FjaGUgaGl0IHJhdGUgaW4gdHlwaWNhbCB1c2FnZVxuICAgKiBcbiAgICogQ2FjaGUga2V5czpcbiAgICogLSBHcmlkOiBgJHt5ZWFyfS0ke21vbnRofS0ke3dlZWtTdGFydH1gXG4gICAqIC0gRGVjb3JhdGlvbnM6IGAke21vbnRoS2V5fXwke3N0YXJ0fXwke2VuZH18JHtob3Zlcn18JHtkaXNhYmxlZH1gXG4gICAqL1xuICBnZW5lcmF0ZU1vbnRoQ2FsZW5kYXIoZGF0ZTogRGF0ZSk6IGFueVtdIHtcbiAgICAvLyBHZXQgYmFzZSBncmlkIGZyb20gY2FjaGUgKHdlZWtTdGFydCA9IDAgZm9yIFN1bmRheSwgbm8gbG9jYWxlIGZvciBub3cpXG4gICAgY29uc3QgZ3JpZDogQ2FsZW5kYXJHcmlkID0gdGhpcy5ncmlkQ2FjaGUuZ2V0KGRhdGUsIDApO1xuICAgIFxuICAgIC8vIEdldCBkYXRlcyBmcm9tIHN0b3JlXG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5yYW5nZVN0b3JlLnN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLnJhbmdlU3RvcmUuZW5kRGF0ZSgpO1xuICAgIGNvbnN0IGhvdmVySVNPID0gdGhpcy5ob3ZlckRhdGUoKTtcbiAgICBcbiAgICAvLyBHZXQgZGVjb3JhdGVkIGdyaWQgZnJvbSBjYWNoZSAoaGFuZGxlcyBhbGwgZGVjb3JhdGlvbiBsb2dpYylcbiAgICBjb25zdCBkZWNvcmF0ZWQgPSB0aGlzLmhpZ2hsaWdodGVyQ2FjaGUuZ2V0KGdyaWQsIHtcbiAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICBlbmQ6IGVuZERhdGUsXG4gICAgICBob3ZlckRhdGU6IGhvdmVySVNPLFxuICAgICAgZGlzYWJsZWREYXRlczogdGhpcy5kaXNhYmxlZERhdGVzLFxuICAgICAgbXVsdGlSYW5nZTogdGhpcy5tdWx0aVJhbmdlLFxuICAgICAgc2VsZWN0aW5nU3RhcnREYXRlOiB0aGlzLnNlbGVjdGluZ1N0YXJ0RGF0ZSgpXG4gICAgICAvLyBtaW5EYXRlL21heERhdGUgb21pdHRlZCBmb3Igbm93IChub3QgaW4gY3VycmVudCBBUEkpXG4gICAgfSk7XG4gICAgXG4gICAgLy8gTWFwIGRlY29yYXRlZCBjZWxscyB0byBsZWdhY3kgZm9ybWF0IChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICBjb25zdCBtb250aERheXMgPSBkZWNvcmF0ZWQuY2VsbHMubWFwKChjZWxsOiBEZWNvcmF0ZWRDZWxsKSA9PiB7XG4gICAgICBpZiAoIWNlbGwuaW5DdXJyZW50TW9udGgpIHtcbiAgICAgICAgLy8gUGFkZGluZyBjZWxsIChwcmV2aW91cy9uZXh0IG1vbnRoKVxuICAgICAgICByZXR1cm4geyBkYXk6IG51bGwsIGlzQ3VycmVudE1vbnRoOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDdXJyZW50IG1vbnRoIGNlbGwgLSB1c2UgY2FjaGVkIGRlY29yYXRpb25zXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXk6IGNlbGwuZGF5LFxuICAgICAgICBkYXRlOiBjZWxsLmlzbyxcbiAgICAgICAgaXNDdXJyZW50TW9udGg6IHRydWUsXG4gICAgICAgIGlzU3RhcnQ6IGNlbGwuaXNTZWxlY3RlZFN0YXJ0LFxuICAgICAgICBpc0VuZDogY2VsbC5pc1NlbGVjdGVkRW5kLFxuICAgICAgICBpblJhbmdlOiBjZWxsLmlzSW5SYW5nZSxcbiAgICAgICAgaW5Ib3ZlclJhbmdlOiBjZWxsLmlzSW5Ib3ZlclJhbmdlLFxuICAgICAgICBpc0Rpc2FibGVkOiBjZWxsLmlzRGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW9udGhEYXlzO1xuICB9XG5cbiAgaXNJblJhbmdlKGRhdGVTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm11bHRpUmFuZ2UpIHtcbiAgICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgaW4gYW55IG9mIHRoZSBzZWxlY3RlZCByYW5nZXNcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2VzKCkuc29tZShyYW5nZSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRlU3RyID49IHJhbmdlLnN0YXJ0RGF0ZSAmJiBkYXRlU3RyIDw9IHJhbmdlLmVuZERhdGU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSB8fCAhdGhpcy5lbmREYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gZGF0ZVN0ciA+PSB0aGlzLnN0YXJ0RGF0ZSAmJiBkYXRlU3RyIDw9IHRoaXMuZW5kRGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmlydHVhbCBXZWVrcyBOYXZpZ2F0aW9uICh2My45LjArKVxuICAgKiBcbiAgICogTmF2aWdhdGUgdGhlIHZpc2libGUgd2VlayB3aW5kb3cgdXAvZG93biBmb3Igd2luZG93ZWQgcmVuZGVyaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIG1vbnRoSW5kZXggMCA9IHByZXZpb3VzIG1vbnRoLCAxID0gY3VycmVudCBtb250aFxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIC0xID0gc2Nyb2xsIHVwIChwcmV2aW91cyB3ZWVrcyksICsxID0gc2Nyb2xsIGRvd24gKG5leHQgd2Vla3MpXG4gICAqIFxuICAgKiBFeGFtcGxlOiBJZiB3aW5kb3dTaXplPTMgYW5kIHdlZWtTdGFydD0wLCBuYXZpZ2F0ZVdlZWtzKDAsICsxKSBzaG93cyB3ZWVrcyAxLTMuXG4gICAqL1xuICBuYXZpZ2F0ZVdlZWtzKG1vbnRoSW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFdlZWtzKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdG90YWxXZWVrcyA9IDY7IC8vIFN0YW5kYXJkIGNhbGVuZGFyIGdyaWQgaGFzIDYgd2Vla3NcbiAgICBjb25zdCBjdXJyZW50U3RhcnQgPSBtb250aEluZGV4ID09PSAwIFxuICAgICAgPyB0aGlzLnByZXZpb3VzTW9udGhXZWVrU3RhcnQoKSBcbiAgICAgIDogdGhpcy5jdXJyZW50TW9udGhXZWVrU3RhcnQoKTtcbiAgICBcbiAgICBjb25zdCBuZXdTdGFydCA9IG5hdmlnYXRlV2Vla1dpbmRvdyhcbiAgICAgIGN1cnJlbnRTdGFydCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHRvdGFsV2Vla3MsXG4gICAgICB0aGlzLnZpcnR1YWxXZWVrcy53aW5kb3dTaXplXG4gICAgKTtcbiAgICBcbiAgICBpZiAobW9udGhJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5wcmV2aW91c01vbnRoV2Vla1N0YXJ0LnNldChuZXdTdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoV2Vla1N0YXJ0LnNldChuZXdTdGFydCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlZWsgbmF2aWdhdGlvbiBpcyBhdmFpbGFibGUgKHYzLjkuMCspXG4gICAqIFxuICAgKiBAcGFyYW0gbW9udGhJbmRleCAwID0gcHJldmlvdXMgbW9udGgsIDEgPSBjdXJyZW50IG1vbnRoXG4gICAqIEBwYXJhbSBkaXJlY3Rpb24gLTEgPSB1cCAoY2FuIHNjcm9sbCB0byBwcmV2aW91cyB3ZWVrcz8pLCArMSA9IGRvd24gKGNhbiBzY3JvbGwgdG8gbmV4dCB3ZWVrcz8pXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbmF2aWdhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhhdCBkaXJlY3Rpb25cbiAgICovXG4gIGNhbk5hdmlnYXRlV2Vla3MobW9udGhJbmRleDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52aXJ0dWFsV2Vla3MpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCB0b3RhbFdlZWtzID0gNjtcbiAgICBjb25zdCBjdXJyZW50U3RhcnQgPSBtb250aEluZGV4ID09PSAwIFxuICAgICAgPyB0aGlzLnByZXZpb3VzTW9udGhXZWVrU3RhcnQoKSBcbiAgICAgIDogdGhpcy5jdXJyZW50TW9udGhXZWVrU3RhcnQoKTtcbiAgICBcbiAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgLy8gQ2FuIHNjcm9sbCB1cCBpZiBub3QgYXQgc3RhcnRcbiAgICAgIHJldHVybiBjdXJyZW50U3RhcnQgPiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYW4gc2Nyb2xsIGRvd24gaWYgd2luZG93IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgZW5kXG4gICAgICByZXR1cm4gY3VycmVudFN0YXJ0ICsgdGhpcy52aXJ0dWFsV2Vla3Mud2luZG93U2l6ZSA8IHRvdGFsV2Vla3M7XG4gICAgfVxuICB9XG5cbiAgaXNEYXRlRGlzYWJsZWQoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZERhdGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHdpdGggdGhlIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMoZGF0ZSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGlzYWJsZWREYXRlcykpIHtcbiAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIGNoZWNrIGlmIHRoZSBkYXRlIG1hdGNoZXMgYW55IGRpc2FibGVkIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZShkaXNhYmxlZERhdGUgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpID09PSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoZGlzYWJsZWREYXRlKSAmJlxuICAgICAgICAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSA9PT0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChkaXNhYmxlZERhdGUpICYmXG4gICAgICAgICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLmdldERhdGUoZGF0ZSkgPT09IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShkaXNhYmxlZERhdGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzSW5Ib3ZlclJhbmdlKGRhdGVTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvdmVyID0gdGhpcy5ob3ZlckRhdGUoKTtcbiAgICBpZiAoIWhvdmVyKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBJbiBtdWx0aVJhbmdlIG1vZGUsIG9ubHkgc2hvdyBob3ZlciBwcmV2aWV3IHdoZW4gc2VsZWN0aW5nIGVuZCBkYXRlXG4gICAgaWYgKHRoaXMubXVsdGlSYW5nZSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW5nU3RhcnREYXRlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGFydCA9IHRoaXMuc3RhcnREYXRlO1xuICAgICAgaWYgKCFjdXJyZW50U3RhcnQpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSBjdXJyZW50U3RhcnQgPCBob3ZlciA/IGN1cnJlbnRTdGFydCA6IGhvdmVyO1xuICAgICAgY29uc3QgbWF4RGF0ZSA9IGN1cnJlbnRTdGFydCA+IGhvdmVyID8gY3VycmVudFN0YXJ0IDogaG92ZXI7XG4gICAgICByZXR1cm4gZGF0ZVN0ciA+PSBtaW5EYXRlICYmIGRhdGVTdHIgPD0gbWF4RGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gc2luZ2xlIHJhbmdlIG1vZGUgIFxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW5nU3RhcnREYXRlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMucmVxdWlyZUFwcGx5KSB7XG4gICAgICAgIC8vIFVzZSBwZW5kaW5nIGRhdGVzIGZyb20gc3RvcmVcbiAgICAgICAgY29uc3QgcGVuZGluZ1N0YXJ0ID0gdGhpcy5yYW5nZVN0b3JlLnN0YXJ0RGF0ZSgpO1xuICAgICAgICBpZiAoIXBlbmRpbmdTdGFydCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBwZW5kaW5nU3RhcnRTdHIgPSB0aGlzLmZvcm1hdERhdGUocGVuZGluZ1N0YXJ0KTtcbiAgICAgICAgY29uc3QgbWluRGF0ZSA9IHBlbmRpbmdTdGFydFN0ciA8IGhvdmVyID8gcGVuZGluZ1N0YXJ0U3RyIDogaG92ZXI7XG4gICAgICAgIGNvbnN0IG1heERhdGUgPSBwZW5kaW5nU3RhcnRTdHIgPiBob3ZlciA/IHBlbmRpbmdTdGFydFN0ciA6IGhvdmVyO1xuICAgICAgICByZXR1cm4gZGF0ZVN0ciA+PSBtaW5EYXRlICYmIGRhdGVTdHIgPD0gbWF4RGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZSBhY3R1YWwgZGF0ZXNcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXJ0ID0gdGhpcy5zdGFydERhdGU7XG4gICAgICAgIGlmICghY3VycmVudFN0YXJ0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1pbkRhdGUgPSBjdXJyZW50U3RhcnQgPCBob3ZlciA/IGN1cnJlbnRTdGFydCA6IGhvdmVyO1xuICAgICAgICBjb25zdCBtYXhEYXRlID0gY3VycmVudFN0YXJ0ID4gaG92ZXIgPyBjdXJyZW50U3RhcnQgOiBob3ZlcjtcbiAgICAgICAgcmV0dXJuIGRhdGVTdHIgPj0gbWluRGF0ZSAmJiBkYXRlU3RyIDw9IG1heERhdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXlIb3ZlcihkYXlPYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZGF5T2JqLmlzQ3VycmVudE1vbnRoIHx8IHRoaXMuaXNEaXNhYmxlZCgpIHx8IGRheU9iai5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmhvdmVyRGF0ZS5zZXQobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaG92ZXJEYXRlLnNldChkYXlPYmouZGF0ZSk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG5cbiAgY2xlYXJEYXlIb3ZlcigpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyRGF0ZS5zZXQobnVsbCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG5cbiAgc2VsZWN0RGF5KGRheU9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKCFkYXlPYmouaXNDdXJyZW50TW9udGggfHwgdGhpcy5pc0Rpc2FibGVkKCkgfHwgZGF5T2JqLmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlSVNPRGF0ZShkYXlPYmouZGF0ZSk7XG4gICAgaWYgKCFzZWxlY3RlZERhdGUpIHJldHVybjtcblxuICAgIGlmICh0aGlzLm11bHRpUmFuZ2UpIHtcbiAgICAgIC8vIE11bHRpLXJhbmdlIG1vZGU6IGFkZCByYW5nZXMgdG8gYXJyYXlcbiAgICAgIGlmICh0aGlzLnNlbGVjdGluZ1N0YXJ0RGF0ZSgpKSB7XG4gICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydChzZWxlY3RlZERhdGUpO1xuICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXJ0ID0gdGhpcy5yYW5nZVN0b3JlLnN0YXJ0RGF0ZSgpO1xuICAgICAgICBpZiAoY3VycmVudFN0YXJ0ICYmIHNlbGVjdGVkRGF0ZSA8IGN1cnJlbnRTdGFydCkge1xuICAgICAgICAgIC8vIFN3YXA6IHNlbGVjdGVkIGJlY29tZXMgc3RhcnQsIGN1cnJlbnQgc3RhcnQgYmVjb21lcyBlbmRcbiAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0U3RhcnQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKGN1cnJlbnRTdGFydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldEVuZChzZWxlY3RlZERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBBZGQgdGhlIG5ldyByYW5nZSB0byB0aGUgYXJyYXlcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnJhbmdlU3RvcmUucmFuZ2UoKTtcbiAgICAgICAgY29uc3QgbmV3UmFuZ2U6IERhdGVSYW5nZSA9IHtcbiAgICAgICAgICBzdGFydERhdGU6IHJhbmdlLnN0YXJ0LFxuICAgICAgICAgIGVuZERhdGU6IHJhbmdlLmVuZCxcbiAgICAgICAgICByYW5nZVRleHQ6IHRoaXMuZm9ybWF0RGF0ZURpc3BsYXkocmFuZ2Uuc3RhcnQpICsgJyDigJMgJyArIHRoaXMuZm9ybWF0RGF0ZURpc3BsYXkocmFuZ2UuZW5kKSxcbiAgICAgICAgICAuLi4odGhpcy5lbmFibGVUaW1lUGlja2VyICYmIHsgc3RhcnRUaW1lOiByYW5nZS5zdGFydFRpbWUsIGVuZFRpbWU6IHJhbmdlLmVuZFRpbWUgfSlcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSYW5nZXMgPSBbLi4udGhpcy5zZWxlY3RlZFJhbmdlcygpXTtcbiAgICAgICAgY3VycmVudFJhbmdlcy5wdXNoKG5ld1JhbmdlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlcy5zZXQoY3VycmVudFJhbmdlcyk7XG4gICAgICAgIFxuICAgICAgICAvLyBSZXNldCBmb3IgbmV4dCByYW5nZSBzZWxlY3Rpb25cbiAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnJlc2V0KCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgZGlzcGxheSB0ZXh0XG4gICAgICAgIHRoaXMudXBkYXRlTXVsdGlSYW5nZVRleHQoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIERvbid0IGNsb3NlIGlmIG11bHRpUmFuZ2UsIGFsbG93IGFkZGluZyBtb3JlIHJhbmdlc1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0aW9uICYmICF0aGlzLm11bHRpUmFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnNob3dEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuZW1pdE11bHRpQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZW1pdE11bHRpU2VsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXJzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpbmdsZSByYW5nZSBtb2RlXG4gICAgICBpZiAodGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgICAgLy8gQXBwbHkgbW9kZTogdXNlIHBlbmRpbmcgZGF0ZXMsIGRvbid0IGVtaXQgdW50aWwgQXBwbHkgaXMgY2xpY2tlZFxuICAgICAgICBpZiAodGhpcy5zZWxlY3RpbmdTdGFydERhdGUoKSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRQZW5kaW5nU3RhcnQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0UGVuZGluZ0VuZChudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwZW5kaW5nU3RhcnQgPSB0aGlzLnJhbmdlU3RvcmUuc3RhcnREYXRlKCk7XG4gICAgICAgICAgaWYgKHBlbmRpbmdTdGFydCAmJiBzZWxlY3RlZERhdGUgPCBwZW5kaW5nU3RhcnQpIHtcbiAgICAgICAgICAgIC8vIFN3YXBcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRQZW5kaW5nU3RhcnQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRQZW5kaW5nRW5kKHBlbmRpbmdTdGFydCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRQZW5kaW5nRW5kKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcnMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEltbWVkaWF0ZSBtb2RlOiBlbWl0IGNoYW5nZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW5nU3RhcnREYXRlKCkpIHtcbiAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0U3RhcnQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKG51bGwpO1xuICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGFydCA9IHRoaXMucmFuZ2VTdG9yZS5zdGFydERhdGUoKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXJ0ICYmIHNlbGVjdGVkRGF0ZSA8IGN1cnJlbnRTdGFydCkge1xuICAgICAgICAgICAgLy8gU3dhcFxuICAgICAgICAgICAgdGhpcy5yYW5nZVN0b3JlLnNldFN0YXJ0KHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0RW5kKGN1cnJlbnRTdGFydCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmQoc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zaG93RGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXJzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHJldHVybjtcbiAgICBcbiAgICAvLyBBcHBseSBwZW5kaW5nIGRhdGVzIHRocm91Z2ggc3RvcmVcbiAgICB0aGlzLnJhbmdlU3RvcmUuYXBwbHlQZW5kaW5nKCk7XG4gICAgXG4gICAgLy8gRW1pdCBjaGFuZ2VzXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gICAgXG4gICAgLy8gQ2xvc2UgcGlja2VyXG4gICAgdGhpcy5zaG93RGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICB9XG5cbiAgY2FuY2VsU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIERpc2NhcmQgcGVuZGluZyBjaGFuZ2VzIHRocm91Z2ggc3RvcmVcbiAgICB0aGlzLnJhbmdlU3RvcmUuY2FuY2VsUGVuZGluZygpO1xuICAgIFxuICAgIC8vIFJlZ2VuZXJhdGUgY2FsZW5kYXJzIHRvIGNsZWFyIHBlbmRpbmcgdmlzdWFsIHN0YXRlXG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG5cbiAgY2hhbmdlTW9udGgoZGlyZWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50TW9udGhWYWx1ZSA9IHRoaXMuY3VycmVudE1vbnRoKCk7XG4gICAgY29uc3QgeWVhciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihjdXJyZW50TW9udGhWYWx1ZSk7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGN1cnJlbnRNb250aFZhbHVlKTtcbiAgICBjb25zdCBuZXdDdXJyZW50TW9udGggPSB0aGlzLmRhdGVBZGFwdGVyLm5vcm1hbGl6ZShuZXcgRGF0ZSh5ZWFyLCBtb250aCArIGRpcmVjdGlvbiwgMSkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoLnNldChuZXdDdXJyZW50TW9udGgpO1xuICAgIFxuICAgIGNvbnN0IG5ld1llYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIobmV3Q3VycmVudE1vbnRoKTtcbiAgICBjb25zdCBuZXdNb250aCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobmV3Q3VycmVudE1vbnRoKTtcbiAgICBjb25zdCBuZXdQcmV2aW91c01vbnRoID0gdGhpcy5kYXRlQWRhcHRlci5ub3JtYWxpemUobmV3IERhdGUobmV3WWVhciwgbmV3TW9udGggLSAxLCAxKSk7XG4gICAgdGhpcy5wcmV2aW91c01vbnRoLnNldChuZXdQcmV2aW91c01vbnRoKTtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXJzKCk7XG4gIH1cblxuICBnZXRNb250aE5hbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IHRoaXMubG9jYWxlLm1vbnRoTmFtZXMgfHwgdGhpcy5kZWZhdWx0TW9udGhOYW1lcztcbiAgICByZXR1cm4gYCR7bW9udGhOYW1lc1t0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpXX0gJHt0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSl9YDtcbiAgfVxuXG4gIGdldERheU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUuZGF5TmFtZXNTaG9ydCB8fCB0aGlzLmRlZmF1bHREYXlOYW1lc1Nob3J0O1xuICB9XG5cbiAgc2VsZWN0UHJlc2V0UmFuZ2UocHJlc2V0OiBQcmVzZXRDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXByZXNldC5nZXRWYWx1ZSkge1xuICAgICAgY29uc29sZS5lcnJvcignUHJlc2V0Q29uZmlnIG11c3QgaGF2ZSBnZXRWYWx1ZSgpIGZ1bmN0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBwcmVzZXQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlSVNPRGF0ZShyYW5nZS5zdGFydCk7XG4gICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2VJU09EYXRlKHJhbmdlLmVuZCk7XG4gICAgXG4gICAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgICB0aGlzLnJhbmdlU3RvcmUuc2V0UmFuZ2Uoc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgIGlmICh0aGlzLmNsb3NlT25QcmVzZXRTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2hvd0RhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnJhbmdlU3RvcmUucmVzZXQoKTtcbiAgICB0aGlzLnNob3dEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgXG4gICAgaWYgKHRoaXMubXVsdGlSYW5nZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlcy5zZXQoW10pO1xuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VJbmRleC5zZXQoLTEpO1xuICAgICAgdGhpcy5lbWl0TXVsdGlDaGFuZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG4gIFxuICByZW1vdmVSYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpUmFuZ2UpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjdXJyZW50UmFuZ2VzID0gWy4uLnRoaXMuc2VsZWN0ZWRSYW5nZXMoKV07XG4gICAgY3VycmVudFJhbmdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZXMuc2V0KGN1cnJlbnRSYW5nZXMpO1xuICAgIFxuICAgIHRoaXMudXBkYXRlTXVsdGlSYW5nZVRleHQoKTtcbiAgICB0aGlzLmVtaXRNdWx0aUNoYW5nZSgpO1xuICAgIHRoaXMuZW1pdE11bHRpU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICB9XG4gIFxuICBwcml2YXRlIHVwZGF0ZU11bHRpUmFuZ2VUZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5zZWxlY3RlZFJhbmdlcygpLmxlbmd0aDtcbiAgICAvLyBOb3RlOiBkYXRlUmFuZ2VUZXh0IGlzIG5vdyBjb21wdXRlZCBmcm9tIHN0b3JlLCB0aGlzIGlzIGZvciBtdWx0aS1yYW5nZSBVSSBvbmx5XG4gICAgLy8gV2UgY291bGQgc3RvcmUgdGhpcyBpbiBhIHNlcGFyYXRlIHNpZ25hbCBpZiBuZWVkZWQsIGJ1dCBmb3Igbm93IGp1c3QgdHJhY2sgcmFuZ2VzIGNvdW50XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmVSYW5nZSA9IHRoaXMucmFuZ2VTdG9yZS5yYW5nZSgpO1xuICAgIGNvbnN0IHJhbmdlOiBEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydERhdGU6IHN0b3JlUmFuZ2Uuc3RhcnQsXG4gICAgICBlbmREYXRlOiBzdG9yZVJhbmdlLmVuZCxcbiAgICAgIHJhbmdlVGV4dDogdGhpcy5kYXRlUmFuZ2VUZXh0KClcbiAgICB9O1xuICAgIFxuICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgIHJhbmdlLnN0YXJ0VGltZSA9IHN0b3JlUmFuZ2Uuc3RhcnRUaW1lO1xuICAgICAgcmFuZ2UuZW5kVGltZSA9IHN0b3JlUmFuZ2UuZW5kVGltZTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdChyYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmVSYW5nZSA9IHRoaXMucmFuZ2VTdG9yZS5yYW5nZSgpO1xuICAgIGNvbnN0IHJhbmdlOiBEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydERhdGU6IHN0b3JlUmFuZ2Uuc3RhcnQsXG4gICAgICBlbmREYXRlOiBzdG9yZVJhbmdlLmVuZCxcbiAgICAgIHJhbmdlVGV4dDogdGhpcy5kYXRlUmFuZ2VUZXh0KClcbiAgICB9O1xuICAgIFxuICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgIHJhbmdlLnN0YXJ0VGltZSA9IHN0b3JlUmFuZ2Uuc3RhcnRUaW1lO1xuICAgICAgcmFuZ2UuZW5kVGltZSA9IHN0b3JlUmFuZ2UuZW5kVGltZTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZC5lbWl0KHJhbmdlKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBlbWl0TXVsdGlDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5tdWx0aURhdGVSYW5nZUNoYW5nZS5lbWl0KHtcbiAgICAgIHJhbmdlczogdGhpcy5zZWxlY3RlZFJhbmdlcygpXG4gICAgfSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgZW1pdE11bHRpU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMubXVsdGlEYXRlUmFuZ2VTZWxlY3RlZC5lbWl0KHtcbiAgICAgIHJhbmdlczogdGhpcy5zZWxlY3RlZFJhbmdlcygpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVSYW5nZVZhbHVlKCk6IERhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RvcmVSYW5nZSA9IHRoaXMucmFuZ2VTdG9yZS5yYW5nZSgpO1xuICAgIGNvbnN0IHJhbmdlOiBEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydERhdGU6IHN0b3JlUmFuZ2Uuc3RhcnQsXG4gICAgICBlbmREYXRlOiBzdG9yZVJhbmdlLmVuZCxcbiAgICAgIHJhbmdlVGV4dDogdGhpcy5kYXRlUmFuZ2VUZXh0KClcbiAgICB9O1xuICAgIFxuICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgIHJhbmdlLnN0YXJ0VGltZSA9IHN0b3JlUmFuZ2Uuc3RhcnRUaW1lO1xuICAgICAgcmFuZ2UuZW5kVGltZSA9IHN0b3JlUmFuZ2UuZW5kVGltZTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLy8gVGltZSBQaWNrZXIgTWV0aG9kc1xuICB0b2dnbGVTdGFydFRpbWVQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdGFydFRpbWVQaWNrZXIuc2V0KCF0aGlzLnNob3dTdGFydFRpbWVQaWNrZXIoKSk7XG4gICAgdGhpcy5zaG93RW5kVGltZVBpY2tlci5zZXQoZmFsc2UpO1xuICB9XG5cbiAgdG9nZ2xlRW5kVGltZVBpY2tlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlVGltZVBpY2tlcikgcmV0dXJuO1xuICAgIHRoaXMuc2hvd0VuZFRpbWVQaWNrZXIuc2V0KCF0aGlzLnNob3dFbmRUaW1lUGlja2VyKCkpO1xuICAgIHRoaXMuc2hvd1N0YXJ0VGltZVBpY2tlci5zZXQoZmFsc2UpO1xuICB9XG5cbiAgaW5jcmVtZW50U3RhcnRIb3VyKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0hvdXIgPSAodGhpcy5zdGFydEhvdXIgKyAxKSAlIDI0O1xuICAgIHRoaXMuc2V0U3RhcnRIb3VyTWludXRlKG5ld0hvdXIsIHRoaXMuc3RhcnRNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlY3JlbWVudFN0YXJ0SG91cigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdIb3VyID0gdGhpcy5zdGFydEhvdXIgPT09IDAgPyAyMyA6IHRoaXMuc3RhcnRIb3VyIC0gMTtcbiAgICB0aGlzLnNldFN0YXJ0SG91ck1pbnV0ZShuZXdIb3VyLCB0aGlzLnN0YXJ0TWludXRlKTtcbiAgICBpZiAoIXRoaXMucmVxdWlyZUFwcGx5KSB7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBpbmNyZW1lbnRTdGFydE1pbnV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdNaW51dGUgPSAodGhpcy5zdGFydE1pbnV0ZSArIHRoaXMubWludXRlU3RlcCkgJSA2MDtcbiAgICB0aGlzLnNldFN0YXJ0SG91ck1pbnV0ZSh0aGlzLnN0YXJ0SG91ciwgbmV3TWludXRlKTtcbiAgICBpZiAoIXRoaXMucmVxdWlyZUFwcGx5KSB7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBkZWNyZW1lbnRTdGFydE1pbnV0ZSgpOiB2b2lkIHtcbiAgICBsZXQgbmV3TWludXRlID0gdGhpcy5zdGFydE1pbnV0ZSAtIHRoaXMubWludXRlU3RlcDtcbiAgICBpZiAobmV3TWludXRlIDwgMCkge1xuICAgICAgbmV3TWludXRlID0gNjAgLSB0aGlzLm1pbnV0ZVN0ZXA7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhcnRIb3VyTWludXRlKHRoaXMuc3RhcnRIb3VyLCBuZXdNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGluY3JlbWVudEVuZEhvdXIoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3SG91ciA9ICh0aGlzLmVuZEhvdXIgKyAxKSAlIDI0O1xuICAgIHRoaXMuc2V0RW5kSG91ck1pbnV0ZShuZXdIb3VyLCB0aGlzLmVuZE1pbnV0ZSk7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVBcHBseSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgZGVjcmVtZW50RW5kSG91cigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdIb3VyID0gdGhpcy5lbmRIb3VyID09PSAwID8gMjMgOiB0aGlzLmVuZEhvdXIgLSAxO1xuICAgIHRoaXMuc2V0RW5kSG91ck1pbnV0ZShuZXdIb3VyLCB0aGlzLmVuZE1pbnV0ZSk7XG4gICAgaWYgKCF0aGlzLnJlcXVpcmVBcHBseSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgaW5jcmVtZW50RW5kTWludXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld01pbnV0ZSA9ICh0aGlzLmVuZE1pbnV0ZSArIHRoaXMubWludXRlU3RlcCkgJSA2MDtcbiAgICB0aGlzLnNldEVuZEhvdXJNaW51dGUodGhpcy5lbmRIb3VyLCBuZXdNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlY3JlbWVudEVuZE1pbnV0ZSgpOiB2b2lkIHtcbiAgICBsZXQgbmV3TWludXRlID0gdGhpcy5lbmRNaW51dGUgLSB0aGlzLm1pbnV0ZVN0ZXA7XG4gICAgaWYgKG5ld01pbnV0ZSA8IDApIHtcbiAgICAgIG5ld01pbnV0ZSA9IDYwIC0gdGhpcy5taW51dGVTdGVwO1xuICAgIH1cbiAgICB0aGlzLnNldEVuZEhvdXJNaW51dGUodGhpcy5lbmRIb3VyLCBuZXdNaW51dGUpO1xuICAgIGlmICghdGhpcy5yZXF1aXJlQXBwbHkpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFRpbWUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaCA9IGhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG0gPSBtaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIFxuICAgIGlmICh0aGlzLnRpbWVGb3JtYXQgPT09ICcxMmgnKSB7XG4gICAgICBjb25zdCBpc1BNID0gaG91ciA+PSAxMjtcbiAgICAgIGNvbnN0IGhvdXIxMiA9IGhvdXIgPT09IDAgPyAxMiA6IGhvdXIgPiAxMiA/IGhvdXIgLSAxMiA6IGhvdXI7XG4gICAgICBjb25zdCBwZXJpb2QgPSBpc1BNID8gJ1BNJyA6ICdBTSc7XG4gICAgICByZXR1cm4gYCR7aG91cjEyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttfSAke3BlcmlvZH1gO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYCR7aH06JHttfWA7XG4gIH1cblxuICBwYXJzZVRpbWUodGltZVN0cmluZzogc3RyaW5nKTogeyBob3VyOiBudW1iZXI7IG1pbnV0ZTogbnVtYmVyIH0ge1xuICAgIGlmICghdGltZVN0cmluZykgcmV0dXJuIHsgaG91cjogMCwgbWludXRlOiAwIH07XG4gICAgXG4gICAgY29uc3QgdGltZTEyaFJlZ2V4ID0gL14oXFxkezEsMn0pOihcXGR7Mn0pXFxzPyhBTXxQTSkkL2k7XG4gICAgY29uc3QgdGltZTI0aFJlZ2V4ID0gL14oXFxkezEsMn0pOihcXGR7Mn0pJC87XG4gICAgXG4gICAgbGV0IG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCh0aW1lMTJoUmVnZXgpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcbiAgICAgIGNvbnN0IHBlcmlvZCA9IG1hdGNoWzNdLnRvVXBwZXJDYXNlKCk7XG4gICAgICBcbiAgICAgIGlmIChwZXJpb2QgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIGhvdXIgKz0gMTI7XG4gICAgICBpZiAocGVyaW9kID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSBob3VyID0gMDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgaG91ciwgbWludXRlIH07XG4gICAgfVxuICAgIFxuICAgIG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCh0aW1lMjRoUmVnZXgpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG91cjogcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSxcbiAgICAgICAgbWludXRlOiBwYXJzZUludChtYXRjaFsyXSwgMTApXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyBob3VyOiAwLCBtaW51dGU6IDAgfTtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIC8vIFVzZSBzZXR0ZXJzIHdoaWNoIGRlbGVnYXRlIHRvIHN0b3JlXG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHZhbHVlLnN0YXJ0RGF0ZSB8fCAnJztcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IHZhbHVlLmVuZERhdGUgfHwgJyc7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0VGltZSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRTdGFydFRpbWUodmFsdWUuc3RhcnRUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuZW5kVGltZSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VTdG9yZS5zZXRFbmRUaW1lKHZhbHVlLmVuZFRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJhbmdlU3RvcmUucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci13cmFwcGVyXCIgXG4gIFtjbGFzc109XCIndGhlbWUtJyArIHRoZW1lXCJcbiAgW3N0eWxlLi0taW5wdXQtYm9yZGVyLWhvdmVyXT1cImlucHV0Qm9yZGVyQ29sb3JIb3ZlclwiXG4gIFtzdHlsZS4tLWlucHV0LWJvcmRlci1mb2N1c109XCJpbnB1dEJvcmRlckNvbG9yRm9jdXNcIj5cbiAgPGlucHV0IFxuICAgIHR5cGU9XCJ0ZXh0XCIgXG4gICAgY2xhc3M9XCJkYXRlcGlja2VyLWlucHV0XCIgXG4gICAgW3ZhbHVlXT1cImRhdGVSYW5nZVRleHQoKVwiIFxuICAgIChjbGljayk9XCJ0b2dnbGVEYXRlUGlja2VyKClcIiBcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGxhY2Vob2xkZXJcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwic2hvd0RhdGVQaWNrZXIoKVwiXG4gICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCInZGlhbG9nJ1wiXG4gICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGlucHV0QmFja2dyb3VuZENvbG9yLFxuICAgICAgJ2NvbG9yJzogaW5wdXRUZXh0Q29sb3IsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogaW5wdXRCb3JkZXJDb2xvcixcbiAgICAgICdwYWRkaW5nJzogaW5wdXRQYWRkaW5nXG4gICAgfVwiXG4gICAgcmVhZG9ubHk+XG5cbiAgQGlmIChzaG93RGF0ZVBpY2tlcigpKSB7XG4gIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kcm9wZG93blwiPlxuICAgIEBpZiAoc2hvd1ByZXNldHMpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItcHJlc2V0c1wiPlxuICAgICAgQGZvciAocHJlc2V0IG9mIHByZXNldHM7IHRyYWNrIHByZXNldC5sYWJlbCkge1xuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbGVjdFByZXNldFJhbmdlKHByZXNldClcIj57eyBwcmVzZXQubGFiZWwgfX08L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLWNhbGVuZGFyXCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmICghc2hvd1ByZXNldHMpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyLW9ubHktY2xvc2VcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLWNhbGVuZGFyXCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBDYWxlbmRhcnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyc1wiPlxuICAgICAgPCEtLSBQcmV2aW91cyBtb250aCBjYWxlbmRhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNoYW5nZU1vbnRoKC0xKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMS4zNTQgMS42NDZhLjUuNSAwIDAgMSAwIC43MDhMNS43MDcgOGw1LjY0NyA1LjY0NmEuNS41IDAgMCAxLS43MDguNzA4bC02LTZhLjUuNSAwIDAgMSAwLS43MDhsNi02YS41LjUgMCAwIDEgLjcwOCAwelwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuPnt7IHByZXZpb3VzTW9udGhOYW1lKCkgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4elwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXdlZWtkYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5TmFtZSBvZiB3ZWVrRGF5TmFtZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBkYXlOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5T2JqIG9mIHByZXZpb3VzTW9udGhWaXNpYmxlRGF5cygpOyB0cmFjayBkYXlPYmouZGF0ZSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWRheVwiIFxuICAgICAgICAgICAgICBbY2xhc3MuZW1wdHldPVwiIWRheU9iai5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkYXlPYmouaXNTdGFydCB8fCBkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGF5T2JqLmluUmFuZ2UgJiYgIWRheU9iai5pc1N0YXJ0ICYmICFkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4taG92ZXItcmFuZ2VdPVwiZGF5T2JqLmluSG92ZXJSYW5nZSAmJiAhZGF5T2JqLmlzU3RhcnQgJiYgIWRheU9iai5pc0VuZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkYXlPYmouaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5rZXlib2FyZC1mb2N1c2VkXT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBoYXNLZXlib2FyZEZvY3VzKGRheU9iai5kYXRlLCAwKVwiXG4gICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBkYXlPYmouaXNDdXJyZW50TW9udGggJiYgaGFzS2V5Ym9hcmRGb2N1cyhkYXlPYmouZGF0ZSwgMCkgPyAwIDogLTFcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZvcm1hdERhdGVEaXNwbGF5KGRheU9iai5kYXRlKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZGF5T2JqLmlzU3RhcnQgfHwgZGF5T2JqLmlzRW5kXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImRheU9iai5pc1N0YXJ0ID8gJ2RhdGUnIDogbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF5T2JqLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkRheUhvdmVyKGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbGVhckRheUhvdmVyKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRheU9iai5pc0N1cnJlbnRNb250aCB8fCBkYXlPYmouaXNEaXNhYmxlZFwiPlxuICAgICAgICAgICAgICB7eyBkYXlPYmouZGF5IH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ3VycmVudCBtb250aCBjYWxlbmRhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTExLjM1NCAxLjY0NmEuNS41IDAgMCAxIDAgLjcwOEw1LjcwNyA4bDUuNjQ3IDUuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhsLTYtNmEuNS41IDAgMCAxIDAtLjcwOGw2LTZhLjUuNSAwIDAgMSAuNzA4IDB6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4+e3sgY3VycmVudE1vbnRoTmFtZSgpIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VNb250aCgxKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00LjY0NiAxLjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMSAwIC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDgtLjcwOEwxMC4yOTMgOCA0LjY0NiAyLjM1NGEuNS41IDAgMCAxIDAtLjcwOHpcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci13ZWVrZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRheU5hbWUgb2Ygd2Vla0RheU5hbWVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHNwYW4+e3sgZGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRheU9iaiBvZiBjdXJyZW50TW9udGhWaXNpYmxlRGF5cygpOyB0cmFjayBkYXlPYmouZGF0ZSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWRheVwiIFxuICAgICAgICAgICAgICBbY2xhc3MuZW1wdHldPVwiIWRheU9iai5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkYXlPYmouaXNTdGFydCB8fCBkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGF5T2JqLmluUmFuZ2UgJiYgIWRheU9iai5pc1N0YXJ0ICYmICFkYXlPYmouaXNFbmRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4taG92ZXItcmFuZ2VdPVwiZGF5T2JqLmluSG92ZXJSYW5nZSAmJiAhZGF5T2JqLmlzU3RhcnQgJiYgIWRheU9iai5pc0VuZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkYXlPYmouaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5rZXlib2FyZC1mb2N1c2VkXT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBoYXNLZXlib2FyZEZvY3VzKGRheU9iai5kYXRlLCAxKVwiXG4gICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImVuYWJsZUtleWJvYXJkTmF2aWdhdGlvbiAmJiBkYXlPYmouaXNDdXJyZW50TW9udGggJiYgaGFzS2V5Ym9hcmRGb2N1cyhkYXlPYmouZGF0ZSwgMSkgPyAwIDogLTFcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZvcm1hdERhdGVEaXNwbGF5KGRheU9iai5kYXRlKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiZGF5T2JqLmlzU3RhcnQgfHwgZGF5T2JqLmlzRW5kXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImRheU9iai5pc1N0YXJ0ID8gJ2RhdGUnIDogbnVsbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF5T2JqLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkRheUhvdmVyKGRheU9iailcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbGVhckRheUhvdmVyKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRheU9iai5pc0N1cnJlbnRNb250aCB8fCBkYXlPYmouaXNEaXNhYmxlZFwiPlxuICAgICAgICAgICAgICB7eyBkYXlPYmouZGF5IH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE11bHRpLVJhbmdlIExpc3QgLS0+XG4gICAgQGlmIChtdWx0aVJhbmdlICYmIHNlbGVjdGVkUmFuZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgIDxkaXYgY2xhc3M9XCJtdWx0aS1yYW5nZS1saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXVsdGktcmFuZ2UtaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGktcmFuZ2UtdGl0bGVcIj5TZWxlY3RlZCBSYW5nZXMgKHt7IHNlbGVjdGVkUmFuZ2VzKCkubGVuZ3RoIH19KTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXJhbmdlLWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKHJhbmdlIG9mIHNlbGVjdGVkUmFuZ2VzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGktcmFuZ2UtaXRlbVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGktcmFuZ2UtdGV4dFwiPnt7IHJhbmdlLnJhbmdlVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVtb3ZlLXJhbmdlXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUmFuZ2UoJGluZGV4KVwiXG4gICAgICAgICAgICB0aXRsZT1cIlJlbW92ZSB0aGlzIHJhbmdlXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMi4xNDYgMi44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w1LjE0Ni01LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNS4xNDcgNS4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC01LjE0NiA1LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDIuMTQ2IDIuODU0WlwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBUaW1lIFBpY2tlciAtLT5cbiAgICBAaWYgKGVuYWJsZVRpbWVQaWNrZXIpIHtcbiAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItY29udGFpbmVyXCI+XG4gICAgICA8IS0tIFN0YXJ0IFRpbWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItbGFiZWxcIj5TdGFydCBUaW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlci1pbnB1dHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtYnRuIHRpbWUtYnRuLXVwXCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbmNyZW1lbnRTdGFydEhvdXIoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiSW5jcmVtZW50IGhvdXJcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgNC44NmwtNC43OTYgNS40ODFjLS41NjYuNjQ3LS4xMDYgMS42NTkuNzUzIDEuNjU5aDkuNTkyYTEgMSAwIDAgMCAuNzUzLTEuNjU5bC00Ljc5Ni01LjQ4YTEgMSAwIDAgMC0xLjUwNiAwelwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydEhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgdGl0bGU9XCJTdGFydCBob3VyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1idG4gdGltZS1idG4tZG93blwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVjcmVtZW50U3RhcnRIb3VyKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlY3JlbWVudCBob3VyXCI+XG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuMjQ3IDExLjE0bC00Ljc5Ni01LjQ4MUMxLjg4NSA1LjAxMyAyLjM0NSA0IDMuMjA0IDRoOS41OTJhMSAxIDAgMCAxIC43NTMgMS42NTlsLTQuNzk2IDUuNDhhMSAxIDAgMCAxLTEuNTA2IDB6XCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1zZXBhcmF0b3JcIj46PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1idG4gdGltZS1idG4tdXBcIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImluY3JlbWVudFN0YXJ0TWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkluY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgNC44NmwtNC43OTYgNS40ODFjLS41NjYuNjQ3LS4xMDYgMS42NTkuNzUzIDEuNjU5aDkuNTkyYTEgMSAwIDAgMCAuNzUzLTEuNjU5bC00Ljc5Ni01LjQ4YTEgMSAwIDAgMC0xLjUwNiAwelwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydE1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICB0aXRsZT1cIlN0YXJ0IG1pbnV0ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtYnRuIHRpbWUtYnRuLWRvd25cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlY3JlbWVudFN0YXJ0TWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgMTEuMTRsLTQuNzk2LTUuNDgxQzEuODg1IDUuMDEzIDIuMzQ1IDQgMy4yMDQgNGg5LjU5MmExIDEgMCAwIDEgLjc1MyAxLjY1OWwtNC43OTYgNS40OGExIDEgMCAwIDEtMS41MDYgMHpcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICh0aW1lRm9ybWF0ID09PSAnMTJoJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBlcmlvZFwiPlxuICAgICAgICAgICAge3sgc3RhcnRIb3VyID49IDEyID8gJ1BNJyA6ICdBTScgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yLXZlcnRpY2FsXCI+PC9kaXY+XG5cbiAgICAgIDwhLS0gRW5kIFRpbWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItbGFiZWxcIj5FbmQgVGltZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItaW5wdXRzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWJ0biB0aW1lLWJ0bi11cFwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVtZW50RW5kSG91cigpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJJbmNyZW1lbnQgaG91clwiPlxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk03LjI0NyA0Ljg2bC00Ljc5NiA1LjQ4MWMtLjU2Ni42NDctLjEwNiAxLjY1OS43NTMgMS42NTloOS41OTJhMSAxIDAgMCAwIC43NTMtMS42NTlsLTQuNzk2LTUuNDhhMSAxIDAgMCAwLTEuNTA2IDB6XCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImVuZEhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgdGl0bGU9XCJFbmQgaG91clwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtYnRuIHRpbWUtYnRuLWRvd25cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlY3JlbWVudEVuZEhvdXIoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiRGVjcmVtZW50IGhvdXJcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgMTEuMTRsLTQuNzk2LTUuNDgxQzEuODg1IDUuMDEzIDIuMzQ1IDQgMy4yMDQgNGg5LjU5MmExIDEgMCAwIDEgLjc1MyAxLjY1OWwtNC43OTYgNS40OGExIDEgMCAwIDEtMS41MDYgMHpcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWJ0biB0aW1lLWJ0bi11cFwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVtZW50RW5kTWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkluY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgNC44NmwtNC43OTYgNS40ODFjLS41NjYuNjQ3LS4xMDYgMS42NTkuNzUzIDEuNjU5aDkuNTkyYTEgMSAwIDAgMCAuNzUzLTEuNjU5bC00Ljc5Ni01LjQ4YTEgMSAwIDAgMC0xLjUwNiAwelwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJlbmRNaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgdGl0bGU9XCJFbmQgbWludXRlXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIGNsYXNzPVwidGltZS1idG4gdGltZS1idG4tZG93blwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVjcmVtZW50RW5kTWludXRlKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkRlY3JlbWVudCBtaW51dGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yNDcgMTEuMTRsLTQuNzk2LTUuNDgxQzEuODg1IDUuMDEzIDIuMzQ1IDQgMy4yMDQgNGg5LjU5MmExIDEgMCAwIDEgLjc1MyAxLjY1OWwtNC43OTYgNS40OGExIDEgMCAwIDEtMS41MDYgMHpcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICh0aW1lRm9ybWF0ID09PSAnMTJoJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBlcmlvZFwiPlxuICAgICAgICAgICAge3sgZW5kSG91ciA+PSAxMiA/ICdQTScgOiAnQU0nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gRm9vdGVyIHdpdGggYnV0dG9ucyAtLT5cbiAgICBAaWYgKHNob3dDbGVhckJ1dHRvbiB8fCBtdWx0aVJhbmdlIHx8IHJlcXVpcmVBcHBseSkge1xuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1mb290ZXJcIj5cbiAgICAgIEBpZiAocmVxdWlyZUFwcGx5ICYmICFtdWx0aVJhbmdlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHBseS1mb290ZXItYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1jYW5jZWxcIiBcbiAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxTZWxlY3Rpb24oKVwiIFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNQZW5kaW5nQ2hhbmdlcygpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiQ2FuY2VsIHNlbGVjdGlvblwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWFwcGx5XCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlTZWxlY3Rpb24oKVwiIFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNQZW5kaW5nQ2hhbmdlcygpIHx8ICFwZW5kaW5nU3RhcnREYXRlIHx8ICFwZW5kaW5nRW5kRGF0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cIkFwcGx5IHNlbGVjdGlvblwiPlxuICAgICAgICAgICAgQXBwbHlcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKG11bHRpUmFuZ2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXJhbmdlLWZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xlYXJcIiAoY2xpY2spPVwiY2xlYXIoKVwiIHRpdGxlPVwiQ2xlYXIgYWxsIHJhbmdlc1wiPlxuICAgICAgICAgICAgQ2xlYXIgQWxsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZG9uZVwiIChjbGljayk9XCJjbG9zZURhdGVQaWNrZXIoKVwiIHRpdGxlPVwiRG9uZSBzZWxlY3RpbmdcIj5cbiAgICAgICAgICAgIERvbmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKCFtdWx0aVJhbmdlICYmICFyZXF1aXJlQXBwbHkgJiYgc2hvd0NsZWFyQnV0dG9uKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsZWFyXCIgKGNsaWNrKT1cImNsZWFyKClcIiB0aXRsZT1cIkNsZWFyIHNlbGVjdGlvblwiPlxuICAgICAgICAgIENsZWFyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|