@ardium-ui/ui 4.2.2 → 4.4.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 (52) hide show
  1. package/esm2022/lib/_internal/form-field-component.mjs +1 -1
  2. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +2 -2
  3. package/esm2022/lib/_internal/selectable-list-component.mjs +1 -1
  4. package/esm2022/lib/calendar/calendar.component.mjs +20 -7
  5. package/esm2022/lib/calendar/calendar.defaults.mjs +3 -3
  6. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +4 -4
  7. package/esm2022/lib/file-inputs/file-input-base.mjs +2 -3
  8. package/esm2022/lib/form-field/form-field-base.mjs +53 -0
  9. package/esm2022/lib/form-field/form-field-child.token.mjs +3 -0
  10. package/esm2022/lib/form-field/form-field-native-inputs.mjs +80 -0
  11. package/esm2022/lib/form-field/form-field.component.mjs +7 -28
  12. package/esm2022/lib/form-field/form-field.defaults.mjs +3 -1
  13. package/esm2022/lib/form-field/form-field.module.mjs +6 -1
  14. package/esm2022/lib/form-field/horizontal-form-field.component.mjs +7 -28
  15. package/esm2022/lib/form-field/index.mjs +2 -1
  16. package/esm2022/lib/form-field/label/label.component.mjs +10 -4
  17. package/esm2022/lib/inputs/date-input/date-input.component.mjs +9 -6
  18. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +4 -3
  19. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +4 -3
  20. package/esm2022/lib/inputs/input/input.component.mjs +4 -4
  21. package/esm2022/lib/inputs/number-input/number-input.component.mjs +4 -3
  22. package/esm2022/lib/inputs/password-input/password-input.component.mjs +4 -3
  23. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +4 -4
  24. package/esm2022/lib/radio/radio-group.component.mjs +10 -1
  25. package/esm2022/lib/segment/segment.component.mjs +4 -4
  26. package/esm2022/lib/select/select.component.mjs +4 -3
  27. package/fesm2022/ardium-ui-ui.mjs +175 -56
  28. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  29. package/lib/_internal/form-field-component.d.ts +2 -1
  30. package/lib/_internal/selectable-list-component.d.ts +2 -1
  31. package/lib/calendar/calendar.component.d.ts +2 -2
  32. package/lib/calendar/calendar.defaults.d.ts +2 -2
  33. package/lib/file-inputs/file-input-base.d.ts +0 -1
  34. package/lib/form-field/form-field-base.d.ts +22 -0
  35. package/lib/form-field/form-field-child.token.d.ts +8 -0
  36. package/lib/form-field/form-field-native-inputs.d.ts +22 -0
  37. package/lib/form-field/form-field.component.d.ts +3 -15
  38. package/lib/form-field/form-field.defaults.d.ts +2 -0
  39. package/lib/form-field/form-field.module.d.ts +8 -7
  40. package/lib/form-field/horizontal-form-field.component.d.ts +3 -15
  41. package/lib/form-field/index.d.ts +1 -0
  42. package/lib/form-field/label/label.component.d.ts +4 -1
  43. package/lib/inputs/date-input/date-input.component.d.ts +1 -0
  44. package/package.json +1 -1
  45. package/prebuilt-themes/default/buttons/button.css +2 -2
  46. package/prebuilt-themes/default/form-field.css +13 -0
  47. package/prebuilt-themes/default/form-field.css.map +1 -1
  48. package/prebuilt-themes/default/inputs/date-input.css +1 -0
  49. package/prebuilt-themes/default/inputs/date-input.css.map +1 -1
  50. package/themes/default/buttons/button.scss +2 -2
  51. package/themes/default/form-field.scss +16 -0
  52. package/themes/default/inputs/date-input.scss +1 -0
@@ -1,33 +1,12 @@
1
- import { ChangeDetectionStrategy, Component, computed, contentChild, contentChildren, inject, input, ViewEncapsulation, } from '@angular/core';
2
- import { coerceBooleanProperty } from '@ardium-ui/devkit';
3
- import { _FormFieldComponentBase } from '../_internal/form-field-component';
4
- import { SimpleOneAxisAlignment } from './../types/alignment.types';
5
- import { ArdiumErrorDirective } from './error/error.directive';
6
- import { ARD_FORM_FIELD_DEFAULTS } from './form-field.defaults';
7
- import { ArdiumHintDirective } from './hint/hint.directive';
8
- import { ArdiumLabelComponent } from './label/label.component';
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
2
+ import { _FormFieldBase } from './form-field-base';
9
3
  import * as i0 from "@angular/core";
10
- export class ArdiumHorizontalFormFieldComponent {
11
- constructor() {
12
- this._DEFAULTS = inject(ARD_FORM_FIELD_DEFAULTS);
13
- this.alignHintToLeftByDefault = this._DEFAULTS.defaultHintAlign === SimpleOneAxisAlignment.Left;
14
- this.control = contentChild(_FormFieldComponentBase);
15
- this.label = contentChild(ArdiumLabelComponent);
16
- this.hints = contentChildren(ArdiumHintDirective);
17
- this.errors = contentChildren(ArdiumErrorDirective);
18
- this.hasAnyError = computed(() => this.errors()?.length > 0);
19
- this.reserveHintLine = input(this._DEFAULTS.reserveHintLine, { transform: v => coerceBooleanProperty(v) });
20
- }
21
- ngOnInit() {
22
- if (!this.control()) {
23
- throw new Error(`ARD-FT5110: Form field component requires any control (input) to be present within the element. Found none.`);
24
- }
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHorizontalFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumHorizontalFormFieldComponent, selector: "ard-horizontal-form-field", inputs: { reserveHintLine: { classPropertyName: "reserveHintLine", publicName: "reserveHintLine", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "control", first: true, predicate: _FormFieldComponentBase, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: ArdiumLabelComponent, descendants: true, isSignal: true }, { propertyName: "hints", predicate: ArdiumHintDirective, isSignal: true }, { propertyName: "errors", predicate: ArdiumErrorDirective, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"ard-horizontal-form-field\"\r\n [class.ard-form-field__with-error]=\"control()?.hasError()\"\r\n [class.ard-form-field__is-success]=\"control()?.isSuccess()\"\r\n [class.ard-form-field__control-disabled]=\"control()?.disabled()\"\r\n>\r\n <div class=\"ard-form-field__label-container\">\r\n <label\r\n class=\"ard-label\"\r\n [attr.for]=\"control()?.htmlId()\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n </div>\r\n <div class=\"ard-form-field__non-label\">\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-horizontal-form-field{display:flex}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4
+ export class ArdiumHorizontalFormFieldComponent extends _FormFieldBase {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHorizontalFormFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumHorizontalFormFieldComponent, selector: "ard-horizontal-form-field", usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"ard-horizontal-form-field\"\r\n [class.ard-form-field__with-error]=\"controlHasError\"\r\n [class.ard-form-field__is-success]=\"controlIsSuccess\"\r\n [class.ard-form-field__control-disabled]=\"controlDisabled\"\r\n>\r\n <div class=\"ard-form-field__label-container\">\r\n <label\r\n class=\"ard-form-field__label\"\r\n [attr.for]=\"controlHtmlId\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n </div>\r\n <div class=\"ard-form-field__non-label\">\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-horizontal-form-field{display:flex}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
28
7
  }
29
8
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumHorizontalFormFieldComponent, decorators: [{
30
9
  type: Component,
31
- args: [{ selector: 'ard-horizontal-form-field', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"ard-horizontal-form-field\"\r\n [class.ard-form-field__with-error]=\"control()?.hasError()\"\r\n [class.ard-form-field__is-success]=\"control()?.isSuccess()\"\r\n [class.ard-form-field__control-disabled]=\"control()?.disabled()\"\r\n>\r\n <div class=\"ard-form-field__label-container\">\r\n <label\r\n class=\"ard-label\"\r\n [attr.for]=\"control()?.htmlId()\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n </div>\r\n <div class=\"ard-form-field__non-label\">\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-horizontal-form-field{display:flex}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"] }]
10
+ args: [{ selector: 'ard-horizontal-form-field', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"ard-horizontal-form-field\"\r\n [class.ard-form-field__with-error]=\"controlHasError\"\r\n [class.ard-form-field__is-success]=\"controlIsSuccess\"\r\n [class.ard-form-field__control-disabled]=\"controlDisabled\"\r\n>\r\n <div class=\"ard-form-field__label-container\">\r\n <label\r\n class=\"ard-form-field__label\"\r\n [attr.for]=\"controlHtmlId\"\r\n >\r\n <ng-content select=\"ard-label, [ard-label]\" />\r\n </label>\r\n </div>\r\n <div class=\"ard-form-field__non-label\">\r\n <div class=\"ard-form-field__input\">\r\n <ng-content />\r\n </div>\r\n <div\r\n class=\"ard-form-field__hints\"\r\n [class.ard-form-field__reserve-hint-line]=\"reserveHintLine()\"\r\n [class.ard-form-field__hints-default-left]=\"alignHintToLeftByDefault\"\r\n >\r\n @if (hasAnyError()) {\r\n <div class=\"ard-form-field__error\">\r\n <ng-content select=\"ard-error, [ard-error]\" />\r\n </div>\r\n } @else {\r\n <div class=\"ard-form-field__hints-left\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[left], [ard-hint][left]\" />\r\n </div>\r\n <div class=\"ard-form-field__hints-right\">\r\n <div class=\"ard-form-field__default-hint\">\r\n <ng-content select=\"ard-hint:not([left]):not([right]), [ard-hint]:not([left]):not([right])\" />\r\n </div>\r\n <ng-content select=\"ard-hint[right], [ard-hint][right]\" />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}.ard-horizontal-form-field{display:flex}.ard-form-field__hints{display:flex;justify-content:space-between}.ard-form-field__hints>*{display:flex;flex-direction:column}\n"] }]
32
11
  }] });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZm9ybS1maWVsZC9ob3Jpem9udGFsLWZvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2hvcml6b250YWwtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUVMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFTL0QsTUFBTSxPQUFPLGtDQUFrQztJQVAvQztRQVFxQixjQUFTLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFL0MsNkJBQXdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsS0FBSyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7UUFFbEcsWUFBTyxHQUFHLFlBQVksQ0FBMEIsdUJBQXVCLENBQUMsQ0FBQztRQUV6RSxVQUFLLEdBQUcsWUFBWSxDQUF1QixvQkFBb0IsQ0FBQyxDQUFDO1FBRWpFLFVBQUssR0FBRyxlQUFlLENBQXNCLG1CQUFtQixDQUFDLENBQUM7UUFDbEUsV0FBTSxHQUFHLGVBQWUsQ0FBdUIsb0JBQW9CLENBQUMsQ0FBQztRQUNyRSxnQkFBVyxHQUFHLFFBQVEsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLG9CQUFlLEdBQUcsS0FBSyxDQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBUzlIO0lBUEMsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUNiLDZHQUE2RyxDQUM5RyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7K0dBcEJVLGtDQUFrQzttR0FBbEMsa0NBQWtDLHdRQUtZLHVCQUF1Qix3RkFFNUIsb0JBQW9CLDJFQUVsQixtQkFBbUIseURBQ2pCLG9CQUFvQiw2Q0NwQzlFLDJzREE0Q0E7OzRGRGxCYSxrQ0FBa0M7a0JBUDlDLFNBQVM7K0JBQ0UsMkJBQTJCLGlCQUd0QixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgY29udGVudENoaWxkLFxyXG4gIGNvbnRlbnRDaGlsZHJlbixcclxuICBpbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XHJcbmltcG9ydCB7IF9Gb3JtRmllbGRDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vX2ludGVybmFsL2Zvcm0tZmllbGQtY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2ltcGxlT25lQXhpc0FsaWdubWVudCB9IGZyb20gJy4vLi4vdHlwZXMvYWxpZ25tZW50LnR5cGVzJztcclxuaW1wb3J0IHsgQXJkaXVtRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuL2Vycm9yL2Vycm9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFSRF9GT1JNX0ZJRUxEX0RFRkFVTFRTIH0gZnJvbSAnLi9mb3JtLWZpZWxkLmRlZmF1bHRzJztcclxuaW1wb3J0IHsgQXJkaXVtSGludERpcmVjdGl2ZSB9IGZyb20gJy4vaGludC9oaW50LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFyZGl1bUxhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi9sYWJlbC9sYWJlbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtaG9yaXpvbnRhbC1mb3JtLWZpZWxkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG9yaXpvbnRhbC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vaG9yaXpvbnRhbC1mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJkaXVtSG9yaXpvbnRhbEZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ERUZBVUxUUyA9IGluamVjdChBUkRfRk9STV9GSUVMRF9ERUZBVUxUUyk7XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSBhbGlnbkhpbnRUb0xlZnRCeURlZmF1bHQgPSB0aGlzLl9ERUZBVUxUUy5kZWZhdWx0SGludEFsaWduID09PSBTaW1wbGVPbmVBeGlzQWxpZ25tZW50LkxlZnQ7XHJcblxyXG4gIHJlYWRvbmx5IGNvbnRyb2wgPSBjb250ZW50Q2hpbGQ8X0Zvcm1GaWVsZENvbXBvbmVudEJhc2U+KF9Gb3JtRmllbGRDb21wb25lbnRCYXNlKTtcclxuXHJcbiAgcmVhZG9ubHkgbGFiZWwgPSBjb250ZW50Q2hpbGQ8QXJkaXVtTGFiZWxDb21wb25lbnQ+KEFyZGl1bUxhYmVsQ29tcG9uZW50KTtcclxuXHJcbiAgcmVhZG9ubHkgaGludHMgPSBjb250ZW50Q2hpbGRyZW48QXJkaXVtSGludERpcmVjdGl2ZT4oQXJkaXVtSGludERpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgZXJyb3JzID0gY29udGVudENoaWxkcmVuPEFyZGl1bUVycm9yRGlyZWN0aXZlPihBcmRpdW1FcnJvckRpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgaGFzQW55RXJyb3IgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLmVycm9ycygpPy5sZW5ndGggPiAwKTtcclxuICByZWFkb25seSByZXNlcnZlSGludExpbmUgPSBpbnB1dDxib29sZWFuLCBhbnk+KHRoaXMuX0RFRkFVTFRTLnJlc2VydmVIaW50TGluZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb250cm9sKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBBUkQtRlQ1MTEwOiBGb3JtIGZpZWxkIGNvbXBvbmVudCByZXF1aXJlcyBhbnkgY29udHJvbCAoaW5wdXQpIHRvIGJlIHByZXNlbnQgd2l0aGluIHRoZSBlbGVtZW50LiBGb3VuZCBub25lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwiYXJkLWhvcml6b250YWwtZm9ybS1maWVsZFwiXHJcbiAgW2NsYXNzLmFyZC1mb3JtLWZpZWxkX193aXRoLWVycm9yXT1cImNvbnRyb2woKT8uaGFzRXJyb3IoKVwiXHJcbiAgW2NsYXNzLmFyZC1mb3JtLWZpZWxkX19pcy1zdWNjZXNzXT1cImNvbnRyb2woKT8uaXNTdWNjZXNzKClcIlxyXG4gIFtjbGFzcy5hcmQtZm9ybS1maWVsZF9fY29udHJvbC1kaXNhYmxlZF09XCJjb250cm9sKCk/LmRpc2FibGVkKClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImFyZC1mb3JtLWZpZWxkX19sYWJlbC1jb250YWluZXJcIj5cclxuICAgIDxsYWJlbFxyXG4gICAgICBjbGFzcz1cImFyZC1sYWJlbFwiXHJcbiAgICAgIFthdHRyLmZvcl09XCJjb250cm9sKCk/Lmh0bWxJZCgpXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWxhYmVsLCBbYXJkLWxhYmVsXVwiIC8+XHJcbiAgICA8L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJhcmQtZm9ybS1maWVsZF9fbm9uLWxhYmVsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJkLWZvcm0tZmllbGRfX2lucHV0XCI+XHJcbiAgICAgIDxuZy1jb250ZW50IC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJhcmQtZm9ybS1maWVsZF9faGludHNcIlxyXG4gICAgICBbY2xhc3MuYXJkLWZvcm0tZmllbGRfX3Jlc2VydmUtaGludC1saW5lXT1cInJlc2VydmVIaW50TGluZSgpXCJcclxuICAgICAgW2NsYXNzLmFyZC1mb3JtLWZpZWxkX19oaW50cy1kZWZhdWx0LWxlZnRdPVwiYWxpZ25IaW50VG9MZWZ0QnlEZWZhdWx0XCJcclxuICAgID5cclxuICAgICAgQGlmIChoYXNBbnlFcnJvcigpKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1mb3JtLWZpZWxkX19lcnJvclwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWVycm9yLCBbYXJkLWVycm9yXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZm9ybS1maWVsZF9faGludHMtbGVmdFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1mb3JtLWZpZWxkX19kZWZhdWx0LWhpbnRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWhpbnQ6bm90KFtsZWZ0XSk6bm90KFtyaWdodF0pLCBbYXJkLWhpbnRdOm5vdChbbGVmdF0pOm5vdChbcmlnaHRdKVwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFyZC1oaW50W2xlZnRdLCBbYXJkLWhpbnRdW2xlZnRdXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWZvcm0tZmllbGRfX2hpbnRzLXJpZ2h0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWZvcm0tZmllbGRfX2RlZmF1bHQtaGludFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhcmQtaGludDpub3QoW2xlZnRdKTpub3QoW3JpZ2h0XSksIFthcmQtaGludF06bm90KFtsZWZ0XSk6bm90KFtyaWdodF0pXCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWhpbnRbcmlnaHRdLCBbYXJkLWhpbnRdW3JpZ2h0XVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZm9ybS1maWVsZC9ob3Jpem9udGFsLWZvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2hvcml6b250YWwtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFTbkQsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLGNBQWM7K0dBQXpELGtDQUFrQzttR0FBbEMsa0NBQWtDLHdGQ1YvQywrckRBNENBOzs0RkRsQ2Esa0NBQWtDO2tCQVA5QyxTQUFTOytCQUNFLDJCQUEyQixpQkFHdEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgX0Zvcm1GaWVsZEJhc2UgfSBmcm9tICcuL2Zvcm0tZmllbGQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FyZC1ob3Jpem9udGFsLWZvcm0tZmllbGQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ob3Jpem9udGFsLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ob3Jpem9udGFsLWZvcm0tZmllbGQuY29tcG9uZW50LnNjc3MnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcmRpdW1Ib3Jpem9udGFsRm9ybUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgX0Zvcm1GaWVsZEJhc2UgaW1wbGVtZW50cyBPbkluaXQge31cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwiYXJkLWhvcml6b250YWwtZm9ybS1maWVsZFwiXHJcbiAgW2NsYXNzLmFyZC1mb3JtLWZpZWxkX193aXRoLWVycm9yXT1cImNvbnRyb2xIYXNFcnJvclwiXHJcbiAgW2NsYXNzLmFyZC1mb3JtLWZpZWxkX19pcy1zdWNjZXNzXT1cImNvbnRyb2xJc1N1Y2Nlc3NcIlxyXG4gIFtjbGFzcy5hcmQtZm9ybS1maWVsZF9fY29udHJvbC1kaXNhYmxlZF09XCJjb250cm9sRGlzYWJsZWRcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImFyZC1mb3JtLWZpZWxkX19sYWJlbC1jb250YWluZXJcIj5cclxuICAgIDxsYWJlbFxyXG4gICAgICBjbGFzcz1cImFyZC1mb3JtLWZpZWxkX19sYWJlbFwiXHJcbiAgICAgIFthdHRyLmZvcl09XCJjb250cm9sSHRtbElkXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWxhYmVsLCBbYXJkLWxhYmVsXVwiIC8+XHJcbiAgICA8L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJhcmQtZm9ybS1maWVsZF9fbm9uLWxhYmVsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJkLWZvcm0tZmllbGRfX2lucHV0XCI+XHJcbiAgICAgIDxuZy1jb250ZW50IC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJhcmQtZm9ybS1maWVsZF9faGludHNcIlxyXG4gICAgICBbY2xhc3MuYXJkLWZvcm0tZmllbGRfX3Jlc2VydmUtaGludC1saW5lXT1cInJlc2VydmVIaW50TGluZSgpXCJcclxuICAgICAgW2NsYXNzLmFyZC1mb3JtLWZpZWxkX19oaW50cy1kZWZhdWx0LWxlZnRdPVwiYWxpZ25IaW50VG9MZWZ0QnlEZWZhdWx0XCJcclxuICAgID5cclxuICAgICAgQGlmIChoYXNBbnlFcnJvcigpKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1mb3JtLWZpZWxkX19lcnJvclwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWVycm9yLCBbYXJkLWVycm9yXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtZm9ybS1maWVsZF9faGludHMtbGVmdFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC1mb3JtLWZpZWxkX19kZWZhdWx0LWhpbnRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWhpbnQ6bm90KFtsZWZ0XSk6bm90KFtyaWdodF0pLCBbYXJkLWhpbnRdOm5vdChbbGVmdF0pOm5vdChbcmlnaHRdKVwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFyZC1oaW50W2xlZnRdLCBbYXJkLWhpbnRdW2xlZnRdXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWZvcm0tZmllbGRfX2hpbnRzLXJpZ2h0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLWZvcm0tZmllbGRfX2RlZmF1bHQtaGludFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhcmQtaGludDpub3QoW2xlZnRdKTpub3QoW3JpZ2h0XSksIFthcmQtaGludF06bm90KFtsZWZ0XSk6bm90KFtyaWdodF0pXCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXJkLWhpbnRbcmlnaHRdLCBbYXJkLWhpbnRdW3JpZ2h0XVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -1,9 +1,10 @@
