@energinet/watt 4.0.2 → 4.0.5

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.
@@ -16,19 +16,19 @@
16
16
  * limitations under the License.
17
17
  */
18
18
  //#endregion
19
- import { ChangeDetectorRef, Component, ElementRef, LOCALE_ID, ViewEncapsulation, computed, inject, input, effect, linkedSignal, booleanAttribute, viewChild, } from '@angular/core';
20
- import { NgControl } from '@angular/forms';
21
- import { MatDateRangeInput, MatDateRangePicker, MatDatepickerInput, MatDatepickerModule, MatEndDate, MatStartDate, } from '@angular/material/datepicker';
22
- import { MatFormFieldControl } from '@angular/material/form-field';
19
+ import { input, effect, inject, computed, Component, LOCALE_ID, viewChild, ElementRef, linkedSignal, booleanAttribute, ChangeDetectorRef, ViewEncapsulation, } from '@angular/core';
23
20
  import { MatInputModule } from '@angular/material/input';
21
+ import { MatFormFieldControl } from '@angular/material/form-field';
22
+ import { NgControl } from '@angular/forms';
23
+ import { MatEndDate, MatStartDate, MatDateRangeInput, MatDateRangePicker, MatDatepickerInput, MatDatepickerModule, } from '@angular/material/datepicker';
24
24
  import { maskitoDateOptionsGenerator, maskitoDateRangeOptionsGenerator } from '@maskito/kit';
25
+ import { dayjs, WattLocaleService, } from '@energinet/watt/core/date';
25
26
  import { WattFieldComponent } from '@energinet/watt/field';
26
- import { WattLocaleService, dayjs, } from '@energinet/watt/core/date';
27
27
  import { WattButtonComponent } from '@energinet/watt/button';
28
28
  import { WattPickerBase, WattPlaceholderMaskComponent, } from '@energinet/watt/picker/__shared';
29
29
  import * as i0 from "@angular/core";
30
- import * as i1 from "@angular/material/datepicker";
31
- import * as i2 from "@angular/material/input";
30
+ import * as i1 from "@angular/material/input";
31
+ import * as i2 from "@angular/material/datepicker";
32
32
  const dateShortFormat = 'DD-MM-YYYY';
33
33
  export const danishTimeZoneIdentifier = 'Europe/Copenhagen';
