@energycap/components 0.43.8-ECAP-30020-Report-Builder-Foundation.20250611-1036 → 0.43.8-ECAP-30247-date-input-tabindex-fixes.20250620-1302
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/controls/calendar/calendar.component.mjs +6 -3
- package/esm2022/lib/controls/date-input/date-input.component.mjs +3 -3
- package/esm2022/lib/controls/file-upload/file-upload.component.mjs +1 -1
- package/esm2022/lib/controls/form-control/form-control.component.mjs +23 -11
- package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +7 -4
- package/fesm2022/energycap-components.mjs +35 -17
- package/fesm2022/energycap-components.mjs.map +1 -1
- package/lib/controls/calendar/calendar.component.d.ts +2 -1
- package/lib/controls/form-control/form-control.component.d.ts +8 -6
- package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +2 -1
- package/package.json +1 -1
@@ -12,6 +12,7 @@ export class CalendarComponent {
|
|
12
12
|
this.selectionMode = 'day';
|
13
13
|
this.minDate = DateTimeHelper.minDatePickerDate;
|
14
14
|
this.maxDate = DateTimeHelper.maxDatePickerDate;
|
15
|
+
this.tabindex = 0;
|
15
16
|
this.dateSelected = new EventEmitter();
|
16
17
|
/** Determines the current view of the calendar. */
|
17
18
|
this.view = { mode: 'day', date: new Date() };
|
@@ -220,11 +221,11 @@ export class CalendarComponent {
|
|
220
221
|
return lastRow[lastRow.length - 1];
|
221
222
|
}
|
222
223
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
223
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CalendarComponent, selector: "ec-calendar", inputs: { id: "id", selection: "selection", selectionMode: "selectionMode", minDate: "minDate", maxDate: "maxDate", view: "view" }, outputs: { dateSelected: "dateSelected", viewChange: "viewChange" }, host: { properties: { "attr.id": "this.id" } }, usesOnChanges: true, ngImport: i0, template: "<header class=\"d-flex align-items-center mt-1 mb-2 px-1\">\r\n <button id=\"{{id}}_prev_button\"\r\n class=\"mr-auto\"\r\n (click)=\"onPreviousClick()\"\r\n [disabled]=\"disablePreviousButton\">\r\n <i class=\"ec-icon icon-angle-down rotate-90\"></i>\r\n </button>\r\n\r\n <button *ngIf=\"view.mode === 'day'\"\r\n id=\"{{id}}_month_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onMonthClick()\">\r\n {{month}}\r\n </button>\r\n\r\n <button *ngIf=\"view.mode !== 'year'\"\r\n id=\"{{id}}_year_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onYearClick()\">\r\n {{year}}\r\n </button>\r\n\r\n <div id=\"{{id}}_year_range\"\r\n *ngIf=\"view.mode === 'year'\"\r\n class=\"text-body-1 font-weight-bold\"\r\n [innerHTML]=\"yearRange\">\r\n </div>\r\n\r\n <button id=\"{{id}}_next_button\"\r\n class=\"ml-auto\"\r\n (click)=\"onNextClick()\"\r\n [disabled]=\"disableNextButton\">\r\n <i class=\"ec-icon icon-angle-down rotate-270\"></i>\r\n </button>\r\n</header>\r\n\r\n<div *ngIf=\"view.mode === 'day'\"\r\n class=\"mb-1 px-2 d-flex\">\r\n <h3 *ngFor=\"let day of weekDays\"\r\n class=\"text-heading-3 d-flex justify-content-center align-items-center\"\r\n style=\"width: 2rem; height: 1.75rem;\">{{day}}</h3>\r\n</div>\r\n\r\n<div *ngFor=\"let row of calendarItems; last as isLast; trackBy: trackByDateRow\"\r\n class=\"px-2 d-flex {{view.mode}}-view\"\r\n [class.mb-1]=\"!isLast\"\r\n [class.mb-2]=\"isLast\">\r\n <button *ngFor=\"let item of row; trackBy: trackByDate\"\r\n id=\"{{id}}_item_{{item.date | date:'MM_dd_yyyy'}}\"\r\n ec-calendar-item\r\n [item]=\"item\"\r\n [selection]=\"selection\"\r\n [view]=\"view\"\r\n (click)=\"onItemSelected(item)\"\r\n [innerHTML]=\"item.label\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\">\r\n </button>\r\n</div>\r\n", styles: [":host{display:inline-block}button{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border:0;border-radius:var(--ec-border-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:transparent}button .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}button .ec-icon{flex:none}button .ec-icon+.label{flex:none;margin-left:.25rem}button.has-badge{padding-right:.0625rem}button:focus{outline:none;position:relative;z-index:1}button:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}button:disabled{background-color:transparent;border-color:transparent;color:var(--ec-color-hint-dark);--ec-color-icon: var(--ec-color-hint-dark)}button:hover:not(:disabled){background-color:var(--ec-background-color-hover)}button:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}button:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}button.is-selected{background-color:var(--ec-background-color-selected);font-weight:700}.day-view button{width:2rem;height:1.75rem}.month-view button{width:4.67rem;height:3.25rem}.quarter-view button{width:7rem;height:6.75rem}.year-view button{width:3.5rem;height:3.25rem}.is-selected:has(+.is-selected:not(:disabled)){border-top-right-radius:0;border-bottom-right-radius:0}.is-selected:not(:disabled)+.is-selected{border-top-left-radius:0;border-bottom-left-radius:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalendarItemComponent, selector: "button[ec-calendar-item]", inputs: ["item", "selection", "view", "minDate", "maxDate"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
224
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CalendarComponent, selector: "ec-calendar", inputs: { id: "id", selection: "selection", selectionMode: "selectionMode", minDate: "minDate", maxDate: "maxDate", tabindex: "tabindex", view: "view" }, outputs: { dateSelected: "dateSelected", viewChange: "viewChange" }, host: { properties: { "attr.id": "this.id" } }, usesOnChanges: true, ngImport: i0, template: "<header class=\"d-flex align-items-center mt-1 mb-2 px-1\">\r\n <button id=\"{{id}}_prev_button\"\r\n class=\"mr-auto\"\r\n (click)=\"onPreviousClick()\"\r\n [disabled]=\"disablePreviousButton\"\r\n tabindex=\"{{tabindex}}\">\r\n <i class=\"ec-icon icon-angle-down rotate-90\"></i>\r\n </button>\r\n\r\n <button *ngIf=\"view.mode === 'day'\"\r\n id=\"{{id}}_month_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onMonthClick()\"\r\n tabindex=\"{{tabindex}}\">\r\n {{month}}\r\n </button>\r\n\r\n <button *ngIf=\"view.mode !== 'year'\"\r\n id=\"{{id}}_year_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onYearClick()\"\r\n tabindex=\"{{tabindex}}\">\r\n {{year}}\r\n </button>\r\n\r\n <div id=\"{{id}}_year_range\"\r\n *ngIf=\"view.mode === 'year'\"\r\n class=\"text-body-1 font-weight-bold\"\r\n [innerHTML]=\"yearRange\">\r\n </div>\r\n\r\n <button id=\"{{id}}_next_button\"\r\n class=\"ml-auto\"\r\n (click)=\"onNextClick()\"\r\n [disabled]=\"disableNextButton\"\r\n tabindex=\"{{tabindex}}\">\r\n <i class=\"ec-icon icon-angle-down rotate-270\"></i>\r\n </button>\r\n</header>\r\n\r\n<div *ngIf=\"view.mode === 'day'\"\r\n class=\"mb-1 px-2 d-flex\">\r\n <h3 *ngFor=\"let day of weekDays\"\r\n class=\"text-heading-3 d-flex justify-content-center align-items-center\"\r\n style=\"width: 2rem; height: 1.75rem;\">{{day}}</h3>\r\n</div>\r\n\r\n<div *ngFor=\"let row of calendarItems; last as isLast; trackBy: trackByDateRow\"\r\n class=\"px-2 d-flex {{view.mode}}-view\"\r\n [class.mb-1]=\"!isLast\"\r\n [class.mb-2]=\"isLast\">\r\n <button *ngFor=\"let item of row; trackBy: trackByDate\"\r\n id=\"{{id}}_item_{{item.date | date:'MM_dd_yyyy'}}\"\r\n ec-calendar-item\r\n [item]=\"item\"\r\n [selection]=\"selection\"\r\n [view]=\"view\"\r\n (click)=\"onItemSelected(item)\"\r\n [innerHTML]=\"item.label\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n tabindex=\"{{tabindex}}\">\r\n </button>\r\n</div>\r\n", styles: [":host{display:inline-block}button{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border:0;border-radius:var(--ec-border-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:transparent}button .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}button .ec-icon{flex:none}button .ec-icon+.label{flex:none;margin-left:.25rem}button.has-badge{padding-right:.0625rem}button:focus{outline:none;position:relative;z-index:1}button:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}button:disabled{background-color:transparent;border-color:transparent;color:var(--ec-color-hint-dark);--ec-color-icon: var(--ec-color-hint-dark)}button:hover:not(:disabled){background-color:var(--ec-background-color-hover)}button:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}button:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}button.is-selected{background-color:var(--ec-background-color-selected);font-weight:700}.day-view button{width:2rem;height:1.75rem}.month-view button{width:4.67rem;height:3.25rem}.quarter-view button{width:7rem;height:6.75rem}.year-view button{width:3.5rem;height:3.25rem}.is-selected:has(+.is-selected:not(:disabled)){border-top-right-radius:0;border-bottom-right-radius:0}.is-selected:not(:disabled)+.is-selected{border-top-left-radius:0;border-bottom-left-radius:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalendarItemComponent, selector: "button[ec-calendar-item]", inputs: ["item", "selection", "view", "minDate", "maxDate"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
224
225
|
}
|
225
226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalendarComponent, decorators: [{
|
226
227
|
type: Component,
|
227
|
-
args: [{ selector: 'ec-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"d-flex align-items-center mt-1 mb-2 px-1\">\r\n <button id=\"{{id}}_prev_button\"\r\n class=\"mr-auto\"\r\n (click)=\"onPreviousClick()\"\r\n [disabled]=\"disablePreviousButton\">\r\n <i class=\"ec-icon icon-angle-down rotate-90\"></i>\r\n </button>\r\n\r\n <button *ngIf=\"view.mode === 'day'\"\r\n id=\"{{id}}_month_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onMonthClick()\">\r\n {{month}}\r\n </button>\r\n\r\n <button *ngIf=\"view.mode !== 'year'\"\r\n id=\"{{id}}_year_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onYearClick()\">\r\n {{year}}\r\n </button>\r\n\r\n <div id=\"{{id}}_year_range\"\r\n *ngIf=\"view.mode === 'year'\"\r\n class=\"text-body-1 font-weight-bold\"\r\n [innerHTML]=\"yearRange\">\r\n </div>\r\n\r\n <button id=\"{{id}}_next_button\"\r\n class=\"ml-auto\"\r\n (click)=\"onNextClick()\"\r\n [disabled]=\"disableNextButton\">\r\n <i class=\"ec-icon icon-angle-down rotate-270\"></i>\r\n </button>\r\n</header>\r\n\r\n<div *ngIf=\"view.mode === 'day'\"\r\n class=\"mb-1 px-2 d-flex\">\r\n <h3 *ngFor=\"let day of weekDays\"\r\n class=\"text-heading-3 d-flex justify-content-center align-items-center\"\r\n style=\"width: 2rem; height: 1.75rem;\">{{day}}</h3>\r\n</div>\r\n\r\n<div *ngFor=\"let row of calendarItems; last as isLast; trackBy: trackByDateRow\"\r\n class=\"px-2 d-flex {{view.mode}}-view\"\r\n [class.mb-1]=\"!isLast\"\r\n [class.mb-2]=\"isLast\">\r\n <button *ngFor=\"let item of row; trackBy: trackByDate\"\r\n id=\"{{id}}_item_{{item.date | date:'MM_dd_yyyy'}}\"\r\n ec-calendar-item\r\n [item]=\"item\"\r\n [selection]=\"selection\"\r\n [view]=\"view\"\r\n (click)=\"onItemSelected(item)\"\r\n [innerHTML]=\"item.label\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\">\r\n </button>\r\n</div>\r\n", styles: [":host{display:inline-block}button{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border:0;border-radius:var(--ec-border-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:transparent}button .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}button .ec-icon{flex:none}button .ec-icon+.label{flex:none;margin-left:.25rem}button.has-badge{padding-right:.0625rem}button:focus{outline:none;position:relative;z-index:1}button:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}button:disabled{background-color:transparent;border-color:transparent;color:var(--ec-color-hint-dark);--ec-color-icon: var(--ec-color-hint-dark)}button:hover:not(:disabled){background-color:var(--ec-background-color-hover)}button:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}button:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}button.is-selected{background-color:var(--ec-background-color-selected);font-weight:700}.day-view button{width:2rem;height:1.75rem}.month-view button{width:4.67rem;height:3.25rem}.quarter-view button{width:7rem;height:6.75rem}.year-view button{width:3.5rem;height:3.25rem}.is-selected:has(+.is-selected:not(:disabled)){border-top-right-radius:0;border-bottom-right-radius:0}.is-selected:not(:disabled)+.is-selected{border-top-left-radius:0;border-bottom-left-radius:0}\n"] }]
|
228
|
+
args: [{ selector: 'ec-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"d-flex align-items-center mt-1 mb-2 px-1\">\r\n <button id=\"{{id}}_prev_button\"\r\n class=\"mr-auto\"\r\n (click)=\"onPreviousClick()\"\r\n [disabled]=\"disablePreviousButton\"\r\n tabindex=\"{{tabindex}}\">\r\n <i class=\"ec-icon icon-angle-down rotate-90\"></i>\r\n </button>\r\n\r\n <button *ngIf=\"view.mode === 'day'\"\r\n id=\"{{id}}_month_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onMonthClick()\"\r\n tabindex=\"{{tabindex}}\">\r\n {{month}}\r\n </button>\r\n\r\n <button *ngIf=\"view.mode !== 'year'\"\r\n id=\"{{id}}_year_button\"\r\n class=\"text-body-1 font-weight-bold\"\r\n (click)=\"onYearClick()\"\r\n tabindex=\"{{tabindex}}\">\r\n {{year}}\r\n </button>\r\n\r\n <div id=\"{{id}}_year_range\"\r\n *ngIf=\"view.mode === 'year'\"\r\n class=\"text-body-1 font-weight-bold\"\r\n [innerHTML]=\"yearRange\">\r\n </div>\r\n\r\n <button id=\"{{id}}_next_button\"\r\n class=\"ml-auto\"\r\n (click)=\"onNextClick()\"\r\n [disabled]=\"disableNextButton\"\r\n tabindex=\"{{tabindex}}\">\r\n <i class=\"ec-icon icon-angle-down rotate-270\"></i>\r\n </button>\r\n</header>\r\n\r\n<div *ngIf=\"view.mode === 'day'\"\r\n class=\"mb-1 px-2 d-flex\">\r\n <h3 *ngFor=\"let day of weekDays\"\r\n class=\"text-heading-3 d-flex justify-content-center align-items-center\"\r\n style=\"width: 2rem; height: 1.75rem;\">{{day}}</h3>\r\n</div>\r\n\r\n<div *ngFor=\"let row of calendarItems; last as isLast; trackBy: trackByDateRow\"\r\n class=\"px-2 d-flex {{view.mode}}-view\"\r\n [class.mb-1]=\"!isLast\"\r\n [class.mb-2]=\"isLast\">\r\n <button *ngFor=\"let item of row; trackBy: trackByDate\"\r\n id=\"{{id}}_item_{{item.date | date:'MM_dd_yyyy'}}\"\r\n ec-calendar-item\r\n [item]=\"item\"\r\n [selection]=\"selection\"\r\n [view]=\"view\"\r\n (click)=\"onItemSelected(item)\"\r\n [innerHTML]=\"item.label\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n tabindex=\"{{tabindex}}\">\r\n </button>\r\n</div>\r\n", styles: [":host{display:inline-block}button{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border:0;border-radius:var(--ec-border-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;background-color:transparent}button .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}button .ec-icon{flex:none}button .ec-icon+.label{flex:none;margin-left:.25rem}button.has-badge{padding-right:.0625rem}button:focus{outline:none;position:relative;z-index:1}button:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}button:disabled{background-color:transparent;border-color:transparent;color:var(--ec-color-hint-dark);--ec-color-icon: var(--ec-color-hint-dark)}button:hover:not(:disabled){background-color:var(--ec-background-color-hover)}button:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}button:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}button.is-selected{background-color:var(--ec-background-color-selected);font-weight:700}.day-view button{width:2rem;height:1.75rem}.month-view button{width:4.67rem;height:3.25rem}.quarter-view button{width:7rem;height:6.75rem}.year-view button{width:3.5rem;height:3.25rem}.is-selected:has(+.is-selected:not(:disabled)){border-top-right-radius:0;border-bottom-right-radius:0}.is-selected:not(:disabled)+.is-selected{border-top-left-radius:0;border-bottom-left-radius:0}\n"] }]
|
228
229
|
}], propDecorators: { id: [{
|
229
230
|
type: HostBinding,
|
230
231
|
args: ['attr.id']
|
@@ -238,6 +239,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
238
239
|
type: Input
|
239
240
|
}], maxDate: [{
|
240
241
|
type: Input
|
242
|
+
}], tabindex: [{
|
243
|
+
type: Input
|
241
244
|
}], dateSelected: [{
|
242
245
|
type: Output
|
243
246
|
}], view: [{
|
@@ -245,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
245
248
|
}], viewChange: [{
|
246
249
|
type: Output
|
247
250
|
}] } });
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQVU3RCxNQUFNLE9BQU8saUJBQWlCO0lBTjlCO1FBU2tCLE9BQUUsR0FBVyxVQUFVLENBQUM7UUFFL0IsY0FBUyxHQUErQixJQUFJLENBQUM7UUFDN0Msa0JBQWEsR0FBNEIsS0FBSyxDQUFDO1FBRS9DLFlBQU8sR0FBUyxjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDakQsWUFBTyxHQUFTLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVoRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbEQsbURBQW1EO1FBQ25DLFNBQUksR0FBa0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdkQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBV2hFLDhEQUE4RDtRQUN2RCxrQkFBYSxHQUFzQixFQUFFLENBQUM7UUFFN0MscUVBQXFFO1FBQzlELGFBQVEs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QURqQixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBR1MsSUFBSTtzQkFBbkIsS0FBSztnQkFDVyxVQUFVO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcmFuZ2UgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IERhdGVUaW1lSGVscGVyIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRlLXRpbWUtaGVscGVyJztcclxuaW1wb3J0IHsgRGF0ZUlucHV0IH0gZnJvbSAnLi4vZGF0ZS1pbnB1dC9kYXRlLWlucHV0LnR5cGVzJztcclxuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICcuL2NhbGVuZGFyLnR5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtY2FsZW5kYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXHJcbiAgQElucHV0KCkgcHVibGljIGlkOiBzdHJpbmcgPSAnY2FsZW5kYXInO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3Rpb246IERhdGVJbnB1dC5TZWxlY3Rpb24gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiBEYXRlSW5wdXQuU2VsZWN0aW9uTW9kZSA9ICdkYXknO1xyXG5cclxuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlID0gRGF0ZVRpbWVIZWxwZXIubWluRGF0ZVBpY2tlckRhdGU7XHJcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1heERhdGVQaWNrZXJEYXRlO1xyXG5cclxuICBAT3V0cHV0KCkgZGF0ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG5cclxuICAvKiogRGV0ZXJtaW5lcyB0aGUgY3VycmVudCB2aWV3IG9mIHRoZSBjYWxlbmRhci4gKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdmlldzogQ2FsZW5kYXIuVmlldyA9IHsgbW9kZTogJ2RheScsIGRhdGU6IG5ldyBEYXRlKCkgfTtcclxuICBAT3V0cHV0KCkgcHVibGljIHZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENhbGVuZGFyLlZpZXc+KCk7XHJcblxyXG4gIC8qKiBNb250aCBvZiB0aGUgYWN0aXZlIGRhdGUgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgYnV0dG9ucy4gKi9cclxuICBwdWJsaWMgbW9udGg/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBZZWFyIG9mIHRoZSBhY3RpdmUgZGF0ZSBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlciBidXR0b25zLiAqL1xyXG4gIHB1YmxpYyB5ZWFyPzogc3RyaW5nO1xyXG5cclxuICAvKiogUmFuZ2Ugb2YgeWVhcnMgdG8gZGlzcGxheSBpbiB0aGUgeWVhciB2aWV3LiAqL1xyXG4gIHB1YmxpYyB5ZWFyUmFuZ2U/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBBcnJheSBvZiBjYWxlbmRhciBpdGVtIHJvd3MgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIuICovXHJcbiAgcHVibGljIGNhbGVuZGFySXRlbXM6IENhbGVuZGFyLkl0ZW1bXVtdID0gW107XHJcblxyXG4gIC8qKiBXZWVrZGF5IGxhYmVscyB0byBzaG93IGF0IHRoZSB0b3Agb2YgdGhlIGNhbGVuZGFyIGluIGRheSB2aWV3LiAqL1xyXG4gIHB1YmxpYyB3ZWVrRGF5cyA9IG1vbWVudC53ZWVrZGF5c1Nob3J0KCkubWFwKGQgPT4gZC5zbGljZSgwLCAxKSk7XHJcblxyXG4gIHB1YmxpYyBkaXNhYmxlUHJldmlvdXNCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGlzYWJsZU5leHRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gVHJhY2tieSBmdW5jdGlvbnMgZm9yIG5nRm9yIGxvb3BzLiBUaGVzZSByZWR1Y2UgdGhlIG51bWJlciBvZiBET00gZWxlbWVudHMgdGhhdCBuZWVkIHRvIGJlIHVwZGF0ZWQgd2hlbiB0aGUgY2FsZW5kYXIgaXMgcmUtZHJhd24uXHJcbiAgLy8gV2l0aG91dCB0aGVzZSB0aGVyZSBhcmUgc29tZSBjaGFuZ2UtZGV0ZWN0aW9uIGlzc3VlcyBvbiB0aGUgZmlyc3QtdGltZSByZW5kZXJpbmcgb2YgdGhlIGNhbGVuZGFyLlxyXG4gIHB1YmxpYyB0cmFja0J5RGF0ZVJvdyA9IChpbmRleDogbnVtYmVyLCByb3c6IENhbGVuZGFyLkl0ZW1bXSkgPT4gYCR7cm93WzBdLmRhdGUudG9JU09TdHJpbmcoKX0tJHtyb3dbcm93Lmxlbmd0aCAtIDFdLmRhdGUudG9JU09TdHJpbmcoKX1gO1xyXG4gIHB1YmxpYyB0cmFja0J5RGF0ZSA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBDYWxlbmRhci5JdGVtKSA9PiBpdGVtLmRhdGUudG9JU09TdHJpbmcoKTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMudmlldykge1xyXG4gICAgICB0aGlzLmRyYXdDYWxlbmRhcih0aGlzLnZpZXcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTmV4dFByZXZpb3VzU3RhdGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jYWxlbmRhckl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRyYXdDYWxlbmRhcih0aGlzLnZpZXcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmV4dENsaWNrKCk6IHZvaWQge1xyXG4gICAgLy8gSWYgd2UncmUgaW4gZGF5IHZpZXcsIHdlJ3JlIGluY3JlbWVudGluZyBieSBtb250aFxyXG4gICAgLy8gSW4gbW9udGgsIHF1YXJ0ZXIsIGFuZCB5ZWFyIHZpZXdzIHdlJ3JlIGluY3JlbWVudGluZyBieSB5ZWFyXFxcclxuICAgIGNvbnN0IHVuaXQgPSB0aGlzLnZpZXcubW9kZSA9PT0gJ2RheScgPyAnbW9udGgnIDogJ3llYXInO1xyXG4gICAgLy8gSW4geWVhciB2aWV3LCB3ZSdyZSBtb3ZpbmcgYnkgMTYgeWVhcnMgYXQgYSB0aW1lLiBPdGhlcndpc2Ugd2UncmUganVzdCBtb3ZpbmcgYnkgMSBtb250aC95ZWFyLlxyXG4gICAgY29uc3QgY291bnQgPSB0aGlzLnZpZXcubW9kZSA9PT0gJ3llYXInID8gMTYgOiAxO1xyXG4gICAgY29uc3QgZ29Ub0RhdGUgPSBtb21lbnQodGhpcy52aWV3LmRhdGUpLmFkZChjb3VudCwgdW5pdCkudG9EYXRlKCk7XHJcbiAgICB0aGlzLmRyYXdDYWxlbmRhcih7IG1vZGU6IHRoaXMudmlldy5tb2RlLCBkYXRlOiBnb1RvRGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblByZXZpb3VzQ2xpY2soKTogdm9pZCB7XHJcbiAgICAvLyBJZiB3ZSdyZSBpbiBkYXkgdmlldywgd2UncmUgaW5jcmVtZW50aW5nIGJ5IG1vbnRoXHJcbiAgICAvLyBJbiBtb250aCwgcXVhcnRlciwgYW5kIHllYXIgdmlld3Mgd2UncmUgaW5jcmVtZW50aW5nIGJ5IHllYXJcclxuICAgIGNvbnN0IHVuaXQgPSB0aGlzLnZpZXcubW9kZSA9PT0gJ2RheScgPyAnbW9udGgnIDogJ3llYXInO1xyXG4gICAgLy8gSW4geWVhciB2aWV3LCB3ZSdyZSBtb3ZpbmcgYnkgMTYgeWVhcnMgYXQgYSB0aW1lLiBPdGhlcndpc2Ugd2UncmUganVzdCBtb3ZpbmcgYnkgMSBtb250aC95ZWFyLlxyXG4gICAgY29uc3QgY291bnQgPSB0aGlzLnZpZXcubW9kZSA9PT0gJ3llYXInID8gMTYgOiAxO1xyXG4gICAgY29uc3QgZ29Ub0RhdGUgPSBtb21lbnQodGhpcy52aWV3LmRhdGUpLnN1YnRyYWN0KGNvdW50LCB1bml0KS50b0RhdGUoKTtcclxuICAgIHRoaXMuZHJhd0NhbGVuZGFyKHsgbW9kZTogdGhpcy52aWV3Lm1vZGUsIGRhdGU6IGdvVG9EYXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN3aXRjaGVzIHRoZSBjYWxlbmRhciB0byBtb250aCB2aWV3LiAqL1xyXG4gIHB1YmxpYyBvbk1vbnRoQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmRyYXdDYWxlbmRhcih7IG1vZGU6ICdtb250aCcsIGRhdGU6IHRoaXMudmlldy5kYXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN3aXRjaGVzIHRoZSBjYWxlbmRhciB0byB5ZWFyIHZpZXcuICovXHJcbiAgcHVibGljIG9uWWVhckNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kcmF3Q2FsZW5kYXIoeyBtb2RlOiAneWVhcicsIGRhdGU6IHRoaXMudmlldy5kYXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbVNlbGVjdGVkKGl0ZW06IENhbGVuZGFyLkl0ZW0pOiB2b2lkIHtcclxuICAgIHN3aXRjaCh0aGlzLnZpZXcubW9kZSkge1xyXG4gICAgICBjYXNlICdkYXknOlxyXG4gICAgICAgIHRoaXMub25EYXlTZWxlY3RlZChpdGVtKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbW9udGgnOlxyXG4gICAgICAgIHRoaXMub25Nb250aFNlbGVjdGVkKGl0ZW0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdxdWFydGVyJzpcclxuICAgICAgICB0aGlzLm9uUXVhcnRlclNlbGVjdGVkKGl0ZW0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICB0aGlzLm9uWWVhclNlbGVjdGVkKGl0ZW0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblllYXJTZWxlY3RlZChpdGVtOiBDYWxlbmRhci5JdGVtKTogdm9pZCB7XHJcbiAgICAvLyBJZiBpbiB5ZWFyIHNlbGVjdGlvbiBtb2RlLCBlbWl0IHRoZSBjYWxlbmRhciBpdGVtIHNvIHRoZSBkYXRlIHBpY2tlciBjYW4gdXBkYXRlIHRoZSBzZWxlY3Rpb24uXHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcicpIHtcclxuICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdChpdGVtLmRhdGUpO1xyXG4gICAgLy8gSWYgd2UncmUgaW4gcXVhcnRlciBzZWxlY3Rpb24gbW9kZSwgZHJhdyB0aGUgcXVhcnRlciB2aWV3LlxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdxdWFydGVyJykge1xyXG4gICAgICB0aGlzLmRyYXdDYWxlbmRhcih7IG1vZGU6ICdxdWFydGVyJywgZGF0ZTogaXRlbS5kYXRlIH0pO1xyXG4gICAgLy8gQWxsIG90aGVyIHNlbGVjdGlvbiBtb2RlcyBzaG91bGQgem9vbSBpbiB0byB0aGUgbW9udGggdmlldyB3aGVuIGEgeWVhciBpcyBzZWxlY3RlZC5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHJhd0NhbGVuZGFyKHsgbW9kZTogJ21vbnRoJywgZGF0ZTogaXRlbS5kYXRlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblF1YXJ0ZXJTZWxlY3RlZChpdGVtOiBDYWxlbmRhci5JdGVtKTogdm9pZCB7XHJcbiAgICAvLyBRdWFydGVyIHZpZXcgaXMgb25seSBhY2Nlc3NpYmxlIHdoZW4gaW4gcXVhcnRlciBzZWxlY3Rpb24gbW9kZSxcclxuICAgIC8vIHNvIHRoZXJlJ3Mgbm8gb3RoZXIgdmlld3MgdG8gZHJhdyBmcm9tIGhlcmUuIEp1c3QgZW1pdCB0aGUgc2VsZWN0ZWQgaXRlbS5cclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQoaXRlbS5kYXRlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Nb250aFNlbGVjdGVkKGl0ZW06IENhbGVuZGFyLkl0ZW0pOiB2b2lkIHtcclxuICAgIC8vIFdoZW4gaW4gbW9udGggc2VsZWN0aW9uIG1vZGUsIGVtaXQgdGhlIHNlbGVjdGVkIG1vbnRoIGl0ZW0gYW5kIGRvbid0IGNoYW5nZSB0aGUgdmlldy5cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtb250aCcpIHtcclxuICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdChpdGVtLmRhdGUpO1xyXG4gICAgLy8gTW9udGggdmlldyBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSBkYXksIGxhc3Q3ZGF5cywgbGFzdDI4ZGF5cywgbW9udGgsIGFuZCByYW5nZSBzZWxlY3Rpb24gbW9kZXMuXHJcbiAgICAvLyBJZiB3ZSdyZSBub3QgaW4gbW9udGggc2VsZWN0aW9uIG1vZGUsIHdlIG5lZWQgdG8gem9vbSBpbiB0byB0aGUgZGF5IHZpZXcuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRyYXdDYWxlbmRhcih7IG1vZGU6ICdkYXknLCBkYXRlOiBpdGVtLmRhdGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRGF5U2VsZWN0ZWQoaXRlbTogQ2FsZW5kYXIuSXRlbSk6IHZvaWQge1xyXG4gICAgLy8gTm8gZnVydGhlciB2aWV3cyBvdGhlciB0aGFuIGRheSBtb2RlLiBKdXN0IGVtaXQgdGhlIHNlbGVjdGVkIGl0ZW0uXHJcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KGl0ZW0uZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRyYXdDYWxlbmRhcih2aWV3OiBDYWxlbmRhci5WaWV3KTogdm9pZCB7XHJcbiAgICAvLyBJZiB0aGUgdmlldyBoYXMgY2hhbmdlZCwgZW1pdCB0aGUgbmV3IHZpZXcuXHJcbiAgICBpZiAodmlldy5kYXRlICE9PSB0aGlzLnZpZXcuZGF0ZSB8fCB2aWV3Lm1vZGUgIT09IHRoaXMudmlldy5tb2RlKSB7XHJcbiAgICAgIHRoaXMudmlldyA9IHZpZXc7XHJcbiAgICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KHZpZXcpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLm1vbnRoID0gbW9tZW50KHRoaXMudmlldy5kYXRlKS5mb3JtYXQoJ01NTScpO1xyXG4gICAgdGhpcy55ZWFyID0gbW9tZW50KHRoaXMudmlldy5kYXRlKS5mb3JtYXQoJ1lZWVknKTtcclxuICAgIHRoaXMuY2FsZW5kYXJJdGVtcyA9IHRoaXMuZ2V0Q2FsZW5kYXJJdGVtcyh0aGlzLnZpZXcpO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuY2FsZW5kYXJJdGVtc1swXVswXS5kYXRlIDwgdGhpcy5taW5EYXRlID8gdGhpcy5taW5EYXRlIDogdGhpcy5jYWxlbmRhckl0ZW1zWzBdWzBdLmRhdGU7XHJcbiAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuZ2V0TGFzdEl0ZW0oKTtcclxuICAgIGNvbnN0IGVuZFllYXIgPSBsYXN0SXRlbS5kYXRlID4gdGhpcy5tYXhEYXRlID8gdGhpcy5tYXhEYXRlIDogbGFzdEl0ZW0uZGF0ZTtcclxuICAgIHRoaXMueWVhclJhbmdlID0gYCR7bW9tZW50KHN0YXJ0WWVhcikuZm9ybWF0KCdZWVlZJyl9Jm5kYXNoOyR7bW9tZW50KGVuZFllYXIpLmZvcm1hdCgnWVlZWScpfWA7XHJcblxyXG4gICAgdGhpcy51cGRhdGVOZXh0UHJldmlvdXNTdGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2FsZW5kYXJJdGVtcyh2aWV3OiBDYWxlbmRhci5WaWV3KTogQ2FsZW5kYXIuSXRlbVtdW10ge1xyXG4gICAgc3dpdGNoICh2aWV3Lm1vZGUpIHtcclxuICAgICAgY2FzZSAnZGF5JzogcmV0dXJuIHRoaXMuZ2V0RGF5Vmlld0l0ZW1zKHZpZXcuZGF0ZSk7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzogcmV0dXJuIHRoaXMuZ2V0TW9udGhWaWV3SXRlbXModmlldy5kYXRlKTtcclxuICAgICAgY2FzZSAncXVhcnRlcic6IHJldHVybiB0aGlzLmdldFF1YXJ0ZXJWaWV3SXRlbXModmlldy5kYXRlKTtcclxuICAgICAgY2FzZSAneWVhcic6IHJldHVybiB0aGlzLmdldFllYXJWaWV3SXRlbXModmlldy5kYXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF5Vmlld0l0ZW1zKGFjdGl2ZURhdGU6IERhdGUpOiBDYWxlbmRhci5JdGVtW11bXSB7XHJcbiAgICAvLyA2IHJvd3Mgb2YgNyBkYXlzID0gNDIgZGF5c1xyXG4gICAgcmV0dXJuIHJhbmdlKDAsIDYpLm1hcChyID0+IHtcclxuICAgICAgcmV0dXJuIHJhbmdlKDAsIDcpLm1hcChkID0+IHtcclxuICAgICAgICAvLyBVc2UgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoLlxyXG4gICAgICAgIC8vIFRoaXMgcGFkcyBvdXQgdGhlIGZpcnN0IHdlZWsgd2l0aCBhbnkgZGF5cyBmcm9tIHRoZSBwcmV2aW91cyBtb250aC5cclxuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KGFjdGl2ZURhdGUpLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpLmFkZChyICogNyArIGQsICdkYXknKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZGF0ZTogZGF0ZS50b0RhdGUoKSxcclxuICAgICAgICAgIGxhYmVsOiBkYXRlLmZvcm1hdCgnRCcpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TW9udGhWaWV3SXRlbXMoYWN0aXZlRGF0ZTogRGF0ZSk6IENhbGVuZGFyLkl0ZW1bXVtdIHtcclxuICAgIC8vIDQgcm93cyBvZiAzIG1vbnRocyA9IDEyIG1vbnRoc1xyXG4gICAgcmV0dXJuIHJhbmdlKDAsIDQpLm1hcChyID0+IHtcclxuICAgICAgcmV0dXJuIHJhbmdlKDAsIDMpLm1hcChtID0+IHtcclxuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KGFjdGl2ZURhdGUpLnN0YXJ0T2YoJ3llYXInKS5hZGQociAqIDMgKyBtLCAnbW9udGgnKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZGF0ZTogZGF0ZS50b0RhdGUoKSxcclxuICAgICAgICAgIGxhYmVsOiBkYXRlLmZvcm1hdCgnTU1NJylcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWFydGVyVmlld0l0ZW1zKGFjdGl2ZURhdGU6IERhdGUpOiBDYWxlbmRhci5JdGVtW11bXSB7XHJcbiAgICAvLyAyIHJvd3Mgb2YgMiBxdWFydGVycyA9IDQgcXVhcnRlcnNcclxuICAgIHJldHVybiByYW5nZSgwLCAyKS5tYXAociA9PiB7XHJcbiAgICAgIHJldHVybiByYW5nZSgwLCAyKS5tYXAocSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChhY3RpdmVEYXRlKS5zdGFydE9mKCd5ZWFyJykuYWRkKHIgKiAyICsgcSwgJ3F1YXJ0ZXInKTtcclxuICAgICAgICBjb25zdCBlbmREYXRlID0gbW9tZW50KGRhdGUpLmVuZE9mKCdxdWFydGVyJyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGRhdGU6IGRhdGUudG9EYXRlKCksXHJcbiAgICAgICAgICBsYWJlbDogYCR7ZGF0ZS5mb3JtYXQoJ01NTScpfSZuZGFzaDske2VuZERhdGUuZm9ybWF0KCdNTU0nKX1gXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0WWVhclZpZXdJdGVtcyhhY3RpdmVEYXRlOiBEYXRlKTogQ2FsZW5kYXIuSXRlbVtdW10ge1xyXG4gICAgLy8gNCByb3dzIG9mIDQgeWVhcnMgPSAxNiB5ZWFyc1xyXG4gICAgcmV0dXJuIHJhbmdlKDAsIDQpLm1hcChyID0+IHtcclxuICAgICAgcmV0dXJuIHJhbmdlKDAsIDQpLm1hcCh5ID0+IHtcclxuICAgICAgICAvLyBTdWJ0cmFjdGluZyA4IHllYXJzIHRvIHB1dCB0aGUgY3VycmVudCBhY3RpdmUgeWVhciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAzcmQgcm93LlxyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoYWN0aXZlRGF0ZSkuc3RhcnRPZigneWVhcicpLnN1YnRyYWN0KDgsICd5ZWFycycpLmFkZChyICogNCArIHksICd5ZWFyJyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGRhdGU6IGRhdGUudG9EYXRlKCksXHJcbiAgICAgICAgICBsYWJlbDogZGF0ZS5mb3JtYXQoJ1lZWVknKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5leHRQcmV2aW91c1N0YXRlcygpOiB2b2lkIHtcclxuICAgIC8vIFdlIGNoYW5nZSB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIG1pbiBhbmQgbWF4IGRhdGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXcgbW9kZS5cclxuICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzYWJsZSB0aGUgbmV4dC9wcmV2aW91cyBidXR0b25zIGlmIHRoZSBtaW4gb3IgbWF4IGRhdGUgaXMgd2l0aGluIHRoZVxyXG4gICAgLy8gbmV4dCBvciBwcmV2aW91cyB2aWV3XHJcbiAgICBjb25zdCB1bml0ID0gdGhpcy52aWV3Lm1vZGUgPT09ICdkYXknID8gJ21vbnRoJyA6ICd5ZWFyJztcclxuXHJcbiAgICAvLyBXaGVuIGluIHllYXIgdmlldywgd2UgbmVlZCB0byBzdWJ0cmFjdCA5IHllYXJzIHRvIGRldGVybWluZSBpZiB3ZSdyZSBwYXN0IHRoZSBtaW4gZGF0ZS5cclxuICAgIC8vIFRoZSB5ZWFyIHZpZXcgaXMgMTYgeWVhcnMgbG9uZywgYW5kIHRoZSBjdXJyZW50IGRhdGUgaXMgdGhlIDl0aCB5ZWFyIGluIHRoZSB2aWV3LlxyXG4gICAgY29uc3Qgc3ViQ291bnQgPSB0aGlzLnZpZXcubW9kZSA9PT0gJ3llYXInID8gOSA6IDE7XHJcbiAgICBpZiAobW9tZW50KHRoaXMudmlldy5kYXRlKS5zdWJ0cmFjdChzdWJDb3VudCwgdW5pdCkuaXNCZWZvcmUodGhpcy5taW5EYXRlLCB1bml0KSkge1xyXG4gICAgICB0aGlzLmRpc2FibGVQcmV2aW91c0J1dHRvbiA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVQcmV2aW91c0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdoZW4gaW4geWVhciB2aWV3LCB3ZSBuZWVkIHRvIGFkZCA4IHllYXJzIHRvIGRldGVybWluZSBpZiB3ZSdyZSBwYXN0IHRoZSBtYXggZGF0ZS5cclxuICAgIC8vIFRoZSB5ZWFyIHZpZXcgaXMgMTYgeWVhcnMgbG9uZywgYW5kIHRoZSBjdXJyZW50IGRhdGUgaXMgdGhlIDl0aCB5ZWFyIGluIHRoZSB2aWV3LlxyXG4gICAgY29uc3QgYWRkQ291bnQgPSB0aGlzLnZpZXcubW9kZSA9PT0gJ3llYXInID8gOCA6IDE7XHJcbiAgICBpZiAobW9tZW50KHRoaXMudmlldy5kYXRlKS5hZGQoYWRkQ291bnQsIHVuaXQpLmlzQWZ0ZXIodGhpcy5tYXhEYXRlLCB1bml0KSkge1xyXG4gICAgICB0aGlzLmRpc2FibGVOZXh0QnV0dG9uID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZU5leHRCdXR0b24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGFzdEl0ZW0oKTogQ2FsZW5kYXIuSXRlbSB7XHJcbiAgICBjb25zdCBsYXN0Um93ID0gdGhpcy5jYWxlbmRhckl0ZW1zW3RoaXMuY2FsZW5kYXJJdGVtcy5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBsYXN0Um93W2xhc3RSb3cubGVuZ3RoIC0gMV07XHJcbiAgfVxyXG59XHJcbiIsIjxoZWFkZXIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTEgbWItMiBweC0xXCI+XHJcbiAgPGJ1dHRvbiBpZD1cInt7aWR9fV9wcmV2X2J1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1yLWF1dG9cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUHJldmlvdXNDbGljaygpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlUHJldmlvdXNCdXR0b25cIj5cclxuICAgIDxpIGNsYXNzPVwiZWMtaWNvbiBpY29uLWFuZ2xlLWRvd24gcm90YXRlLTkwXCI+PC9pPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uICpuZ0lmPVwidmlldy5tb2RlID09PSAnZGF5J1wiXHJcbiAgICAgICAgICBpZD1cInt7aWR9fV9tb250aF9idXR0b25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJvZHktMSBmb250LXdlaWdodC1ib2xkXCJcclxuICAgICAgICAgIChjbGljayk9XCJvbk1vbnRoQ2xpY2soKVwiPlxyXG4gICAge3ttb250aH19XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxidXR0b24gKm5nSWY9XCJ2aWV3Lm1vZGUgIT09ICd5ZWFyJ1wiXHJcbiAgICAgICAgICBpZD1cInt7aWR9fV95ZWFyX2J1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS0xIGZvbnQtd2VpZ2h0LWJvbGRcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uWWVhckNsaWNrKClcIj5cclxuICAgIHt7eWVhcn19XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxkaXYgaWQ9XCJ7e2lkfX1feWVhcl9yYW5nZVwiXHJcbiAgICAgICAqbmdJZj1cInZpZXcubW9kZSA9PT0gJ3llYXInXCJcclxuICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTEgZm9udC13ZWlnaHQtYm9sZFwiXHJcbiAgICAgICBbaW5uZXJIVE1MXT1cInllYXJSYW5nZVwiPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8YnV0dG9uIGlkPVwie3tpZH19X25leHRfYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwibWwtYXV0b1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25OZXh0Q2xpY2soKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZU5leHRCdXR0b25cIj5cclxuICAgIDxpIGNsYXNzPVwiZWMtaWNvbiBpY29uLWFuZ2xlLWRvd24gcm90YXRlLTI3MFwiPjwvaT5cclxuICA8L2J1dHRvbj5cclxuPC9oZWFkZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwidmlldy5tb2RlID09PSAnZGF5J1wiXHJcbiAgICAgY2xhc3M9XCJtYi0xIHB4LTIgZC1mbGV4XCI+XHJcbiAgPGgzICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla0RheXNcIlxyXG4gICAgICBjbGFzcz1cInRleHQtaGVhZGluZy0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgIHN0eWxlPVwid2lkdGg6IDJyZW07IGhlaWdodDogMS43NXJlbTtcIj57e2RheX19PC9oMz5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgY2FsZW5kYXJJdGVtczsgbGFzdCBhcyBpc0xhc3Q7IHRyYWNrQnk6IHRyYWNrQnlEYXRlUm93XCJcclxuICAgICBjbGFzcz1cInB4LTIgZC1mbGV4IHt7dmlldy5tb2RlfX0tdmlld1wiXHJcbiAgICAgW2NsYXNzLm1iLTFdPVwiIWlzTGFzdFwiXHJcbiAgICAgW2NsYXNzLm1iLTJdPVwiaXNMYXN0XCI+XHJcbiAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiByb3c7IHRyYWNrQnk6IHRyYWNrQnlEYXRlXCJcclxuICAgICAgICAgIGlkPVwie3tpZH19X2l0ZW1fe3tpdGVtLmRhdGUgfCBkYXRlOidNTV9kZF95eXl5J319XCJcclxuICAgICAgICAgIGVjLWNhbGVuZGFyLWl0ZW1cclxuICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxyXG4gICAgICAgICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIlxyXG4gICAgICAgICAgW3ZpZXddPVwidmlld1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25JdGVtU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgW2lubmVySFRNTF09XCJpdGVtLmxhYmVsXCJcclxuICAgICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQVU3RCxNQUFNLE9BQU8saUJBQWlCO0lBTjlCO1FBU2tCLE9BQUUsR0FBVyxVQUFVLENBQUM7UUFFL0IsY0FBUyxHQUErQixJQUFJLENBQUM7UUFDN0Msa0JBQWEsR0FBNEIsS0FBSyxDQUFDO1FBRS9DLFlBQU8sR0FBUyxjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDakQsWUFBTyxHQUFTLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztRQUUxQyxhQUFRLEdBQVksQ0FBQyxDQUFDO1FBRTVCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVsRCxtREFBbUQ7UUFDbkMsU0FBSSxHQUFrQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUN2RCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFXaEUsOERBQThEO1FBQ3ZELGtCQUFhLEdBQXNCLEVBQUUsQ0FB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QixDQUFDLE1BQU07OEJBSy9CLEVBQUU7c0JBRGpCLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRVUsUUFBUTtzQkFBdkIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUdTLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1csVUFBVTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvZGF0ZS10aW1lLWhlbHBlcic7XHJcbmltcG9ydCB7IERhdGVJbnB1dCB9IGZyb20gJy4uL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC50eXBlcyc7XHJcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnLi9jYWxlbmRhci50eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLWNhbGVuZGFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nID0gJ2NhbGVuZGFyJztcclxuXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uOiBEYXRlSW5wdXQuU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogRGF0ZUlucHV0LlNlbGVjdGlvbk1vZGUgPSAnZGF5JztcclxuXHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1pbkRhdGVQaWNrZXJEYXRlO1xyXG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgPSBEYXRlVGltZUhlbHBlci5tYXhEYXRlUGlja2VyRGF0ZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIHRhYmluZGV4PzogbnVtYmVyID0gMDtcclxuXHJcbiAgQE91dHB1dCgpIGRhdGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuXHJcbiAgLyoqIERldGVybWluZXMgdGhlIGN1cnJlbnQgdmlldyBvZiB0aGUgY2FsZW5kYXIuICovXHJcbiAgQElucHV0KCkgcHVibGljIHZpZXc6IENhbGVuZGFyLlZpZXcgPSB7IG1vZGU6ICdkYXknLCBkYXRlOiBuZXcgRGF0ZSgpIH07XHJcbiAgQE91dHB1dCgpIHB1YmxpYyB2aWV3Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDYWxlbmRhci5WaWV3PigpO1xyXG5cclxuICAvKiogTW9udGggb2YgdGhlIGFjdGl2ZSBkYXRlIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyIGJ1dHRvbnMuICovXHJcbiAgcHVibGljIG1vbnRoPzogc3RyaW5nO1xyXG5cclxuICAvKiogWWVhciBvZiB0aGUgYWN0aXZlIGRhdGUgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgYnV0dG9ucy4gKi9cclxuICBwdWJsaWMgeWVhcj86IHN0cmluZztcclxuXHJcbiAgLyoqIFJhbmdlIG9mIHllYXJzIHRvIGRpc3BsYXkgaW4gdGhlIHllYXIgdmlldy4gKi9cclxuICBwdWJsaWMgeWVhclJhbmdlPzogc3RyaW5nO1xyXG5cclxuICAvKiogQXJyYXkgb2YgY2FsZW5kYXIgaXRlbSByb3dzIHRvIGRpc3BsYXkgaW4gdGhlIGNhbGVuZGFyLiAqL1xyXG4gIHB1YmxpYyBjYWxlbmRhckl0ZW1zOiBDYWxlbmRhci5JdGVtW11bXSA9IFtdO1xyXG5cclxuICAvKiogV2Vla2RheSBsYWJlbHMgdG8gc2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBjYWxlbmRhciBpbiBkYXkgdmlldy4gKi9cclxuICBwdWJsaWMgd2Vla0RheXMgPSBtb21lbnQud2Vla2RheXNTaG9ydCgpLm1hcChkID0+IGQuc2xpY2UoMCwgMSkpO1xyXG5cclxuICBwdWJsaWMgZGlzYWJsZVByZXZpb3VzQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRpc2FibGVOZXh0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFRyYWNrYnkgZnVuY3Rpb25zIGZvciBuZ0ZvciBsb29wcy4gVGhlc2UgcmVkdWNlIHRoZSBudW1iZXIgb2YgRE9NIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVkIHdoZW4gdGhlIGNhbGVuZGFyIGlzIHJlLWRyYXduLlxyXG4gIC8vIFdpdGhvdXQgdGhlc2UgdGhlcmUgYXJlIHNvbWUgY2hhbmdlLWRldGVjdGlvbiBpc3N1ZXMgb24gdGhlIGZpcnN0LXRpbWUgcmVuZGVyaW5nIG9mIHRoZSBjYWxlbmRhci5cclxuICBwdWJsaWMgdHJhY2tCeURhdGVSb3cgPSAoaW5kZXg6IG51bWJlciwgcm93OiBDYWxlbmRhci5JdGVtW10pID0+IGAke3Jvd1swXS5kYXRlLnRvSVNPU3RyaW5nKCl9LSR7cm93W3Jvdy5sZW5ndGggLSAxXS5kYXRlLnRvSVNPU3RyaW5nKCl9YDtcclxuICBwdWJsaWMgdHJhY2tCeURhdGUgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogQ2FsZW5kYXIuSXRlbSkgPT4gaXRlbS5kYXRlLnRvSVNPU3RyaW5nKCk7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLnZpZXcpIHtcclxuICAgICAgdGhpcy5kcmF3Q2FsZW5kYXIodGhpcy52aWV3KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5taW5EYXRlIHx8IGNoYW5nZXMubWF4RGF0ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU5leHRQcmV2aW91c1N0YXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXJJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kcmF3Q2FsZW5kYXIodGhpcy52aWV3KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk5leHRDbGljaygpOiB2b2lkIHtcclxuICAgIC8vIElmIHdlJ3JlIGluIGRheSB2aWV3LCB3ZSdyZSBpbmNyZW1lbnRpbmcgYnkgbW9udGhcclxuICAgIC8vIEluIG1vbnRoLCBxdWFydGVyLCBhbmQgeWVhciB2aWV3cyB3ZSdyZSBpbmNyZW1lbnRpbmcgYnkgeWVhclxcXHJcbiAgICBjb25zdCB1bml0ID0gdGhpcy52aWV3Lm1vZGUgPT09ICdkYXknID8gJ21vbnRoJyA6ICd5ZWFyJztcclxuICAgIC8vIEluIHllYXIgdmlldywgd2UncmUgbW92aW5nIGJ5IDE2IHllYXJzIGF0IGEgdGltZS4gT3RoZXJ3aXNlIHdlJ3JlIGp1c3QgbW92aW5nIGJ5IDEgbW9udGgveWVhci5cclxuICAgIGNvbnN0IGNvdW50ID0gdGhpcy52aWV3Lm1vZGUgPT09ICd5ZWFyJyA/IDE2IDogMTtcclxuICAgIGNvbnN0IGdvVG9EYXRlID0gbW9tZW50KHRoaXMudmlldy5kYXRlKS5hZGQoY291bnQsIHVuaXQpLnRvRGF0ZSgpO1xyXG4gICAgdGhpcy5kcmF3Q2FsZW5kYXIoeyBtb2RlOiB0aGlzLnZpZXcubW9kZSwgZGF0ZTogZ29Ub0RhdGUgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25QcmV2aW91c0NsaWNrKCk6IHZvaWQge1xyXG4gICAgLy8gSWYgd2UncmUgaW4gZGF5IHZpZXcsIHdlJ3JlIGluY3JlbWVudGluZyBieSBtb250aFxyXG4gICAgLy8gSW4gbW9udGgsIHF1YXJ0ZXIsIGFuZCB5ZWFyIHZpZXdzIHdlJ3JlIGluY3JlbWVudGluZyBieSB5ZWFyXHJcbiAgICBjb25zdCB1bml0ID0gdGhpcy52aWV3Lm1vZGUgPT09ICdkYXknID8gJ21vbnRoJyA6ICd5ZWFyJztcclxuICAgIC8vIEluIHllYXIgdmlldywgd2UncmUgbW92aW5nIGJ5IDE2IHllYXJzIGF0IGEgdGltZS4gT3RoZXJ3aXNlIHdlJ3JlIGp1c3QgbW92aW5nIGJ5IDEgbW9udGgveWVhci5cclxuICAgIGNvbnN0IGNvdW50ID0gdGhpcy52aWV3Lm1vZGUgPT09ICd5ZWFyJyA/IDE2IDogMTtcclxuICAgIGNvbnN0IGdvVG9EYXRlID0gbW9tZW50KHRoaXMudmlldy5kYXRlKS5zdWJ0cmFjdChjb3VudCwgdW5pdCkudG9EYXRlKCk7XHJcbiAgICB0aGlzLmRyYXdDYWxlbmRhcih7IG1vZGU6IHRoaXMudmlldy5tb2RlLCBkYXRlOiBnb1RvRGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBTd2l0Y2hlcyB0aGUgY2FsZW5kYXIgdG8gbW9udGggdmlldy4gKi9cclxuICBwdWJsaWMgb25Nb250aENsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kcmF3Q2FsZW5kYXIoeyBtb2RlOiAnbW9udGgnLCBkYXRlOiB0aGlzLnZpZXcuZGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBTd2l0Y2hlcyB0aGUgY2FsZW5kYXIgdG8geWVhciB2aWV3LiAqL1xyXG4gIHB1YmxpYyBvblllYXJDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJhd0NhbGVuZGFyKHsgbW9kZTogJ3llYXInLCBkYXRlOiB0aGlzLnZpZXcuZGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZChpdGVtOiBDYWxlbmRhci5JdGVtKTogdm9pZCB7XHJcbiAgICBzd2l0Y2godGhpcy52aWV3Lm1vZGUpIHtcclxuICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICB0aGlzLm9uRGF5U2VsZWN0ZWQoaXRlbSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICB0aGlzLm9uTW9udGhTZWxlY3RlZChpdGVtKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncXVhcnRlcic6XHJcbiAgICAgICAgdGhpcy5vblF1YXJ0ZXJTZWxlY3RlZChpdGVtKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAneWVhcic6XHJcbiAgICAgICAgdGhpcy5vblllYXJTZWxlY3RlZChpdGVtKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25ZZWFyU2VsZWN0ZWQoaXRlbTogQ2FsZW5kYXIuSXRlbSk6IHZvaWQge1xyXG4gICAgLy8gSWYgaW4geWVhciBzZWxlY3Rpb24gbW9kZSwgZW1pdCB0aGUgY2FsZW5kYXIgaXRlbSBzbyB0aGUgZGF0ZSBwaWNrZXIgY2FuIHVwZGF0ZSB0aGUgc2VsZWN0aW9uLlxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3llYXInKSB7XHJcbiAgICAgIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQoaXRlbS5kYXRlKTtcclxuICAgIC8vIElmIHdlJ3JlIGluIHF1YXJ0ZXIgc2VsZWN0aW9uIG1vZGUsIGRyYXcgdGhlIHF1YXJ0ZXIgdmlldy5cclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAncXVhcnRlcicpIHtcclxuICAgICAgdGhpcy5kcmF3Q2FsZW5kYXIoeyBtb2RlOiAncXVhcnRlcicsIGRhdGU6IGl0ZW0uZGF0ZSB9KTtcclxuICAgIC8vIEFsbCBvdGhlciBzZWxlY3Rpb24gbW9kZXMgc2hvdWxkIHpvb20gaW4gdG8gdGhlIG1vbnRoIHZpZXcgd2hlbiBhIHllYXIgaXMgc2VsZWN0ZWQuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRyYXdDYWxlbmRhcih7IG1vZGU6ICdtb250aCcsIGRhdGU6IGl0ZW0uZGF0ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25RdWFydGVyU2VsZWN0ZWQoaXRlbTogQ2FsZW5kYXIuSXRlbSk6IHZvaWQge1xyXG4gICAgLy8gUXVhcnRlciB2aWV3IGlzIG9ubHkgYWNjZXNzaWJsZSB3aGVuIGluIHF1YXJ0ZXIgc2VsZWN0aW9uIG1vZGUsXHJcbiAgICAvLyBzbyB0aGVyZSdzIG5vIG90aGVyIHZpZXdzIHRvIGRyYXcgZnJvbSBoZXJlLiBKdXN0IGVtaXQgdGhlIHNlbGVjdGVkIGl0ZW0uXHJcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KGl0ZW0uZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uTW9udGhTZWxlY3RlZChpdGVtOiBDYWxlbmRhci5JdGVtKTogdm9pZCB7XHJcbiAgICAvLyBXaGVuIGluIG1vbnRoIHNlbGVjdGlvbiBtb2RlLCBlbWl0IHRoZSBzZWxlY3RlZCBtb250aCBpdGVtIGFuZCBkb24ndCBjaGFuZ2UgdGhlIHZpZXcuXHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbW9udGgnKSB7XHJcbiAgICAgIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQoaXRlbS5kYXRlKTtcclxuICAgIC8vIE1vbnRoIHZpZXcgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gZGF5LCBsYXN0N2RheXMsIGxhc3QyOGRheXMsIG1vbnRoLCBhbmQgcmFuZ2Ugc2VsZWN0aW9uIG1vZGVzLlxyXG4gICAgLy8gSWYgd2UncmUgbm90IGluIG1vbnRoIHNlbGVjdGlvbiBtb2RlLCB3ZSBuZWVkIHRvIHpvb20gaW4gdG8gdGhlIGRheSB2aWV3LlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kcmF3Q2FsZW5kYXIoeyBtb2RlOiAnZGF5JywgZGF0ZTogaXRlbS5kYXRlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkRheVNlbGVjdGVkKGl0ZW06IENhbGVuZGFyLkl0ZW0pOiB2b2lkIHtcclxuICAgIC8vIE5vIGZ1cnRoZXIgdmlld3Mgb3RoZXIgdGhhbiBkYXkgbW9kZS4gSnVzdCBlbWl0IHRoZSBzZWxlY3RlZCBpdGVtLlxyXG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdChpdGVtLmRhdGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkcmF3Q2FsZW5kYXIodmlldzogQ2FsZW5kYXIuVmlldyk6IHZvaWQge1xyXG4gICAgLy8gSWYgdGhlIHZpZXcgaGFzIGNoYW5nZWQsIGVtaXQgdGhlIG5ldyB2aWV3LlxyXG4gICAgaWYgKHZpZXcuZGF0ZSAhPT0gdGhpcy52aWV3LmRhdGUgfHwgdmlldy5tb2RlICE9PSB0aGlzLnZpZXcubW9kZSkge1xyXG4gICAgICB0aGlzLnZpZXcgPSB2aWV3O1xyXG4gICAgICB0aGlzLnZpZXdDaGFuZ2UuZW1pdCh2aWV3KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5tb250aCA9IG1vbWVudCh0aGlzLnZpZXcuZGF0ZSkuZm9ybWF0KCdNTU0nKTtcclxuICAgIHRoaXMueWVhciA9IG1vbWVudCh0aGlzLnZpZXcuZGF0ZSkuZm9ybWF0KCdZWVlZJyk7XHJcbiAgICB0aGlzLmNhbGVuZGFySXRlbXMgPSB0aGlzLmdldENhbGVuZGFySXRlbXModGhpcy52aWV3KTtcclxuXHJcbiAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmNhbGVuZGFySXRlbXNbMF1bMF0uZGF0ZSA8IHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZSA6IHRoaXMuY2FsZW5kYXJJdGVtc1swXVswXS5kYXRlO1xyXG4gICAgY29uc3QgbGFzdEl0ZW0gPSB0aGlzLmdldExhc3RJdGVtKCk7XHJcbiAgICBjb25zdCBlbmRZZWFyID0gbGFzdEl0ZW0uZGF0ZSA+IHRoaXMubWF4RGF0ZSA/IHRoaXMubWF4RGF0ZSA6IGxhc3RJdGVtLmRhdGU7XHJcbiAgICB0aGlzLnllYXJSYW5nZSA9IGAke21vbWVudChzdGFydFllYXIpLmZvcm1hdCgnWVlZWScpfSZuZGFzaDske21vbWVudChlbmRZZWFyKS5mb3JtYXQoJ1lZWVknKX1gO1xyXG5cclxuICAgIHRoaXMudXBkYXRlTmV4dFByZXZpb3VzU3RhdGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhbGVuZGFySXRlbXModmlldzogQ2FsZW5kYXIuVmlldyk6IENhbGVuZGFyLkl0ZW1bXVtdIHtcclxuICAgIHN3aXRjaCAodmlldy5tb2RlKSB7XHJcbiAgICAgIGNhc2UgJ2RheSc6IHJldHVybiB0aGlzLmdldERheVZpZXdJdGVtcyh2aWV3LmRhdGUpO1xyXG4gICAgICBjYXNlICdtb250aCc6IHJldHVybiB0aGlzLmdldE1vbnRoVmlld0l0ZW1zKHZpZXcuZGF0ZSk7XHJcbiAgICAgIGNhc2UgJ3F1YXJ0ZXInOiByZXR1cm4gdGhpcy5nZXRRdWFydGVyVmlld0l0ZW1zKHZpZXcuZGF0ZSk7XHJcbiAgICAgIGNhc2UgJ3llYXInOiByZXR1cm4gdGhpcy5nZXRZZWFyVmlld0l0ZW1zKHZpZXcuZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERheVZpZXdJdGVtcyhhY3RpdmVEYXRlOiBEYXRlKTogQ2FsZW5kYXIuSXRlbVtdW10ge1xyXG4gICAgLy8gNiByb3dzIG9mIDcgZGF5cyA9IDQyIGRheXNcclxuICAgIHJldHVybiByYW5nZSgwLCA2KS5tYXAociA9PiB7XHJcbiAgICAgIHJldHVybiByYW5nZSgwLCA3KS5tYXAoZCA9PiB7XHJcbiAgICAgICAgLy8gVXNlIHRoZSBzdGFydCBvZiB0aGUgd2VlayBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aC5cclxuICAgICAgICAvLyBUaGlzIHBhZHMgb3V0IHRoZSBmaXJzdCB3ZWVrIHdpdGggYW55IGRheXMgZnJvbSB0aGUgcHJldmlvdXMgbW9udGguXHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChhY3RpdmVEYXRlKS5zdGFydE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQociAqIDcgKyBkLCAnZGF5Jyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGRhdGU6IGRhdGUudG9EYXRlKCksXHJcbiAgICAgICAgICBsYWJlbDogZGF0ZS5mb3JtYXQoJ0QnKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1vbnRoVmlld0l0ZW1zKGFjdGl2ZURhdGU6IERhdGUpOiBDYWxlbmRhci5JdGVtW11bXSB7XHJcbiAgICAvLyA0IHJvd3Mgb2YgMyBtb250aHMgPSAxMiBtb250aHNcclxuICAgIHJldHVybiByYW5nZSgwLCA0KS5tYXAociA9PiB7XHJcbiAgICAgIHJldHVybiByYW5nZSgwLCAzKS5tYXAobSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChhY3RpdmVEYXRlKS5zdGFydE9mKCd5ZWFyJykuYWRkKHIgKiAzICsgbSwgJ21vbnRoJyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGRhdGU6IGRhdGUudG9EYXRlKCksXHJcbiAgICAgICAgICBsYWJlbDogZGF0ZS5mb3JtYXQoJ01NTScpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UXVhcnRlclZpZXdJdGVtcyhhY3RpdmVEYXRlOiBEYXRlKTogQ2FsZW5kYXIuSXRlbVtdW10ge1xyXG4gICAgLy8gMiByb3dzIG9mIDIgcXVhcnRlcnMgPSA0IHF1YXJ0ZXJzXHJcbiAgICByZXR1cm4gcmFuZ2UoMCwgMikubWFwKHIgPT4ge1xyXG4gICAgICByZXR1cm4gcmFuZ2UoMCwgMikubWFwKHEgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoYWN0aXZlRGF0ZSkuc3RhcnRPZigneWVhcicpLmFkZChyICogMiArIHEsICdxdWFydGVyJyk7XHJcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG1vbWVudChkYXRlKS5lbmRPZigncXVhcnRlcicpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkYXRlOiBkYXRlLnRvRGF0ZSgpLFxyXG4gICAgICAgICAgbGFiZWw6IGAke2RhdGUuZm9ybWF0KCdNTU0nKX0mbmRhc2g7JHtlbmREYXRlLmZvcm1hdCgnTU1NJyl9YFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFllYXJWaWV3SXRlbXMoYWN0aXZlRGF0ZTogRGF0ZSk6IENhbGVuZGFyLkl0ZW1bXVtdIHtcclxuICAgIC8vIDQgcm93cyBvZiA0IHllYXJzID0gMTYgeWVhcnNcclxuICAgIHJldHVybiByYW5nZSgwLCA0KS5tYXAociA9PiB7XHJcbiAgICAgIHJldHVybiByYW5nZSgwLCA0KS5tYXAoeSA9PiB7XHJcbiAgICAgICAgLy8gU3VidHJhY3RpbmcgOCB5ZWFycyB0byBwdXQgdGhlIGN1cnJlbnQgYWN0aXZlIHllYXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgM3JkIHJvdy5cclxuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KGFjdGl2ZURhdGUpLnN0YXJ0T2YoJ3llYXInKS5zdWJ0cmFjdCg4LCAneWVhcnMnKS5hZGQociAqIDQgKyB5LCAneWVhcicpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkYXRlOiBkYXRlLnRvRGF0ZSgpLFxyXG4gICAgICAgICAgbGFiZWw6IGRhdGUuZm9ybWF0KCdZWVlZJylcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVOZXh0UHJldmlvdXNTdGF0ZXMoKTogdm9pZCB7XHJcbiAgICAvLyBXZSBjaGFuZ2UgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBtaW4gYW5kIG1heCBkYXRlIGNoZWNrcyBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3IG1vZGUuXHJcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRpc2FibGUgdGhlIG5leHQvcHJldmlvdXMgYnV0dG9ucyBpZiB0aGUgbWluIG9yIG1heCBkYXRlIGlzIHdpdGhpbiB0aGVcclxuICAgIC8vIG5leHQgb3IgcHJldmlvdXMgdmlld1xyXG4gICAgY29uc3QgdW5pdCA9IHRoaXMudmlldy5tb2RlID09PSAnZGF5JyA/ICdtb250aCcgOiAneWVhcic7XHJcblxyXG4gICAgLy8gV2hlbiBpbiB5ZWFyIHZpZXcsIHdlIG5lZWQgdG8gc3VidHJhY3QgOSB5ZWFycyB0byBkZXRlcm1pbmUgaWYgd2UncmUgcGFzdCB0aGUgbWluIGRhdGUuXHJcbiAgICAvLyBUaGUgeWVhciB2aWV3IGlzIDE2IHllYXJzIGxvbmcsIGFuZCB0aGUgY3VycmVudCBkYXRlIGlzIHRoZSA5dGggeWVhciBpbiB0aGUgdmlldy5cclxuICAgIGNvbnN0IHN1YkNvdW50ID0gdGhpcy52aWV3Lm1vZGUgPT09ICd5ZWFyJyA/IDkgOiAxO1xyXG4gICAgaWYgKG1vbWVudCh0aGlzLnZpZXcuZGF0ZSkuc3VidHJhY3Qoc3ViQ291bnQsIHVuaXQpLmlzQmVmb3JlKHRoaXMubWluRGF0ZSwgdW5pdCkpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlUHJldmlvdXNCdXR0b24gPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlUHJldmlvdXNCdXR0b24gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXaGVuIGluIHllYXIgdmlldywgd2UgbmVlZCB0byBhZGQgOCB5ZWFycyB0byBkZXRlcm1pbmUgaWYgd2UncmUgcGFzdCB0aGUgbWF4IGRhdGUuXHJcbiAgICAvLyBUaGUgeWVhciB2aWV3IGlzIDE2IHllYXJzIGxvbmcsIGFuZCB0aGUgY3VycmVudCBkYXRlIGlzIHRoZSA5dGggeWVhciBpbiB0aGUgdmlldy5cclxuICAgIGNvbnN0IGFkZENvdW50ID0gdGhpcy52aWV3Lm1vZGUgPT09ICd5ZWFyJyA/IDggOiAxO1xyXG4gICAgaWYgKG1vbWVudCh0aGlzLnZpZXcuZGF0ZSkuYWRkKGFkZENvdW50LCB1bml0KS5pc0FmdGVyKHRoaXMubWF4RGF0ZSwgdW5pdCkpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlTmV4dEJ1dHRvbiA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVOZXh0QnV0dG9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExhc3RJdGVtKCk6IENhbGVuZGFyLkl0ZW0ge1xyXG4gICAgY29uc3QgbGFzdFJvdyA9IHRoaXMuY2FsZW5kYXJJdGVtc1t0aGlzLmNhbGVuZGFySXRlbXMubGVuZ3RoIC0gMV07XHJcbiAgICByZXR1cm4gbGFzdFJvd1tsYXN0Um93Lmxlbmd0aCAtIDFdO1xyXG4gIH1cclxufVxyXG4iLCI8aGVhZGVyIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0xIG1iLTIgcHgtMVwiPlxyXG4gIDxidXR0b24gaWQ9XCJ7e2lkfX1fcHJldl9idXR0b25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJtci1hdXRvXCJcclxuICAgICAgICAgIChjbGljayk9XCJvblByZXZpb3VzQ2xpY2soKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVByZXZpb3VzQnV0dG9uXCJcclxuICAgICAgICAgIHRhYmluZGV4PVwie3t0YWJpbmRleH19XCI+XHJcbiAgICA8aSBjbGFzcz1cImVjLWljb24gaWNvbi1hbmdsZS1kb3duIHJvdGF0ZS05MFwiPjwvaT5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvbiAqbmdJZj1cInZpZXcubW9kZSA9PT0gJ2RheSdcIlxyXG4gICAgICAgICAgaWQ9XCJ7e2lkfX1fbW9udGhfYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTEgZm9udC13ZWlnaHQtYm9sZFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25Nb250aENsaWNrKClcIlxyXG4gICAgICAgICAgdGFiaW5kZXg9XCJ7e3RhYmluZGV4fX1cIj5cclxuICAgIHt7bW9udGh9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uICpuZ0lmPVwidmlldy5tb2RlICE9PSAneWVhcidcIlxyXG4gICAgICAgICAgaWQ9XCJ7e2lkfX1feWVhcl9idXR0b25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJvZHktMSBmb250LXdlaWdodC1ib2xkXCJcclxuICAgICAgICAgIChjbGljayk9XCJvblllYXJDbGljaygpXCJcclxuICAgICAgICAgIHRhYmluZGV4PVwie3t0YWJpbmRleH19XCI+XHJcbiAgICB7e3llYXJ9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8ZGl2IGlkPVwie3tpZH19X3llYXJfcmFuZ2VcIlxyXG4gICAgICAgKm5nSWY9XCJ2aWV3Lm1vZGUgPT09ICd5ZWFyJ1wiXHJcbiAgICAgICBjbGFzcz1cInRleHQtYm9keS0xIGZvbnQtd2VpZ2h0LWJvbGRcIlxyXG4gICAgICAgW2lubmVySFRNTF09XCJ5ZWFyUmFuZ2VcIj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGJ1dHRvbiBpZD1cInt7aWR9fV9uZXh0X2J1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1sLWF1dG9cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uTmV4dENsaWNrKClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVOZXh0QnV0dG9uXCJcclxuICAgICAgICAgIHRhYmluZGV4PVwie3t0YWJpbmRleH19XCI+XHJcbiAgICA8aSBjbGFzcz1cImVjLWljb24gaWNvbi1hbmdsZS1kb3duIHJvdGF0ZS0yNzBcIj48L2k+XHJcbiAgPC9idXR0b24+XHJcbjwvaGVhZGVyPlxyXG5cclxuPGRpdiAqbmdJZj1cInZpZXcubW9kZSA9PT0gJ2RheSdcIlxyXG4gICAgIGNsYXNzPVwibWItMSBweC0yIGQtZmxleFwiPlxyXG4gIDxoMyAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtEYXlzXCJcclxuICAgICAgY2xhc3M9XCJ0ZXh0LWhlYWRpbmctMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICBzdHlsZT1cIndpZHRoOiAycmVtOyBoZWlnaHQ6IDEuNzVyZW07XCI+e3tkYXl9fTwvaDM+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIGNhbGVuZGFySXRlbXM7IGxhc3QgYXMgaXNMYXN0OyB0cmFja0J5OiB0cmFja0J5RGF0ZVJvd1wiXHJcbiAgICAgY2xhc3M9XCJweC0yIGQtZmxleCB7e3ZpZXcubW9kZX19LXZpZXdcIlxyXG4gICAgIFtjbGFzcy5tYi0xXT1cIiFpc0xhc3RcIlxyXG4gICAgIFtjbGFzcy5tYi0yXT1cImlzTGFzdFwiPlxyXG4gIDxidXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93OyB0cmFja0J5OiB0cmFja0J5RGF0ZVwiXHJcbiAgICAgICAgICBpZD1cInt7aWR9fV9pdGVtX3t7aXRlbS5kYXRlIHwgZGF0ZTonTU1fZGRfeXl5eSd9fVwiXHJcbiAgICAgICAgICBlYy1jYWxlbmRhci1pdGVtXHJcbiAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcclxuICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcclxuICAgICAgICAgIFt2aWV3XT1cInZpZXdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbVNlbGVjdGVkKGl0ZW0pXCJcclxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiaXRlbS5sYWJlbFwiXHJcbiAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgICAgICAgdGFiaW5kZXg9XCJ7e3RhYmluZGV4fX1cIj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
|