1
1
  export * from './error/error.component';
2
2
  export * from './error/error.directive';
3
+ export * from './form-field-native-inputs';
3
4
  export * from './form-field.component';
4
5
  export * from './form-field.module';
5
6
  export * from './hint/hint.component';
6
7
  export * from './hint/hint.directive';
7
8
  export * from './horizontal-form-field.component';
8
9
  export * from './label/label.component';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2Zvcm0tZmllbGQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9lcnJvci9lcnJvci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Vycm9yL2Vycm9yLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGQubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9oaW50L2hpbnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9oaW50L2hpbnQuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9ob3Jpem9udGFsLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9sYWJlbC9sYWJlbC5jb21wb25lbnQnO1xyXG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2Zvcm0tZmllbGQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Vycm9yL2Vycm9yLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IvZXJyb3IuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9mb3JtLWZpZWxkLW5hdGl2ZS1pbnB1dHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9mb3JtLWZpZWxkLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaGludC9oaW50LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaGludC9oaW50LmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaG9yaXpvbnRhbC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGFiZWwvbGFiZWwuY29tcG9uZW50JztcclxuXHJcbiJdfQ==
@@ -1,10 +1,14 @@
1
- import { Component, effect, input } from '@angular/core';
1
+ import { Component, effect, inject, input } from '@angular/core';
2
2
  import { coerceBooleanProperty } from '@ardium-ui/devkit';
3
+ import { ARD_FORM_FIELD_DEFAULTS } from '../form-field.defaults';
3
4
  import * as i0 from "@angular/core";
4
5
  export class ArdiumLabelComponent {
5
6
  constructor() {
7
+ this._DEFAULTS = inject(ARD_FORM_FIELD_DEFAULTS);
6
8
  this.required = input(false, { transform: v => coerceBooleanProperty(v) });
7
9
  this.optional = input(false, { transform: v => coerceBooleanProperty(v) });
10
+ this.requiredText = input(this._DEFAULTS.labelRequiredText);
11
+ this.optionalText = input(this._DEFAULTS.labelOptionalText);
8
12
  effect(() => {
9
13
  if (this.required() && this.optional()) {
10
14
  console.error(`ARD-NF5110: Cannot set a form field label to be both required and optional.`);
@@ -12,10 +16,12 @@ export class ArdiumLabelComponent {
12
16
  });
13
17
  }
14
18
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumLabelComponent, selector: "ard-label", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, optional: { classPropertyName: "optional", publicName: "optional", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n class=\"ard-label-text\"\r\n [class.ard-label-optional]=\"optional()\"\r\n [class.ard-label-required]=\"required()\"\r\n>\r\n <ng-content />\r\n</div>\r\n" }); }
19
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumLabelComponent, selector: "ard-label", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, optional: { classPropertyName: "optional", publicName: "optional", isSignal: true, isRequired: false, transformFunction: null }, requiredText: { classPropertyName: "requiredText", publicName: "requiredText", isSignal: true, isRequired: false, transformFunction: null }, optionalText: { classPropertyName: "optionalText", publicName: "optionalText", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ard-label": "true" } }, ngImport: i0, template: "<div\r\n class=\"ard-label__text\"\r\n [class.ard-label__required]=\"required()\"\r\n [class.ard-label__optional]=\"optional()\"\r\n>\r\n <ng-content />\r\n <span class=\"ard-label__required-optional-text\">\r\n @if (required() && !optional()) {\r\n {{ requiredText() }}\r\n } @else if (optional() && !required()) {\r\n {{ optionalText() }}\r\n }\r\n </span>\r\n</div>\r\n" }); }
16
20
  }
17
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumLabelComponent, decorators: [{
18
22
  type: Component,
19
- args: [{ selector: 'ard-label', template: "<div\r\n class=\"ard-label-text\"\r\n [class.ard-label-optional]=\"optional()\"\r\n [class.ard-label-required]=\"required()\"\r\n>\r\n <ng-content />\r\n</div>\r\n" }]
23
+ args: [{ selector: 'ard-label', host: {
24
+ '[class.ard-label]': 'true',
25
+ }, template: "<div\r\n class=\"ard-label__text\"\r\n [class.ard-label__required]=\"required()\"\r\n [class.ard-label__optional]=\"optional()\"\r\n>\r\n <ng-content />\r\n <span class=\"ard-label__required-optional-text\">\r\n @if (required() && !optional()) {\r\n {{ requiredText() }}\r\n } @else if (optional() && !required()) {\r\n {{ optionalText() }}\r\n }\r\n </span>\r\n</div>\r\n" }]
20
26
  }], ctorParameters: () => [] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2xhYmVsL2xhYmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZm9ybS1maWVsZC9sYWJlbC9sYWJlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBTTFELE1BQU0sT0FBTyxvQkFBb0I7SUFJL0I7UUFIUyxhQUFRLEdBQUcsS0FBSyxDQUFlLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRixhQUFRLEdBQUcsS0FBSyxDQUFlLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUczRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztZQUMvRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQVZVLG9CQUFvQjttR0FBcEIsb0JBQW9CLCtUQ1BqQyx5S0FPQTs7NEZEQWEsb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFyZGl1bS11aS9kZXZraXQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtbGFiZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sYWJlbC5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcmRpdW1MYWJlbENvbXBvbmVudCB7XHJcbiAgcmVhZG9ubHkgcmVxdWlyZWQgPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcbiAgcmVhZG9ubHkgb3B0aW9uYWwgPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQoKSAmJiB0aGlzLm9wdGlvbmFsKCkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBBUkQtTkY1MTEwOiBDYW5ub3Qgc2V0IGEgZm9ybSBmaWVsZCBsYWJlbCB0byBiZSBib3RoIHJlcXVpcmVkIGFuZCBvcHRpb25hbC5gKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImFyZC1sYWJlbC10ZXh0XCJcclxuICBbY2xhc3MuYXJkLWxhYmVsLW9wdGlvbmFsXT1cIm9wdGlvbmFsKClcIlxyXG4gIFtjbGFzcy5hcmQtbGFiZWwtcmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiXHJcbj5cclxuICA8bmctY29udGVudCAvPlxyXG48L2Rpdj5cclxuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2xhYmVsL2xhYmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZm9ybS1maWVsZC9sYWJlbC9sYWJlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQVNqRSxNQUFNLE9BQU8sb0JBQW9CO0lBUy9CO1FBUm1CLGNBQVMsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUV0RCxhQUFRLEdBQUcsS0FBSyxDQUFlLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRixhQUFRLEdBQUcsS0FBSyxDQUFlLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRixpQkFBWSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsaUJBQVksR0FBRyxLQUFLLENBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBR3RFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQy9GLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBZlUsb0JBQW9CO21HQUFwQixvQkFBb0IsOG9CQ1hqQywyWUFjQTs7NEZESGEsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLFdBQVcsUUFFZjt3QkFDSixtQkFBbUIsRUFBRSxNQUFNO3FCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZWZmZWN0LCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0BhcmRpdW0tdWkvZGV2a2l0JztcclxuaW1wb3J0IHsgQVJEX0ZPUk1fRklFTERfREVGQVVMVFMgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmRlZmF1bHRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXJkLWxhYmVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGFiZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGhvc3Q6IHtcclxuICAgICdbY2xhc3MuYXJkLWxhYmVsXSc6ICd0cnVlJyxcclxuICB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJkaXVtTGFiZWxDb21wb25lbnQge1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfREVGQVVMVFMgPSBpbmplY3QoQVJEX0ZPUk1fRklFTERfREVGQVVMVFMpO1xyXG5cclxuICByZWFkb25seSByZXF1aXJlZCA9IGlucHV0PGJvb2xlYW4sIGFueT4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcclxuICByZWFkb25seSBvcHRpb25hbCA9IGlucHV0PGJvb2xlYW4sIGFueT4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcclxuXHJcbiAgcmVhZG9ubHkgcmVxdWlyZWRUZXh0ID0gaW5wdXQ8c3RyaW5nPih0aGlzLl9ERUZBVUxUUy5sYWJlbFJlcXVpcmVkVGV4dCk7XHJcbiAgcmVhZG9ubHkgb3B0aW9uYWxUZXh0ID0gaW5wdXQ8c3RyaW5nPih0aGlzLl9ERUZBVUxUUy5sYWJlbE9wdGlvbmFsVGV4dCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQoKSAmJiB0aGlzLm9wdGlvbmFsKCkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBBUkQtTkY1MTEwOiBDYW5ub3Qgc2V0IGEgZm9ybSBmaWVsZCBsYWJlbCB0byBiZSBib3RoIHJlcXVpcmVkIGFuZCBvcHRpb25hbC5gKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImFyZC1sYWJlbF9fdGV4dFwiXHJcbiAgW2NsYXNzLmFyZC1sYWJlbF9fcmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiXHJcbiAgW2NsYXNzLmFyZC1sYWJlbF9fb3B0aW9uYWxdPVwib3B0aW9uYWwoKVwiXHJcbj5cclxuICA8bmctY29udGVudCAvPlxyXG4gIDxzcGFuIGNsYXNzPVwiYXJkLWxhYmVsX19yZXF1aXJlZC1vcHRpb25hbC10ZXh0XCI+XHJcbiAgICBAaWYgKHJlcXVpcmVkKCkgJiYgIW9wdGlvbmFsKCkpIHtcclxuICAgIHt7IHJlcXVpcmVkVGV4dCgpIH19XHJcbiAgICB9IEBlbHNlIGlmIChvcHRpb25hbCgpICYmICFyZXF1aXJlZCgpKSB7XHJcbiAgICB7eyBvcHRpb25hbFRleHQoKSB9fVxyXG4gICAgfVxyXG4gIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -6,6 +6,7 @@ import { coerceBooleanProperty, coerceDateProperty, coerceNumberProperty } from
