@skyux/datetime 11.0.0-alpha.8 → 11.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/documentation.json +1462 -1669
  2. package/esm2022/lib/modules/date-pipe/date-pipe.module.mjs +6 -7
  3. package/esm2022/lib/modules/date-pipe/date.pipe.mjs +3 -3
  4. package/esm2022/lib/modules/date-pipe/date.service.mjs +3 -3
  5. package/esm2022/lib/modules/date-pipe/fuzzy-date.pipe.mjs +3 -3
  6. package/esm2022/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.mjs +3 -3
  7. package/esm2022/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.mjs +3 -3
  8. package/esm2022/lib/modules/date-range-picker/date-range-picker.component.mjs +30 -55
  9. package/esm2022/lib/modules/date-range-picker/date-range-picker.module.mjs +4 -4
  10. package/esm2022/lib/modules/date-range-picker/date-range.service.mjs +3 -3
  11. package/esm2022/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +5 -5
  12. package/esm2022/lib/modules/datepicker/datepicker-calendar-label.pipe.mjs +3 -3
  13. package/esm2022/lib/modules/datepicker/datepicker-calendar.component.mjs +9 -10
  14. package/esm2022/lib/modules/datepicker/datepicker-config.service.mjs +3 -3
  15. package/esm2022/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +3 -3
  16. package/esm2022/lib/modules/datepicker/datepicker-input.directive.mjs +3 -3
  17. package/esm2022/lib/modules/datepicker/datepicker.component.mjs +5 -5
  18. package/esm2022/lib/modules/datepicker/datepicker.module.mjs +4 -4
  19. package/esm2022/lib/modules/datepicker/datepicker.service.mjs +3 -3
  20. package/esm2022/lib/modules/datepicker/daypicker-button.component.mjs +5 -5
  21. package/esm2022/lib/modules/datepicker/daypicker-cell.component.mjs +5 -5
  22. package/esm2022/lib/modules/datepicker/daypicker.component.mjs +7 -8
  23. package/esm2022/lib/modules/datepicker/fuzzy-date.service.mjs +3 -3
  24. package/esm2022/lib/modules/datepicker/monthpicker.component.mjs +5 -5
  25. package/esm2022/lib/modules/datepicker/yearpicker.component.mjs +5 -5
  26. package/esm2022/lib/modules/shared/sky-datetime-resources.module.mjs +4 -4
  27. package/esm2022/lib/modules/timepicker/timepicker.component.mjs +5 -5
  28. package/esm2022/lib/modules/timepicker/timepicker.directive.mjs +3 -3
  29. package/esm2022/lib/modules/timepicker/timepicker.module.mjs +4 -4
  30. package/fesm2022/skyux-datetime.mjs +135 -160
  31. package/fesm2022/skyux-datetime.mjs.map +1 -1
  32. package/lib/modules/date-pipe/date-pipe.module.d.ts +2 -3
  33. package/lib/modules/date-range-picker/date-range-picker.component.d.ts +6 -20
  34. package/package.json +14 -14
@@ -1,9 +1,9 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Injector, Input, booleanAttribute, inject, } from '@angular/core';
3
- import { FormBuilder, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, ReactiveFormsModule, Validators, } from '@angular/forms';
3
+ import { FormBuilder, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, ReactiveFormsModule, TouchedChangeEvent, Validators, } from '@angular/forms';
4
4
  import { SkyLogService } from '@skyux/core';
5
- import { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyFormFieldLabelTextRequiredService, SkyInputBoxModule, } from '@skyux/forms';
6
- import { Subject, distinctUntilChanged, merge, takeUntil } from 'rxjs';
5
+ import { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyInputBoxModule, } from '@skyux/forms';
6
+ import { Subject, distinctUntilChanged, filter, merge, takeUntil } from 'rxjs';
7
7
  import { SkyDatepickerModule } from '../datepicker/datepicker.module';
8
8
  import { SkyDatetimeResourcesModule } from '../shared/sky-datetime-resources.module';
9
9
  import { SkyDateRangePickerEndDateResourceKeyPipe } from './date-range-picker-end-date-resource-key.pipe';
@@ -114,15 +114,8 @@ export class SkyDateRangePickerComponent {
114
114
  #changeDetector;
115
115
  #dateRangeSvc;
116
116
  #injector;
117
- #labelTextRequiredSvc;
118
117
  #logger;
119
118
  constructor() {
120
- /**
121
- * Whether to require users to specify a end date.
122
- * @deprecated Use the `required` directive or Angular's `Validators.required`
123
- * on the form control to mark the date range picker as required.
124
- */
125
- this.endDateRequired = false;
126
119
  /**
127
120
  * Whether the date range picker requires a value.
128
121
  */
@@ -132,24 +125,17 @@ export class SkyDateRangePickerComponent {
132
125
  * vertical spacing is automatically added to the date range picker.
133
126
  */
134
127
  this.stacked = false;
135
- /**
136
- * Whether to require users to specify a start date.
137
- * @deprecated Use the `required` directive or Angular's `Validators.required`
138
- * on the form control to mark the date range picker as required.
139
- */
140
- this.startDateRequired = false;
128
+ this.calculatorIdHasErrors = false;
141
129
  this.calculators = [];
142
- this.hasErrors = false;
130
+ this.endDateHasErrors = false;
143
131
  this.showEndDatePicker = false;
144
132
  this.showStartDatePicker = false;
133
+ this.startDateHasErrors = false;
145
134
  this.#_calculatorIds = SKY_DEFAULT_CALCULATOR_IDS;
146
135
  this.#ngUnsubscribe = new Subject();
147
136
  this.#changeDetector = inject(ChangeDetectorRef);
148
137
  this.#dateRangeSvc = inject(SkyDateRangeService);
149
138
  this.#injector = inject(Injector);
150
- this.#labelTextRequiredSvc = inject(SkyFormFieldLabelTextRequiredService, {
151
- optional: true,
152
- });
153
139
  this.#logger = inject(SkyLogService);
154
140
  this.calculators = this.#dateRangeSvc.calculators;
155
141
  this.selectedCalculator = this.calculators[0];
@@ -161,14 +147,6 @@ export class SkyDateRangePickerComponent {
161
147
  endDate: new FormControl(initialValue.endDate),
162
148
  });
163
149
  }
164
- ngOnInit() {
165
- if (this.#labelTextRequiredSvc) {
166
- this.#labelTextRequiredSvc.validateLabelText(this.labelText || this.label);
167
- if (!this.label && !this.labelText) {
168
- this.display = 'none';
169
- }
170
- }
171
- }
172
150
  ngAfterViewInit() {
173
151
  this.hostControl = this.#injector.get(NgControl, null, {
174
152
  optional: true,
@@ -232,6 +210,11 @@ export class SkyDateRangePickerComponent {
232
210
  });
233
211
  });
234
212
  });
213
+ this.hostControl?.events
214
+ .pipe(filter((event) => event instanceof TouchedChangeEvent), takeUntil(this.#ngUnsubscribe))
215
+ .subscribe(() => {
216
+ this.formGroup.markAllAsTouched();
217
+ });
235
218
  this.#updatePickerVisibility(this.selectedCalculator);
236
219
  }
237
220
  /**
@@ -243,19 +226,20 @@ export class SkyDateRangePickerComponent {
243
226
  */
244
227
  ngDoCheck() {
245
228
  const control = this.hostControl;
246
- const touched = this.formGroup.touched;
247
229
  if (control) {
248
- if (control.touched && !touched) {
249
- this.formGroup.markAllAsTouched();
250
- this.#changeDetector.markForCheck();
251
- }
252
- else if (control.untouched && touched) {
253
- this.formGroup.markAsUntouched();
254
- this.#changeDetector.markForCheck();
255
- }
256
- this.hasErrors = !!control.errors && (control.touched || control.dirty);
230
+ this.startDateHasErrors =
231
+ this.#controlHasErrors(this.#startDateControl) ||
232
+ this.#controlHasErrors(this.#calculatorIdControl);
233
+ this.endDateHasErrors =
234
+ this.#controlHasErrors(this.#endDateControl) ||
235
+ this.#controlHasErrors(this.#calculatorIdControl);
236
+ this.calculatorIdHasErrors = this.#controlHasErrors(this.#calculatorIdControl);
237
+ this.#changeDetector.markForCheck();
257
238
  }
258
239
  }
240
+ #controlHasErrors(control) {
241
+ return !!control.errors && (control.touched || control.dirty);
242
+ }
259
243
  ngOnDestroy() {
260
244
  this.#ngUnsubscribe.next();
261
245
  this.#ngUnsubscribe.complete();
@@ -286,6 +270,8 @@ export class SkyDateRangePickerComponent {
286
270
  },
287
271
  };
288
272
  }
273
+ // Set calculator errors on the select so that they appear beneath it.
274
+ this.#calculatorIdControl.setErrors(errors);
289
275
  if (this.showStartDatePicker && startDateErrors) {
290
276
  errors ||= {};
291
277
  errors = { ...errors, ...startDateErrors };
@@ -294,8 +280,6 @@ export class SkyDateRangePickerComponent {
294
280
  errors ||= {};
295
281
  errors = { ...errors, ...endDateErrors };
296
282
  }
297
- // Set errors on the calculator select so that they appear beneath it.
298
- this.#calculatorIdControl.setErrors(errors);
299
283
  this.#changeDetector.markForCheck();
300
284
  return errors;
301
285
  }
@@ -385,8 +369,8 @@ export class SkyDateRangePickerComponent {
385
369
  this.showStartDatePicker = showStartDatePicker;
386
370
  this.#changeDetector.markForCheck();
387
371
  }