34
34
  /**
@@ -46,20 +46,20 @@ export class WattDatepickerComponent extends WattPickerBase {
46
46
  locale = inject(LOCALE_ID);
47
47
  max = input(...(ngDevMode ? [undefined, { debugName: "max" }] : []));
48
48
  min = input(...(ngDevMode ? [undefined, { debugName: "min" }] : []));
49
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
49
50
  rangeMonthOnlyMode = input(false, ...(ngDevMode ? [{ debugName: "rangeMonthOnlyMode" }] : []));
50
51
  startAt = input(null, ...(ngDevMode ? [{ debugName: "startAt" }] : []));
51
- label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
52
52
  dateClass = input(() => '', ...(ngDevMode ? [{ debugName: "dateClass" }] : []));
53
53
  canStepThroughDays = input(false, ...(ngDevMode ? [{ debugName: "canStepThroughDays", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
54
- matDatepickerInput = viewChild.required(MatDatepickerInput);
55
- matDateRangePicker = viewChild.required(MatDateRangePicker);
56
- matDateRangeInput = viewChild.required(MatDateRangeInput);
57
- matStartDate = viewChild.required(MatStartDate);
58
- matEndDate = viewChild.required(MatEndDate);
59
- actualInput = viewChild.required('actualInput');
54
+ matEndDate = viewChild(MatEndDate, ...(ngDevMode ? [{ debugName: "matEndDate" }] : []));
55
+ matStartDate = viewChild(MatStartDate, ...(ngDevMode ? [{ debugName: "matStartDate" }] : []));
56
+ matDateRangeInput = viewChild(MatDateRangeInput, ...(ngDevMode ? [{ debugName: "matDateRangeInput" }] : []));
57
+ matDatepickerInput = viewChild(MatDatepickerInput, ...(ngDevMode ? [{ debugName: "matDatepickerInput" }] : []));
58
+ matDateRangePicker = viewChild(MatDateRangePicker, ...(ngDevMode ? [{ debugName: "matDateRangePicker" }] : []));
59
+ actualInput = viewChild('actualInput', ...(ngDevMode ? [{ debugName: "actualInput" }] : []));
60
60
  input = viewChild('dateInput', ...(ngDevMode ? [{ debugName: "input" }] : []));
61
- startInput = viewChild('startDateInput', ...(ngDevMode ? [{ debugName: "startInput" }] : []));
62
61
  endInput = viewChild('endDateInput', ...(ngDevMode ? [{ debugName: "endInput" }] : []));
62
+ startInput = viewChild('startDateInput', ...(ngDevMode ? [{ debugName: "startInput" }] : []));
63
63
  _placeholder = this.getPlaceholderByLocale(this.locale);
64
64
  rangeSeparator = ' - ';
65
65
  rangePlaceholder = this.getRangePlaceholder();
@@ -97,9 +97,9 @@ export class WattDatepickerComponent extends WattPickerBase {
97
97
  }
98
98
  ngAfterViewInit() {
99
99
  super.ngAfterViewInit();
100
- this.ngControl?.control?.addValidators(this.validate.bind(this));
100
+ this.ngControl?.control?.addValidators(this.validate);
101
101
  }
102
- validate({ value }) {
102
+ validate = ({ value }) => {
103
103
  if (!value?.end || !value?.start)
104
104
  return null;
105
105
  if (!this.rangeMonthOnlyMode())
@@ -109,10 +109,11 @@ export class WattDatepickerComponent extends WattPickerBase {
109
109
  return start.isSame(start.startOf('month')) && end.isSame(start.endOf('month'))
110
110
  ? null
111
111
  : { monthOnly: true };
112
- }
112
+ };
113
113
  initSingleInput() {
114
- if (this.initialValue) {
115
- this.matDatepickerInput().value = this.initialValue;
114
+ const matDatepickerInput = this.matDatepickerInput();
115
+ if (this.initialValue && matDatepickerInput) {
116
+ matDatepickerInput.value = this.initialValue;
116
117
  this.datepickerClosed();
117
118
  }
118
119
  }
@@ -131,7 +132,9 @@ export class WattDatepickerComponent extends WattPickerBase {
131
132
  datepickerClosed() {
132
133
  const matDatepickerInput = this.matDatepickerInput();
133
134
  const actualInput = this.actualInput();
134
- if (matDatepickerInput.value) {
135
+ if (!actualInput)
136
+ return;
137
+ if (matDatepickerInput && matDatepickerInput.value) {
135
138
  this.control?.setValue(matDatepickerInput.value);
136
139
  actualInput.nativeElement.value = this.formatDateTimeFromModelToView(this.formatDateFromViewToModel(matDatepickerInput.value));
137
140
  }
@@ -144,22 +147,27 @@ export class WattDatepickerComponent extends WattPickerBase {
144
147
  actualInput.nativeElement.dispatchEvent(new InputEvent('input'));
145
148
  }
146
149
  onMonthSelected(date) {
147
- if (this.rangeMonthOnlyMode() && date) {
148
- this.matDateRangePicker().select(dayjs(date).startOf('month').toDate());
149
- this.matDateRangePicker().select(dayjs(date).endOf('month').toDate());
150
- this.matDateRangePicker().close();
150
+ const matDateRangePicker = this.matDateRangePicker();
151
+ if (matDateRangePicker && this.rangeMonthOnlyMode() && date) {
152
+ matDateRangePicker.select(dayjs(date).startOf('month').toDate());
153
+ matDateRangePicker.select(dayjs(date).endOf('month').toDate());
154
+ matDateRangePicker.close();
151
155
  }
152
156
  }
153
157
  initRangeInput() {
154
- if (this.initialValue) {
155
- this.matStartDate().value = this.initialValue.start;
156
- this.matEndDate().value = this.initialValue.end;
158
+ const matStartDate = this.matStartDate();
159
+ const matEndDate = this.matEndDate();
160
+ if (this.initialValue && matStartDate && matEndDate) {
161
+ matStartDate.value = this.initialValue.start;
162
+ matEndDate.value = this.initialValue.end;
157
163
  this.rangePickerClosed();
158
164
  }
159
165
  }
160
166
  clearRangePicker() {
161
- this.control?.setValue(null);
162
167
  const actualInput = this.actualInput();
168
+ if (!actualInput)
169
+ return;
170
+ this.control?.setValue(null);
163
171
  actualInput.nativeElement.value = '';
164
172
  actualInput.nativeElement.dispatchEvent(new InputEvent('input'));
165
173
  }
@@ -183,7 +191,9 @@ export class WattDatepickerComponent extends WattPickerBase {
183
191
  rangePickerClosed() {
184
192
  const matDateRangeInput = this.matDateRangeInput();
185
193
  const actualInput = this.actualInput();
186
- if (matDateRangeInput.value?.start && matDateRangeInput.value.end) {
194
+ if (!actualInput)
195
+ return;
196
+ if (matDateRangeInput?.value?.start && matDateRangeInput?.value?.end) {
187
197
  actualInput.nativeElement.value =
188
198
  this.formatDateTimeFromModelToView(this.formatDateFromViewToModel(matDateRangeInput.value?.start)) +
189
199
  '-' +
@@ -200,12 +210,19 @@ export class WattDatepickerComponent extends WattPickerBase {
200
210
  actualInput.nativeElement.dispatchEvent(new InputEvent('input'));
201
211
  }
202
212
  setSingleValue(value, input) {
203
- this.setValueToInput(value, input, this.matDatepickerInput());
213
+ const matDatepickerInput = this.matDatepickerInput();
214
+ if (matDatepickerInput) {
215
+ this.setValueToInput(value, input, matDatepickerInput);
216
+ }
204
217
  }
205
218
  setRangeValue(value, startInput, endInput) {
206
219
  const { start, end } = value ?? {};
207
- this.setValueToInput(start, startInput, this.matStartDate());
208
- this.setValueToInput(end, endInput, this.matEndDate());
220
+ const matStartDate = this.matStartDate();
221
+ const matEndDate = this.matEndDate();
222
+ if (!matStartDate || !matEndDate)
223
+ return;
224
+ this.setValueToInput(start, startInput, matStartDate);
225
+ this.setValueToInput(end, endInput, matEndDate);
209
226
  }
210
227
  prevDay() {
211
228
  this.changeDay(-1);
@@ -214,7 +231,7 @@ export class WattDatepickerComponent extends WattPickerBase {
214
231
  this.changeDay(1);
215
232
  }
216
233
  changeDay(value) {
217
- const currentDate = this.matDatepickerInput().value;
234
+ const currentDate = this.matDatepickerInput()?.value;
218
235
  if (currentDate) {
219
236
  const newDate = dayjs(currentDate).add(value, 'day').toISOString();
220
237
  const newDateFormatted = this.formatDateTimeFromModelToView(newDate);
@@ -272,16 +289,16 @@ export class WattDatepickerComponent extends WattPickerBase {
272
289
  return maybeDateInDanishTimeZone;
273
290
  }
274
291
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattDatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
275
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattDatepickerComponent, isStandalone: true, selector: "watt-datepicker", inputs: { max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, rangeMonthOnlyMode: { classPropertyName: "rangeMonthOnlyMode", publicName: "rangeMonthOnlyMode", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, canStepThroughDays: { classPropertyName: "canStepThroughDays", publicName: "canStepThroughDays", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: MatFormFieldControl, useExisting: WattDatepickerComponent }], viewQueries: [{ propertyName: "matDatepickerInput", first: true, predicate: MatDatepickerInput, descendants: true, isSignal: true }, { propertyName: "matDateRangePicker", first: true, predicate: MatDateRangePicker, descendants: true, isSignal: true }, { propertyName: "matDateRangeInput", first: true, predicate: MatDateRangeInput, descendants: true, isSignal: true }, { propertyName: "matStartDate", first: true, predicate: MatStartDate, descendants: true, isSignal: true }, { propertyName: "matEndDate", first: true, predicate: MatEndDate, descendants: true, isSignal: true }, { propertyName: "actualInput", first: true, predicate: ["actualInput"], descendants: true, isSignal: true }, { propertyName: "input", first: true, predicate: ["dateInput"], descendants: true, isSignal: true }, { propertyName: "startInput", first: true, predicate: ["startDateInput"], descendants: true, isSignal: true }, { propertyName: "endInput", first: true, predicate: ["endDateInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [control]=\"control\" [label]=\"label()\">\n @if (range) {\n <mat-date-range-input\n [disabled]=\"disabled\"\n [rangePicker]=\"rangeDatepicker\"\n [min]=\"min() ?? null\"\n [max]=\"max() ?? null\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-date-input\"\n matStartDate\n #startDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n\n <input\n inert\n aria-label=\"end-date-input\"\n matEndDate\n #endDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n </mat-date-range-input>\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"rangeInputMask()\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"false\"\n (click)=\"rangeDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-date-range-picker\n [panelClass]=\"rangeMonthOnlyMode() ? 'watt-datepicker-range__panel--month-only' : ''\"\n [startView]=\"rangeMonthOnlyMode() ? 'multi-year' : 'month'\"\n [startAt]=\"startAt()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (closed)=\"rangePickerClosed()\"\n #rangeDatepicker\n />\n } @else {\n <input\n inert\n matInput\n tabindex=\"-1\"\n aria-label=\"date-input\"\n #dateInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n [min]=\"min()\"\n [max]=\"max()\"\n [matDatepicker]=\"singleDatepicker\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"inputMask()\"\n [placeholder]=\"placeholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n\n <watt-button\n wattSuffix\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n (click)=\"singleDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-datepicker\n #singleDatepicker\n panelClass=\"watt-datepicker-single__panel\"\n [dateClass]=\"dateClass()\"\n [startAt]=\"startAt()\"\n (closed)=\"datepickerClosed()\"\n />\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n\n@if (!range && canStepThroughDays()) {\n <span\n class=\"watt-datepicker-single__step-through\"\n [class.watt-datepicker-single__has-label]=\"!!label()\"\n >\n <watt-button\n variant=\"icon\"\n icon=\"left\"\n (click)=\"prevDay()\"\n [disabled]=\"disabled || isPrevDayButtonDisabled()\"\n />\n <watt-button\n variant=\"icon\"\n icon=\"right\"\n (click)=\"nextDay()\"\n [disabled]=\"disabled || isNextDayButtonDisabled()\"\n />\n </span>\n}\n", styles: ["watt-datepicker{display:flex;align-items:center;width:100%}watt-datepicker watt-button[variant=icon]{margin-left:auto}watt-datepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-datepicker mat-datepicker,watt-datepicker mat-date-range-picker{display:none}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker .mat-date-range-input-mirror,watt-datepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-datepicker input.mask-input{color:#000}watt-datepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-datepicker input.mask-input:focus-visible{outline:none}watt-datepicker .mat-date-range-input-container{align-items:initial}watt-datepicker .mat-date-range-input-start-wrapper,watt-datepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-datepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-datepicker .mat-date-range-input-separator-hidden,watt-datepicker .mat-date-range-input-separator{opacity:0!important}watt-datepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}watt-datepicker watt-button .mat-button{background:transparent}watt-datepicker:has(.watt-datepicker-single__step-through){align-items:flex-start}watt-datepicker:has(.watt-datepicker-single__step-through) .watt-datepicker-single__step-through{display:flex;margin-top:1px}watt-datepicker:has(.watt-datepicker-single__has-label) .watt-datepicker-single__step-through{margin-top:28px}.watt-datepicker-range__panel--month-only .mat-calendar-period-button{pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i1.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i1.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i1.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i1.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName"] }, { kind: "component", type: WattPlaceholderMaskComponent, selector: "watt-placeholder-mask", inputs: ["primaryInputElement", "secondaryInputElement", "mask", "placeholder"], outputs: ["maskApplied"] }], encapsulation: i0.ViewEncapsulation.None });
292
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattDatepickerComponent, isStandalone: true, selector: "watt-datepicker", inputs: { max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, rangeMonthOnlyMode: { classPropertyName: "rangeMonthOnlyMode", publicName: "rangeMonthOnlyMode", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, canStepThroughDays: { classPropertyName: "canStepThroughDays", publicName: "canStepThroughDays", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: MatFormFieldControl, useExisting: WattDatepickerComponent }], viewQueries: [{ propertyName: "matEndDate", first: true, predicate: MatEndDate, descendants: true, isSignal: true }, { propertyName: "matStartDate", first: true, predicate: MatStartDate, descendants: true, isSignal: true }, { propertyName: "matDateRangeInput", first: true, predicate: MatDateRangeInput, descendants: true, isSignal: true }, { propertyName: "matDatepickerInput", first: true, predicate: MatDatepickerInput, descendants: true, isSignal: true }, { propertyName: "matDateRangePicker", first: true, predicate: MatDateRangePicker, descendants: true, isSignal: true }, { propertyName: "actualInput", first: true, predicate: ["actualInput"], descendants: true, isSignal: true }, { propertyName: "input", first: true, predicate: ["dateInput"], descendants: true, isSignal: true }, { propertyName: "endInput", first: true, predicate: ["endDateInput"], descendants: true, isSignal: true }, { propertyName: "startInput", first: true, predicate: ["startDateInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [control]=\"control\" [label]=\"label()\">\n @if (range) {\n <mat-date-range-input\n [disabled]=\"disabled\"\n [rangePicker]=\"rangeDatepicker\"\n [min]=\"min() ?? null\"\n [max]=\"max() ?? null\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-date-input\"\n matStartDate\n #startDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n\n <input\n inert\n aria-label=\"end-date-input\"\n matEndDate\n #endDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n </mat-date-range-input>\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"rangeInputMask()\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"false\"\n (click)=\"rangeDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-date-range-picker\n [panelClass]=\"rangeMonthOnlyMode() ? 'watt-datepicker-range__panel--month-only' : ''\"\n [startView]=\"rangeMonthOnlyMode() ? 'multi-year' : 'month'\"\n [startAt]=\"startAt()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (closed)=\"rangePickerClosed()\"\n #rangeDatepicker\n />\n } @else {\n <input\n inert\n matInput\n tabindex=\"-1\"\n aria-label=\"date-input\"\n #dateInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n [min]=\"min()\"\n [max]=\"max()\"\n [matDatepicker]=\"singleDatepicker\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"inputMask()\"\n [placeholder]=\"placeholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n\n <watt-button\n wattSuffix\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n (click)=\"singleDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-datepicker\n #singleDatepicker\n panelClass=\"watt-datepicker-single__panel\"\n [dateClass]=\"dateClass()\"\n [startAt]=\"startAt()\"\n (closed)=\"datepickerClosed()\"\n />\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n\n@if (!range && canStepThroughDays()) {\n <span\n class=\"watt-datepicker-single__step-through\"\n [class.watt-datepicker-single__has-label]=\"!!label()\"\n >\n <watt-button\n variant=\"icon\"\n icon=\"left\"\n (click)=\"prevDay()\"\n [disabled]=\"disabled || isPrevDayButtonDisabled()\"\n />\n <watt-button\n variant=\"icon\"\n icon=\"right\"\n (click)=\"nextDay()\"\n [disabled]=\"disabled || isNextDayButtonDisabled()\"\n />\n </span>\n}\n", styles: ["watt-datepicker{display:flex;align-items:center;width:100%}watt-datepicker watt-button[variant=icon]{margin-left:auto}watt-datepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-datepicker mat-datepicker,watt-datepicker mat-date-range-picker{display:none}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker .mat-date-range-input-mirror,watt-datepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-datepicker input.mask-input{color:#000}watt-datepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-datepicker input.mask-input:focus-visible{outline:none}watt-datepicker .mat-date-range-input-container{align-items:initial}watt-datepicker .mat-date-range-input-start-wrapper,watt-datepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-datepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-datepicker .mat-date-range-input-separator-hidden,watt-datepicker .mat-date-range-input-separator{opacity:0!important}watt-datepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}watt-datepicker watt-button .mat-button{background:transparent}watt-datepicker:has(.watt-datepicker-single__step-through){align-items:flex-start}watt-datepicker:has(.watt-datepicker-single__step-through) .watt-datepicker-single__step-through{display:flex;margin-top:1px}watt-datepicker:has(.watt-datepicker-single__has-label) .watt-datepicker-single__step-through{margin-top:28px}.watt-datepicker-range__panel--month-only .mat-calendar-period-button{pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }, { kind: "component", type: WattPlaceholderMaskComponent, selector: "watt-placeholder-mask", inputs: ["primaryInputElement", "secondaryInputElement", "mask", "placeholder"], outputs: ["maskApplied"] }], encapsulation: i0.ViewEncapsulation.None });
276
293
  }
277
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattDatepickerComponent, decorators: [{
278
295
  type: Component,
279
296
  args: [{ selector: 'watt-datepicker', providers: [{ provide: MatFormFieldControl, useExisting: WattDatepickerComponent }], encapsulation: ViewEncapsulation.None, imports: [
280
- MatDatepickerModule,
281
297
  MatInputModule,
282
- WattButtonComponent,
298
+ MatDatepickerModule,
283
299
  WattFieldComponent,
300
+ WattButtonComponent,
284
301
  WattPlaceholderMaskComponent,
285
302
  ], template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [control]=\"control\" [label]=\"label()\">\n @if (range) {\n <mat-date-range-input\n [disabled]=\"disabled\"\n [rangePicker]=\"rangeDatepicker\"\n [min]=\"min() ?? null\"\n [max]=\"max() ?? null\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-date-input\"\n matStartDate\n #startDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n\n <input\n inert\n aria-label=\"end-date-input\"\n matEndDate\n #endDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n </mat-date-range-input>\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"rangeInputMask()\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"false\"\n (click)=\"rangeDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-date-range-picker\n [panelClass]=\"rangeMonthOnlyMode() ? 'watt-datepicker-range__panel--month-only' : ''\"\n [startView]=\"rangeMonthOnlyMode() ? 'multi-year' : 'month'\"\n [startAt]=\"startAt()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (closed)=\"rangePickerClosed()\"\n #rangeDatepicker\n />\n } @else {\n <input\n inert\n matInput\n tabindex=\"-1\"\n aria-label=\"date-input\"\n #dateInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n [min]=\"min()\"\n [max]=\"max()\"\n [matDatepicker]=\"singleDatepicker\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"inputMask()\"\n [placeholder]=\"placeholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n\n <watt-button\n wattSuffix\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n (click)=\"singleDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-datepicker\n #singleDatepicker\n panelClass=\"watt-datepicker-single__panel\"\n [dateClass]=\"dateClass()\"\n [startAt]=\"startAt()\"\n (closed)=\"datepickerClosed()\"\n />\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n\n@if (!range && canStepThroughDays()) {\n <span\n class=\"watt-datepicker-single__step-through\"\n [class.watt-datepicker-single__has-label]=\"!!label()\"\n >\n <watt-button\n variant=\"icon\"\n icon=\"left\"\n (click)=\"prevDay()\"\n [disabled]=\"disabled || isPrevDayButtonDisabled()\"\n />\n <watt-button\n variant=\"icon\"\n icon=\"right\"\n (click)=\"nextDay()\"\n [disabled]=\"disabled || isNextDayButtonDisabled()\"\n />\n </span>\n}\n", styles: ["watt-datepicker{display:flex;align-items:center;width:100%}watt-datepicker watt-button[variant=icon]{margin-left:auto}watt-datepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-datepicker mat-datepicker,watt-datepicker mat-date-range-picker{display:none}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker .mat-date-range-input-mirror,watt-datepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-datepicker input.mask-input{color:#000}watt-datepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-datepicker input.mask-input:focus-visible{outline:none}watt-datepicker .mat-date-range-input-container{align-items:initial}watt-datepicker .mat-date-range-input-start-wrapper,watt-datepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-datepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-datepicker .mat-date-range-input-separator-hidden,watt-datepicker .mat-date-range-input-separator{opacity:0!important}watt-datepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}watt-datepicker watt-button .mat-button{background:transparent}watt-datepicker:has(.watt-datepicker-single__step-through){align-items:flex-start}watt-datepicker:has(.watt-datepicker-single__step-through) .watt-datepicker-single__step-through{display:flex;margin-top:1px}watt-datepicker:has(.watt-datepicker-single__has-label) .watt-datepicker-single__step-through{margin-top:28px}.watt-datepicker-range__panel--month-only .mat-calendar-period-button{pointer-events:none}\n"] }]
286
303
  }], ctorParameters: () => [] });
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3BpY2tlci9kYXRlcGlja2VyL3dhdHQtZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9waWNrZXIvZGF0ZXBpY2tlci93YXR0LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixTQUFTLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixZQUFZLEdBQ2IsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGdDQUFnQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFFTCxpQkFBaUIsRUFHakIsS0FBSyxHQUNOLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0s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QixFQUFFLFdBQVcseUJBQXlCLEVBQUUsQ0FBQyxpQkFDcEUsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLDRCQUE0QjtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBMT0NBTEVfSUQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgZWZmZWN0LFxuICBsaW5rZWRTaWduYWwsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nQ29udHJvbCwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgTWF0Q2FsZW5kYXJDZWxsQ2xhc3NGdW5jdGlvbixcbiAgTWF0RGF0ZVJhbmdlSW5wdXQsXG4gIE1hdERhdGVSYW5nZVBpY2tlcixcbiAgTWF0RGF0ZXBpY2tlcklucHV0LFxuICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICBNYXRFbmREYXRlLFxuICBNYXRTdGFydERhdGUsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9EYXRlUmFuZ2VPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSAnQG1hc2tpdG8va2l0JztcblxuaW1wb3J0IHsgV2F0dEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2ZpZWxkJztcbmltcG9ydCB7XG4gIFdhdHREYXRlUmFuZ2UsXG4gIFdhdHRMb2NhbGVTZXJ2aWNlLFxuICBXYXR0UmFuZ2UsXG4gIFdhdHRTdXBwb3J0ZWRMb2NhbGVzLFxuICBkYXlqcyxcbn0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2J1dHRvbic7XG5cbmltcG9ydCB7XG4gIFdhdHRQaWNrZXJCYXNlLFxuICBXYXR0UGlja2VyVmFsdWUsXG4gIFdhdHRQbGFjZWhvbGRlck1hc2tDb21wb25lbnQsXG59IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9waWNrZXIvX19zaGFyZWQnO1xuXG5jb25zdCBkYXRlU2hvcnRGb3JtYXQgPSAnREQtTU0tWVlZWSc7XG5leHBvcnQgY29uc3QgZGFuaXNoVGltZVpvbmVJZGVudGlmaWVyID0gJ0V1cm9wZS9Db3BlbmhhZ2VuJztcblxuLyoqXG4gKiBVc2FnZTpcbiAqIGBpbXBvcnQgeyBXYXR0RGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQtZGF0YWh1Yi93YXR0L2RhdGVwaWNrZXInO2BcbiAqXG4gKiBJTVBPUlRBTlQ6XG4gKiBUaGUgc3R5bGluZyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIG91ciBtb25vc3BhY2VkIGZvbnQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtZGF0ZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93YXR0LWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogV2F0dERhdGVwaWNrZXJDb21wb25lbnQgfV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIFdhdHRCdXR0b25Db21wb25lbnQsXG4gICAgV2F0dEZpZWxkQ29tcG9uZW50LFxuICAgIFdhdHRQbGFjZWhvbGRlck1hc2tDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHREYXRlcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgV2F0dFBpY2tlckJhc2UgaW1wbGVtZW50cyBWYWxpZGF0b3IsIEFmdGVyVmlld0luaXQge1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBjaGFuZ2VEZXRlY3Rpb25SZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KFdhdHRMb2NhbGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsb2NhbGUgPSBpbmplY3Q8V2F0dFN1cHBvcnRlZExvY2FsZXM+KExPQ0FMRV9JRCk7XG5cbiAgbWF4ID0gaW5wdXQ8RGF0ZT4oKTtcbiAgbWluID0gaW5wdXQ8RGF0ZT4oKTtcbiAgcmFuZ2VNb250aE9ubHlNb2RlID0gaW5wdXQoZmFsc2UpO1xuICBzdGFydEF0ID0gaW5wdXQ8RGF0ZSB8IG51bGw+KG51bGwpO1xuICBsYWJlbCA9IGlucHV0PHN0cmluZz4oJycpO1xuICBkYXRlQ2xhc3MgPSBpbnB1dDxNYXRDYWxlbmRhckNlbGxDbGFzc0Z1bmN0aW9uPERhdGU+PigoKSA9PiAnJyk7XG4gIGNhblN0ZXBUaHJvdWdoRGF5cyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBwcm90ZWN0ZWQgbWF0RGF0ZXBpY2tlcklucHV0ID1cbiAgICB2aWV3Q2hpbGQucmVxdWlyZWQ8TWF0RGF0ZXBpY2tlcklucHV0PERhdGUgfCBudWxsPj4oTWF0RGF0ZXBpY2tlcklucHV0KTtcbiAgcHJvdGVjdGVkIG1hdERhdGVSYW5nZVBpY2tlciA9XG4gICAgdmlld0NoaWxkLnJlcXVpcmVkPE1hdERhdGVSYW5nZVBpY2tlcjxEYXRlIHwgbnVsbD4+KE1hdERhdGVSYW5nZVBpY2tlcik7XG4gIHByb3RlY3RlZCBtYXREYXRlUmFuZ2VJbnB1dCA9XG4gICAgdmlld0NoaWxkLnJlcXVpcmVkPE1hdERhdGVSYW5nZUlucHV0PERhdGUgfCBudWxsPj4oTWF0RGF0ZVJhbmdlSW5wdXQpO1xuXG4gIHByb3RlY3RlZCBtYXRTdGFydERhdGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8TWF0U3RhcnREYXRlPERhdGUgfCBudWxsPj4oTWF0U3RhcnREYXRlKTtcbiAgcHJvdGVjdGVkIG1hdEVuZERhdGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8TWF0RW5kRGF0ZTxEYXRlIHwgbnVsbD4+KE1hdEVuZERhdGUpO1xuICBwcm90ZWN0ZWQgYWN0dWFsSW5wdXQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2FjdHVhbElucHV0Jyk7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignZGF0ZUlucHV0Jyk7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBzdGFydElucHV0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdzdGFydERhdGVJbnB1dCcpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZW5kSW5wdXQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2VuZERhdGVJbnB1dCcpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyQnlMb2NhbGUodGhpcy5sb2NhbGUpO1xuXG4gIHJhbmdlU2VwYXJhdG9yID0gJyAtICc7XG5cbiAgcmFuZ2VQbGFjZWhvbGRlciA9IHRoaXMuZ2V0UmFuZ2VQbGFjZWhvbGRlcigpO1xuXG4gIGlucHV0TWFzayA9IGNvbXB1dGVkKCgpID0+XG4gICAgbWFza2l0b0RhdGVPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgIG1vZGU6ICdkZC9tbS95eXl5JyxcbiAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgbWF4OiB0aGlzLm1heCgpLFxuICAgICAgbWluOiB0aGlzLm1pbigpLFxuICAgIH0pXG4gICk7XG5cbiAgcmFuZ2VJbnB1dE1hc2sgPSBjb21wdXRlZCgoKSA9PlxuICAgIG1hc2tpdG9EYXRlUmFuZ2VPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgIG1vZGU6ICdkZC9tbS95eXl5JyxcbiAgICAgIGRhdGVTZXBhcmF0b3I6ICctJyxcbiAgICAgIG1heDogdGhpcy5tYXgoKSxcbiAgICAgIG1pbjogdGhpcy5taW4oKSxcbiAgICB9KVxuICApO1xuXG4gIGdldFBsYWNlaG9sZGVyQnlMb2NhbGUobG9jYWxlOiBXYXR0U3VwcG9ydGVkTG9jYWxlcyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsZSA9PT0gJ2RhJyA/ICdkZC1tbS3DpcOlw6XDpScgOiAnZGQtbW0teXl5eSc7XG4gIH1cblxuICBnZXRSYW5nZVBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXIgKyB0aGlzLnJhbmdlU2VwYXJhdG9yICsgdGhpcy5wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIGlzUHJldkRheUJ1dHRvbkRpc2FibGVkID0gbGlua2VkU2lnbmFsKCgpID0+IHRoaXMuaXNQcmV2RGF5QmVmb3JlT3JFcXVhbFRvTWluRGF0ZSgpKTtcbiAgaXNOZXh0RGF5QnV0dG9uRGlzYWJsZWQgPSBsaW5rZWRTaWduYWwoKCkgPT4gdGhpcy5pc05leHREYXlBZnRlck9yRXF1YWxUb01heERhdGUoKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoYHdhdHQtZGF0ZXBpY2tlci0ke1dhdHREYXRlcGlja2VyQ29tcG9uZW50Lm5leHRJZCsrfWApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMubG9jYWxlU2VydmljZS5sb2NhbGUoKTtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyQnlMb2NhbGUobG9jYWxlKTtcbiAgICAgIHRoaXMucmFuZ2VQbGFjZWhvbGRlciA9IHRoaXMuZ2V0UmFuZ2VQbGFjZWhvbGRlcigpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMucmFuZ2VNb250aE9ubHlNb2RlKCk7XG4gICAgICB0aGlzLm5nQ29udHJvbD8uY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LmFkZFZhbGlkYXRvcnModGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHZhbGlkYXRlKHsgdmFsdWUgfTogQWJzdHJhY3RDb250cm9sPFdhdHRSYW5nZTxzdHJpbmc+Pikge1xuICAgIGlmICghdmFsdWU/LmVuZCB8fCAhdmFsdWU/LnN0YXJ0KSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMucmFuZ2VNb250aE9ubHlNb2RlKCkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN0YXJ0ID0gZGF5anModmFsdWUuc3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IGRheWpzKHZhbHVlLmVuZCk7XG4gICAgcmV0dXJuIHN0YXJ0LmlzU2FtZShzdGFydC5zdGFydE9mKCdtb250aCcpKSAmJiBlbmQuaXNTYW1lKHN0YXJ0LmVuZE9mKCdtb250aCcpKVxuICAgICAgPyBudWxsXG4gICAgICA6IHsgbW9udGhPbmx5OiB0cnVlIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFNpbmdsZUlucHV0KCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5tYXREYXRlcGlja2VySW5wdXQoKS52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ2xvc2VkKCk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkYXRlU3RyaW5nID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5wbGFjZWhvbGRlci5sZW5ndGgpO1xuXG4gICAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRlU3RyaW5nLmxlbmd0aCAhPT0gdGhpcy5wbGFjZWhvbGRlci5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZURhdGVTaG9ydEZvcm1hdChkYXRlU3RyaW5nKTtcbiAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHRoaXMuZm9ybWF0RGF0ZUZyb21WaWV3VG9Nb2RlbChkYXRlKSk7XG4gIH1cblxuICBkYXRlcGlja2VyQ2xvc2VkKCkge1xuICAgIGNvbnN0IG1hdERhdGVwaWNrZXJJbnB1dCA9IHRoaXMubWF0RGF0ZXBpY2tlcklucHV0KCk7XG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSB0aGlzLmFjdHVhbElucHV0KCk7XG4gICAgaWYgKG1hdERhdGVwaWNrZXJJbnB1dC52YWx1ZSkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZShtYXREYXRlcGlja2VySW5wdXQudmFsdWUpO1xuXG4gICAgICBhY3R1YWxJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5mb3JtYXREYXRlVGltZUZyb21Nb2RlbFRvVmlldyhcbiAgICAgICAgdGhpcy5mb3JtYXREYXRlRnJvbVZpZXdUb01vZGVsKG1hdERhdGVwaWNrZXJJbnB1dC52YWx1ZSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdHVhbElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc1ByZXZEYXlCdXR0b25EaXNhYmxlZC5zZXQodGhpcy5pc1ByZXZEYXlCZWZvcmVPckVxdWFsVG9NaW5EYXRlKCkpO1xuICAgIHRoaXMuaXNOZXh0RGF5QnV0dG9uRGlzYWJsZWQuc2V0KHRoaXMuaXNOZXh0RGF5QWZ0ZXJPckVxdWFsVG9NYXhEYXRlKCkpO1xuXG4gICAgYWN0dWFsSW5wdXQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcpKTtcbiAgfVxuXG4gIG9uTW9udGhTZWxlY3RlZChkYXRlOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMucmFuZ2VNb250aE9ubHlNb2RlKCkgJiYgZGF0ZSkge1xuICAgICAgdGhpcy5tYXREYXRlUmFuZ2VQaWNrZXIoKS5zZWxlY3QoZGF5anMoZGF0ZSkuc3RhcnRPZignbW9udGgnKS50b0RhdGUoKSk7XG4gICAgICB0aGlzLm1hdERhdGVSYW5nZVBpY2tlcigpLnNlbGVjdChkYXlqcyhkYXRlKS5lbmRPZignbW9udGgnKS50b0RhdGUoKSk7XG4gICAgICB0aGlzLm1hdERhdGVSYW5nZVBpY2tlcigpLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRSYW5nZUlucHV0KCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5tYXRTdGFydERhdGUoKS52YWx1ZSA9ICh0aGlzLmluaXRpYWxWYWx1ZSBhcyBXYXR0RGF0ZVJhbmdlKS5zdGFydDtcbiAgICAgIHRoaXMubWF0RW5kRGF0ZSgpLnZhbHVlID0gKHRoaXMuaW5pdGlhbFZhbHVlIGFzIFdhdHREYXRlUmFuZ2UpLmVuZDtcbiAgICAgIHRoaXMucmFuZ2VQaWNrZXJDbG9zZWQoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclJhbmdlUGlja2VyKCkge1xuICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSB0aGlzLmFjdHVhbElucHV0KCk7XG4gICAgYWN0dWFsSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIGFjdHVhbElucHV0Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnKSk7XG4gIH1cblxuICByYW5nZUlucHV0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlU3RyaW5nID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5wbGFjZWhvbGRlci5sZW5ndGgpO1xuXG4gICAgaWYgKHN0YXJ0RGF0ZVN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0RGF0ZVN0cmluZy5sZW5ndGggIT09IHRoaXMucGxhY2Vob2xkZXIubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBhcnNlRGF0ZVNob3J0Rm9ybWF0KHN0YXJ0RGF0ZVN0cmluZyk7XG4gICAgY29uc3QgZW5kRGF0ZVN0cmluZyA9IHZhbHVlLnNsaWNlKHRoaXMucGxhY2Vob2xkZXIubGVuZ3RoICsgdGhpcy5yYW5nZVNlcGFyYXRvci5sZW5ndGgpO1xuICAgIGxldCBlbmQgPSB0aGlzLnNldEVuZERhdGVUb0RhbmlzaFRpbWVab25lKGVuZERhdGVTdHJpbmcpO1xuXG4gICAgaWYgKGVuZCAhPT0gbnVsbCkge1xuICAgICAgZW5kID0gdGhpcy5zZXRUb0VuZE9mRGF5KGVuZCk7XG4gICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHsgc3RhcnQsIGVuZCB9KTtcbiAgICB9XG4gIH1cblxuICByYW5nZVBpY2tlckNsb3NlZCgpIHtcbiAgICBjb25zdCBtYXREYXRlUmFuZ2VJbnB1dCA9IHRoaXMubWF0RGF0ZVJhbmdlSW5wdXQoKTtcbiAgICBjb25zdCBhY3R1YWxJbnB1dCA9IHRoaXMuYWN0dWFsSW5wdXQoKTtcbiAgICBpZiAobWF0RGF0ZVJhbmdlSW5wdXQudmFsdWU/LnN0YXJ0ICYmIG1hdERhdGVSYW5nZUlucHV0LnZhbHVlLmVuZCkge1xuICAgICAgYWN0dWFsSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVRpbWVGcm9tTW9kZWxUb1ZpZXcoXG4gICAgICAgICAgdGhpcy5mb3JtYXREYXRlRnJvbVZpZXdUb01vZGVsKG1hdERhdGVSYW5nZUlucHV0LnZhbHVlPy5zdGFydClcbiAgICAgICAgKSArXG4gICAgICAgICctJyArXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVRpbWVGcm9tTW9kZWxUb1ZpZXcoXG4gICAgICAgICAgdGhpcy5mb3JtYXREYXRlRnJvbVZpZXdUb01vZGVsKG1hdERhdGVSYW5nZUlucHV0LnZhbHVlLmVuZClcbiAgICAgICAgKTtcblxuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7XG4gICAgICAgIHN0YXJ0OiB0aGlzLmZvcm1hdERhdGVGcm9tVmlld1RvTW9kZWwobWF0RGF0ZVJhbmdlSW5wdXQudmFsdWUuc3RhcnQpLFxuICAgICAgICBlbmQ6IHRoaXMuZm9ybWF0RGF0ZUZyb21WaWV3VG9Nb2RlbChtYXREYXRlUmFuZ2VJbnB1dC52YWx1ZS5lbmQpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdHVhbElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgYWN0dWFsSW5wdXQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaW5nbGVWYWx1ZShcbiAgICB2YWx1ZTogRXhjbHVkZTxXYXR0UGlja2VyVmFsdWUsIFdhdHREYXRlUmFuZ2U+LFxuICAgIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50XG4gICkge1xuICAgIHRoaXMuc2V0VmFsdWVUb0lucHV0KHZhbHVlLCBpbnB1dCwgdGhpcy5tYXREYXRlcGlja2VySW5wdXQoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0UmFuZ2VWYWx1ZShcbiAgICB2YWx1ZTogV2F0dERhdGVSYW5nZSB8IG51bGwsXG4gICAgc3RhcnRJbnB1dDogSFRNTElucHV0RWxlbWVudCxcbiAgICBlbmRJbnB1dDogSFRNTElucHV0RWxlbWVudFxuICApIHtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZhbHVlID8/IHt9O1xuXG4gICAgdGhpcy5zZXRWYWx1ZVRvSW5wdXQoc3RhcnQsIHN0YXJ0SW5wdXQsIHRoaXMubWF0U3RhcnREYXRlKCkpO1xuICAgIHRoaXMuc2V0VmFsdWVUb0lucHV0KGVuZCwgZW5kSW5wdXQsIHRoaXMubWF0RW5kRGF0ZSgpKTtcbiAgfVxuICBwcmV2RGF5KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlRGF5KC0xKTtcbiAgfVxuICBuZXh0RGF5KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlRGF5KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VEYXkodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5tYXREYXRlcGlja2VySW5wdXQoKS52YWx1ZTtcblxuICAgIGlmIChjdXJyZW50RGF0ZSkge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKGN1cnJlbnREYXRlKS5hZGQodmFsdWUsICdkYXknKS50b0lTT1N0cmluZygpO1xuICAgICAgY29uc3QgbmV3RGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0RGF0ZVRpbWVGcm9tTW9kZWxUb1ZpZXcobmV3RGF0ZSk7XG5cbiAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKG5ld0RhdGVGb3JtYXR0ZWQpO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ2xvc2VkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ByZXZEYXlCZWZvcmVPckVxdWFsVG9NaW5EYXRlKCkge1xuICAgIGNvbnN0IG1pbiA9IHRoaXMubWluKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5tYXREYXRlcGlja2VySW5wdXQoKT8udmFsdWU7XG5cbiAgICBpZiAoIW1pbiB8fCAhc2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBpc0JlZm9yZSA9IGRheWpzKHNlbGVjdGVkRGF0ZSkuaXNCZWZvcmUobWluLCAnZGF5Jyk7XG4gICAgY29uc3QgaXNTYW1lID0gZGF5anMoc2VsZWN0ZWREYXRlKS5pc1NhbWUobWluLCAnZGF5Jyk7XG5cbiAgICByZXR1cm4gaXNTYW1lIHx8IGlzQmVmb3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05leHREYXlBZnRlck9yRXF1YWxUb01heERhdGUoKSB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXgoKTtcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLm1hdERhdGVwaWNrZXJJbnB1dCgpPy52YWx1ZTtcblxuICAgIGlmICghbWF4IHx8ICFzZWxlY3RlZERhdGUpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGlzQWZ0ZXIgPSBkYXlqcyhzZWxlY3RlZERhdGUpLmlzQWZ0ZXIobWF4LCAnZGF5Jyk7XG4gICAgY29uc3QgaXNTYW1lID0gZGF5anMoc2VsZWN0ZWREYXRlKS5pc1NhbWUobWF4LCAnZGF5Jyk7XG5cbiAgICByZXR1cm4gaXNTYW1lIHx8IGlzQWZ0ZXI7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRGF0ZVNob3J0Rm9ybWF0KHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcbiAgICByZXR1cm4gZGF5anModmFsdWUsIGRhdGVTaG9ydEZvcm1hdCkudG9EYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlVG9JbnB1dDxEIGV4dGVuZHMgeyB2YWx1ZTogRGF0ZSB8IG51bGwgfT4oXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbmF0aXZlSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgbWF0RGF0ZUlucHV0OiBEXG4gICk6IHZvaWQge1xuICAgIG5hdGl2ZUlucHV0LnZhbHVlID0gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGVUaW1lRnJvbU1vZGVsVG9WaWV3KHZhbHVlKSA6ICcnO1xuICAgIG1hdERhdGVJbnB1dC52YWx1ZSA9IHZhbHVlID8gZGF5anModmFsdWUpLnV0YygpLnRvRGF0ZSgpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIEZvcm1hdHMgRGF0ZSB0byBmdWxsIElTTyA4NjAxIGZvcm1hdCAoZS5nLiBgMjAyMi0wOC0zMVQyMjowMDowMC4wMDBaYClcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0RGF0ZUZyb21WaWV3VG9Nb2RlbCh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRheWpzKHZhbHVlKS51dGMoKS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRlVGltZUZyb21Nb2RlbFRvVmlldyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF5anModmFsdWUpLnR6KGRhbmlzaFRpbWVab25lSWRlbnRpZmllcikuZm9ybWF0KGRhdGVTaG9ydEZvcm1hdCk7XG4gIH1cblxuICBwcml2YXRlIHRvRGFuaXNoVGltZVpvbmUodmFsdWU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gZGF5anModmFsdWUudG9JU09TdHJpbmcoKSkudHooZGFuaXNoVGltZVpvbmVJZGVudGlmaWVyKS50b0RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VG9FbmRPZkRheSh2YWx1ZTogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiBkYXlqcyh2YWx1ZSkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbmREYXRlVG9EYW5pc2hUaW1lWm9uZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IGRhdGVCYXNlZE9uU2hvcnRGb3JtYXQgPSB0aGlzLnBhcnNlRGF0ZVNob3J0Rm9ybWF0KHZhbHVlKTtcblxuICAgIGxldCBtYXliZURhdGVJbkRhbmlzaFRpbWVab25lOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoZGF5anMoZGF0ZUJhc2VkT25TaG9ydEZvcm1hdCkuaXNWYWxpZCgpKSB7XG4gICAgICBtYXliZURhdGVJbkRhbmlzaFRpbWVab25lID0gdGhpcy50b0RhbmlzaFRpbWVab25lKGRhdGVCYXNlZE9uU2hvcnRGb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXliZURhdGVJbkRhbmlzaFRpbWVab25lO1xuICB9XG59XG4iLCI8IS0tXG5AbGljZW5zZVxuQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2UyXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tPlxuPHdhdHQtZmllbGQgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtsYWJlbF09XCJsYWJlbCgpXCI+XG4gIEBpZiAocmFuZ2UpIHtcbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXRcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbcmFuZ2VQaWNrZXJdPVwicmFuZ2VEYXRlcGlja2VyXCJcbiAgICAgIFttaW5dPVwibWluKCkgPz8gbnVsbFwiXG4gICAgICBbbWF4XT1cIm1heCgpID8/IG51bGxcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGluZXJ0XG4gICAgICAgIGFyaWEtbGFiZWw9XCJzdGFydC1kYXRlLWlucHV0XCJcbiAgICAgICAgbWF0U3RhcnREYXRlXG4gICAgICAgICNzdGFydERhdGVJbnB1dFxuICAgICAgICBbcmVhZE9ubHldPVwicmFuZ2VNb250aE9ubHlNb2RlKClcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBbaGlkZGVuXT1cInRydWVcIlxuICAgICAgLz5cblxuICAgICAgPGlucHV0XG4gICAgICAgIGluZXJ0XG4gICAgICAgIGFyaWEtbGFiZWw9XCJlbmQtZGF0ZS1pbnB1dFwiXG4gICAgICAgIG1hdEVuZERhdGVcbiAgICAgICAgI2VuZERhdGVJbnB1dFxuICAgICAgICBbcmVhZE9ubHldPVwicmFuZ2VNb250aE9ubHlNb2RlKClcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICBbaGlkZGVuXT1cInRydWVcIlxuICAgICAgLz5cbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICAgIDxpbnB1dCAjYWN0dWFsSW5wdXQgY2xhc3M9XCJtYXNrLWlucHV0XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgLz5cbiAgICA8d2F0dC1wbGFjZWhvbGRlci1tYXNrXG4gICAgICBbcHJpbWFyeUlucHV0RWxlbWVudF09XCJhY3R1YWxJbnB1dFwiXG4gICAgICBbbWFza109XCJyYW5nZUlucHV0TWFzaygpXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJyYW5nZVBsYWNlaG9sZGVyXCJcbiAgICAgIChtYXNrQXBwbGllZCk9XCJyYW5nZUlucHV0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAvPlxuXG4gICAgPHdhdHQtYnV0dG9uXG4gICAgICB2YXJpYW50PVwiaWNvblwiXG4gICAgICBpY29uPVwiZGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImZhbHNlXCJcbiAgICAgIChjbGljayk9XCJyYW5nZURhdGVwaWNrZXIub3BlbigpXCJcbiAgICAgIChmb2N1c2luKT1cIm9uRm9jdXNJbigpXCJcbiAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KCRldmVudClcIlxuICAgIC8+XG5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICBbcGFuZWxDbGFzc109XCJyYW5nZU1vbnRoT25seU1vZGUoKSA/ICd3YXR0LWRhdGVwaWNrZXItcmFuZ2VfX3BhbmVsLS1tb250aC1vbmx5JyA6ICcnXCJcbiAgICAgIFtzdGFydFZpZXddPVwicmFuZ2VNb250aE9ubHlNb2RlKCkgPyAnbXVsdGkteWVhcicgOiAnbW9udGgnXCJcbiAgICAgIFtzdGFydEF0XT1cInN0YXJ0QXQoKVwiXG4gICAgICAobW9udGhTZWxlY3RlZCk9XCJvbk1vbnRoU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAoY2xvc2VkKT1cInJhbmdlUGlja2VyQ2xvc2VkKClcIlxuICAgICAgI3JhbmdlRGF0ZXBpY2tlclxuICAgIC8+XG4gIH0gQGVsc2Uge1xuICAgIDxpbnB1dFxuICAgICAgaW5lcnRcbiAgICAgIG1hdElucHV0XG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJkYXRlLWlucHV0XCJcbiAgICAgICNkYXRlSW5wdXRcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFttaW5dPVwibWluKClcIlxuICAgICAgW21heF09XCJtYXgoKVwiXG4gICAgICBbbWF0RGF0ZXBpY2tlcl09XCJzaW5nbGVEYXRlcGlja2VyXCJcbiAgICAgIChmb2N1c2luKT1cIm9uRm9jdXNJbigpXCJcbiAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KCRldmVudClcIlxuICAgIC8+XG4gICAgPGlucHV0ICNhY3R1YWxJbnB1dCBjbGFzcz1cIm1hc2staW5wdXRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxuICAgIDx3YXR0LXBsYWNlaG9sZGVyLW1hc2tcbiAgICAgIFtwcmltYXJ5SW5wdXRFbGVtZW50XT1cImFjdHVhbElucHV0XCJcbiAgICAgIFttYXNrXT1cImlucHV0TWFzaygpXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAobWFza0FwcGxpZWQpPVwiaW5wdXRDaGFuZ2VkKCRldmVudClcIlxuICAgIC8+XG5cbiAgICA8d2F0dC1idXR0b25cbiAgICAgIHdhdHRTdWZmaXhcbiAgICAgIHZhcmlhbnQ9XCJpY29uXCJcbiAgICAgIGljb249XCJkYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwic2luZ2xlRGF0ZXBpY2tlci5vcGVuKClcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgI3NpbmdsZURhdGVwaWNrZXJcbiAgICAgIHBhbmVsQ2xhc3M9XCJ3YXR0LWRhdGVwaWNrZXItc2luZ2xlX19wYW5lbFwiXG4gICAgICBbZGF0ZUNsYXNzXT1cImRhdGVDbGFzcygpXCJcbiAgICAgIFtzdGFydEF0XT1cInN0YXJ0QXQoKVwiXG4gICAgICAoY2xvc2VkKT1cImRhdGVwaWNrZXJDbG9zZWQoKVwiXG4gICAgLz5cbiAgfVxuXG4gIDxuZy1jb250ZW50IC8+XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1oaW50XCIgc2VsZWN0PVwid2F0dC1maWVsZC1oaW50XCIgLz5cbiAgPG5nLWNvbnRlbnQgbmdQcm9qZWN0QXM9XCJ3YXR0LWZpZWxkLWVycm9yXCIgc2VsZWN0PVwid2F0dC1maWVsZC1lcnJvclwiIC8+XG48L3dhdHQtZmllbGQ+XG5cbkBpZiAoIXJhbmdlICYmIGNhblN0ZXBUaHJvdWdoRGF5cygpKSB7XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJ3YXR0LWRhdGVwaWNrZXItc2luZ2xlX19zdGVwLXRocm91Z2hcIlxuICAgIFtjbGFzcy53YXR0LWRhdGVwaWNrZXItc2luZ2xlX19oYXMtbGFiZWxdPVwiISFsYWJlbCgpXCJcbiAgPlxuICAgIDx3YXR0LWJ1dHRvblxuICAgICAgdmFyaWFudD1cImljb25cIlxuICAgICAgaWNvbj1cImxlZnRcIlxuICAgICAgKGNsaWNrKT1cInByZXZEYXkoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgaXNQcmV2RGF5QnV0dG9uRGlzYWJsZWQoKVwiXG4gICAgLz5cbiAgICA8d2F0dC1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJpY29uXCJcbiAgICAgIGljb249XCJyaWdodFwiXG4gICAgICAoY2xpY2spPVwibmV4dERheSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBpc05leHREYXlCdXR0b25EaXNhYmxlZCgpXCJcbiAgICAvPlxuICA8L3NwYW4+XG59XG4iXX0=
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3BpY2tlci9kYXRlcGlja2VyL3dhdHQtZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9waWNrZXIvZGF0ZXBpY2tlci93YXR0LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBRVosZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBbUIsU0FBUyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUNMLFVBQVUsRUFDVixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEdBRXBCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGdDQUFnQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdGLE9BQU8sRUFDTCxLQUFLLEVBR0wsaUJBQWlCLEdBRWxCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0s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QUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELE9BQU8seUJBQXlCLENBQUM7SUFDbkMsQ0FBQzt1R0E1VVUsdUJBQXVCOzJGQUF2Qix1QkFBdUIscytCQVh2QixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLHNFQTBCbkMsVUFBVSwrRkFDTixZQUFZLG9HQUNGLGlCQUFpQixxR0FDZixrQkFBa0IscUdBQ2xCLGtCQUFrQixtZ0JDL0dwRiwwaklBNklBLDhrRUR6REksY0FBYyxpWUFDZCxtQkFBbUIsazVCQUVuQixrQkFBa0IsK0lBQ2xCLG1CQUFtQixzSUFDbkIsNEJBQTRCOzsyRkFHbkIsdUJBQXVCO2tCQWZuQyxTQUFTOytCQUNFLGlCQUFpQixhQUdoQixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcseUJBQXlCLEVBQUUsQ0FBQyxpQkFDcEUsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxjQUFjO3dCQUNkLG1CQUFtQjt3QkFFbkIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLDRCQUE0QjtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQge1xuICBpbnB1dCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGNvbXB1dGVkLFxuICBDb21wb25lbnQsXG4gIExPQ0FMRV9JRCxcbiAgdmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBsaW5rZWRTaWduYWwsXG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOZ0NvbnRyb2wsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgTWF0RW5kRGF0ZSxcbiAgTWF0U3RhcnREYXRlLFxuICBNYXREYXRlUmFuZ2VJbnB1dCxcbiAgTWF0RGF0ZVJhbmdlUGlja2VyLFxuICBNYXREYXRlcGlja2VySW5wdXQsXG4gIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gIE1hdENhbGVuZGFyQ2VsbENsYXNzRnVuY3Rpb24sXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuXG5pbXBvcnQgeyBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9EYXRlUmFuZ2VPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSAnQG1hc2tpdG8va2l0JztcblxuaW1wb3J0IHtcbiAgZGF5anMsXG4gIFdhdHRSYW5nZSxcbiAgV2F0dERhdGVSYW5nZSxcbiAgV2F0dExvY2FsZVNlcnZpY2UsXG4gIFdhdHRTdXBwb3J0ZWRMb2NhbGVzLFxufSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvY29yZS9kYXRlJztcblxuaW1wb3J0IHsgV2F0dEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2ZpZWxkJztcbmltcG9ydCB7IFdhdHRCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvYnV0dG9uJztcblxuaW1wb3J0IHtcbiAgV2F0dFBpY2tlckJhc2UsXG4gIFdhdHRQaWNrZXJWYWx1ZSxcbiAgV2F0dFBsYWNlaG9sZGVyTWFza0NvbXBvbmVudCxcbn0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3BpY2tlci9fX3NoYXJlZCc7XG5cbmNvbnN0IGRhdGVTaG9ydEZvcm1hdCA9ICdERC1NTS1ZWVlZJztcbmV4cG9ydCBjb25zdCBkYW5pc2hUaW1lWm9uZUlkZW50aWZpZXIgPSAnRXVyb3BlL0NvcGVuaGFnZW4nO1xuXG4vKipcbiAqIFVzYWdlOlxuICogYGltcG9ydCB7IFdhdHREYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC1kYXRhaHViL3dhdHQvZGF0ZXBpY2tlcic7YFxuICpcbiAqIElNUE9SVEFOVDpcbiAqIFRoZSBzdHlsaW5nIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gb3VyIG1vbm9zcGFjZWQgZm9udC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2F0dC1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dhdHQtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dhdHQtZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBXYXR0RGF0ZXBpY2tlckNvbXBvbmVudCB9XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG5cbiAgICBXYXR0RmllbGRDb21wb25lbnQsXG4gICAgV2F0dEJ1dHRvbkNvbXBvbmVudCxcbiAgICBXYXR0UGxhY2Vob2xkZXJNYXNrQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0RGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIFdhdHRQaWNrZXJCYXNlIGltcGxlbWVudHMgVmFsaWRhdG9yLCBBZnRlclZpZXdJbml0IHtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2hhbmdlRGV0ZWN0aW9uUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgb3B0aW9uYWw6IHRydWUsIHNlbGY6IHRydWUgfSk7XG4gIHByaXZhdGUgbG9jYWxlU2VydmljZSA9IGluamVjdChXYXR0TG9jYWxlU2VydmljZSk7XG4gIHByaXZhdGUgbG9jYWxlID0gaW5qZWN0PFdhdHRTdXBwb3J0ZWRMb2NhbGVzPihMT0NBTEVfSUQpO1xuXG4gIG1heCA9IGlucHV0PERhdGU+KCk7XG4gIG1pbiA9IGlucHV0PERhdGU+KCk7XG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJhbmdlTW9udGhPbmx5TW9kZSA9IGlucHV0KGZhbHNlKTtcbiAgc3RhcnRBdCA9IGlucHV0PERhdGUgfCBudWxsPihudWxsKTtcbiAgZGF0ZUNsYXNzID0gaW5wdXQ8TWF0Q2FsZW5kYXJDZWxsQ2xhc3NGdW5jdGlvbjxEYXRlPj4oKCkgPT4gJycpO1xuICBjYW5TdGVwVGhyb3VnaERheXMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgbWF0RW5kRGF0ZSA9IHZpZXdDaGlsZDxNYXRFbmREYXRlPERhdGUgfCBudWxsPj4oTWF0RW5kRGF0ZSk7XG4gIG1hdFN0YXJ0RGF0ZSA9IHZpZXdDaGlsZDxNYXRTdGFydERhdGU8RGF0ZSB8IG51bGw+PihNYXRTdGFydERhdGUpO1xuICBtYXREYXRlUmFuZ2VJbnB1dCA9IHZpZXdDaGlsZDxNYXREYXRlUmFuZ2VJbnB1dDxEYXRlIHwgbnVsbD4+KE1hdERhdGVSYW5nZUlucHV0KTtcbiAgbWF0RGF0ZXBpY2tlcklucHV0ID0gdmlld0NoaWxkPE1hdERhdGVwaWNrZXJJbnB1dDxEYXRlIHwgbnVsbD4+KE1hdERhdGVwaWNrZXJJbnB1dCk7XG4gIG1hdERhdGVSYW5nZVBpY2tlciA9IHZpZXdDaGlsZDxNYXREYXRlUmFuZ2VQaWNrZXI8RGF0ZSB8IG51bGw+PihNYXREYXRlUmFuZ2VQaWNrZXIpO1xuXG4gIGFjdHVhbElucHV0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdhY3R1YWxJbnB1dCcpO1xuICBvdmVycmlkZSBpbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignZGF0ZUlucHV0Jyk7XG4gIG92ZXJyaWRlIGVuZElucHV0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdlbmREYXRlSW5wdXQnKTtcbiAgb3ZlcnJpZGUgc3RhcnRJbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+Pignc3RhcnREYXRlSW5wdXQnKTtcblxuICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlckJ5TG9jYWxlKHRoaXMubG9jYWxlKTtcblxuICByYW5nZVNlcGFyYXRvciA9ICcgLSAnO1xuXG4gIHJhbmdlUGxhY2Vob2xkZXIgPSB0aGlzLmdldFJhbmdlUGxhY2Vob2xkZXIoKTtcblxuICBpbnB1dE1hc2sgPSBjb21wdXRlZCgoKSA9PlxuICAgIG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICBtb2RlOiAnZGQvbW0veXl5eScsXG4gICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgIG1heDogdGhpcy5tYXgoKSxcbiAgICAgIG1pbjogdGhpcy5taW4oKSxcbiAgICB9KVxuICApO1xuXG4gIHJhbmdlSW5wdXRNYXNrID0gY29tcHV0ZWQoKCkgPT5cbiAgICBtYXNraXRvRGF0ZVJhbmdlT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICBtb2RlOiAnZGQvbW0veXl5eScsXG4gICAgICBkYXRlU2VwYXJhdG9yOiAnLScsXG4gICAgICBtYXg6IHRoaXMubWF4KCksXG4gICAgICBtaW46IHRoaXMubWluKCksXG4gICAgfSlcbiAgKTtcblxuICBnZXRQbGFjZWhvbGRlckJ5TG9jYWxlKGxvY2FsZTogV2F0dFN1cHBvcnRlZExvY2FsZXMpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbGUgPT09ICdkYScgPyAnZGQtbW0tw6XDpcOlw6UnIDogJ2RkLW1tLXl5eXknO1xuICB9XG5cbiAgZ2V0UmFuZ2VQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyICsgdGhpcy5yYW5nZVNlcGFyYXRvciArIHRoaXMucGxhY2Vob2xkZXI7XG4gIH1cblxuICBpc1ByZXZEYXlCdXR0b25EaXNhYmxlZCA9IGxpbmtlZFNpZ25hbCgoKSA9PiB0aGlzLmlzUHJldkRheUJlZm9yZU9yRXF1YWxUb01pbkRhdGUoKSk7XG4gIGlzTmV4dERheUJ1dHRvbkRpc2FibGVkID0gbGlua2VkU2lnbmFsKCgpID0+IHRoaXMuaXNOZXh0RGF5QWZ0ZXJPckVxdWFsVG9NYXhEYXRlKCkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGB3YXR0LWRhdGVwaWNrZXItJHtXYXR0RGF0ZXBpY2tlckNvbXBvbmVudC5uZXh0SWQrK31gKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmxvY2FsZVNlcnZpY2UubG9jYWxlKCk7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlckJ5TG9jYWxlKGxvY2FsZSk7XG4gICAgICB0aGlzLnJhbmdlUGxhY2Vob2xkZXIgPSB0aGlzLmdldFJhbmdlUGxhY2Vob2xkZXIoKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnJhbmdlTW9udGhPbmx5TW9kZSgpO1xuICAgICAgdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIHRoaXMubmdDb250cm9sPy5jb250cm9sPy5hZGRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGUpO1xuICB9XG5cbiAgdmFsaWRhdGUgPSAoeyB2YWx1ZSB9OiBBYnN0cmFjdENvbnRyb2w8V2F0dFJhbmdlPHN0cmluZz4+KSA9PiB7XG4gICAgaWYgKCF2YWx1ZT8uZW5kIHx8ICF2YWx1ZT8uc3RhcnQpIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy5yYW5nZU1vbnRoT25seU1vZGUoKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3RhcnQgPSBkYXlqcyh2YWx1ZS5zdGFydCk7XG4gICAgY29uc3QgZW5kID0gZGF5anModmFsdWUuZW5kKTtcbiAgICByZXR1cm4gc3RhcnQuaXNTYW1lKHN0YXJ0LnN0YXJ0T2YoJ21vbnRoJykpICYmIGVuZC5pc1NhbWUoc3RhcnQuZW5kT2YoJ21vbnRoJykpXG4gICAgICA/IG51bGxcbiAgICAgIDogeyBtb250aE9ubHk6IHRydWUgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgaW5pdFNpbmdsZUlucHV0KCkge1xuICAgIGNvbnN0IG1hdERhdGVwaWNrZXJJbnB1dCA9IHRoaXMubWF0RGF0ZXBpY2tlcklucHV0KCk7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlICYmIG1hdERhdGVwaWNrZXJJbnB1dCkge1xuICAgICAgbWF0RGF0ZXBpY2tlcklucHV0LnZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWU7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDbG9zZWQoKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dENoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB2YWx1ZS5zbGljZSgwLCB0aGlzLnBsYWNlaG9sZGVyLmxlbmd0aCk7XG5cbiAgICBpZiAoZGF0ZVN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoICE9PSB0aGlzLnBsYWNlaG9sZGVyLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnBhcnNlRGF0ZVNob3J0Rm9ybWF0KGRhdGVTdHJpbmcpO1xuICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUodGhpcy5mb3JtYXREYXRlRnJvbVZpZXdUb01vZGVsKGRhdGUpKTtcbiAgfVxuXG4gIGRhdGVwaWNrZXJDbG9zZWQoKSB7XG4gICAgY29uc3QgbWF0RGF0ZXBpY2tlcklucHV0ID0gdGhpcy5tYXREYXRlcGlja2VySW5wdXQoKTtcbiAgICBjb25zdCBhY3R1YWxJbnB1dCA9IHRoaXMuYWN0dWFsSW5wdXQoKTtcblxuICAgIGlmICghYWN0dWFsSW5wdXQpIHJldHVybjtcblxuICAgIGlmIChtYXREYXRlcGlja2VySW5wdXQgJiYgbWF0RGF0ZXBpY2tlcklucHV0LnZhbHVlKSB7XG4gICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKG1hdERhdGVwaWNrZXJJbnB1dC52YWx1ZSk7XG5cbiAgICAgIGFjdHVhbElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGVUaW1lRnJvbU1vZGVsVG9WaWV3KFxuICAgICAgICB0aGlzLmZvcm1hdERhdGVGcm9tVmlld1RvTW9kZWwobWF0RGF0ZXBpY2tlcklucHV0LnZhbHVlKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0dWFsSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJldkRheUJ1dHRvbkRpc2FibGVkLnNldCh0aGlzLmlzUHJldkRheUJlZm9yZU9yRXF1YWxUb01pbkRhdGUoKSk7XG4gICAgdGhpcy5pc05leHREYXlCdXR0b25EaXNhYmxlZC5zZXQodGhpcy5pc05leHREYXlBZnRlck9yRXF1YWxUb01heERhdGUoKSk7XG5cbiAgICBhY3R1YWxJbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICB9XG5cbiAgb25Nb250aFNlbGVjdGVkKGRhdGU6IERhdGUpIHtcbiAgICBjb25zdCBtYXREYXRlUmFuZ2VQaWNrZXIgPSB0aGlzLm1hdERhdGVSYW5nZVBpY2tlcigpO1xuICAgIGlmIChtYXREYXRlUmFuZ2VQaWNrZXIgJiYgdGhpcy5yYW5nZU1vbnRoT25seU1vZGUoKSAmJiBkYXRlKSB7XG4gICAgICBtYXREYXRlUmFuZ2VQaWNrZXIuc2VsZWN0KGRheWpzKGRhdGUpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCkpO1xuICAgICAgbWF0RGF0ZVJhbmdlUGlja2VyLnNlbGVjdChkYXlqcyhkYXRlKS5lbmRPZignbW9udGgnKS50b0RhdGUoKSk7XG4gICAgICBtYXREYXRlUmFuZ2VQaWNrZXIuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFJhbmdlSW5wdXQoKSB7XG4gICAgY29uc3QgbWF0U3RhcnREYXRlID0gdGhpcy5tYXRTdGFydERhdGUoKTtcbiAgICBjb25zdCBtYXRFbmREYXRlID0gdGhpcy5tYXRFbmREYXRlKCk7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsVmFsdWUgJiYgbWF0U3RhcnREYXRlICYmIG1hdEVuZERhdGUpIHtcbiAgICAgIG1hdFN0YXJ0RGF0ZS52YWx1ZSA9ICh0aGlzLmluaXRpYWxWYWx1ZSBhcyBXYXR0RGF0ZVJhbmdlKS5zdGFydDtcbiAgICAgIG1hdEVuZERhdGUudmFsdWUgPSAodGhpcy5pbml0aWFsVmFsdWUgYXMgV2F0dERhdGVSYW5nZSkuZW5kO1xuICAgICAgdGhpcy5yYW5nZVBpY2tlckNsb3NlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUmFuZ2VQaWNrZXIoKSB7XG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSB0aGlzLmFjdHVhbElucHV0KCk7XG5cbiAgICBpZiAoIWFjdHVhbElucHV0KSByZXR1cm47XG5cbiAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgIGFjdHVhbElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICBhY3R1YWxJbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICB9XG5cbiAgcmFuZ2VJbnB1dENoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZVN0cmluZyA9IHZhbHVlLnNsaWNlKDAsIHRoaXMucGxhY2Vob2xkZXIubGVuZ3RoKTtcblxuICAgIGlmIChzdGFydERhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdGFydERhdGVTdHJpbmcubGVuZ3RoICE9PSB0aGlzLnBsYWNlaG9sZGVyLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYXJzZURhdGVTaG9ydEZvcm1hdChzdGFydERhdGVTdHJpbmcpO1xuICAgIGNvbnN0IGVuZERhdGVTdHJpbmcgPSB2YWx1ZS5zbGljZSh0aGlzLnBsYWNlaG9sZGVyLmxlbmd0aCArIHRoaXMucmFuZ2VTZXBhcmF0b3IubGVuZ3RoKTtcbiAgICBsZXQgZW5kID0gdGhpcy5zZXRFbmREYXRlVG9EYW5pc2hUaW1lWm9uZShlbmREYXRlU3RyaW5nKTtcblxuICAgIGlmIChlbmQgIT09IG51bGwpIHtcbiAgICAgIGVuZCA9IHRoaXMuc2V0VG9FbmRPZkRheShlbmQpO1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgfVxuICB9XG5cbiAgcmFuZ2VQaWNrZXJDbG9zZWQoKSB7XG4gICAgY29uc3QgbWF0RGF0ZVJhbmdlSW5wdXQgPSB0aGlzLm1hdERhdGVSYW5nZUlucHV0KCk7XG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSB0aGlzLmFjdHVhbElucHV0KCk7XG5cbiAgICBpZiAoIWFjdHVhbElucHV0KSByZXR1cm47XG5cbiAgICBpZiAobWF0RGF0ZVJhbmdlSW5wdXQ/LnZhbHVlPy5zdGFydCAmJiBtYXREYXRlUmFuZ2VJbnB1dD8udmFsdWU/LmVuZCkge1xuICAgICAgYWN0dWFsSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVRpbWVGcm9tTW9kZWxUb1ZpZXcoXG4gICAgICAgICAgdGhpcy5mb3JtYXREYXRlRnJvbVZpZXdUb01vZGVsKG1hdERhdGVSYW5nZUlucHV0LnZhbHVlPy5zdGFydClcbiAgICAgICAgKSArXG4gICAgICAgICctJyArXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVRpbWVGcm9tTW9kZWxUb1ZpZXcoXG4gICAgICAgICAgdGhpcy5mb3JtYXREYXRlRnJvbVZpZXdUb01vZGVsKG1hdERhdGVSYW5nZUlucHV0LnZhbHVlLmVuZClcbiAgICAgICAgKTtcblxuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7XG4gICAgICAgIHN0YXJ0OiB0aGlzLmZvcm1hdERhdGVGcm9tVmlld1RvTW9kZWwobWF0RGF0ZVJhbmdlSW5wdXQudmFsdWUuc3RhcnQpLFxuICAgICAgICBlbmQ6IHRoaXMuZm9ybWF0RGF0ZUZyb21WaWV3VG9Nb2RlbChtYXREYXRlUmFuZ2VJbnB1dC52YWx1ZS5lbmQpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdHVhbElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgYWN0dWFsSW5wdXQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaW5nbGVWYWx1ZShcbiAgICB2YWx1ZTogRXhjbHVkZTxXYXR0UGlja2VyVmFsdWUsIFdhdHREYXRlUmFuZ2U+LFxuICAgIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50XG4gICkge1xuICAgIGNvbnN0IG1hdERhdGVwaWNrZXJJbnB1dCA9IHRoaXMubWF0RGF0ZXBpY2tlcklucHV0KCk7XG4gICAgaWYgKG1hdERhdGVwaWNrZXJJbnB1dCkge1xuICAgICAgdGhpcy5zZXRWYWx1ZVRvSW5wdXQodmFsdWUsIGlucHV0LCBtYXREYXRlcGlja2VySW5wdXQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRSYW5nZVZhbHVlKFxuICAgIHZhbHVlOiBXYXR0RGF0ZVJhbmdlIHwgbnVsbCxcbiAgICBzdGFydElucHV0OiBIVE1MSW5wdXRFbGVtZW50LFxuICAgIGVuZElucHV0OiBIVE1MSW5wdXRFbGVtZW50XG4gICkge1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdmFsdWUgPz8ge307XG5cbiAgICBjb25zdCBtYXRTdGFydERhdGUgPSB0aGlzLm1hdFN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IG1hdEVuZERhdGUgPSB0aGlzLm1hdEVuZERhdGUoKTtcblxuICAgIGlmICghbWF0U3RhcnREYXRlIHx8ICFtYXRFbmREYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLnNldFZhbHVlVG9JbnB1dChzdGFydCwgc3RhcnRJbnB1dCwgbWF0U3RhcnREYXRlKTtcbiAgICB0aGlzLnNldFZhbHVlVG9JbnB1dChlbmQsIGVuZElucHV0LCBtYXRFbmREYXRlKTtcbiAgfVxuXG4gIHByZXZEYXkoKSB7XG4gICAgdGhpcy5jaGFuZ2VEYXkoLTEpO1xuICB9XG5cbiAgbmV4dERheSgpIHtcbiAgICB0aGlzLmNoYW5nZURheSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlRGF5KHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMubWF0RGF0ZXBpY2tlcklucHV0KCk/LnZhbHVlO1xuXG4gICAgaWYgKGN1cnJlbnREYXRlKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gZGF5anMoY3VycmVudERhdGUpLmFkZCh2YWx1ZSwgJ2RheScpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjb25zdCBuZXdEYXRlRm9ybWF0dGVkID0gdGhpcy5mb3JtYXREYXRlVGltZUZyb21Nb2RlbFRvVmlldyhuZXdEYXRlKTtcblxuICAgICAgdGhpcy5pbnB1dENoYW5nZWQobmV3RGF0ZUZvcm1hdHRlZCk7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDbG9zZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUHJldkRheUJlZm9yZU9yRXF1YWxUb01pbkRhdGUoKSB7XG4gICAgY29uc3QgbWluID0gdGhpcy5taW4oKTtcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLm1hdERhdGVwaWNrZXJJbnB1dCgpPy52YWx1ZTtcblxuICAgIGlmICghbWluIHx8ICFzZWxlY3RlZERhdGUpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGlzQmVmb3JlID0gZGF5anMoc2VsZWN0ZWREYXRlKS5pc0JlZm9yZShtaW4sICdkYXknKTtcbiAgICBjb25zdCBpc1NhbWUgPSBkYXlqcyhzZWxlY3RlZERhdGUpLmlzU2FtZShtaW4sICdkYXknKTtcblxuICAgIHJldHVybiBpc1NhbWUgfHwgaXNCZWZvcmU7XG4gIH1cblxuICBwcml2YXRlIGlzTmV4dERheUFmdGVyT3JFcXVhbFRvTWF4RGF0ZSgpIHtcbiAgICBjb25zdCBtYXggPSB0aGlzLm1heCgpO1xuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IHRoaXMubWF0RGF0ZXBpY2tlcklucHV0KCk/LnZhbHVlO1xuXG4gICAgaWYgKCFtYXggfHwgIXNlbGVjdGVkRGF0ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaXNBZnRlciA9IGRheWpzKHNlbGVjdGVkRGF0ZSkuaXNBZnRlcihtYXgsICdkYXknKTtcbiAgICBjb25zdCBpc1NhbWUgPSBkYXlqcyhzZWxlY3RlZERhdGUpLmlzU2FtZShtYXgsICdkYXknKTtcblxuICAgIHJldHVybiBpc1NhbWUgfHwgaXNBZnRlcjtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEYXRlU2hvcnRGb3JtYXQodmFsdWU6IHN0cmluZyk6IERhdGUge1xuICAgIHJldHVybiBkYXlqcyh2YWx1ZSwgZGF0ZVNob3J0Rm9ybWF0KS50b0RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFsdWVUb0lucHV0PEQgZXh0ZW5kcyB7IHZhbHVlOiBEYXRlIHwgbnVsbCB9PihcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBuYXRpdmVJbnB1dDogSFRNTElucHV0RWxlbWVudCxcbiAgICBtYXREYXRlSW5wdXQ6IERcbiAgKTogdm9pZCB7XG4gICAgbmF0aXZlSW5wdXQudmFsdWUgPSB2YWx1ZSA/IHRoaXMuZm9ybWF0RGF0ZVRpbWVGcm9tTW9kZWxUb1ZpZXcodmFsdWUpIDogJyc7XG4gICAgbWF0RGF0ZUlucHV0LnZhbHVlID0gdmFsdWUgPyBkYXlqcyh2YWx1ZSkudXRjKCkudG9EYXRlKCkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogRm9ybWF0cyBEYXRlIHRvIGZ1bGwgSVNPIDg2MDEgZm9ybWF0IChlLmcuIGAyMDIyLTA4LTMxVDIyOjAwOjAwLjAwMFpgKVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXREYXRlRnJvbVZpZXdUb01vZGVsKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF5anModmFsdWUpLnV0YygpLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGVUaW1lRnJvbU1vZGVsVG9WaWV3KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXlqcyh2YWx1ZSkudHooZGFuaXNoVGltZVpvbmVJZGVudGlmaWVyKS5mb3JtYXQoZGF0ZVNob3J0Rm9ybWF0KTtcbiAgfVxuXG4gIHByaXZhdGUgdG9EYW5pc2hUaW1lWm9uZSh2YWx1ZTogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiBkYXlqcyh2YWx1ZS50b0lTT1N0cmluZygpKS50eihkYW5pc2hUaW1lWm9uZUlkZW50aWZpZXIpLnRvRGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUb0VuZE9mRGF5KHZhbHVlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIGRheWpzKHZhbHVlKS5lbmRPZignZGF5JykudG9EYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEVuZERhdGVUb0RhbmlzaFRpbWVab25lKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgZGF0ZUJhc2VkT25TaG9ydEZvcm1hdCA9IHRoaXMucGFyc2VEYXRlU2hvcnRGb3JtYXQodmFsdWUpO1xuXG4gICAgbGV0IG1heWJlRGF0ZUluRGFuaXNoVGltZVpvbmU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChkYXlqcyhkYXRlQmFzZWRPblNob3J0Rm9ybWF0KS5pc1ZhbGlkKCkpIHtcbiAgICAgIG1heWJlRGF0ZUluRGFuaXNoVGltZVpvbmUgPSB0aGlzLnRvRGFuaXNoVGltZVpvbmUoZGF0ZUJhc2VkT25TaG9ydEZvcm1hdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlRGF0ZUluRGFuaXNoVGltZVpvbmU7XG4gIH1cbn1cbiIsIjwhLS1cbkBsaWNlbnNlXG5Db3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS0+XG48d2F0dC1maWVsZCBbY29udHJvbF09XCJjb250cm9sXCIgW2xhYmVsXT1cImxhYmVsKClcIj5cbiAgQGlmIChyYW5nZSkge1xuICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtyYW5nZVBpY2tlcl09XCJyYW5nZURhdGVwaWNrZXJcIlxuICAgICAgW21pbl09XCJtaW4oKSA/PyBudWxsXCJcbiAgICAgIFttYXhdPVwibWF4KCkgPz8gbnVsbFwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaW5lcnRcbiAgICAgICAgYXJpYS1sYWJlbD1cInN0YXJ0LWRhdGUtaW5wdXRcIlxuICAgICAgICBtYXRTdGFydERhdGVcbiAgICAgICAgI3N0YXJ0RGF0ZUlucHV0XG4gICAgICAgIFtyZWFkT25seV09XCJyYW5nZU1vbnRoT25seU1vZGUoKVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgIFtoaWRkZW5dPVwidHJ1ZVwiXG4gICAgICAvPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgaW5lcnRcbiAgICAgICAgYXJpYS1sYWJlbD1cImVuZC1kYXRlLWlucHV0XCJcbiAgICAgICAgbWF0RW5kRGF0ZVxuICAgICAgICAjZW5kRGF0ZUlucHV0XG4gICAgICAgIFtyZWFkT25seV09XCJyYW5nZU1vbnRoT25seU1vZGUoKVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgIFtoaWRkZW5dPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgPGlucHV0ICNhY3R1YWxJbnB1dCBjbGFzcz1cIm1hc2staW5wdXRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxuICAgIDx3YXR0LXBsYWNlaG9sZGVyLW1hc2tcbiAgICAgIFtwcmltYXJ5SW5wdXRFbGVtZW50XT1cImFjdHVhbElucHV0XCJcbiAgICAgIFttYXNrXT1cInJhbmdlSW5wdXRNYXNrKClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInJhbmdlUGxhY2Vob2xkZXJcIlxuICAgICAgKG1hc2tBcHBsaWVkKT1cInJhbmdlSW5wdXRDaGFuZ2VkKCRldmVudClcIlxuICAgIC8+XG5cbiAgICA8d2F0dC1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJpY29uXCJcbiAgICAgIGljb249XCJkYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZmFsc2VcIlxuICAgICAgKGNsaWNrKT1cInJhbmdlRGF0ZXBpY2tlci5vcGVuKClcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXJcbiAgICAgIFtwYW5lbENsYXNzXT1cInJhbmdlTW9udGhPbmx5TW9kZSgpID8gJ3dhdHQtZGF0ZXBpY2tlci1yYW5nZV9fcGFuZWwtLW1vbnRoLW9ubHknIDogJydcIlxuICAgICAgW3N0YXJ0Vmlld109XCJyYW5nZU1vbnRoT25seU1vZGUoKSA/ICdtdWx0aS15ZWFyJyA6ICdtb250aCdcIlxuICAgICAgW3N0YXJ0QXRdPVwic3RhcnRBdCgpXCJcbiAgICAgIChtb250aFNlbGVjdGVkKT1cIm9uTW9udGhTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgIChjbG9zZWQpPVwicmFuZ2VQaWNrZXJDbG9zZWQoKVwiXG4gICAgICAjcmFuZ2VEYXRlcGlja2VyXG4gICAgLz5cbiAgfSBAZWxzZSB7XG4gICAgPGlucHV0XG4gICAgICBpbmVydFxuICAgICAgbWF0SW5wdXRcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgYXJpYS1sYWJlbD1cImRhdGUtaW5wdXRcIlxuICAgICAgI2RhdGVJbnB1dFxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW21pbl09XCJtaW4oKVwiXG4gICAgICBbbWF4XT1cIm1heCgpXCJcbiAgICAgIFttYXREYXRlcGlja2VyXT1cInNpbmdsZURhdGVwaWNrZXJcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8aW5wdXQgI2FjdHVhbElucHV0IGNsYXNzPVwibWFzay1pbnB1dFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIC8+XG4gICAgPHdhdHQtcGxhY2Vob2xkZXItbWFza1xuICAgICAgW3ByaW1hcnlJbnB1dEVsZW1lbnRdPVwiYWN0dWFsSW5wdXRcIlxuICAgICAgW21hc2tdPVwiaW5wdXRNYXNrKClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIChtYXNrQXBwbGllZCk9XCJpbnB1dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDx3YXR0LWJ1dHRvblxuICAgICAgd2F0dFN1ZmZpeFxuICAgICAgdmFyaWFudD1cImljb25cIlxuICAgICAgaWNvbj1cImRhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJzaW5nbGVEYXRlcGlja2VyLm9wZW4oKVwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICAvPlxuXG4gICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAjc2luZ2xlRGF0ZXBpY2tlclxuICAgICAgcGFuZWxDbGFzcz1cIndhdHQtZGF0ZXBpY2tlci1zaW5nbGVfX3BhbmVsXCJcbiAgICAgIFtkYXRlQ2xhc3NdPVwiZGF0ZUNsYXNzKClcIlxuICAgICAgW3N0YXJ0QXRdPVwic3RhcnRBdCgpXCJcbiAgICAgIChjbG9zZWQpPVwiZGF0ZXBpY2tlckNsb3NlZCgpXCJcbiAgICAvPlxuICB9XG5cbiAgPG5nLWNvbnRlbnQgLz5cbiAgPG5nLWNvbnRlbnQgbmdQcm9qZWN0QXM9XCJ3YXR0LWZpZWxkLWhpbnRcIiBzZWxlY3Q9XCJ3YXR0LWZpZWxkLWhpbnRcIiAvPlxuICA8bmctY29udGVudCBuZ1Byb2plY3RBcz1cIndhdHQtZmllbGQtZXJyb3JcIiBzZWxlY3Q9XCJ3YXR0LWZpZWxkLWVycm9yXCIgLz5cbjwvd2F0dC1maWVsZD5cblxuQGlmICghcmFuZ2UgJiYgY2FuU3RlcFRocm91Z2hEYXlzKCkpIHtcbiAgPHNwYW5cbiAgICBjbGFzcz1cIndhdHQtZGF0ZXBpY2tlci1zaW5nbGVfX3N0ZXAtdGhyb3VnaFwiXG4gICAgW2NsYXNzLndhdHQtZGF0ZXBpY2tlci1zaW5nbGVfX2hhcy1sYWJlbF09XCIhIWxhYmVsKClcIlxuICA+XG4gICAgPHdhdHQtYnV0dG9uXG4gICAgICB2YXJpYW50PVwiaWNvblwiXG4gICAgICBpY29uPVwibGVmdFwiXG4gICAgICAoY2xpY2spPVwicHJldkRheSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBpc1ByZXZEYXlCdXR0b25EaXNhYmxlZCgpXCJcbiAgICAvPlxuICAgIDx3YXR0LWJ1dHRvblxuICAgICAgdmFyaWFudD1cImljb25cIlxuICAgICAgaWNvbj1cInJpZ2h0XCJcbiAgICAgIChjbGljayk9XCJuZXh0RGF5KClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGlzTmV4dERheUJ1dHRvbkRpc2FibGVkKClcIlxuICAgIC8+XG4gIDwvc3Bhbj5cbn1cbiJdfQ==
@@ -213,4 +213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
213
213
  type: HostBinding,
214
214
  args: ['attr.aria-owns']
215
215
  }] } });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10aW1lcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3BpY2tlci90aW1lcGlja2VyL3dhdHQtdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9waWNrZXIvdGltZXBpY2tlci93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFt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Qzt1R0FuS1UsdUJBQXVCOzJGQUF2Qix1QkFBdUIseVlBYnZCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLENBQUMsK1hDaEZyRiwwdEdBNEdBLHMwRER6QkksbUJBQW1CLHdmQUNuQixjQUFjLGlZQUNkLGFBQWEsMnJDQUViLG1CQUFtQixzSUFDbkIsbUJBQW1CLDJIQUNuQixrQkFBa0IsK0lBQ2xCLDRCQUE0Qjs7MkZBR25CLHVCQUF1QjtrQkFqQm5DLFNBQVM7K0JBQ0UsaUJBQWlCLGFBR2hCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyx5QkFBeUIsRUFBRSxDQUFDLGlCQUNwRSxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxhQUFhO3dCQUViLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLDRCQUE0QjtxQkFDN0I7d0RBd0JHLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBtYXNraXRvVGltZU9wdGlvbnNHZW5lcmF0b3IgfSBmcm9tICdAbWFza2l0by9raXQnO1xuXG5pbXBvcnQgeyBXYXR0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2J1dHRvbic7XG5pbXBvcnQgeyBXYXR0RGF0ZVJhbmdlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0RmllbGRDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvZmllbGQnO1xuaW1wb3J0IHsgV2F0dFNsaWRlckNvbXBvbmVudCwgV2F0dFNsaWRlclZhbHVlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3NsaWRlcic7XG5cbmltcG9ydCB7IG1hc2tpdG9UaW1lUmFuZ2VPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSAnLi9tYXNraXRvLXRpbWUtcmFuZ2UtbWFzayc7XG5pbXBvcnQge1xuICBXYXR0UGlja2VyQmFzZSxcbiAgV2F0dFBpY2tlclZhbHVlLFxuICBXYXR0UGxhY2Vob2xkZXJNYXNrQ29tcG9uZW50LFxufSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvcGlja2VyL19fc2hhcmVkJztcblxuLy8gQ29uc3RhbnRzIGZvciB3b3JraW5nIHdpdGggdGltZSBpbnRlcnZhbHNcbmNvbnN0IG1pbnV0ZXNJbkFEYXkgPSAyNCAqIDYwO1xuY29uc3QgcXVhcnRlcnNJbkFEYXkgPSBtaW51dGVzSW5BRGF5IC8gMTU7XG5cbi8vIFNob3cgc2xpZGVyIGluaXRpYWxseSBhcyBcIjAwOjAwIC0gMjM6NTlcIlxuY29uc3QgaW5pdGlhbFNsaWRlclZhbHVlOiBXYXR0U2xpZGVyVmFsdWUgPSB7IG1pbjogMCwgbWF4OiBtaW51dGVzSW5BRGF5IC0gMSB9O1xuXG4vKiogQ29udmVydHMgc3RyaW5nIHRpbWUgZm9ybWF0IChISDpNTSkgdG8gbnVtYmVyIG9mIG1pbnV0ZXMuICovXG5mdW5jdGlvbiB0aW1lVG9NaW51dGVzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgcmV0dXJuIE51bWJlcihob3VycykgKiA2MCArIE51bWJlcihtaW51dGVzKTtcbn1cblxuLyoqIENvbnZlcnRzIG51bWJlciBvZiBtaW51dGVzIHRvIHN0cmluZyB0aW1lIGZvcm1hdCAoSEg6TU0pLiAqL1xuZnVuY3Rpb24gbWludXRlc1RvVGltZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaG91cnMgPSBgJHtNYXRoLmZsb29yKHZhbHVlIC8gNjApfWA7XG4gIGNvbnN0IG1pbnV0ZXMgPSBgJHt2YWx1ZSAlIDYwfWA7XG4gIHJldHVybiBgJHtob3Vycy5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuLyoqXG4gKiBVc2FnZTpcbiAqIGBpbXBvcnQgeyBXYXR0VGltZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQtZGF0YWh1Yi93YXR0L3RpbWVwaWNrZXInO2BcbiAqXG4gKiBJTVBPUlRBTlQ6XG4gKiBUaGUgc3R5bGluZyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIG91ciBtb25vc3BhY2VkIGZvbnQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtdGltZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogV2F0dFRpbWVwaWNrZXJDb21wb25lbnQgfV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG5cbiAgICBXYXR0QnV0dG9uQ29tcG9uZW50LFxuICAgIFdhdHRTbGlkZXJDb21wb25lbnQsXG4gICAgV2F0dEZpZWxkQ29tcG9uZW50LFxuICAgIFdhdHRQbGFjZWhvbGRlck1hc2tDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUaW1lcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgV2F0dFBpY2tlckJhc2Uge1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBjaGFuZ2VEZXRlY3Rpb25SZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgbGFiZWwgPSBpbnB1dCgnJyk7XG4gIC8qKlxuICAgKiBUZXh0IHRvIGRpc3BsYXkgb24gbGFiZWwgZm9yIHRpbWUgcmFuZ2Ugc2xpZGVyLlxuICAgKi9cbiAgc2xpZGVyTGFiZWwgPSBpbnB1dCgnJyk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGlucHV0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCd0aW1lSW5wdXQnKTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0YXJ0SW5wdXQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ3N0YXJ0VGltZUlucHV0Jyk7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBlbmRJbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignZW5kVGltZUlucHV0Jyk7XG5cbiAgc2xpZGVySWQgPSBgJHt0aGlzLmlkfS1zbGlkZXJgO1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBkZWZpbmluZyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0aW1lIHBpY2tlciBhbmRcbiAgICogdGhlIHNsaWRlciBvdmVybGF5IChzaW5jZSB0aGUgRE9NIGhpZXJhcmNoeSBjYW5ub3QgYmUgdXNlZCkuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW93bnMnKVxuICBnZXQgYXJpYU93bnMoKSB7XG4gICAgLy8gT25seSByYW5nZSBpbnB1dCBoYXMgc2xpZGVyXG4gICAgcmV0dXJuIHRoaXMucmFuZ2UgJiYgdGhpcy5zbGlkZXJPcGVuID8gdGhpcy5zbGlkZXJJZCA6IHVuZGVmaW5lZDtcbiAgfVxuICBob3Vyc01pbnV0ZXNQbGFjZWhvbGRlciA9ICdISDpNTSc7XG4gIHJhbmdlU2VwYXJhdG9yID0gJyAtICc7XG4gIHJhbmdlUGxhY2Vob2xkZXIgPVxuICAgIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIgKyB0aGlzLnJhbmdlU2VwYXJhdG9yICsgdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlcjtcbiAgcHJvdGVjdGVkIF9wbGFjZWhvbGRlciA9IHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNsaWRlciBpcyBvcGVuLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzbGlkZXJPcGVuID0gZmFsc2U7XG5cbiAgc2xpZGVyU3RlcHMgPSBbLi4uQXJyYXkocXVhcnRlcnNJbkFEYXkpLmtleXMoKV0ubWFwKCh4KSA9PiB4ICogMTUpLmNvbmNhdChtaW51dGVzSW5BRGF5IC0gMSk7XG5cbiAgc2xpZGVyQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFdhdHRTbGlkZXJWYWx1ZT4oKTtcblxuICBnZXQgc2xpZGVyVmFsdWUoKTogV2F0dFNsaWRlclZhbHVlIHtcbiAgICBpZiAodGhpcy52YWx1ZT8uc3RhcnQgJiYgdGhpcy52YWx1ZT8uZW5kKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtaW46IHRpbWVUb01pbnV0ZXModGhpcy52YWx1ZS5zdGFydCksXG4gICAgICAgIG1heDogdGltZVRvTWludXRlcyh0aGlzLnZhbHVlLmVuZCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFJldGFpbiBsYXN0IHNsaWRlciB2YWx1ZSBpZiBpbnB1dCB2YWx1ZSBpcyBpbmNvbXBsZXRlXG4gICAgcmV0dXJuIGluaXRpYWxTbGlkZXJWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzbGlkZXIgb3ZlcmxheS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdG9nZ2xlU2xpZGVyKCkge1xuICAgIHRoaXMuc2xpZGVyT3BlbiA9ICF0aGlzLnNsaWRlck9wZW47XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gYXV0b21hdGljYWxseSBjbG9zZSB0aGUgc2xpZGVyIG92ZXJsYXkgb24gYmx1ci5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb3ZlcnJpZGUgb25Gb2N1c091dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIHN1cGVyLm9uRm9jdXNPdXQoZXZlbnQpO1xuICAgIGlmICghdGhpcy5mb2N1c2VkKSB0aGlzLnNsaWRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGlucHV0TWFzayA9IG1hc2tpdG9UaW1lT3B0aW9uc0dlbmVyYXRvcih7IG1vZGU6ICdISDpNTScgfSk7XG4gIHJhbmdlSW5wdXRNYXNrID0gbWFza2l0b1RpbWVSYW5nZU9wdGlvbnNHZW5lcmF0b3IoKTtcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihgd2F0dC10aW1lcGlja2VyLSR7V2F0dFRpbWVwaWNrZXJDb21wb25lbnQubmV4dElkKyt9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFNpbmdsZUlucHV0KCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dCgpO1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSAmJiBpbnB1dCkge1xuICAgICAgKGlucHV0Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGltZSA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKTtcbiAgICBpZiAodGltZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aW1lLmxlbmd0aCAhPT0gdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlci5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh0aW1lKTtcbiAgfVxuXG4gIHJhbmdlSW5wdXRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFydCA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKTtcbiAgICBpZiAoc3RhcnQubGVuZ3RoICE9PSB0aGlzLmhvdXJzTWludXRlc1BsYWNlaG9sZGVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0OiAnJywgZW5kOiAnJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMucmFuZ2VQbGFjZWhvbGRlci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydCwgZW5kOiAnJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGVuZCA9IHZhbHVlLnNsaWNlKHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoICsgdGhpcy5yYW5nZVNlcGFyYXRvci5sZW5ndGgpO1xuICAgIGlmICh0aW1lVG9NaW51dGVzKGVuZCkgPiB0aW1lVG9NaW51dGVzKHN0YXJ0KSkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZCA9IG1pbnV0ZXNUb1RpbWUodGltZVRvTWludXRlcyhzdGFydCkgKyAxKTtcbiAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZUFuZE5vdGlmeShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFJhbmdlSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMuaW5pdGlhbFZhbHVlIGFzIFdhdHREYXRlUmFuZ2U7XG4gICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydDogJycsIGVuZDogJycgfSk7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyQ2hhbmdlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNsaWRlclZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWluKTtcbiAgICAgIGNvbnN0IGVuZCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWF4KTtcbiAgICAgIGlmIChlbmQgPiBzdGFydCkge1xuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRSYW5nZVZhbHVlQW5kTm90aWZ5KHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydCwgZW5kIH0pO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dCgpO1xuICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICAoaW5wdXQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IHN0YXJ0ICsgdGhpcy5yYW5nZVNlcGFyYXRvciArIGVuZDtcbiAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFNpbmdsZVZhbHVlKFxuICAgIHZhbHVlOiBFeGNsdWRlPFdhdHRQaWNrZXJWYWx1ZSwgV2F0dERhdGVSYW5nZT4sXG4gICAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRcbiAgKSB7XG4gICAgaW5wdXQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRSYW5nZVZhbHVlKFxuICAgIHZhbHVlOiBXYXR0RGF0ZVJhbmdlLFxuICAgIHN0YXJ0SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgZW5kSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2YWx1ZTtcblxuICAgIGlmIChzdGFydCkge1xuICAgICAgc3RhcnRJbnB1dC52YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmIChlbmQpIHtcbiAgICAgIGVuZElucHV0LnZhbHVlID0gZW5kO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLVxuQGxpY2Vuc2VcbkNvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLT5cbjx3YXR0LWZpZWxkIFtpZF09XCJpZFwiIFtjb250cm9sXT1cImNvbnRyb2xcIiBbbGFiZWxdPVwibGFiZWwoKVwiPlxuICBAaWYgKCFyYW5nZSkge1xuICAgIDxpbnB1dFxuICAgICAgaW5lcnRcbiAgICAgIG1hdElucHV0XG4gICAgICBhcmlhLWxhYmVsPVwidGltZS1pbnB1dFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxpbnB1dCAjdGltZUlucHV0IGNsYXNzPVwibWFzay1pbnB1dFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIC8+XG4gICAgPHdhdHQtcGxhY2Vob2xkZXItbWFza1xuICAgICAgW3ByaW1hcnlJbnB1dEVsZW1lbnRdPVwidGltZUlucHV0XCJcbiAgICAgIFttYXNrXT1cImlucHV0TWFza1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiaG91cnNNaW51dGVzUGxhY2Vob2xkZXJcIlxuICAgICAgKG1hc2tBcHBsaWVkKT1cImlucHV0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAvPlxuICB9IEBlbHNlIHtcbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXRcbiAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGluZXJ0XG4gICAgICAgIGFyaWEtbGFiZWw9XCJzdGFydC10aW1lLWlucHV0XCJcbiAgICAgICAgbWF0U3RhcnREYXRlXG4gICAgICAgICNzdGFydFRpbWVJbnB1dFxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpbmVydFxuICAgICAgICBhcmlhLWxhYmVsPVwiZW5kLXRpbWUtaW5wdXRcIlxuICAgICAgICBtYXRFbmREYXRlXG4gICAgICAgICNlbmRUaW1lSW5wdXRcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIC8+XG4gICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICA8aW5wdXQgI3RpbWVJbnB1dCBjbGFzcz1cIm1hc2staW5wdXRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxuICAgIDx3YXR0LXBsYWNlaG9sZGVyLW1hc2tcbiAgICAgIFtwcmltYXJ5SW5wdXRFbGVtZW50XT1cInRpbWVJbnB1dFwiXG4gICAgICBbbWFza109XCJyYW5nZUlucHV0TWFza1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicmFuZ2VQbGFjZWhvbGRlclwiXG4gICAgICAobWFza0FwcGxpZWQpPVwicmFuZ2VJbnB1dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDx3YXR0LWJ1dHRvblxuICAgICAgdmFyaWFudD1cImljb25cIlxuICAgICAgaWNvbj1cInRpbWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJzbGlkZXJPcGVuXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTbGlkZXIoKVwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICAvPlxuXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJzbGlkZXJPcGVuXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WV09XCIxMlwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBbaWRdPVwic2xpZGVySWRcIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgY2xhc3M9XCJ3YXR0LXRpbWVwaWNrZXItc2xpZGVyXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChmb2N1c2luKT1cIm9uRm9jdXNJbigpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1sYWJlbFwiPnt7IHNsaWRlckxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIDx3YXR0LXNsaWRlclxuICAgICAgICAgIFttaW5dPVwic2xpZGVyU3RlcHNbMF1cIlxuICAgICAgICAgIFttYXhdPVwic2xpZGVyU3RlcHNbc2xpZGVyU3RlcHMubGVuZ3RoIC0gMV1cIlxuICAgICAgICAgIFtzdGVwXT1cIjFcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzbGlkZXJWYWx1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInNsaWRlckNoYW5nZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIH1cblxuICA8bmctY29udGVudCAvPlxuICA8bmctY29udGVudCBuZ1Byb2plY3RBcz1cIndhdHQtZmllbGQtaGludFwiIHNlbGVjdD1cIndhdHQtZmllbGQtaGludFwiIC8+XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1lcnJvclwiIHNlbGVjdD1cIndhdHQtZmllbGQtZXJyb3JcIiAvPlxuPC93YXR0LWZpZWxkPlxuIl19
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10aW1lcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3BpY2tlci90aW1lcGlja2VyL3dhdHQtdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9waWNrZXIvdGltZXBpY2tlci93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFt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Qzt1R0FuS1UsdUJBQXVCOzJGQUF2Qix1QkFBdUIseVlBYnZCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLENBQUMsK1hDaEZyRiwwdEdBNEdBLHMwRER6QkksbUJBQW1CLHdmQUNuQixjQUFjLGlZQUNkLGFBQWEsMnJDQUViLG1CQUFtQixzSUFDbkIsbUJBQW1CLDJIQUNuQixrQkFBa0IsK0lBQ2xCLDRCQUE0Qjs7MkZBR25CLHVCQUF1QjtrQkFqQm5DLFNBQVM7K0JBQ0UsaUJBQWlCLGFBR2hCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyx5QkFBeUIsRUFBRSxDQUFDLGlCQUNwRSxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxhQUFhO3dCQUViLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLDRCQUE0QjtxQkFDN0I7d0RBd0JHLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBtYXNraXRvVGltZU9wdGlvbnNHZW5lcmF0b3IgfSBmcm9tICdAbWFza2l0by9raXQnO1xuXG5pbXBvcnQgeyBXYXR0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2J1dHRvbic7XG5pbXBvcnQgeyBXYXR0RGF0ZVJhbmdlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0RmllbGRDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvZmllbGQnO1xuaW1wb3J0IHsgV2F0dFNsaWRlckNvbXBvbmVudCwgV2F0dFNsaWRlclZhbHVlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3NsaWRlcic7XG5cbmltcG9ydCB7IG1hc2tpdG9UaW1lUmFuZ2VPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSAnLi9tYXNraXRvLXRpbWUtcmFuZ2UtbWFzayc7XG5pbXBvcnQge1xuICBXYXR0UGlja2VyQmFzZSxcbiAgV2F0dFBpY2tlclZhbHVlLFxuICBXYXR0UGxhY2Vob2xkZXJNYXNrQ29tcG9uZW50LFxufSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvcGlja2VyL19fc2hhcmVkJztcblxuLy8gQ29uc3RhbnRzIGZvciB3b3JraW5nIHdpdGggdGltZSBpbnRlcnZhbHNcbmNvbnN0IG1pbnV0ZXNJbkFEYXkgPSAyNCAqIDYwO1xuY29uc3QgcXVhcnRlcnNJbkFEYXkgPSBtaW51dGVzSW5BRGF5IC8gMTU7XG5cbi8vIFNob3cgc2xpZGVyIGluaXRpYWxseSBhcyBcIjAwOjAwIC0gMjM6NTlcIlxuY29uc3QgaW5pdGlhbFNsaWRlclZhbHVlOiBXYXR0U2xpZGVyVmFsdWUgPSB7IG1pbjogMCwgbWF4OiBtaW51dGVzSW5BRGF5IC0gMSB9O1xuXG4vKiogQ29udmVydHMgc3RyaW5nIHRpbWUgZm9ybWF0IChISDpNTSkgdG8gbnVtYmVyIG9mIG1pbnV0ZXMuICovXG5mdW5jdGlvbiB0aW1lVG9NaW51dGVzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgcmV0dXJuIE51bWJlcihob3VycykgKiA2MCArIE51bWJlcihtaW51dGVzKTtcbn1cblxuLyoqIENvbnZlcnRzIG51bWJlciBvZiBtaW51dGVzIHRvIHN0cmluZyB0aW1lIGZvcm1hdCAoSEg6TU0pLiAqL1xuZnVuY3Rpb24gbWludXRlc1RvVGltZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaG91cnMgPSBgJHtNYXRoLmZsb29yKHZhbHVlIC8gNjApfWA7XG4gIGNvbnN0IG1pbnV0ZXMgPSBgJHt2YWx1ZSAlIDYwfWA7XG4gIHJldHVybiBgJHtob3Vycy5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuLyoqXG4gKiBVc2FnZTpcbiAqIGBpbXBvcnQgeyBXYXR0VGltZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQtZGF0YWh1Yi93YXR0L3RpbWVwaWNrZXInO2BcbiAqXG4gKiBJTVBPUlRBTlQ6XG4gKiBUaGUgc3R5bGluZyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIG91ciBtb25vc3BhY2VkIGZvbnQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtdGltZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogV2F0dFRpbWVwaWNrZXJDb21wb25lbnQgfV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG5cbiAgICBXYXR0QnV0dG9uQ29tcG9uZW50LFxuICAgIFdhdHRTbGlkZXJDb21wb25lbnQsXG4gICAgV2F0dEZpZWxkQ29tcG9uZW50LFxuICAgIFdhdHRQbGFjZWhvbGRlck1hc2tDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUaW1lcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgV2F0dFBpY2tlckJhc2Uge1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBjaGFuZ2VEZXRlY3Rpb25SZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgbGFiZWwgPSBpbnB1dCgnJyk7XG4gIC8qKlxuICAgKiBUZXh0IHRvIGRpc3BsYXkgb24gbGFiZWwgZm9yIHRpbWUgcmFuZ2Ugc2xpZGVyLlxuICAgKi9cbiAgc2xpZGVyTGFiZWwgPSBpbnB1dCgnJyk7XG5cbiAgb3ZlcnJpZGUgaW5wdXQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ3RpbWVJbnB1dCcpO1xuICBvdmVycmlkZSBzdGFydElucHV0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdzdGFydFRpbWVJbnB1dCcpO1xuICBvdmVycmlkZSBlbmRJbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignZW5kVGltZUlucHV0Jyk7XG5cbiAgc2xpZGVySWQgPSBgJHt0aGlzLmlkfS1zbGlkZXJgO1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBkZWZpbmluZyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0aW1lIHBpY2tlciBhbmRcbiAgICogdGhlIHNsaWRlciBvdmVybGF5IChzaW5jZSB0aGUgRE9NIGhpZXJhcmNoeSBjYW5ub3QgYmUgdXNlZCkuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW93bnMnKVxuICBnZXQgYXJpYU93bnMoKSB7XG4gICAgLy8gT25seSByYW5nZSBpbnB1dCBoYXMgc2xpZGVyXG4gICAgcmV0dXJuIHRoaXMucmFuZ2UgJiYgdGhpcy5zbGlkZXJPcGVuID8gdGhpcy5zbGlkZXJJZCA6IHVuZGVmaW5lZDtcbiAgfVxuICBob3Vyc01pbnV0ZXNQbGFjZWhvbGRlciA9ICdISDpNTSc7XG4gIHJhbmdlU2VwYXJhdG9yID0gJyAtICc7XG4gIHJhbmdlUGxhY2Vob2xkZXIgPVxuICAgIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIgKyB0aGlzLnJhbmdlU2VwYXJhdG9yICsgdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlcjtcbiAgcHJvdGVjdGVkIF9wbGFjZWhvbGRlciA9IHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNsaWRlciBpcyBvcGVuLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzbGlkZXJPcGVuID0gZmFsc2U7XG5cbiAgc2xpZGVyU3RlcHMgPSBbLi4uQXJyYXkocXVhcnRlcnNJbkFEYXkpLmtleXMoKV0ubWFwKCh4KSA9PiB4ICogMTUpLmNvbmNhdChtaW51dGVzSW5BRGF5IC0gMSk7XG5cbiAgc2xpZGVyQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFdhdHRTbGlkZXJWYWx1ZT4oKTtcblxuICBnZXQgc2xpZGVyVmFsdWUoKTogV2F0dFNsaWRlclZhbHVlIHtcbiAgICBpZiAodGhpcy52YWx1ZT8uc3RhcnQgJiYgdGhpcy52YWx1ZT8uZW5kKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtaW46IHRpbWVUb01pbnV0ZXModGhpcy52YWx1ZS5zdGFydCksXG4gICAgICAgIG1heDogdGltZVRvTWludXRlcyh0aGlzLnZhbHVlLmVuZCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFJldGFpbiBsYXN0IHNsaWRlciB2YWx1ZSBpZiBpbnB1dCB2YWx1ZSBpcyBpbmNvbXBsZXRlXG4gICAgcmV0dXJuIGluaXRpYWxTbGlkZXJWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzbGlkZXIgb3ZlcmxheS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdG9nZ2xlU2xpZGVyKCkge1xuICAgIHRoaXMuc2xpZGVyT3BlbiA9ICF0aGlzLnNsaWRlck9wZW47XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gYXV0b21hdGljYWxseSBjbG9zZSB0aGUgc2xpZGVyIG92ZXJsYXkgb24gYmx1ci5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb3ZlcnJpZGUgb25Gb2N1c091dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIHN1cGVyLm9uRm9jdXNPdXQoZXZlbnQpO1xuICAgIGlmICghdGhpcy5mb2N1c2VkKSB0aGlzLnNsaWRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGlucHV0TWFzayA9IG1hc2tpdG9UaW1lT3B0aW9uc0dlbmVyYXRvcih7IG1vZGU6ICdISDpNTScgfSk7XG4gIHJhbmdlSW5wdXRNYXNrID0gbWFza2l0b1RpbWVSYW5nZU9wdGlvbnNHZW5lcmF0b3IoKTtcbiAgb3ZlcnJpZGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihgd2F0dC10aW1lcGlja2VyLSR7V2F0dFRpbWVwaWNrZXJDb21wb25lbnQubmV4dElkKyt9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFNpbmdsZUlucHV0KCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dCgpO1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSAmJiBpbnB1dCkge1xuICAgICAgKGlucHV0Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGltZSA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKTtcbiAgICBpZiAodGltZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aW1lLmxlbmd0aCAhPT0gdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlci5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh0aW1lKTtcbiAgfVxuXG4gIHJhbmdlSW5wdXRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFydCA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKTtcbiAgICBpZiAoc3RhcnQubGVuZ3RoICE9PSB0aGlzLmhvdXJzTWludXRlc1BsYWNlaG9sZGVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0OiAnJywgZW5kOiAnJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMucmFuZ2VQbGFjZWhvbGRlci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydCwgZW5kOiAnJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGVuZCA9IHZhbHVlLnNsaWNlKHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoICsgdGhpcy5yYW5nZVNlcGFyYXRvci5sZW5ndGgpO1xuICAgIGlmICh0aW1lVG9NaW51dGVzKGVuZCkgPiB0aW1lVG9NaW51dGVzKHN0YXJ0KSkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZCA9IG1pbnV0ZXNUb1RpbWUodGltZVRvTWludXRlcyhzdGFydCkgKyAxKTtcbiAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZUFuZE5vdGlmeShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFJhbmdlSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMuaW5pdGlhbFZhbHVlIGFzIFdhdHREYXRlUmFuZ2U7XG4gICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydDogJycsIGVuZDogJycgfSk7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyQ2hhbmdlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNsaWRlclZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWluKTtcbiAgICAgIGNvbnN0IGVuZCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWF4KTtcbiAgICAgIGlmIChlbmQgPiBzdGFydCkge1xuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRSYW5nZVZhbHVlQW5kTm90aWZ5KHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydCwgZW5kIH0pO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dCgpO1xuICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICAoaW5wdXQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IHN0YXJ0ICsgdGhpcy5yYW5nZVNlcGFyYXRvciArIGVuZDtcbiAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFNpbmdsZVZhbHVlKFxuICAgIHZhbHVlOiBFeGNsdWRlPFdhdHRQaWNrZXJWYWx1ZSwgV2F0dERhdGVSYW5nZT4sXG4gICAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRcbiAgKSB7XG4gICAgaW5wdXQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRSYW5nZVZhbHVlKFxuICAgIHZhbHVlOiBXYXR0RGF0ZVJhbmdlLFxuICAgIHN0YXJ0SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgZW5kSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2YWx1ZTtcblxuICAgIGlmIChzdGFydCkge1xuICAgICAgc3RhcnRJbnB1dC52YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmIChlbmQpIHtcbiAgICAgIGVuZElucHV0LnZhbHVlID0gZW5kO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLVxuQGxpY2Vuc2VcbkNvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLT5cbjx3YXR0LWZpZWxkIFtpZF09XCJpZFwiIFtjb250cm9sXT1cImNvbnRyb2xcIiBbbGFiZWxdPVwibGFiZWwoKVwiPlxuICBAaWYgKCFyYW5nZSkge1xuICAgIDxpbnB1dFxuICAgICAgaW5lcnRcbiAgICAgIG1hdElucHV0XG4gICAgICBhcmlhLWxhYmVsPVwidGltZS1pbnB1dFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxpbnB1dCAjdGltZUlucHV0IGNsYXNzPVwibWFzay1pbnB1dFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIC8+XG4gICAgPHdhdHQtcGxhY2Vob2xkZXItbWFza1xuICAgICAgW3ByaW1hcnlJbnB1dEVsZW1lbnRdPVwidGltZUlucHV0XCJcbiAgICAgIFttYXNrXT1cImlucHV0TWFza1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiaG91cnNNaW51dGVzUGxhY2Vob2xkZXJcIlxuICAgICAgKG1hc2tBcHBsaWVkKT1cImlucHV0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAvPlxuICB9IEBlbHNlIHtcbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXRcbiAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGluZXJ0XG4gICAgICAgIGFyaWEtbGFiZWw9XCJzdGFydC10aW1lLWlucHV0XCJcbiAgICAgICAgbWF0U3RhcnREYXRlXG4gICAgICAgICNzdGFydFRpbWVJbnB1dFxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpbmVydFxuICAgICAgICBhcmlhLWxhYmVsPVwiZW5kLXRpbWUtaW5wdXRcIlxuICAgICAgICBtYXRFbmREYXRlXG4gICAgICAgICNlbmRUaW1lSW5wdXRcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIC8+XG4gICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICA8aW5wdXQgI3RpbWVJbnB1dCBjbGFzcz1cIm1hc2staW5wdXRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxuICAgIDx3YXR0LXBsYWNlaG9sZGVyLW1hc2tcbiAgICAgIFtwcmltYXJ5SW5wdXRFbGVtZW50XT1cInRpbWVJbnB1dFwiXG4gICAgICBbbWFza109XCJyYW5nZUlucHV0TWFza1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicmFuZ2VQbGFjZWhvbGRlclwiXG4gICAgICAobWFza0FwcGxpZWQpPVwicmFuZ2VJbnB1dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDx3YXR0LWJ1dHRvblxuICAgICAgdmFyaWFudD1cImljb25cIlxuICAgICAgaWNvbj1cInRpbWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJzbGlkZXJPcGVuXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTbGlkZXIoKVwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICAvPlxuXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJzbGlkZXJPcGVuXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WV09XCIxMlwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBbaWRdPVwic2xpZGVySWRcIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgY2xhc3M9XCJ3YXR0LXRpbWVwaWNrZXItc2xpZGVyXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChmb2N1c2luKT1cIm9uRm9jdXNJbigpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1sYWJlbFwiPnt7IHNsaWRlckxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIDx3YXR0LXNsaWRlclxuICAgICAgICAgIFttaW5dPVwic2xpZGVyU3RlcHNbMF1cIlxuICAgICAgICAgIFttYXhdPVwic2xpZGVyU3RlcHNbc2xpZGVyU3RlcHMubGVuZ3RoIC0gMV1cIlxuICAgICAgICAgIFtzdGVwXT1cIjFcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzbGlkZXJWYWx1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInNsaWRlckNoYW5nZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIH1cblxuICA8bmctY29udGVudCAvPlxuICA8bmctY29udGVudCBuZ1Byb2plY3RBcz1cIndhdHQtZmllbGQtaGludFwiIHNlbGVjdD1cIndhdHQtZmllbGQtaGludFwiIC8+XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1lcnJvclwiIHNlbGVjdD1cIndhdHQtZmllbGQtZXJyb3JcIiAvPlxuPC93YXR0LWZpZWxkPlxuIl19
@@ -17,5 +17,5 @@
17
17
  */