6
6
  import { isDefined, isNull } from 'simple-bool';
7
7
  import { _FormFieldComponentBase } from '../../_internal/form-field-component';
8
8
  import { ArdiumDropdownPanelComponent, DropdownPanelAppearance, DropdownPanelVariant } from '../../dropdown-panel';
9
+ import { ARD_FORM_FIELD_CONTROL } from '../../form-field/form-field-child.token';
9
10
  import { FormElementAppearance, FormElementVariant } from '../../types/theming.types';
10
11
  import { ARD_DATE_INPUT_DEFAULTS } from './date-input.defaults';
11
12
  import { ArdDateInputAcceptButtonsTemplateDirective, ArdDateInputCalendarIconTemplateDirective, ArdDateInputDaysViewHeaderTemplateDirective, ArdDateInputDayTemplateDirective, ArdDateInputFloatingMonthTemplateDirective, ArdDateInputMonthsViewHeaderTemplateDirective, ArdDateInputMonthTemplateDirective, ArdDateInputPrefixTemplateDirective, ArdDateInputSuffixTemplateDirective, ArdDateInputValueTemplateDirective, ArdDateInputWeekdayTemplateDirective, ArdDateInputYearsViewHeaderTemplateDirective, ArdDateInputYearTemplateDirective, } from './date-input.directive';
@@ -156,7 +157,8 @@ export class ArdiumDateInputComponent extends _FormFieldComponentBase {
156
157
  effect(() => {
157
158
  this.value();
158
159
  this._emitChange();
159
- });
160
+ this._serializeValueIntoDateInput();
161
+ }, { allowSignalWrites: true });
160
162
  }
161
163
  writeValue(v) {
162
164
  if (v instanceof Date) {
@@ -214,7 +216,6 @@ export class ArdiumDateInputComponent extends _FormFieldComponentBase {
214
216
  }
215
217
  }
216
218
  this.value.set(date);
217
- this.dateInputValue.set(this.serializeFn()(date));
218
219
  }
219
220
  _setDateInputAttributes() {
220
221
  const input = this.dateInput().nativeElement;
@@ -238,9 +239,11 @@ export class ArdiumDateInputComponent extends _FormFieldComponentBase {
238
239
  }
239
240
  _acceptSelectedDate(date) {
240
241
  this.value.set(date);
241
- this.dateInputValue.set(this.serializeFn()(date));
242
242
  this.close();
243
243
  }
244
+ _serializeValueIntoDateInput() {
245
+ this.dateInputValue.set(this.serializeFn()(this.value()));
246
+ }
244
247
  _cancelCalendarSelection() {
245
248
  this.close();
246
249
  }
@@ -347,7 +350,7 @@ export class ArdiumDateInputComponent extends _FormFieldComponentBase {
347
350
  multi: true,
348
351
  },
349
352
  {
350
- provide: _FormFieldComponentBase,
353
+ provide: ARD_FORM_FIELD_CONTROL,
351
354
  useExisting: ArdiumDateInputComponent,
352
355
  },
353
356
  ], queries: [{ propertyName: "valueTemplate", first: true, predicate: ArdDateInputValueTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarIconTemplate", first: true, predicate: ArdDateInputCalendarIconTemplateDirective, descendants: true, isSignal: true }, { propertyName: "acceptButtonsTemplate", first: true, predicate: ArdDateInputAcceptButtonsTemplateDirective, descendants: true, isSignal: true }, { propertyName: "prefixTemplate", first: true, predicate: ArdDateInputPrefixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "suffixTemplate", first: true, predicate: ArdDateInputSuffixTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarDaysViewHeaderTemplate", first: true, predicate: ArdDateInputDaysViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarYearsViewHeaderTemplate", first: true, predicate: ArdDateInputYearsViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarMonthsViewHeaderTemplate", first: true, predicate: ArdDateInputMonthsViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarWeekdayTemplate", first: true, predicate: ArdDateInputWeekdayTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarFloatingMonthTemplate", first: true, predicate: ArdDateInputFloatingMonthTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarYearTemplate", first: true, predicate: ArdDateInputYearTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarMonthTemplate", first: true, predicate: ArdDateInputMonthTemplateDirective, descendants: true, isSignal: true }, { propertyName: "calendarDayTemplate", first: true, predicate: ArdDateInputDayTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "dateInput", first: true, predicate: ["dateInput"], descendants: true, isSignal: true }, { propertyName: "dropdownHost", first: true, predicate: ["dropdownHost"], descendants: true, isSignal: true }, { propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, isSignal: true }, { propertyName: "dropdownPanel", first: true, predicate: ArdiumDropdownPanelComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-date-input\"\r\n #dropdownHost\r\n (click)=\"onGeneralClick($event)\"\r\n [class.ard-has-value]=\"!!value()\"\r\n [ngClass]=\"ngClasses()\"\r\n >\r\n <div class=\"ard-date-input__value-container ard-input-container\">\r\n <div\r\n class=\"ard-date-input__placeholder ard-placeholder\"\r\n [class.ard-date-input__placeholder-hidden]=\"!shouldDisplayPlaceholder()\"\r\n >\r\n {{ placeholder() }}\r\n </div>\r\n <div\r\n class=\"ard-date-input__value\"\r\n [class.ard-date-input__value-hidden]=\"!shouldDisplayValue()\"\r\n >\r\n <ng-template\r\n #defaultValueTemplate\r\n let-date\r\n >\r\n {{ serializeFn()(date) }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"valueTemplate()?.template || defaultValueTemplate\"\r\n [ngTemplateOutletContext]=\"valueContext()\"\r\n />\r\n </div>\r\n <div\r\n class=\"ard-date-input__input-container\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-owns]=\"isOpen() ? htmlId() : null\"\r\n [class.ard-date-input__input-container-hidden]=\"!shouldDisplayDateInput()\"\r\n >\r\n <input\r\n #dateInput\r\n #focusableElement\r\n type=\"text\"\r\n class=\"ard-date-input__input\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [value]=\"dateInputValue()\"\r\n [attr.aria-controls]=\"isOpen() ? htmlId() : null\"\r\n (input)=\"onDateInputInput($event)\"\r\n (change)=\"$event.stopPropagation()\"\r\n (focus)=\"onDateInputFocus($event)\"\r\n (blur)=\"onDateInputBlur($event)\"\r\n (keydown)=\"onDateInputEnter($event)\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (!calendarHidden()) {\r\n <ard-icon-button\r\n color=\"none\"\r\n [disabled]=\"calendarDisabled()\"\r\n (click)=\"onCalendarButtonClick($event)\"\r\n >\r\n <ng-template\r\n #defaultCalendarIconTemplate\r\n let-date\r\n >\r\n <ard-icon filled>today</ard-icon>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"calendarIconTemplate()?.template || defaultCalendarIconTemplate\" />\r\n </ard-icon-button>\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #dropdownTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-date-input__dropdown-panel\"\r\n [appearance]=\"dropdownAppearanceOrDefault()\"\r\n [variant]=\"dropdownVariantOrDefault()\"\r\n [isOpen]=\"true\"\r\n [panelId]=\"htmlId()\"\r\n [compact]=\"compact()\"\r\n (ardClickOutside)=\"onOutsideClick($event)\"\r\n >\r\n <ard-calendar\r\n class=\"ard-date-input__calendar\"\r\n [(activeMonth)]=\"activeMonth\"\r\n [(activeYear)]=\"activeYear\"\r\n [(activeView)]=\"activeView\"\r\n [firstWeekday]=\"firstWeekday()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n autoFocus\r\n [multipleYearPageChangeModifier]=\"multipleYearPageChangeModifier()\"\r\n [color]=\"color()\"\r\n [disabled]=\"disabled() || calendarDisabled()\"\r\n [tabIndex]=\"tabIndex()\"\r\n (selectedChange)=\"onCalendarSelectedChange($event)\"\r\n (yearSelect)=\"yearSelect.emit($event)\"\r\n (monthSelect)=\"monthSelect.emit($event)\"\r\n >\r\n <ng-template\r\n _ard-tmp-repository\r\n [daysViewHeaderTmp]=\"calendarDaysViewHeaderTemplate()\"\r\n [yearsViewHeaderTmp]=\"calendarYearsViewHeaderTemplate()\"\r\n [monthsViewHeaderTmp]=\"calendarMonthsViewHeaderTemplate()\"\r\n [weekdayTmp]=\"calendarWeekdayTemplate()\"\r\n [floatingMonthTmp]=\"calendarFloatingMonthTemplate()\"\r\n [yearTmp]=\"calendarYearTemplate()\"\r\n [monthTmp]=\"calendarMonthTemplate()\"\r\n [dayTmp]=\"calendarDayTemplate()\"\r\n />\r\n </ard-calendar>\r\n @if (useAcceptButtonToSelect()) {\r\n <div class=\"ard-date-input__accept-buttons-container\">\r\n <ng-template\r\n #defaultAcceptButtonsTemplate\r\n let-date\r\n >\r\n {{ serializeFn()(date) }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"acceptButtonsTemplate()?.template || defaultAcceptButtonsTemplate\"\r\n [ngTemplateOutletContext]=\"acceptButtonsContext()\"\r\n />\r\n </div>\r\n }\r\n </ard-dropdown-panel>\r\n</ng-template>\r\n", styles: [".ard-date-input .ard-date-input__placeholder.ard-date-input__placeholder-hidden,.ard-date-input .ard-date-input__value.ard-date-input__value-hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ArdiumFormFieldFrameComponent, selector: "ard-form-field-frame", inputs: ["hasError", "isSuccess", "isFocused", "appearance", "variant", "compact", "prefixTemplate", "suffixTemplate"] }, { kind: "component", type: i3.ArdiumDropdownPanelComponent, selector: "ard-dropdown-panel", inputs: ["panelId", "headerTemplate", "footerTemplate", "filterValue", "appearance", "variant", "compact", "isOpen"], outputs: ["scroll", "scrollToEnd"] }, { kind: "directive", type: i4.ArdiumClickOutsideDirective, selector: "[ardClickOutside]", outputs: ["ardClickOutside"] }, { kind: "component", type: i5.ArdiumCalendarComponent, selector: "ard-calendar", inputs: ["color", "activeView", "activeYear", "activeMonth", "firstWeekday", "multipleYearPageChangeModifier", "autoFocus", "selected", "min", "max", "filter"], outputs: ["activeViewChange", "activeYearChange", "activeMonthChange", "selectedChange", "yearSelect", "monthSelect"] }, { kind: "component", type: i6.ArdiumIconButtonComponent, selector: "ard-icon-button", inputs: ["wrapperClasses", "type", "color", "lightColoring", "compact", "pointerEventsWhenDisabled"] }, { kind: "component", type: i7.ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }, { kind: "directive", type: i8._CalendarTemplateRepositoryDirective, selector: "ard-calendar > ng-template[_ard-tmp-repository]", inputs: ["daysViewHeaderTmp", "yearsViewHeaderTmp", "monthsViewHeaderTmp", "weekdayTmp", "floatingMonthTmp", "yearTmp", "monthTmp", "dayTmp"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -361,7 +364,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
361
364
  multi: true,
362
365
  },
363
366
  {
364
- provide: _FormFieldComponentBase,
367
+ provide: ARD_FORM_FIELD_CONTROL,
365
368
  useExisting: ArdiumDateInputComponent,
366
369
  },
367
370
  ], template: "<ard-form-field-frame\r\n [appearance]=\"appearance()\"\r\n [variant]=\"variant()\"\r\n [compact]=\"compact()\"\r\n [isFocused]=\"isFocused()\"\r\n [hasError]=\"hasError()\"\r\n [isSuccess]=\"isSuccess()\"\r\n [prefixTemplate]=\"prefixTemplate()?.template\"\r\n [suffixTemplate]=\"suffixTemplate()?.template\"\r\n>\r\n <div\r\n class=\"ard-date-input\"\r\n #dropdownHost\r\n (click)=\"onGeneralClick($event)\"\r\n [class.ard-has-value]=\"!!value()\"\r\n [ngClass]=\"ngClasses()\"\r\n >\r\n <div class=\"ard-date-input__value-container ard-input-container\">\r\n <div\r\n class=\"ard-date-input__placeholder ard-placeholder\"\r\n [class.ard-date-input__placeholder-hidden]=\"!shouldDisplayPlaceholder()\"\r\n >\r\n {{ placeholder() }}\r\n </div>\r\n <div\r\n class=\"ard-date-input__value\"\r\n [class.ard-date-input__value-hidden]=\"!shouldDisplayValue()\"\r\n >\r\n <ng-template\r\n #defaultValueTemplate\r\n let-date\r\n >\r\n {{ serializeFn()(date) }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"valueTemplate()?.template || defaultValueTemplate\"\r\n [ngTemplateOutletContext]=\"valueContext()\"\r\n />\r\n </div>\r\n <div\r\n class=\"ard-date-input__input-container\"\r\n role=\"combobox\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-owns]=\"isOpen() ? htmlId() : null\"\r\n [class.ard-date-input__input-container-hidden]=\"!shouldDisplayDateInput()\"\r\n >\r\n <input\r\n #dateInput\r\n #focusableElement\r\n type=\"text\"\r\n class=\"ard-date-input__input\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n [value]=\"dateInputValue()\"\r\n [attr.aria-controls]=\"isOpen() ? htmlId() : null\"\r\n (input)=\"onDateInputInput($event)\"\r\n (change)=\"$event.stopPropagation()\"\r\n (focus)=\"onDateInputFocus($event)\"\r\n (blur)=\"onDateInputBlur($event)\"\r\n (keydown)=\"onDateInputEnter($event)\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (!calendarHidden()) {\r\n <ard-icon-button\r\n color=\"none\"\r\n [disabled]=\"calendarDisabled()\"\r\n (click)=\"onCalendarButtonClick($event)\"\r\n >\r\n <ng-template\r\n #defaultCalendarIconTemplate\r\n let-date\r\n >\r\n <ard-icon filled>today</ard-icon>\r\n </ng-template>\r\n\r\n <ng-template [ngTemplateOutlet]=\"calendarIconTemplate()?.template || defaultCalendarIconTemplate\" />\r\n </ard-icon-button>\r\n }\r\n </div>\r\n</ard-form-field-frame>\r\n\r\n<ng-template #dropdownTemplate>\r\n <ard-dropdown-panel\r\n class=\"ard-dropdown-panel ard-date-input__dropdown-panel\"\r\n [appearance]=\"dropdownAppearanceOrDefault()\"\r\n [variant]=\"dropdownVariantOrDefault()\"\r\n [isOpen]=\"true\"\r\n [panelId]=\"htmlId()\"\r\n [compact]=\"compact()\"\r\n (ardClickOutside)=\"onOutsideClick($event)\"\r\n >\r\n <ard-calendar\r\n class=\"ard-date-input__calendar\"\r\n [(activeMonth)]=\"activeMonth\"\r\n [(activeYear)]=\"activeYear\"\r\n [(activeView)]=\"activeView\"\r\n [firstWeekday]=\"firstWeekday()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n autoFocus\r\n [multipleYearPageChangeModifier]=\"multipleYearPageChangeModifier()\"\r\n [color]=\"color()\"\r\n [disabled]=\"disabled() || calendarDisabled()\"\r\n [tabIndex]=\"tabIndex()\"\r\n (selectedChange)=\"onCalendarSelectedChange($event)\"\r\n (yearSelect)=\"yearSelect.emit($event)\"\r\n (monthSelect)=\"monthSelect.emit($event)\"\r\n >\r\n <ng-template\r\n _ard-tmp-repository\r\n [daysViewHeaderTmp]=\"calendarDaysViewHeaderTemplate()\"\r\n [yearsViewHeaderTmp]=\"calendarYearsViewHeaderTemplate()\"\r\n [monthsViewHeaderTmp]=\"calendarMonthsViewHeaderTemplate()\"\r\n [weekdayTmp]=\"calendarWeekdayTemplate()\"\r\n [floatingMonthTmp]=\"calendarFloatingMonthTemplate()\"\r\n [yearTmp]=\"calendarYearTemplate()\"\r\n [monthTmp]=\"calendarMonthTemplate()\"\r\n [dayTmp]=\"calendarDayTemplate()\"\r\n />\r\n </ard-calendar>\r\n @if (useAcceptButtonToSelect()) {\r\n <div class=\"ard-date-input__accept-buttons-container\">\r\n <ng-template\r\n #defaultAcceptButtonsTemplate\r\n let-date\r\n >\r\n {{ serializeFn()(date) }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"acceptButtonsTemplate()?.template || defaultAcceptButtonsTemplate\"\r\n [ngTemplateOutletContext]=\"acceptButtonsContext()\"\r\n />\r\n </div>\r\n }\r\n </ard-dropdown-panel>\r\n</ng-template>\r\n", styles: [".ard-date-input .ard-date-input__placeholder.ard-date-input__placeholder-hidden,.ard-date-input .ard-date-input__value.ard-date-input__value-hidden{display:none}\n"] }]