388
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
389
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.2", type: SkyDateRangePickerComponent, isStandalone: true, selector: "sky-date-range-picker", inputs: { calculatorIds: "calculatorIds", dateFormat: "dateFormat", disabled: ["disabled", "disabled", booleanAttribute], endDateRequired: ["endDateRequired", "endDateRequired", booleanAttribute], helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", hintText: "hintText", label: "label", labelText: "labelText", required: ["required", "required", booleanAttribute], stacked: ["stacked", "stacked", booleanAttribute], startDateRequired: ["startDateRequired", "startDateRequired", booleanAttribute], helpKey: "helpKey" }, host: { properties: { "class.sky-margin-stacked-lg": "this.stacked", "style.display": "this.display" } }, providers: [
372
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
373
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: SkyDateRangePickerComponent, isStandalone: true, selector: "sky-date-range-picker", inputs: { calculatorIds: "calculatorIds", dateFormat: "dateFormat", disabled: ["disabled", "disabled", booleanAttribute], helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", hintText: "hintText", label: "label", labelText: "labelText", required: ["required", "required", booleanAttribute], stacked: ["stacked", "stacked", booleanAttribute], helpKey: "helpKey" }, host: { properties: { "class.sky-margin-stacked-lg": "this.stacked" } }, providers: [
390
374
  {
391
375
  provide: NG_VALIDATORS,
392
376
  useExisting: SkyDateRangePickerComponent,
@@ -398,9 +382,9 @@ export class SkyDateRangePickerComponent {
398
382
  multi: true,
399
383
  },
400
384
  { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
401
- ], ngImport: i0, template: "<div\n class=\"sky-date-range-picker\"\n [formGroup]=\"formGroup\"\n (focusout)=\"onBlur()\"\n>\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"hasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select\n formControlName=\"calculatorId\"\n [required]=\"isRequired()\"\n (blur)=\"onBlur()\"\n >\n <option\n *ngFor=\"let calculator of calculators\"\n [value]=\"calculator.calculatorId\"\n >\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n </select>\n </sky-input-box>\n <sky-form-errors\n *ngIf=\"labelText && hostControl?.errors?.['skyDateRange']\"\n [labelText]=\"labelText\"\n >\n <sky-form-error\n *ngIf=\"\n hostControl?.errors?.['skyDateRange']?.errors.endDateBeforeStartDate\n \"\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n <ng-content select=\"sky-form-error\" />\n </sky-form-errors>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"\n showStartDatePicker && (startDateRequired || isRequired())\n \"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && (endDateRequired || isRequired())\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SkyDatepickerModule }, { kind: "component", type: i3.SkyDatepickerComponent, selector: "sky-datepicker", inputs: ["pickerClass"], outputs: ["calendarDateRangeChange", "dateFormatChange", "openChange"] }, { kind: "directive", type: i4.SkyDatepickerInputDirective, selector: "[skyDatepickerInput]", inputs: ["dateFormat", "disabled", "maxDate", "minDate", "startAtDate", "skyDatepickerInput", "skyDatepickerNoValidate", "startingDay", "strict"] }, { kind: "pipe", type: SkyDateRangePickerEndDateResourceKeyPipe, name: "skyDateRangePickerEndDateResourceKey" }, { kind: "pipe", type: SkyDateRangePickerStartDateResourceKeyPipe, name: "skyDateRangePickerStartDateResourceKey" }, { kind: "ngmodule", type: SkyDatetimeResourcesModule }, { kind: "pipe", type: i5.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyInputBoxModule }, { kind: "component", type: i6.λ10, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText", "errorsScreenReaderOnly"] }, { kind: "directive", type: i6.λ20, selector: "input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)", inputs: ["autocomplete"] }, { kind: "component", type: i6.λ22, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "ngmodule", type: SkyFormErrorsModule }, { kind: "component", type: i6.λ21, selector: "sky-form-errors", inputs: ["errors", "labelText", "showErrors"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
385
+ ], ngImport: i0, template: "<div class=\"sky-date-range-picker\" [formGroup]=\"formGroup\">\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"calculatorIdHasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select formControlName=\"calculatorId\" (blur)=\"onBlur()\">\n @for (calculator of calculators; track calculator) {\n <option [value]=\"calculator.calculatorId\">\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n }\n </select>\n @if (\n hostControl?.errors?.['skyDateRange']?.errors?.[\n 'endDateBeforeStartDate'\n ] && labelText\n ) {\n <sky-form-error\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n }\n <ng-content select=\"sky-form-error\" />\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"startDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showStartDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [hasErrors]=\"endDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SkyDatepickerModule }, { kind: "component", type: i3.SkyDatepickerComponent, selector: "sky-datepicker", inputs: ["pickerClass"], outputs: ["calendarDateRangeChange", "dateFormatChange", "openChange"] }, { kind: "directive", type: i4.SkyDatepickerInputDirective, selector: "[skyDatepickerInput]", inputs: ["dateFormat", "disabled", "maxDate", "minDate", "startAtDate", "skyDatepickerInput", "skyDatepickerNoValidate", "startingDay", "strict"] }, { kind: "pipe", type: SkyDateRangePickerEndDateResourceKeyPipe, name: "skyDateRangePickerEndDateResourceKey" }, { kind: "pipe", type: SkyDateRangePickerStartDateResourceKeyPipe, name: "skyDateRangePickerStartDateResourceKey" }, { kind: "ngmodule", type: SkyDatetimeResourcesModule }, { kind: "pipe", type: i5.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyInputBoxModule }, { kind: "component", type: i6.λ10, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText"] }, { kind: "directive", type: i6.λ20, selector: "input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)", inputs: ["autocomplete"] }, { kind: "component", type: i6.λ22, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "ngmodule", type: SkyFormErrorsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
402
386
  }