18
18
  //#endregion
19
19
  export { WattTableDataSource } from './watt-table-data-source';
20
- export { WattTableComponent, WattTableCellDirective, WattTableToolbarDirective, WattTableToolbarSpacerComponent, WATT_TABLE, } from './watt-table.component';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS90YWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFBd0IsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRixPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLFVBQVUsR0FDWCxNQUFNLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIExpY2Vuc2Vcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2UyXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgSVdhdHRUYWJsZURhdGFTb3VyY2UsIFdhdHRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL3dhdHQtdGFibGUtZGF0YS1zb3VyY2UnO1xuZXhwb3J0IHtcbiAgdHlwZSBXYXR0VGFibGVDb2x1bW4sXG4gIHR5cGUgV2F0dFRhYmxlQ29sdW1uRGVmLFxuICBXYXR0VGFibGVDb21wb25lbnQsXG4gIFdhdHRUYWJsZUNlbGxEaXJlY3RpdmUsXG4gIFdhdHRUYWJsZVRvb2xiYXJEaXJlY3RpdmUsXG4gIFdhdHRUYWJsZVRvb2xiYXJTcGFjZXJDb21wb25lbnQsXG4gIFdBVFRfVEFCTEUsXG59IGZyb20gJy4vd2F0dC10YWJsZS5jb21wb25lbnQnO1xuIl19
20
+ export { WattTableComponent, WattTableCellDirective, WattTableToolbarDirective, WATT_TABLE, } from './watt-table.component';
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS90YWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFBd0IsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRixPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsVUFBVSxHQUNYLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBJV2F0dFRhYmxlRGF0YVNvdXJjZSwgV2F0dFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vd2F0dC10YWJsZS1kYXRhLXNvdXJjZSc7XG5leHBvcnQge1xuICB0eXBlIFdhdHRUYWJsZUNvbHVtbixcbiAgdHlwZSBXYXR0VGFibGVDb2x1bW5EZWYsXG4gIFdhdHRUYWJsZUNvbXBvbmVudCxcbiAgV2F0dFRhYmxlQ2VsbERpcmVjdGl2ZSxcbiAgV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZSxcbiAgV0FUVF9UQUJMRSxcbn0gZnJvbSAnLi93YXR0LXRhYmxlLmNvbXBvbmVudCc7XG4iXX0=