@@ -369,4 +372,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
369
372
  type: Inject,
370
373
  args: [ARD_DATE_INPUT_DEFAULTS]
371
374
  }] }] });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0cy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFjLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEy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QkFDdkQsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSx1QkFBdUI7Z0JBQ2hDLFdBQVcsRUFBRSx3QkFBd0I7YUFDdEM7U0FDRixxRUFpV3FDLGtDQUFrQyx1R0FDM0IseUNBQXlDLHdHQUN4QywwQ0FBMEMsaUdBRWpELG1DQUFtQyxpR0FDbkMsbUNBQW1DLGlIQUVuQiwyQ0FBMkMsa0hBQzFDLDRDQUE0QyxtSEFDM0MsNkNBQTZDLDBHQUN0RCxvQ0FBb0MsZ0hBQzlCLDBDQUEwQyx1R0FDbkQsaUNBQWlDLHdHQUNoQyxrQ0FBa0Msc0dBQ3BDLGdDQUFnQyw4YkFySEYsNEJBQTRCLHVGQ2xVeEcsNHpKQTRJQTs7NEZEbEVhLHdCQUF3QjtrQkFsQnBDLFNBQVM7K0JBQ0UsZ0JBQWdCLGlCQUdYLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSx1QkFBdUI7NEJBQ2hDLFdBQVcsMEJBQTBCO3lCQUN0QztxQkFDRjs7MEJBSVksTUFBTTsyQkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmLCBTY3JvbGxTdHJhdGVneU9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgY29udGVudENoaWxkLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIGluamVjdCxcclxuICBpbnB1dCxcclxuICBtb2RlbCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgb3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICB2aWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZURhdGVQcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XHJcbmltcG9ydCB7IGlzRGVmaW5lZCwgaXNOdWxsIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xyXG5pbXBvcnQgeyBfRm9ybUZpZWxkQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL19pbnRlcm5hbC9mb3JtLWZpZWxkLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFyZENhbGVuZGFyRmlsdGVyRm4sIEFyZENhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnR5cGVzJztcclxuaW1wb3J0IHsgQXJkaXVtRHJvcGRvd25QYW5lbENvbXBvbmVudCwgRHJvcGRvd25QYW5lbEFwcGVhcmFuY2UsIERyb3Bkb3duUGFuZWxWYXJpYW50IH0gZnJvbSAnLi4vLi4vZHJvcGRvd24tcGFuZWwnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb2xvciB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XHJcbmltcG9ydCB7IEZvcm1FbGVtZW50QXBwZWFyYW5jZSwgRm9ybUVsZW1lbnRWYXJpYW50IH0gZnJvbSAnLi4vLi4vdHlwZXMvdGhlbWluZy50eXBlcyc7XHJcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdXRpbGl0eS50eXBlcyc7XHJcbmltcG9ydCB7IEFSRF9EQVRFX0lOUFVUX0RFRkFVTFRTLCBBcmREYXRlSW5wdXREZWZhdWx0cyB9IGZyb20gJy4vZGF0ZS1pbnB1dC5kZWZhdWx0cyc7XHJcbmltcG9ydCB7XHJcbiAgQXJkRGF0ZUlucHV0QWNjZXB0QnV0dG9uc1RlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dENhbGVuZGFySWNvblRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dERheXNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkRGF0ZUlucHV0RGF5VGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkRGF0ZUlucHV0RmxvYXRpbmdNb250aFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dE1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmREYXRlSW5wdXRNb250aFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFN1ZmZpeFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFZhbHVlVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkRGF0ZUlucHV0V2Vla2RheVRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFllYXJzVmlld0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFllYXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxufSBmcm9tICcuL2RhdGUtaW5wdXQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtcclxuICBBcmREYXRlSW5wdXRBY2NlcHRCdXR0b25zQ29udGV4dCxcclxuICBBcmREYXRlSW5wdXREZXNlcmlhbGl6ZUZuLFxyXG4gIEFyZERhdGVJbnB1dE1pbk1heFN0cmF0ZWd5LFxyXG4gIEFyZERhdGVJbnB1dFNlcmlhbGl6ZUZuLFxyXG4gIEFyZERhdGVJbnB1dFZhbHVlQ29udGV4dCxcclxufSBmcm9tICcuL2RhdGUtaW5wdXQudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtZGF0ZS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXJkaXVtRGF0ZUlucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBfRm9ybUZpZWxkQ29tcG9uZW50QmFzZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IEFyZGl1bURhdGVJbnB1dENvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFyZGl1bURhdGVJbnB1dENvbXBvbmVudCBleHRlbmRzIF9Gb3JtRmllbGRDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IF9ERUZBVUxUUyE6IEFyZERhdGVJbnB1dERlZmF1bHRzO1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQVJEX0RBVEVfSU5QVVRfREVGQVVMVFMpIGRlZmF1bHRzOiBBcmREYXRlSW5wdXREZWZhdWx0cykge1xyXG4gICAgc3VwZXIoZGVmYXVsdHMpO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudmFsdWUoKTtcclxuICAgICAgdGhpcy5fZW1pdENoYW5nZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxTdHJhdGVneU9wdHMgPSBpbmplY3QoU2Nyb2xsU3RyYXRlZ3lPcHRpb25zKTtcclxuXHJcbiAgcmVhZG9ubHkgaW5wdXRBdHRycyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KHRoaXMuX0RFRkFVTFRTLmlucHV0QXR0cnMpO1xyXG5cclxuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4odGhpcy5fREVGQVVMVFMucGxhY2Vob2xkZXIpO1xyXG5cclxuICByZWFkb25seSBpbnB1dFJlYWRPbmx5ID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG4gIHJlYWRvbmx5IGNhbGVuZGFyRGlzYWJsZWQgPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcbiAgcmVhZG9ubHkgY2FsZW5kYXJIaWRkZW4gPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcblxyXG4gIC8vISBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvblxyXG4gIHJlYWRvbmx5IHNlcmlhbGl6ZUZuID0gaW5wdXQ8QXJkRGF0ZUlucHV0U2VyaWFsaXplRm4+KHRoaXMuX0RFRkFVTFRTLnNlcmlhbGl6ZUZuKTtcclxuICByZWFkb25seSBkZXNlcmlhbGl6ZUZuID0gaW5wdXQ8QXJkRGF0ZUlucHV0RGVzZXJpYWxpemVGbj4odGhpcy5fREVGQVVMVFMuZGVzZXJpYWxpemVGbik7XHJcblxyXG4gIC8vISBjb250cm9sIHZhbHVlIGFjY2Vzc29yXHJcbiAgcmVhZG9ubHkgdmFsdWUgPSBtb2RlbDxEYXRlIHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgZGF0ZUlucHV0VmFsdWUgPSBtb2RlbDxzdHJpbmc+KCcnKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF93YXNEYXRlSW5wdXRDaGFuZ2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2OiBEYXRlIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHRoaXMudmFsdWUuc2V0KHYpO1xyXG4gICAgfSBlbHNlIGlmICghaXNEZWZpbmVkKHYpKSB7XHJcbiAgICAgIHRoaXMudmFsdWUuc2V0KG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoYEFSRC1ORjAwODM6IDxhcmQtZGF0ZS1pbnB1dD4gd3JpdGVWYWx1ZSBleHBlY3RlZCBhIERhdGUgb3IgbnVsbCwgZ290IFwiJHt2fVwiLmApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vISBjaGFuZ2UgJiB0b3VjaCBldmVudCBlbWl0dGVyc1xyXG4gIHByb3RlY3RlZCBfZW1pdENoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlUmVnaXN0ZXJlZD8uKHRoaXMudmFsdWUoKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29uVG91Y2hlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZFJlZ2lzdGVyZWQ/LigpO1xyXG4gIH1cclxuXHJcbiAgLy8hIG91dHB1dCBldmVudHNcclxuICByZWFkb25seSBpc09wZW4gPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHJlYWRvbmx5IG9wZW5FdmVudCA9IG91dHB1dDx2b2lkPih7IGFsaWFzOiAnb3BlbicgfSk7XHJcbiAgcmVhZG9ubHkgY2xvc2VFdmVudCA9IG91dHB1dDx2b2lkPih7IGFsaWFzOiAnY2xvc2UnIH0pO1xyXG5cclxuICAvLyEgZGF0ZSBpbnB1dCBldmVudCBoYW5kbGVyc1xyXG4gIHJlYWRvbmx5IGRhdGVJbnB1dCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignZGF0ZUlucHV0Jyk7XHJcblxyXG4gIHJlYWRvbmx5IG1pbk1heFN0cmF0ZWd5ID0gaW5wdXQ8QXJkRGF0ZUlucHV0TWluTWF4U3RyYXRlZ3k+KHRoaXMuX0RFRkFVTFRTLm1pbk1heFN0cmF0ZWd5KTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNEYXRlSW5wdXRGb2N1c2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgb25EYXRlSW5wdXRJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHYgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgdGhpcy5kYXRlSW5wdXRWYWx1ZS5zZXQodik7XHJcbiAgfVxyXG4gIG9uRGF0ZUlucHV0Rm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Gb2N1cyhldmVudCk7XHJcbiAgICB0aGlzLl9pc0RhdGVJbnB1dEZvY3VzZWQuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5fd2FzRGF0ZUlucHV0Q2hhbmdlZC5zZXQoZmFsc2UpO1xyXG4gIH1cclxuICBvbkRhdGVJbnB1dEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMub25CbHVyKGV2ZW50KTtcclxuXHJcbiAgICB0aGlzLl9wcm9jZXNzRGF0ZUlucHV0VGV4dCh0aGlzLmRhdGVJbnB1dFZhbHVlKCkpO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNEYXRlSW5wdXRGb2N1c2VkKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcclxuXHJcbiAgICB0aGlzLl9pc0RhdGVJbnB1dEZvY3VzZWQuc2V0KGZhbHNlKTtcclxuICB9XHJcbiAgb25EYXRlSW5wdXRFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJykgcmV0dXJuO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIHRoaXMuYmx1cigpO1xyXG4gICAgdGhpcy5mb2N1cygpO1xyXG4gIH1cclxuICBwcml2YXRlIF9wcm9jZXNzRGF0ZUlucHV0VGV4dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0ZSA9IHRoaXMuZGVzZXJpYWxpemVGbigpKHZhbHVlLCB0aGlzLnZhbHVlKCkpO1xyXG5cclxuICAgIGlmICh0aGlzLm1pbk1heFN0cmF0ZWd5KCkgPT09IEFyZERhdGVJbnB1dE1pbk1heFN0cmF0ZWd5LkFkanVzdCAmJiBkYXRlKSB7XHJcbiAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluKCk7XHJcbiAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4KCk7XHJcblxyXG4gICAgICBpZiAobWluICYmIGRhdGUgPCBtaW4pIHtcclxuICAgICAgICBkYXRlID0gbmV3IERhdGUobWluKTtcclxuICAgICAgfSBlbHNlIGlmIChtYXggJiYgZGF0ZSA+IG1heCkge1xyXG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZShtYXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52YWx1ZS5zZXQoZGF0ZSk7XHJcbiAgICB0aGlzLmRhdGVJbnB1dFZhbHVlLnNldCh0aGlzLnNlcmlhbGl6ZUZuKCkoZGF0ZSkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXREYXRlSW5wdXRBdHRyaWJ1dGVzKCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRhdGVJbnB1dCgpIS5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICBhdXRvY29ycmVjdDogJ29mZicsXHJcbiAgICAgIGF1dG9jYXBpdGFsaXplOiAnb2ZmJyxcclxuICAgICAgYXV0b2NvbXBsZXRlOiAnb2ZmJyxcclxuICAgICAgLi4udGhpcy5pbnB1dEF0dHJzKCksXHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyEgY29tcHV0ZWQgcHJvcGVydGllc1xyXG4gIHJlYWRvbmx5IHNob3VsZERpc3BsYXlQbGFjZWhvbGRlciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICh0aGlzLl9pc0RhdGVJbnB1dEZvY3VzZWQoKSAmJiB0aGlzLmRhdGVJbnB1dFZhbHVlKCkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBpc051bGwodGhpcy52YWx1ZSgpKTtcclxuICB9KTtcclxuICByZWFkb25seSBzaG91bGREaXNwbGF5VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5faXNEYXRlSW5wdXRGb2N1c2VkKCkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlKCkgaW5zdGFuY2VvZiBEYXRlO1xyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IHNob3VsZERpc3BsYXlEYXRlSW5wdXQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gIXRoaXMuaW5wdXRSZWFkT25seSgpICYmICF0aGlzLnNob3VsZERpc3BsYXlWYWx1ZSgpICYmIHRoaXMuX2lzRGF0ZUlucHV0Rm9jdXNlZCgpO1xyXG4gIH0pO1xyXG5cclxuICAvLyEgYXBwZWFyYW5jZVxyXG4gIHJlYWRvbmx5IGFwcGVhcmFuY2UgPSBpbnB1dDxGb3JtRWxlbWVudEFwcGVhcmFuY2U+KHRoaXMuX0RFRkFVTFRTLmFwcGVhcmFuY2UpO1xyXG4gIHJlYWRvbmx5IHZhcmlhbnQgPSBpbnB1dDxGb3JtRWxlbWVudFZhcmlhbnQ+KHRoaXMuX0RFRkFVTFRTLnZhcmlhbnQpO1xyXG4gIHJlYWRvbmx5IGNvbG9yID0gaW5wdXQ8Q29tcG9uZW50Q29sb3I+KHRoaXMuX0RFRkFVTFRTLmNvbG9yKTtcclxuXHJcbiAgcmVhZG9ubHkgY29tcGFjdCA9IGlucHV0PGJvb2xlYW4sIGFueT4odGhpcy5fREVGQVVMVFMuY29tcGFjdCwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG5cclxuICByZWFkb25seSBuZ0NsYXNzZXMgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgW1xyXG4gICAgICAvL2FwcGVhcmFuY2UgYW5kIHZhcmlhbnQgaGFuZGxlZCBpbiBhcmQtZm9ybS1maWVsZC1mcmFtZSBjb21wb25lbnRcclxuICAgICAgLy9jb2xvciBoYW5kbGVkIGluIGFyZC1jYWxlbmRhciBjb21wb25lbnRcclxuICAgICAgdGhpcy5jb21wYWN0KCkgPyAnYXJkLWNvbXBhY3QnIDogJycsXHJcbiAgICAgIHRoaXMuaXNPcGVuKCkgPyAnYXJkLWRyb3Bkb3duLW9wZW4nIDogJycsXHJcbiAgICAgIHRoaXMuX2lzRGF0ZUlucHV0Rm9jdXNlZCgpID8gJ2FyZC1kYXRlLWlucHV0X19kYXRlLWlucHV0LWZvY3VzZWQnIDogJycsXHJcbiAgICBdLmpvaW4oJyAnKVxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGRyb3Bkb3duQXBwZWFyYW5jZSA9IGlucHV0PE51bGxhYmxlPERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlPj4odGhpcy5fREVGQVVMVFMuZHJvcGRvd25BcHBlYXJhbmNlKTtcclxuICByZWFkb25seSBkcm9wZG93bkFwcGVhcmFuY2VPckRlZmF1bHQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bkFwcGVhcmFuY2UoKSkgcmV0dXJuIHRoaXMuZHJvcGRvd25BcHBlYXJhbmNlKCkhO1xyXG4gICAgaWYgKHRoaXMuYXBwZWFyYW5jZSgpID09PSBGb3JtRWxlbWVudEFwcGVhcmFuY2UuT3V0bGluZWQpIHJldHVybiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZS5PdXRsaW5lZDtcclxuICAgIHJldHVybiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZS5SYWlzZWQ7XHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgZHJvcGRvd25WYXJpYW50ID0gaW5wdXQ8TnVsbGFibGU8RHJvcGRvd25QYW5lbFZhcmlhbnQ+Pih0aGlzLl9ERUZBVUxUUy5kcm9wZG93blZhcmlhbnQpO1xyXG4gIHJlYWRvbmx5IGRyb3Bkb3duVmFyaWFudE9yRGVmYXVsdCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duVmFyaWFudCgpKSByZXR1cm4gdGhpcy5kcm9wZG93blZhcmlhbnQoKSE7XHJcbiAgICBjb25zdCB2YXJpYW50ID0gdGhpcy52YXJpYW50KCk7XHJcbiAgICBpZiAodmFyaWFudCA9PT0gRm9ybUVsZW1lbnRWYXJpYW50LlBpbGwpIHJldHVybiBEcm9wZG93blBhbmVsVmFyaWFudC5Sb3VuZGVkO1xyXG4gICAgcmV0dXJuIHZhcmlhbnQ7XHJcbiAgfSk7XHJcblxyXG4gIC8vISBjYWxlbmRhciBhdHRyaWJ1dGVzXHJcbiAgcmVhZG9ubHkgYWN0aXZlVmlldyA9IG1vZGVsPEFyZENhbGVuZGFyVmlldz4odGhpcy5fREVGQVVMVFMuYWN0aXZlVmlldyk7XHJcbiAgcmVhZG9ubHkgYWN0aXZlWWVhciA9IG1vZGVsPG51bWJlcj4odGhpcy5fREVGQVVMVFMuYWN0aXZlWWVhcik7XHJcbiAgcmVhZG9ubHkgYWN0aXZlTW9udGggPSBtb2RlbDxudW1iZXI+KHRoaXMuX0RFRkFVTFRTLmFjdGl2ZU1vbnRoKTtcclxuXHJcbiAgcmVhZG9ubHkgZmlyc3RXZWVrZGF5ID0gaW5wdXQ8bnVtYmVyLCBhbnk+KHRoaXMuX0RFRkFVTFRTLmZpcnN0V2Vla2RheSwge1xyXG4gICAgdHJhbnNmb3JtOiB2ID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2LCB0aGlzLl9ERUZBVUxUUy5maXJzdFdlZWtkYXkpO1xyXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIG5ldyBFcnJvcihgQVJELU5GMDA4MUE6IFtmaXJzdFdlZWtkYXldIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBnb3QgXCIke3ZhbHVlfVwiLiBVc2luZyBkZWZhdWx0IHZhbHVlIGluc3RlYWQuYClcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA2KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYEFSRC1XQTAwODFCOiBbZmlyc3RXZWVrZGF5XSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiwgZ290IFwiJHt2YWx1ZX1cIi4gVXNpbmcgbW9kdWxvIG9wZXJhdG9yIHRvIGFkanVzdCB0aGUgdmFsdWUuYFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlICUgNztcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IG11bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllciA9IGlucHV0PG51bWJlciwgYW55Pih0aGlzLl9ERUZBVUxUUy5tdWx0aXBsZVllYXJQYWdlQ2hhbmdlTW9kaWZpZXIsIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMubXVsdGlwbGVZZWFyUGFnZUNoYW5nZU1vZGlmaWVyKTtcclxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQVJELU5GMDA4MjogW211bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllcl0gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdvdCBcIiR7dmFsdWV9XCIuIFVzaW5nIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gNTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBtaW4gPSBpbnB1dDxEYXRlIHwgbnVsbCwgYW55Pih0aGlzLl9ERUZBVUxUUy5taW4sIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZURhdGVQcm9wZXJ0eSh2LCB0aGlzLl9ERUZBVUxUUy5taW4pIH0pO1xyXG4gIHJlYWRvbmx5IG1heCA9IGlucHV0PERhdGUgfCBudWxsLCBhbnk+KHRoaXMuX0RFRkFVTFRTLm1heCwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlRGF0ZVByb3BlcnR5KHYsIHRoaXMuX0RFRkFVTFRTLm1heCkgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGZpbHRlciA9IGlucHV0PEFyZENhbGVuZGFyRmlsdGVyRm4gfCBudWxsPih0aGlzLl9ERUZBVUxUUy5maWx0ZXIpO1xyXG5cclxuICAvLyEgY2FsZW5kYXIgb3V0cHV0c1xyXG4gIHJlYWRvbmx5IHllYXJTZWxlY3QgPSBvdXRwdXQ8bnVtYmVyPigpO1xyXG4gIHJlYWRvbmx5IG1vbnRoU2VsZWN0ID0gb3V0cHV0PG51bWJlcj4oKTtcclxuXHJcbiAgLy8hIGNhbGVuZGFyIGNvbnRyb2xzXHJcbiAgcmVhZG9ubHkgdXNlQWNjZXB0QnV0dG9uVG9TZWxlY3QgPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcblxyXG4gIHByaXZhdGUgX3ZhbHVlVG9BY2NlcHQ6IERhdGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgb25DYWxlbmRhclNlbGVjdGVkQ2hhbmdlKGV2ZW50OiBEYXRlIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlQWNjZXB0QnV0dG9uVG9TZWxlY3QoKSkge1xyXG4gICAgICB0aGlzLl92YWx1ZVRvQWNjZXB0ID0gZXZlbnQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2FjY2VwdFNlbGVjdGVkRGF0ZShldmVudCEpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY2NlcHRTZWxlY3RlZERhdGUoZGF0ZTogRGF0ZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KGRhdGUpO1xyXG4gICAgdGhpcy5kYXRlSW5wdXRWYWx1ZS5zZXQodGhpcy5zZXJpYWxpemVGbigpKGRhdGUpKTtcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2FuY2VsQ2FsZW5kYXJTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBvbkFjY2VwdEJ1dHRvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYWNjZXB0U2VsZWN0ZWREYXRlKHRoaXMuX3ZhbHVlVG9BY2NlcHQpO1xyXG4gICAgdGhpcy5fdmFsdWVUb0FjY2VwdCA9IG51bGw7XHJcbiAgfVxyXG4gIG9uQ2FuY2VsQnV0dG9uQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jYW5jZWxDYWxlbmRhclNlbGVjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8hIGRyb3Bkb3duIG92ZXJsYXlcclxuICByZWFkb25seSBkcm9wZG93bkhvc3QgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdkcm9wZG93bkhvc3QnKTtcclxuICByZWFkb25seSBkcm9wZG93blRlbXBsYXRlID0gdmlld0NoaWxkLnJlcXVpcmVkPFRlbXBsYXRlUmVmPGFueT4+KCdkcm9wZG93blRlbXBsYXRlJyk7XHJcbiAgcmVhZG9ubHkgZHJvcGRvd25QYW5lbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxBcmRpdW1Ecm9wZG93blBhbmVsQ29tcG9uZW50PihBcmRpdW1Ecm9wZG93blBhbmVsQ29tcG9uZW50KTtcclxuXHJcbiAgcHJpdmF0ZSBkcm9wZG93bk92ZXJsYXk/OiBPdmVybGF5UmVmO1xyXG5cclxuICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcclxuICAgICAgLnBvc2l0aW9uKClcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5kcm9wZG93bkhvc3QoKSlcclxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pO1xyXG5cclxuICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogc3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLnNjcm9sbFN0cmF0ZWd5T3B0cy5ibG9jaygpLFxyXG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRyb3Bkb3duT3ZlcmxheSA9IHRoaXMub3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcclxuXHJcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5kcm9wZG93blRlbXBsYXRlKCksIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLmRyb3Bkb3duT3ZlcmxheS5hdHRhY2gocG9ydGFsKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVzdHJveU92ZXJsYXkoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25PdmVybGF5KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkuZGlzcG9zZSgpO1xyXG4gICAgZGVsZXRlIHRoaXMuZHJvcGRvd25PdmVybGF5O1xyXG4gIH1cclxuXHJcbiAgLy8hIGhvb2tzXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2V0RGF0ZUlucHV0QXR0cmlidXRlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8hIGRyb3Bkb3duIHN0YXRlIGhhbmRsZXJzXHJcbiAgb25HZW5lcmFsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICh0YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0ZUlucHV0KCkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuICBvbk91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm47XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgb25DYWxlbmRhckJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jYWxlbmRhckRpc2FibGVkKCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmNhbGVuZGFySGlkZGVuKCkpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZW4oKTtcclxuICB9XHJcbiAgb3BlbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5pc09wZW4oKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcclxuXHJcbiAgICB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcblxyXG4gICAgdGhpcy5vcGVuRXZlbnQuZW1pdCgpO1xyXG4gIH1cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5fZGVzdHJveU92ZXJsYXkoKTtcclxuXHJcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvLyEgdGVtcGxhdGVzXHJcbiAgcmVhZG9ubHkgdmFsdWVUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRWYWx1ZVRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBjYWxlbmRhckljb25UZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRDYWxlbmRhckljb25UZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgYWNjZXB0QnV0dG9uc1RlbXBsYXRlID0gY29udGVudENoaWxkKEFyZERhdGVJbnB1dEFjY2VwdEJ1dHRvbnNUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcblxyXG4gIHJlYWRvbmx5IHByZWZpeFRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZERhdGVJbnB1dFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBzdWZmaXhUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRTdWZmaXhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcblxyXG4gIHJlYWRvbmx5IGNhbGVuZGFyRGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXREYXlzVmlld0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBjYWxlbmRhclllYXJzVmlld0hlYWRlclRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZERhdGVJbnB1dFllYXJzVmlld0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBjYWxlbmRhck1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRNb250aHNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGNhbGVuZGFyV2Vla2RheVRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZERhdGVJbnB1dFdlZWtkYXlUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgY2FsZW5kYXJGbG9hdGluZ01vbnRoVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0RmxvYXRpbmdNb250aFRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBjYWxlbmRhclllYXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRZZWFyVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGNhbGVuZGFyTW9udGhUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRNb250aFRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBjYWxlbmRhckRheVRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZERhdGVJbnB1dERheVRlbXBsYXRlRGlyZWN0aXZlKTtcclxuXHJcbiAgLy8hIGNvbnRleHQgcHJvdmlkZXJzXHJcbiAgcmVhZG9ubHkgdmFsdWVDb250ZXh0ID0gY29tcHV0ZWQ8QXJkRGF0ZUlucHV0VmFsdWVDb250ZXh0PigoKSA9PiAoe1xyXG4gICAgJGltcGxpY2l0OiB0aGlzLnZhbHVlKCksXHJcbiAgfSkpO1xyXG5cclxuICByZWFkb25seSBhY2NlcHRCdXR0b25zQ29udGV4dCA9IGNvbXB1dGVkPEFyZERhdGVJbnB1dEFjY2VwdEJ1dHRvbnNDb250ZXh0PigoKSA9PiAoe1xyXG4gICAgJGltcGxpY2l0OiAoKSA9PiB0aGlzLm9uQWNjZXB0QnV0dG9uQ2xpY2soKSxcclxuICAgIGFjY2VwdDogKCkgPT4gdGhpcy5vbkFjY2VwdEJ1dHRvbkNsaWNrKCksXHJcbiAgICBjYW5jZWw6ICgpID0+IHRoaXMub25DYW5jZWxCdXR0b25DbGljaygpLFxyXG4gICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLmNhbGVuZGFyRGlzYWJsZWQoKSxcclxuICB9KSk7XHJcbn1cclxuIiwiPGFyZC1mb3JtLWZpZWxkLWZyYW1lXHJcbiAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZSgpXCJcclxuICBbdmFyaWFudF09XCJ2YXJpYW50KClcIlxyXG4gIFtjb21wYWN0XT1cImNvbXBhY3QoKVwiXHJcbiAgW2lzRm9jdXNlZF09XCJpc0ZvY3VzZWQoKVwiXHJcbiAgW2hhc0Vycm9yXT1cImhhc0Vycm9yKClcIlxyXG4gIFtpc1N1Y2Nlc3NdPVwiaXNTdWNjZXNzKClcIlxyXG4gIFtwcmVmaXhUZW1wbGF0ZV09XCJwcmVmaXhUZW1wbGF0ZSgpPy50ZW1wbGF0ZVwiXHJcbiAgW3N1ZmZpeFRlbXBsYXRlXT1cInN1ZmZpeFRlbXBsYXRlKCk/LnRlbXBsYXRlXCJcclxuPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiYXJkLWRhdGUtaW5wdXRcIlxyXG4gICAgI2Ryb3Bkb3duSG9zdFxyXG4gICAgKGNsaWNrKT1cIm9uR2VuZXJhbENsaWNrKCRldmVudClcIlxyXG4gICAgW2NsYXNzLmFyZC1oYXMtdmFsdWVdPVwiISF2YWx1ZSgpXCJcclxuICAgIFtuZ0NsYXNzXT1cIm5nQ2xhc3NlcygpXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJkLWRhdGUtaW5wdXRfX3ZhbHVlLWNvbnRhaW5lciBhcmQtaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImFyZC1kYXRlLWlucHV0X19wbGFjZWhvbGRlciBhcmQtcGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5hcmQtZGF0ZS1pbnB1dF9fcGxhY2Vob2xkZXItaGlkZGVuXT1cIiFzaG91bGREaXNwbGF5UGxhY2Vob2xkZXIoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBwbGFjZWhvbGRlcigpIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJhcmQtZGF0ZS1pbnB1dF9fdmFsdWVcIlxyXG4gICAgICAgIFtjbGFzcy5hcmQtZGF0ZS1pbnB1dF9fdmFsdWUtaGlkZGVuXT1cIiFzaG91bGREaXNwbGF5VmFsdWUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICNkZWZhdWx0VmFsdWVUZW1wbGF0ZVxyXG4gICAgICAgICAgbGV0LWRhdGVcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBzZXJpYWxpemVGbigpKGRhdGUpIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ2YWx1ZVRlbXBsYXRlKCk/LnRlbXBsYXRlIHx8IGRlZmF1bHRWYWx1ZVRlbXBsYXRlXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ2YWx1ZUNvbnRleHQoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImFyZC1kYXRlLWlucHV0X19pbnB1dC1jb250YWluZXJcIlxyXG4gICAgICAgIHJvbGU9XCJjb21ib2JveFwiXHJcbiAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuKClcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtb3duc109XCJpc09wZW4oKSA/IGh0bWxJZCgpIDogbnVsbFwiXHJcbiAgICAgICAgW2NsYXNzLmFyZC1kYXRlLWlucHV0X19pbnB1dC1jb250YWluZXItaGlkZGVuXT1cIiFzaG91bGREaXNwbGF5RGF0ZUlucHV0KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAjZGF0ZUlucHV0XHJcbiAgICAgICAgICAjZm9jdXNhYmxlRWxlbWVudFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJhcmQtZGF0ZS1pbnB1dF9faW5wdXRcIlxyXG4gICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiZGF0ZUlucHV0VmFsdWUoKVwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlzT3BlbigpID8gaHRtbElkKCkgOiBudWxsXCJcclxuICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dElucHV0KCRldmVudClcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRGF0ZUlucHV0Rm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoYmx1cik9XCJvbkRhdGVJbnB1dEJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbkRhdGVJbnB1dEVudGVyKCRldmVudClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmICghY2FsZW5kYXJIaWRkZW4oKSkge1xyXG4gICAgPGFyZC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cIm5vbmVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiY2FsZW5kYXJEaXNhYmxlZCgpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ2FsZW5kYXJCdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgI2RlZmF1bHRDYWxlbmRhckljb25UZW1wbGF0ZVxyXG4gICAgICAgIGxldC1kYXRlXHJcbiAgICAgID5cclxuICAgICAgICA8YXJkLWljb24gZmlsbGVkPnRvZGF5PC9hcmQtaWNvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjYWxlbmRhckljb25UZW1wbGF0ZSgpPy50ZW1wbGF0ZSB8fCBkZWZhdWx0Q2FsZW5kYXJJY29uVGVtcGxhdGVcIiAvPlxyXG4gICAgPC9hcmQtaWNvbi1idXR0b24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvYXJkLWZvcm0tZmllbGQtZnJhbWU+XHJcblxyXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duVGVtcGxhdGU+XHJcbiAgPGFyZC1kcm9wZG93bi1wYW5lbFxyXG4gICAgY2xhc3M9XCJhcmQtZHJvcGRvd24tcGFuZWwgYXJkLWRhdGUtaW5wdXRfX2Ryb3Bkb3duLXBhbmVsXCJcclxuICAgIFthcHBlYXJhbmNlXT1cImRyb3Bkb3duQXBwZWFyYW5jZU9yRGVmYXVsdCgpXCJcclxuICAgIFt2YXJpYW50XT1cImRyb3Bkb3duVmFyaWFudE9yRGVmYXVsdCgpXCJcclxuICAgIFtpc09wZW5dPVwidHJ1ZVwiXHJcbiAgICBbcGFuZWxJZF09XCJodG1sSWQoKVwiXHJcbiAgICBbY29tcGFjdF09XCJjb21wYWN0KClcIlxyXG4gICAgKGFyZENsaWNrT3V0c2lkZSk9XCJvbk91dHNpZGVDbGljaygkZXZlbnQpXCJcclxuICA+XHJcbiAgICA8YXJkLWNhbGVuZGFyXHJcbiAgICAgIGNsYXNzPVwiYXJkLWRhdGUtaW5wdXRfX2NhbGVuZGFyXCJcclxuICAgICAgWyhhY3RpdmVNb250aCldPVwiYWN0aXZlTW9udGhcIlxyXG4gICAgICBbKGFjdGl2ZVllYXIpXT1cImFjdGl2ZVllYXJcIlxyXG4gICAgICBbKGFjdGl2ZVZpZXcpXT1cImFjdGl2ZVZpZXdcIlxyXG4gICAgICBbZmlyc3RXZWVrZGF5XT1cImZpcnN0V2Vla2RheSgpXCJcclxuICAgICAgW21pbl09XCJtaW4oKVwiXHJcbiAgICAgIFttYXhdPVwibWF4KClcIlxyXG4gICAgICBhdXRvRm9jdXNcclxuICAgICAgW211bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllcl09XCJtdWx0aXBsZVllYXJQYWdlQ2hhbmdlTW9kaWZpZXIoKVwiXHJcbiAgICAgIFtjb2xvcl09XCJjb2xvcigpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgY2FsZW5kYXJEaXNhYmxlZCgpXCJcclxuICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4KClcIlxyXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25DYWxlbmRhclNlbGVjdGVkQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoeWVhclNlbGVjdCk9XCJ5ZWFyU2VsZWN0LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChtb250aFNlbGVjdCk9XCJtb250aFNlbGVjdC5lbWl0KCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICBfYXJkLXRtcC1yZXBvc2l0b3J5XHJcbiAgICAgICAgW2RheXNWaWV3SGVhZGVyVG1wXT1cImNhbGVuZGFyRGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZSgpXCJcclxuICAgICAgICBbeWVhcnNWaWV3SGVhZGVyVG1wXT1cImNhbGVuZGFyWWVhcnNWaWV3SGVhZGVyVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgW21vbnRoc1ZpZXdIZWFkZXJUbXBdPVwiY2FsZW5kYXJNb250aHNWaWV3SGVhZGVyVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgW3dlZWtkYXlUbXBdPVwiY2FsZW5kYXJXZWVrZGF5VGVtcGxhdGUoKVwiXHJcbiAgICAgICAgW2Zsb2F0aW5nTW9udGhUbXBdPVwiY2FsZW5kYXJGbG9hdGluZ01vbnRoVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgW3llYXJUbXBdPVwiY2FsZW5kYXJZZWFyVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgW21vbnRoVG1wXT1cImNhbGVuZGFyTW9udGhUZW1wbGF0ZSgpXCJcclxuICAgICAgICBbZGF5VG1wXT1cImNhbGVuZGFyRGF5VGVtcGxhdGUoKVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2FyZC1jYWxlbmRhcj5cclxuICAgIEBpZiAodXNlQWNjZXB0QnV0dG9uVG9TZWxlY3QoKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImFyZC1kYXRlLWlucHV0X19hY2NlcHQtYnV0dG9ucy1jb250YWluZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgI2RlZmF1bHRBY2NlcHRCdXR0b25zVGVtcGxhdGVcclxuICAgICAgICBsZXQtZGF0ZVxyXG4gICAgICA+XHJcbiAgICAgICAge3sgc2VyaWFsaXplRm4oKShkYXRlKSB9fVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWNjZXB0QnV0dG9uc1RlbXBsYXRlKCk/LnRlbXBsYXRlIHx8IGRlZmF1bHRBY2NlcHRCdXR0b25zVGVtcGxhdGVcIlxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJhY2NlcHRCdXR0b25zQ29udGV4dCgpXCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvYXJkLWRyb3Bkb3duLXBhbmVsPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