403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangePickerComponent, decorators: [{
387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerComponent, decorators: [{
404
388
  type: Component,
405
389
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [
406
390
  CommonModule,
@@ -424,7 +408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
424
408
  multi: true,
425
409
  },
426
410
  { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
427
- ], selector: 'sky-date-range-picker', standalone: true, template: "<div\n class=\"sky-date-range-picker\"\n [formGroup]=\"formGroup\"\n (focusout)=\"onBlur()\"\n>\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"hasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select\n formControlName=\"calculatorId\"\n [required]=\"isRequired()\"\n (blur)=\"onBlur()\"\n >\n <option\n *ngFor=\"let calculator of calculators\"\n [value]=\"calculator.calculatorId\"\n >\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n </select>\n </sky-input-box>\n <sky-form-errors\n *ngIf=\"labelText && hostControl?.errors?.['skyDateRange']\"\n [labelText]=\"labelText\"\n >\n <sky-form-error\n *ngIf=\"\n hostControl?.errors?.['skyDateRange']?.errors.endDateBeforeStartDate\n \"\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n <ng-content select=\"sky-form-error\" />\n </sky-form-errors>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"\n showStartDatePicker && (startDateRequired || isRequired())\n \"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [errorsScreenReaderOnly]=\"true\"\n [hasErrors]=\"hasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && (endDateRequired || isRequired())\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"] }]
411
+ ], selector: 'sky-date-range-picker', standalone: true, template: "<div class=\"sky-date-range-picker\" [formGroup]=\"formGroup\">\n <div\n class=\"sky-date-range-picker-form-group\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n !showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"calculatorIdHasErrors\"\n [helpKey]=\"helpKey\"\n [helpPopoverContent]=\"helpPopoverContent\"\n [helpPopoverTitle]=\"helpPopoverTitle\"\n [hintText]=\"hintText\"\n [labelText]=\"\n labelText ||\n label ||\n ('skyux_date_range_picker_default_label' | skyLibResources)\n \"\n >\n <select formControlName=\"calculatorId\" (blur)=\"onBlur()\">\n @for (calculator of calculators; track calculator) {\n <option [value]=\"calculator.calculatorId\">\n {{\n calculator._shortDescriptionResourceKey\n ? (calculator._shortDescriptionResourceKey | skyLibResources)\n : calculator.shortDescription\n }}\n </option>\n }\n </select>\n @if (\n hostControl?.errors?.['skyDateRange']?.errors?.[\n 'endDateBeforeStartDate'\n ] && labelText\n ) {\n <sky-form-error\n [errorName]=\"'endDateBeforeStartDate'\"\n [errorText]=\"\n 'skyux_date_range_picker_end_date_before_start_date_error_label_text'\n | skyLibResources\n \"\n />\n }\n <ng-content select=\"sky-form-error\" />\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showStartDatePicker\"\n [ngClass]=\"{\n 'sky-date-range-picker-last-input':\n showStartDatePicker && !showEndDatePicker\n }\"\n >\n <sky-input-box\n [hasErrors]=\"startDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"startDate\"\n name=\"startDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerStartDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showStartDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n <div\n class=\"sky-date-range-picker-form-group sky-date-range-datepicker-wrapper\"\n [hidden]=\"!showEndDatePicker\"\n [ngClass]=\"{ 'sky-date-range-picker-last-input': showEndDatePicker }\"\n >\n <sky-input-box\n [hasErrors]=\"endDateHasErrors\"\n [labelText]=\"\n selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources\n \"\n >\n <sky-datepicker>\n <input\n formControlName=\"endDate\"\n name=\"endDate\"\n skyDatepickerInput\n type=\"text\"\n [attr.aria-label]=\"\n labelText || label\n ? ('skyux_date_range_picker_default_aria_label'\n | skyLibResources\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n : (labelText ? labelText : label))\n : (selectedCalculator.type\n | skyDateRangePickerEndDateResourceKey\n | skyLibResources)\n \"\n [dateFormat]=\"dateFormat\"\n [required]=\"showEndDatePicker && isRequired()\"\n />\n </sky-datepicker>\n </sky-input-box>\n </div>\n</div>\n", styles: [":host{display:block}.sky-date-range-picker{display:flex}:host .sky-date-range-picker{flex-direction:column}:host .sky-date-range-picker-form-group{flex-basis:100%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}:host-context(.sky-responsive-container-xs) .sky-date-range-picker,:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:column}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:initial}:host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:var(--sky-margin-stacked-lg)}@media (min-width: 768px){:host .sky-date-range-picker{flex-direction:initial}:host .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}}:host-context(.sky-responsive-container-sm) .sky-date-range-picker,:host-context(.sky-responsive-container-md) .sky-date-range-picker,:host-context(.sky-responsive-container-lg) .sky-date-range-picker{flex-direction:initial}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group,:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group{flex-basis:33.3333333333%}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:first-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:first-of-type){padding-left:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(:last-of-type){padding-right:5px}:host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-bottom:0}@media (min-width: 768px){:host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}}.sky-responsive-container-sm :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-md :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group,.sky-responsive-container-lg :host-context(sky-filter-inline-item) .sky-date-range-picker-form-group{flex-basis:100%}:host-context(.sky-theme-modern) .sky-date-range-picker-form-group{padding:0}:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}.sky-theme-modern .sky-date-range-picker-form-group{padding:0}.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}.sky-theme-modern :host-context(.sky-responsive-container-xs) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:0}@media (min-width: 768px){.sky-theme-modern :host .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input),.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-date-range-picker-form-group:not(.sky-date-range-picker-last-input){margin-right:20px}\n"] }]
428
412
  }], ctorParameters: () => [], propDecorators: { calculatorIds: [{
429
413
  type: Input
430
414
  }], dateFormat: [{
@@ -432,9 +416,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
432
416
  }], disabled: [{
433
417
  type: Input,
434
418
  args: [{ transform: booleanAttribute }]
435
- }], endDateRequired: [{
436
- type: Input,
437
- args: [{ transform: booleanAttribute }]
438
419
  }], helpPopoverContent: [{
439
420
  type: Input
440
421
  }], helpPopoverTitle: [{
@@ -454,13 +435,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
454
435
  }, {
455
436
  type: HostBinding,
456
437
  args: ['class.sky-margin-stacked-lg']
457
- }], startDateRequired: [{
458
- type: Input,
459
- args: [{ transform: booleanAttribute }]
460
438
  }], helpKey: [{
461
439
  type: Input
462
- }], display: [{
463
- type: HostBinding,
464
- args: ['style.display']
465
440
  }] } });
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixLQUFLLEVBSUwsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsRUFFWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsbUJBQW1CLEVBR25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsb0NBQW9DLEVBQ3BDLGlCQUFpQixHQUNsQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUNBQXlD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aUJBQWlCO3dCQUNqQixtQkFBbUI7cUJBQ3BCLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsNkJBQTZCOzRCQUN4QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLDZCQUE2Qjs0QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0QsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtxQkFDckQsWUFDUyx1QkFBdUIsY0FDckIsSUFBSTt3REFtQkwsYUFBYTtzQkFEdkIsS0FBSztnQkFpQ0MsVUFBVTtzQkFEaEIsS0FBSztnQkFXSyxRQUFRO3NCQURsQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWUvQixlQUFlO3NCQURyQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVMvQixrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBUUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVFDLFFBQVE7c0JBRGQsS0FBSztnQkFRSyxLQUFLO3NCQURmLEtBQUs7Z0JBb0JDLFNBQVM7c0JBRGYsS0FBSztnQkFPQyxRQUFRO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUy9CLE9BQU87c0JBRmIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTs7c0JBQ3JDLFdBQVc7dUJBQUMsNkJBQTZCO2dCQVNuQyxpQkFBaUI7c0JBRHZCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUy9CLE9BQU87c0JBRGIsS0FBSztnQkFJSSxPQUFPO3NCQURoQixXQUFXO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5nQ29udHJvbCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lMb2dTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHtcbiAgU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsXG4gIFNreUZvcm1FcnJvcnNNb2R1bGUsXG4gIFNreUZvcm1GaWVsZExhYmVsVGV4dFJlcXVpcmVkU2VydmljZSxcbiAgU2t5SW5wdXRCb3hNb2R1bGUsXG59IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5cbmltcG9ydCB7IFN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtZXJnZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreURhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICcuLi9kYXRlcGlja2VyL2RhdGVwaWNrZXIubW9kdWxlJztcbmltcG9ydCB7IFNreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1kYXRldGltZS1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5UGlwZSB9IGZyb20gJy4vZGF0ZS1yYW5nZS1waWNrZXItZW5kLWRhdGUtcmVzb3VyY2Uta2V5LnBpcGUnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlQaXBlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLXBpY2tlci1zdGFydC1kYXRlLXJlc291cmNlLWtleS5waXBlJztcbmltcG9ydCB7IFNreURhdGVSYW5nZVNlcnZpY2UgfSBmcm9tICcuL2RhdGUtcmFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbiB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdGlvbic7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3InO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItaWQnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvclR5cGUgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci10eXBlJztcbmltcG9ydCB7IFNLWV9ERUZBVUxUX0NBTENVTEFUT1JfSURTIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWRlZmF1bHQtY2FsY3VsYXRvci1jb25maWdzJztcblxudHlwZSBEYXRlVmFsdWUgPSBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gYXJlRGF0ZVJhbmdlc0VxdWFsKFxuICByYW5nZUE6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHwgdW5kZWZpbmVkLFxuICByYW5nZUI6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHwgdW5kZWZpbmVkLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgISFyYW5nZUEgJiZcbiAgICAhIXJhbmdlQiAmJlxuICAgIHJhbmdlQS5jYWxjdWxhdG9ySWQgPT09IHJhbmdlQi5jYWxjdWxhdG9ySWQgJiZcbiAgICBhcmVEYXRlc0VxdWFsKHJhbmdlQS5zdGFydERhdGUsIHJhbmdlQi5zdGFydERhdGUpICYmXG4gICAgYXJlRGF0ZXNFcXVhbChyYW5nZUEuZW5kRGF0ZSwgcmFuZ2VCLmVuZERhdGUpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFyZURhdGVzRXF1YWwoYTogRGF0ZVZhbHVlLCBiOiBEYXRlVmFsdWUpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghYSAmJiAhYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJyAmJiBhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUgJiYgYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xufVxuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHVuZGVmaW5lZCB8IG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0aWFsVmFsdWUoXG4gIHZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiB2YWx1ZSBpcyBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IG51bGwgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKFxuICAgIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSB8fFxuICAgIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlLmNhbGN1bGF0b3JJZCkgfHxcbiAgICAhKCdlbmREYXRlJyBpbiB2YWx1ZSkgfHxcbiAgICAhKCdzdGFydERhdGUnIGluIHZhbHVlKVxuICApO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTa3lEYXRlcGlja2VyTW9kdWxlLFxuICAgIFNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVBpcGUsXG4gICAgU2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlQaXBlLFxuICAgIFNreURhdGV0aW1lUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUlucHV0Qm94TW9kdWxlLFxuICAgIFNreUZvcm1FcnJvcnNNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogU2t5RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG4gIHNlbGVjdG9yOiAnc2t5LWRhdGUtcmFuZ2UtcGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc3R5bGVVcmw6ICcuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50XG4gIGltcGxlbWVudHNcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIERvQ2hlY2ssXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIElEcyBmb3IgdGhlIGRhdGUgcmFuZ2Ugb3B0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBwaWNrZXIncyBkcm9wZG93bi5cbiAgICogVGhlIG9wdGlvbnMgc3BlY2lmeSBjYWxjdWxhdG9yIG9iamVjdHMgdGhhdCByZXR1cm4gdHdvIGBEYXRlYCBvYmplY3RzIHRvIHJlcHJlc2VudCBkYXRlIHJhbmdlcy5cbiAgICogQnkgZGVmYXVsdCwgdGhpcyBwcm9wZXJ0eSBpbmNsdWRlcyBhbGwgYFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZGAgdmFsdWVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjYWxjdWxhdG9ySWRzKFxuICAgIGNhbGN1bGF0b3JJZHM6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZFtdIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICBjb25zdCBjdXJyZW50Q2FsY3VsYXRvcklkID0gdGhpcy4jZ2V0VmFsdWUoKS5jYWxjdWxhdG9ySWQ7XG5cbiAgICB0aGlzLiNfY2FsY3VsYXRvcklkcyA9IGNhbGN1bGF0b3JJZHMgPz8gU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9JRFM7XG4gICAgdGhpcy5jYWxjdWxhdG9ycyA9IHRoaXMuI2RhdGVSYW5nZVN2Yy5maWx0ZXJDYWxjdWxhdG9ycyhcbiAgICAgIHRoaXMuI19jYWxjdWxhdG9ySWRzLFxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbGN1bGF0b3IgaXNuJ3QgYXZhaWxhYmxlIGFueW1vcmUsXG4gICAgLy8gc2VsZWN0IHRoZSBmaXJzdCBjYWxjdWxhdG9yIGluIHRoZSBuZXcgYXJyYXkuXG4gICAgaWYgKCF0aGlzLiNfY2FsY3VsYXRvcklkcy5pbmNsdWRlcyhjdXJyZW50Q2FsY3VsYXRvcklkKSkge1xuICAgICAgdGhpcy4jc2V0VmFsdWUoXG4gICAgICAgIHsgY2FsY3VsYXRvcklkOiB0aGlzLmNhbGN1bGF0b3JJZHNbMF0gfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBjYWxjdWxhdG9ySWRzKCk6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZFtdIHtcbiAgICByZXR1cm4gdGhpcy4jX2NhbGN1bGF0b3JJZHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGUgZm9ybWF0IGZvclxuICAgKiBbdGhlIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGVwaWNrZXIpXG4gICAqIHRoYXQgbWFrZSB1cCB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuIFRoZSB0ZXh0IGlucHV0IGlzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBvZlxuICAgKiB1cCB0byB0d28gYHNreS1kYXRlcGlja2VyYCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZVxuICAgKiB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZVxuICAgKiB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy4gVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcyxcbiAgICogdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byByZXF1aXJlIHVzZXJzIHRvIHNwZWNpZnkgYSBlbmQgZGF0ZS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgcmVxdWlyZWRgIGRpcmVjdGl2ZSBvciBBbmd1bGFyJ3MgYFZhbGlkYXRvcnMucmVxdWlyZWRgXG4gICAqIG9uIHRoZSBmb3JtIGNvbnRyb2wgdG8gbWFyayB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgYXMgcmVxdWlyZWQuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGVuZERhdGVSZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgaGVscCBwb3BvdmVyLiBXaGVuIHNwZWNpZmllZCBhbG9uZyB3aXRoIGBsYWJlbFRleHRgLCBhIFtoZWxwIGlubGluZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2hlbHAtaW5saW5lKVxuICAgKiBidXR0b24gaXMgYWRkZWQgdG8gZGF0ZSByYW5nZSBwaWNrZXIuIFRoZSBoZWxwIGlubGluZSBidXR0b24gZGlzcGxheXMgYSBbcG9wb3Zlcl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL3BvcG92ZXIpXG4gICAqIHdoZW4gY2xpY2tlZCB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgYW5kIG9wdGlvbmFsIHRpdGxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBQb3BvdmVyQ29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgaGVscCBwb3BvdmVyLiBUaGlzIHByb3BlcnR5IG9ubHkgYXBwbGllcyB3aGVuIGBoZWxwUG9wb3ZlckNvbnRlbnRgIGlzXG4gICAqIGFsc28gc3BlY2lmaWVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBQb3BvdmVyVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogW1BlcnNpc3RlbnQgaW5saW5lIGhlbHAgdGV4dF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9kZXNpZ24vZ3VpZGVsaW5lcy91c2VyLWFzc2lzdGFuY2UjaW5saW5lLWhlbHApIHRoYXQgcHJvdmlkZXNcbiAgICogYWRkaXRpb25hbCBjb250ZXh0IHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpbnRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBmb3IgdGhlIGRhdGUgcmFuZ2UgcGlja2VyLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBsYWJlbFRleHRgIGlucHV0IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxhYmVsKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbGFiZWwgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy4jbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreURhdGVSYW5nZVBpY2tlckNvbXBvbmVudC5sYWJlbCcsIHtcbiAgICAgICAgZGVwcmVjYXRpb25NYWpvclZlcnNpb246IDEwLFxuICAgICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnVXNlIHRoZSBgbGFiZWxUZXh0YCBpbnB1dCBpbnN0ZWFkLicsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19sYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5IGFzIHRoZSBkYXRlIHJhbmdlIHBpY2tlcidzIGxhYmVsLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGxhYmVsVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkYXRlIHJhbmdlIHBpY2tlciByZXF1aXJlcyBhIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBpcyBzdGFja2VkIG9uIGFub3RoZXIgZm9ybSBjb21wb25lbnQuIFdoZW4gc3BlY2lmaWVkLCB0aGUgYXBwcm9wcmlhdGVcbiAgICogdmVydGljYWwgc3BhY2luZyBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBkYXRlIHJhbmdlIHBpY2tlci5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1tYXJnaW4tc3RhY2tlZC1sZycpXG4gIHB1YmxpYyBzdGFja2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVxdWlyZSB1c2VycyB0byBzcGVjaWZ5IGEgc3RhcnQgZGF0ZS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgcmVxdWlyZWRgIGRpcmVjdGl2ZSBvciBBbmd1bGFyJ3MgYFZhbGlkYXRvcnMucmVxdWlyZWRgXG4gICAqIG9uIHRoZSBmb3JtIGNvbnRyb2wgdG8gbWFyayB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgYXMgcmVxdWlyZWQuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHN0YXJ0RGF0ZVJlcXVpcmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgaGVscCBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSBnbG9iYWwgaGVscCBjb250ZW50IHRvIGRpc3BsYXkuIFdoZW4gc3BlY2lmaWVkLCBhIFtoZWxwIGlubGluZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2hlbHAtaW5saW5lKVxuICAgKiBidXR0b24gaXMgcGxhY2VkIGJlc2lkZSB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgbGFiZWwuIENsaWNraW5nIHRoZSBidXR0b24gaW52b2tlcyBbZ2xvYmFsIGhlbHBdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZGV2ZWxvcC9nbG9iYWwtaGVscClcbiAgICogYXMgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpXG4gIHByb3RlY3RlZCBkaXNwbGF5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0b3JzOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yW10gPSBbXTtcbiAgcHJvdGVjdGVkIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwcm90ZWN0ZWQgaGFzRXJyb3JzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBob3N0Q29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkQ2FsY3VsYXRvcjogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcjtcbiAgcHJvdGVjdGVkIHNob3dFbmREYXRlUGlja2VyID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzaG93U3RhcnREYXRlUGlja2VyID0gZmFsc2U7XG5cbiAgZ2V0ICNjYWxjdWxhdG9ySWRDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQ+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KFxuICAgICAgJ2NhbGN1bGF0b3JJZCcsXG4gICAgKSBhcyBBYnN0cmFjdENvbnRyb2w8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkPjtcbiAgfVxuXG4gIGdldCAjZW5kRGF0ZUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ2VuZERhdGUnKSBhcyBBYnN0cmFjdENvbnRyb2w8RGF0ZVZhbHVlPjtcbiAgfVxuXG4gIGdldCAjc3RhcnREYXRlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8RGF0ZVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnc3RhcnREYXRlJykgYXMgQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT47XG4gIH1cblxuICAjX2NhbGN1bGF0b3JJZHMgPSBTS1lfREVGQVVMVF9DQUxDVUxBVE9SX0lEUztcbiAgI19sYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAjX3ZhbHVlOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbjtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjbm90aWZ5Q2hhbmdlOiAoKF86IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgI25vdGlmeVRvdWNoZWQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICByZWFkb25seSAjY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICByZWFkb25seSAjZGF0ZVJhbmdlU3ZjID0gaW5qZWN0KFNreURhdGVSYW5nZVNlcnZpY2UpO1xuICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICByZWFkb25seSAjbGFiZWxUZXh0UmVxdWlyZWRTdmMgPSBpbmplY3QoXG4gICAgU2t5Rm9ybUZpZWxkTGFiZWxUZXh0UmVxdWlyZWRTZXJ2aWNlLFxuICAgIHtcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0sXG4gICk7XG4gIHJlYWRvbmx5ICNsb2dnZXIgPSBpbmplY3QoU2t5TG9nU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jYWxjdWxhdG9ycyA9IHRoaXMuI2RhdGVSYW5nZVN2Yy5jYWxjdWxhdG9ycztcbiAgICB0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvciA9IHRoaXMuY2FsY3VsYXRvcnNbMF07XG5cbiAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLiNnZXREZWZhdWx0VmFsdWUodGhpcy5zZWxlY3RlZENhbGN1bGF0b3IpO1xuICAgIHRoaXMuI192YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gaW5qZWN0KEZvcm1CdWlsZGVyKS5ncm91cCh7XG4gICAgICBjYWxjdWxhdG9ySWQ6IG5ldyBGb3JtQ29udHJvbDxudW1iZXI+KGluaXRpYWxWYWx1ZS5jYWxjdWxhdG9ySWQpLFxuICAgICAgc3RhcnREYXRlOiBuZXcgRm9ybUNvbnRyb2w8RGF0ZVZhbHVlPihpbml0aWFsVmFsdWUuc3RhcnREYXRlKSxcbiAgICAgIGVuZERhdGU6IG5ldyBGb3JtQ29udHJvbDxEYXRlVmFsdWU+KGluaXRpYWxWYWx1ZS5lbmREYXRlKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbGFiZWxUZXh0UmVxdWlyZWRTdmMpIHtcbiAgICAgIHRoaXMuI2xhYmVsVGV4dFJlcXVpcmVkU3ZjLnZhbGlkYXRlTGFiZWxUZXh0KFxuICAgICAgICB0aGlzLmxhYmVsVGV4dCB8fCB0aGlzLmxhYmVsLFxuICAgICAgKTtcblxuICAgICAgaWYgKCF0aGlzLmxhYmVsICYmICF0aGlzLmxhYmVsVGV4dCkge1xuICAgICAgICB0aGlzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhvc3RDb250cm9sID0gdGhpcy4jaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICBzZWxmOiB0cnVlLFxuICAgIH0pPy5jb250cm9sO1xuXG4gICAgLy8gU2V0IGEgZGVmYXVsdCB2YWx1ZSBvbiB0aGUgY29udHJvbCBpZiBpdCdzIHVuZGVmaW5lZCBvbiBpbml0LlxuICAgIC8vIFdlIG5lZWQgdG8gdXNlIHNldFRpbWVvdXQgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgZmlyc3RcbiAgICAvLyB2YWxpZGF0aW9uIGN5Y2xlLlxuICAgIGlmIChpc1BhcnRpYWxWYWx1ZSh0aGlzLmhvc3RDb250cm9sPy52YWx1ZSkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhvc3RDb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNnZXRWYWx1ZSgpLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHZpZXcgd2hlbiBcInJlcXVpcmVkXCIgb3IgXCJkaXNhYmxlZFwiIHN0YXRlcyBhcmUgY2hhbmdlZCBvbiB0aGVcbiAgICAvLyBob3N0IGNvbnRyb2wuXG4gICAgdGhpcy5ob3N0Q29udHJvbD8uc3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGNoYW5nZXMgYWZ0ZXIgdGhlIGZpcnN0IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoYXJlRGF0ZVJhbmdlc0VxdWFsKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlPy5jYWxjdWxhdG9ySWQpKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2VsZWN0IGVsZW1lbnQgc2V0cyB0aGUgY2FsY3VsYXRvciBJRCB0byBhIHN0cmluZywgYnV0IHdlXG4gICAgICAgICAgICAvLyBuZWVkIGl0IHRvIGJlIGEgbnVtYmVyLlxuICAgICAgICAgICAgdmFsdWUuY2FsY3VsYXRvcklkID0gK3ZhbHVlLmNhbGN1bGF0b3JJZDtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGN1bGF0b3IgSUQgaXMgY2hhbmdlZCwgd2UgbmVlZCB0byByZXNldCB0aGUgc3RhcnQgYW5kXG4gICAgICAgICAgICAvLyBlbmQgZGF0ZSB2YWx1ZXMgYW5kIHdhaXQgdW50aWwgdGhlIG5leHQgdmFsdWVDaGFuZ2VzIGV2ZW50IHRvXG4gICAgICAgICAgICAvLyBub3RpZnkgdGhlIGhvc3QgY29udHJvbC5cbiAgICAgICAgICAgIGlmICh2YWx1ZS5jYWxjdWxhdG9ySWQgIT09IHRoaXMuI2dldFZhbHVlKCkuY2FsY3VsYXRvcklkKSB7XG4gICAgICAgICAgICAgIHRoaXMuI3NldFZhbHVlKFxuICAgICAgICAgICAgICAgIHsgY2FsY3VsYXRvcklkOiB2YWx1ZS5jYWxjdWxhdG9ySWQgfSxcbiAgICAgICAgICAgICAgICB7IGVtaXRFdmVudDogdHJ1ZSB9LFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy4jZ2V0VmFsdWUoKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgaG9zdCBjb250cm9sIGlmIHRoZSB2YWx1ZSBpcyBkaWZmZXJlbnQuXG4gICAgICAgICAgaWYgKCFhcmVEYXRlUmFuZ2VzRXF1YWwodGhpcy5ob3N0Q29udHJvbD8udmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy4jbm90aWZ5Q2hhbmdlPy4obmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgZGF0ZXBpY2tlcnMnIHN0YXR1c2VzIGNoYW5nZSwgd2Ugd2FudCB0byByZXRyaWdnZXIgdGhlIGhvc3RcbiAgICAvLyBjb250cm9sJ3MgdmFsaWRhdGlvbiBzbyB0aGF0IHRoZWlyIGVycm9ycyBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlIGhvc3QuXG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLiNzdGFydERhdGVDb250cm9sLnN0YXR1c0NoYW5nZXMsXG4gICAgICB0aGlzLiNlbmREYXRlQ29udHJvbC5zdGF0dXNDaGFuZ2VzLFxuICAgIClcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBVc2UgYSBzZXRUaW1lb3V0IHRvIGF2b2lkIGFuIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJDaGVja2VkIGVycm9yLFxuICAgICAgICAvLyBzaW5jZSBtdWx0aXBsZSBjYWxscyB0byB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5IGluIHRoZSBzYW1lXG4gICAgICAgIC8vIGN5Y2xlIG1heSBjb2xsaWRlIHdpdGggb25lIGFub3RoZXIuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlTZWxmOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jdXBkYXRlUGlja2VyVmlzaWJpbGl0eSh0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvcik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIHRvdWNoZWQgc3RhdHVzIGluIG5nRG9DaGVjayBzaW5jZSBBbmd1bGFyIGRvZXMgbm90IChjdXJyZW50bHkpXG4gICAqIGhhdmUgYW4gQVBJIHRvIHJlc3BvbmQgdG8gdG91Y2hlZCBzdGF0dXMgY2hhbmdlcyBmcm9tIHRoZSBob3N0IGNvbnRyb2wuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTc3MzYjaXNzdWVjb21tZW50LTMxMDgxMjM2OFxuICAgKiBUT0RPOiBBbmd1bGFyIDE4IGludHJvZHVjZXMgYSBuZXcgQVBJIHRvIHJlc3BvbmQgdG8gdGhlc2Ugc3RhdHVzZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTA4ODcjaXNzdWVjb21tZW50LTIwMzUyNjc0MDBcbiAgICovXG4gIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuaG9zdENvbnRyb2w7XG4gICAgY29uc3QgdG91Y2hlZCA9IHRoaXMuZm9ybUdyb3VwLnRvdWNoZWQ7XG5cbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgaWYgKGNvbnRyb2wudG91Y2hlZCAmJiAhdG91Y2hlZCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sLnVudG91Y2hlZCAmJiB0b3VjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYXNFcnJvcnMgPSAhIWNvbnRyb2wuZXJyb3JzICYmIChjb250cm9sLnRvdWNoZWQgfHwgY29udHJvbC5kaXJ0eSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI25vdGlmeUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jbm90aWZ5VG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBWYWxpZGF0b3IuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3QgY2FsY3VsYXRvckVycm9ycyA9IHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yLnZhbGlkYXRlKGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUVycm9ycyA9IHRoaXMuI3N0YXJ0RGF0ZUNvbnRyb2wuZXJyb3JzO1xuICAgIGNvbnN0IGVuZERhdGVFcnJvcnMgPSB0aGlzLiNlbmREYXRlQ29udHJvbC5lcnJvcnM7XG5cbiAgICBpZiAoY2FsY3VsYXRvckVycm9ycykge1xuICAgICAgZXJyb3JzID0ge1xuICAgICAgICBza3lEYXRlUmFuZ2U6IHtcbiAgICAgICAgICBjYWxjdWxhdG9ySWQ6IHRoaXMuI2dldFZhbHVlKCkuY2FsY3VsYXRvcklkLFxuICAgICAgICAgIGVycm9yczogY2FsY3VsYXRvckVycm9ycyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd1N0YXJ0RGF0ZVBpY2tlciAmJiBzdGFydERhdGVFcnJvcnMpIHtcbiAgICAgIGVycm9ycyB8fD0ge307XG4gICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4uc3RhcnREYXRlRXJyb3JzIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd0VuZERhdGVQaWNrZXIgJiYgZW5kRGF0ZUVycm9ycykge1xuICAgICAgZXJyb3JzIHx8PSB7fTtcbiAgICAgIGVycm9ycyA9IHsgLi4uZXJyb3JzLCAuLi5lbmREYXRlRXJyb3JzIH07XG4gICAgfVxuXG4gICAgLy8gU2V0IGVycm9ycyBvbiB0aGUgY2FsY3VsYXRvciBzZWxlY3Qgc28gdGhhdCB0aGV5IGFwcGVhciBiZW5lYXRoIGl0LlxuICAgIHRoaXMuI2NhbGN1bGF0b3JJZENvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgLy8gVGhlIGRhdGUgcmFuZ2UgcGlja2VyIGFsd2F5cyBoYXMgYSB2YWx1ZSwgc28gaWYgdGhlIGNvbnN1bWVyIHBhc3NlcyBpbiBhXG4gIC8vIHBhcnRpYWwgdmFsdWUgKHZpYSBgcGF0Y2hWYWx1ZWApIG9yIG51bGwsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBob3N0IGNvbnRyb2wnc1xuICAvLyB2YWx1ZSB3aXRoIHRoZSBjb21wbGV0ZSB2YWx1ZSBhZnRlciBpdCdzIGJlZW4gbW9kaWZpZWQuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuI3BhdGNoVmFsdWUodmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBob3N0IGNvbnRyb2wgaWYgaXQgaXMgc2V0IHRvIGEgcGFydGlhbCBvciBudWxsIHZhbHVlLlxuICAgIGlmIChpc1BhcnRpYWxWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnNldFZhbHVlKHRoaXMuI2dldFZhbHVlKCksIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLnJlcXVpcmVkIHx8IHRoaXMuaG9zdENvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuI25vdGlmeVRvdWNoZWQ/LigpO1xuICB9XG5cbiAgI2dldENhbGN1bGF0b3IoY2FsY3VsYXRvcklkOiBudW1iZXIpOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yIHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMuY2FsY3VsYXRvcnMuZmluZCgoYykgPT4gYy5jYWxjdWxhdG9ySWQgPT09IGNhbGN1bGF0b3JJZCk7XG5cbiAgICAvKnNhZmV0eSBjaGVjazogc2hvdWxkIG5vdCBoYXBwZW4qL1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGlmKi9cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBIGRhdGUgcmFuZ2UgY2FsY3VsYXRvciB3aXRoIElEICgke2NhbGN1bGF0b3JJZH0pIGNvdWxkIG5vdCBiZSBmb3VuZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICAjZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNhbGN1bGF0b3I6IFNreURhdGVSYW5nZUNhbGN1bGF0b3IsXG4gICk6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHtcbiAgICByZXR1cm4gY2FsY3VsYXRvci5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgI2dldFZhbHVlKCk6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgI3BhdGNoVmFsdWUoXG4gICAgcGFydGlhbFZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuI3NldFZhbHVlKFxuICAgICAgaXNOdWxsT3JVbmRlZmluZWQocGFydGlhbFZhbHVlKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB7IC4uLnRoaXMuI2dldFZhbHVlKCksIC4uLnBhcnRpYWxWYWx1ZSB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIHRvIGJlIHVzZWQgYnkgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGZvcm0gY29udHJvbC5cbiAgICovXG4gICNzZXRWYWx1ZShcbiAgICB2YWx1ZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IHsgZW1pdEV2ZW50OiBib29sZWFuIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy4jZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IHZhbHVlT3JEZWZhdWx0ID1cbiAgICAgICF2YWx1ZSB8fCBpc051bGxPclVuZGVmaW5lZCh2YWx1ZS5jYWxjdWxhdG9ySWQpXG4gICAgICAgID8gdGhpcy4jZ2V0RGVmYXVsdFZhbHVlKHRoaXMuY2FsY3VsYXRvcnNbMF0pXG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4udGhpcy4jZ2V0RGVmYXVsdFZhbHVlKHRoaXMuI2dldENhbGN1bGF0b3IodmFsdWUuY2FsY3VsYXRvcklkKSksXG4gICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICB9O1xuXG4gICAgLy8gRW5zdXJlIGZhbHN5IHZhbHVlcyBhcmUgc2V0IHRvIG51bGwuXG4gICAgdmFsdWVPckRlZmF1bHQuZW5kRGF0ZSA9IHZhbHVlT3JEZWZhdWx0LmVuZERhdGUgfHwgbnVsbDtcbiAgICB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgPSB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgfHwgbnVsbDtcblxuICAgIGlmICghYXJlRGF0ZVJhbmdlc0VxdWFsKG9sZFZhbHVlLCB2YWx1ZU9yRGVmYXVsdCkpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlT3JEZWZhdWx0O1xuXG4gICAgICB0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvciA9IHRoaXMuI2dldENhbGN1bGF0b3IoXG4gICAgICAgIHZhbHVlT3JEZWZhdWx0LmNhbGN1bGF0b3JJZCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChvbGRWYWx1ZS5jYWxjdWxhdG9ySWQgIT09IHZhbHVlT3JEZWZhdWx0LmNhbGN1bGF0b3JJZCkge1xuICAgICAgICB0aGlzLiN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlT3JEZWZhdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdXBkYXRlUGlja2VyVmlzaWJpbGl0eShjYWxjdWxhdG9yOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yKTogdm9pZCB7XG4gICAgbGV0IHNob3dFbmREYXRlUGlja2VyID0gZmFsc2U7XG4gICAgbGV0IHNob3dTdGFydERhdGVQaWNrZXIgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAoY2FsY3VsYXRvci50eXBlKSB7XG4gICAgICBjYXNlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLkJlZm9yZTpcbiAgICAgICAgc2hvd0VuZERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5BZnRlcjpcbiAgICAgICAgc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJhbmdlOlxuICAgICAgICBzaG93RW5kRGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIHNob3dTdGFydERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RW5kRGF0ZVBpY2tlciA9IHNob3dFbmREYXRlUGlja2VyO1xuICAgIHRoaXMuc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IHNob3dTdGFydERhdGVQaWNrZXI7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXJcIlxuICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gIChmb2N1c291dCk9XCJvbkJsdXIoKVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1kYXRlLXJhbmdlLXBpY2tlci1mb3JtLWdyb3VwXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWRhdGUtcmFuZ2UtcGlja2VyLWxhc3QtaW5wdXQnOlxuICAgICAgICAhc2hvd1N0YXJ0RGF0ZVBpY2tlciAmJiAhc2hvd0VuZERhdGVQaWNrZXJcbiAgICB9XCJcbiAgPlxuICAgIDxza3ktaW5wdXQtYm94XG4gICAgICBbaGFzRXJyb3JzXT1cImhhc0Vycm9yc1wiXG4gICAgICBbaGVscEtleV09XCJoZWxwS2V5XCJcbiAgICAgIFtoZWxwUG9wb3ZlckNvbnRlbnRdPVwiaGVscFBvcG92ZXJDb250ZW50XCJcbiAgICAgIFtoZWxwUG9wb3ZlclRpdGxlXT1cImhlbHBQb3BvdmVyVGl0bGVcIlxuICAgICAgW2hpbnRUZXh0XT1cImhpbnRUZXh0XCJcbiAgICAgIFtsYWJlbFRleHRdPVwiXG4gICAgICAgIGxhYmVsVGV4dCB8fFxuICAgICAgICBsYWJlbCB8fFxuICAgICAgICAoJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2RlZmF1bHRfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8c2VsZWN0XG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNhbGN1bGF0b3JJZFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkKClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICA+XG4gICAgICAgIDxvcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY2FsY3VsYXRvciBvZiBjYWxjdWxhdG9yc1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImNhbGN1bGF0b3IuY2FsY3VsYXRvcklkXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICBjYWxjdWxhdG9yLl9zaG9ydERlc2NyaXB0aW9uUmVzb3VyY2VLZXlcbiAgICAgICAgICAgICAgPyAoY2FsY3VsYXRvci5fc2hvcnREZXNjcmlwdGlvblJlc291cmNlS2V5IHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICA6IGNhbGN1bGF0b3Iuc2hvcnREZXNjcmlwdGlvblxuICAgICAgICAgIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9za3ktaW5wdXQtYm94PlxuICAgIDxza3ktZm9ybS1lcnJvcnNcbiAgICAgICpuZ0lmPVwibGFiZWxUZXh0ICYmIGhvc3RDb250cm9sPy5lcnJvcnM/Llsnc2t5RGF0ZVJhbmdlJ11cIlxuICAgICAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICAgID5cbiAgICAgIDxza3ktZm9ybS1lcnJvclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGhvc3RDb250cm9sPy5lcnJvcnM/Llsnc2t5RGF0ZVJhbmdlJ10/LmVycm9ycy5lbmREYXRlQmVmb3JlU3RhcnREYXRlXG4gICAgICAgIFwiXG4gICAgICAgIFtlcnJvck5hbWVdPVwiJ2VuZERhdGVCZWZvcmVTdGFydERhdGUnXCJcbiAgICAgICAgW2Vycm9yVGV4dF09XCJcbiAgICAgICAgICAnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZW5kX2RhdGVfYmVmb3JlX3N0YXJ0X2RhdGVfZXJyb3JfbGFiZWxfdGV4dCdcbiAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgIFwiXG4gICAgICAvPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWZvcm0tZXJyb3JcIiAvPlxuICAgIDwvc2t5LWZvcm0tZXJyb3JzPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRhdGUtcmFuZ2UtcGlja2VyLWZvcm0tZ3JvdXAgc2t5LWRhdGUtcmFuZ2UtZGF0ZXBpY2tlci13cmFwcGVyXCJcbiAgICBbaGlkZGVuXT1cIiFzaG93U3RhcnREYXRlUGlja2VyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWRhdGUtcmFuZ2UtcGlja2VyLWxhc3QtaW5wdXQnOlxuICAgICAgICBzaG93U3RhcnREYXRlUGlja2VyICYmICFzaG93RW5kRGF0ZVBpY2tlclxuICAgIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtlcnJvcnNTY3JlZW5SZWFkZXJPbmx5XT1cInRydWVcIlxuICAgICAgW2hhc0Vycm9yc109XCJoYXNFcnJvcnNcIlxuICAgICAgW2xhYmVsVGV4dF09XCJcbiAgICAgICAgc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNreS1kYXRlcGlja2VyPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIlxuICAgICAgICAgIG5hbWU9XCJzdGFydERhdGVcIlxuICAgICAgICAgIHNreURhdGVwaWNrZXJJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgbGFiZWxUZXh0IHx8IGxhYmVsXG4gICAgICAgICAgICAgID8gKCdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9kZWZhdWx0X2FyaWFfbGFiZWwnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgICAgIDogKHNlbGVjdGVkQ2FsY3VsYXRvci50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgfCBza3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgICAgOiAobGFiZWxUZXh0ID8gbGFiZWxUZXh0IDogbGFiZWwpKVxuICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJcbiAgICAgICAgICAgIHNob3dTdGFydERhdGVQaWNrZXIgJiYgKHN0YXJ0RGF0ZVJlcXVpcmVkIHx8IGlzUmVxdWlyZWQoKSlcbiAgICAgICAgICBcIlxuICAgICAgICAvPlxuICAgICAgPC9za3ktZGF0ZXBpY2tlcj5cbiAgICA8L3NreS1pbnB1dC1ib3g+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cCBza3ktZGF0ZS1yYW5nZS1kYXRlcGlja2VyLXdyYXBwZXJcIlxuICAgIFtoaWRkZW5dPVwiIXNob3dFbmREYXRlUGlja2VyXCJcbiAgICBbbmdDbGFzc109XCJ7ICdza3ktZGF0ZS1yYW5nZS1waWNrZXItbGFzdC1pbnB1dCc6IHNob3dFbmREYXRlUGlja2VyIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtlcnJvcnNTY3JlZW5SZWFkZXJPbmx5XT1cInRydWVcIlxuICAgICAgW2hhc0Vycm9yc109XCJoYXNFcnJvcnNcIlxuICAgICAgW2xhYmVsVGV4dF09XCJcbiAgICAgICAgc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxza3ktZGF0ZXBpY2tlcj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kRGF0ZVwiXG4gICAgICAgICAgbmFtZT1cImVuZERhdGVcIlxuICAgICAgICAgIHNreURhdGVwaWNrZXJJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgbGFiZWxUZXh0IHx8IGxhYmVsXG4gICAgICAgICAgICAgID8gKCdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9kZWZhdWx0X2FyaWFfbGFiZWwnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgICAgIDogKHNlbGVjdGVkQ2FsY3VsYXRvci50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgfCBza3lEYXRlUmFuZ2VQaWNrZXJFbmREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgICAgIDogKGxhYmVsVGV4dCA/IGxhYmVsVGV4dCA6IGxhYmVsKSlcbiAgICAgICAgICAgICAgOiAoc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInNob3dFbmREYXRlUGlja2VyICYmIChlbmREYXRlUmVxdWlyZWQgfHwgaXNSZXF1aXJlZCgpKVwiXG4gICAgICAgIC8+XG4gICAgICA8L3NreS1kYXRlcGlja2VyPlxuICAgIDwvc2t5LWlucHV0LWJveD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixLQUFLLEVBR0wsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLFdBQVcsRUFFWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUdsQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUNsQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxN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QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLDZCQUE2Qjs0QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0QsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtxQkFDckQsWUFDUyx1QkFBdUIsY0FDckIsSUFBSTt3REFhTCxhQUFhO3NCQUR2QixLQUFLO2dCQWlDQyxVQUFVO3NCQURoQixLQUFLO2dCQVdLLFFBQVE7c0JBRGxCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBZS9CLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBUUMsUUFBUTtzQkFEZCxLQUFLO2dCQVFLLEtBQUs7c0JBRGYsS0FBSztnQkFvQkMsU0FBUztzQkFEZixLQUFLO2dCQU9DLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTL0IsT0FBTztzQkFGYixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFDckMsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBU25DLE9BQU87c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5nQ29udHJvbCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVG91Y2hlZENoYW5nZUV2ZW50LFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUxvZ1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5SW5wdXRCb3hNb2R1bGUsXG59IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5cbmltcG9ydCB7IFN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1lcmdlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJy4uL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5tb2R1bGUnO1xuaW1wb3J0IHsgU2t5RGF0ZXRpbWVSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWRhdGV0aW1lLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VQaWNrZXJFbmREYXRlUmVzb3VyY2VLZXlQaXBlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLXBpY2tlci1lbmQtZGF0ZS1yZXNvdXJjZS1rZXkucGlwZSc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVBpcGUgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyLXN0YXJ0LWRhdGUtcmVzb3VyY2Uta2V5LnBpcGUnO1xuaW1wb3J0IHsgU2t5RGF0ZVJhbmdlU2VydmljZSB9IGZyb20gJy4vZGF0ZS1yYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIH0gZnJvbSAnLi90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0aW9uJztcbmltcG9ydCB7IFNreURhdGVSYW5nZUNhbGN1bGF0b3IgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvcic7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9ySWQgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci1pZCc7XG5pbXBvcnQgeyBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZSB9IGZyb20gJy4vdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXR5cGUnO1xuaW1wb3J0IHsgU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9JRFMgfSBmcm9tICcuL3R5cGVzL2RhdGUtcmFuZ2UtZGVmYXVsdC1jYWxjdWxhdG9yLWNvbmZpZ3MnO1xuXG50eXBlIERhdGVWYWx1ZSA9IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBhcmVEYXRlUmFuZ2VzRXF1YWwoXG4gIHJhbmdlQTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfCB1bmRlZmluZWQsXG4gIHJhbmdlQjogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhIXJhbmdlQSAmJlxuICAgICEhcmFuZ2VCICYmXG4gICAgcmFuZ2VBLmNhbGN1bGF0b3JJZCA9PT0gcmFuZ2VCLmNhbGN1bGF0b3JJZCAmJlxuICAgIGFyZURhdGVzRXF1YWwocmFuZ2VBLnN0YXJ0RGF0ZSwgcmFuZ2VCLnN0YXJ0RGF0ZSkgJiZcbiAgICBhcmVEYXRlc0VxdWFsKHJhbmdlQS5lbmREYXRlLCByYW5nZUIuZW5kRGF0ZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYXJlRGF0ZXNFcXVhbChhOiBEYXRlVmFsdWUsIGI6IERhdGVWYWx1ZSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFhICYmICFiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnICYmIGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSAmJiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWxWYWx1ZShcbiAgdmFsdWU6IFBhcnRpYWw8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IHZhbHVlIGlzIFBhcnRpYWw8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24+IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoXG4gICAgaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpIHx8XG4gICAgaXNOdWxsT3JVbmRlZmluZWQodmFsdWUuY2FsY3VsYXRvcklkKSB8fFxuICAgICEoJ2VuZERhdGUnIGluIHZhbHVlKSB8fFxuICAgICEoJ3N0YXJ0RGF0ZScgaW4gdmFsdWUpXG4gICk7XG59XG5cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNreURhdGVwaWNrZXJNb2R1bGUsXG4gICAgU2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5UGlwZSxcbiAgICBTa3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVBpcGUsXG4gICAgU2t5RGF0ZXRpbWVSZXNvdXJjZXNNb2R1bGUsXG4gICAgU2t5SW5wdXRCb3hNb2R1bGUsXG4gICAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNreURhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgeyBwcm92aWRlOiBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCwgdXNlVmFsdWU6IHRydWUgfSxcbiAgXSxcbiAgc2VsZWN0b3I6ICdza3ktZGF0ZS1yYW5nZS1waWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzdHlsZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVjaywgT25EZXN0cm95LCBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIElEcyBmb3IgdGhlIGRhdGUgcmFuZ2Ugb3B0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBwaWNrZXIncyBkcm9wZG93bi5cbiAgICogVGhlIG9wdGlvbnMgc3BlY2lmeSBjYWxjdWxhdG9yIG9iamVjdHMgdGhhdCByZXR1cm4gdHdvIGBEYXRlYCBvYmplY3RzIHRvIHJlcHJlc2VudCBkYXRlIHJhbmdlcy5cbiAgICogQnkgZGVmYXVsdCwgdGhpcyBwcm9wZXJ0eSBpbmNsdWRlcyBhbGwgYFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZGAgdmFsdWVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjYWxjdWxhdG9ySWRzKFxuICAgIGNhbGN1bGF0b3JJZHM6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZFtdIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICBjb25zdCBjdXJyZW50Q2FsY3VsYXRvcklkID0gdGhpcy4jZ2V0VmFsdWUoKS5jYWxjdWxhdG9ySWQ7XG5cbiAgICB0aGlzLiNfY2FsY3VsYXRvcklkcyA9IGNhbGN1bGF0b3JJZHMgPz8gU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9JRFM7XG4gICAgdGhpcy5jYWxjdWxhdG9ycyA9IHRoaXMuI2RhdGVSYW5nZVN2Yy5maWx0ZXJDYWxjdWxhdG9ycyhcbiAgICAgIHRoaXMuI19jYWxjdWxhdG9ySWRzLFxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbGN1bGF0b3IgaXNuJ3QgYXZhaWxhYmxlIGFueW1vcmUsXG4gICAgLy8gc2VsZWN0IHRoZSBmaXJzdCBjYWxjdWxhdG9yIGluIHRoZSBuZXcgYXJyYXkuXG4gICAgaWYgKCF0aGlzLiNfY2FsY3VsYXRvcklkcy5pbmNsdWRlcyhjdXJyZW50Q2FsY3VsYXRvcklkKSkge1xuICAgICAgdGhpcy4jc2V0VmFsdWUoXG4gICAgICAgIHsgY2FsY3VsYXRvcklkOiB0aGlzLmNhbGN1bGF0b3JJZHNbMF0gfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBjYWxjdWxhdG9ySWRzKCk6IFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZFtdIHtcbiAgICByZXR1cm4gdGhpcy4jX2NhbGN1bGF0b3JJZHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGUgZm9ybWF0IGZvclxuICAgKiBbdGhlIGBza3ktZGF0ZXBpY2tlcmAgY29tcG9uZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGVwaWNrZXIpXG4gICAqIHRoYXQgbWFrZSB1cCB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuIFRoZSB0ZXh0IGlucHV0IGlzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBvZlxuICAgKiB1cCB0byB0d28gYHNreS1kYXRlcGlja2VyYCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCBcIk1NL0REL1lZWVlcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlIHJhbmdlIHBpY2tlciBvbiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybXMuIERvbid0IHVzZVxuICAgKiB0aGlzIGlucHV0IG9uIHJlYWN0aXZlIGZvcm1zIGJlY2F1c2UgdGhleSBtYXkgb3ZlcndyaXRlIHRoZSBpbnB1dCBvciBsZWF2ZVxuICAgKiB0aGUgY29udHJvbCBvdXQgb2Ygc3luYy4gVG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiByZWFjdGl2ZSBmb3JtcyxcbiAgICogdXNlIHRoZSBgRm9ybUNvbnRyb2xgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQgYWxvbmcgd2l0aCBgbGFiZWxUZXh0YCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIGFkZGVkIHRvIGRhdGUgcmFuZ2UgcGlja2VyLiBUaGUgaGVscCBpbmxpbmUgYnV0dG9uIGRpc3BsYXlzIGEgW3BvcG92ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9wb3BvdmVyKVxuICAgKiB3aGVuIGNsaWNrZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25hbCB0aXRsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlckNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIGhlbHAgcG9wb3Zlci4gVGhpcyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgd2hlbiBgaGVscFBvcG92ZXJDb250ZW50YCBpc1xuICAgKiBhbHNvIHNwZWNpZmllZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWxwUG9wb3ZlclRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFtQZXJzaXN0ZW50IGlubGluZSBoZWxwIHRleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvZGVzaWduL2d1aWRlbGluZXMvdXNlci1hc3Npc3RhbmNlI2lubGluZS1oZWxwKSB0aGF0IHByb3ZpZGVzXG4gICAqIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgZm9yIHRoZSBkYXRlIHJhbmdlIHBpY2tlci5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgbGFiZWxUZXh0YCBpbnB1dCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBsYWJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2xhYmVsID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI2xvZ2dlci5kZXByZWNhdGVkKCdTa3lEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQubGFiZWwnLCB7XG4gICAgICAgIGRlcHJlY2F0aW9uTWFqb3JWZXJzaW9uOiAxMCxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWNvbW1lbmRhdGlvbjogJ1VzZSB0aGUgYGxhYmVsVGV4dGAgaW5wdXQgaW5zdGVhZC4nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgZGF0ZSByYW5nZSBwaWNrZXIncyBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYWJlbFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgcmVxdWlyZXMgYSB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0ZSByYW5nZSBwaWNrZXIgaXMgc3RhY2tlZCBvbiBhbm90aGVyIGZvcm0gY29tcG9uZW50LiBXaGVuIHNwZWNpZmllZCwgdGhlIGFwcHJvcHJpYXRlXG4gICAqIHZlcnRpY2FsIHNwYWNpbmcgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgZGF0ZSByYW5nZSBwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5za3ktbWFyZ2luLXN0YWNrZWQtbGcnKVxuICBwdWJsaWMgc3RhY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGhlbHAga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZ2xvYmFsIGhlbHAgY29udGVudCB0byBkaXNwbGF5LiBXaGVuIHNwZWNpZmllZCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIHBsYWNlZCBiZXNpZGUgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGxhYmVsLiBDbGlja2luZyB0aGUgYnV0dG9uIGludm9rZXMgW2dsb2JhbCBoZWxwXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2RldmVsb3AvZ2xvYmFsLWhlbHApXG4gICAqIGFzIGNvbmZpZ3VyZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlbHBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwcm90ZWN0ZWQgY2FsY3VsYXRvcklkSGFzRXJyb3JzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBjYWxjdWxhdG9yczogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcltdID0gW107XG4gIHByb3RlY3RlZCBlbmREYXRlSGFzRXJyb3JzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHJvdGVjdGVkIGhvc3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRDYWxjdWxhdG9yOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yO1xuICBwcm90ZWN0ZWQgc2hvd0VuZERhdGVQaWNrZXIgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNob3dTdGFydERhdGVQaWNrZXIgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHN0YXJ0RGF0ZUhhc0Vycm9ycyA9IGZhbHNlO1xuXG4gIGdldCAjY2FsY3VsYXRvcklkQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8U2t5RGF0ZVJhbmdlQ2FsY3VsYXRvcklkPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChcbiAgICAgICdjYWxjdWxhdG9ySWQnLFxuICAgICkgYXMgQWJzdHJhY3RDb250cm9sPFNreURhdGVSYW5nZUNhbGN1bGF0b3JJZD47XG4gIH1cblxuICBnZXQgI2VuZERhdGVDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxEYXRlVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KCdlbmREYXRlJykgYXMgQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT47XG4gIH1cblxuICBnZXQgI3N0YXJ0RGF0ZUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPERhdGVWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3N0YXJ0RGF0ZScpIGFzIEFic3RyYWN0Q29udHJvbDxEYXRlVmFsdWU+O1xuICB9XG5cbiAgI19jYWxjdWxhdG9ySWRzID0gU0tZX0RFRkFVTFRfQ0FMQ1VMQVRPUl9JRFM7XG4gICNfbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgI192YWx1ZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb247XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI25vdGlmeUNoYW5nZTogKChfOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdGlvbikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICNub3RpZnlUb3VjaGVkOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcmVhZG9ubHkgI2RhdGVSYW5nZVN2YyA9IGluamVjdChTa3lEYXRlUmFuZ2VTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcmVhZG9ubHkgI2xvZ2dlciA9IGluamVjdChTa3lMb2dTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNhbGN1bGF0b3JzID0gdGhpcy4jZGF0ZVJhbmdlU3ZjLmNhbGN1bGF0b3JzO1xuICAgIHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yID0gdGhpcy5jYWxjdWxhdG9yc1swXTtcblxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMuI2dldERlZmF1bHRWYWx1ZSh0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvcik7XG4gICAgdGhpcy4jX3ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBpbmplY3QoRm9ybUJ1aWxkZXIpLmdyb3VwKHtcbiAgICAgIGNhbGN1bGF0b3JJZDogbmV3IEZvcm1Db250cm9sPG51bWJlcj4oaW5pdGlhbFZhbHVlLmNhbGN1bGF0b3JJZCksXG4gICAgICBzdGFydERhdGU6IG5ldyBGb3JtQ29udHJvbDxEYXRlVmFsdWU+KGluaXRpYWxWYWx1ZS5zdGFydERhdGUpLFxuICAgICAgZW5kRGF0ZTogbmV3IEZvcm1Db250cm9sPERhdGVWYWx1ZT4oaW5pdGlhbFZhbHVlLmVuZERhdGUpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhvc3RDb250cm9sID0gdGhpcy4jaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICBzZWxmOiB0cnVlLFxuICAgIH0pPy5jb250cm9sO1xuXG4gICAgLy8gU2V0IGEgZGVmYXVsdCB2YWx1ZSBvbiB0aGUgY29udHJvbCBpZiBpdCdzIHVuZGVmaW5lZCBvbiBpbml0LlxuICAgIC8vIFdlIG5lZWQgdG8gdXNlIHNldFRpbWVvdXQgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgZmlyc3RcbiAgICAvLyB2YWxpZGF0aW9uIGN5Y2xlLlxuICAgIGlmIChpc1BhcnRpYWxWYWx1ZSh0aGlzLmhvc3RDb250cm9sPy52YWx1ZSkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhvc3RDb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNnZXRWYWx1ZSgpLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICBvbmx5U2VsZjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHZpZXcgd2hlbiBcInJlcXVpcmVkXCIgb3IgXCJkaXNhYmxlZFwiIHN0YXRlcyBhcmUgY2hhbmdlZCBvbiB0aGVcbiAgICAvLyBob3N0IGNvbnRyb2wuXG4gICAgdGhpcy5ob3N0Q29udHJvbD8uc3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGNoYW5nZXMgYWZ0ZXIgdGhlIGZpcnN0IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoYXJlRGF0ZVJhbmdlc0VxdWFsKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlPy5jYWxjdWxhdG9ySWQpKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2VsZWN0IGVsZW1lbnQgc2V0cyB0aGUgY2FsY3VsYXRvciBJRCB0byBhIHN0cmluZywgYnV0IHdlXG4gICAgICAgICAgICAvLyBuZWVkIGl0IHRvIGJlIGEgbnVtYmVyLlxuICAgICAgICAgICAgdmFsdWUuY2FsY3VsYXRvcklkID0gK3ZhbHVlLmNhbGN1bGF0b3JJZDtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGN1bGF0b3IgSUQgaXMgY2hhbmdlZCwgd2UgbmVlZCB0byByZXNldCB0aGUgc3RhcnQgYW5kXG4gICAgICAgICAgICAvLyBlbmQgZGF0ZSB2YWx1ZXMgYW5kIHdhaXQgdW50aWwgdGhlIG5leHQgdmFsdWVDaGFuZ2VzIGV2ZW50IHRvXG4gICAgICAgICAgICAvLyBub3RpZnkgdGhlIGhvc3QgY29udHJvbC5cbiAgICAgICAgICAgIGlmICh2YWx1ZS5jYWxjdWxhdG9ySWQgIT09IHRoaXMuI2dldFZhbHVlKCkuY2FsY3VsYXRvcklkKSB7XG4gICAgICAgICAgICAgIHRoaXMuI3NldFZhbHVlKFxuICAgICAgICAgICAgICAgIHsgY2FsY3VsYXRvcklkOiB2YWx1ZS5jYWxjdWxhdG9ySWQgfSxcbiAgICAgICAgICAgICAgICB7IGVtaXRFdmVudDogdHJ1ZSB9LFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy4jZ2V0VmFsdWUoKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgaG9zdCBjb250cm9sIGlmIHRoZSB2YWx1ZSBpcyBkaWZmZXJlbnQuXG4gICAgICAgICAgaWYgKCFhcmVEYXRlUmFuZ2VzRXF1YWwodGhpcy5ob3N0Q29udHJvbD8udmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy4jbm90aWZ5Q2hhbmdlPy4obmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgZGF0ZXBpY2tlcnMnIHN0YXR1c2VzIGNoYW5nZSwgd2Ugd2FudCB0byByZXRyaWdnZXIgdGhlIGhvc3RcbiAgICAvLyBjb250cm9sJ3MgdmFsaWRhdGlvbiBzbyB0aGF0IHRoZWlyIGVycm9ycyBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlIGhvc3QuXG4gICAgbWVyZ2UoXG4gICAgICB0aGlzLiNzdGFydERhdGVDb250cm9sLnN0YXR1c0NoYW5nZXMsXG4gICAgICB0aGlzLiNlbmREYXRlQ29udHJvbC5zdGF0dXNDaGFuZ2VzLFxuICAgIClcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBVc2UgYSBzZXRUaW1lb3V0IHRvIGF2b2lkIGFuIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJDaGVja2VkIGVycm9yLFxuICAgICAgICAvLyBzaW5jZSBtdWx0aXBsZSBjYWxscyB0byB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5IGluIHRoZSBzYW1lXG4gICAgICAgIC8vIGN5Y2xlIG1heSBjb2xsaWRlIHdpdGggb25lIGFub3RoZXIuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlTZWxmOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0Q29udHJvbD8uZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBUb3VjaGVkQ2hhbmdlRXZlbnQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3IgdG91Y2hlZCBzdGF0dXMgaW4gbmdEb0NoZWNrIHNpbmNlIEFuZ3VsYXIgZG9lcyBub3QgKGN1cnJlbnRseSlcbiAgICogaGF2ZSBhbiBBUEkgdG8gcmVzcG9uZCB0byB0b3VjaGVkIHN0YXR1cyBjaGFuZ2VzIGZyb20gdGhlIGhvc3QgY29udHJvbC5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNzczNiNpc3N1ZWNvbW1lbnQtMzEwODEyMzY4XG4gICAqIFRPRE86IEFuZ3VsYXIgMTggaW50cm9kdWNlcyBhIG5ldyBBUEkgdG8gcmVzcG9uZCB0byB0aGVzZSBzdGF0dXNlcy5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDg4NyNpc3N1ZWNvbW1lbnQtMjAzNTI2NzQwMFxuICAgKi9cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5ob3N0Q29udHJvbDtcblxuICAgIGlmIChjb250cm9sKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZUhhc0Vycm9ycyA9XG4gICAgICAgIHRoaXMuI2NvbnRyb2xIYXNFcnJvcnModGhpcy4jc3RhcnREYXRlQ29udHJvbCkgfHxcbiAgICAgICAgdGhpcy4jY29udHJvbEhhc0Vycm9ycyh0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sKTtcbiAgICAgIHRoaXMuZW5kRGF0ZUhhc0Vycm9ycyA9XG4gICAgICAgIHRoaXMuI2NvbnRyb2xIYXNFcnJvcnModGhpcy4jZW5kRGF0ZUNvbnRyb2wpIHx8XG4gICAgICAgIHRoaXMuI2NvbnRyb2xIYXNFcnJvcnModGhpcy4jY2FsY3VsYXRvcklkQ29udHJvbCk7XG4gICAgICB0aGlzLmNhbGN1bGF0b3JJZEhhc0Vycm9ycyA9IHRoaXMuI2NvbnRyb2xIYXNFcnJvcnMoXG4gICAgICAgIHRoaXMuI2NhbGN1bGF0b3JJZENvbnRyb2wsXG4gICAgICApO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgI2NvbnRyb2xIYXNFcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhY29udHJvbC5lcnJvcnMgJiYgKGNvbnRyb2wudG91Y2hlZCB8fCBjb250cm9sLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IHVua25vd24pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNub3RpZnlDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI25vdGlmeVRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgVmFsaWRhdG9yLlxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IGNhbGN1bGF0b3JFcnJvcnMgPSB0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvci52YWxpZGF0ZShjb250cm9sLnZhbHVlKTtcbiAgICBjb25zdCBzdGFydERhdGVFcnJvcnMgPSB0aGlzLiNzdGFydERhdGVDb250cm9sLmVycm9ycztcbiAgICBjb25zdCBlbmREYXRlRXJyb3JzID0gdGhpcy4jZW5kRGF0ZUNvbnRyb2wuZXJyb3JzO1xuXG4gICAgaWYgKGNhbGN1bGF0b3JFcnJvcnMpIHtcbiAgICAgIGVycm9ycyA9IHtcbiAgICAgICAgc2t5RGF0ZVJhbmdlOiB7XG4gICAgICAgICAgY2FsY3VsYXRvcklkOiB0aGlzLiNnZXRWYWx1ZSgpLmNhbGN1bGF0b3JJZCxcbiAgICAgICAgICBlcnJvcnM6IGNhbGN1bGF0b3JFcnJvcnMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNldCBjYWxjdWxhdG9yIGVycm9ycyBvbiB0aGUgc2VsZWN0IHNvIHRoYXQgdGhleSBhcHBlYXIgYmVuZWF0aCBpdC5cbiAgICB0aGlzLiNjYWxjdWxhdG9ySWRDb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1N0YXJ0RGF0ZVBpY2tlciAmJiBzdGFydERhdGVFcnJvcnMpIHtcbiAgICAgIGVycm9ycyB8fD0ge307XG4gICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4uc3RhcnREYXRlRXJyb3JzIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd0VuZERhdGVQaWNrZXIgJiYgZW5kRGF0ZUVycm9ycykge1xuICAgICAgZXJyb3JzIHx8PSB7fTtcbiAgICAgIGVycm9ycyA9IHsgLi4uZXJyb3JzLCAuLi5lbmREYXRlRXJyb3JzIH07XG4gICAgfVxuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgLy8gVGhlIGRhdGUgcmFuZ2UgcGlja2VyIGFsd2F5cyBoYXMgYSB2YWx1ZSwgc28gaWYgdGhlIGNvbnN1bWVyIHBhc3NlcyBpbiBhXG4gIC8vIHBhcnRpYWwgdmFsdWUgKHZpYSBgcGF0Y2hWYWx1ZWApIG9yIG51bGwsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBob3N0IGNvbnRyb2wnc1xuICAvLyB2YWx1ZSB3aXRoIHRoZSBjb21wbGV0ZSB2YWx1ZSBhZnRlciBpdCdzIGJlZW4gbW9kaWZpZWQuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuI3BhdGNoVmFsdWUodmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBob3N0IGNvbnRyb2wgaWYgaXQgaXMgc2V0IHRvIGEgcGFydGlhbCBvciBudWxsIHZhbHVlLlxuICAgIGlmIChpc1BhcnRpYWxWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaG9zdENvbnRyb2w/LnNldFZhbHVlKHRoaXMuI2dldFZhbHVlKCksIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLnJlcXVpcmVkIHx8IHRoaXMuaG9zdENvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuI25vdGlmeVRvdWNoZWQ/LigpO1xuICB9XG5cbiAgI2dldENhbGN1bGF0b3IoY2FsY3VsYXRvcklkOiBudW1iZXIpOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yIHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMuY2FsY3VsYXRvcnMuZmluZCgoYykgPT4gYy5jYWxjdWxhdG9ySWQgPT09IGNhbGN1bGF0b3JJZCk7XG5cbiAgICAvKnNhZmV0eSBjaGVjazogc2hvdWxkIG5vdCBoYXBwZW4qL1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGlmKi9cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBIGRhdGUgcmFuZ2UgY2FsY3VsYXRvciB3aXRoIElEICgke2NhbGN1bGF0b3JJZH0pIGNvdWxkIG5vdCBiZSBmb3VuZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICAjZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNhbGN1bGF0b3I6IFNreURhdGVSYW5nZUNhbGN1bGF0b3IsXG4gICk6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHtcbiAgICByZXR1cm4gY2FsY3VsYXRvci5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgI2dldFZhbHVlKCk6IFNreURhdGVSYW5nZUNhbGN1bGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgI3BhdGNoVmFsdWUoXG4gICAgcGFydGlhbFZhbHVlOiBQYXJ0aWFsPFNreURhdGVSYW5nZUNhbGN1bGF0aW9uPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuI3NldFZhbHVlKFxuICAgICAgaXNOdWxsT3JVbmRlZmluZWQocGFydGlhbFZhbHVlKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB7IC4uLnRoaXMuI2dldFZhbHVlKCksIC4uLnBhcnRpYWxWYWx1ZSB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIHRvIGJlIHVzZWQgYnkgdGhlIGRhdGUgcmFuZ2UgcGlja2VyIGZvcm0gY29udHJvbC5cbiAgICovXG4gICNzZXRWYWx1ZShcbiAgICB2YWx1ZTogU2t5RGF0ZVJhbmdlQ2FsY3VsYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IHsgZW1pdEV2ZW50OiBib29sZWFuIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy4jZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IHZhbHVlT3JEZWZhdWx0ID1cbiAgICAgICF2YWx1ZSB8fCBpc051bGxPclVuZGVmaW5lZCh2YWx1ZS5jYWxjdWxhdG9ySWQpXG4gICAgICAgID8gdGhpcy4jZ2V0RGVmYXVsdFZhbHVlKHRoaXMuY2FsY3VsYXRvcnNbMF0pXG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4udGhpcy4jZ2V0RGVmYXVsdFZhbHVlKHRoaXMuI2dldENhbGN1bGF0b3IodmFsdWUuY2FsY3VsYXRvcklkKSksXG4gICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICB9O1xuXG4gICAgLy8gRW5zdXJlIGZhbHN5IHZhbHVlcyBhcmUgc2V0IHRvIG51bGwuXG4gICAgdmFsdWVPckRlZmF1bHQuZW5kRGF0ZSA9IHZhbHVlT3JEZWZhdWx0LmVuZERhdGUgfHwgbnVsbDtcbiAgICB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgPSB2YWx1ZU9yRGVmYXVsdC5zdGFydERhdGUgfHwgbnVsbDtcblxuICAgIGlmICghYXJlRGF0ZVJhbmdlc0VxdWFsKG9sZFZhbHVlLCB2YWx1ZU9yRGVmYXVsdCkpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IHZhbHVlT3JEZWZhdWx0O1xuXG4gICAgICB0aGlzLnNlbGVjdGVkQ2FsY3VsYXRvciA9IHRoaXMuI2dldENhbGN1bGF0b3IoXG4gICAgICAgIHZhbHVlT3JEZWZhdWx0LmNhbGN1bGF0b3JJZCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChvbGRWYWx1ZS5jYWxjdWxhdG9ySWQgIT09IHZhbHVlT3JEZWZhdWx0LmNhbGN1bGF0b3JJZCkge1xuICAgICAgICB0aGlzLiN1cGRhdGVQaWNrZXJWaXNpYmlsaXR5KHRoaXMuc2VsZWN0ZWRDYWxjdWxhdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlT3JEZWZhdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdXBkYXRlUGlja2VyVmlzaWJpbGl0eShjYWxjdWxhdG9yOiBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yKTogdm9pZCB7XG4gICAgbGV0IHNob3dFbmREYXRlUGlja2VyID0gZmFsc2U7XG4gICAgbGV0IHNob3dTdGFydERhdGVQaWNrZXIgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAoY2FsY3VsYXRvci50eXBlKSB7XG4gICAgICBjYXNlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLkJlZm9yZTpcbiAgICAgICAgc2hvd0VuZERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yVHlwZS5BZnRlcjpcbiAgICAgICAgc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JUeXBlLlJhbmdlOlxuICAgICAgICBzaG93RW5kRGF0ZVBpY2tlciA9IHRydWU7XG4gICAgICAgIHNob3dTdGFydERhdGVQaWNrZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RW5kRGF0ZVBpY2tlciA9IHNob3dFbmREYXRlUGlja2VyO1xuICAgIHRoaXMuc2hvd1N0YXJ0RGF0ZVBpY2tlciA9IHNob3dTdGFydERhdGVQaWNrZXI7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXJcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS1kYXRlLXJhbmdlLXBpY2tlci1sYXN0LWlucHV0JzpcbiAgICAgICAgIXNob3dTdGFydERhdGVQaWNrZXIgJiYgIXNob3dFbmREYXRlUGlja2VyXG4gICAgfVwiXG4gID5cbiAgICA8c2t5LWlucHV0LWJveFxuICAgICAgW2hhc0Vycm9yc109XCJjYWxjdWxhdG9ySWRIYXNFcnJvcnNcIlxuICAgICAgW2hlbHBLZXldPVwiaGVscEtleVwiXG4gICAgICBbaGVscFBvcG92ZXJDb250ZW50XT1cImhlbHBQb3BvdmVyQ29udGVudFwiXG4gICAgICBbaGVscFBvcG92ZXJUaXRsZV09XCJoZWxwUG9wb3ZlclRpdGxlXCJcbiAgICAgIFtoaW50VGV4dF09XCJoaW50VGV4dFwiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBsYWJlbFRleHQgfHxcbiAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgKCdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9kZWZhdWx0X2xhYmVsJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYWxjdWxhdG9ySWRcIiAoYmx1cik9XCJvbkJsdXIoKVwiPlxuICAgICAgICBAZm9yIChjYWxjdWxhdG9yIG9mIGNhbGN1bGF0b3JzOyB0cmFjayBjYWxjdWxhdG9yKSB7XG4gICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiY2FsY3VsYXRvci5jYWxjdWxhdG9ySWRcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIGNhbGN1bGF0b3IuX3Nob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgID8gKGNhbGN1bGF0b3IuX3Nob3J0RGVzY3JpcHRpb25SZXNvdXJjZUtleSB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgICA6IGNhbGN1bGF0b3Iuc2hvcnREZXNjcmlwdGlvblxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgICBAaWYgKFxuICAgICAgICBob3N0Q29udHJvbD8uZXJyb3JzPy5bJ3NreURhdGVSYW5nZSddPy5lcnJvcnM/LltcbiAgICAgICAgICAnZW5kRGF0ZUJlZm9yZVN0YXJ0RGF0ZSdcbiAgICAgICAgXSAmJiBsYWJlbFRleHRcbiAgICAgICkge1xuICAgICAgICA8c2t5LWZvcm0tZXJyb3JcbiAgICAgICAgICBbZXJyb3JOYW1lXT1cIidlbmREYXRlQmVmb3JlU3RhcnREYXRlJ1wiXG4gICAgICAgICAgW2Vycm9yVGV4dF09XCJcbiAgICAgICAgICAgICdza3l1eF9kYXRlX3JhbmdlX3BpY2tlcl9lbmRfZGF0ZV9iZWZvcmVfc3RhcnRfZGF0ZV9lcnJvcl9sYWJlbF90ZXh0J1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZm9ybS1lcnJvclwiIC8+XG4gICAgPC9za3ktaW5wdXQtYm94PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWRhdGUtcmFuZ2UtcGlja2VyLWZvcm0tZ3JvdXAgc2t5LWRhdGUtcmFuZ2UtZGF0ZXBpY2tlci13cmFwcGVyXCJcbiAgICBbaGlkZGVuXT1cIiFzaG93U3RhcnREYXRlUGlja2VyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWRhdGUtcmFuZ2UtcGlja2VyLWxhc3QtaW5wdXQnOlxuICAgICAgICBzaG93U3RhcnREYXRlUGlja2VyICYmICFzaG93RW5kRGF0ZVBpY2tlclxuICAgIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtoYXNFcnJvcnNdPVwic3RhcnREYXRlSGFzRXJyb3JzXCJcbiAgICAgIFtsYWJlbFRleHRdPVwiXG4gICAgICAgIHNlbGVjdGVkQ2FsY3VsYXRvci50eXBlXG4gICAgICAgICAgfCBza3lEYXRlUmFuZ2VQaWNrZXJTdGFydERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxza3ktZGF0ZXBpY2tlcj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnREYXRlXCJcbiAgICAgICAgICBuYW1lPVwic3RhcnREYXRlXCJcbiAgICAgICAgICBza3lEYXRlcGlja2VySW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGxhYmVsVGV4dCB8fCBsYWJlbFxuICAgICAgICAgICAgICA/ICgnc2t5dXhfZGF0ZV9yYW5nZV9waWNrZXJfZGVmYXVsdF9hcmlhX2xhYmVsJ1xuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyU3RhcnREYXRlUmVzb3VyY2VLZXlcbiAgICAgICAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgICAgIDogKGxhYmVsVGV4dCA/IGxhYmVsVGV4dCA6IGxhYmVsKSlcbiAgICAgICAgICAgICAgOiAoc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlclN0YXJ0RGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwic2hvd1N0YXJ0RGF0ZVBpY2tlciAmJiBpc1JlcXVpcmVkKClcIlxuICAgICAgICAvPlxuICAgICAgPC9za3ktZGF0ZXBpY2tlcj5cbiAgICA8L3NreS1pbnB1dC1ib3g+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZGF0ZS1yYW5nZS1waWNrZXItZm9ybS1ncm91cCBza3ktZGF0ZS1yYW5nZS1kYXRlcGlja2VyLXdyYXBwZXJcIlxuICAgIFtoaWRkZW5dPVwiIXNob3dFbmREYXRlUGlja2VyXCJcbiAgICBbbmdDbGFzc109XCJ7ICdza3ktZGF0ZS1yYW5nZS1waWNrZXItbGFzdC1pbnB1dCc6IHNob3dFbmREYXRlUGlja2VyIH1cIlxuICA+XG4gICAgPHNreS1pbnB1dC1ib3hcbiAgICAgIFtoYXNFcnJvcnNdPVwiZW5kRGF0ZUhhc0Vycm9yc1wiXG4gICAgICBbbGFiZWxUZXh0XT1cIlxuICAgICAgICBzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNreS1kYXRlcGlja2VyPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlXCJcbiAgICAgICAgICBuYW1lPVwiZW5kRGF0ZVwiXG4gICAgICAgICAgc2t5RGF0ZXBpY2tlcklucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBsYWJlbFRleHQgfHwgbGFiZWxcbiAgICAgICAgICAgICAgPyAoJ3NreXV4X2RhdGVfcmFuZ2VfcGlja2VyX2RlZmF1bHRfYXJpYV9sYWJlbCdcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICAgICAgOiAoc2VsZWN0ZWRDYWxjdWxhdG9yLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICB8IHNreURhdGVSYW5nZVBpY2tlckVuZERhdGVSZXNvdXJjZUtleVxuICAgICAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgICAgOiAobGFiZWxUZXh0ID8gbGFiZWxUZXh0IDogbGFiZWwpKVxuICAgICAgICAgICAgICA6IChzZWxlY3RlZENhbGN1bGF0b3IudHlwZVxuICAgICAgICAgICAgICAgIHwgc2t5RGF0ZVJhbmdlUGlja2VyRW5kRGF0ZVJlc291cmNlS2V5XG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwic2hvd0VuZERhdGVQaWNrZXIgJiYgaXNSZXF1aXJlZCgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc2t5LWRhdGVwaWNrZXI+XG4gICAgPC9za3ktaW5wdXQtYm94PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -3,11 +3,11 @@ import { SkyFormErrorModule } from '@skyux/forms';
3
3
  import { SkyDateRangePickerComponent } from './date-range-picker.component';
4
4
  import * as i0 from "@angular/core";
5
5
  export class SkyDateRangePickerModule {
6
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent], exports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }
8
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent], exports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }
8
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, imports: [SkyDateRangePickerComponent, SkyFormErrorModule] }); }
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangePickerModule, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangePickerModule, decorators: [{
11
11
  type: NgModule,
12
12
  args: [{
13
13
  exports: [SkyDateRangePickerComponent, SkyFormErrorModule],
@@ -85,10 +85,10 @@ export class SkyDateRangeService {
85
85
  }
86
86
  return calculators;
87
87
  }
88
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
89
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangeService, providedIn: 'root' }); }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
89
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangeService, providedIn: 'root' }); }
90
90
  }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyDateRangeService, decorators: [{
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: SkyDateRangeService, decorators: [{
92
92
  type: Injectable,
93
93
  args: [{
94
94
  providedIn: 'root',