@dereekb/dbx-form 9.24.1 → 9.24.3
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/calendar/lib/calendar.schedule.selection.dialog.button.component.d.ts +6 -1
- package/calendar/lib/calendar.schedule.selection.dialog.component.d.ts +17 -2
- package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +8 -0
- package/esm2020/calendar/lib/calendar.schedule.selection.dialog.button.component.mjs +5 -3
- package/esm2020/calendar/lib/calendar.schedule.selection.dialog.component.mjs +20 -7
- package/esm2020/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +7 -4
- package/esm2020/calendar/lib/field/schedule/calendar.schedule.field.mjs +3 -2
- package/esm2020/lib/formly/field/selection/pickable/pickable.chip.field.component.mjs +1 -1
- package/esm2020/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +2 -2
- package/esm2020/lib/formly/field/selection/searchable/searchable.chip.field.component.mjs +1 -1
- package/esm2020/lib/formly/field/selection/searchable/searchable.text.field.component.mjs +1 -1
- package/esm2020/lib/formly/field/selection/sourceselect/sourceselect.field.component.mjs +1 -1
- package/esm2020/lib/formly/field/value/date/fixeddaterange.field.component.mjs +25 -12
- package/esm2020/lib/formly/field/wrapper/working.wrapper.component.mjs +1 -1
- package/fesm2015/dereekb-dbx-form-calendar.mjs +32 -20
- package/fesm2015/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2015/dereekb-dbx-form.mjs +32 -17
- package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form-calendar.mjs +32 -13
- package/fesm2020/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form.mjs +30 -17
- package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
- package/lib/extension/calendar/_calendar.scss +14 -0
- package/lib/formly/field/value/date/fixeddaterange.field.component.d.ts +9 -3
- package/mapbox/package.json +4 -4
- package/package.json +4 -4
|
@@ -64,7 +64,8 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
64
64
|
this._dateRangeInput = new BehaviorSubject(undefined);
|
|
65
65
|
this._timezone = new BehaviorSubject(undefined);
|
|
66
66
|
this._presets = new BehaviorSubject(of([]));
|
|
67
|
-
this.
|
|
67
|
+
this._selectionEvent = new Subject();
|
|
68
|
+
this.selectedDateRange$ = this._selectionEvent.pipe(map((x) => x.range));
|
|
68
69
|
this._formControlObs = new BehaviorSubject(undefined);
|
|
69
70
|
this.formControl$ = this._formControlObs.pipe(filterMaybe());
|
|
70
71
|
this.config$ = this._config.pipe(filterMaybe(), switchMap((x) => x), distinctUntilChanged(), shareReplay(1));
|
|
@@ -79,7 +80,6 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
79
80
|
return x.pipe(map(dbxFixedDateRangeInputValueFactory(this.valueMode, timezoneInstance)));
|
|
80
81
|
}), throttleTime(20, undefined, { leading: false, trailing: true }), // throttle incoming values and timezone changes
|
|
81
82
|
distinctUntilChanged(isSameDateDayRange), shareReplay(1));
|
|
82
|
-
this.startDate$ = this.valueInSystemTimezone$.pipe(map((x) => x?.start ?? null), distinctUntilChanged(), filterMaybe(), shareReplay(1));
|
|
83
83
|
this.fullBoundary$ = this.dateRangeSelectionForMode('single').pipe(shareReplay(1));
|
|
84
84
|
this.latestBoundary$ = this.selectionMode$.pipe(switchMap((mode) => {
|
|
85
85
|
if (mode === 'arbitrary_quick') {
|
|
@@ -90,6 +90,19 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
90
90
|
return this.fullBoundary$;
|
|
91
91
|
}
|
|
92
92
|
}));
|
|
93
|
+
/**
|
|
94
|
+
* Focuses on the date any time the selection event from the picker occured, otherwise use the system value
|
|
95
|
+
*/
|
|
96
|
+
this.calendarFocusDate$ = this._selectionEvent.pipe(startWith(null)).pipe(switchMap((selectionEvent) => {
|
|
97
|
+
if (selectionEvent && selectionEvent.type === 'calendar' && selectionEvent.range?.start) {
|
|
98
|
+
return of(selectionEvent.range.start);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return this.fullBoundary$.pipe(first(), map((fullBoundary) => {
|
|
102
|
+
return fullBoundary?.start ?? selectionEvent?.range?.start;
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
}), filterMaybe(), shareReplay(1));
|
|
93
106
|
this.dateRangeSelection$ = this.selectionMode$.pipe(switchMap((mode) => this.dateRangeSelectionForMode(mode)));
|
|
94
107
|
this.calendarSelection$ = this.valueInSystemTimezone$.pipe(map((x) => (x ? new DatePickerDateRange(x.start, x.end) : null)), shareReplay(1));
|
|
95
108
|
this.endDisabled$ = this.selectionMode$.pipe(map((x) => x === 'single'), distinctUntilChanged(), shareReplay(1));
|
|
@@ -126,14 +139,14 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
126
139
|
const minMaxClamp = (dateRange) => limitInstance.clampDateRange(dateRange);
|
|
127
140
|
if (mode === 'single') {
|
|
128
141
|
// only use the start date.
|
|
129
|
-
return this.
|
|
142
|
+
return this.selectedDateRange$.pipe(distinctUntilChanged(isSameDateDayRange), map((inputDateRange) => {
|
|
130
143
|
const date = inputDateRange?.start;
|
|
131
144
|
return date ? minMaxClamp(dateRange({ ...dateRangeInput, date })) : null;
|
|
132
145
|
}));
|
|
133
146
|
}
|
|
134
147
|
else {
|
|
135
148
|
// take the first date, then wait unless the date is outside of the range.
|
|
136
|
-
return this.
|
|
149
|
+
return this.selectedDateRange$.pipe(scan((acc, nextDateRange) => {
|
|
137
150
|
let result;
|
|
138
151
|
if (nextDateRange && nextDateRange.start != null) {
|
|
139
152
|
const { start: startOrNextDate, end } = nextDateRange;
|
|
@@ -277,7 +290,7 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
277
290
|
}), distinctUntilChanged(isSameDateRange))
|
|
278
291
|
.subscribe((x) => {
|
|
279
292
|
if (this._currentSelectionMode === 'single') {
|
|
280
|
-
this.setDateRange(x?.start ? { start: x.start } : null);
|
|
293
|
+
this.setDateRange(x?.start ? { start: x.start } : null, 'input');
|
|
281
294
|
}
|
|
282
295
|
else {
|
|
283
296
|
let rangeToSet = x;
|
|
@@ -288,7 +301,7 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
288
301
|
rangeToSet = { start: x.start, end: boundary.end };
|
|
289
302
|
}
|
|
290
303
|
}
|
|
291
|
-
this.setDateRange(rangeToSet);
|
|
304
|
+
this.setDateRange(rangeToSet, 'input');
|
|
292
305
|
}
|
|
293
306
|
});
|
|
294
307
|
}
|
|
@@ -337,7 +350,7 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
337
350
|
else {
|
|
338
351
|
this._presets.next(this.dbxDateTimeFieldConfigService.configurations$);
|
|
339
352
|
}
|
|
340
|
-
this._activeDateSub.subscription = this.
|
|
353
|
+
this._activeDateSub.subscription = this.calendarFocusDate$.subscribe((x) => {
|
|
341
354
|
this.calendar.activeDate = x;
|
|
342
355
|
});
|
|
343
356
|
}
|
|
@@ -356,14 +369,14 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
356
369
|
this._dateRangeInput.complete();
|
|
357
370
|
this._timezone.complete();
|
|
358
371
|
this._presets.complete();
|
|
359
|
-
this.
|
|
372
|
+
this._selectionEvent.complete();
|
|
360
373
|
this._formControlObs.complete();
|
|
361
374
|
}
|
|
362
375
|
selectedChange(date) {
|
|
363
|
-
this.setDateRange(date ? { start: date } : null);
|
|
376
|
+
this.setDateRange(date ? { start: date } : null, 'calendar');
|
|
364
377
|
}
|
|
365
|
-
setDateRange(
|
|
366
|
-
this.
|
|
378
|
+
setDateRange(range, type) {
|
|
379
|
+
this._selectionEvent.next({ type, range });
|
|
367
380
|
}
|
|
368
381
|
_createDateRange(date) {
|
|
369
382
|
return date ? dateRange({ ...this._currentDateRangeInput, date }) : undefined;
|
|
@@ -448,4 +461,4 @@ DbxFixedDateRangeFieldSelectionStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ mi
|
|
|
448
461
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFixedDateRangeFieldSelectionStrategy, decorators: [{
|
|
449
462
|
type: Injectable
|
|
450
463
|
}], ctorParameters: function () { return [{ type: i7.DateAdapter }, { type: DbxFixedDateRangeFieldComponent }]; } });
|
|
451
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9maXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEYsbUJBQW1CLEVBQXVCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsb0JBQW9CLEVBQTRELDhCQUE4QixFQUFFLHFCQUFxQixFQUE2QixrQkFBa0IsRUFBd0QsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFjLGVBQWUsRUFBRSxhQUFhLEVBQWlELHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RiLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFjLElBQUksRUFBUSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFPLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0s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RSxNQUFNLElBQUksR0FBZSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVU7UUFDNUIsTUFBTSxHQUFHLEdBQWUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFjLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksR0FBZSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdELENBQUM7O3FJQXREVSx1Q0FBdUM7eUlBQXZDLHVDQUF1Qzs0RkFBdkMsdUNBQXVDO2tCQURuRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF5YmUsIERlY2lzaW9uRnVuY3Rpb24sIE1pbGxpc2Vjb25kcywgVGltZXpvbmVTdHJpbmcsIERhdGVNb250aCwgRGF5T2ZNb250aCwgWWVhck51bWJlciwgaXNNb250aERheVNsYXNoRGF0ZSwgbWFwSWRlbnRpdHlGdW5jdGlvbiwgTVNfSU5fTUlOVVRFIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBndWVzc0N1cnJlbnRUaW1lem9uZSwgaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcywgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsIGRhdGVUaW1lTWludXRlRGVjaXNpb25GdW5jdGlvbiwgZGF0ZVRpbWV6b25lVXRjTm9ybWFsLCBEYXRlUmFuZ2VJbnB1dCwgRGF0ZVJhbmdlLCBpc1NhbWVEYXRlRGF5UmFuZ2UsIERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZSwgRGF0ZVRpbWVNaW51dGVDb25maWcsIGRhdGVSYW5nZSwgaXNEYXRlSW5EYXRlUmFuZ2UsIGNsYW1wRGF0ZVJhbmdlVG9EYXRlUmFuZ2UsIGlzU2FtZURhdGUsIGlzU2FtZURhdGVSYW5nZSwgaXNTYW1lRGF0ZURheSwgY2xhbXBEYXRlUmFuZ2VGdW5jdGlvbiwgTGltaXREYXRlVGltZUluc3RhbmNlLCBsaW1pdERhdGVUaW1lSW5zdGFuY2UgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgc2hhcmVSZXBsYXksIG1hcCwgc3RhcnRXaXRoLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZGVib3VuY2VUaW1lLCB0aHJvdHRsZVRpbWUsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YsIGNvbWJpbmVMYXRlc3RXaXRoLCBmaWx0ZXIsIGNvbWJpbmVMYXRlc3QsIGV4aGF1c3RNYXAsIHNjYW4sIHNraXAsIGZpcnN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5LCBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksIERhdGVSYW5nZSBhcyBEYXRlUGlja2VyRGF0ZVJhbmdlLCBNYXRDYWxlbmRhckNlbGxDbGFzc0Z1bmN0aW9uLCBNYXRDYWxlbmRhckNlbGxDc3NDbGFzc2VzLCBNYXRDYWxlbmRhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgYXNPYnNlcnZhYmxlRnJvbUdldHRlciwgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlR2V0dGVyLCBza2lwRmlyc3RNYXliZSwgU3Vic2NyaXB0aW9uT2JqZWN0LCBzd2l0Y2hNYXBNYXliZURlZmF1bHQsIHRhcExvZyB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIGRieERhdGVSYW5nZUlzU2FtZURhdGVSYW5nZUZpZWxkVmFsdWUsIGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeSwgZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkgfSBmcm9tICcuL2RhdGUudmFsdWUnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9kYXRldGltZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRldGltZS5maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0ID0gT21pdDxEYXRlUmFuZ2VJbnB1dCwgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VQaWNrZXJDb25maWd1cmF0aW9uID0gT21pdDxEYXRlVGltZU1pbnV0ZUNvbmZpZywgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZScgfCAnYXJiaXRyYXJ5JyB8ICdhcmJpdHJhcnlfcXVpY2snO1xuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VQaWNraW5nID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICAvKipcbiAgICogRGF0ZSByYW5nZSBpbnB1dCB0byBidWlsZCB0aGUgZGF0ZSByYW5nZS5cbiAgICovXG4gIGRhdGVSYW5nZUlucHV0OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0PjtcblxuICAvKipcbiAgICogU2VsZWN0aW9uIG1vZGUgdG8gdXNlIHdoZW4gcGlja2luZyBkYXRlcyBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBzZWxlY3Rpb25Nb2RlPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPj47XG5cbiAgLyoqXG4gICAqIFZhbHVlIG1vZGUgZm9yIHRoZSBkYXRlcyBpbiB0aGUgb3V0cHV0IERhdGVSYW5nZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gREFURVxuICAgKi9cbiAgdmFsdWVNb2RlPzogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHBhc3MgdGhlIGRhdGUgdmFsdWUgYXMgYSBVVEMgZGF0ZSwgb3IgYSBkYXRlIGluIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgZnVsbERheUluVVRDPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHBpY2tlciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwaWNrZXJDb25maWc/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBpbnB1dCB0aW1lem9uZSB0byBkZWZhdWx0IHRvLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGZ1bGxEYXlJblVUQyBpcyB0cnVlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxUaW1lem9uZVN0cmluZz4+PjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgdGltZXpvbmUuIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHNob3dUaW1lem9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwcmVzZXRzIHRvIHNob3cgaW4gdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcHJlc2V0cz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgcmFuZ2UgaW5wdXQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBzaG93UmFuZ2VJbnB1dD86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGRieEZpeGVkRGF0ZVJhbmdlSW5wdXRWYWx1ZUZhY3RvcnkobW9kZTogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2U6IE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPik6IChpbnB1dDogTWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPikgPT4gTWF5YmU8RGF0ZVJhbmdlPiB7XG4gIGNvbnN0IGRhdGVJbnB1dFRyYW5zZm9ybWVyID0gZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KG1vZGUsIHRpbWV6b25lSW5zdGFuY2UpO1xuXG4gIHJldHVybiAoeSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGVSYW5nZT47XG5cbiAgICBpZiAoeSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBzdGFydDogZGF0ZUlucHV0VHJhbnNmb3JtZXIoeS5zdGFydCkgYXMgRGF0ZSxcbiAgICAgICAgZW5kOiBkYXRlSW5wdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGRhdGU6IE1heWJlPERhdGVSYW5nZT4pID0+IE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4ge1xuICBjb25zdCBkYXRlT3V0cHV0VHJhbnNmb3JtZXIgPSBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlLCB0aW1lem9uZUluc3RhbmNlKTtcblxuICByZXR1cm4gKHkpID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKHkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgc3RhcnQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LnN0YXJ0KSBhcyBEYXRlLFxuICAgICAgICBlbmQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5jb25zdCBUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FOiBNaWxsaXNlY29uZHMgPSAxMDtcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZERhdGVSYW5nZVNjYW4ge1xuICAvKipcbiAgICogVGhlIGxhdGVzdCBkYXRlIHBhc3NlZCwgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIGxhc3REYXRlUmFuZ2U/OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+O1xuICAvKipcbiAgICogVGhlIGdlbmVyYXRlZCBib3VuZGFyeSByYW5nZS5cbiAgICovXG4gIGJvdW5kYXJ5PzogRGF0ZVJhbmdlO1xuICAvKipcbiAgICogTmV3IERhdGUgUmFuZ2VcbiAgICovXG4gIHJhbmdlPzogRGF0ZVJhbmdlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdmaXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZUNsYXNzOiBmb3J3YXJkUmVmKCgpID0+IERieEZpeGVkRGF0ZVJhbmdlRmllbGRTZWxlY3Rpb25TdHJhdGVneSlcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8RGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9pbnB1dFJhbmdlRm9ybVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfaW5wdXRSYW5nZUZvcm1WYWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfY3VycmVudFNlbGVjdGlvbk1vZGVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2xhdGVzdEJvdW5kYXJ5U3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9kaXNhYmxlRW5kU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9hY3RpdmVEYXRlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnREYXRlUmFuZ2VJbnB1dDogTWF5YmU8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD4gPSB7fTtcbiAgcHJpdmF0ZSBfY3VycmVudFNlbGVjdGlvbk1vZGU6IERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xuICBwcml2YXRlIF9sYXRlc3RCb3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfY29uZmlnID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0Pj4+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfdGltZXpvbmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3ByZXNldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8RGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10+PihvZihbXSkpO1xuXG4gIHByaXZhdGUgX3NlbGVjdGVkRGF0ZVJhbmdlID0gbmV3IFN1YmplY3Q8TWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pj4oKTtcblxuICBwcml2YXRlIF9mb3JtQ29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPE1heWJlPERhdGVSYW5nZT4+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wkID0gdGhpcy5fZm9ybUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBAVmlld0NoaWxkKE1hdENhbGVuZGFyKVxuICBjYWxlbmRhciE6IE1hdENhbGVuZGFyPERhdGU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHN0YXJ0RGF0ZUlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGVuZERhdGVJbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIGdldCBjdXJyZW50RGF0ZVJhbmdlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dDtcbiAgfVxuXG4gIGdldCBjdXJyZW50U2VsZWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGU7XG4gIH1cblxuICBnZXQgbGF0ZXN0Qm91bmRhcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhdGVzdEJvdW5kYXJ5O1xuICB9XG5cbiAgcmVhZG9ubHkgY29uZmlnJDogT2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+ID0gdGhpcy5fY29uZmlnLnBpcGUoXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaW1pdERhdGVUaW1lSW5zdGFuY2UkID0gdGhpcy5jb25maWckLnBpcGUobWFwKGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25Nb2RlJDogT2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+ID0gdGhpcy5fc2VsZWN0aW9uTW9kZS5waXBlKFxuICAgIHN3aXRjaE1hcE1heWJlRGVmYXVsdDxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+KCdzaW5nbGUnKSxcbiAgICBtYXAoKHgpID0+IHggPz8gJ3NpbmdsZScpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2VJbnB1dCQgPSB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLl90aW1lem9uZS5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5waXBlKFxuICAgIG1hcCgoZGVmYXVsdFRpbWV6b25lKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFRpbWV6b25lID8/IGd1ZXNzQ3VycmVudFRpbWV6b25lKCk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lSW5zdGFuY2UkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPj4gPSB0aGlzLnRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgodGltZXpvbmUpID0+ICh0aW1lem9uZSA/IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh7IHRpbWV6b25lIH0pIDogdW5kZWZpbmVkKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB2YWx1ZUluU3lzdGVtVGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5mb3JtQ29udHJvbCQucGlwZShcbiAgICBtYXAoKGNvbnRyb2wpID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoPE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4+KGNvbnRyb2wudmFsdWUpLCBzaGFyZVJlcGxheSgxKSkpLFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQpLFxuICAgIHN3aXRjaE1hcCgoW3gsIHRpbWV6b25lSW5zdGFuY2VdKSA9PiB7XG4gICAgICByZXR1cm4geC5waXBlKG1hcChkYnhGaXhlZERhdGVSYW5nZUlucHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpO1xuICAgIH0pLFxuICAgIHRocm90dGxlVGltZSgyMCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSwgLy8gdGhyb3R0bGUgaW5jb21pbmcgdmFsdWVzIGFuZCB0aW1lem9uZSBjaGFuZ2VzXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8RGF0ZVJhbmdlPj4oaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT4gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0ID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUobW9kZTogRGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlKSB7XG4gICAgY29uc3QgcmVzdWx0OiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlUmFuZ2VJbnB1dCQsIHRoaXMubGltaXREYXRlVGltZUluc3RhbmNlJF0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKFtkYXRlUmFuZ2VJbnB1dCwgbGltaXRJbnN0YW5jZV0pID0+IHtcbiAgICAgICAgY29uc3QgbWluTWF4Q2xhbXAgPSAoZGF0ZVJhbmdlOiBEYXRlUmFuZ2UpID0+IGxpbWl0SW5zdGFuY2UuY2xhbXBEYXRlUmFuZ2UoZGF0ZVJhbmdlKTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAvLyBvbmx5IHVzZSB0aGUgc3RhcnQgZGF0ZS5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXRlUmFuZ2UucGlwZShcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgICAgICAgICBtYXAoKGlucHV0RGF0ZVJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBpbnB1dERhdGVSYW5nZT8uc3RhcnQ7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRlID8gKG1pbk1heENsYW1wKGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpKSBhcyBEYXRlUmFuZ2UpIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0YWtlIHRoZSBmaXJzdCBkYXRlLCB0aGVuIHdhaXQgdW5sZXNzIHRoZSBkYXRlIGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZERhdGVSYW5nZS5waXBlKFxuICAgICAgICAgICAgc2NhbigoYWNjOiBGaXhlZERhdGVSYW5nZVNjYW4sIG5leHREYXRlUmFuZ2U6IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4pID0+IHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdDogRml4ZWREYXRlUmFuZ2VTY2FuO1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0RGF0ZVJhbmdlICYmIG5leHREYXRlUmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQ6IHN0YXJ0T3JOZXh0RGF0ZSwgZW5kIH0gPSBuZXh0RGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvdGVudGlhbEJvdW5kYXJ5ID0gZGF0ZVJhbmdlKHsgLi4uZGF0ZVJhbmdlSW5wdXQsIGRhdGU6IHN0YXJ0T3JOZXh0RGF0ZSB9IGFzIERhdGVSYW5nZUlucHV0KTtcblxuICAgICAgICAgICAgICAgIC8vIG9ubHkgY29tZXMgdGhyb3VnaCB3aGVuIHBhc3NlZCBieSB0aGUgdGV4dCBpbnB1dHNcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRPck5leHREYXRlICYmIGVuZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjbGFtcERhdGVSYW5nZVRvRGF0ZVJhbmdlKG5leHREYXRlUmFuZ2UsIHBvdGVudGlhbEJvdW5kYXJ5KSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3REYXRlUmFuZ2U6IG5leHREYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiByYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxldCByYW5nZTogTWF5YmU8RGF0ZVJhbmdlPiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGxldCBib3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYWNjLmJvdW5kYXJ5ICYmIGlzRGF0ZUluRGF0ZVJhbmdlKHN0YXJ0T3JOZXh0RGF0ZSwgYWNjLmJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBpbiB0aGUgZGF0ZSByYW5nZSwgdXNlcyB0aGUgcGljayBhcyB0aGUgbGFzdCBkYXRlLlxuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydDogYWNjLmJvdW5kYXJ5LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgIGVuZDogc3RhcnRPck5leHREYXRlXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZ5IGJvdW5kYXJ5IHRvIG1hdGNoIHJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZURhdGVSYW5nZShhY2MucmFuZ2UsIHJhbmdlKSAmJiBpc1NhbWVEYXRlRGF5KHJhbmdlLmVuZCwgc3RhcnRPck5leHREYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgY2xpY2tlZCBvbiB0aGUgZW5kIHJhbmdlLCB0aGVuIGV4cGFuZCB0aGUgYm91bmRhcnkgYWdhaW4gdG8gdGhlIGZ1bGwgcmFuZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlOiByYW5nZS5zdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gYWNjLmJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gcG90ZW50aWFsQm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiBuZXh0RGF0ZVJhbmdlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiByZXN1bHQubGFzdERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiByZXN1bHQuYm91bmRhcnkgPyAobWluTWF4Q2xhbXAocmVzdWx0LmJvdW5kYXJ5KSBhcyBEYXRlUmFuZ2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJlc3VsdC5yYW5nZSA/IChtaW5NYXhDbGFtcChyZXN1bHQucmFuZ2UpIGFzIERhdGVSYW5nZSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4gIXgubGFzdERhdGVSYW5nZSB8fCB4LnJhbmdlICE9IG51bGwpLCAvLyBwYXNzIHRocm91Z2ggbnVsbC9kYXRlIGNsZWFyaW5ncyBvciByYW5nZXNcbiAgICAgICAgICAgIG1hcCgoeCkgPT4geC5yYW5nZSA/PyBudWxsKSAvLyByZXR1cm4gdGhlIHJhbmdlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRvbmx5IGZ1bGxCb3VuZGFyeSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUoJ3NpbmdsZScpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICByZWFkb25seSBsYXRlc3RCb3VuZGFyeSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChtb2RlKSA9PiB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2FyYml0cmFyeV9xdWljaycpIHtcbiAgICAgICAgLy8gaW4gYXJiaXRyYXJ5X3F1aWNrIG1vZGUsIHRoZSBsYXRlc3QgdmFsdWUgaXMgdGhlIGJvdW5kYXJ5LCBzaW5jZSB3ZSBhbHdheXMgc2V0IHRoZSB2YWx1ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxCb3VuZGFyeSQ7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2VTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5waXBlKHN3aXRjaE1hcCgobW9kZSkgPT4gdGhpcy5kYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKG1vZGUpKSk7XG5cbiAgcmVhZG9ubHkgY2FsZW5kYXJTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPERhdGVQaWNrZXJEYXRlUmFuZ2U8RGF0ZT4gfCBudWxsPiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHggPyBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEYXRlPih4LnN0YXJ0LCB4LmVuZCkgOiBudWxsKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlbmREaXNhYmxlZCQgPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4ID09PSAnc2luZ2xlJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0UmFuZ2VGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpXG4gIH0pO1xuXG4gIGdldCBmaXhlZERhdGVSYW5nZUZpZWxkKCk6IERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zZWxlY3Rpb25Nb2RlO1xuICB9XG5cbiAgZ2V0IHZhbHVlTW9kZSgpOiBEYnhEYXRlVGltZVZhbHVlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudmFsdWVNb2RlID8/IERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEU7XG4gIH1cblxuICBnZXQgZGVzY3JpcHRpb24oKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgdGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudGltZXpvbmU7XG4gIH1cblxuICBnZXQgc2hvd1RpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNob3dUaW1lem9uZSA/PyB0cnVlO1xuICB9XG5cbiAgZ2V0IHByZXNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMucHJlc2V0cztcbiAgfVxuXG4gIGdldCBzaG93UmFuZ2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93UmFuZ2VJbnB1dCA/PyB0cnVlO1xuICB9XG5cbiAgcmVhZG9ubHkgbWluTWF4UmFuZ2UkID0gdGhpcy5saW1pdERhdGVUaW1lSW5zdGFuY2UkLnBpcGUoXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGltZXIoTVNfSU5fTUlOVVRFKSksIC8vIHJlZnJlc2ggZXZlcnkgbWludXRlXG4gICAgbWFwKChbeF0pID0+IHguZGF0ZVJhbmdlKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW4kID0gdGhpcy5taW5NYXhSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0ID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXgkID0gdGhpcy5taW5NYXhSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmVuZCA/PyBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyRmlsdGVyJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPj4gPSB0aGlzLmNvbmZpZyQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHgpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gZGF0ZVRpbWVNaW51dGVEZWNpc2lvbkZ1bmN0aW9uKHgpO1xuICAgICAgICByZXR1cm4gKHg6IERhdGUgfCBudWxsKSA9PiAoeCAhPSBudWxsID8gZmlsdGVyKHgpIDogdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRQaWNrZXJGaWx0ZXI6IERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+ID0gKCkgPT4gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRieERhdGVUaW1lRmllbGRDb25maWdTZXJ2aWNlOiBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLm5leHQodGhpcy5mb3JtQ29udHJvbCk7XG5cbiAgICBjb25zdCBkYXRlUmFuZ2VTZWxlY3Rpb24gPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbiQucGlwZShzaGFyZVJlcGxheSgxKSk7XG5cbiAgICBjb25zdCBzZXRJbnB1dEZvcm1WYWx1ZSA9ICh2YWx1ZTogTWF5YmU8RGF0ZVJhbmdlPikgPT4ge1xuICAgICAgaWYgKCFpc1NhbWVEYXRlRGF5UmFuZ2UodmFsdWUsIHRoaXMuaW5wdXRSYW5nZUZvcm0udmFsdWUgYXMgUGFydGlhbDxEYXRlUmFuZ2U+KSkge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLnNldFZhbHVlKHtcbiAgICAgICAgICBzdGFydDogdmFsdWU/LnN0YXJ0ID8/IG51bGwsXG4gICAgICAgICAgZW5kOiB2YWx1ZT8uZW5kID8/IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX3N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkLnBpcGUobWFwKCh0aW1lem9uZUluc3RhbmNlKSA9PiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKSksXG4gICAgICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtjdXJyZW50VmFsdWUsIHZhbHVlRmFjdG9yeV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZGF0ZVJhbmdlU2VsZWN0aW9uLnBpcGUoXG4gICAgICAgICAgICBza2lwRmlyc3RNYXliZSgpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8RGF0ZVJhbmdlPj4oaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICAgICAgICAgIG1hcCgoeCkgPT4gW3gsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSBhcyBbdHlwZW9mIHgsIHR5cGVvZiBjdXJyZW50VmFsdWUsIHR5cGVvZiB2YWx1ZUZhY3RvcnldKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcmF3VmFsdWUsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1ZhbHVlID8gdmFsdWVGYWN0b3J5KHJhd1ZhbHVlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGlzU2FtZVJhbmdlID0gZGJ4RGF0ZVJhbmdlSXNTYW1lRGF0ZVJhbmdlRmllbGRWYWx1ZSh2YWx1ZSwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzU2FtZVJhbmdlKSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhd1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGlucHV0IHRleHQgYWdhaW5cbiAgICAgICAgICBzZXRJbnB1dEZvcm1WYWx1ZShyYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5zZWxlY3Rpb25Nb2RlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9IHgpKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRhdGVSYW5nZUlucHV0JC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQgPSB4KSk7XG5cbiAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQuc3Vic2NyaWJlKCh4OiBNYXliZTxEYXRlUmFuZ2U+KSA9PiB7XG4gICAgICBzZXRJbnB1dEZvcm1WYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNob3dSYW5nZUlucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUoMTAwKSwgLy8gdGhyb3R0bGUgdG8gcHJldmVudCB0aGUgdmFsdWUgZnJvbSBjaGFuZ2luZyB0b28gZmFzdFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFJhbmdlRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRTdHJpbmcgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWQgPSBpc01vbnRoRGF5U2xhc2hEYXRlKHN0YXJ0U3RyaW5nKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWxpZCAmJiB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFN0cmluZyA9IHRoaXMuZW5kRGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkID0gaXNNb250aERheVNsYXNoRGF0ZShlbmRTdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZDsgLy8gbXVzdCBiZSBhIHZhbGlkIHRleHQgaW5wdXRcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4geCBhcyBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlUmFuZ2UpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeDogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHg/LnN0YXJ0ID8geyBzdGFydDogeC5zdGFydCB9IDogbnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByYW5nZVRvU2V0OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+ID0geDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJyAmJiB0aGlzLl9sYXRlc3RCb3VuZGFyeSAmJiB4Py5zdGFydCAmJiB4Py5lbmQpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc0RhdGVJbkRhdGVSYW5nZSh4LnN0YXJ0LCB0aGlzLl9sYXRlc3RCb3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZW5kIGRhdGUgaXQgb3V0c2lkZSBvZiB0aGUgY3VycmVudCByYW5nZSAoaS5lLiBhIHJhbmdlIHdhcyB0eXBlZCBpbiBvbmx5IHRvIHRoZSBzdGFydCBkYXRlKSB0aGVuIHNldCB0aGUgZW5kIHRvIHRoZSBib3VuZGFyeSBlbmRcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGFyeSA9IGRhdGVSYW5nZSh7IC4uLnRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dCwgZGF0ZTogeC5zdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICByYW5nZVRvU2V0ID0geyBzdGFydDogeC5zdGFydCwgZW5kOiBib3VuZGFyeS5lbmQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGVSYW5nZShyYW5nZVRvU2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2xhdGVzdEJvdW5kYXJ5U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMubGF0ZXN0Qm91bmRhcnkkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2xhdGVzdEJvdW5kYXJ5ID0geCkpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0Lm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLmZpeGVkRGF0ZVJhbmdlRmllbGQuZGF0ZVJhbmdlSW5wdXQpKTtcblxuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5lbmREaXNhYmxlZCQuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5pbnB1dFJhbmdlRm9ybS5nZXQoJ2VuZCcpO1xuXG4gICAgICBpZiAoZW5kKSB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGVuZC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dFBpY2tlckNvbmZpZyA9IHRoaXMuZml4ZWREYXRlUmFuZ2VGaWVsZC5waWNrZXJDb25maWc7XG4gICAgdGhpcy5fY29uZmlnLm5leHQoaW5wdXRQaWNrZXJDb25maWcgPyBhc09ic2VydmFibGVGcm9tR2V0dGVyKGlucHV0UGlja2VyQ29uZmlnKSA6IHVuZGVmaW5lZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB0aW1lem9uZSBpZiBwcm92aWRlZC5cbiAgICBpZiAodGhpcy50aW1lem9uZSAmJiAhdGhpcy5maXhlZERhdGVSYW5nZUZpZWxkLmZ1bGxEYXlJblVUQykge1xuICAgICAgdGhpcy5fdGltZXpvbmUubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMudGltZXpvbmUpKTtcbiAgICB9XG5cbiAgICAvLyBXYXRjaCBmb3IgZGlzYWJsZWQgY2hhbmdlcyBzbyB3ZSBjYW4gcHJvcG9nYXRlIHRoZW0gcHJvcGVybHkuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoKGRpc2FibGVkKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJhbmdlRm9ybS5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuZW5kRGlzYWJsZWQkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuaW5wdXRSYW5nZUZvcm0uZ2V0KCdlbmQnKTtcblxuICAgICAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICBlbmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcmVzZXRzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMucHJlc2V0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQodGhpcy5kYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZS5jb25maWd1cmF0aW9ucyQpO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5zdGFydERhdGUkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5jYWxlbmRhci5hY3RpdmVEYXRlID0geDtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fc3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5faW5wdXRSYW5nZUZvcm1WYWx1ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fZGF0ZVJhbmdlSW5wdXRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9sYXRlc3RCb3VuZGFyeVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fZGlzYWJsZUVuZFN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fYWN0aXZlRGF0ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fY29uZmlnLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fdGltZXpvbmUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9wcmVzZXRzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWREYXRlUmFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2VsZWN0ZWRDaGFuZ2UoZGF0ZTogTWF5YmU8RGF0ZT4pOiB2b2lkIHtcbiAgICB0aGlzLnNldERhdGVSYW5nZShkYXRlID8geyBzdGFydDogZGF0ZSB9IDogbnVsbCk7XG4gIH1cblxuICBzZXREYXRlUmFuZ2UoZGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSB7XG4gICAgdGhpcy5fc2VsZWN0ZWREYXRlUmFuZ2UubmV4dChkYXRlUmFuZ2UpO1xuICB9XG5cbiAgX2NyZWF0ZURhdGVSYW5nZShkYXRlOiBNYXliZTxEYXRlPik6IE1heWJlPERhdGVSYW5nZT4ge1xuICAgIHJldHVybiBkYXRlID8gZGF0ZVJhbmdlKHsgLi4udGhpcy5fY3VycmVudERhdGVSYW5nZUlucHV0LCBkYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhGaXhlZERhdGVSYW5nZUZpZWxkU2VsZWN0aW9uU3RyYXRlZ3k8RD4gaW1wbGVtZW50cyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneTxEPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEPiwgcmVhZG9ubHkgZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudDogRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCkge31cblxuICBzZWxlY3Rpb25GaW5pc2hlZChkYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICAvLyB1bnVzZWRcbiAgICByZXR1cm4gY3VycmVudFJhbmdlO1xuICB9XG5cbiAgY3JlYXRlUHJldmlldyhhY3RpdmVEYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBpZiAoYWN0aXZlRGF0ZSAhPSBudWxsICYmIHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudC5jdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgIGNvbnN0IGxhdGVzdEJvdW5kYXJ5ID0gdGhpcy5kYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50LmxhdGVzdEJvdW5kYXJ5O1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZyb21BZGFwdGVyRGF0ZShhY3RpdmVEYXRlKTtcblxuICAgICAgaWYgKGxhdGVzdEJvdW5kYXJ5ICYmIGlzRGF0ZUluRGF0ZVJhbmdlKGRhdGUsIGxhdGVzdEJvdW5kYXJ5KSkge1xuICAgICAgICBjb25zdCBleGFtcGxlRGF0ZVJhbmdlID0gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlKGxhdGVzdEJvdW5kYXJ5KTtcbiAgICAgICAgcmV0dXJuIGV4YW1wbGVEYXRlUmFuZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURhdGVSYW5nZVdpdGhEYXRlKGFjdGl2ZURhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRGF0ZVJhbmdlV2l0aERhdGUoaW5wdXQ6IEQgfCBudWxsKTogRGF0ZVBpY2tlckRhdGVSYW5nZTxEPiB7XG4gICAgbGV0IGRhdGVSYW5nZTogTWF5YmU8RGF0ZVJhbmdlPjtcblxuICAgIGlmIChpbnB1dCkge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZyb21BZGFwdGVyRGF0ZShpbnB1dCk7XG4gICAgICBkYXRlUmFuZ2UgPSB0aGlzLmRieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQuX2NyZWF0ZURhdGVSYW5nZShkYXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlKGRhdGVSYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEYXRlUmFuZ2UoaW5wdXQ6IE1heWJlPERhdGVSYW5nZT4pOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEPih0aGlzLmFkYXB0ZXJEYXRlRnJvbURhdGUoaW5wdXQuc3RhcnQpLCB0aGlzLmFkYXB0ZXJEYXRlRnJvbURhdGUoaW5wdXQuZW5kKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEPihudWxsLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBkYXRlRnJvbUFkYXB0ZXJEYXRlKGlucHV0OiBEKSB7XG4gICAgY29uc3QgZGF5OiBEYXlPZk1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShpbnB1dCk7XG4gICAgY29uc3QgbW9udGhJbmRleDogRGF0ZU1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoaW5wdXQpO1xuICAgIGNvbnN0IHllYXI6IFllYXJOdW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGlucHV0KTtcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5KTtcbiAgfVxuXG4gIGFkYXB0ZXJEYXRlRnJvbURhdGUoZGF0ZTogRGF0ZSk6IEQge1xuICAgIGNvbnN0IGRheTogRGF5T2ZNb250aCA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IG1vbnRoSW5kZXg6IERhdGVNb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBjb25zdCB5ZWFyOiBZZWFyTnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRieC1maXhlZGRhdGVyYW5nZS1maWVsZFwiPlxuICA8bWF0LWNhbGVuZGFyICNjYWxlbmRhclZpZXcgW3NlbGVjdGVkXT1cImNhbGVuZGFyU2VsZWN0aW9uJCB8IGFzeW5jXCIgW2RhdGVGaWx0ZXJdPVwiKHBpY2tlckZpbHRlciQgfCBhc3luYykgfHwgZGVmYXVsdFBpY2tlckZpbHRlclwiIFttaW5EYXRlXT1cIm1pbiQgfCBhc3luY1wiIFttYXhEYXRlXT1cIm1heCQgfCBhc3luY1wiIChzZWxlY3RlZENoYW5nZSk9XCJzZWxlY3RlZENoYW5nZSgkZXZlbnQpXCI+PC9tYXQtY2FsZW5kYXI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1maXhlZGRhdGVyYW5nZS1maWVsZC1pbnB1dFwiIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0ICpuZ0lmPVwic2hvd1JhbmdlSW5wdXRcIiBbZm9ybUdyb3VwXT1cImlucHV0UmFuZ2VGb3JtXCI+XG4gICAgICA8aW5wdXQgI3N0YXJ0RGF0ZUlucHV0IG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIHBsYWNlaG9sZGVyPVwiU3RhcnQgZGF0ZVwiIC8+XG4gICAgICA8aW5wdXQgI2VuZERhdGVJbnB1dCBbbmdDbGFzc109XCIoZW5kRGlzYWJsZWQkIHwgYXN5bmMpID8gJ2RieC1maXhlZGRhdGVyYW5nZS1maWVsZC1pbnB1dC1lbmQnIDogJydcIiBbYXR0ci50YWJpbmRleF09XCIoZW5kRGlzYWJsZWQkIHwgYXN5bmMpID8gLTEgOiAwXCIgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCIgLz5cbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5EYXRlIHJhbmdlIGlzIHJlcXVpcmVkPC9tYXQtZXJyb3I+XG48L2Rpdj5cbiJdfQ==
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9maXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEYsbUJBQW1CLEVBQXVCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsb0JBQW9CLEVBQTRELDhCQUE4QixFQUFFLHFCQUFxQixFQUE2QixrQkFBa0IsRUFBd0QsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFjLGVBQWUsRUFBRSxhQUFhLEVBQWlELHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RiLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFjLElBQUksRUFBUSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFPLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0s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dERVLHVDQUF1Qzt5SUFBdkMsdUNBQXVDOzRGQUF2Qyx1Q0FBdUM7a0JBRG5ELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXliZSwgRGVjaXNpb25GdW5jdGlvbiwgTWlsbGlzZWNvbmRzLCBUaW1lem9uZVN0cmluZywgRGF0ZU1vbnRoLCBEYXlPZk1vbnRoLCBZZWFyTnVtYmVyLCBpc01vbnRoRGF5U2xhc2hEYXRlLCBtYXBJZGVudGl0eUZ1bmN0aW9uLCBNU19JTl9NSU5VVEUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IGd1ZXNzQ3VycmVudFRpbWV6b25lLCBpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzLCBEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZSwgZGF0ZVRpbWVNaW51dGVEZWNpc2lvbkZ1bmN0aW9uLCBkYXRlVGltZXpvbmVVdGNOb3JtYWwsIERhdGVSYW5nZUlucHV0LCBEYXRlUmFuZ2UsIGlzU2FtZURhdGVEYXlSYW5nZSwgRGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlLCBEYXRlVGltZU1pbnV0ZUNvbmZpZywgZGF0ZVJhbmdlLCBpc0RhdGVJbkRhdGVSYW5nZSwgY2xhbXBEYXRlUmFuZ2VUb0RhdGVSYW5nZSwgaXNTYW1lRGF0ZSwgaXNTYW1lRGF0ZVJhbmdlLCBpc1NhbWVEYXRlRGF5LCBjbGFtcERhdGVSYW5nZUZ1bmN0aW9uLCBMaW1pdERhdGVUaW1lSW5zdGFuY2UsIGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBzaGFyZVJlcGxheSwgbWFwLCBzdGFydFdpdGgsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBkZWJvdW5jZVRpbWUsIHRocm90dGxlVGltZSwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBvZiwgY29tYmluZUxhdGVzdFdpdGgsIGZpbHRlciwgY29tYmluZUxhdGVzdCwgZXhoYXVzdE1hcCwgc2Nhbiwgc2tpcCwgZmlyc3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcbmltcG9ydCB7IEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZVJhbmdlU2VsZWN0aW9uU3RyYXRlZ3ksIE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSwgRGF0ZVJhbmdlIGFzIERhdGVQaWNrZXJEYXRlUmFuZ2UsIE1hdENhbGVuZGFyQ2VsbENsYXNzRnVuY3Rpb24sIE1hdENhbGVuZGFyQ2VsbENzc0NsYXNzZXMsIE1hdENhbGVuZGFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBhc09ic2VydmFibGVGcm9tR2V0dGVyLCBmaWx0ZXJNYXliZSwgT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXIsIHNraXBGaXJzdE1heWJlLCBTdWJzY3JpcHRpb25PYmplY3QsIHN3aXRjaE1hcE1heWJlRGVmYXVsdCwgdGFwTG9nIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZVZhbHVlTW9kZSwgZGJ4RGF0ZVJhbmdlSXNTYW1lRGF0ZVJhbmdlRmllbGRWYWx1ZSwgZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5LCBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeSB9IGZyb20gJy4vZGF0ZS52YWx1ZSc7XG5pbXBvcnQgeyBEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2RhdGV0aW1lJztcbmltcG9ydCB7IERieERhdGVUaW1lRmllbGRNZW51UHJlc2V0c1NlcnZpY2UgfSBmcm9tICcuL2RhdGV0aW1lLmZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmV4cG9ydCB0eXBlIERieEZpeGVkRGF0ZVJhbmdlRGF0ZVJhbmdlSW5wdXQgPSBPbWl0PERhdGVSYW5nZUlucHV0LCAnZGF0ZSc+O1xuXG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24gPSBPbWl0PERhdGVUaW1lTWludXRlQ29uZmlnLCAnZGF0ZSc+O1xuXG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGUgPSAnc2luZ2xlJyB8ICdhcmJpdHJhcnknIHwgJ2FyYml0cmFyeV9xdWljayc7XG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZVBpY2tpbmcgPSAnc3RhcnQnIHwgJ2VuZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIC8qKlxuICAgKiBEYXRlIHJhbmdlIGlucHV0IHRvIGJ1aWxkIHRoZSBkYXRlIHJhbmdlLlxuICAgKi9cbiAgZGF0ZVJhbmdlSW5wdXQ6IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieEZpeGVkRGF0ZVJhbmdlRGF0ZVJhbmdlSW5wdXQ+O1xuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gbW9kZSB0byB1c2Ugd2hlbiBwaWNraW5nIGRhdGVzIG9uIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIHNlbGVjdGlvbk1vZGU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+PjtcblxuICAvKipcbiAgICogVmFsdWUgbW9kZSBmb3IgdGhlIGRhdGVzIGluIHRoZSBvdXRwdXQgRGF0ZVJhbmdlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBEQVRFXG4gICAqL1xuICB2YWx1ZU1vZGU/OiBEYnhEYXRlVGltZVZhbHVlTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcGFzcyB0aGUgZGF0ZSB2YWx1ZSBhcyBhIFVUQyBkYXRlLCBvciBhIGRhdGUgaW4gdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICBmdWxsRGF5SW5VVEM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcGlja2VyIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHBpY2tlckNvbmZpZz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbj47XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVGhlIGlucHV0IHRpbWV6b25lIHRvIGRlZmF1bHQgdG8uXG4gICAqXG4gICAqIElnbm9yZWQgaWYgZnVsbERheUluVVRDIGlzIHRydWUuXG4gICAqL1xuICB0aW1lem9uZT86IE1heWJlPE9ic2VydmFibGVPclZhbHVlR2V0dGVyPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IHRoZSB0aW1lem9uZS4gVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgc2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHByZXNldHMgdG8gc2hvdyBpbiB0aGUgZHJvcGRvd24uXG4gICAqL1xuICBwcmVzZXRzPzogT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSByYW5nZSBpbnB1dC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHNob3dSYW5nZUlucHV0PzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZGJ4Rml4ZWREYXRlUmFuZ2VJbnB1dFZhbHVlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGlucHV0OiBNYXliZTxEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWU+KSA9PiBNYXliZTxEYXRlUmFuZ2U+IHtcbiAgY29uc3QgZGF0ZUlucHV0VHJhbnNmb3JtZXIgPSBkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnkobW9kZSwgdGltZXpvbmVJbnN0YW5jZSk7XG5cbiAgcmV0dXJuICh5KSA9PiB7XG4gICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZVJhbmdlPjtcblxuICAgIGlmICh5KSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHN0YXJ0OiBkYXRlSW5wdXRUcmFuc2Zvcm1lcih5LnN0YXJ0KSBhcyBEYXRlLFxuICAgICAgICBlbmQ6IGRhdGVJbnB1dFRyYW5zZm9ybWVyKHkuZW5kKSBhcyBEYXRlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRieEZpeGVkRGF0ZVJhbmdlT3V0cHV0VmFsdWVGYWN0b3J5KG1vZGU6IERieERhdGVUaW1lVmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlOiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4pOiAoZGF0ZTogTWF5YmU8RGF0ZVJhbmdlPikgPT4gTWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPiB7XG4gIGNvbnN0IGRhdGVPdXRwdXRUcmFuc2Zvcm1lciA9IGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5KG1vZGUsIHRpbWV6b25lSW5zdGFuY2UpO1xuXG4gIHJldHVybiAoeSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGVSYW5nZT47XG5cbiAgICBpZiAoeSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBzdGFydDogZGF0ZU91dHB1dFRyYW5zZm9ybWVyKHkuc3RhcnQpIGFzIERhdGUsXG4gICAgICAgIGVuZDogZGF0ZU91dHB1dFRyYW5zZm9ybWVyKHkuZW5kKSBhcyBEYXRlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmNvbnN0IFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUU6IE1pbGxpc2Vjb25kcyA9IDEwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpeGVkRGF0ZVJhbmdlU2NhbiB7XG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGRhdGUgcGFzc2VkLCBpZiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgbGFzdERhdGVSYW5nZT86IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj47XG4gIC8qKlxuICAgKiBUaGUgZ2VuZXJhdGVkIGJvdW5kYXJ5IHJhbmdlLlxuICAgKi9cbiAgYm91bmRhcnk/OiBEYXRlUmFuZ2U7XG4gIC8qKlxuICAgKiBOZXcgRGF0ZSBSYW5nZVxuICAgKi9cbiAgcmFuZ2U/OiBEYXRlUmFuZ2U7XG59XG5cbnR5cGUgU2VsZWN0ZWREYXRlRXZlbnRUeXBlID0gJ2NhbGVuZGFyJyB8ICdpbnB1dCc7XG5cbmludGVyZmFjZSBTZWxlY3RlZERhdGVFdmVudCB7XG4gIHR5cGU6IFNlbGVjdGVkRGF0ZUV2ZW50VHlwZTtcbiAgcmFuZ2U/OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdmaXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZUNsYXNzOiBmb3J3YXJkUmVmKCgpID0+IERieEZpeGVkRGF0ZVJhbmdlRmllbGRTZWxlY3Rpb25TdHJhdGVneSlcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8RGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9pbnB1dFJhbmdlRm9ybVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfaW5wdXRSYW5nZUZvcm1WYWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfY3VycmVudFNlbGVjdGlvbk1vZGVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2xhdGVzdEJvdW5kYXJ5U3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9kaXNhYmxlRW5kU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9hY3RpdmVEYXRlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnREYXRlUmFuZ2VJbnB1dDogTWF5YmU8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD4gPSB7fTtcbiAgcHJpdmF0ZSBfY3VycmVudFNlbGVjdGlvbk1vZGU6IERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xuICBwcml2YXRlIF9sYXRlc3RCb3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfY29uZmlnID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9kYXRlUmFuZ2VJbnB1dCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0Pj4+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfdGltZXpvbmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3ByZXNldHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8RGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10+PihvZihbXSkpO1xuXG4gIHByaXZhdGUgX3NlbGVjdGlvbkV2ZW50ID0gbmV3IFN1YmplY3Q8U2VsZWN0ZWREYXRlRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+PiA9IHRoaXMuX3NlbGVjdGlvbkV2ZW50LnBpcGUobWFwKCh4KSA9PiB4LnJhbmdlKSk7XG5cbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2xPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEFic3RyYWN0Q29udHJvbDxNYXliZTxEYXRlUmFuZ2U+Pj4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGZvcm1Db250cm9sJCA9IHRoaXMuX2Zvcm1Db250cm9sT2JzLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgQFZpZXdDaGlsZChNYXRDYWxlbmRhcilcbiAgY2FsZW5kYXIhOiBNYXRDYWxlbmRhcjxEYXRlPjtcblxuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBzdGFydERhdGVJbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2VuZERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBlbmREYXRlSW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICBnZXQgY3VycmVudERhdGVSYW5nZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQ7XG4gIH1cblxuICBnZXQgY3VycmVudFNlbGVjdGlvbk1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlO1xuICB9XG5cbiAgZ2V0IGxhdGVzdEJvdW5kYXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9sYXRlc3RCb3VuZGFyeTtcbiAgfVxuXG4gIHJlYWRvbmx5IGNvbmZpZyQ6IE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VQaWNrZXJDb25maWd1cmF0aW9uPiA9IHRoaXMuX2NvbmZpZy5waXBlKFxuICAgIGZpbHRlck1heWJlKCksXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGltaXREYXRlVGltZUluc3RhbmNlJCA9IHRoaXMuY29uZmlnJC5waXBlKG1hcChsaW1pdERhdGVUaW1lSW5zdGFuY2UpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZSQ6IE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPiA9IHRoaXMuX3NlbGVjdGlvbk1vZGUucGlwZShcbiAgICBzd2l0Y2hNYXBNYXliZURlZmF1bHQ8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPignc2luZ2xlJyksXG4gICAgbWFwKCh4KSA9PiB4ID8/ICdzaW5nbGUnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlSW5wdXQkID0gdGhpcy5fZGF0ZVJhbmdlSW5wdXQucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5fdGltZXpvbmUucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkucGlwZShcbiAgICBtYXAoKGRlZmF1bHRUaW1lem9uZSkgPT4ge1xuICAgICAgcmV0dXJuIGRlZmF1bHRUaW1lem9uZSA/PyBndWVzc0N1cnJlbnRUaW1lem9uZSgpO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lem9uZUluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4+ID0gdGhpcy50aW1lem9uZSQucGlwZShcbiAgICBtYXAoKHRpbWV6b25lKSA9PiAodGltZXpvbmUgPyBkYXRlVGltZXpvbmVVdGNOb3JtYWwoeyB0aW1lem9uZSB9KSA6IHVuZGVmaW5lZCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmFsdWVJblN5c3RlbVRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuZm9ybUNvbnRyb2wkLnBpcGUoXG4gICAgbWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aDxNYXliZTxEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWU+Pihjb250cm9sLnZhbHVlKSwgc2hhcmVSZXBsYXkoMSkpKSxcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkKSxcbiAgICBzd2l0Y2hNYXAoKFt4LCB0aW1lem9uZUluc3RhbmNlXSkgPT4ge1xuICAgICAgcmV0dXJuIHgucGlwZShtYXAoZGJ4Rml4ZWREYXRlUmFuZ2VJbnB1dFZhbHVlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKTtcbiAgICB9KSxcbiAgICB0aHJvdHRsZVRpbWUoMjAsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksIC8vIHRocm90dGxlIGluY29taW5nIHZhbHVlcyBhbmQgdGltZXpvbmUgY2hhbmdlc1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPE1heWJlPERhdGVSYW5nZT4+KGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBkYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKG1vZGU6IERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZSkge1xuICAgIGNvbnN0IHJlc3VsdDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0ZVJhbmdlSW5wdXQkLCB0aGlzLmxpbWl0RGF0ZVRpbWVJbnN0YW5jZSRdKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChbZGF0ZVJhbmdlSW5wdXQsIGxpbWl0SW5zdGFuY2VdKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbk1heENsYW1wID0gKGRhdGVSYW5nZTogRGF0ZVJhbmdlKSA9PiBsaW1pdEluc3RhbmNlLmNsYW1wRGF0ZVJhbmdlKGRhdGVSYW5nZSk7XG5cbiAgICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgLy8gb25seSB1c2UgdGhlIHN0YXJ0IGRhdGUuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UkLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgICAgICAgICAgbWFwKChpbnB1dERhdGVSYW5nZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gaW5wdXREYXRlUmFuZ2U/LnN0YXJ0O1xuICAgICAgICAgICAgICByZXR1cm4gZGF0ZSA/IChtaW5NYXhDbGFtcChkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZSB9IGFzIERhdGVSYW5nZUlucHV0KSkgYXMgRGF0ZVJhbmdlKSA6IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdGFrZSB0aGUgZmlyc3QgZGF0ZSwgdGhlbiB3YWl0IHVubGVzcyB0aGUgZGF0ZSBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZS5cbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVSYW5nZSQucGlwZShcbiAgICAgICAgICAgIHNjYW4oKGFjYzogRml4ZWREYXRlUmFuZ2VTY2FuLCBuZXh0RGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHQ6IEZpeGVkRGF0ZVJhbmdlU2NhbjtcblxuICAgICAgICAgICAgICBpZiAobmV4dERhdGVSYW5nZSAmJiBuZXh0RGF0ZVJhbmdlLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0OiBzdGFydE9yTmV4dERhdGUsIGVuZCB9ID0gbmV4dERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3RlbnRpYWxCb3VuZGFyeSA9IGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlOiBzdGFydE9yTmV4dERhdGUgfSBhcyBEYXRlUmFuZ2VJbnB1dCk7XG5cbiAgICAgICAgICAgICAgICAvLyBvbmx5IGNvbWVzIHRocm91Z2ggd2hlbiBwYXNzZWQgYnkgdGhlIHRleHQgaW5wdXRzXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0T3JOZXh0RGF0ZSAmJiBlbmQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY2xhbXBEYXRlUmFuZ2VUb0RhdGVSYW5nZShuZXh0RGF0ZVJhbmdlLCBwb3RlbnRpYWxCb3VuZGFyeSkgYXMgRGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiBuZXh0RGF0ZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBib3VuZGFyeTogcmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsZXQgcmFuZ2U6IE1heWJlPERhdGVSYW5nZT4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBsZXQgYm91bmRhcnk6IE1heWJlPERhdGVSYW5nZT4gPSBwb3RlbnRpYWxCb3VuZGFyeTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGFjYy5ib3VuZGFyeSAmJiBpc0RhdGVJbkRhdGVSYW5nZShzdGFydE9yTmV4dERhdGUsIGFjYy5ib3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgaW4gdGhlIGRhdGUgcmFuZ2UsIHVzZXMgdGhlIHBpY2sgYXMgdGhlIGxhc3QgZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGFjYy5ib3VuZGFyeS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHN0YXJ0T3JOZXh0RGF0ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZGlmeSBib3VuZGFyeSB0byBtYXRjaCByYW5nZVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NhbWVEYXRlUmFuZ2UoYWNjLnJhbmdlLCByYW5nZSkgJiYgaXNTYW1lRGF0ZURheShyYW5nZS5lbmQsIHN0YXJ0T3JOZXh0RGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGNsaWNrZWQgb24gdGhlIGVuZCByYW5nZSwgdGhlbiBleHBhbmQgdGhlIGJvdW5kYXJ5IGFnYWluIHRvIHRoZSBmdWxsIHJhbmdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZTogcmFuZ2Uuc3RhcnQgfSBhcyBEYXRlUmFuZ2VJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IGFjYy5ib3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJykge1xuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3REYXRlUmFuZ2U6IG5leHREYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LFxuICAgICAgICAgICAgICAgICAgICByYW5nZVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogcmVzdWx0Lmxhc3REYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICBib3VuZGFyeTogcmVzdWx0LmJvdW5kYXJ5ID8gKG1pbk1heENsYW1wKHJlc3VsdC5ib3VuZGFyeSkgYXMgRGF0ZVJhbmdlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHJhbmdlOiByZXN1bHQucmFuZ2UgPyAobWluTWF4Q2xhbXAocmVzdWx0LnJhbmdlKSBhcyBEYXRlUmFuZ2UpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICF4Lmxhc3REYXRlUmFuZ2UgfHwgeC5yYW5nZSAhPSBudWxsKSwgLy8gcGFzcyB0aHJvdWdoIG51bGwvZGF0ZSBjbGVhcmluZ3Mgb3IgcmFuZ2VzXG4gICAgICAgICAgICBtYXAoKHgpID0+IHgucmFuZ2UgPz8gbnVsbCkgLy8gcmV0dXJuIHRoZSByYW5nZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkb25seSBmdWxsQm91bmRhcnkkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5kYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKCdzaW5nbGUnKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgbGF0ZXN0Qm91bmRhcnkkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobW9kZSkgPT4ge1xuICAgICAgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgIC8vIGluIGFyYml0cmFyeV9xdWljayBtb2RlLCB0aGUgbGF0ZXN0IHZhbHVlIGlzIHRoZSBib3VuZGFyeSwgc2luY2Ugd2UgYWx3YXlzIHNldCB0aGUgdmFsdWUgaW1tZWRpYXRlbHkuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5mdWxsQm91bmRhcnkkO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgb24gdGhlIGRhdGUgYW55IHRpbWUgdGhlIHNlbGVjdGlvbiBldmVudCBmcm9tIHRoZSBwaWNrZXIgb2NjdXJlZCwgb3RoZXJ3aXNlIHVzZSB0aGUgc3lzdGVtIHZhbHVlXG4gICAqL1xuICByZWFkb25seSBjYWxlbmRhckZvY3VzRGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT4gPSB0aGlzLl9zZWxlY3Rpb25FdmVudC5waXBlKHN0YXJ0V2l0aChudWxsKSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKHNlbGVjdGlvbkV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2VsZWN0aW9uRXZlbnQgJiYgc2VsZWN0aW9uRXZlbnQudHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBzZWxlY3Rpb25FdmVudC5yYW5nZT8uc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIG9mKHNlbGVjdGlvbkV2ZW50LnJhbmdlLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxCb3VuZGFyeSQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoZnVsbEJvdW5kYXJ5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVsbEJvdW5kYXJ5Py5zdGFydCA/PyBzZWxlY3Rpb25FdmVudD8ucmFuZ2U/LnN0YXJ0O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZVNlbGVjdGlvbiQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoc3dpdGNoTWFwKChtb2RlKSA9PiB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUobW9kZSkpKTtcblxuICByZWFkb25seSBjYWxlbmRhclNlbGVjdGlvbiQ6IE9ic2VydmFibGU8RGF0ZVBpY2tlckRhdGVSYW5nZTxEYXRlPiB8IG51bGw+ID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeCA/IG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPERhdGU+KHguc3RhcnQsIHguZW5kKSA6IG51bGwpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVuZERpc2FibGVkJCA9IHRoaXMuc2VsZWN0aW9uTW9kZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHggPT09ICdzaW5nbGUnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRSYW5nZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbClcbiAgfSk7XG5cbiAgZ2V0IGZpeGVkRGF0ZVJhbmdlRmllbGQoKTogRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcztcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNlbGVjdGlvbk1vZGU7XG4gIH1cblxuICBnZXQgdmFsdWVNb2RlKCk6IERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy52YWx1ZU1vZGUgPz8gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTtcbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCB0aW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy50aW1lem9uZTtcbiAgfVxuXG4gIGdldCBzaG93VGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2hvd1RpbWV6b25lID8/IHRydWU7XG4gIH1cblxuICBnZXQgcHJlc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5wcmVzZXRzO1xuICB9XG5cbiAgZ2V0IHNob3dSYW5nZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNob3dSYW5nZUlucHV0ID8/IHRydWU7XG4gIH1cblxuICByZWFkb25seSBtaW5NYXhSYW5nZSQgPSB0aGlzLmxpbWl0RGF0ZVRpbWVJbnN0YW5jZSQucGlwZShcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aW1lcihNU19JTl9NSU5VVEUpKSwgLy8gcmVmcmVzaCBldmVyeSBtaW51dGVcbiAgICBtYXAoKFt4XSkgPT4geC5kYXRlUmFuZ2UoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1pbiQgPSB0aGlzLm1pbk1heFJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uc3RhcnQgPz8gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1heCQgPSB0aGlzLm1pbk1heFJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZW5kID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwaWNrZXJGaWx0ZXIkOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+PiA9IHRoaXMuY29uZmlnJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBkYXRlVGltZU1pbnV0ZURlY2lzaW9uRnVuY3Rpb24oeCk7XG4gICAgICAgIHJldHVybiAoeDogRGF0ZSB8IG51bGwpID0+ICh4ICE9IG51bGwgPyBmaWx0ZXIoeCkgOiB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFBpY2tlckZpbHRlcjogRGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4gPSAoKSA9PiB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGJ4RGF0ZVRpbWVGaWVsZENvbmZpZ1NlcnZpY2U6IERieERhdGVUaW1lRmllbGRNZW51UHJlc2V0c1NlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMubmV4dCh0aGlzLmZvcm1Db250cm9sKTtcblxuICAgIGNvbnN0IGRhdGVSYW5nZVNlbGVjdGlvbiA9IHRoaXMuZGF0ZVJhbmdlU2VsZWN0aW9uJC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAgIGNvbnN0IHNldElucHV0Rm9ybVZhbHVlID0gKHZhbHVlOiBNYXliZTxEYXRlUmFuZ2U+KSA9PiB7XG4gICAgICBpZiAoIWlzU2FtZURhdGVEYXlSYW5nZSh2YWx1ZSwgdGhpcy5pbnB1dFJhbmdlRm9ybS52YWx1ZSBhcyBQYXJ0aWFsPERhdGVSYW5nZT4pKSB7XG4gICAgICAgIHRoaXMuaW5wdXRSYW5nZUZvcm0uc2V0VmFsdWUoe1xuICAgICAgICAgIHN0YXJ0OiB2YWx1ZT8uc3RhcnQgPz8gbnVsbCxcbiAgICAgICAgICBlbmQ6IHZhbHVlPy5lbmQgPz8gbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fc3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQucGlwZShtYXAoKHRpbWV6b25lSW5zdGFuY2UpID0+IGRieEZpeGVkRGF0ZVJhbmdlT3V0cHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2N1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2VTZWxlY3Rpb24ucGlwZShcbiAgICAgICAgICAgIHNraXBGaXJzdE1heWJlKCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlUmFuZ2U+Pihpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgICAgICAgICAgbWFwKCh4KSA9PiBbeCwgY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldIGFzIFt0eXBlb2YgeCwgdHlwZW9mIGN1cnJlbnRWYWx1ZSwgdHlwZW9mIHZhbHVlRmFjdG9yeV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtyYXdWYWx1ZSwgY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmF3VmFsdWUgPyB2YWx1ZUZhY3RvcnkocmF3VmFsdWUpIDogbnVsbDtcbiAgICAgICAgY29uc3QgaXNTYW1lUmFuZ2UgPSBkYnhEYXRlUmFuZ2VJc1NhbWVEYXRlUmFuZ2VGaWVsZFZhbHVlKHZhbHVlLCBjdXJyZW50VmFsdWUpO1xuXG4gICAgICAgIGlmICghaXNTYW1lUmFuZ2UpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaW5wdXQgdGV4dCBhZ2FpblxuICAgICAgICAgIHNldElucHV0Rm9ybVZhbHVlKHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnNlbGVjdGlvbk1vZGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID0geCkpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0ZVJhbmdlSW5wdXQkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dCA9IHgpKTtcblxuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5zdWJzY3JpYmUoKHg6IE1heWJlPERhdGVSYW5nZT4pID0+IHtcbiAgICAgIHNldElucHV0Rm9ybVZhbHVlKHgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2hvd1JhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMDApLCAvLyB0aHJvdHRsZSB0byBwcmV2ZW50IHRoZSB2YWx1ZSBmcm9tIGNoYW5naW5nIHRvbyBmYXN0XG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0UmFuZ2VGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFN0cmluZyA9IHRoaXMuc3RhcnREYXRlSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCB2YWxpZCA9IGlzTW9udGhEYXlTbGFzaERhdGUoc3RhcnRTdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkICYmIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZW5kU3RyaW5nID0gdGhpcy5lbmREYXRlSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgdmFsaWQgPSBpc01vbnRoRGF5U2xhc2hEYXRlKGVuZFN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkOyAvLyBtdXN0IGJlIGEgdmFsaWQgdGV4dCBpbnB1dFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgbWFwKCh4KSA9PiB4IGFzIE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVSYW5nZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh4OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlUmFuZ2UoeD8uc3RhcnQgPyB7IHN0YXJ0OiB4LnN0YXJ0IH0gOiBudWxsLCAnaW5wdXQnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJhbmdlVG9TZXQ6IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4gPSB4O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snICYmIHRoaXMuX2xhdGVzdEJvdW5kYXJ5ICYmIHg/LnN0YXJ0ICYmIHg/LmVuZCkge1xuICAgICAgICAgICAgICBpZiAoIWlzRGF0ZUluRGF0ZVJhbmdlKHguc3RhcnQsIHRoaXMuX2xhdGVzdEJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBlbmQgZGF0ZSBpdCBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHJhbmdlIChpLmUuIGEgcmFuZ2Ugd2FzIHR5cGVkIGluIG9ubHkgdG8gdGhlIHN0YXJ0IGRhdGUpIHRoZW4gc2V0IHRoZSBlbmQgdG8gdGhlIGJvdW5kYXJ5IGVuZFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kYXJ5ID0gZGF0ZVJhbmdlKHsgLi4udGhpcy5fY3VycmVudERhdGVSYW5nZUlucHV0LCBkYXRlOiB4LnN0YXJ0IH0gYXMgRGF0ZVJhbmdlSW5wdXQpO1xuICAgICAgICAgICAgICAgIHJhbmdlVG9TZXQgPSB7IHN0YXJ0OiB4LnN0YXJ0LCBlbmQ6IGJvdW5kYXJ5LmVuZCB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHJhbmdlVG9TZXQsICdpbnB1dCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGF0ZXN0Qm91bmRhcnlTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5sYXRlc3RCb3VuZGFyeSQuc3Vic2NyaWJlKCh4KSA9PiAodGhpcy5fbGF0ZXN0Qm91bmRhcnkgPSB4KSk7XG4gICAgdGhpcy5fZGF0ZVJhbmdlSW5wdXQubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMuZml4ZWREYXRlUmFuZ2VGaWVsZC5kYXRlUmFuZ2VJbnB1dCkpO1xuXG4gICAgdGhpcy5fZGlzYWJsZUVuZFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmVuZERpc2FibGVkJC5zdWJzY3JpYmUoKGRpc2FibGVkKSA9PiB7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLmlucHV0UmFuZ2VGb3JtLmdldCgnZW5kJyk7XG5cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgZW5kLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmQuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0UGlja2VyQ29uZmlnID0gdGhpcy5maXhlZERhdGVSYW5nZUZpZWxkLnBpY2tlckNvbmZpZztcbiAgICB0aGlzLl9jb25maWcubmV4dChpbnB1dFBpY2tlckNvbmZpZyA/IGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIoaW5wdXRQaWNrZXJDb25maWcpIDogdW5kZWZpbmVkKTtcblxuICAgIC8vIFNldCBkZWZhdWx0IHRpbWV6b25lIGlmIHByb3ZpZGVkLlxuICAgIGlmICh0aGlzLnRpbWV6b25lICYmICF0aGlzLmZpeGVkRGF0ZVJhbmdlRmllbGQuZnVsbERheUluVVRDKSB7XG4gICAgICB0aGlzLl90aW1lem9uZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy50aW1lem9uZSkpO1xuICAgIH1cblxuICAgIC8vIFdhdGNoIGZvciBkaXNhYmxlZCBjaGFuZ2VzIHNvIHdlIGNhbiBwcm9wb2dhdGUgdGhlbSBwcm9wZXJseS5cbiAgICB0aGlzLmZvcm1Db250cm9sLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSgoZGlzYWJsZWQpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXRSYW5nZUZvcm0uZW5hYmxlKCk7XG5cbiAgICAgICAgdGhpcy5lbmREaXNhYmxlZCQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGRpc2FibGVkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5pbnB1dFJhbmdlRm9ybS5nZXQoJ2VuZCcpO1xuXG4gICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIGVuZC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbmQuZW5hYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByZXNldHMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcHJlc2V0cy5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5wcmVzZXRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dCh0aGlzLmRieERhdGVUaW1lRmllbGRDb25maWdTZXJ2aWNlLmNvbmZpZ3VyYXRpb25zJCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlRGF0ZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmNhbGVuZGFyRm9jdXNEYXRlJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuYWN0aXZlRGF0ZSA9IHg7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX3N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5faW5wdXRSYW5nZUZvcm1TdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0U3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fbGF0ZXN0Qm91bmRhcnlTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NvbmZpZy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3RpbWV6b25lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcHJlc2V0cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkV2ZW50LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNlbGVjdGVkQ2hhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRlUmFuZ2UoZGF0ZSA/IHsgc3RhcnQ6IGRhdGUgfSA6IG51bGwsICdjYWxlbmRhcicpO1xuICB9XG5cbiAgc2V0RGF0ZVJhbmdlKHJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+LCB0eXBlOiBTZWxlY3RlZERhdGVFdmVudFR5cGUpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25FdmVudC5uZXh0KHsgdHlwZSwgcmFuZ2UgfSk7XG4gIH1cblxuICBfY3JlYXRlRGF0ZVJhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogTWF5YmU8RGF0ZVJhbmdlPiB7XG4gICAgcmV0dXJuIGRhdGUgPyBkYXRlUmFuZ2UoeyAuLi50aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQsIGRhdGUgfSBhcyBEYXRlUmFuZ2VJbnB1dCkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieEZpeGVkRGF0ZVJhbmdlRmllbGRTZWxlY3Rpb25TdHJhdGVneTxEPiBpbXBsZW1lbnRzIE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5PEQ+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPEQ+LCByZWFkb25seSBkYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50OiBEYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50KSB7fVxuXG4gIHNlbGVjdGlvbkZpbmlzaGVkKGRhdGU6IEQgfCBudWxsLCBjdXJyZW50UmFuZ2U6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4sIGV2ZW50OiBFdmVudCk6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIC8vIHVudXNlZFxuICAgIHJldHVybiBjdXJyZW50UmFuZ2U7XG4gIH1cblxuICBjcmVhdGVQcmV2aWV3KGFjdGl2ZURhdGU6IEQgfCBudWxsLCBjdXJyZW50UmFuZ2U6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4sIGV2ZW50OiBFdmVudCk6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIGlmIChhY3RpdmVEYXRlICE9IG51bGwgJiYgdGhpcy5kYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50LmN1cnJlbnRTZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xuICAgICAgY29uc3QgbGF0ZXN0Qm91bmRhcnkgPSB0aGlzLmRieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQubGF0ZXN0Qm91bmRhcnk7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGFjdGl2ZURhdGUpO1xuXG4gICAgICBpZiAobGF0ZXN0Qm91bmRhcnkgJiYgaXNEYXRlSW5EYXRlUmFuZ2UoZGF0ZSwgbGF0ZXN0Qm91bmRhcnkpKSB7XG4gICAgICAgIGNvbnN0IGV4YW1wbGVEYXRlUmFuZ2UgPSB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UobGF0ZXN0Qm91bmRhcnkpO1xuICAgICAgICByZXR1cm4gZXhhbXBsZURhdGVSYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlV2l0aERhdGUoYWN0aXZlRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEYXRlUmFuZ2VXaXRoRGF0ZShpbnB1dDogRCB8IG51bGwpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBsZXQgZGF0ZVJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGlucHV0KTtcbiAgICAgIGRhdGVSYW5nZSA9IHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudC5fY3JlYXRlRGF0ZVJhbmdlKGRhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UoZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURhdGVSYW5nZShpbnB1dDogTWF5YmU8RGF0ZVJhbmdlPik6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5zdGFydCksIHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5lbmQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVGcm9tQWRhcHRlckRhdGUoaW5wdXQ6IEQpIHtcbiAgICBjb25zdCBkYXk6IERheU9mTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKGlucHV0KTtcbiAgICBjb25zdCBtb250aEluZGV4OiBEYXRlTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChpbnB1dCk7XG4gICAgY29uc3QgeWVhcjogWWVhck51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoaW5wdXQpO1xuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG5cbiAgYWRhcHRlckRhdGVGcm9tRGF0ZShkYXRlOiBEYXRlKTogRCB7XG4gICAgY29uc3QgZGF5OiBEYXlPZk1vbnRoID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGhJbmRleDogRGF0ZU1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IHllYXI6IFllYXJOdW1iZXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkXCI+XG4gIDxtYXQtY2FsZW5kYXIgI2NhbGVuZGFyVmlldyBbc2VsZWN0ZWRdPVwiY2FsZW5kYXJTZWxlY3Rpb24kIHwgYXN5bmNcIiBbZGF0ZUZpbHRlcl09XCIocGlja2VyRmlsdGVyJCB8IGFzeW5jKSB8fCBkZWZhdWx0UGlja2VyRmlsdGVyXCIgW21pbkRhdGVdPVwibWluJCB8IGFzeW5jXCIgW21heERhdGVdPVwibWF4JCB8IGFzeW5jXCIgKHNlbGVjdGVkQ2hhbmdlKT1cInNlbGVjdGVkQ2hhbmdlKCRldmVudClcIj48L21hdC1jYWxlbmRhcj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0XCIgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgKm5nSWY9XCJzaG93UmFuZ2VJbnB1dFwiIFtmb3JtR3JvdXBdPVwiaW5wdXRSYW5nZUZvcm1cIj5cbiAgICAgIDxpbnB1dCAjc3RhcnREYXRlSW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCIgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgLz5cbiAgICAgIDxpbnB1dCAjZW5kRGF0ZUlucHV0IFtuZ0NsYXNzXT1cIihlbmREaXNhYmxlZCQgfCBhc3luYykgPyAnZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0LWVuZCcgOiAnJ1wiIFthdHRyLnRhYmluZGV4XT1cIihlbmREaXNhYmxlZCQgfCBhc3luYykgPyAtMSA6IDBcIiBtYXRFbmREYXRlIGZvcm1Db250cm9sTmFtZT1cImVuZFwiIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiPkRhdGUgcmFuZ2UgaXMgcmVxdWlyZWQ8L21hdC1lcnJvcj5cbjwvZGl2PlxuIl19
|
|
@@ -30,7 +30,7 @@ DbxFormWorkingWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
|
30
30
|
<ng-container #fieldComponent></ng-container>
|
|
31
31
|
<dbx-loading [linear]="true" [context]="workingContext"></dbx-loading>
|
|
32
32
|
</div>
|
|
33
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i1.DbxLoadingComponent, selector: "dbx-loading", inputs: ["show", "text", "mode", "color", "diameter", "linear", "context", "loading", "error"] }] });
|
|
33
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i1.DbxLoadingComponent, selector: "dbx-loading", inputs: ["show", "text", "mode", "color", "diameter", "linear", "padding", "context", "loading", "error"] }] });
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormWorkingWrapperComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
36
36
|
args: [{
|
|
@@ -38,7 +38,7 @@ import { FlexLayoutModule } from '@angular/flex-layout';
|
|
|
38
38
|
|
|
39
39
|
function dateScheduleRangeField(config = {}) {
|
|
40
40
|
var _a;
|
|
41
|
-
const { key = 'schedule', appearance, hideCustomize, filter, timezone, initialSelectionState, computeSelectionResultRelativeToFilter, exclusions, minMaxDateRange, cellContentFactory, closeDialogConfig } = config;
|
|
41
|
+
const { key = 'schedule', appearance, hideCustomize, filter, timezone, initialSelectionState, computeSelectionResultRelativeToFilter, exclusions, minMaxDateRange, cellContentFactory, dialogContentConfig, closeDialogConfig } = config;
|
|
42
42
|
const fieldConfig = Object.assign({}, formlyField(Object.assign({ key, type: 'date-schedule-range' }, propsAndConfigForFieldConfig(config, {
|
|
43
43
|
label: (_a = config.label) !== null && _a !== void 0 ? _a : 'Schedule',
|
|
44
44
|
appearance,
|
|
@@ -47,6 +47,7 @@ function dateScheduleRangeField(config = {}) {
|
|
|
47
47
|
minMaxDateRange,
|
|
48
48
|
filter,
|
|
49
49
|
exclusions,
|
|
50
|
+
dialogContentConfig,
|
|
50
51
|
closeDialogConfig,
|
|
51
52
|
computeSelectionResultRelativeToFilter,
|
|
52
53
|
initialSelectionState,
|
|
@@ -1070,27 +1071,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
1070
1071
|
|
|
1071
1072
|
/**
|
|
1072
1073
|
* Token used to configure the default DbxDialogContentFooterConfig for DbxScheduleSelectionCalendarDateDialogComponent.
|
|
1074
|
+
*
|
|
1075
|
+
* @deprecated use DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CONTENT_CONFIG_TOKEN instead.
|
|
1073
1076
|
*/
|
|
1074
1077
|
const DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CLOSE_CONFIG_TOKEN = new InjectionToken('DbxScheduleSelectionCalendarDatePopupCloseConfig');
|
|
1078
|
+
/**
|
|
1079
|
+
* Token used to configure the default DbxScheduleSelectionCalendarDatePopupConfig for DbxScheduleSelectionCalendarDateDialogComponent.
|
|
1080
|
+
*/
|
|
1081
|
+
const DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CONTENT_CONFIG_TOKEN = new InjectionToken('DbxScheduleSelectionCalendarDatePopupContentConfig');
|
|
1075
1082
|
class DbxScheduleSelectionCalendarDateDialogComponent extends AbstractDialogDirective {
|
|
1083
|
+
get contentConfig() {
|
|
1084
|
+
return this.data.contentConfig;
|
|
1085
|
+
}
|
|
1076
1086
|
get closeConfig() {
|
|
1077
|
-
|
|
1087
|
+
var _a;
|
|
1088
|
+
return (_a = this.contentConfig) === null || _a === void 0 ? void 0 : _a.closeConfig;
|
|
1078
1089
|
}
|
|
1079
1090
|
static openDialog(matDialog, config) {
|
|
1080
|
-
const { injector, closeConfig: inputCloseConfig } = config;
|
|
1091
|
+
const { injector, contentConfig: inputContentConfig, closeConfig: inputCloseConfig } = config;
|
|
1081
1092
|
const defaultCloseConfig = injector.get(DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CLOSE_CONFIG_TOKEN, null);
|
|
1082
|
-
const
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
width: '80vw',
|
|
1088
|
-
minWidth: 360,
|
|
1089
|
-
data: {
|
|
1093
|
+
const defaultContentConfig = injector.get(DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CONTENT_CONFIG_TOKEN, null);
|
|
1094
|
+
const contentConfig = mergeObjects([defaultContentConfig, inputContentConfig], KeyValueTypleValueFilter.NULL);
|
|
1095
|
+
const closeConfig = mergeObjects([defaultCloseConfig, contentConfig === null || contentConfig === void 0 ? void 0 : contentConfig.closeConfig, inputCloseConfig], KeyValueTypleValueFilter.NULL);
|
|
1096
|
+
contentConfig.closeConfig = closeConfig;
|
|
1097
|
+
return matDialog.open(DbxScheduleSelectionCalendarDateDialogComponent, Object.assign(Object.assign({ height: 'calc(var(--vh100) * 0.9)', width: '80vw', minHeight: 400, minWidth: 360 }, contentConfig.dialogConfig), { injector, data: {
|
|
1090
1098
|
config,
|
|
1091
|
-
|
|
1092
|
-
}
|
|
1093
|
-
});
|
|
1099
|
+
contentConfig
|
|
1100
|
+
} }));
|
|
1094
1101
|
}
|
|
1095
1102
|
}
|
|
1096
1103
|
DbxScheduleSelectionCalendarDateDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxScheduleSelectionCalendarDateDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -1121,11 +1128,11 @@ class DbxScheduleSelectionCalendarDateDialogButtonComponent {
|
|
|
1121
1128
|
this.buttonText = 'Customize';
|
|
1122
1129
|
}
|
|
1123
1130
|
clickCustomize() {
|
|
1124
|
-
DbxScheduleSelectionCalendarDateDialogComponent.openDialog(this.matDialog, { injector: this.injector, closeConfig: this.closeConfig });
|
|
1131
|
+
DbxScheduleSelectionCalendarDateDialogComponent.openDialog(this.matDialog, { injector: this.injector, contentConfig: this.contentConfig, closeConfig: this.closeConfig });
|
|
1125
1132
|
}
|
|
1126
1133
|
}
|
|
1127
1134
|
DbxScheduleSelectionCalendarDateDialogButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxScheduleSelectionCalendarDateDialogButtonComponent, deps: [{ token: i1$2.MatDialog }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
1128
|
-
DbxScheduleSelectionCalendarDateDialogButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxScheduleSelectionCalendarDateDialogButtonComponent, selector: "dbx-schedule-selection-calendar-date-dialog-button", inputs: { buttonText: "buttonText", closeConfig: "closeConfig" }, ngImport: i0, template: `
|
|
1135
|
+
DbxScheduleSelectionCalendarDateDialogButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxScheduleSelectionCalendarDateDialogButtonComponent, selector: "dbx-schedule-selection-calendar-date-dialog-button", inputs: { buttonText: "buttonText", contentConfig: "contentConfig", closeConfig: "closeConfig" }, ngImport: i0, template: `
|
|
1129
1136
|
<button mat-raised-button color="accent" (click)="clickCustomize()">{{ buttonText }}</button>
|
|
1130
1137
|
`, isInline: true, dependencies: [{ kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
|
|
1131
1138
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxScheduleSelectionCalendarDateDialogButtonComponent, decorators: [{
|
|
@@ -1138,6 +1145,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
1138
1145
|
}]
|
|
1139
1146
|
}], ctorParameters: function () { return [{ type: i1$2.MatDialog }, { type: i0.Injector }]; }, propDecorators: { buttonText: [{
|
|
1140
1147
|
type: Input
|
|
1148
|
+
}], contentConfig: [{
|
|
1149
|
+
type: Input
|
|
1141
1150
|
}], closeConfig: [{
|
|
1142
1151
|
type: Input
|
|
1143
1152
|
}] } });
|
|
@@ -1198,6 +1207,9 @@ class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
|
|
|
1198
1207
|
get closeDialogConfig() {
|
|
1199
1208
|
return this.props.closeDialogConfig;
|
|
1200
1209
|
}
|
|
1210
|
+
get dialogContentConfig() {
|
|
1211
|
+
return this.props.dialogContentConfig;
|
|
1212
|
+
}
|
|
1201
1213
|
get cellContentFactory() {
|
|
1202
1214
|
return this.props.cellContentFactory;
|
|
1203
1215
|
}
|
|
@@ -1247,17 +1259,17 @@ DbxFormCalendarDateScheduleRangeFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({
|
|
|
1247
1259
|
DbxFormCalendarDateScheduleRangeFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxFormCalendarDateScheduleRangeFieldComponent, selector: "ng-component", providers: [provideCalendarScheduleSelectionStoreIfParentIsUnavailable()], usesInheritance: true, ngImport: i0, template: `
|
|
1248
1260
|
<div class="dbx-schedule-selection-field">
|
|
1249
1261
|
<dbx-schedule-selection-calendar-date-range [showCustomize]="showCustomize" [required]="required" [disabled]="isReadonlyOrDisabled" [label]="label" [hint]="description">
|
|
1250
|
-
<dbx-schedule-selection-calendar-date-dialog-button [closeConfig]="closeDialogConfig" customizeButton></dbx-schedule-selection-calendar-date-dialog-button>
|
|
1262
|
+
<dbx-schedule-selection-calendar-date-dialog-button [contentConfig]="dialogContentConfig" [closeConfig]="closeDialogConfig" customizeButton></dbx-schedule-selection-calendar-date-dialog-button>
|
|
1251
1263
|
</dbx-schedule-selection-calendar-date-range>
|
|
1252
1264
|
</div>
|
|
1253
|
-
`, isInline: true, dependencies: [{ kind: "component", type: DbxScheduleSelectionCalendarDateRangeComponent, selector: "dbx-schedule-selection-calendar-date-range", inputs: ["label", "hint", "disabled", "showCustomize", "required"] }, { kind: "component", type: DbxScheduleSelectionCalendarDateDialogButtonComponent, selector: "dbx-schedule-selection-calendar-date-dialog-button", inputs: ["buttonText", "closeConfig"] }] });
|
|
1265
|
+
`, isInline: true, dependencies: [{ kind: "component", type: DbxScheduleSelectionCalendarDateRangeComponent, selector: "dbx-schedule-selection-calendar-date-range", inputs: ["label", "hint", "disabled", "showCustomize", "required"] }, { kind: "component", type: DbxScheduleSelectionCalendarDateDialogButtonComponent, selector: "dbx-schedule-selection-calendar-date-dialog-button", inputs: ["buttonText", "contentConfig", "closeConfig"] }] });
|
|
1254
1266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormCalendarDateScheduleRangeFieldComponent, decorators: [{
|
|
1255
1267
|
type: Component,
|
|
1256
1268
|
args: [{
|
|
1257
1269
|
template: `
|
|
1258
1270
|
<div class="dbx-schedule-selection-field">
|
|
1259
1271
|
<dbx-schedule-selection-calendar-date-range [showCustomize]="showCustomize" [required]="required" [disabled]="isReadonlyOrDisabled" [label]="label" [hint]="description">
|
|
1260
|
-
<dbx-schedule-selection-calendar-date-dialog-button [closeConfig]="closeDialogConfig" customizeButton></dbx-schedule-selection-calendar-date-dialog-button>
|
|
1272
|
+
<dbx-schedule-selection-calendar-date-dialog-button [contentConfig]="dialogContentConfig" [closeConfig]="closeDialogConfig" customizeButton></dbx-schedule-selection-calendar-date-dialog-button>
|
|
1261
1273
|
</dbx-schedule-selection-calendar-date-range>
|
|
1262
1274
|
</div>
|
|
1263
1275
|
`,
|
|
@@ -1443,5 +1455,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
1443
1455
|
* Generated bundle index. Do not edit.
|
|
1444
1456
|
*/
|
|
1445
1457
|
|
|
1446
|
-
export { CalendarScheduleSelectionDayState, DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CLOSE_CONFIG_TOKEN, DEFAULT_SCHEDULE_SELECTION_CALENDAR_DATE_POPOVER_KEY, DbxCalendarScheduleSelectionStore, DbxCalendarScheduleSelectionStoreInjectionBlockDirective, DbxCalendarScheduleSelectionStoreProviderBlock, DbxFormCalendarDateScheduleRangeFieldComponent, DbxFormCalendarModule, DbxFormDateScheduleRangeFieldModule, DbxScheduleSelectionCalendarCellComponent, DbxScheduleSelectionCalendarComponent, DbxScheduleSelectionCalendarDateDaysComponent, DbxScheduleSelectionCalendarDateDaysFormComponent, DbxScheduleSelectionCalendarDateDialogButtonComponent, DbxScheduleSelectionCalendarDateDialogComponent, DbxScheduleSelectionCalendarDatePopoverButtonComponent, DbxScheduleSelectionCalendarDatePopoverComponent, DbxScheduleSelectionCalendarDatePopoverContentComponent, DbxScheduleSelectionCalendarDateRangeComponent, DbxScheduleSelectionCalendarSelectionToggleButtonComponent, calendarScheduleMaxDate, calendarScheduleMinAndMaxDateRange, calendarScheduleMinDate, calendarScheduleStartBeingUsedFromFilter, computeCalendarScheduleSelectionDateBlockRange, computeCalendarScheduleSelectionRange, computeScheduleSelectionRangeAndExclusion, computeScheduleSelectionValue, dateScheduleRangeField, dbxScheduleSelectionCalendarDateDaysFormDayFields, dbxScheduleSelectionCalendarDateDaysFormFields, defaultCalendarScheduleSelectionCellContentFactory, finalizeNewCalendarScheduleSelectionState, initialCalendarScheduleSelectionState, isEnabledDayInCalendarScheduleSelectionState, noSelectionCalendarScheduleSelectionState, provideCalendarScheduleSelectionStoreIfParentIsUnavailable, updateStateWithChangedDates, updateStateWithChangedRange, updateStateWithChangedScheduleDays, updateStateWithComputeSelectionResultRelativeToFilter, updateStateWithDateScheduleRangeValue, updateStateWithExclusions, updateStateWithFilter, updateStateWithInitialSelectionState, updateStateWithMinMaxDateRange, updateStateWithTimezoneValue };
|
|
1458
|
+
export { CalendarScheduleSelectionDayState, DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CLOSE_CONFIG_TOKEN, DEFAULT_DBX_SCHEDULE_SELECTION_CALENDAR_DATE_POPUP_CONTENT_CONFIG_TOKEN, DEFAULT_SCHEDULE_SELECTION_CALENDAR_DATE_POPOVER_KEY, DbxCalendarScheduleSelectionStore, DbxCalendarScheduleSelectionStoreInjectionBlockDirective, DbxCalendarScheduleSelectionStoreProviderBlock, DbxFormCalendarDateScheduleRangeFieldComponent, DbxFormCalendarModule, DbxFormDateScheduleRangeFieldModule, DbxScheduleSelectionCalendarCellComponent, DbxScheduleSelectionCalendarComponent, DbxScheduleSelectionCalendarDateDaysComponent, DbxScheduleSelectionCalendarDateDaysFormComponent, DbxScheduleSelectionCalendarDateDialogButtonComponent, DbxScheduleSelectionCalendarDateDialogComponent, DbxScheduleSelectionCalendarDatePopoverButtonComponent, DbxScheduleSelectionCalendarDatePopoverComponent, DbxScheduleSelectionCalendarDatePopoverContentComponent, DbxScheduleSelectionCalendarDateRangeComponent, DbxScheduleSelectionCalendarSelectionToggleButtonComponent, calendarScheduleMaxDate, calendarScheduleMinAndMaxDateRange, calendarScheduleMinDate, calendarScheduleStartBeingUsedFromFilter, computeCalendarScheduleSelectionDateBlockRange, computeCalendarScheduleSelectionRange, computeScheduleSelectionRangeAndExclusion, computeScheduleSelectionValue, dateScheduleRangeField, dbxScheduleSelectionCalendarDateDaysFormDayFields, dbxScheduleSelectionCalendarDateDaysFormFields, defaultCalendarScheduleSelectionCellContentFactory, finalizeNewCalendarScheduleSelectionState, initialCalendarScheduleSelectionState, isEnabledDayInCalendarScheduleSelectionState, noSelectionCalendarScheduleSelectionState, provideCalendarScheduleSelectionStoreIfParentIsUnavailable, updateStateWithChangedDates, updateStateWithChangedRange, updateStateWithChangedScheduleDays, updateStateWithComputeSelectionResultRelativeToFilter, updateStateWithDateScheduleRangeValue, updateStateWithExclusions, updateStateWithFilter, updateStateWithInitialSelectionState, updateStateWithMinMaxDateRange, updateStateWithTimezoneValue };
|
|
1447
1459
|
//# sourceMappingURL=dereekb-dbx-form-calendar.mjs.map
|