igniteui-angular 17.2.22 → 17.2.23
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/esm2022/lib/calendar/calendar.component.mjs +3 -10
- package/esm2022/lib/calendar/days-view/days-view.component.mjs +3 -3
- package/esm2022/lib/combo/combo.common.mjs +17 -7
- package/esm2022/lib/combo/combo.component.mjs +3 -3
- package/esm2022/lib/date-common/picker-base.directive.mjs +12 -1
- package/esm2022/lib/date-picker/date-picker.component.mjs +10 -7
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +9 -2
- package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +7 -7
- package/esm2022/lib/slider/slider.component.mjs +4 -38
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +55 -2
- package/esm2022/lib/time-picker/time-picker.component.mjs +4 -1
- package/fesm2022/igniteui-angular.mjs +116 -70
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/combo/combo.common.d.ts +3 -0
- package/lib/core/styles/components/input/_input-group-theme.scss +1 -0
- package/lib/date-common/picker-base.directive.d.ts +6 -0
- package/lib/date-picker/date-picker.component.d.ts +2 -0
- package/lib/date-range-picker/date-range-picker.component.d.ts +2 -0
- package/lib/grids/filtering/base/grid-filtering-row.component.d.ts +1 -1
- package/lib/slider/slider.component.d.ts +0 -16
- package/lib/slider/thumb/thumb-slider.component.d.ts +12 -1
- package/lib/time-picker/time-picker.component.d.ts +1 -0
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -354,20 +354,17 @@ export class IgxCalendarComponent extends IgxCalendarBaseDirective {
|
|
|
354
354
|
});
|
|
355
355
|
});
|
|
356
356
|
}
|
|
357
|
-
onWrapperFocus(
|
|
358
|
-
event.stopPropagation();
|
|
357
|
+
onWrapperFocus(_event) {
|
|
359
358
|
this.showActiveDay = true;
|
|
360
359
|
this.monthViews.forEach(view => view.changePreviewRange(this.activeDate));
|
|
361
360
|
}
|
|
362
|
-
onWrapperBlur(
|
|
363
|
-
event.stopPropagation();
|
|
361
|
+
onWrapperBlur(_event) {
|
|
364
362
|
this.showActiveDay = false;
|
|
365
363
|
this.monthViews.forEach(view => view.clearPreviewRange());
|
|
366
364
|
this._onTouchedCallback();
|
|
367
365
|
}
|
|
368
366
|
handleArrowKeydown(event, delta) {
|
|
369
367
|
event.preventDefault();
|
|
370
|
-
event.stopPropagation();
|
|
371
368
|
const date = getClosestActiveDate(CalendarDay.from(this.activeDate), delta, this.disabledDates);
|
|
372
369
|
this.activeDate = date.native;
|
|
373
370
|
const dates = this.viewDates;
|
|
@@ -379,7 +376,6 @@ export class IgxCalendarComponent extends IgxCalendarBaseDirective {
|
|
|
379
376
|
}
|
|
380
377
|
handlePageUpDown(event, delta) {
|
|
381
378
|
event.preventDefault();
|
|
382
|
-
event.stopPropagation();
|
|
383
379
|
const dir = delta > 0 ? "next" /* ScrollDirection.NEXT */ : "prev" /* ScrollDirection.PREV */;
|
|
384
380
|
if (this.activeView === IgxCalendarView.Month && event.shiftKey) {
|
|
385
381
|
this.viewDate = CalendarDay.from(this.viewDate).add('year', delta).native;
|
|
@@ -445,7 +441,6 @@ export class IgxCalendarComponent extends IgxCalendarBaseDirective {
|
|
|
445
441
|
}
|
|
446
442
|
}
|
|
447
443
|
onEnter(event) {
|
|
448
|
-
event.stopPropagation();
|
|
449
444
|
if (this.activeView === IgxCalendarView.Month) {
|
|
450
445
|
this.handleDateSelection(this.activeDate);
|
|
451
446
|
this.cdr.detectChanges();
|
|
@@ -459,7 +454,6 @@ export class IgxCalendarComponent extends IgxCalendarBaseDirective {
|
|
|
459
454
|
this.monthViews.forEach(view => view.clearPreviewRange());
|
|
460
455
|
}
|
|
461
456
|
onHome(event) {
|
|
462
|
-
event.stopPropagation();
|
|
463
457
|
if (this.activeView === IgxCalendarView.Month) {
|
|
464
458
|
const dates = this.monthViews.toArray()
|
|
465
459
|
.flatMap((view) => view.dates.toArray())
|
|
@@ -475,7 +469,6 @@ export class IgxCalendarComponent extends IgxCalendarBaseDirective {
|
|
|
475
469
|
}
|
|
476
470
|
}
|
|
477
471
|
onEnd(event) {
|
|
478
|
-
event.stopPropagation();
|
|
479
472
|
if (this.activeView === IgxCalendarView.Month) {
|
|
480
473
|
const dates = this.monthViews.toArray()
|
|
481
474
|
.flatMap((view) => view.dates.toArray())
|
|
@@ -901,4 +894,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
901
894
|
type: HostListener,
|
|
902
895
|
args: ['mousedown', ['$event']]
|
|
903
896
|
}] } });
|
|
904
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUdaLGdCQUFnQixFQUNiLFlBQVksR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNOLGtDQUFrQyxFQUMvQix1Q0FBdUMsRUFDMUMscUNBQXFDLEVBQ2xDLDhCQUE4QixHQUNqQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8s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QUFFO2dCQVU5QyxRQUFRO3NCQURkLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQVUxQyxVQUFVO3NCQURoQixZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFVN0MsV0FBVztzQkFEakIsU0FBUzt1QkFBQyxhQUFhO2dCQVVqQixXQUFXO3NCQURqQixTQUFTO3VCQUFDLGFBQWE7Z0JBNEliLHVCQUF1QjtzQkFEOUIsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0NBQWtDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVF0SCw0QkFBNEI7c0JBRG5DLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTaEksMEJBQTBCO3NCQURqQyxZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0MxSCxXQUFXO3NCQURwQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHRmb3J3YXJkUmVmLFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdFZpZXdDaGlsZCxcblx0RWxlbWVudFJlZixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Vmlld0NoaWxkcmVuLFxuXHRRdWVyeUxpc3QsXG5cdE9uRGVzdHJveSxcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcbiAgICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdTdHlsZSwgTmdGb3IsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuXHRJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSxcblx0SWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsXG59IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhclZpZXcsIFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vY2FsZW5kYXInO1xuaW1wb3J0IHsgSWd4TW9udGhzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFllYXJzVmlld0NvbXBvbmVudCB9IGZyb20gJy4veWVhcnMtdmlldy95ZWFycy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEYXlzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZGVib3VuY2UsIHNraXBMYXN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hNb250aFZpZXdTbG90c0NhbGVuZGFyLCBJZ3hHZXRWaWV3RGF0ZUNhbGVuZGFyIH0gZnJvbSAnLi9tb250aHMtdmlldy5waXBlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGFyZVNhbWVNb250aCwgZm9ybWF0VG9QYXJ0cywgZ2V0Q2xvc2VzdEFjdGl2ZURhdGUsIGlzRGF0ZUluUmFuZ2VzIH0gZnJvbSAnLi9jb21tb24vaGVscGVycyc7XG5pbXBvcnQgeyBDYWxlbmRhckRheSB9IGZyb20gJy4vY29tbW9uL21vZGVsJztcbmltcG9ydCB7IElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vY2FsZW5kYXItYmFzZSc7XG5pbXBvcnQgeyBLZXlib2FyZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jYWxlbmRhci5zZXJ2aWNlcyc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBDYWxlbmRhciBwcm92aWRlcyBhIHdheSB0byBkaXNwbGF5IGRhdGUgaW5mb3JtYXRpb24uXG4gKlxuICogQGlneE1vZHVsZSBJZ3hDYWxlbmRhck1vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1pY29uLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNhbGVuZGFyLCBkYXRlcGlja2VyLCBzY2hlZHVsZSwgZGF0ZVxuICpcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQ2FsZW5kYXIgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gZGlzcGxheSBhIGNhbGVuZGFyIGFuZCBhbGxvdyB1c2VycyB0byBzZWxlY3QgZGF0ZXMgdXNpbmcgc2luZ2xlLCBtdWx0aXBsZVxuICogb3IgcmFuZ2Ugc2VsZWN0aW9uLlxuICpcbiAqIEBleGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1jYWxlbmRhciBzZWxlY3Rpb249XCJyYW5nZVwiPjwvaWd4LWNhbGVuZGFyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IElneENhbGVuZGFyQ29tcG9uZW50LFxuXHRcdH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG11bHRpOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGU6IEtleWJvYXJkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIH0sXG5cdF0sXG5cdHNlbGVjdG9yOiAnaWd4LWNhbGVuZGFyJyxcblx0dGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsIE5nU3R5bGUsIElneEljb25Db21wb25lbnQsIE5nRm9yLCBJZ3hEYXlzVmlld0NvbXBvbmVudCwgSWd4TW9udGhzVmlld0NvbXBvbmVudCwgSWd4WWVhcnNWaWV3Q29tcG9uZW50LCBEYXRlUGlwZSwgSWd4TW9udGhWaWV3U2xvdHNDYWxlbmRhciwgSWd4R2V0Vmlld0RhdGVDYWxlbmRhcl0sXG59KVxuZXhwb3J0IGNsYXNzIElneENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgSWd4Q2FsZW5kYXJCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGVzY2VuZGFudDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoXCJ3cmFwcGVyXCIpXG4gICAgcHVibGljIHdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgY2FsZW5kYXIuXG5cdCAqXG5cdCAqIEByZW1hcmtzXG5cdCAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJpZ3gtY2FsZW5kYXItMFwiYC5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIGlkPVwibXktZmlyc3QtY2FsZW5kYXJcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcblx0QElucHV0KClcblx0cHVibGljIGlkID0gYGlneC1jYWxlbmRhci0keyBORVhUX0lEKysgfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGFzIGhlYWRlci5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW2hhc0hlYWRlcl09XCJmYWxzZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBoYXNIZWFkZXIgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIGhlYWRlciB3aWxsIGJlIGluIHZlcnRpY2FsIHBvc2l0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW3ZlcnRpY2FsXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyT3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cblx0ICogRGVmYXVsdCB2YWx1ZSBpcyBgMWAuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBbbW9udGhzVmlld051bWJlcl09XCIyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KClcblx0cHVibGljIGdldCBtb250aHNWaWV3TnVtYmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9tb250aHNWaWV3TnVtYmVyO1xuXHR9XG5cbiAgICBwdWJsaWMgc2V0IG1vbnRoc1ZpZXdOdW1iZXIodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cdFx0dGhpcy5fbW9udGhzVmlld051bWJlciA9IHZhbDtcblx0fVxuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyLS12ZXJ0aWNhbCcpXG5cdHB1YmxpYyBnZXQgc3R5bGVWZXJ0aWNhbENsYXNzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSAndmVydGljYWwnO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcicpXG5cdHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuXHQvKipcblx0ICogTW9udGggYnV0dG9uLCB0aGF0IGRpc3BsYXlzIHRoZSBtb250aHMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGRyZW4oJ21vbnRoc0J0bicpXG5cdHB1YmxpYyBtb250aHNCdG5zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRlY2FkZSB2aWV3LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnZGVjYWRlJywgeyByZWFkOiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIGRhY2FkZVZpZXc6IElneFllYXJzVmlld0NvbXBvbmVudDtcblxuXHQvKipcblx0ICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgbW9udGhzIHZpZXcuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdtb250aHMnLCB7IHJlYWQ6IElneE1vbnRoc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoc1ZpZXc6IElneE1vbnRoc1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRheXMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ2RheXMnLCB7IHJlYWQ6IElneERheXNWaWV3Q29tcG9uZW50IH0pXG5cdHB1YmxpYyBkYXlzVmlldzogSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZHJlbmRlbiByZXByZXNlbnRpbmcgYWxsIG9mIHRoZSByZW5kZXJlZCBkYXlzIHZpZXdzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZHJlbignZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoVmlld3M6IFF1ZXJ5TGlzdDxJZ3hEYXlzVmlld0NvbXBvbmVudD47XG5cblx0LyoqXG5cdCAqIEJ1dHRvbiBmb3IgcHJldmlvdXMgbW9udGguXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdwcmV2UGFnZUJ0bicpXG5cdHB1YmxpYyBwcmV2UGFnZUJ0bjogRWxlbWVudFJlZjtcblxuXHQvKipcblx0ICogQnV0dG9uIGZvciBuZXh0IG1vbnRoLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnbmV4dFBhZ2VCdG4nKVxuXHRwdWJsaWMgbmV4dFBhZ2VCdG46IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIERlbm90ZSBpZiB0aGUgeWVhciB2aWV3IGlzIGFjdGl2ZS5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXQgaXNZZWFyVmlldygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlclRpdGxlVGVtcGxhdGUgPSB0aGlzLmNhbGVuZGFyLmhlYWRlclRpdGxlVGVhbXBsYXRlO1xuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoKTogYW55IHtcblx0XHRpZiAodGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlPVwiaWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBoZWFkZXJUZW1wbGF0ZSA9ICB0aGlzLmNhbGVuZGFyLmhlYWRlclRlYW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGdldCBoZWFkZXJUZW1wbGF0ZSgpOiBhbnkge1xuXHRcdGlmICh0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU9XCJpZ3hDYWxlbmRhckhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IHN1YmhlYWRlclRlbXBsYXRlID0gdGhpcy5jYWxlbmRhci5zdWJoZWFkZXJUZW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHN1YmhlYWRlclRlbXBsYXRlKCk6IGFueSB7XG5cdFx0aWYgKHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBzdWJoZWFkZXJUZW1wbGF0ZT1cImlneENhbGVuZGFyU3ViaGVhZGVyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBzZXQgc3ViaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgZm9yIHRoZSB0ZW1wbGF0ZSBtYXJrZWQgd2l0aCB0aGUgYGlneENhbGVuZGFySGVhZGVyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlckNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5oZWFkZXJDb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVhZGVyQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQodGhpcy5oZWFkZXJEYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggZWl0aGVyIGBpZ3hDYWxlbmRhclN1YkhlYWRlck1vbnRoYFxuXHQgKiBvciBgaWd4Q2FsZW5kYXJTdWJIZWFkZXJZZWFyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5jb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgY29udGV4dCgpIHtcblx0XHRjb25zdCBkYXRlOiBEYXRlID0gdGhpcy52aWV3RGF0ZTtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGF0ZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlckRhdGUoKTogRGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcz8uYXQoMCkgPz8gbmV3IERhdGUoKTtcblx0fVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBzdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBhY3RpdmVEYXRlID0gQ2FsZW5kYXJEYXkudG9kYXkubmF0aXZlO1xuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIHByZXZpZXdSYW5nZURhdGU6IERhdGU7XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG5leHREYXRlOiBEYXRlO1xuXG5cdC8qKlxuXHQgKiBEZW5vdGUgaWYgdGhlIGNhbGVuZGFyIHZpZXcgd2FzIGNoYW5nZWQgd2l0aCB0aGUga2V5Ym9hcmRcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dBY3RpdmVEYXk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBzZXQgc2hvd0FjdGl2ZURheSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHNob3dBY3RpdmVEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlRGVzY2VuZGFudCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlLmdldFRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEZXNjZW5kYW50ID8/IHRoaXMudmlld0RhdGUuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXQgYWN0aXZlRGVzY2VuZGFudChkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURlc2NlbmRhbnQgPSBkYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25cbiAgICAgICAgICAgIC5hdHRhY2hLZXlib2FyZEhhbmRsZXJzKHRoaXMud3JhcHBlciwgdGhpcylcbiAgICAgICAgICAgIC5zZXQoXCJBcnJvd1VwXCIsIHRoaXMub25BcnJvd1VwKVxuICAgICAgICAgICAgLnNldChcIkFycm93RG93blwiLCB0aGlzLm9uQXJyb3dEb3duKVxuICAgICAgICAgICAgLnNldChcIkFycm93TGVmdFwiLCB0aGlzLm9uQXJyb3dMZWZ0KVxuICAgICAgICAgICAgLnNldChcIkFycm93UmlnaHRcIiwgdGhpcy5vbkFycm93UmlnaHQpXG4gICAgICAgICAgICAuc2V0KFwiRW50ZXJcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIiBcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIkhvbWVcIiwgdGhpcy5vbkhvbWUpXG4gICAgICAgICAgICAuc2V0KFwiRW5kXCIsIHRoaXMub25FbmQpXG4gICAgICAgICAgICAuc2V0KFwiUGFnZVVwXCIsIHRoaXMuaGFuZGxlUGFnZVVwKVxuICAgICAgICAgICAgLnNldChcIlBhZ2VEb3duXCIsIHRoaXMuaGFuZGxlUGFnZURvd24pO1xuXG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB0aGlzLm9uV3JhcHBlckZvY3VzKGV2ZW50KSk7XG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHRoaXMub25XcmFwcGVyQmx1cihldmVudCkpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNjcm9sbFBhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcExhc3QoMSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2UoKCkgPT4gaW50ZXJ2YWwoMzAwKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbi5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3JC5zdWJzY3JpYmUoKHZpZXcpID0+IHtcblx0XHRcdHRoaXMuYWN0aXZlVmlld0NoYW5nZWQuZW1pdCh2aWV3KTtcblxuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5wcmV2aW91c1ZpZXdEYXRlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52aWV3RGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XcmFwcGVyRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2godmlldyA9PiB2aWV3LmNoYW5nZVByZXZpZXdSYW5nZSh0aGlzLmFjdGl2ZURhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uV3JhcHBlckJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlLm5hdGl2ZTtcblxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmlld0RhdGVzO1xuICAgICAgICBjb25zdCBpc0RhdGVJblZpZXcgPSBkYXRlcy5zb21lKGQgPT4gZC5kYXRlLmVxdWFsVG8odGhpcy5hY3RpdmVEYXRlKSk7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcblxuICAgICAgICBpZiAoIWlzRGF0ZUluVmlldykge1xuICAgICAgICAgICAgZGVsdGEgPiAwID8gdGhpcy5uZXh0UGFnZSh0cnVlKSA6IHRoaXMucHJldmlvdXNQYWdlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQYWdlVXBEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpciA9IGRlbHRhID4gMCA/IFNjcm9sbERpcmVjdGlvbi5ORVhUIDogU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCBkZWx0YSkubmF0aXZlO1xuICAgICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoZmFsc2UsIGRpcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZVBhZ2VVcERvd24oZXZlbnQsIC0xKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUGFnZVVwRG93bihldmVudCwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTcpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkFycm93RG93bihldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dEb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd0xlZnQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkFycm93TGVmdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dSaWdodChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGVTZWxlY3Rpb24odGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW50ZXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkVudGVyKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSG9tZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKCh2aWV3KSA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChkKSA9PiBkLmlzQ3VycmVudE1vbnRoICYmIGQuaXNGb2N1c2FibGUpO1xuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlcy5hdCgwKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKHZpZXcpID0+IHZpZXcuZGF0ZXMudG9BcnJheSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNDdXJyZW50TW9udGggJiYgZC5pc0ZvY3VzYWJsZSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGVzLmF0KC0xKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW5kKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25FbmQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsb2NhbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGluIHRoZSBtb250aCB2aWV3IGlmIGVuYWJsZWQsXG5cdCAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGBEYXRlLmdldE1vbnRoKClgIHZhbHVlLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGZvcm1hdHRlZE1vbnRoKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5mb3JtYXRWaWV3cy5tb250aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0dGVyTW9udGguZm9ybWF0KHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7IHZhbHVlLmdldE1vbnRoKCkgfWA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRvIHByZXZpb3VzIHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBwcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG5cdFx0aWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uTkVYVCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoaXNLZXlkb3duVHJpZ2dlciwgU2Nyb2xsRGlyZWN0aW9uLlBSRVYpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0byBuZXh0IHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBuZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcblx0XHRpZiAoaXNLZXlkb3duVHJpZ2dlciAmJiB0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG4gICAgICAgIHRoaXMuY2hhbmdlUGFnZShpc0tleWRvd25UcmlnZ2VyLCBTY3JvbGxEaXJlY3Rpb24uTkVYVCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgY3VycmVudCBwYWdlXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBjaGFuZ2VQYWdlKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSwgZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuXHRcdHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IGlzS2V5ZG93blRyaWdnZXI7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAxKS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMucHJldmlvdXNWaWV3RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZpZXdEYXRlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUFJFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDEpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImRlY2FkZVwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIC0xNSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDE1KS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBYWFg6IFdoeSBvbmx5IHdoZW4gaXQncyBub3QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkP1xuICAgICAgICBpZiAoIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBDb250aW5pb3VzIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgcHJldmlvdXMgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydFByZXZQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cdFx0dGhpcy5wcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlcik7XG5cdH1cblxuXHQvKipcblx0ICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIG5leHQgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydE5leHRQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQ7XG5cdFx0dGhpcy5uZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIHN0b3BQYWdlU2Nyb2xsID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHR0aGlzLnN0b3BQYWdlU2Nyb2xsJC5uZXh0KHRydWUpO1xuXHRcdHRoaXMuc3RvcFBhZ2VTY3JvbGwkLmNvbXBsZXRlKCk7XG5cblx0XHRpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG5cdFx0XHR0aGlzLnJlc2V0QWN0aXZlRGF0ZSh0aGlzLnZpZXdEYXRlKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEaXJlY3Rpb24uTk9ORTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZShldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlKGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZUtCKGRhdGU6IERhdGUsIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpIHtcblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFjdGl2ZVZpZXdJZHgpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwdWJsaWMgb25ZZWFyc1ZpZXdDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWQgPyBldmVudC5jb21wb3NlZFBhdGgoKSA6IFtldmVudC50YXJnZXRdO1xuICAgICAgICBjb25zdCB5ZWFycyA9IHRoaXMuZGFjYWRlVmlldy52aWV3SXRlbXMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCB2YWxpZFRhcmdldCA9IHllYXJzLnNvbWUoeWVhciA9PiBwYXRoLmluY2x1ZGVzKHllYXIubmF0aXZlRWxlbWVudCkpO1xuXG4gICAgICAgIGlmICh2YWxpZFRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvblllYXJzVmlld0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkRGF0ZSgpOiB7IHdlZWtkYXk6IHN0cmluZzsgbW9udGhkYXk6IHN0cmluZyB9IHtcblx0XHRjb25zdCBkYXRlID0gdGhpcy5oZWFkZXJEYXRlO1xuICAgICAgICBjb25zdCBtb250aEZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJyB9KVxuICAgICAgICBjb25zdCBkYXlGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9udGhkYXk6IG1vbnRoRm9ybWF0dGVyLmZvcm1hdChkYXRlKSxcblx0XHRcdHdlZWtkYXk6IGRheUZvcm1hdHRlci5mb3JtYXQoZGF0ZSksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldEZvcm1hdHRlZFJhbmdlKCk6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB7XG5cdFx0Y29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMgYXMgRGF0ZVtdO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiB0aGlzLmZvcm1hdHRlclJhbmdlZGF5LmZvcm1hdChkYXRlcy5hdCgwKSksXG5cdFx0XHRlbmQ6IHRoaXMuZm9ybWF0dGVyUmFuZ2VkYXkuZm9ybWF0KGRhdGVzLmF0KC0xKSlcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBnZXQgdmlld0RhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZsYXRNYXAodmlldyA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkLmlzQ3VycmVudE1vbnRoKTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgaW52b2tlZCBvbiBkYXRlIHNlbGVjdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGhhbmRsZURhdGVTZWxlY3Rpb24oZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCBvdXRPZlJhbmdlID0gIXRoaXMudmlld0RhdGVzLnNvbWUoZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZC5kYXRlLmVxdWFsVG8oZGF0ZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG91dE9mUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICB9XG5cblx0XHR0aGlzLnNlbGVjdERhdGUoZGF0ZSk7XG5cbiAgICAgICAgLy8ga2VlcCB2aWV3cyBpbiBzeW5jXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2hpZnRLZXkgPSB0aGlzLnNoaWZ0S2V5O1xuICAgICAgICAgICAgbS5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuICAgICAgICAgICAgbS5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAnc2luZ2xlJykge1xuXHRcdCAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcblx0XHQgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcy5hdCgwKSk7XG4gICAgICAgIH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuXHRwdWJsaWMgY2hhbmdlTW9udGgoZGF0ZTogRGF0ZSkge1xuXHRcdHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgnbW9udGgnLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdFx0dGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoO1xuICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZShkYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjaGFuZ2VZZWFyKGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC10aGlzLmFjdGl2ZVZpZXdJZHgpLm5hdGl2ZTtcblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVuYWxcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVZZWFyKGRhdGU6IERhdGUpIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ3llYXInLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdH1cblxuICAgIHB1YmxpYyB1cGRhdGVBY3RpdmVEZXNjZW5kYW50KGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gZGF0ZTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgb25BY3RpdmVWaWV3WWVhcihldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0XHR0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld1llYXJLQihkYXRlOiBEYXRlLCBldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuXHRcdCAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlc2VsZWN0cyBkYXRlKHMpIChiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIHR5cGUpLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZShuZXcgRGF0ZShgMjAxOC0wNi0xMmApKTtcblx0ICogYGBgYFxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGRlc2VsZWN0RGF0ZSh2YWx1ZT86IERhdGUgfCBEYXRlW10gfCBzdHJpbmcpIHtcblx0XHRzdXBlci5kZXNlbGVjdERhdGUodmFsdWUpO1xuXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblx0XHRcdG0ucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBtLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEdldHRlciBmb3IgdGhlIGNvbnRleHQgb2JqZWN0IGluc2lkZSB0aGUgY2FsZW5kYXIgdGVtcGxhdGVzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldENvbnRleHQoaTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCBpKS5uYXRpdmU7XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUsIGkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIC8vIFRPRE86IFNlZSBpZiB0aGlzIGNhbiBiZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIERheXNWaWV3IGRpcmVjdGx5XG5cdHB1YmxpYyByZXNldEFjdGl2ZURhdGUoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSkuc2V0KHtcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG91dE9mUmFuZ2UgPVxuICAgICAgICAgICAgIWFyZVNhbWVNb250aChkYXRlLCB0YXJnZXQpIHx8XG4gICAgICAgICAgICBpc0RhdGVJblJhbmdlcyh0YXJnZXQsIHRoaXMuZGlzYWJsZWREYXRlcyk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gb3V0T2ZSYW5nZSA/IGRhdGUgOiB0YXJnZXQubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uLmRldGFjaEtleWJvYXJkSGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy53cmFwcGVyPy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldyYXBwZXJGb2N1cyk7XG4gICAgICAgIHRoaXMud3JhcHBlcj8ubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbldyYXBwZXJCbHVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldFByZXZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC0xKS5uYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZTogRGF0ZSwgdmlld0luZGV4OiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIHZpZXdJbmRleCkubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlIHRoZSBjYWxlbmRhciB0ZW1wbGF0ZXMuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSB8IERhdGVbXSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3QgPSAoZGF0ZTogRGF0ZSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAuLi5mb3JtYXRUb1BhcnRzKGRhdGUsIHRoaXMubG9jYWxlLCB0aGlzLmZvcm1hdE9wdGlvbnMsIFtcbiAgICAgICAgICAgICAgICBcImVyYVwiLFxuICAgICAgICAgICAgICAgIFwieWVhclwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhcIixcbiAgICAgICAgICAgICAgICBcImRheVwiLFxuICAgICAgICAgICAgICAgIFwid2Vla2RheVwiLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1hdE9iamVjdCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgoZGF0ZSwgaW5kZXgpID0+IGNvbnN0cnVjdChkYXRlLCBpbmRleCkpXG4gICAgICAgICAgICA6IGNvbnN0cnVjdCh2YWx1ZSwgaSk7XG5cbiAgICAgICAgcmV0dXJuIHsgJGltcGxpY2l0OiBmb3JtYXRPYmplY3QgfTtcblx0fVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1yZXN1bHQgI2RlZmF1bHRIZWFkZXJUaXRsZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9kYXRlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdyYW5nZSdcIj5cbiAgICAgICAgPHNwYW4+e3sgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9wbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0SGVhZGVyRGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyBnZXRGb3JtYXR0ZWREYXRlKCkud2Vla2RheSB9fSwmbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS5tb250aGRheSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwID8gJ1N0YXJ0JyA6IGdldEZvcm1hdHRlZFJhbmdlKCkuc3RhcnR9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+Jm5ic3A7LSZuYnNwOzwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWREYXRlcy5sZW5ndGggPD0gMSA/ICdFbmQnIDogZ2V0Rm9ybWF0dGVkUmFuZ2UoKS5lbmR9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRNb250aCBsZXQtb2JqPlxuICAgIDxzcGFuXG4gICAgICAgICNtb250aHNCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKG9iai5kYXRlIHwgZGF0ZTogJ0xMTEwnKSArICcsICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9tb250aFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld1llYXJLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdZZWFyKCRldmVudCwgb2JqLmRhdGUsIG9iai5pbmRleClcIlxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAge3sgZm9ybWF0dGVkTW9udGgob2JqLmRhdGUpIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBZZWFyIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0WWVhciBsZXQtb2JqPlxuICAgIDxzcGFuICpuZ0lmPVwiYWN0aXZlVmlldyA9PT0gJ3llYXInXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPnt7IGZvcm1hdHRlZFllYXIob2JqLmRhdGUpIH19PC9zcGFuPlxuICAgIDxzcGFuXG4gICAgICAgICN5ZWFyc0J0blxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob2JqLmRhdGUgfCBkYXRlOiAneXl5eScpICsgJywgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X3llYXJcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGVLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGUoJGV2ZW50LCBvYmouZGF0ZSwgb2JqLmluZGV4KVwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZVwiPlxuICAgICAgICB7eyBmb3JtYXR0ZWRZZWFyKG9iai5kYXRlKSB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggWWVhciAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1vbnRoWWVhciBsZXQtb2JqIGxldC1yZXN1bHQ+XG4gICAgPHNwYW4gKm5nSWY9XCJtb250aHNWaWV3TnVtYmVyIDwgMiB8fCBvYmouaW5kZXggPCAxXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAocmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9maXJzdF9waWNrZXJfb2YucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSArICcgJyArXG4gICAgICAgICAgICAob2JqLmRhdGUgfCBkYXRlOiAnTExMTCB5eXl5JykpIDpcbiAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RlZF9tb250aF9pcyArIChvYmouZGF0ZSB8IGRhdGU6ICdMTExMIHl5eXknKX19XG4gICAgPC9zcGFuPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0TW9udGg7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmYXVsdFllYXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRGVjYWRlIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RGVjYWRlPlxuICAgIDxzcGFuPnt7IGdldERlY2FkZVJhbmdlKCkuc3RhcnQgfX0gLSB7eyBnZXREZWNhZGVSYW5nZSgpLmVuZCB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVE9ETzogTWFrZSBhcnJvd3MgdGVtcGxhdGFibGUgdmlhIGV4dGVybmFsIHRlbXBsYXRlcyBhbmQgYmFzZWQgb24gdGhlbWUgLS0+XG48IS0tIFByZXZpb3VzIGFycm93IGljb24gLS0+XG48bmctdGVtcGxhdGUgI3ByZXZBcnJvdyBsZXQtb2JqPlxuICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIj5rZXlib2FyZF9hcnJvd19sZWZ0PC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTmV4dCBhcnJvdyBpY29uIC0tPlxuPG5nLXRlbXBsYXRlICNuZXh0QXJyb3cgbGV0LW9iaj5cbiAgICA8aWd4LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQcmV2aW91cyBwaWNrZXIgYnV0dG9uIC0tPlxuPG5nLXRlbXBsYXRlICNwcmV2UGFnZUJ1dHRvbiBsZXQtb2JqPlxuICAgIDxkaXZcbiAgICAgICAgI3ByZXZQYWdlQnRuXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fcHJldlwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZOYXZMYWJlbCgoZ2V0UHJldk1vbnRoKHZpZXdEYXRlKSB8IGRhdGU6ICdMTExMJykpXCJcbiAgICAgICAgZGF0YS1hY3Rpb249XCJwcmV2XCJcbiAgICAgICAgaWd4Q2FsZW5kYXJTY3JvbGxQYWdlXG4gICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydFByZXZQYWdlU2Nyb2xsXCJcbiAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcFBhZ2VTY3JvbGxcIlxuICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZBcnJvd1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOZXh0IHBpY2tlciBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI25leHRQYWdlQnV0dG9uIGxldC1vYmo+XG4gICAgPGRpdlxuICAgICAgICAjbmV4dFBhZ2VCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uZXh0XCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dE5hdkxhYmVsKChnZXROZXh0TW9udGgodmlld0RhdGUsIG1vbnRoc1ZpZXdOdW1iZXIpIHwgZGF0ZTogJ0xMTEwnKSlcIlxuICAgICAgICBkYXRhLWFjdGlvbj1cIm5leHRcIlxuICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbFBhZ2VcbiAgICAgICAgW3N0YXJ0U2Nyb2xsXT1cInN0YXJ0TmV4dFBhZ2VTY3JvbGxcIlxuICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wUGFnZVNjcm9sbFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dEFycm93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBEQVlTIC0tPlxuPG5nLXRlbXBsYXRlICNjYWxlbmRhckRheXNQaWNrZXIgbGV0LWk+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyXCIgW3N0eWxlLi0tY2FsZW5kYXItcm93LXN0YXJ0XT1cIjEgKyAoMiAqIGkpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlc1wiIFthdHRyLmRhdGEtbW9udGhdPVwiaSB8IElneEdldFZpZXdEYXRlOnZpZXdEYXRlOmZhbHNlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ViaGVhZGVyVGVtcGxhdGUgPyBzdWJoZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRNb250aFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoaSlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uYXZcIlxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyBpID09PSBtb250aHNWaWV3TnVtYmVyIC0gMSA6IGkgPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBNT05USFMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyWWVhclBpY2tlcj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoMClcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQSUNLRVIgSU4gWUVBUlMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyRGVjYWRlUGlja2VyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdERlY2FkZTtcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48aGVhZGVyXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGggaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlclwiXG4gICAgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnICYmIGhhc0hlYWRlciB8fCBzZWxlY3Rpb24gPT09ICdyYW5nZScgJiYgaGFzSGVhZGVyXCI+XG4gICAgPGg1IGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXIteWVhclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGl0bGVUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyVGl0bGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g1PlxuICAgIDxoMiBpZD1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLW1vbnRoXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci1kYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZSA/IGhlYWRlclRlbXBsYXRlIDogZGVmYXVsdEhlYWRlckRhdGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbjwvaGVhZGVyPlxuXG5cbjxkaXZcbiAgICAjd3JhcHBlclxuICAgIFtzdHlsZS4tLWNhbGVuZGFyLW1vbnRoc109XCJtb250aHNWaWV3TnVtYmVyXCJcbiAgICBbdGFiSW5kZXhdPVwiMFwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX3dyYXBwZXJcIlxuICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3dyYXBwZXItLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwic2VsZWN0aW9uICE9PSAnc2luZ2xlJ1wiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiY2FsZW5kYXItZGVzY1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgID5cbiAgICA8Y2FwdGlvbiBpZD1cImNhbGVuZGFyLWRlc2NcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnbXVsdGknXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfbXVsdGlfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9tdWx0aV9zZWxlY3Rpb259fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/XG4gICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfcmFuZ2Vfc2VsZWN0aW9ufX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ2xlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfc2luZ2xlX3NlbGVjdGlvbn19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2FwdGlvbj5cbiAgICA8c2VjdGlvblxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9fcGlja2Vyc1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLWRheXNdPVwiaXNEZWZhdWx0Vmlld1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckRheXNQaWNrZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzWWVhclZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhclllYXJQaWNrZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyRGVjYWRlUGlja2VyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19ib2R5XCIgW2NsYXNzLmlneC1jYWxlbmRhcl9fYm9keS0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxpZ3gtZGF5cy12aWV3XG4gICAgICAgICAgICAgICAgICAgICNkYXlzXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKHByZXZpZXdSYW5nZURhdGUpXT1cInByZXZpZXdSYW5nZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0RhdGVdPVwiaSB8IElneEdldFZpZXdEYXRlOiB2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwid2Vla1N0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdE9wdGlvbnNdPVwiZm9ybWF0T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3c109XCJmb3JtYXRWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWNhbGVuZGFyLXJvdy1zdGFydF09XCIoaSArIDEpICogMlwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlTGVhZGluZ0RheXNdPVwiaGlkZU91dHNpZGVEYXlzIHx8IGkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZVRyYWlsaW5nRGF5c109XCJoaWRlT3V0c2lkZURheXMgfHwgaSAhPT0gbW9udGhzVmlld051bWJlciAtIDFcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QWN0aXZlRGF5XT1cInNob3dBY3RpdmVEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKHN3aXBlbGVmdCk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJoYW5kbGVEYXRlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAgPC9pZ3gtZGF5cy12aWV3PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1llYXJWaWV3XCI+XG4gICAgICAgICAgICA8aWd4LW1vbnRocy12aWV3XG4gICAgICAgICAgICAgICAgI21vbnRoc1xuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLm1vbnRoXCJcbiAgICAgICAgICAgICAgICBbbW9udGhGb3JtYXRdPVwiZm9ybWF0T3B0aW9ucy5tb250aFwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VNb250aCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICA8L2lneC1tb250aHMtdmlldz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPGlneC15ZWFycy12aWV3XG4gICAgICAgICAgICAgICAgI2RlY2FkZVxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLnllYXJcIlxuICAgICAgICAgICAgICAgIFt5ZWFyRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMueWVhclwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDwvaWd4LXllYXJzLXZpZXc+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19
|
|
897
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUdaLGdCQUFnQixFQUNiLFlBQVksR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNOLGtDQUFrQyxFQUMvQix1Q0FBdUMsRUFDMUMscUNBQXFDLEVBQ2xDLDhCQUE4QixHQUNqQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8s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QXVCO3NCQUQ5QixZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUXRILDRCQUE0QjtzQkFEbkMsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUNBQXVDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVNoSSwwQkFBMEI7c0JBRGpDLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFDQUFxQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFzQzFILFdBQVc7c0JBRHBCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdGZvcndhcmRSZWYsXG5cdEhvc3RCaW5kaW5nLFxuXHRJbnB1dCxcblx0Vmlld0NoaWxkLFxuXHRFbGVtZW50UmVmLFxuXHRBZnRlclZpZXdJbml0LFxuXHRWaWV3Q2hpbGRyZW4sXG5cdFF1ZXJ5TGlzdCxcblx0T25EZXN0cm95LFxuXHRib29sZWFuQXR0cmlidXRlLFxuICAgIEhvc3RMaXN0ZW5lcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ1N0eWxlLCBOZ0ZvciwgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7XG5cdElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLFxuXHRJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneENhbGVuZGFyU2Nyb2xsUGFnZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi9jYWxlbmRhci5kaXJlY3RpdmVzJztcbmltcG9ydCB7IElneENhbGVuZGFyVmlldywgU2Nyb2xsRGlyZWN0aW9uIH0gZnJvbSAnLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBJZ3hNb250aHNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9tb250aHMtdmlldy9tb250aHMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4WWVhcnNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneERheXNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBkZWJvdW5jZSwgc2tpcExhc3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneE1vbnRoVmlld1Nsb3RzQ2FsZW5kYXIsIElneEdldFZpZXdEYXRlQ2FsZW5kYXIgfSBmcm9tICcuL21vbnRocy12aWV3LnBpcGUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgYXJlU2FtZU1vbnRoLCBmb3JtYXRUb1BhcnRzLCBnZXRDbG9zZXN0QWN0aXZlRGF0ZSwgaXNEYXRlSW5SYW5nZXMgfSBmcm9tICcuL2NvbW1vbi9oZWxwZXJzJztcbmltcG9ydCB7IENhbGVuZGFyRGF5IH0gZnJvbSAnLi9jb21tb24vbW9kZWwnO1xuaW1wb3J0IHsgSWd4Q2FsZW5kYXJCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9jYWxlbmRhci1iYXNlJztcbmltcG9ydCB7IEtleWJvYXJkTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFyLnNlcnZpY2VzJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIENhbGVuZGFyIHByb3ZpZGVzIGEgd2F5IHRvIGRpc3BsYXkgZGF0ZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAaWd4TW9kdWxlIElneENhbGVuZGFyTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1jYWxlbmRhci10aGVtZSwgaWd4LWljb24tdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgY2FsZW5kYXIsIGRhdGVwaWNrZXIsIHNjaGVkdWxlLCBkYXRlXG4gKlxuICogQGlneEdyb3VwIFNjaGVkdWxpbmdcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBDYWxlbmRhciBwcm92aWRlcyBhbiBlYXN5IHdheSB0byBkaXNwbGF5IGEgY2FsZW5kYXIgYW5kIGFsbG93IHVzZXJzIHRvIHNlbGVjdCBkYXRlcyB1c2luZyBzaW5nbGUsIG11bHRpcGxlXG4gKiBvciByYW5nZSBzZWxlY3Rpb24uXG4gKlxuICogQGV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LWNhbGVuZGFyIHNlbGVjdGlvbj1cInJhbmdlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdG11bHRpOiB0cnVlLFxuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogSWd4Q2FsZW5kYXJDb21wb25lbnQsXG5cdFx0fSxcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZTogS2V5Ym9hcmROYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgfSxcblx0XSxcblx0c2VsZWN0b3I6ICdpZ3gtY2FsZW5kYXInLFxuXHR0ZW1wbGF0ZVVybDogJ2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW05nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIElneENhbGVuZGFyU2Nyb2xsUGFnZURpcmVjdGl2ZSwgTmdTdHlsZSwgSWd4SWNvbkNvbXBvbmVudCwgTmdGb3IsIElneERheXNWaWV3Q29tcG9uZW50LCBJZ3hNb250aHNWaWV3Q29tcG9uZW50LCBJZ3hZZWFyc1ZpZXdDb21wb25lbnQsIERhdGVQaXBlLCBJZ3hNb250aFZpZXdTbG90c0NhbGVuZGFyLCBJZ3hHZXRWaWV3RGF0ZUNhbGVuZGFyXSxcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJDb21wb25lbnQgZXh0ZW5kcyBJZ3hDYWxlbmRhckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hY3RpdmVEZXNjZW5kYW50OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChcIndyYXBwZXJcIilcbiAgICBwdWJsaWMgd3JhcHBlcjogRWxlbWVudFJlZjtcblxuXHQvKipcblx0ICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBjYWxlbmRhci5cblx0ICpcblx0ICogQHJlbWFya3Ncblx0ICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1jYWxlbmRhci0wXCJgLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgaWQ9XCJteS1maXJzdC1jYWxlbmRhclwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuXHRASW5wdXQoKVxuXHRwdWJsaWMgaWQgPSBgaWd4LWNhbGVuZGFyLSR7IE5FWFRfSUQrKyB9YDtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjYWxlbmRhciBoYXMgaGVhZGVyLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbaGFzSGVhZGVyXT1cImZhbHNlXCI+PC9pZ3gtY2FsZW5kYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGhhc0hlYWRlciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGVhZGVyIHdpbGwgYmUgaW4gdmVydGljYWwgcG9zaXRpb24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbdmVydGljYWxdPVwidHJ1ZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWFkZXJPcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcblxuXHQvKipcblx0ICogU2V0cy9nZXRzIHRoZSBudW1iZXIgb2YgbW9udGggdmlld3MgZGlzcGxheWVkLlxuXHQgKiBEZWZhdWx0IHZhbHVlIGlzIGAxYC5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIFttb250aHNWaWV3TnVtYmVyXT1cIjJcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRwdWJsaWMgZ2V0IG1vbnRoc1ZpZXdOdW1iZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21vbnRoc1ZpZXdOdW1iZXI7XG5cdH1cblxuICAgIHB1YmxpYyBzZXQgbW9udGhzVmlld051bWJlcih2YWw6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cblx0XHR0aGlzLl9tb250aHNWaWV3TnVtYmVyID0gdmFsO1xuXHR9XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNhbGVuZGFyIFtzaG93V2Vla051bWJlcnNdPVwidHJ1ZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdCBjc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXItLXZlcnRpY2FsJylcblx0cHVibGljIGdldCBzdHlsZVZlcnRpY2FsQ2xhc3MoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaGVhZGVyT3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCc7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyJylcblx0cHVibGljIHN0eWxlQ2xhc3MgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBNb250aCBidXR0b24sIHRoYXQgZGlzcGxheXMgdGhlIG1vbnRocyB2aWV3LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZHJlbignbW9udGhzQnRuJylcblx0cHVibGljIG1vbnRoc0J0bnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuXHQvKipcblx0ICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgZGVjYWRlIHZpZXcuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdkZWNhZGUnLCB7IHJlYWQ6IElneFllYXJzVmlld0NvbXBvbmVudCB9KVxuXHRwdWJsaWMgZGFjYWRlVmlldzogSWd4WWVhcnNWaWV3Q29tcG9uZW50O1xuXG5cdC8qKlxuXHQgKiBWaWV3Q2hpbGQgdGhhdCByZXByZXNlbnRzIHRoZSBtb250aHMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ21vbnRocycsIHsgcmVhZDogSWd4TW9udGhzVmlld0NvbXBvbmVudCB9KVxuXHRwdWJsaWMgbW9udGhzVmlldzogSWd4TW9udGhzVmlld0NvbXBvbmVudDtcblxuXHQvKipcblx0ICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgZGF5cyB2aWV3LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIGRheXNWaWV3OiBJZ3hEYXlzVmlld0NvbXBvbmVudDtcblxuXHQvKipcblx0ICogVmlld0NoaWxkcmVuZGVuIHJlcHJlc2VudGluZyBhbGwgb2YgdGhlIHJlbmRlcmVkIGRheXMgdmlld3MuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkcmVuKCdkYXlzJywgeyByZWFkOiBJZ3hEYXlzVmlld0NvbXBvbmVudCB9KVxuXHRwdWJsaWMgbW9udGhWaWV3czogUXVlcnlMaXN0PElneERheXNWaWV3Q29tcG9uZW50PjtcblxuXHQvKipcblx0ICogQnV0dG9uIGZvciBwcmV2aW91cyBtb250aC5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ3ByZXZQYWdlQnRuJylcblx0cHVibGljIHByZXZQYWdlQnRuOiBFbGVtZW50UmVmO1xuXG5cdC8qKlxuXHQgKiBCdXR0b24gZm9yIG5leHQgbW9udGguXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCduZXh0UGFnZUJ0bicpXG5cdHB1YmxpYyBuZXh0UGFnZUJ0bjogRWxlbWVudFJlZjtcblxuXHQvKipcblx0ICogRGVub3RlIGlmIHRoZSB5ZWFyIHZpZXcgaXMgYWN0aXZlLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldCBpc1llYXJWaWV3KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHlwZXNjcmlwdFxuXHQgKiBsZXQgaGVhZGVyVGl0bGVUZW1wbGF0ZSA9IHRoaXMuY2FsZW5kYXIuaGVhZGVyVGl0bGVUZWFtcGxhdGU7XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVhZGVyVGl0bGVUZW1wbGF0ZSgpOiBhbnkge1xuXHRcdGlmICh0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGhlYWRlciB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIGhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmU9XCJpZ3hDYWxlbmRhckhlYWRlclRpdGxlXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBzZXQgaGVhZGVyVGl0bGVUZW1wbGF0ZShkaXJlY3RpdmU6IGFueSkge1xuXHRcdHRoaXMuaGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlclRlbXBsYXRlID0gIHRoaXMuY2FsZW5kYXIuaGVhZGVyVGVhbXBsYXRlO1xuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlclRlbXBsYXRlKCk6IGFueSB7XG5cdFx0aWYgKHRoaXMuaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZT1cImlneENhbGVuZGFySGVhZGVyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBzZXQgaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHN1YmhlYWRlciB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHlwZXNjcmlwdFxuXHQgKiBsZXQgc3ViaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmNhbGVuZGFyLnN1YmhlYWRlclRlbXBsYXRlO1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgc3ViaGVhZGVyVGVtcGxhdGUoKTogYW55IHtcblx0XHRpZiAodGhpcy5zdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHN1YmhlYWRlciB0ZW1wbGF0ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIHN1YmhlYWRlclRlbXBsYXRlPVwiaWd4Q2FsZW5kYXJTdWJoZWFkZXJcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIHNldCBzdWJoZWFkZXJUZW1wbGF0ZShkaXJlY3RpdmU6IGFueSkge1xuXHRcdHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHRlbXBsYXRlIG1hcmtlZCB3aXRoIHRoZSBgaWd4Q2FsZW5kYXJIZWFkZXJgIGRpcmVjdGl2ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHlwZXNjcmlwdFxuXHQgKiBsZXQgaGVhZGVyQ29udGV4dCA9ICB0aGlzLmNhbGVuZGFyLmhlYWRlckNvbnRleHQ7XG5cdCAqIGBgYFxuXHQgKi9cblx0cHVibGljIGdldCBoZWFkZXJDb250ZXh0KCkge1xuXHRcdHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGV4dCh0aGlzLmhlYWRlckRhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgZm9yIHRoZSB0ZW1wbGF0ZSBtYXJrZWQgd2l0aCBlaXRoZXIgYGlneENhbGVuZGFyU3ViSGVhZGVyTW9udGhgXG5cdCAqIG9yIGBpZ3hDYWxlbmRhclN1YkhlYWRlclllYXJgIGRpcmVjdGl2ZS5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHlwZXNjcmlwdFxuXHQgKiBsZXQgY29udGV4dCA9ICB0aGlzLmNhbGVuZGFyLmNvbnRleHQ7XG5cdCAqIGBgYFxuXHQgKi9cblx0cHVibGljIGdldCBjb250ZXh0KCkge1xuXHRcdGNvbnN0IGRhdGU6IERhdGUgPSB0aGlzLnZpZXdEYXRlO1xuXHRcdHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGV4dChkYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEYXRlIGRpc3BsYXllZCBpbiBoZWFkZXJcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVhZGVyRGF0ZSgpOiBEYXRlIHtcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVzPy5hdCgwKSA/PyBuZXcgRGF0ZSgpO1xuXHR9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU6IElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmU6IElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGFjdGl2ZURhdGUgPSBDYWxlbmRhckRheS50b2RheS5uYXRpdmU7XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcHJldmlld1JhbmdlRGF0ZTogRGF0ZTtcblxuXHQvKipcblx0ICogVXNlZCB0byBhcHBseSB0aGUgYWN0aXZlIGRhdGUgd2hlbiB0aGUgY2FsZW5kYXIgdmlldyBpcyBjaGFuZ2VkXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgbmV4dERhdGU6IERhdGU7XG5cblx0LyoqXG5cdCAqIERlbm90ZSBpZiB0aGUgY2FsZW5kYXIgdmlldyB3YXMgY2hhbmdlZCB3aXRoIHRoZSBrZXlib2FyZFxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZTtcblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgX21vbnRoc1ZpZXdOdW1iZXIgPSAxO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvd0FjdGl2ZURheTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG4gICAgcHJvdGVjdGVkIHNldCBzaG93QWN0aXZlRGF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dBY3RpdmVEYXkgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc2hvd0FjdGl2ZURheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dBY3RpdmVEYXk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBhY3RpdmVEZXNjZW5kYW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURhdGUuZ2V0VGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURlc2NlbmRhbnQgPz8gdGhpcy52aWV3RGF0ZS5nZXRUaW1lKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldCBhY3RpdmVEZXNjZW5kYW50KGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlRGVzY2VuZGFudCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIH1cblxuXHRwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmtleWJvYXJkTmF2aWdhdGlvblxuICAgICAgICAgICAgLmF0dGFjaEtleWJvYXJkSGFuZGxlcnModGhpcy53cmFwcGVyLCB0aGlzKVxuICAgICAgICAgICAgLnNldChcIkFycm93VXBcIiwgdGhpcy5vbkFycm93VXApXG4gICAgICAgICAgICAuc2V0KFwiQXJyb3dEb3duXCIsIHRoaXMub25BcnJvd0Rvd24pXG4gICAgICAgICAgICAuc2V0KFwiQXJyb3dMZWZ0XCIsIHRoaXMub25BcnJvd0xlZnQpXG4gICAgICAgICAgICAuc2V0KFwiQXJyb3dSaWdodFwiLCB0aGlzLm9uQXJyb3dSaWdodClcbiAgICAgICAgICAgIC5zZXQoXCJFbnRlclwiLCB0aGlzLm9uRW50ZXIpXG4gICAgICAgICAgICAuc2V0KFwiIFwiLCB0aGlzLm9uRW50ZXIpXG4gICAgICAgICAgICAuc2V0KFwiSG9tZVwiLCB0aGlzLm9uSG9tZSlcbiAgICAgICAgICAgIC5zZXQoXCJFbmRcIiwgdGhpcy5vbkVuZClcbiAgICAgICAgICAgIC5zZXQoXCJQYWdlVXBcIiwgdGhpcy5oYW5kbGVQYWdlVXApXG4gICAgICAgICAgICAuc2V0KFwiUGFnZURvd25cIiwgdGhpcy5oYW5kbGVQYWdlRG93bik7XG5cbiAgICAgICAgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHRoaXMub25XcmFwcGVyRm9jdXMoZXZlbnQpKTtcbiAgICAgICAgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChldmVudDogRm9jdXNFdmVudCkgPT4gdGhpcy5vbldyYXBwZXJCbHVyKGV2ZW50KSk7XG5cbiAgICAgICAgdGhpcy5zdGFydFBhZ2VTY3JvbGwkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5zdG9wUGFnZVNjcm9sbCQpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2Nyb2xsUGFnZSQucGlwZShcbiAgICAgICAgICAgICAgICBza2lwTGFzdCgxKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZSgoKSA9PiBpbnRlcnZhbCgzMDApKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5zdG9wUGFnZVNjcm9sbCQpXG4gICAgICAgICAgICApKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMucGFnZVNjcm9sbERpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbi5QUkVWOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbi5ORVhUOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2Nyb2xsRGlyZWN0aW9uLk5PTkU6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFjdGl2ZVZpZXckLnN1YnNjcmliZSgodmlldykgPT4ge1xuXHRcdFx0dGhpcy5hY3RpdmVWaWV3Q2hhbmdlZC5lbWl0KHZpZXcpO1xuXG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLnByZXZpb3VzVmlld0RhdGUsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZpZXdEYXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbldyYXBwZXJGb2N1cyhfZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2godmlldyA9PiB2aWV3LmNoYW5nZVByZXZpZXdSYW5nZSh0aGlzLmFjdGl2ZURhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uV3JhcHBlckJsdXIoX2V2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIHRoaXMuc2hvd0FjdGl2ZURheSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCh2aWV3ID0+IHZpZXcuY2xlYXJQcmV2aWV3UmFuZ2UoKSk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBcnJvd0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRlbHRhOiBudW1iZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlLm5hdGl2ZTtcblxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmlld0RhdGVzO1xuICAgICAgICBjb25zdCBpc0RhdGVJblZpZXcgPSBkYXRlcy5zb21lKGQgPT4gZC5kYXRlLmVxdWFsVG8odGhpcy5hY3RpdmVEYXRlKSk7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcblxuICAgICAgICBpZiAoIWlzRGF0ZUluVmlldykge1xuICAgICAgICAgICAgZGVsdGEgPiAwID8gdGhpcy5uZXh0UGFnZSh0cnVlKSA6IHRoaXMucHJldmlvdXNQYWdlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQYWdlVXBEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgZGlyID0gZGVsdGEgPiAwID8gU2Nyb2xsRGlyZWN0aW9uLk5FWFQgOiBTY3JvbGxEaXJlY3Rpb24uUFJFVjtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGggJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIGRlbHRhKS5uYXRpdmU7XG4gICAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZSh0aGlzLnZpZXdEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShmYWxzZSwgZGlyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUGFnZVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUGFnZVVwRG93bihldmVudCwgLTEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUGFnZURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdlVXBEb3duKGV2ZW50LCAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAtNyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkFycm93VXAoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkFycm93VXAoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCA3KTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duQXJyb3dEb3duKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25BcnJvd0Rvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93TGVmdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAtMSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkFycm93TGVmdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dMZWZ0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIDEpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd1JpZ2h0KGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25BcnJvd1JpZ2h0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0ZVNlbGVjdGlvbih0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25FbnRlcihldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duRW50ZXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2godmlldyA9PiB2aWV3LmNsZWFyUHJldmlld1JhbmdlKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ib21lKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKHZpZXcpID0+IHZpZXcuZGF0ZXMudG9BcnJheSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNDdXJyZW50TW9udGggJiYgZC5pc0ZvY3VzYWJsZSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGVzLmF0KDApLmRhdGUubmF0aXZlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25Ib21lKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25Ib21lKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25FbmQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMubW9udGhWaWV3cy50b0FycmF5KClcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCgodmlldykgPT4gdmlldy5kYXRlcy50b0FycmF5KCkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5pc0N1cnJlbnRNb250aCAmJiBkLmlzRm9jdXNhYmxlKTtcblxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZXMuYXQoLTEpLmRhdGUubmF0aXZlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25FbmQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkVuZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxvY2FsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9udGggaW4gdGhlIG1vbnRoIHZpZXcgaWYgZW5hYmxlZCxcblx0ICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGRlZmF1bHQgYERhdGUuZ2V0TW9udGgoKWAgdmFsdWUuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZm9ybWF0dGVkTW9udGgodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLmZvcm1hdFZpZXdzLm1vbnRoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXR0ZXJNb250aC5mb3JtYXQodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHsgdmFsdWUuZ2V0TW9udGgoKSB9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2UgdG8gcHJldmlvdXMgcGFnZVxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIHByZXZpb3VzUGFnZShpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcblx0XHRpZiAoaXNLZXlkb3duVHJpZ2dlciAmJiB0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG4gICAgICAgIHRoaXMuY2hhbmdlUGFnZShpc0tleWRvd25UcmlnZ2VyLCBTY3JvbGxEaXJlY3Rpb24uUFJFVik7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRvIG5leHQgcGFnZVxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG5leHRQYWdlKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkge1xuXHRcdGlmIChpc0tleWRvd25UcmlnZ2VyICYmIHRoaXMucGFnZVNjcm9sbERpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLlBSRVYpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKGlzS2V5ZG93blRyaWdnZXIsIFNjcm9sbERpcmVjdGlvbi5ORVhUKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSBjdXJyZW50IHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG4gICAgcHJvdGVjdGVkIGNoYW5nZVBhZ2UoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlLCBkaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbikge1xuXHRcdHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG5cdFx0dGhpcy5pc0tleWRvd25UcmlnZ2VyID0gaXNLZXlkb3duVHJpZ2dlcjtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSBcIm1vbnRoXCI6XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLlBSRVYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCdtb250aCcsIC0xKS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCdtb250aCcsIDEpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5wcmV2aW91c1ZpZXdEYXRlLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmlld0RhdGVcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwieWVhclwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIC0xKS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCd5ZWFyJywgMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiZGVjYWRlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLlBSRVYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCd5ZWFyJywgLTE1KS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCd5ZWFyJywgMTUpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFhYWDogV2h5IG9ubHkgd2hlbiBpdCdzIG5vdCB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQ/XG4gICAgICAgIGlmICghdGhpcy5pc0tleWRvd25UcmlnZ2VyKSB0aGlzLnJlc2V0QWN0aXZlRGF0ZSh0aGlzLnZpZXdEYXRlKTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIENvbnRpbmlvdXMgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBwcmV2aW91cyBwYWdlc1xuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIHN0YXJ0UHJldlBhZ2VTY3JvbGwgPSAoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSA9PiB7XG5cdFx0dGhpcy5zdGFydFBhZ2VTY3JvbGwkLm5leHQoKTtcblx0XHR0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEaXJlY3Rpb24uUFJFVjtcblx0XHR0aGlzLnByZXZpb3VzUGFnZShpc0tleWRvd25UcmlnZ2VyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250aW5pb3VzIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgbmV4dCBwYWdlc1xuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIHN0YXJ0TmV4dFBhZ2VTY3JvbGwgPSAoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSA9PiB7XG5cdFx0dGhpcy5zdGFydFBhZ2VTY3JvbGwkLm5leHQoKTtcblx0XHR0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEaXJlY3Rpb24uTkVYVDtcblx0XHR0aGlzLm5leHRQYWdlKGlzS2V5ZG93blRyaWdnZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3AgY29udGludW91cyBuYXZpZ2F0aW9uXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgc3RvcFBhZ2VTY3JvbGwgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdHRoaXMuc3RvcFBhZ2VTY3JvbGwkLm5leHQodHJ1ZSk7XG5cdFx0dGhpcy5zdG9wUGFnZVNjcm9sbCQuY29tcGxldGUoKTtcblxuXHRcdGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcblx0XHRcdHRoaXMucmVzZXRBY3RpdmVEYXRlKHRoaXMudmlld0RhdGUpO1xuXHRcdH1cblxuXHRcdHRoaXMucGFnZVNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERpcmVjdGlvbi5OT05FO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgb25BY3RpdmVWaWV3RGVjYWRlKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBEYXRlLCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdHN1cGVyLmFjdGl2ZVZpZXdEZWNhZGUoYWN0aXZlVmlld0lkeCk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgb25BY3RpdmVWaWV3RGVjYWRlS0IoZGF0ZTogRGF0ZSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFjdGl2ZVZpZXdJZHg6IG51bWJlcikge1xuXHRcdHN1cGVyLmFjdGl2ZVZpZXdEZWNhZGVLQihldmVudCwgYWN0aXZlVmlld0lkeCk7XG5cblx0XHRpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvblllYXJzVmlld0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZCA/IGV2ZW50LmNvbXBvc2VkUGF0aCgpIDogW2V2ZW50LnRhcmdldF07XG4gICAgICAgIGNvbnN0IHllYXJzID0gdGhpcy5kYWNhZGVWaWV3LnZpZXdJdGVtcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IHZhbGlkVGFyZ2V0ID0geWVhcnMuc29tZSh5ZWFyID0+IHBhdGguaW5jbHVkZXMoeWVhci5uYXRpdmVFbGVtZW50KSk7XG5cbiAgICAgICAgaWYgKHZhbGlkVGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG4gICAgcHVibGljIG9uWWVhcnNWaWV3S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByb3RlY3RlZCBnZXRGb3JtYXR0ZWREYXRlKCk6IHsgd2Vla2RheTogc3RyaW5nOyBtb250aGRheTogc3RyaW5nIH0ge1xuXHRcdGNvbnN0IGRhdGUgPSB0aGlzLmhlYWRlckRhdGU7XG4gICAgICAgIGNvbnN0IG1vbnRoRm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnIH0pXG4gICAgICAgIGNvbnN0IGRheUZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtb250aGRheTogbW9udGhGb3JtYXR0ZXIuZm9ybWF0KGRhdGUpLFxuXHRcdFx0d2Vla2RheTogZGF5Rm9ybWF0dGVyLmZvcm1hdChkYXRlKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkUmFuZ2UoKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHtcblx0XHRjb25zdCBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcyBhcyBEYXRlW107XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0c3RhcnQ6IHRoaXMuZm9ybWF0dGVyUmFuZ2VkYXkuZm9ybWF0KGRhdGVzLmF0KDApKSxcblx0XHRcdGVuZDogdGhpcy5mb3JtYXR0ZXJSYW5nZWRheS5mb3JtYXQoZGF0ZXMuYXQoLTEpKVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG4gICAgcHJvdGVjdGVkIGdldCB2aWV3RGF0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpXG4gICAgICAgICAgICAuZmxhdE1hcCh2aWV3ID0+IHZpZXcuZGF0ZXMudG9BcnJheSgpKVxuICAgICAgICAgICAgLmZpbHRlcihkID0+IGQuaXNDdXJyZW50TW9udGgpO1xuICAgIH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBpbnZva2VkIG9uIGRhdGUgc2VsZWN0aW9uXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaGFuZGxlRGF0ZVNlbGVjdGlvbihkYXRlOiBEYXRlKSB7XG4gICAgICAgIGNvbnN0IG91dE9mUmFuZ2UgPSAhdGhpcy52aWV3RGF0ZXMuc29tZShkID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkLmRhdGUuZXF1YWxUbyhkYXRlKVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3V0T2ZSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgIH1cblxuXHRcdHRoaXMuc2VsZWN0RGF0ZShkYXRlKTtcblxuICAgICAgICAvLyBrZWVwIHZpZXdzIGluIHN5bmNcblx0XHR0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCgobSkgPT4ge1xuXHRcdFx0bS5zaGlmdEtleSA9IHRoaXMuc2hpZnRLZXk7XG4gICAgICAgICAgICBtLnNlbGVjdGVkRGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXM7XG4gICAgICAgICAgICBtLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gIT09ICdzaW5nbGUnKSB7XG5cdFx0ICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuXHRcdCAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzLmF0KDApKTtcbiAgICAgICAgfVxuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVuYWxcblx0ICovXG5cdHB1YmxpYyBjaGFuZ2VNb250aChkYXRlOiBEYXRlKSB7XG5cdFx0dGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC10aGlzLmFjdGl2ZVZpZXdJZHgpLm5hdGl2ZTtcblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuTW9udGg7XG4gICAgICAgIHRoaXMucmVzZXRBY3RpdmVEYXRlKGRhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVuYWxcblx0ICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNoYW5nZVllYXIoZGF0ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ21vbnRoJywgLXRoaXMuYWN0aXZlVmlld0lkeCkubmF0aXZlO1xuXHRcdHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5ZZWFyO1xuICAgIH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZW5hbFxuXHQgKi9cblx0cHVibGljIHVwZGF0ZVllYXIoZGF0ZTogRGF0ZSkge1xuXHRcdHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgneWVhcicsIC10aGlzLmFjdGl2ZVZpZXdJZHgpLm5hdGl2ZTtcblx0fVxuXG4gICAgcHVibGljIHVwZGF0ZUFjdGl2ZURlc2NlbmRhbnQoZGF0ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSBkYXRlO1xuICAgIH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBvbkFjdGl2ZVZpZXdZZWFyKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBEYXRlLCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdHRoaXMuYWN0aXZlVmlldyA9IElneENhbGVuZGFyVmlldy5ZZWFyO1xuXHRcdHRoaXMuYWN0aXZlVmlld0lkeCA9IGFjdGl2ZVZpZXdJZHg7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgb25BY3RpdmVWaWV3WWVhcktCKGRhdGU6IERhdGUsIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG5cdFx0ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlld0lkeCA9IGFjdGl2ZVZpZXdJZHg7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblxuICAgICAgICAgICAgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVzZWxlY3RzIGRhdGUocykgKGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gdHlwZSkuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogIHRoaXMuY2FsZW5kYXIuZGVzZWxlY3REYXRlKG5ldyBEYXRlKGAyMDE4LTA2LTEyYCkpO1xuXHQgKiBgYGBgXG5cdCAqL1xuXHRwdWJsaWMgb3ZlcnJpZGUgZGVzZWxlY3REYXRlKHZhbHVlPzogRGF0ZSB8IERhdGVbXSB8IHN0cmluZykge1xuXHRcdHN1cGVyLmRlc2VsZWN0RGF0ZSh2YWx1ZSk7XG5cblx0XHR0aGlzLm1vbnRoVmlld3MuZm9yRWFjaCgobSkgPT4ge1xuXHRcdFx0bS5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuXHRcdFx0bS5yYW5nZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIG0uY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuXHR9XG5cblxuXHQvKipcblx0ICogR2V0dGVyIGZvciB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlIHRoZSBjYWxlbmRhciB0ZW1wbGF0ZXMuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGV4dChpOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IENhbGVuZGFyRGF5LmZyb20odGhpcy52aWV3RGF0ZSkuYWRkKCdtb250aCcsIGkpLm5hdGl2ZTtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSwgaSk7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG4gICAgLy8gVE9ETzogU2VlIGlmIHRoaXMgY2FuIGJlIGluY29ycG9yYXRlZCBpbiB0aGUgRGF5c1ZpZXcgZGlyZWN0bHlcblx0cHVibGljIHJlc2V0QWN0aXZlRGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IENhbGVuZGFyRGF5LmZyb20odGhpcy5hY3RpdmVEYXRlKS5zZXQoe1xuICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb3V0T2ZSYW5nZSA9XG4gICAgICAgICAgICAhYXJlU2FtZU1vbnRoKGRhdGUsIHRhcmdldCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZUluUmFuZ2VzKHRhcmdldCwgdGhpcy5kaXNhYmxlZERhdGVzKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBvdXRPZlJhbmdlID8gZGF0ZSA6IHRhcmdldC5uYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZE5hdmlnYXRpb24uZGV0YWNoS2V5Ym9hcmRIYW5kbGVycygpO1xuICAgICAgICB0aGlzLndyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uV3JhcHBlckZvY3VzKTtcbiAgICAgICAgdGhpcy53cmFwcGVyPy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uV3JhcHBlckJsdXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UHJldk1vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcblx0XHRyZXR1cm4gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ21vbnRoJywgLTEpLm5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldE5leHRNb250aChkYXRlOiBEYXRlLCB2aWV3SW5kZXg6IG51bWJlcik6IERhdGUge1xuICAgICAgICByZXR1cm4gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ21vbnRoJywgdmlld0luZGV4KS5uYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIG1ldGhvZCBidWlsZGluZyBhbmQgcmV0dXJuaW5nIHRoZSBjb250ZXh0IG9iamVjdCBpbnNpZGUgdGhlIGNhbGVuZGFyIHRlbXBsYXRlcy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVDb250ZXh0KHZhbHVlOiBEYXRlIHwgRGF0ZVtdLCBpPzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cnVjdCA9IChkYXRlOiBEYXRlLCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIC4uLmZvcm1hdFRvUGFydHMoZGF0ZSwgdGhpcy5sb2NhbGUsIHRoaXMuZm9ybWF0T3B0aW9ucywgW1xuICAgICAgICAgICAgICAgIFwiZXJhXCIsXG4gICAgICAgICAgICAgICAgXCJ5ZWFyXCIsXG4gICAgICAgICAgICAgICAgXCJtb250aFwiLFxuICAgICAgICAgICAgICAgIFwiZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJ3ZWVrZGF5XCIsXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZm9ybWF0T2JqZWN0ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWUubWFwKChkYXRlLCBpbmRleCkgPT4gY29uc3RydWN0KGRhdGUsIGluZGV4KSlcbiAgICAgICAgICAgIDogY29uc3RydWN0KHZhbHVlLCBpKTtcblxuICAgICAgICByZXR1cm4geyAkaW1wbGljaXQ6IGZvcm1hdE9iamVjdCB9O1xuXHR9XG59XG4iLCI8bmctdGVtcGxhdGUgbGV0LXJlc3VsdCAjZGVmYXVsdEhlYWRlclRpdGxlPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnXCI+XG4gICAgICAgIDxzcGFuPnt7IHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X2RhdGUgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICA8c3Bhbj57eyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3BsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1yZXN1bHQgI2RlZmF1bHRIZWFkZXJEYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnXCI+XG4gICAgICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS53ZWVrZGF5IH19LCZuYnNwOzwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgZ2V0Rm9ybWF0dGVkRGF0ZSgpLm1vbnRoZGF5IH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdyYW5nZSdcIj5cbiAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDAgPyAnU3RhcnQnIDogZ2V0Rm9ybWF0dGVkUmFuZ2UoKS5zdGFydH19PC9zcGFuPlxuICAgICAgICA8c3Bhbj4mbmJzcDstJm5ic3A7PC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZERhdGVzLmxlbmd0aCA8PSAxID8gJ0VuZCcgOiBnZXRGb3JtYXR0ZWRSYW5nZSgpLmVuZH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBNb250aCAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1vbnRoIGxldC1vYmo+XG4gICAgPHNwYW5cbiAgICAgICAgI21vbnRoc0J0blxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob2JqLmRhdGUgfCBkYXRlOiAnTExMTCcpICsgJywgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X21vbnRoXCJcbiAgICAgICAgKGtleWRvd24pPVwib25BY3RpdmVWaWV3WWVhcktCKG9iai5kYXRlLCAkZXZlbnQsIG9iai5pbmRleClcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uQWN0aXZlVmlld1llYXIoJGV2ZW50LCBvYmouZGF0ZSwgb2JqLmluZGV4KVwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZVwiPlxuICAgICAgICB7eyBmb3JtYXR0ZWRNb250aChvYmouZGF0ZSkgfX1cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFllYXIgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRZZWFyIGxldC1vYmo+XG4gICAgPHNwYW4gKm5nSWY9XCJhY3RpdmVWaWV3ID09PSAneWVhcidcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9fYXJpYS1vZmYtc2NyZWVuXCIgYXJpYS1saXZlPVwicG9saXRlXCI+e3sgZm9ybWF0dGVkWWVhcihvYmouZGF0ZSkgfX08L3NwYW4+XG4gICAgPHNwYW5cbiAgICAgICAgI3llYXJzQnRuXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihvYmouZGF0ZSB8IGRhdGU6ICd5eXl5JykgKyAnLCAnICsgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RfeWVhclwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld0RlY2FkZUtCKG9iai5kYXRlLCAkZXZlbnQsIG9iai5pbmRleClcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uQWN0aXZlVmlld0RlY2FkZSgkZXZlbnQsIG9iai5kYXRlLCBvYmouaW5kZXgpXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlXCI+XG4gICAgICAgIHt7IGZvcm1hdHRlZFllYXIob2JqLmRhdGUpIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBNb250aCBZZWFyIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9udGhZZWFyIGxldC1vYmogbGV0LXJlc3VsdD5cbiAgICA8c3BhbiAqbmdJZj1cIm1vbnRoc1ZpZXdOdW1iZXIgPCAyIHx8IG9iai5pbmRleCA8IDFcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9fYXJpYS1vZmYtc2NyZWVuXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyID4gMSA/XG4gICAgICAgIChyZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX2ZpcnN0X3BpY2tlcl9vZi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpICsgJyAnICtcbiAgICAgICAgICAgIChvYmouZGF0ZSB8IGRhdGU6ICdMTExMIHl5eXknKSkgOlxuICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdGVkX21vbnRoX2lzICsgKG9iai5kYXRlIHwgZGF0ZTogJ0xMTEwgeXl5eScpfX1cbiAgICA8L3NwYW4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRNb250aDsgY29udGV4dDogeyRpbXBsaWNpdDogb2JqfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0WWVhcjsgY29udGV4dDogeyRpbXBsaWNpdDogb2JqfVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBEZWNhZGUgLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHREZWNhZGU+XG4gICAgPHNwYW4+e3sgZ2V0RGVjYWRlUmFuZ2UoKS5zdGFydCB9fSAtIHt7IGdldERlY2FkZVJhbmdlKCkuZW5kIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUT0RPOiBNYWtlIGFycm93cyB0ZW1wbGF0YWJsZSB2aWEgZXh0ZXJuYWwgdGVtcGxhdGVzIGFuZCBiYXNlZCBvbiB0aGVtZSAtLT5cbjwhLS0gUHJldmlvdXMgYXJyb3cgaWNvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjcHJldkFycm93IGxldC1vYmo+XG4gICAgPGlneC1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmtleWJvYXJkX2Fycm93X2xlZnQ8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOZXh0IGFycm93IGljb24gLS0+XG48bmctdGVtcGxhdGUgI25leHRBcnJvdyBsZXQtb2JqPlxuICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIj5rZXlib2FyZF9hcnJvd19yaWdodDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFByZXZpb3VzIHBpY2tlciBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI3ByZXZQYWdlQnV0dG9uIGxldC1vYmo+XG4gICAgPGRpdlxuICAgICAgICAjcHJldlBhZ2VCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19wcmV2XCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldk5hdkxhYmVsKChnZXRQcmV2TW9udGgodmlld0RhdGUpIHwgZGF0ZTogJ0xMTEwnKSlcIlxuICAgICAgICBkYXRhLWFjdGlvbj1cInByZXZcIlxuICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbFBhZ2VcbiAgICAgICAgW3N0YXJ0U2Nyb2xsXT1cInN0YXJ0UHJldlBhZ2VTY3JvbGxcIlxuICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wUGFnZVNjcm9sbFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldkFycm93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5leHQgcGlja2VyIGJ1dHRvbiAtLT5cbjxuZy10ZW1wbGF0ZSAjbmV4dFBhZ2VCdXR0b24gbGV0LW9iaj5cbiAgICA8ZGl2XG4gICAgICAgICNuZXh0UGFnZUJ0blxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25leHRcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJuZXh0TmF2TGFiZWwoKGdldE5leHRNb250aCh2aWV3RGF0ZSwgbW9udGhzVmlld051bWJlcikgfCBkYXRlOiAnTExMTCcpKVwiXG4gICAgICAgIGRhdGEtYWN0aW9uPVwibmV4dFwiXG4gICAgICAgIGlneENhbGVuZGFyU2Nyb2xsUGFnZVxuICAgICAgICBbc3RhcnRTY3JvbGxdPVwic3RhcnROZXh0UGFnZVNjcm9sbFwiXG4gICAgICAgIFtzdG9wU2Nyb2xsXT1cInN0b3BQYWdlU2Nyb2xsXCJcbiAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0QXJyb3dcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUElDS0VSIElOIERBWVMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyRGF5c1BpY2tlciBsZXQtaT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIiBbc3R5bGUuLS1jYWxlbmRhci1yb3ctc3RhcnRdPVwiMSArICgyICogaSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCIgW2F0dHIuZGF0YS1tb250aF09XCJpIHwgSWd4R2V0Vmlld0RhdGU6dmlld0RhdGU6ZmFsc2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdE1vbnRoWWVhcjsgY29udGV4dDogZ2V0Q29udGV4dChpKVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiXG4gICAgICAgICAgICAqbmdJZj1cInRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/IGkgPT09IG1vbnRoc1ZpZXdOdW1iZXIgLSAxIDogaSA9PT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5leHRQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUElDS0VSIElOIE1PTlRIUyAtLT5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJZZWFyUGlja2VyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInN1YmhlYWRlclRlbXBsYXRlID8gc3ViaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0WWVhcjsgY29udGV4dDogZ2V0Q29udGV4dCgwKVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fbmF2XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBZRUFSUyAtLT5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJEZWNhZGVQaWNrZXI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlc1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInN1YmhlYWRlclRlbXBsYXRlID8gc3ViaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0RGVjYWRlO1wiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fbmF2XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxoZWFkZXJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS1tb250aCBpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCJcbiAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyXCJcbiAgICAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZScgJiYgaGFzSGVhZGVyIHx8IHNlbGVjdGlvbiA9PT0gJ3JhbmdlJyAmJiBoYXNIZWFkZXJcIj5cbiAgICA8aDUgaWQ9XCJpZ3gtYXJpYS1jYWxlbmRhci10aXRsZS15ZWFyXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci15ZWFyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUaXRsZVRlbXBsYXRlID8/IGRlZmF1bHRIZWFkZXJUaXRsZTsgY29udGV4dDogaGVhZGVyQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDU+XG4gICAgPGgyIGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGhcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9faGVhZGVyLWRhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlID8gaGVhZGVyVGVtcGxhdGUgOiBkZWZhdWx0SGVhZGVyRGF0ZTsgY29udGV4dDogaGVhZGVyQ29udGV4dFwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2gyPlxuPC9oZWFkZXI+XG5cblxuPGRpdlxuICAgICN3cmFwcGVyXG4gICAgW3N0eWxlLi0tY2FsZW5kYXItbW9udGhzXT1cIm1vbnRoc1ZpZXdOdW1iZXJcIlxuICAgIFt0YWJJbmRleF09XCIwXCJcbiAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9fd3JhcHBlclwiXG4gICAgW2NsYXNzLmlneC1jYWxlbmRhcl9fd3JhcHBlci0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJzZWxlY3Rpb24gIT09ICdzaW5nbGUnXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJjYWxlbmRhci1kZXNjXCJcbiAgICByb2xlPVwiZ3JpZFwiXG4gICAgPlxuICAgIDxjYXB0aW9uIGlkPVwiY2FsZW5kYXItZGVzY1wiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cImlneC1jYWxlbmRhcl9fYXJpYS1vZmYtc2NyZWVuXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdtdWx0aSdcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9tdWx0aV9zZWxlY3Rpb24ucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSA6XG4gICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3Npbmd1bGFyX211bHRpX3NlbGVjdGlvbn19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfcmFuZ2Vfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9yYW5nZV9zZWxlY3Rpb259fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3NpbmdsZSdcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoc1ZpZXdOdW1iZXIgJiYgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5nbGVfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9zaW5nbGVfc2VsZWN0aW9ufX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jYXB0aW9uPlxuICAgIDxzZWN0aW9uXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19waWNrZXJzXCJcbiAgICAgICAgW2NsYXNzLmlneC1jYWxlbmRhcl9fcGlja2Vycy0tZGF5c109XCJpc0RlZmF1bHRWaWV3XCJcbiAgICAgICAgW2NsYXNzLmlneC1jYWxlbmRhcl9fcGlja2Vycy0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVmYXVsdFZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZpZXcgb2YgbW9udGhzVmlld051bWJlciB8IElneE1vbnRoVmlld1Nsb3RzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyRGF5c1BpY2tlcjsgY29udGV4dDogeyRpbXBsaWNpdDogaX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNZZWFyVmlld1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyWWVhclBpY2tlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEZWNhZGVWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FsZW5kYXJEZWNhZGVQaWNrZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2JvZHlcIiBbY2xhc3MuaWd4LWNhbGVuZGFyX19ib2R5LS12ZXJ0aWNhbF09XCJvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJ1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVmYXVsdFZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZpZXcgb2YgbW9udGhzVmlld051bWJlciB8IElneE1vbnRoVmlld1Nsb3RzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGlneC1kYXlzLXZpZXdcbiAgICAgICAgICAgICAgICAgICAgI2RheXNcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFsoYWN0aXZlRGF0ZSldPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFsocHJldmlld1JhbmdlRGF0ZSldPVwicHJldmlld1JhbmdlRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3RGF0ZV09XCJpIHwgSWd4R2V0Vmlld0RhdGU6IHZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3dlZWtTdGFydF09XCJ3ZWVrU3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybWF0T3B0aW9uc109XCJmb3JtYXRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXdzXT1cImZvcm1hdFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzcGVjaWFsRGF0ZXNdPVwic3BlY2lhbERhdGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tY2FsZW5kYXItcm93LXN0YXJ0XT1cIihpICsgMSkgKiAyXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVMZWFkaW5nRGF5c109XCJoaWRlT3V0c2lkZURheXMgfHwgaSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlVHJhaWxpbmdEYXlzXT1cImhpZGVPdXRzaWRlRGF5cyB8fCBpICE9PSBtb250aHNWaWV3TnVtYmVyIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVEYXldPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKHN3aXBlcmlnaHQpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cImhhbmRsZURhdGVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgICAgICA8L2lneC1kYXlzLXZpZXc+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzWWVhclZpZXdcIj5cbiAgICAgICAgICAgIDxpZ3gtbW9udGhzLXZpZXdcbiAgICAgICAgICAgICAgICAjbW9udGhzXG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgIFtkYXRlXT1cInZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXddPVwiZm9ybWF0Vmlld3MubW9udGhcIlxuICAgICAgICAgICAgICAgIFttb250aEZvcm1hdF09XCJmb3JtYXRPcHRpb25zLm1vbnRoXCJcbiAgICAgICAgICAgICAgICBbc2hvd0FjdGl2ZV09XCJzaG93QWN0aXZlRGF5XCJcbiAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHN3aXBlcmlnaHQpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgIChzd2lwZWxlZnQpPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInVwZGF0ZVllYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGFjdGl2ZURhdGVDaGFuZ2VkKT1cInVwZGF0ZUFjdGl2ZURlc2NlbmRhbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZU1vbnRoKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDwvaWd4LW1vbnRocy12aWV3PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEZWNhZGVWaWV3XCI+XG4gICAgICAgICAgICA8aWd4LXllYXJzLXZpZXdcbiAgICAgICAgICAgICAgICAjZGVjYWRlXG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgIFtkYXRlXT1cInZpZXdEYXRlXCJcbiAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFZpZXddPVwiZm9ybWF0Vmlld3MueWVhclwiXG4gICAgICAgICAgICAgICAgW3llYXJGb3JtYXRdPVwiZm9ybWF0T3B0aW9ucy55ZWFyXCJcbiAgICAgICAgICAgICAgICBbc2hvd0FjdGl2ZV09XCJzaG93QWN0aXZlRGF5XCJcbiAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHN3aXBlcmlnaHQpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgIChzd2lwZWxlZnQpPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInVwZGF0ZVllYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGFjdGl2ZURhdGVDaGFuZ2VkKT1cInVwZGF0ZUFjdGl2ZURlc2NlbmRhbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNoYW5nZVllYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgPC9pZ3gteWVhcnMtdmlldz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
|