375
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0cy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFjLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWpG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LEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDO2dCQUN2RCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLHNCQUFzQjtnQkFDL0IsV0FBVyxFQUFFLHdCQUF3QjthQUN0QztTQUNGLHFFQXNXcUMsa0NBQWtDLHVHQUMzQix5Q0FBeUMsd0dBQ3hDLDBDQUEwQyxpR0FFakQsbUNBQW1DLGlHQUNuQyxtQ0FBbUMsaUhBRW5CLDJDQUEyQyxrSEFDMUMsNENBQTRDLG1IQUMzQyw2Q0FBNkMsMEdBQ3RELG9DQUFvQyxnSEFDOUIsMENBQTBDLHVHQUNuRCxpQ0FBaUMsd0dBQ2hDLGtDQUFrQyxzR0FDcEMsZ0NBQWdDLDhiQXJIRiw0QkFBNEIsdUZDeFV4Ryw0ekpBNElBOzs0RkRqRWEsd0JBQXdCO2tCQWxCcEMsU0FBUzsrQkFDRSxnQkFBZ0IsaUJBR1gsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLHNCQUFzQjs0QkFDL0IsV0FBVywwQkFBMEI7eUJBQ3RDO3FCQUNGOzswQkFJWSxNQUFNOzJCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYsIFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBjb250ZW50Q2hpbGQsXHJcbiAgZWZmZWN0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbmplY3QsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIG1vZGVsLFxyXG4gIE9uRGVzdHJveSxcclxuICBvdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIHZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlRGF0ZVByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0BhcmRpdW0tdWkvZGV2a2l0JztcclxuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc051bGwgfSBmcm9tICdzaW1wbGUtYm9vbCc7XHJcbmltcG9ydCB7IF9Gb3JtRmllbGRDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vX2ludGVybmFsL2Zvcm0tZmllbGQtY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXJkQ2FsZW5kYXJGaWx0ZXJGbiwgQXJkQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXMnO1xyXG5pbXBvcnQgeyBBcmRpdW1Ecm9wZG93blBhbmVsQ29tcG9uZW50LCBEcm9wZG93blBhbmVsQXBwZWFyYW5jZSwgRHJvcGRvd25QYW5lbFZhcmlhbnQgfSBmcm9tICcuLi8uLi9kcm9wZG93bi1wYW5lbCc7XHJcbmltcG9ydCB7IEFSRF9GT1JNX0ZJRUxEX0NPTlRST0wgfSBmcm9tICcuLi8uLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtY2hpbGQudG9rZW4nO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb2xvciB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XHJcbmltcG9ydCB7IEZvcm1FbGVtZW50QXBwZWFyYW5jZSwgRm9ybUVsZW1lbnRWYXJpYW50IH0gZnJvbSAnLi4vLi4vdHlwZXMvdGhlbWluZy50eXBlcyc7XHJcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdXRpbGl0eS50eXBlcyc7XHJcbmltcG9ydCB7IEFSRF9EQVRFX0lOUFVUX0RFRkFVTFRTLCBBcmREYXRlSW5wdXREZWZhdWx0cyB9IGZyb20gJy4vZGF0ZS1pbnB1dC5kZWZhdWx0cyc7XHJcbmltcG9ydCB7XHJcbiAgQXJkRGF0ZUlucHV0QWNjZXB0QnV0dG9uc1RlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dENhbGVuZGFySWNvblRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dERheXNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkRGF0ZUlucHV0RGF5VGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkRGF0ZUlucHV0RmxvYXRpbmdNb250aFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dE1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmREYXRlSW5wdXRNb250aFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFN1ZmZpeFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFZhbHVlVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkRGF0ZUlucHV0V2Vla2RheVRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFllYXJzVmlld0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZERhdGVJbnB1dFllYXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxufSBmcm9tICcuL2RhdGUtaW5wdXQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtcclxuICBBcmREYXRlSW5wdXRBY2NlcHRCdXR0b25zQ29udGV4dCxcclxuICBBcmREYXRlSW5wdXREZXNlcmlhbGl6ZUZuLFxyXG4gIEFyZERhdGVJbnB1dE1pbk1heFN0cmF0ZWd5LFxyXG4gIEFyZERhdGVJbnB1dFNlcmlhbGl6ZUZuLFxyXG4gIEFyZERhdGVJbnB1dFZhbHVlQ29udGV4dCxcclxufSBmcm9tICcuL2RhdGUtaW5wdXQudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcmQtZGF0ZS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXJkaXVtRGF0ZUlucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBBUkRfRk9STV9GSUVMRF9DT05UUk9MLFxyXG4gICAgICB1c2VFeGlzdGluZzogQXJkaXVtRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJkaXVtRGF0ZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgX0Zvcm1GaWVsZENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgX0RFRkFVTFRTITogQXJkRGF0ZUlucHV0RGVmYXVsdHM7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChBUkRfREFURV9JTlBVVF9ERUZBVUxUUykgZGVmYXVsdHM6IEFyZERhdGVJbnB1dERlZmF1bHRzKSB7XHJcbiAgICBzdXBlcihkZWZhdWx0cyk7XHJcblxyXG4gICAgZWZmZWN0KFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLl9zZXJpYWxpemVWYWx1ZUludG9EYXRlSW5wdXQoKTtcclxuICAgICAgfSxcclxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsU3RyYXRlZ3lPcHRzID0gaW5qZWN0KFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyk7XHJcblxyXG4gIHJlYWRvbmx5IGlucHV0QXR0cnMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBhbnk+Pih0aGlzLl9ERUZBVUxUUy5pbnB1dEF0dHJzKTtcclxuXHJcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KHRoaXMuX0RFRkFVTFRTLnBsYWNlaG9sZGVyKTtcclxuXHJcbiAgcmVhZG9ubHkgaW5wdXRSZWFkT25seSA9IGlucHV0PGJvb2xlYW4sIGFueT4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcclxuICByZWFkb25seSBjYWxlbmRhckRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG4gIHJlYWRvbmx5IGNhbGVuZGFySGlkZGVuID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG5cclxuICAvLyEgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb25cclxuICByZWFkb25seSBzZXJpYWxpemVGbiA9IGlucHV0PEFyZERhdGVJbnB1dFNlcmlhbGl6ZUZuPih0aGlzLl9ERUZBVUxUUy5zZXJpYWxpemVGbik7XHJcbiAgcmVhZG9ubHkgZGVzZXJpYWxpemVGbiA9IGlucHV0PEFyZERhdGVJbnB1dERlc2VyaWFsaXplRm4+KHRoaXMuX0RFRkFVTFRTLmRlc2VyaWFsaXplRm4pO1xyXG5cclxuICAvLyEgY29udHJvbCB2YWx1ZSBhY2Nlc3NvclxyXG4gIHJlYWRvbmx5IHZhbHVlID0gbW9kZWw8RGF0ZSB8IG51bGw+KG51bGwpO1xyXG4gIHJlYWRvbmx5IGRhdGVJbnB1dFZhbHVlID0gbW9kZWw8c3RyaW5nPignJyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfd2FzRGF0ZUlucHV0Q2hhbmdlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHdyaXRlVmFsdWUodjogRGF0ZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICB0aGlzLnZhbHVlLnNldCh2KTtcclxuICAgIH0gZWxzZSBpZiAoIWlzRGVmaW5lZCh2KSkge1xyXG4gICAgICB0aGlzLnZhbHVlLnNldChudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGBBUkQtTkYwMDgzOiA8YXJkLWRhdGUtaW5wdXQ+IHdyaXRlVmFsdWUgZXhwZWN0ZWQgYSBEYXRlIG9yIG51bGwsIGdvdCBcIiR7dn1cIi5gKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyEgY2hhbmdlICYgdG91Y2ggZXZlbnQgZW1pdHRlcnNcclxuICBwcm90ZWN0ZWQgX2VtaXRDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZVJlZ2lzdGVyZWQ/Lih0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9vblRvdWNoZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWRSZWdpc3RlcmVkPy4oKTtcclxuICB9XHJcblxyXG4gIC8vISBvdXRwdXQgZXZlbnRzXHJcbiAgcmVhZG9ubHkgaXNPcGVuID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICByZWFkb25seSBvcGVuRXZlbnQgPSBvdXRwdXQ8dm9pZD4oeyBhbGlhczogJ29wZW4nIH0pO1xyXG4gIHJlYWRvbmx5IGNsb3NlRXZlbnQgPSBvdXRwdXQ8dm9pZD4oeyBhbGlhczogJ2Nsb3NlJyB9KTtcclxuXHJcbiAgLy8hIGRhdGUgaW5wdXQgZXZlbnQgaGFuZGxlcnNcclxuICByZWFkb25seSBkYXRlSW5wdXQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2RhdGVJbnB1dCcpO1xyXG5cclxuICByZWFkb25seSBtaW5NYXhTdHJhdGVneSA9IGlucHV0PEFyZERhdGVJbnB1dE1pbk1heFN0cmF0ZWd5Pih0aGlzLl9ERUZBVUxUUy5taW5NYXhTdHJhdGVneSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRGF0ZUlucHV0Rm9jdXNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIG9uRGF0ZUlucHV0SW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB2ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcclxuICAgIHRoaXMuZGF0ZUlucHV0VmFsdWUuc2V0KHYpO1xyXG4gIH1cclxuICBvbkRhdGVJbnB1dEZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uRm9jdXMoZXZlbnQpO1xyXG4gICAgdGhpcy5faXNEYXRlSW5wdXRGb2N1c2VkLnNldCh0cnVlKTtcclxuICAgIHRoaXMuX3dhc0RhdGVJbnB1dENoYW5nZWQuc2V0KGZhbHNlKTtcclxuICB9XHJcbiAgb25EYXRlSW5wdXRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQmx1cihldmVudCk7XHJcblxyXG4gICAgdGhpcy5fcHJvY2Vzc0RhdGVJbnB1dFRleHQodGhpcy5kYXRlSW5wdXRWYWx1ZSgpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzRGF0ZUlucHV0Rm9jdXNlZCgpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcblxyXG4gICAgdGhpcy5faXNEYXRlSW5wdXRGb2N1c2VkLnNldChmYWxzZSk7XHJcbiAgfVxyXG4gIG9uRGF0ZUlucHV0RW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB0aGlzLmJsdXIoKTtcclxuICAgIHRoaXMuZm9jdXMoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcHJvY2Vzc0RhdGVJbnB1dFRleHQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGUgPSB0aGlzLmRlc2VyaWFsaXplRm4oKSh2YWx1ZSwgdGhpcy52YWx1ZSgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5taW5NYXhTdHJhdGVneSgpID09PSBBcmREYXRlSW5wdXRNaW5NYXhTdHJhdGVneS5BZGp1c3QgJiYgZGF0ZSkge1xyXG4gICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xyXG4gICAgICBjb25zdCBtYXggPSB0aGlzLm1heCgpO1xyXG5cclxuICAgICAgaWYgKG1pbiAmJiBkYXRlIDwgbWluKSB7XHJcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKG1pbik7XHJcbiAgICAgIH0gZWxzZSBpZiAobWF4ICYmIGRhdGUgPiBtYXgpIHtcclxuICAgICAgICBkYXRlID0gbmV3IERhdGUobWF4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmFsdWUuc2V0KGRhdGUpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXREYXRlSW5wdXRBdHRyaWJ1dGVzKCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRhdGVJbnB1dCgpIS5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICBhdXRvY29ycmVjdDogJ29mZicsXHJcbiAgICAgIGF1dG9jYXBpdGFsaXplOiAnb2ZmJyxcclxuICAgICAgYXV0b2NvbXBsZXRlOiAnb2ZmJyxcclxuICAgICAgLi4udGhpcy5pbnB1dEF0dHJzKCksXHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyEgY29tcHV0ZWQgcHJvcGVydGllc1xyXG4gIHJlYWRvbmx5IHNob3VsZERpc3BsYXlQbGFjZWhvbGRlciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICh0aGlzLl9pc0RhdGVJbnB1dEZvY3VzZWQoKSAmJiB0aGlzLmRhdGVJbnB1dFZhbHVlKCkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBpc051bGwodGhpcy52YWx1ZSgpKTtcclxuICB9KTtcclxuICByZWFkb25seSBzaG91bGREaXNwbGF5VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5faXNEYXRlSW5wdXRGb2N1c2VkKCkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlKCkgaW5zdGFuY2VvZiBEYXRlO1xyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IHNob3VsZERpc3BsYXlEYXRlSW5wdXQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gIXRoaXMuaW5wdXRSZWFkT25seSgpICYmICF0aGlzLnNob3VsZERpc3BsYXlWYWx1ZSgpICYmIHRoaXMuX2lzRGF0ZUlucHV0Rm9jdXNlZCgpO1xyXG4gIH0pO1xyXG5cclxuICAvLyEgYXBwZWFyYW5jZVxyXG4gIHJlYWRvbmx5IGFwcGVhcmFuY2UgPSBpbnB1dDxGb3JtRWxlbWVudEFwcGVhcmFuY2U+KHRoaXMuX0RFRkFVTFRTLmFwcGVhcmFuY2UpO1xyXG4gIHJlYWRvbmx5IHZhcmlhbnQgPSBpbnB1dDxGb3JtRWxlbWVudFZhcmlhbnQ+KHRoaXMuX0RFRkFVTFRTLnZhcmlhbnQpO1xyXG4gIHJlYWRvbmx5IGNvbG9yID0gaW5wdXQ8Q29tcG9uZW50Q29sb3I+KHRoaXMuX0RFRkFVTFRTLmNvbG9yKTtcclxuXHJcbiAgcmVhZG9ubHkgY29tcGFjdCA9IGlucHV0PGJvb2xlYW4sIGFueT4odGhpcy5fREVGQVVMVFMuY29tcGFjdCwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG5cclxuICByZWFkb25seSBuZ0NsYXNzZXMgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgW1xyXG4gICAgICAvL2FwcGVhcmFuY2UgYW5kIHZhcmlhbnQgaGFuZGxlZCBpbiBhcmQtZm9ybS1maWVsZC1mcmFtZSBjb21wb25lbnRcclxuICAgICAgLy9jb2xvciBoYW5kbGVkIGluIGFyZC1jYWxlbmRhciBjb21wb25lbnRcclxuICAgICAgdGhpcy5jb21wYWN0KCkgPyAnYXJkLWNvbXBhY3QnIDogJycsXHJcbiAgICAgIHRoaXMuaXNPcGVuKCkgPyAnYXJkLWRyb3Bkb3duLW9wZW4nIDogJycsXHJcbiAgICAgIHRoaXMuX2lzRGF0ZUlucHV0Rm9jdXNlZCgpID8gJ2FyZC1kYXRlLWlucHV0X19kYXRlLWlucHV0LWZvY3VzZWQnIDogJycsXHJcbiAgICBdLmpvaW4oJyAnKVxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IGRyb3Bkb3duQXBwZWFyYW5jZSA9IGlucHV0PE51bGxhYmxlPERyb3Bkb3duUGFuZWxBcHBlYXJhbmNlPj4odGhpcy5fREVGQVVMVFMuZHJvcGRvd25BcHBlYXJhbmNlKTtcclxuICByZWFkb25seSBkcm9wZG93bkFwcGVhcmFuY2VPckRlZmF1bHQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bkFwcGVhcmFuY2UoKSkgcmV0dXJuIHRoaXMuZHJvcGRvd25BcHBlYXJhbmNlKCkhO1xyXG4gICAgaWYgKHRoaXMuYXBwZWFyYW5jZSgpID09PSBGb3JtRWxlbWVudEFwcGVhcmFuY2UuT3V0bGluZWQpIHJldHVybiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZS5PdXRsaW5lZDtcclxuICAgIHJldHVybiBEcm9wZG93blBhbmVsQXBwZWFyYW5jZS5SYWlzZWQ7XHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgZHJvcGRvd25WYXJpYW50ID0gaW5wdXQ8TnVsbGFibGU8RHJvcGRvd25QYW5lbFZhcmlhbnQ+Pih0aGlzLl9ERUZBVUxUUy5kcm9wZG93blZhcmlhbnQpO1xyXG4gIHJlYWRvbmx5IGRyb3Bkb3duVmFyaWFudE9yRGVmYXVsdCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duVmFyaWFudCgpKSByZXR1cm4gdGhpcy5kcm9wZG93blZhcmlhbnQoKSE7XHJcbiAgICBjb25zdCB2YXJpYW50ID0gdGhpcy52YXJpYW50KCk7XHJcbiAgICBpZiAodmFyaWFudCA9PT0gRm9ybUVsZW1lbnRWYXJpYW50LlBpbGwpIHJldHVybiBEcm9wZG93blBhbmVsVmFyaWFudC5Sb3VuZGVkO1xyXG4gICAgcmV0dXJuIHZhcmlhbnQ7XHJcbiAgfSk7XHJcblxyXG4gIC8vISBjYWxlbmRhciBhdHRyaWJ1dGVzXHJcbiAgcmVhZG9ubHkgYWN0aXZlVmlldyA9IG1vZGVsPEFyZENhbGVuZGFyVmlldz4odGhpcy5fREVGQVVMVFMuYWN0aXZlVmlldyk7XHJcbiAgcmVhZG9ubHkgYWN0aXZlWWVhciA9IG1vZGVsPG51bWJlcj4odGhpcy5fREVGQVVMVFMuYWN0aXZlWWVhcik7XHJcbiAgcmVhZG9ubHkgYWN0aXZlTW9udGggPSBtb2RlbDxudW1iZXI+KHRoaXMuX0RFRkFVTFRTLmFjdGl2ZU1vbnRoKTtcclxuXHJcbiAgcmVhZG9ubHkgZmlyc3RXZWVrZGF5ID0gaW5wdXQ8bnVtYmVyLCBhbnk+KHRoaXMuX0RFRkFVTFRTLmZpcnN0V2Vla2RheSwge1xyXG4gICAgdHJhbnNmb3JtOiB2ID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2LCB0aGlzLl9ERUZBVUxUUy5maXJzdFdlZWtkYXkpO1xyXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIG5ldyBFcnJvcihgQVJELU5GMDA4MUE6IFtmaXJzdFdlZWtkYXldIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBnb3QgXCIke3ZhbHVlfVwiLiBVc2luZyBkZWZhdWx0IHZhbHVlIGluc3RlYWQuYClcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA2KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYEFSRC1XQTAwODFCOiBbZmlyc3RXZWVrZGF5XSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiwgZ290IFwiJHt2YWx1ZX1cIi4gVXNpbmcgbW9kdWxvIG9wZXJhdG9yIHRvIGFkanVzdCB0aGUgdmFsdWUuYFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlICUgNztcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IG11bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllciA9IGlucHV0PG51bWJlciwgYW55Pih0aGlzLl9ERUZBVUxUUy5tdWx0aXBsZVllYXJQYWdlQ2hhbmdlTW9kaWZpZXIsIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMubXVsdGlwbGVZZWFyUGFnZUNoYW5nZU1vZGlmaWVyKTtcclxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQVJELU5GMDA4MjogW211bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllcl0gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdvdCBcIiR7dmFsdWV9XCIuIFVzaW5nIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gNTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBtaW4gPSBpbnB1dDxEYXRlIHwgbnVsbCwgYW55Pih0aGlzLl9ERUZBVUxUUy5taW4sIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZURhdGVQcm9wZXJ0eSh2LCB0aGlzLl9ERUZBVUxUUy5taW4pIH0pO1xyXG4gIHJlYWRvbmx5IG1heCA9IGlucHV0PERhdGUgfCBudWxsLCBhbnk+KHRoaXMuX0RFRkFVTFRTLm1heCwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlRGF0ZVByb3BlcnR5KHYsIHRoaXMuX0RFRkFVTFRTLm1heCkgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGZpbHRlciA9IGlucHV0PEFyZENhbGVuZGFyRmlsdGVyRm4gfCBudWxsPih0aGlzLl9ERUZBVUxUUy5maWx0ZXIpO1xyXG5cclxuICAvLyEgY2FsZW5kYXIgb3V0cHV0c1xyXG4gIHJlYWRvbmx5IHllYXJTZWxlY3QgPSBvdXRwdXQ8bnVtYmVyPigpO1xyXG4gIHJlYWRvbmx5IG1vbnRoU2VsZWN0ID0gb3V0cHV0PG51bWJlcj4oKTtcclxuXHJcbiAgLy8hIGNhbGVuZGFyIGNvbnRyb2xzXHJcbiAgcmVhZG9ubHkgdXNlQWNjZXB0QnV0dG9uVG9TZWxlY3QgPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcblxyXG4gIHByaXZhdGUgX3ZhbHVlVG9BY2NlcHQ6IERhdGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgb25DYWxlbmRhclNlbGVjdGVkQ2hhbmdlKGV2ZW50OiBEYXRlIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlQWNjZXB0QnV0dG9uVG9TZWxlY3QoKSkge1xyXG4gICAgICB0aGlzLl92YWx1ZVRvQWNjZXB0ID0gZXZlbnQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2FjY2VwdFNlbGVjdGVkRGF0ZShldmVudCEpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY2NlcHRTZWxlY3RlZERhdGUoZGF0ZTogRGF0ZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KGRhdGUpO1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXJpYWxpemVWYWx1ZUludG9EYXRlSW5wdXQoKSB7XHJcbiAgICB0aGlzLmRhdGVJbnB1dFZhbHVlLnNldCh0aGlzLnNlcmlhbGl6ZUZuKCkodGhpcy52YWx1ZSgpKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NhbmNlbENhbGVuZGFyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BY2NlcHRCdXR0b25DbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FjY2VwdFNlbGVjdGVkRGF0ZSh0aGlzLl92YWx1ZVRvQWNjZXB0KTtcclxuICAgIHRoaXMuX3ZhbHVlVG9BY2NlcHQgPSBudWxsO1xyXG4gIH1cclxuICBvbkNhbmNlbEJ1dHRvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FuY2VsQ2FsZW5kYXJTZWxlY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIC8vISBkcm9wZG93biBvdmVybGF5XHJcbiAgcmVhZG9ubHkgZHJvcGRvd25Ib3N0ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZHJvcGRvd25Ib3N0Jyk7XHJcbiAgcmVhZG9ubHkgZHJvcGRvd25UZW1wbGF0ZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxhbnk+PignZHJvcGRvd25UZW1wbGF0ZScpO1xyXG4gIHJlYWRvbmx5IGRyb3Bkb3duUGFuZWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8QXJkaXVtRHJvcGRvd25QYW5lbENvbXBvbmVudD4oQXJkaXVtRHJvcGRvd25QYW5lbENvbXBvbmVudCk7XHJcblxyXG4gIHByaXZhdGUgZHJvcGRvd25PdmVybGF5PzogT3ZlcmxheVJlZjtcclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XHJcbiAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZHJvcGRvd25Ib3N0KCkpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdKTtcclxuXHJcbiAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHN0cmF0ZWd5LFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5zY3JvbGxTdHJhdGVneU9wdHMuYmxvY2soKSxcclxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKGNvbmZpZyk7XHJcblxyXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuZHJvcGRvd25UZW1wbGF0ZSgpLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xyXG4gICAgdGhpcy5kcm9wZG93bk92ZXJsYXkuYXR0YWNoKHBvcnRhbCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duT3ZlcmxheSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZHJvcGRvd25PdmVybGF5LmRpc3Bvc2UoKTtcclxuICAgIGRlbGV0ZSB0aGlzLmRyb3Bkb3duT3ZlcmxheTtcclxuICB9XHJcblxyXG4gIC8vISBob29rc1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NldERhdGVJbnB1dEF0dHJpYnV0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8vISBkcm9wZG93biBzdGF0ZSBoYW5kbGVyc1xyXG4gIG9uR2VuZXJhbENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAodGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGVJbnB1dCgpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcbiAgb25PdXRzaWRlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG4gIG9uQ2FsZW5kYXJCdXR0b25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJEaXNhYmxlZCgpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5jYWxlbmRhckhpZGRlbigpKSByZXR1cm47XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgdGhpcy50b2dnbGUoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcGVuKCk7XHJcbiAgfVxyXG4gIG9wZW4oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMuaXNPcGVuKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzT3Blbi5zZXQodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlT3ZlcmxheSgpO1xyXG4gICAgdGhpcy5mb2N1cygpO1xyXG5cclxuICAgIHRoaXMub3BlbkV2ZW50LmVtaXQoKTtcclxuICB9XHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCk7XHJcblxyXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHRlbXBsYXRlc1xyXG4gIHJlYWRvbmx5IHZhbHVlVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0VmFsdWVUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgY2FsZW5kYXJJY29uVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0Q2FsZW5kYXJJY29uVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGFjY2VwdEJ1dHRvbnNUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRBY2NlcHRCdXR0b25zVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG5cclxuICByZWFkb25seSBwcmVmaXhUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRQcmVmaXhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgc3VmZml4VGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUpO1xyXG5cclxuICByZWFkb25seSBjYWxlbmRhckRheXNWaWV3SGVhZGVyVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0RGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgY2FsZW5kYXJZZWFyc1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRZZWFyc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgY2FsZW5kYXJNb250aHNWaWV3SGVhZGVyVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0TW9udGhzVmlld0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBjYWxlbmRhcldlZWtkYXlUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXRXZWVrZGF5VGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGNhbGVuZGFyRmxvYXRpbmdNb250aFRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZERhdGVJbnB1dEZsb2F0aW5nTW9udGhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgY2FsZW5kYXJZZWFyVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0WWVhclRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBjYWxlbmRhck1vbnRoVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkRGF0ZUlucHV0TW9udGhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgY2FsZW5kYXJEYXlUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmREYXRlSW5wdXREYXlUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcblxyXG4gIC8vISBjb250ZXh0IHByb3ZpZGVyc1xyXG4gIHJlYWRvbmx5IHZhbHVlQ29udGV4dCA9IGNvbXB1dGVkPEFyZERhdGVJbnB1dFZhbHVlQ29udGV4dD4oKCkgPT4gKHtcclxuICAgICRpbXBsaWNpdDogdGhpcy52YWx1ZSgpLFxyXG4gIH0pKTtcclxuXHJcbiAgcmVhZG9ubHkgYWNjZXB0QnV0dG9uc0NvbnRleHQgPSBjb21wdXRlZDxBcmREYXRlSW5wdXRBY2NlcHRCdXR0b25zQ29udGV4dD4oKCkgPT4gKHtcclxuICAgICRpbXBsaWNpdDogKCkgPT4gdGhpcy5vbkFjY2VwdEJ1dHRvbkNsaWNrKCksXHJcbiAgICBhY2NlcHQ6ICgpID0+IHRoaXMub25BY2NlcHRCdXR0b25DbGljaygpLFxyXG4gICAgY2FuY2VsOiAoKSA9PiB0aGlzLm9uQ2FuY2VsQnV0dG9uQ2xpY2soKSxcclxuICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5jYWxlbmRhckRpc2FibGVkKCksXHJcbiAgfSkpO1xyXG59XHJcbiIsIjxhcmQtZm9ybS1maWVsZC1mcmFtZVxyXG4gIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UoKVwiXHJcbiAgW3ZhcmlhbnRdPVwidmFyaWFudCgpXCJcclxuICBbY29tcGFjdF09XCJjb21wYWN0KClcIlxyXG4gIFtpc0ZvY3VzZWRdPVwiaXNGb2N1c2VkKClcIlxyXG4gIFtoYXNFcnJvcl09XCJoYXNFcnJvcigpXCJcclxuICBbaXNTdWNjZXNzXT1cImlzU3VjY2VzcygpXCJcclxuICBbcHJlZml4VGVtcGxhdGVdPVwicHJlZml4VGVtcGxhdGUoKT8udGVtcGxhdGVcIlxyXG4gIFtzdWZmaXhUZW1wbGF0ZV09XCJzdWZmaXhUZW1wbGF0ZSgpPy50ZW1wbGF0ZVwiXHJcbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImFyZC1kYXRlLWlucHV0XCJcclxuICAgICNkcm9wZG93bkhvc3RcclxuICAgIChjbGljayk9XCJvbkdlbmVyYWxDbGljaygkZXZlbnQpXCJcclxuICAgIFtjbGFzcy5hcmQtaGFzLXZhbHVlXT1cIiEhdmFsdWUoKVwiXHJcbiAgICBbbmdDbGFzc109XCJuZ0NsYXNzZXMoKVwiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImFyZC1kYXRlLWlucHV0X192YWx1ZS1jb250YWluZXIgYXJkLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJhcmQtZGF0ZS1pbnB1dF9fcGxhY2Vob2xkZXIgYXJkLXBsYWNlaG9sZGVyXCJcclxuICAgICAgICBbY2xhc3MuYXJkLWRhdGUtaW5wdXRfX3BsYWNlaG9sZGVyLWhpZGRlbl09XCIhc2hvdWxkRGlzcGxheVBsYWNlaG9sZGVyKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgcGxhY2Vob2xkZXIoKSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYXJkLWRhdGUtaW5wdXRfX3ZhbHVlXCJcclxuICAgICAgICBbY2xhc3MuYXJkLWRhdGUtaW5wdXRfX3ZhbHVlLWhpZGRlbl09XCIhc2hvdWxkRGlzcGxheVZhbHVlKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAjZGVmYXVsdFZhbHVlVGVtcGxhdGVcclxuICAgICAgICAgIGxldC1kYXRlXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgc2VyaWFsaXplRm4oKShkYXRlKSB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidmFsdWVUZW1wbGF0ZSgpPy50ZW1wbGF0ZSB8fCBkZWZhdWx0VmFsdWVUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidmFsdWVDb250ZXh0KClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJhcmQtZGF0ZS1pbnB1dF9faW5wdXQtY29udGFpbmVyXCJcclxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxyXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlbigpXCJcclxuICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiaXNPcGVuKCkgPyBodG1sSWQoKSA6IG51bGxcIlxyXG4gICAgICAgIFtjbGFzcy5hcmQtZGF0ZS1pbnB1dF9faW5wdXQtY29udGFpbmVyLWhpZGRlbl09XCIhc2hvdWxkRGlzcGxheURhdGVJbnB1dCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI2RhdGVJbnB1dFxyXG4gICAgICAgICAgI2ZvY3VzYWJsZUVsZW1lbnRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIGNsYXNzPVwiYXJkLWRhdGUtaW5wdXRfX2lucHV0XCJcclxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYkluZGV4KClcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImRhdGVJbnB1dFZhbHVlKClcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpc09wZW4oKSA/IGh0bWxJZCgpIDogbnVsbFwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwib25EYXRlSW5wdXRJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgIChmb2N1cyk9XCJvbkRhdGVJbnB1dEZvY3VzKCRldmVudClcIlxyXG4gICAgICAgICAgKGJsdXIpPVwib25EYXRlSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgICAgICAgKGtleWRvd24pPVwib25EYXRlSW5wdXRFbnRlcigkZXZlbnQpXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZiAoIWNhbGVuZGFySGlkZGVuKCkpIHtcclxuICAgIDxhcmQtaWNvbi1idXR0b25cclxuICAgICAgY29sb3I9XCJub25lXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImNhbGVuZGFyRGlzYWJsZWQoKVwiXHJcbiAgICAgIChjbGljayk9XCJvbkNhbGVuZGFyQnV0dG9uQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICNkZWZhdWx0Q2FsZW5kYXJJY29uVGVtcGxhdGVcclxuICAgICAgICBsZXQtZGF0ZVxyXG4gICAgICA+XHJcbiAgICAgICAgPGFyZC1pY29uIGZpbGxlZD50b2RheTwvYXJkLWljb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FsZW5kYXJJY29uVGVtcGxhdGUoKT8udGVtcGxhdGUgfHwgZGVmYXVsdENhbGVuZGFySWNvblRlbXBsYXRlXCIgLz5cclxuICAgIDwvYXJkLWljb24tYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2FyZC1mb3JtLWZpZWxkLWZyYW1lPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkcm9wZG93blRlbXBsYXRlPlxyXG4gIDxhcmQtZHJvcGRvd24tcGFuZWxcclxuICAgIGNsYXNzPVwiYXJkLWRyb3Bkb3duLXBhbmVsIGFyZC1kYXRlLWlucHV0X19kcm9wZG93bi1wYW5lbFwiXHJcbiAgICBbYXBwZWFyYW5jZV09XCJkcm9wZG93bkFwcGVhcmFuY2VPckRlZmF1bHQoKVwiXHJcbiAgICBbdmFyaWFudF09XCJkcm9wZG93blZhcmlhbnRPckRlZmF1bHQoKVwiXHJcbiAgICBbaXNPcGVuXT1cInRydWVcIlxyXG4gICAgW3BhbmVsSWRdPVwiaHRtbElkKClcIlxyXG4gICAgW2NvbXBhY3RdPVwiY29tcGFjdCgpXCJcclxuICAgIChhcmRDbGlja091dHNpZGUpPVwib25PdXRzaWRlQ2xpY2soJGV2ZW50KVwiXHJcbiAgPlxyXG4gICAgPGFyZC1jYWxlbmRhclxyXG4gICAgICBjbGFzcz1cImFyZC1kYXRlLWlucHV0X19jYWxlbmRhclwiXHJcbiAgICAgIFsoYWN0aXZlTW9udGgpXT1cImFjdGl2ZU1vbnRoXCJcclxuICAgICAgWyhhY3RpdmVZZWFyKV09XCJhY3RpdmVZZWFyXCJcclxuICAgICAgWyhhY3RpdmVWaWV3KV09XCJhY3RpdmVWaWV3XCJcclxuICAgICAgW2ZpcnN0V2Vla2RheV09XCJmaXJzdFdlZWtkYXkoKVwiXHJcbiAgICAgIFttaW5dPVwibWluKClcIlxyXG4gICAgICBbbWF4XT1cIm1heCgpXCJcclxuICAgICAgYXV0b0ZvY3VzXHJcbiAgICAgIFttdWx0aXBsZVllYXJQYWdlQ2hhbmdlTW9kaWZpZXJdPVwibXVsdGlwbGVZZWFyUGFnZUNoYW5nZU1vZGlmaWVyKClcIlxyXG4gICAgICBbY29sb3JdPVwiY29sb3IoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpIHx8IGNhbGVuZGFyRGlzYWJsZWQoKVwiXHJcbiAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleCgpXCJcclxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uQ2FsZW5kYXJTZWxlY3RlZENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKHllYXJTZWxlY3QpPVwieWVhclNlbGVjdC5lbWl0KCRldmVudClcIlxyXG4gICAgICAobW9udGhTZWxlY3QpPVwibW9udGhTZWxlY3QuZW1pdCgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgX2FyZC10bXAtcmVwb3NpdG9yeVxyXG4gICAgICAgIFtkYXlzVmlld0hlYWRlclRtcF09XCJjYWxlbmRhckRheXNWaWV3SGVhZGVyVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgW3llYXJzVmlld0hlYWRlclRtcF09XCJjYWxlbmRhclllYXJzVmlld0hlYWRlclRlbXBsYXRlKClcIlxyXG4gICAgICAgIFttb250aHNWaWV3SGVhZGVyVG1wXT1cImNhbGVuZGFyTW9udGhzVmlld0hlYWRlclRlbXBsYXRlKClcIlxyXG4gICAgICAgIFt3ZWVrZGF5VG1wXT1cImNhbGVuZGFyV2Vla2RheVRlbXBsYXRlKClcIlxyXG4gICAgICAgIFtmbG9hdGluZ01vbnRoVG1wXT1cImNhbGVuZGFyRmxvYXRpbmdNb250aFRlbXBsYXRlKClcIlxyXG4gICAgICAgIFt5ZWFyVG1wXT1cImNhbGVuZGFyWWVhclRlbXBsYXRlKClcIlxyXG4gICAgICAgIFttb250aFRtcF09XCJjYWxlbmRhck1vbnRoVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgW2RheVRtcF09XCJjYWxlbmRhckRheVRlbXBsYXRlKClcIlxyXG4gICAgICAvPlxyXG4gICAgPC9hcmQtY2FsZW5kYXI+XHJcbiAgICBAaWYgKHVzZUFjY2VwdEJ1dHRvblRvU2VsZWN0KCkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJhcmQtZGF0ZS1pbnB1dF9fYWNjZXB0LWJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICNkZWZhdWx0QWNjZXB0QnV0dG9uc1RlbXBsYXRlXHJcbiAgICAgICAgbGV0LWRhdGVcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNlcmlhbGl6ZUZuKCkoZGF0ZSkgfX1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFjY2VwdEJ1dHRvbnNUZW1wbGF0ZSgpPy50ZW1wbGF0ZSB8fCBkZWZhdWx0QWNjZXB0QnV0dG9uc1RlbXBsYXRlXCJcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiYWNjZXB0QnV0dG9uc0NvbnRleHQoKVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2FyZC1kcm9wZG93bi1wYW5lbD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19