@eui/components 16.2.9 → 16.2.10-snapshot-1705461110317

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.
@@ -548,12 +548,18 @@ export class EuiDatepickerComponent extends BaseDirective {
548
548
  }
549
549
  this.isInputDisabled ? this.inputFormControl.disable() : this.inputFormControl.enable();
550
550
  }
551
+ /**
552
+ * Marks the form field as touched when focusing out to trigger validation
553
+ */
554
+ onFocusOut() {
555
+ this.propagateTouched();
556
+ }
551
557
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EuiDatepickerComponent, deps: [{ token: i1.DateAdapter }, { token: i2.TranslateService }, { token: i3.LocaleService }, { token: i3.UxAppShellService }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.ViewContainerRef }, { token: forwardRef(() => EuiLetterFormatDirective), optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: MAT_DATE_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }
552
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EuiDatepickerComponent, selector: "eui-datepicker", inputs: { styleClass: "styleClass", value: "value", togglerIcon: "togglerIcon", togglerIconSvg: "togglerIconSvg", togglerLabel: "togglerLabel", placeholder: "placeholder", type: "type", startView: "startView", e2eAttr: "e2eAttr", minDate: "minDate", maxDate: "maxDate", datepickerFilter: "datepickerFilter", dateOutputFormat: "dateOutputFormat", customHeader: "customHeader", dateClass: "dateClass", isDatetimepicker: "isDatetimepicker", hasSeconds: "hasSeconds", isOneInputField: "isOneInputField", hasNoButton: "hasNoButton", isDatepickerBlock: "isDatepickerBlock", isReadOnly: "isReadOnly", isDisabled: "isDisabled", isInputDisabled: "isInputDisabled", isButtonDisabled: "isButtonDisabled", isPickerDisabled: "isPickerDisabled", isClearable: "isClearable", hasActionButtons: "hasActionButtons", hasTodayButton: "hasTodayButton", restrictToRegex: "restrictToRegex" }, outputs: { inputChange: "inputChange", dateSelect: "dateSelect" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "euiActionButtons", first: true, predicate: i0.forwardRef(function () { return EuiActionButtonsDirective; }), descendants: true }], viewQueries: [{ propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, static: true }, { propertyName: "templatePortalRef", first: true, predicate: ["templatePortalRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i8.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i8.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i9.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["class", "isInvalid"] }, { kind: "component", type: i10.EuiInputGroupComponent, selector: "div[euiInputGroup]", inputs: ["e2eAttr", "styleClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
558
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EuiDatepickerComponent, selector: "eui-datepicker", inputs: { styleClass: "styleClass", value: "value", togglerIcon: "togglerIcon", togglerIconSvg: "togglerIconSvg", togglerLabel: "togglerLabel", placeholder: "placeholder", type: "type", startView: "startView", e2eAttr: "e2eAttr", minDate: "minDate", maxDate: "maxDate", datepickerFilter: "datepickerFilter", dateOutputFormat: "dateOutputFormat", customHeader: "customHeader", dateClass: "dateClass", isDatetimepicker: "isDatetimepicker", hasSeconds: "hasSeconds", isOneInputField: "isOneInputField", hasNoButton: "hasNoButton", isDatepickerBlock: "isDatepickerBlock", isReadOnly: "isReadOnly", isDisabled: "isDisabled", isInputDisabled: "isInputDisabled", isButtonDisabled: "isButtonDisabled", isPickerDisabled: "isPickerDisabled", isClearable: "isClearable", hasActionButtons: "hasActionButtons", hasTodayButton: "hasTodayButton", restrictToRegex: "restrictToRegex" }, outputs: { inputChange: "inputChange", dateSelect: "dateSelect" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "euiActionButtons", first: true, predicate: i0.forwardRef(function () { return EuiActionButtonsDirective; }), descendants: true }], viewQueries: [{ propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, static: true }, { propertyName: "templatePortalRef", first: true, predicate: ["templatePortalRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (focusout)=\"onFocusOut()\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i8.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i8.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i9.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["class", "isInvalid"] }, { kind: "component", type: i10.EuiInputGroupComponent, selector: "div[euiInputGroup]", inputs: ["e2eAttr", "styleClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
553
559
  }
554
560
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EuiDatepickerComponent, decorators: [{
555
561
  type: Component,
556
- args: [{ selector: 'eui-datepicker', encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"] }]
562
+ args: [{ selector: 'eui-datepicker', encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (focusout)=\"onFocusOut()\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"] }]
557
563
  }], ctorParameters: function () { return [{ type: i1.DateAdapter }, { type: i2.TranslateService }, { type: i3.LocaleService }, { type: i3.UxAppShellService }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.ViewContainerRef }, { type: EuiLetterFormatDirective, decorators: [{
558
564
  type: Optional
559
565
  }, {
@@ -720,4 +726,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
720
726
  type: HostBinding,
721
727
  args: ['class']
722
728
  }] } });
723
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLWRhdGVwaWNrZXIvZXVpLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWRhdGVwaWNrZXIvZXVpLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUtMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUdKLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxHQUlmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUErQixnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxxQkFBcUIsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBR2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBMkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQW9DLE1BQU0sV0FBVyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0Is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QXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztpQkFDcEU7O0FBT0QsTUFBTSxPQUFPLDJCQUEyQjtrSUFBM0IsMkJBQTJCO3NIQUEzQiwyQkFBMkIsK0NBRnpCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUM7OzRGQUU5RCwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUM7aUJBQzFFOztBQUdELG9CQUFvQjtBQUVwQixNQUFNLE9BQU8seUJBQXlCO0lBRHRDO1FBRTBCLFVBQUssR0FBRyxnQ0FBZ0MsQ0FBQztLQUNqRTtrSUFGVyx5QkFBeUI7c0hBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTs4QkFFbkIsS0FBSztzQkFBMUIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBEb0NoZWNrLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFN0YXRpY1Byb3ZpZGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBEaXJlY3RpdmUsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIE1hdERhdGVGb3JtYXRzLCBNQVRfREFURV9GT1JNQVRTIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRDYWxlbmRhckNlbGxDbGFzc0Z1bmN0aW9uLCBNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBEb21Qb3J0YWxPdXRsZXQsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBfbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIF9yb2xsdXBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50LXRpbWV6b25lJztcblxuaW1wb3J0IHsgRXVpVGltZXBpY2tlckNvbXBvbmVudCwgRXVpRGF0ZVRpbWVQaWNrZXJDb25maWcgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLXRpbWVwaWNrZXInO1xuaW1wb3J0IHsgRFlOQU1JQ19DT01QT05FTlRfQ09ORklHLCBMb2NhbGVTZXJ2aWNlLCBVeEFwcFNoZWxsU2VydmljZSB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBCYXNlRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL3NoYXJlZCc7XG5cbmNvbnN0IG1vbWVudCA9IF9yb2xsdXBNb21lbnQgfHwgX21vbWVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktZGF0ZXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS1kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlEYXRlcGlja2VyQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgRG9DaGVjayB7XG4gICAgcHVibGljIGlucHV0Rm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICBwdWJsaWMgYnJlYWtwb2ludHNWYWx1ZTogYW55ID0ge1xuICAgICAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgICAgIGlzVGFibGV0OiBmYWxzZSxcbiAgICAgICAgaXNMdERlc2t0b3A6IGZhbHNlLFxuICAgICAgICBpc0Rlc2t0b3A6IGZhbHNlLFxuICAgICAgICBpc1hMOiBmYWxzZSxcbiAgICAgICAgaXNYWEw6IGZhbHNlLFxuICAgIH07XG4gICAgc2hvd0RhdGVCdXR0b24gPSB0cnVlO1xuICAgIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJywgeyBzdGF0aWM6IHRydWUgfSkgY2FsZW5kYXI6IE1hdERhdGVwaWNrZXI8YW55PjtcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVBvcnRhbFJlZicpIHRlbXBsYXRlUG9ydGFsUmVmOiBUZW1wbGF0ZVJlZjxFdWlBY3Rpb25CdXR0b25zRGlyZWN0aXZlPjtcblxuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBFdWlBY3Rpb25CdXR0b25zRGlyZWN0aXZlKSkgZXVpQWN0aW9uQnV0dG9uczogRXVpQWN0aW9uQnV0dG9uc0RpcmVjdGl2ZTtcblxuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBkYXRlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzID0gJyc7XG4gICAgQElucHV0KCkgdmFsdWU6IGFueTtcbiAgICBASW5wdXQoKSB0b2dnbGVySWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRvZ2dsZXJJY29uU3ZnID0gJ2V1aS1jYWxlbmRhci1vdXRsaW5lJztcbiAgICBASW5wdXQoKSB0b2dnbGVyTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHR5cGU6ICd5ZWFyJyB8ICdtb250aCcgfCAncmVndWxhcicgPSAncmVndWxhcic7XG4gICAgQElucHV0KCkgc3RhcnRWaWV3OiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXInO1xuICAgIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLWRhdGVwaWNrZXInO1xuICAgIEBJbnB1dCgpIG1pbkRhdGU6IGFueTtcbiAgICBASW5wdXQoKSBtYXhEYXRlOiBhbnk7XG4gICAgQElucHV0KCkgZGF0ZXBpY2tlckZpbHRlcjogKGQ6IGFueSkgPT4gYm9vbGVhbiA9IHRoaXMuZGF0ZXBpY2tlckZpbHRlcmluZztcbiAgICBASW5wdXQoKSBkYXRlT3V0cHV0Rm9ybWF0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgY3VzdG9tSGVhZGVyOiBhbnk7XG4gICAgQElucHV0KCkgZGF0ZUNsYXNzOiBNYXRDYWxlbmRhckNlbGxDbGFzc0Z1bmN0aW9uPGFueT47XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNEYXRldGltZXBpY2tlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZXRpbWVwaWNrZXI7XG4gICAgfVxuICAgIHNldCBpc0RhdGV0aW1lcGlja2VyKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNEYXRldGltZXBpY2tlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzRGF0ZXRpbWVwaWNrZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNTZWNvbmRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzU2Vjb25kcztcbiAgICB9XG4gICAgc2V0IGhhc1NlY29uZHModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oYXNTZWNvbmRzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzU2Vjb25kcyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzT25lSW5wdXRGaWVsZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzT25lSW5wdXRGaWVsZDtcbiAgICB9XG4gICAgc2V0IGlzT25lSW5wdXRGaWVsZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzT25lSW5wdXRGaWVsZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzT25lSW5wdXRGaWVsZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc05vQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTm9CdXR0b247XG4gICAgfVxuICAgIHNldCBoYXNOb0J1dHRvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc05vQnV0dG9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzTm9CdXR0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0RhdGVwaWNrZXJCbG9jaygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZXBpY2tlckJsb2NrO1xuICAgIH1cbiAgICBzZXQgaXNEYXRlcGlja2VyQmxvY2sodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0RhdGVwaWNrZXJCbG9jayA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzRGF0ZXBpY2tlckJsb2NrID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVhZE9ubHk7XG4gICAgfVxuICAgIHNldCBpc1JlYWRPbmx5KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWFkT25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzUmVhZE9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEaXNhYmxlZDtcbiAgICB9XG4gICAgc2V0IGlzRGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSW5wdXREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5wdXREaXNhYmxlZDtcbiAgICB9XG4gICAgc2V0IGlzSW5wdXREaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzSW5wdXREaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzSW5wdXREaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0J1dHRvbkRpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgaXNCdXR0b25EaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQnV0dG9uRGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiBlVUkxNyBpbiBmYXZvciBvZiB1c2luZyBvbmx5IGlzQnV0dG9uRGlzYWJsZWQgYXMgdGhlcmUgaXMgbm8gbG9uZ2VyIG9wdGlvbiB0byBvcGVuIHRoZSBjYWxlbmRhciB0aHJvdWdoIHRoZSBpbnB1dCBmaWVsZCovXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNQaWNrZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUGlja2VyRGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBpc1BpY2tlckRpc2FibGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNQaWNrZXJEaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzUGlja2VyRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsZWFyYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xlYXJhYmxlICYmICF0aGlzLl9pc1JlYWRPbmx5O1xuICAgIH1cbiAgICBzZXQgaXNDbGVhcmFibGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0NsZWFyYWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzQ2xlYXJhYmxlID0gZmFsc2U7XG4gICAgLyoqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiBlVUkxNyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc0FjdGlvbkJ1dHRvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNBY3Rpb25CdXR0b25zO1xuICAgIH1cbiAgICBzZXQgaGFzQWN0aW9uQnV0dG9ucyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc0FjdGlvbkJ1dHRvbnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNBY3Rpb25CdXR0b25zID0gZmFsc2U7XG4gICAgLyoqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiBlVUkxNyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1RvZGF5QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzVG9kYXlCdXR0b247XG4gICAgfVxuICAgIHNldCBoYXNUb2RheUJ1dHRvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc1RvZGF5QnV0dG9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzVG9kYXlCdXR0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCByZXN0cmljdFRvUmVnZXgoKTogUmVnRXhwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3RyaWN0VG9SZWdleDtcbiAgICB9XG4gICAgc2V0IHJlc3RyaWN0VG9SZWdleCh2YWx1ZTogc3RyaW5nIHwgUmVnRXhwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0cmljdFRvUmVnZXggPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3RyaWN0VG9SZWdleCA9IG5ldyBSZWdFeHAodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc3RyaWN0VG9SZWdleCBjYW4gb25seSBiZSBzdHJpbmcgb3IgUmVnRXhwLCBpdCBjYW5ub3QgYmUgJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVzdHJpY3RUb1JlZ2V4OiBSZWdFeHA7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW3N1cGVyLmdldENzc0NsYXNzZXMoJ2V1aS1kYXRlcGlja2VyJyldLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBmb3JtYXQ6IE1hdERhdGVGb3JtYXRzO1xuICAgIHByaXZhdGUgcG9ydGFsSG9zdDogRG9tUG9ydGFsT3V0bGV0O1xuICAgIHByaXZhdGUgcG9ydGFsOiBDb21wb25lbnRQb3J0YWw8RXVpVGltZXBpY2tlckNvbXBvbmVudD47XG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVBvcnRhbDogVGVtcGxhdGVQb3J0YWw8RXVpQWN0aW9uQnV0dG9uc0RpcmVjdGl2ZT47XG4gICAgcHJpdmF0ZSBpc051bGwgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFkYXB0ZXI6IERhdGVBZGFwdGVyPGFueT4sXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHV4QXBwU2hlbGxTZXJ2aWNlOiBVeEFwcFNoZWxsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gRXVpTGV0dGVyRm9ybWF0RGlyZWN0aXZlKSkgcHVibGljIGV1aUxldHRlckZvcm1hdDogRXVpTGV0dGVyRm9ybWF0RGlyZWN0aXZlLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBASW5qZWN0KE1BVF9EQVRFX0ZPUk1BVFMpIGZvcm1hdDogTWF0RGF0ZUZvcm1hdHMsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmlzSW5wdXREaXNhYmxlZCA/IHRoaXMuaW5wdXRGb3JtQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZW5hYmxlKCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0U3RhdGUoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIuc2V0TG9jYWxlKHN0YXRlLmlkKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3JlZ3VsYXInICYmICF0aGlzLmlzRGF0ZXRpbWVwaWNrZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnN0cmVhbSgnZXVpLmRhdGVwaWNrZXIuUExBQ0VIT0xERVInKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAncmVndWxhcicgJiYgdGhpcy5pc0RhdGV0aW1lcGlja2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5zdHJlYW0oJ2V1aS5kYXRlcGlja2VyLklTREFURVRJTUVQSUNLRVInKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAneWVhcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnN0cmVhbSgnZXVpLmRhdGVwaWNrZXIuWUVBUi1QTEFDRUhPTERFUicpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnN0cmVhbSgnZXVpLmRhdGVwaWNrZXIuTU9OVEgtUExBQ0VIT0xERVInKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXhBcHBTaGVsbFNlcnZpY2UuYnJlYWtwb2ludHMkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGJrcHMpID0+ICh0aGlzLmJyZWFrcG9pbnRzVmFsdWUgPSBia3BzKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ldWlBY3Rpb25CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGVtcGxhdGVQb3J0YWxSZWYsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0RhdGV0aW1lcGlja2VyIHx8IHRoaXMuZXVpQWN0aW9uQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclsnY2xvc2VDYWxlbmRhciddID0gdGhpcy5jYWxlbmRhci5jbG9zZTtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuY2xvc2UgPSAoKTogYm9vbGVhbiA9PiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgLy8gbWFya3MgdGhlIGlucHV0IGNvbnRyb2wgYXMgdG91Y2hlZC9pbnZhbGlkIGlmIHRoZSBmb3JtIGNvbnRyb2wgaXMgdG91Y2hlZC9pbnZhbGlkXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LnRvdWNoZWQgPyB0aGlzLmlucHV0Rm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpIDogdGhpcy5pbnB1dEZvcm1Db250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sPy5pbnZhbGlkID8gdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldEVycm9ycyh0aGlzLmNvbnRyb2wuZXJyb3JzKSA6IHRoaXMuaW5wdXRGb3JtQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXNbJ2lzUmVhZE9ubHknXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RhdGVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUJ1dHRvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcyAmJiBjaGFuZ2VzWydpc0Rpc2FibGVkJ10pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh0aGlzLmlzRGlzYWJsZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1sndmFsdWUnXSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZU91dHB1dEZvcm1hdCAmJiB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobW9tZW50KHRoaXMudmFsdWUpLmZvcm1hdCh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXNbJ2lzQ2xlYXJhYmxlJ10pIHtcbiAgICAgICAgICAgIC8vIHdoZW4gaXMgY2xlYXJhYmxlIGlzIHVzZWQgbGlzdGVuIGlmIG9uY2xlYXIgaXMgZmlyZWQgYW5kIHVwZGF0ZSB0aGUgdmFsdWVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xlYXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlSW5qZWN0b3IoZGF0YTogYW55KTogSW5qZWN0b3Ige1xuICAgICAgICBjb25zdCBpbmplY3RvclRva2VuczogU3RhdGljUHJvdmlkZXIgPSBbeyBwcm92aWRlOiBEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcsIHVzZVZhbHVlOiBkYXRhIH1dO1xuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgIHByb3ZpZGVyczogaW5qZWN0b3JUb2tlbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5DYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIub3BlbigpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RhdGV0aW1lcGlja2VyIHx8IHRoaXMuZXVpQWN0aW9uQnV0dG9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIub3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvLyBsaXN0ZW5zIHRvIHRoZSBrZXlkb3duIGV2ZW50IG9uY2UgdGhlIGNhbGVuZGFyIG9wZW5lZFxuICAgICAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6IC8vY2xvc2VzIHRoZSBjYWxlbmRhciBvbiBFc2NhcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VudGVyJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Nsb3NlcyB0aGUgY2FsZW5kYXIgaWYgcHJlc3NpbmcgRW50ZXIgb24gdGhlIGNsb3NlIGNhbGVuZGFyIGJ1dHRvbiBvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RXZlbnRQYXRoKGV2ZW50KS5mb3JFYWNoKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLmNsYXNzTmFtZSAmJiBwLmNsYXNzTmFtZS5pbmRleE9mKCdtYXQtZGF0ZXBpY2tlci1jbG9zZS1idXR0b24nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZXRpbWVwaWNrZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnRhbEhvc3QgPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtYXQtY2FsZW5kYXInKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIC8vIFRPRE86IGNoZWNrIGFnYWluIGlmIHRoZXJlIGlzIGFuIHVwZGF0ZSBvbiBmcmFtZXdvcmsgc2lkZSBFVUktNjIwN1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFJlZixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVDb25maWc6IEV1aURhdGVUaW1lUGlja2VyQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBob3VyczogdGhpcy52YWx1ZSAmJiBtb21lbnQodGhpcy52YWx1ZSkuaG91cnMoKSxcbiAgICAgICAgICAgICAgICAgICAgbWluczogdGhpcy52YWx1ZSAmJiBtb21lbnQodGhpcy52YWx1ZSkubWludXRlcygpLFxuICAgICAgICAgICAgICAgICAgICBzZWNzOiB0aGlzLnZhbHVlICYmIG1vbWVudCh0aGlzLnZhbHVlKS5zZWNvbmRzKCksXG4gICAgICAgICAgICAgICAgICAgIGlzRGF0ZXRpbWVwaWNrZXI6IHRoaXMuaXNEYXRldGltZXBpY2tlcixcbiAgICAgICAgICAgICAgICAgICAgaGFzU2Vjb25kczogdGhpcy5oYXNTZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICBpc09uZUlucHV0RmllbGQ6IHRoaXMuaXNPbmVJbnB1dEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0ZuOiAoaG91cnM6IG51bWJlciwgbWluczogbnVtYmVyLCBzZWNzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV1aUFjdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbW9tZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1vbWVudCh0aGlzLnZhbHVlLCBtb21lbnQuSVNPXzg2MDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbW9tZW50KHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0LnBhcnNlLmRhdGVJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnNldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91cjogaG91cnMgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW51dGU6IG1pbnMgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQ6IHNlY3MgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXVpQWN0aW9uQnV0dG9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobW9tZW50KHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMucG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChFdWlUaW1lcGlja2VyQ29tcG9uZW50LCBudWxsLCB0aGlzLmNyZWF0ZUluamVjdG9yKHRpbWVDb25maWcpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnRhbEhvc3QuYXR0YWNoKHRoaXMucG9ydGFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLnBvcnRhbEhvc3Q/LmRldGFjaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gY2FsZW5kYXIgb3BlbnMgYW5kIGlzRGF0ZXRpbWVwaWNrZXIgb3IgZXVpLWFjdGlvbi1idXR0b25zIGRpcmVjdGl2ZSB1c2VkLCBpdCBjbG9zZXMgdGhlIGNhbGVuZGFyIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGVcbiAgICAgKiBvdmVybGF5LiBJZiBldWktYWN0aW9uLWJ1dHRvbnMgZGlyZWN0aXZlIGlzIHVzZWQgaXQgcmVnaXN0ZXJzIHRoZSB0ZW1wbGF0ZSBwb3J0YWwgd2hlcmUgdGhlIHVzZXIgY2FuIGFkZCBwcm9qZWN0ZWQgY29udGVudCBhcyBhXG4gICAgICogZm9vdGVyLlxuICAgICAqL1xuICAgIG9uT3BlbmVkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0RhdGV0aW1lcGlja2VyIHx8IHRoaXMuZXVpQWN0aW9uQnV0dG9ucykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXVpQWN0aW9uQnV0dG9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIucmVnaXN0ZXJBY3Rpb25zKHRoaXMudGVtcGxhdGVQb3J0YWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyWydfb3ZlcmxheVJlZiddWydfYmFja2Ryb3BDbGljayddLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRFdmVudFBhdGgoZXZlbnQpOiBhbnkge1xuICAgICAgICBpZiAoZXZlbnQucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoID0gW107XG4gICAgICAgIGxldCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgd2hpbGUgKHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBwYXRoLnB1c2godGFyZ2V0KTtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF0aC5wdXNoKGRvY3VtZW50LCB3aW5kb3cpO1xuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIGNob3NlbkRhdGVIYW5kbGVyKG5vcm1hbGl6ZWREYXRlOiBhbnksIGNhbGVuZGFyOiBNYXREYXRlcGlja2VyPGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBtb21lbnQobm9ybWFsaXplZERhdGUsIHRoaXMuZGF0ZU91dHB1dEZvcm1hdCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUoZm9ybWF0dGVkVmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShmb3JtYXR0ZWRWYWx1ZS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoZm9ybWF0dGVkVmFsdWUuZm9ybWF0KHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkpO1xuICAgICAgICAgICAgdGhpcy5kYXRlU2VsZWN0LmVtaXQoZm9ybWF0dGVkVmFsdWUuZm9ybWF0KHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5vcm1hbGl6ZWREYXRlO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVNlbGVjdC5lbWl0KHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxlbmRhci5jbG9zZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkYXRlcGlja2VyRmlsdGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EYXRlSW5wdXQoZTogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8TW9tZW50IHwgRGF0ZSB8IHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0ZXRpbWVwaWNrZXIpIHtcbiAgICAgICAgICAgIGlmIChlLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbW9tZW50KGUudmFsdWUsIHRoaXMuZGF0ZU91dHB1dEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHRoaXMudmFsdWUuZm9ybWF0KHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoZT8udmFsdWUgPyBlLnZhbHVlIDogbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVDaGFuZ2UoZTogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8TW9tZW50IHwgRGF0ZSB8IHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGUudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5kYXRlU2VsZWN0LmVtaXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmlzTnVsbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzTnVsbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRldGltZXBpY2tlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXJzID0gdGhpcy52YWx1ZSAmJiBtb21lbnQodGhpcy52YWx1ZSkuaG91cnMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5zID0gdGhpcy52YWx1ZSAmJiBtb21lbnQodGhpcy52YWx1ZSkubWludXRlcygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnZhbHVlICYmIG1vbWVudCh0aGlzLnZhbHVlKS5zZWNvbmRzKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbW9tZW50KGUudmFsdWUsIHRoaXMuZm9ybWF0LnBhcnNlLmRhdGVJbnB1dCk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXQoe1xuICAgICAgICAgICAgICAgICAgICBob3VyOiBob3VycyB8fCAwLFxuICAgICAgICAgICAgICAgICAgICBtaW51dGU6IG1pbnMgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kOiBzZWNzIHx8IDAsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhci5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVPdXRwdXRGb3JtYXQgJiYgdGhpcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobW9tZW50KHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG1vbWVudChlLnZhbHVlLCB0aGlzLmRhdGVPdXRwdXRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdCh0aGlzLnZhbHVlLmZvcm1hdCh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChlPy52YWx1ZSA/IGUudmFsdWUgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGFuZ2VkSW5wdXQoZTogc3RyaW5nIHwgRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgZSA9PT0gJ3N0cmluZycgPyBlIDogKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuaXNOdWxsKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbW9tZW50KHZhbHVlLCB0aGlzLmZvcm1hdC5wYXJzZS5kYXRlSW5wdXQpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZU91dHB1dEZvcm1hdCAmJiB0aGlzLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShtb21lbnQodGhpcy52YWx1ZSkuZm9ybWF0KHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShtb21lbnQodGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlU2VsZWN0LmVtaXQobnVsbCk7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG4gICAgfVxuXG4gICAgb25LZXlwcmVzcyhlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9yZXN0cmljdFRvUmVnZXgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVzdHJpY3RUb1JlZ2V4LnRlc3QoZS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0b2RheSdzIGRhdGVcbiAgICAgKi9cbiAgICBzZWxlY3RUb2RheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKG1vbWVudCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGNhbGVuZGFyIHdoZW4gaXNEYXRldGltZXBpY2tlciBvciBldWktYWN0aW9uLWJ1dHRvbnMgdXNlZCBhbmQgcmVtb3ZlcyB0aGUgYXBwbGllZCBmb290ZXIgd2hlbiBldWktYWN0aW9uLWJ1dHRvbnMgdXNlZFxuICAgICAqL1xuICAgIGNsb3NlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJbJ2Nsb3NlQ2FsZW5kYXInXSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmV1aUFjdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIucmVtb3ZlQWN0aW9ucyh0aGlzLnRlbXBsYXRlUG9ydGFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gZXVpLWFjdGlvbi1idXR0b25zIHVzZWQsIGl0IGFwcGxpZXMgdGhlIGRhdGUgc2VsZWN0aW9uIGFuZCBjbG9zZXMgdGhlIGNhbGVuZGFyXG4gICAgICovXG4gICAgb25EYXRlU2VsZWN0QXBwbHkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuX2FwcGx5UGVuZGluZ1NlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgY29udlR5cGVUb1N0YXJ0Vmlldyh0eXBlOiBzdHJpbmcpOiAneWVhcicgfCAnbW9udGgnIHwgJ211bHRpLXllYXInIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd5ZWFyJztcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiAnbXVsdGkteWVhcic7XG4gICAgICAgICAgICBjYXNlICdyZWd1bGFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21vbnRoJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlcyBvbmx5IHRoZSBpbnB1dCB0aHJvdWdoIHJlYWN0aXZlIGZvcm1zXG4gICAgICAgICAgICBpZiAodGhpcy5pc0lucHV0RGlzYWJsZWQgJiYgIXRoaXMuaXNQaWNrZXJEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbnB1dERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSB0aGlzLmlzUGlja2VyRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlcyBvbmx5IHRoZSBidXR0b24gdGhyb3VnaCByZWFjdGl2ZSBmb3Jtc1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQnV0dG9uRGlzYWJsZWQgJiYgIXRoaXMuaXNJbnB1dERpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0lucHV0RGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSB0aGlzLmlzUGlja2VyRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5wdXREaXNhYmxlZCA9IHRoaXMuaXNQaWNrZXJEaXNhYmxlZCA9IHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzSW5wdXREaXNhYmxlZCA9IHRoaXMuaXNQaWNrZXJEaXNhYmxlZCA9IHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0lucHV0RGlzYWJsZWQgPyB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5pbnB1dEZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSk6IHZvaWQgPT4ge307XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBwcm9wYWdhdGVUb3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG59XG5cbmV4cG9ydCBjb25zdCBMRVRURVJfRk9STUFUID0ge1xuICAgIHBhcnNlOiB7XG4gICAgICAgIGRhdGVJbnB1dDogJ0xMJyxcbiAgICB9LFxuICAgIGRpc3BsYXk6IHtcbiAgICAgICAgZGF0ZUlucHV0OiAnTEwnLFxuICAgICAgICBtb250aFllYXJMYWJlbDogJ0xMJyxcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFlFQVJfRk9STUFUID0ge1xuICAgIHBhcnNlOiB7XG4gICAgICAgIGRhdGVJbnB1dDogJ1lZWVknLFxuICAgIH0sXG4gICAgZGlzcGxheToge1xuICAgICAgICBkYXRlSW5wdXQ6ICdZWVlZJyxcbiAgICAgICAgbW9udGhZZWFyTGFiZWw6ICdZWVlZJyxcbiAgICAgICAgZGF0ZUExMXlMYWJlbDogJ1lZWVknLFxuICAgICAgICBtb250aFllYXJBMTF5TGFiZWw6ICdZWVlZJyxcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IE1PTlRIX1lFQVJfRk9STUFUID0ge1xuICAgIHBhcnNlOiB7XG4gICAgICAgIGRhdGVJbnB1dDogJ01NL1lZWVknLFxuICAgIH0sXG4gICAgZGlzcGxheToge1xuICAgICAgICBkYXRlSW5wdXQ6ICdNTS9ZWVlZJyxcbiAgICAgICAgbW9udGhZZWFyTGFiZWw6ICdNTU0gWVlZWScsXG4gICAgICAgIGRhdGVBMTF5TGFiZWw6ICdMTCcsXG4gICAgICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NTU0gWVlZWScsXG4gICAgfSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2V1aUxldHRlckZvcm1hdF0nLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IExFVFRFUl9GT1JNQVQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUxldHRlckZvcm1hdERpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tldWlZZWFyRm9ybWF0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogWUVBUl9GT1JNQVQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVllYXJGb3JtYXREaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZXVpTW9udGhZZWFyRm9ybWF0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogTU9OVEhfWUVBUl9GT1JNQVQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aU1vbnRoWWVhckZvcm1hdERpcmVjdGl2ZSB7fVxuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnZXVpLWFjdGlvbi1idXR0b25zJyB9KVxuZXhwb3J0IGNsYXNzIEV1aUFjdGlvbkJ1dHRvbnNEaXJlY3RpdmUge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzcyA9ICdldWktZGF0ZXBpY2tlcl9fYWN0aW9uLWJ1dHRvbnMnO1xuIH1cbiIsIjxkaXYgY2xhc3M9XCJldWktZGF0ZXBpY2tlcl9fd3JhcHBlciB7eyBzdHlsZUNsYXNzIH19XCIgW2NsYXNzLmV1aS1kYXRlcGlja2VyX193cmFwcGVyLS1yZXNwb25zaXZlXT1cImlzRGF0ZXBpY2tlckJsb2NrXCI+XG4gICAgPGRpdiBldWlJbnB1dEdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLWlucHV0LWdyb3VwLWFkZG9uXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBldWlJbnB1dFRleHRcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgW2V1aUNsZWFyYWJsZV09XCJpc0NsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgKGNsZWFyKT1cIm9uQ2xlYXIoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1kYXRlcGlja2VyLS1uby1idXR0b25dPVwiaGFzTm9CdXR0b25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktZGF0ZXBpY2tlci0tbG9uZy1mb3JtYXRdPVwiIWlzRGF0ZXBpY2tlckJsb2NrICYmIChpc0RhdGV0aW1lcGlja2VyIHx8IGV1aUxldHRlckZvcm1hdClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktZGF0ZXBpY2tlci0tYmxvY2tdPVwiaXNEYXRlcGlja2VyQmxvY2tcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJjYWxlbmRhclwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiXG4gICAgICAgICAgICAgICAgKGRhdGVJbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heERhdGVcIlxuICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVwaWNrZXJGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGF0ZSBJbnB1dCBGaWVsZFwiXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9uS2V5cHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpc0RhdGV0aW1lcGlja2VyID8gY2hhbmdlZElucHV0KCRldmVudCkgOiBudWxsXCIgLz5cbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICNjYWxlbmRhclxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJtYXQtY2FsZW5kYXIte3sgdHlwZSB9fVwiXG4gICAgICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJ0eXBlID09PSAncmVndWxhcicgPyAoc3RhcnRWaWV3ID8gc3RhcnRWaWV3IDogY29udlR5cGVUb1N0YXJ0Vmlldyh0eXBlKSkgOiBjb252VHlwZVRvU3RhcnRWaWV3KHR5cGUpXCJcbiAgICAgICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInR5cGUgPT09ICd5ZWFyJyA/IGNob3NlbkRhdGVIYW5kbGVyKCRldmVudCwgY2FsZW5kYXIpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwidHlwZSA9PT0gJ21vbnRoJyA/IGNob3NlbkRhdGVIYW5kbGVyKCRldmVudCwgY2FsZW5kYXIpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW3RvdWNoVWldPVwiYnJlYWtwb2ludHNWYWx1ZS5pc1RhYmxldCB8fCBicmVha3BvaW50c1ZhbHVlLmlzTW9iaWxlXCJcbiAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJpc0RhdGV0aW1lcGlja2VyID8gJ2V1aS1kYXRlcGlja2VyLS1jb250YWluZXItaGVpZ2h0LWxhcmdlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1BpY2tlckRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiY3VzdG9tSGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbZGF0ZUNsYXNzXT1cImRhdGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgKG9wZW5lZCk9XCJvbk9wZW5lZCgpXCI+XG4gICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhhc05vQnV0dG9uICYmIHNob3dEYXRlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIlxuICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGV1aVNlY29uZGFyeVxuICAgICAgICAgICAgICAgIFtldWlJY29uQnV0dG9uXT1cIiF0b2dnbGVyTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtldWlEaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdG9nZ2xlckxhYmVsICYmIHRvZ2dsZXJJY29uXCIgZXVpSWNvbiBhcmlhLWxhYmVsPVwiT3BlbiBDYWxlbmRhclwiIGljb25DbGFzcz1cInt7IHRvZ2dsZXJJY29uIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdG9nZ2xlckxhYmVsICYmICF0b2dnbGVySWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJ7eyB0b2dnbGVySWNvblN2ZyB9fVwiIGFyaWEtbGFiZWw9XCJPcGVuIENhbGVuZGFyXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0b2dnbGVyTGFiZWxcIj57eyB0b2dnbGVyTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVBvcnRhbFJlZj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJldWktYWN0aW9uLWJ1dHRvbnNcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
729
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLWRhdGVwaWNrZXIvZXVpLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWRhdGVwaWNrZXIvZXVpLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUtMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUdKLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxHQUlmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUErQixnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxxQkFBcUIsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBR2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBMkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQW9DLE1BQU0sV0FBVyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0Is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QyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7OzRGQUV4RCxzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO2lCQUNwRTs7QUFPRCxNQUFNLE9BQU8sMkJBQTJCO2tJQUEzQiwyQkFBMkI7c0hBQTNCLDJCQUEyQiwrQ0FGekIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQzs7NEZBRTlELDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztpQkFDMUU7O0FBR0Qsb0JBQW9CO0FBRXBCLE1BQU0sT0FBTyx5QkFBeUI7SUFEdEM7UUFFMEIsVUFBSyxHQUFHLGdDQUFnQyxDQUFDO0tBQ2pFO2tJQUZXLHlCQUF5QjtzSEFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFOzhCQUVuQixLQUFLO3NCQUExQixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIERvQ2hlY2ssXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgU3RhdGljUHJvdmlkZXIsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIERpcmVjdGl2ZSxcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTWF0RGF0ZUZvcm1hdHMsIE1BVF9EQVRFX0ZPUk1BVFMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdENhbGVuZGFyQ2VsbENsYXNzRnVuY3Rpb24sIE1hdERhdGVwaWNrZXIsIE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIERvbVBvcnRhbE91dGxldCwgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IF9tb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgX3JvbGx1cE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuXG5pbXBvcnQgeyBFdWlUaW1lcGlja2VyQ29tcG9uZW50LCBFdWlEYXRlVGltZVBpY2tlckNvbmZpZyB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktdGltZXBpY2tlcic7XG5pbXBvcnQgeyBEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcsIExvY2FsZVNlcnZpY2UsIFV4QXBwU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvc2hhcmVkJztcblxuY29uc3QgbW9tZW50ID0gX3JvbGx1cE1vbWVudCB8fCBfbW9tZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V1aS1kYXRlcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aURhdGVwaWNrZXJDb21wb25lbnRcbiAgICBleHRlbmRzIEJhc2VEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcbiAgICBwdWJsaWMgaW5wdXRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIHB1YmxpYyBicmVha3BvaW50c1ZhbHVlOiBhbnkgPSB7XG4gICAgICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgaXNUYWJsZXQ6IGZhbHNlLFxuICAgICAgICBpc0x0RGVza3RvcDogZmFsc2UsXG4gICAgICAgIGlzRGVza3RvcDogZmFsc2UsXG4gICAgICAgIGlzWEw6IGZhbHNlLFxuICAgICAgICBpc1hYTDogZmFsc2UsXG4gICAgfTtcbiAgICBzaG93RGF0ZUJ1dHRvbiA9IHRydWU7XG4gICAgQFZpZXdDaGlsZCgnY2FsZW5kYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBjYWxlbmRhcjogTWF0RGF0ZXBpY2tlcjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUG9ydGFsUmVmJykgdGVtcGxhdGVQb3J0YWxSZWY6IFRlbXBsYXRlUmVmPEV1aUFjdGlvbkJ1dHRvbnNEaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IEV1aUFjdGlvbkJ1dHRvbnNEaXJlY3RpdmUpKSBldWlBY3Rpb25CdXR0b25zOiBFdWlBY3Rpb25CdXR0b25zRGlyZWN0aXZlO1xuXG4gICAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGRhdGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3MgPSAnJztcbiAgICBASW5wdXQoKSB2YWx1ZTogYW55O1xuICAgIEBJbnB1dCgpIHRvZ2dsZXJJY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdG9nZ2xlckljb25TdmcgPSAnZXVpLWNhbGVuZGFyLW91dGxpbmUnO1xuICAgIEBJbnB1dCgpIHRvZ2dsZXJMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdHlwZTogJ3llYXInIHwgJ21vbnRoJyB8ICdyZWd1bGFyJyA9ICdyZWd1bGFyJztcbiAgICBASW5wdXQoKSBzdGFydFZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcic7XG4gICAgQElucHV0KCkgZTJlQXR0ciA9ICdldWktZGF0ZXBpY2tlcic7XG4gICAgQElucHV0KCkgbWluRGF0ZTogYW55O1xuICAgIEBJbnB1dCgpIG1heERhdGU6IGFueTtcbiAgICBASW5wdXQoKSBkYXRlcGlja2VyRmlsdGVyOiAoZDogYW55KSA9PiBib29sZWFuID0gdGhpcy5kYXRlcGlja2VyRmlsdGVyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGVPdXRwdXRGb3JtYXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBjdXN0b21IZWFkZXI6IGFueTtcbiAgICBASW5wdXQoKSBkYXRlQ2xhc3M6IE1hdENhbGVuZGFyQ2VsbENsYXNzRnVuY3Rpb248YW55PjtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0RhdGV0aW1lcGlja2VyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEYXRldGltZXBpY2tlcjtcbiAgICB9XG4gICAgc2V0IGlzRGF0ZXRpbWVwaWNrZXIodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0RhdGV0aW1lcGlja2VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNEYXRldGltZXBpY2tlciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1NlY29uZHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNTZWNvbmRzO1xuICAgIH1cbiAgICBzZXQgaGFzU2Vjb25kcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc1NlY29uZHMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNTZWNvbmRzID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNPbmVJbnB1dEZpZWxkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNPbmVJbnB1dEZpZWxkO1xuICAgIH1cbiAgICBzZXQgaXNPbmVJbnB1dEZpZWxkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNPbmVJbnB1dEZpZWxkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNPbmVJbnB1dEZpZWxkID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaGFzTm9CdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNOb0J1dHRvbjtcbiAgICB9XG4gICAgc2V0IGhhc05vQnV0dG9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faGFzTm9CdXR0b24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNOb0J1dHRvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzRGF0ZXBpY2tlckJsb2NrKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNEYXRlcGlja2VyQmxvY2s7XG4gICAgfVxuICAgIHNldCBpc0RhdGVwaWNrZXJCbG9jayh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzRGF0ZXBpY2tlckJsb2NrID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNEYXRlcGlja2VyQmxvY2sgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWFkT25seTtcbiAgICB9XG4gICAgc2V0IGlzUmVhZE9ubHkodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlYWRPbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNSZWFkT25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0Rpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgaXNEaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNJbnB1dERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbnB1dERpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgaXNJbnB1dERpc2FibGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNJbnB1dERpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNJbnB1dERpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNCdXR0b25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQnV0dG9uRGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBpc0J1dHRvbkRpc2FibGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNCdXR0b25EaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIGVVSTE3IGluIGZhdm9yIG9mIHVzaW5nIG9ubHkgaXNCdXR0b25EaXNhYmxlZCBhcyB0aGVyZSBpcyBubyBsb25nZXIgb3B0aW9uIHRvIG9wZW4gdGhlIGNhbGVuZGFyIHRocm91Z2ggdGhlIGlucHV0IGZpZWxkKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1BpY2tlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNQaWNrZXJEaXNhYmxlZDtcbiAgICB9XG4gICAgc2V0IGlzUGlja2VyRGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1BpY2tlckRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNQaWNrZXJEaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xlYXJhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGVhcmFibGUgJiYgIXRoaXMuX2lzUmVhZE9ubHk7XG4gICAgfVxuICAgIHNldCBpc0NsZWFyYWJsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xlYXJhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNDbGVhcmFibGUgPSBmYWxzZTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIGVVSTE3ICovXG4gICAgQElucHV0KClcbiAgICBnZXQgaGFzQWN0aW9uQnV0dG9ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0FjdGlvbkJ1dHRvbnM7XG4gICAgfVxuICAgIHNldCBoYXNBY3Rpb25CdXR0b25zKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faGFzQWN0aW9uQnV0dG9ucyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hhc0FjdGlvbkJ1dHRvbnMgPSBmYWxzZTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIGVVSTE3ICovXG4gICAgQElucHV0KClcbiAgICBnZXQgaGFzVG9kYXlCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNUb2RheUJ1dHRvbjtcbiAgICB9XG4gICAgc2V0IGhhc1RvZGF5QnV0dG9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faGFzVG9kYXlCdXR0b24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNUb2RheUJ1dHRvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHJlc3RyaWN0VG9SZWdleCgpOiBSZWdFeHAge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzdHJpY3RUb1JlZ2V4O1xuICAgIH1cbiAgICBzZXQgcmVzdHJpY3RUb1JlZ2V4KHZhbHVlOiBzdHJpbmcgfCBSZWdFeHApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3RyaWN0VG9SZWdleCA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzdHJpY3RUb1JlZ2V4ID0gbmV3IFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVzdHJpY3RUb1JlZ2V4IGNhbiBvbmx5IGJlIHN0cmluZyBvciBSZWdFeHAsIGl0IGNhbm5vdCBiZSAke3R5cGVvZiB2YWx1ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9yZXN0cmljdFRvUmVnZXg6IFJlZ0V4cDtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBbc3VwZXIuZ2V0Q3NzQ2xhc3NlcygnZXVpLWRhdGVwaWNrZXInKV0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIGZvcm1hdDogTWF0RGF0ZUZvcm1hdHM7XG4gICAgcHJpdmF0ZSBwb3J0YWxIb3N0OiBEb21Qb3J0YWxPdXRsZXQ7XG4gICAgcHJpdmF0ZSBwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxFdWlUaW1lcGlja2VyQ29tcG9uZW50PjtcbiAgICBwcml2YXRlIHRlbXBsYXRlUG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDxFdWlBY3Rpb25CdXR0b25zRGlyZWN0aXZlPjtcbiAgICBwcml2YXRlIGlzTnVsbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYWRhcHRlcjogRGF0ZUFkYXB0ZXI8YW55PixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXhBcHBTaGVsbFNlcnZpY2U6IFV4QXBwU2hlbGxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBFdWlMZXR0ZXJGb3JtYXREaXJlY3RpdmUpKSBwdWJsaWMgZXVpTGV0dGVyRm9ybWF0OiBFdWlMZXR0ZXJGb3JtYXREaXJlY3RpdmUsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBJbmplY3QoTUFUX0RBVEVfRk9STUFUUykgZm9ybWF0OiBNYXREYXRlRm9ybWF0cyxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuaXNJbnB1dERpc2FibGVkID8gdGhpcy5pbnB1dEZvcm1Db250cm9sLmRpc2FibGUoKSA6IHRoaXMuaW5wdXRGb3JtQ29udHJvbC5lbmFibGUoKTtcblxuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci5zZXRMb2NhbGUoc3RhdGUuaWQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAncmVndWxhcicgJiYgIXRoaXMuaXNEYXRldGltZXBpY2tlcikge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuc3RyZWFtKCdldWkuZGF0ZXBpY2tlci5QTEFDRUhPTERFUicpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdyZWd1bGFyJyAmJiB0aGlzLmlzRGF0ZXRpbWVwaWNrZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLnN0cmVhbSgnZXVpLmRhdGVwaWNrZXIuSVNEQVRFVElNRVBJQ0tFUicpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuc3RyZWFtKCdldWkuZGF0ZXBpY2tlci5ZRUFSLVBMQUNFSE9MREVSJylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuc3RyZWFtKCdldWkuZGF0ZXBpY2tlci5NT05USC1QTEFDRUhPTERFUicpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51eEFwcFNoZWxsU2VydmljZS5icmVha3BvaW50cyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYmtwcykgPT4gKHRoaXMuYnJlYWtwb2ludHNWYWx1ZSA9IGJrcHMpKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV1aUFjdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVQb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZVBvcnRhbFJlZiwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZXRpbWVwaWNrZXIgfHwgdGhpcy5ldWlBY3Rpb25CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyWydjbG9zZUNhbGVuZGFyJ10gPSB0aGlzLmNhbGVuZGFyLmNsb3NlO1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5jbG9zZSA9ICgpOiBib29sZWFuID0+IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICAvLyBtYXJrcyB0aGUgaW5wdXQgY29udHJvbCBhcyB0b3VjaGVkL2ludmFsaWQgaWYgdGhlIGZvcm0gY29udHJvbCBpcyB0b3VjaGVkL2ludmFsaWRcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8udG91Y2hlZCA/IHRoaXMuaW5wdXRGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCkgOiB0aGlzLmlucHV0Rm9ybUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LmludmFsaWQgPyB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHRoaXMuY29udHJvbC5lcnJvcnMpIDogdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1snaXNSZWFkT25seSddKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGF0ZUJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEYXRlQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXNbJ2lzRGlzYWJsZWQnXSkge1xuICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlZFN0YXRlKHRoaXMuaXNEaXNhYmxlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcyAmJiBjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRlT3V0cHV0Rm9ybWF0ICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShtb21lbnQodGhpcy52YWx1ZSkuZm9ybWF0KHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1snaXNDbGVhcmFibGUnXSkge1xuICAgICAgICAgICAgLy8gd2hlbiBpcyBjbGVhcmFibGUgaXMgdXNlZCBsaXN0ZW4gaWYgb25jbGVhciBpcyBmaXJlZCBhbmQgdXBkYXRlIHRoZSB2YWx1ZVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbGVhcmFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVJbmplY3RvcihkYXRhOiBhbnkpOiBJbmplY3RvciB7XG4gICAgICAgIGNvbnN0IGluamVjdG9yVG9rZW5zOiBTdGF0aWNQcm92aWRlciA9IFt7IHByb3ZpZGU6IERZTkFNSUNfQ09NUE9ORU5UX0NPTkZJRywgdXNlVmFsdWU6IGRhdGEgfV07XG4gICAgICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBpbmplY3RvclRva2VucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlbkNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5vcGVuKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZXRpbWVwaWNrZXIgfHwgdGhpcy5ldWlBY3Rpb25CdXR0b25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5vcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIGxpc3RlbnMgdG8gdGhlIGtleWRvd24gZXZlbnQgb25jZSB0aGUgY2FsZW5kYXIgb3BlbmVkXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzogLy9jbG9zZXMgdGhlIGNhbGVuZGFyIG9uIEVzY2FwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2xvc2VzIHRoZSBjYWxlbmRhciBpZiBwcmVzc2luZyBFbnRlciBvbiB0aGUgY2xvc2UgY2FsZW5kYXIgYnV0dG9uIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRFdmVudFBhdGgoZXZlbnQpLmZvckVhY2goKHA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuY2xhc3NOYW1lICYmIHAuY2xhc3NOYW1lLmluZGV4T2YoJ21hdC1kYXRlcGlja2VyLWNsb3NlLWJ1dHRvbicpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRldGltZXBpY2tlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucG9ydGFsSG9zdCA9IG5ldyBEb21Qb3J0YWxPdXRsZXQoXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21hdC1jYWxlbmRhcicpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgdGhlcmUgaXMgYW4gdXBkYXRlIG9uIGZyYW1ld29yayBzaWRlIEVVSS02MjA3XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwUmVmLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZUNvbmZpZzogRXVpRGF0ZVRpbWVQaWNrZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnZhbHVlICYmIG1vbWVudCh0aGlzLnZhbHVlKS5ob3VycygpLFxuICAgICAgICAgICAgICAgICAgICBtaW5zOiB0aGlzLnZhbHVlICYmIG1vbWVudCh0aGlzLnZhbHVlKS5taW51dGVzKCksXG4gICAgICAgICAgICAgICAgICAgIHNlY3M6IHRoaXMudmFsdWUgJiYgbW9tZW50KHRoaXMudmFsdWUpLnNlY29uZHMoKSxcbiAgICAgICAgICAgICAgICAgICAgaXNEYXRldGltZXBpY2tlcjogdGhpcy5pc0RhdGV0aW1lcGlja2VyLFxuICAgICAgICAgICAgICAgICAgICBoYXNTZWNvbmRzOiB0aGlzLmhhc1NlY29uZHMsXG4gICAgICAgICAgICAgICAgICAgIGlzT25lSW5wdXRGaWVsZDogdGhpcy5pc09uZUlucHV0RmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRm46IChob3VyczogbnVtYmVyLCBtaW5zOiBudW1iZXIsIHNlY3M6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXVpQWN0aW9uQnV0dG9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbW9tZW50KHRoaXMudmFsdWUsIG1vbWVudC5JU09fODYwMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtb21lbnQodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQucGFyc2UuZGF0ZUlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyOiBob3VycyB8fCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogbWlucyB8fCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZDogc2VjcyB8fCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ldWlBY3Rpb25CdXR0b25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobW9tZW50KHRoaXMudmFsdWUpLmZvcm1hdCh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShtb21lbnQodGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKEV1aVRpbWVwaWNrZXJDb21wb25lbnQsIG51bGwsIHRoaXMuY3JlYXRlSW5qZWN0b3IodGltZUNvbmZpZykpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9ydGFsSG9zdC5hdHRhY2godGhpcy5wb3J0YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMucG9ydGFsSG9zdD8uZGV0YWNoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBjYWxlbmRhciBvcGVucyBhbmQgaXNEYXRldGltZXBpY2tlciBvciBldWktYWN0aW9uLWJ1dHRvbnMgZGlyZWN0aXZlIHVzZWQsIGl0IGNsb3NlcyB0aGUgY2FsZW5kYXIgd2hlbiBjbGlja2luZyBvdXRzaWRlIG9mIHRoZVxuICAgICAqIG92ZXJsYXkuIElmIGV1aS1hY3Rpb24tYnV0dG9ucyBkaXJlY3RpdmUgaXMgdXNlZCBpdCByZWdpc3RlcnMgdGhlIHRlbXBsYXRlIHBvcnRhbCB3aGVyZSB0aGUgdXNlciBjYW4gYWRkIHByb2plY3RlZCBjb250ZW50IGFzIGFcbiAgICAgKiBmb290ZXIuXG4gICAgICovXG4gICAgb25PcGVuZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZXRpbWVwaWNrZXIgfHwgdGhpcy5ldWlBY3Rpb25CdXR0b25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ldWlBY3Rpb25CdXR0b25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5yZWdpc3RlckFjdGlvbnModGhpcy50ZW1wbGF0ZVBvcnRhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJbJ19vdmVybGF5UmVmJ11bJ19iYWNrZHJvcENsaWNrJ10ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEV2ZW50UGF0aChldmVudCk6IGFueSB7XG4gICAgICAgIGlmIChldmVudC5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQucGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdGggPSBbXTtcbiAgICAgICAgbGV0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICB3aGlsZSAodGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHBhdGgucHVzaCh0YXJnZXQpO1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBwYXRoLnB1c2goZG9jdW1lbnQsIHdpbmRvdyk7XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgY2hvc2VuRGF0ZUhhbmRsZXIobm9ybWFsaXplZERhdGU6IGFueSwgY2FsZW5kYXI6IE1hdERhdGVwaWNrZXI8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IG1vbWVudChub3JtYWxpemVkRGF0ZSwgdGhpcy5kYXRlT3V0cHV0Rm9ybWF0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZShmb3JtYXR0ZWRWYWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGZvcm1hdHRlZFZhbHVlLmZvcm1hdCh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChmb3JtYXR0ZWRWYWx1ZS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChmb3JtYXR0ZWRWYWx1ZS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbm9ybWFsaXplZERhdGU7XG4gICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5kYXRlU2VsZWN0LmVtaXQodGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGVuZGFyLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRhdGVwaWNrZXJGaWx0ZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVJbnB1dChlOiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxNb21lbnQgfCBEYXRlIHwgc3RyaW5nPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNEYXRldGltZXBpY2tlcikge1xuICAgICAgICAgICAgaWYgKGUudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQoZS52YWx1ZSwgdGhpcy5kYXRlT3V0cHV0Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlLmZvcm1hdCh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodGhpcy52YWx1ZS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChlPy52YWx1ZSA/IGUudmFsdWUgOiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGF0ZUNoYW5nZShlOiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxNb21lbnQgfCBEYXRlIHwgc3RyaW5nPik6IHZvaWQge1xuICAgICAgICBpZiAoZS52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuaXNOdWxsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNOdWxsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RhdGV0aW1lcGlja2VyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91cnMgPSB0aGlzLnZhbHVlICYmIG1vbWVudCh0aGlzLnZhbHVlKS5ob3VycygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbnMgPSB0aGlzLnZhbHVlICYmIG1vbWVudCh0aGlzLnZhbHVlKS5taW51dGVzKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjcyA9IHRoaXMudmFsdWUgJiYgbW9tZW50KHRoaXMudmFsdWUpLnNlY29uZHMoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQoZS52YWx1ZSwgdGhpcy5mb3JtYXQucGFyc2UuZGF0ZUlucHV0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnNldCh7XG4gICAgICAgICAgICAgICAgICAgIGhvdXI6IGhvdXJzIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogbWlucyB8fCAwLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmQ6IHNlY3MgfHwgMCxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbGVuZGFyLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZU91dHB1dEZvcm1hdCAmJiB0aGlzLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobW9tZW50KHRoaXMudmFsdWUpLmZvcm1hdCh0aGlzLmRhdGVPdXRwdXRGb3JtYXQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShtb21lbnQodGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbW9tZW50KGUudmFsdWUsIHRoaXMuZGF0ZU91dHB1dEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVNlbGVjdC5lbWl0KHRoaXMudmFsdWUuZm9ybWF0KHRoaXMuZGF0ZU91dHB1dEZvcm1hdCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVNlbGVjdC5lbWl0KGU/LnZhbHVlID8gZS52YWx1ZSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZWRJbnB1dChlOiBzdHJpbmcgfCBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBlID09PSAnc3RyaW5nJyA/IGUgOiAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5pc051bGwpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQodmFsdWUsIHRoaXMuZm9ybWF0LnBhcnNlLmRhdGVJbnB1dCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRlT3V0cHV0Rm9ybWF0ICYmIHRoaXMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQodGhpcy5kYXRlT3V0cHV0Rm9ybWF0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG1vbWVudCh0aGlzLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVTZWxlY3QuZW1pdChudWxsKTtcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShudWxsKTtcbiAgICB9XG5cbiAgICBvbktleXByZXNzKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5DYWxlbmRhcigpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Jlc3RyaWN0VG9SZWdleCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9yZXN0cmljdFRvUmVnZXgudGVzdChlLmtleSkpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIHRvZGF5J3MgZGF0ZVxuICAgICAqL1xuICAgIHNlbGVjdFRvZGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUobW9tZW50KCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY2FsZW5kYXIgd2hlbiBpc0RhdGV0aW1lcGlja2VyIG9yIGV1aS1hY3Rpb24tYnV0dG9ucyB1c2VkIGFuZCByZW1vdmVzIHRoZSBhcHBsaWVkIGZvb3RlciB3aGVuIGV1aS1hY3Rpb24tYnV0dG9ucyB1c2VkXG4gICAgICovXG4gICAgY2xvc2VDYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhclsnY2xvc2VDYWxlbmRhciddKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXVpQWN0aW9uQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5yZW1vdmVBY3Rpb25zKHRoaXMudGVtcGxhdGVQb3J0YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBldWktYWN0aW9uLWJ1dHRvbnMgdXNlZCwgaXQgYXBwbGllcyB0aGUgZGF0ZSBzZWxlY3Rpb24gYW5kIGNsb3NlcyB0aGUgY2FsZW5kYXJcbiAgICAgKi9cbiAgICBvbkRhdGVTZWxlY3RBcHBseSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhci5fYXBwbHlQZW5kaW5nU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBjb252VHlwZVRvU3RhcnRWaWV3KHR5cGU6IHN0cmluZyk6ICd5ZWFyJyB8ICdtb250aCcgfCAnbXVsdGkteWVhcicge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3llYXInO1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtdWx0aS15ZWFyJztcbiAgICAgICAgICAgIGNhc2UgJ3JlZ3VsYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiAnbW9udGgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIGRpc2FibGVzIG9ubHkgdGhlIGlucHV0IHRocm91Z2ggcmVhY3RpdmUgZm9ybXNcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5wdXREaXNhYmxlZCAmJiAhdGhpcy5pc1BpY2tlckRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0lucHV0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IHRoaXMuaXNQaWNrZXJEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGRpc2FibGVzIG9ubHkgdGhlIGJ1dHRvbiB0aHJvdWdoIHJlYWN0aXZlIGZvcm1zXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNCdXR0b25EaXNhYmxlZCAmJiAhdGhpcy5pc0lucHV0RGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSW5wdXREaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IHRoaXMuaXNQaWNrZXJEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbnB1dERpc2FibGVkID0gdGhpcy5pc1BpY2tlckRpc2FibGVkID0gdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnB1dERpc2FibGVkID0gdGhpcy5pc1BpY2tlckRpc2FibGVkID0gdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzSW5wdXREaXNhYmxlZCA/IHRoaXMuaW5wdXRGb3JtQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIHRvdWNoZWQgd2hlbiBmb2N1c2luZyBvdXQgdG8gdHJpZ2dlciB2YWxpZGF0aW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSk6IHZvaWQgPT4ge307XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBwcm9wYWdhdGVUb3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG59XG5cbmV4cG9ydCBjb25zdCBMRVRURVJfRk9STUFUID0ge1xuICAgIHBhcnNlOiB7XG4gICAgICAgIGRhdGVJbnB1dDogJ0xMJyxcbiAgICB9LFxuICAgIGRpc3BsYXk6IHtcbiAgICAgICAgZGF0ZUlucHV0OiAnTEwnLFxuICAgICAgICBtb250aFllYXJMYWJlbDogJ0xMJyxcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFlFQVJfRk9STUFUID0ge1xuICAgIHBhcnNlOiB7XG4gICAgICAgIGRhdGVJbnB1dDogJ1lZWVknLFxuICAgIH0sXG4gICAgZGlzcGxheToge1xuICAgICAgICBkYXRlSW5wdXQ6ICdZWVlZJyxcbiAgICAgICAgbW9udGhZZWFyTGFiZWw6ICdZWVlZJyxcbiAgICAgICAgZGF0ZUExMXlMYWJlbDogJ1lZWVknLFxuICAgICAgICBtb250aFllYXJBMTF5TGFiZWw6ICdZWVlZJyxcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IE1PTlRIX1lFQVJfRk9STUFUID0ge1xuICAgIHBhcnNlOiB7XG4gICAgICAgIGRhdGVJbnB1dDogJ01NL1lZWVknLFxuICAgIH0sXG4gICAgZGlzcGxheToge1xuICAgICAgICBkYXRlSW5wdXQ6ICdNTS9ZWVlZJyxcbiAgICAgICAgbW9udGhZZWFyTGFiZWw6ICdNTU0gWVlZWScsXG4gICAgICAgIGRhdGVBMTF5TGFiZWw6ICdMTCcsXG4gICAgICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NTU0gWVlZWScsXG4gICAgfSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2V1aUxldHRlckZvcm1hdF0nLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IExFVFRFUl9GT1JNQVQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUxldHRlckZvcm1hdERpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tldWlZZWFyRm9ybWF0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogWUVBUl9GT1JNQVQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVllYXJGb3JtYXREaXJlY3RpdmUge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZXVpTW9udGhZZWFyRm9ybWF0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogTU9OVEhfWUVBUl9GT1JNQVQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aU1vbnRoWWVhckZvcm1hdERpcmVjdGl2ZSB7fVxuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnZXVpLWFjdGlvbi1idXR0b25zJyB9KVxuZXhwb3J0IGNsYXNzIEV1aUFjdGlvbkJ1dHRvbnNEaXJlY3RpdmUge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzcyA9ICdldWktZGF0ZXBpY2tlcl9fYWN0aW9uLWJ1dHRvbnMnO1xuIH1cbiIsIjxkaXYgY2xhc3M9XCJldWktZGF0ZXBpY2tlcl9fd3JhcHBlciB7eyBzdHlsZUNsYXNzIH19XCIgW2NsYXNzLmV1aS1kYXRlcGlja2VyX193cmFwcGVyLS1yZXNwb25zaXZlXT1cImlzRGF0ZXBpY2tlckJsb2NrXCI+XG4gICAgPGRpdiBldWlJbnB1dEdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLWlucHV0LWdyb3VwLWFkZG9uXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBldWlJbnB1dFRleHRcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgW2V1aUNsZWFyYWJsZV09XCJpc0NsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgKGNsZWFyKT1cIm9uQ2xlYXIoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1kYXRlcGlja2VyLS1uby1idXR0b25dPVwiaGFzTm9CdXR0b25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktZGF0ZXBpY2tlci0tbG9uZy1mb3JtYXRdPVwiIWlzRGF0ZXBpY2tlckJsb2NrICYmIChpc0RhdGV0aW1lcGlja2VyIHx8IGV1aUxldHRlckZvcm1hdClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktZGF0ZXBpY2tlci0tYmxvY2tdPVwiaXNEYXRlcGlja2VyQmxvY2tcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJjYWxlbmRhclwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiXG4gICAgICAgICAgICAgICAgKGRhdGVJbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heERhdGVcIlxuICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVwaWNrZXJGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGF0ZSBJbnB1dCBGaWVsZFwiXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9uS2V5cHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoKVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpc0RhdGV0aW1lcGlja2VyID8gY2hhbmdlZElucHV0KCRldmVudCkgOiBudWxsXCIgLz5cbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICNjYWxlbmRhclxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJtYXQtY2FsZW5kYXIte3sgdHlwZSB9fVwiXG4gICAgICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJ0eXBlID09PSAncmVndWxhcicgPyAoc3RhcnRWaWV3ID8gc3RhcnRWaWV3IDogY29udlR5cGVUb1N0YXJ0Vmlldyh0eXBlKSkgOiBjb252VHlwZVRvU3RhcnRWaWV3KHR5cGUpXCJcbiAgICAgICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInR5cGUgPT09ICd5ZWFyJyA/IGNob3NlbkRhdGVIYW5kbGVyKCRldmVudCwgY2FsZW5kYXIpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwidHlwZSA9PT0gJ21vbnRoJyA/IGNob3NlbkRhdGVIYW5kbGVyKCRldmVudCwgY2FsZW5kYXIpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW3RvdWNoVWldPVwiYnJlYWtwb2ludHNWYWx1ZS5pc1RhYmxldCB8fCBicmVha3BvaW50c1ZhbHVlLmlzTW9iaWxlXCJcbiAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJpc0RhdGV0aW1lcGlja2VyID8gJ2V1aS1kYXRlcGlja2VyLS1jb250YWluZXItaGVpZ2h0LWxhcmdlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1BpY2tlckRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiY3VzdG9tSGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbZGF0ZUNsYXNzXT1cImRhdGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgKG9wZW5lZCk9XCJvbk9wZW5lZCgpXCI+XG4gICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhhc05vQnV0dG9uICYmIHNob3dEYXRlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIlxuICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGV1aVNlY29uZGFyeVxuICAgICAgICAgICAgICAgIFtldWlJY29uQnV0dG9uXT1cIiF0b2dnbGVyTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtldWlEaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwiZGlhbG9nXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdG9nZ2xlckxhYmVsICYmIHRvZ2dsZXJJY29uXCIgZXVpSWNvbiBhcmlhLWxhYmVsPVwiT3BlbiBDYWxlbmRhclwiIGljb25DbGFzcz1cInt7IHRvZ2dsZXJJY29uIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdG9nZ2xlckxhYmVsICYmICF0b2dnbGVySWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJ7eyB0b2dnbGVySWNvblN2ZyB9fVwiIGFyaWEtbGFiZWw9XCJPcGVuIENhbGVuZGFyXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0b2dnbGVyTGFiZWxcIj57eyB0b2dnbGVyTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVBvcnRhbFJlZj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJldWktYWN0aW9uLWJ1dHRvbnNcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -133,6 +133,10 @@ export declare class EuiDatepickerComponent extends BaseDirective implements OnI
133
133
  registerOnTouched(fn: any): void;
134
134
  convTypeToStartView(type: string): 'year' | 'month' | 'multi-year';
135
135
  setDisabledState?(isDisabled: boolean): void;
136
+ /**
137
+ * Marks the form field as touched when focusing out to trigger validation
138
+ */
139
+ protected onFocusOut(): void;
136
140
  private propagateChange;
137
141
  private propagateTouched;
138
142
  static ɵfac: i0.ɵɵFactoryDeclaration<EuiDatepickerComponent, [null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; self: true; }, null]>;
@@ -1 +1 @@
1
- {"version":3,"file":"eui-datepicker.component.d.ts","sourceRoot":"","sources":["../../eui-datepicker/eui-datepicker.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eui-datepicker.component.d.ts","sourceRoot":"","sources":["../../eui-datepicker/eui-datepicker.component.ts"],"names":[],"mappings":"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"}
@@ -556,12 +556,18 @@ class EuiDatepickerComponent extends BaseDirective {
556
556
  }
557
557
  this.isInputDisabled ? this.inputFormControl.disable() : this.inputFormControl.enable();
558
558
  }
559
+ /**
560
+ * Marks the form field as touched when focusing out to trigger validation
561
+ */
562
+ onFocusOut() {
563
+ this.propagateTouched();
564
+ }
559
565
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EuiDatepickerComponent, deps: [{ token: i1.DateAdapter }, { token: i2.TranslateService }, { token: i3.LocaleService }, { token: i3.UxAppShellService }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.ViewContainerRef }, { token: forwardRef(() => EuiLetterFormatDirective), optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: MAT_DATE_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }
560
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EuiDatepickerComponent, selector: "eui-datepicker", inputs: { styleClass: "styleClass", value: "value", togglerIcon: "togglerIcon", togglerIconSvg: "togglerIconSvg", togglerLabel: "togglerLabel", placeholder: "placeholder", type: "type", startView: "startView", e2eAttr: "e2eAttr", minDate: "minDate", maxDate: "maxDate", datepickerFilter: "datepickerFilter", dateOutputFormat: "dateOutputFormat", customHeader: "customHeader", dateClass: "dateClass", isDatetimepicker: "isDatetimepicker", hasSeconds: "hasSeconds", isOneInputField: "isOneInputField", hasNoButton: "hasNoButton", isDatepickerBlock: "isDatepickerBlock", isReadOnly: "isReadOnly", isDisabled: "isDisabled", isInputDisabled: "isInputDisabled", isButtonDisabled: "isButtonDisabled", isPickerDisabled: "isPickerDisabled", isClearable: "isClearable", hasActionButtons: "hasActionButtons", hasTodayButton: "hasTodayButton", restrictToRegex: "restrictToRegex" }, outputs: { inputChange: "inputChange", dateSelect: "dateSelect" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "euiActionButtons", first: true, predicate: i0.forwardRef(function () { return EuiActionButtonsDirective; }), descendants: true }], viewQueries: [{ propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, static: true }, { propertyName: "templatePortalRef", first: true, predicate: ["templatePortalRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i8.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i8.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i9.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["class", "isInvalid"] }, { kind: "component", type: i10.EuiInputGroupComponent, selector: "div[euiInputGroup]", inputs: ["e2eAttr", "styleClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
566
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EuiDatepickerComponent, selector: "eui-datepicker", inputs: { styleClass: "styleClass", value: "value", togglerIcon: "togglerIcon", togglerIconSvg: "togglerIconSvg", togglerLabel: "togglerLabel", placeholder: "placeholder", type: "type", startView: "startView", e2eAttr: "e2eAttr", minDate: "minDate", maxDate: "maxDate", datepickerFilter: "datepickerFilter", dateOutputFormat: "dateOutputFormat", customHeader: "customHeader", dateClass: "dateClass", isDatetimepicker: "isDatetimepicker", hasSeconds: "hasSeconds", isOneInputField: "isOneInputField", hasNoButton: "hasNoButton", isDatepickerBlock: "isDatepickerBlock", isReadOnly: "isReadOnly", isDisabled: "isDisabled", isInputDisabled: "isInputDisabled", isButtonDisabled: "isButtonDisabled", isPickerDisabled: "isPickerDisabled", isClearable: "isClearable", hasActionButtons: "hasActionButtons", hasTodayButton: "hasTodayButton", restrictToRegex: "restrictToRegex" }, outputs: { inputChange: "inputChange", dateSelect: "dateSelect" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "euiActionButtons", first: true, predicate: i0.forwardRef(function () { return EuiActionButtonsDirective; }), descendants: true }], viewQueries: [{ propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, static: true }, { propertyName: "templatePortalRef", first: true, predicate: ["templatePortalRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (focusout)=\"onFocusOut()\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "isLoading", "euiIconButton", "euiLineWrap"], outputs: ["buttonClick"] }, { kind: "component", type: i8.EuiIconComponent, selector: "div[euiIcon], span[euiIcon], i[euiIcon], eui-icon", inputs: ["aria-label", "iconClass", "isLoading"] }, { kind: "component", type: i8.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "transform", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: i9.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["class", "isInvalid"] }, { kind: "component", type: i10.EuiInputGroupComponent, selector: "div[euiInputGroup]", inputs: ["e2eAttr", "styleClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
561
567
  }
562
568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EuiDatepickerComponent, decorators: [{
563
569
  type: Component,
564
- args: [{ selector: 'eui-datepicker', encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"] }]
570
+ args: [{ selector: 'eui-datepicker', encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-datepicker__wrapper {{ styleClass }}\" [class.eui-datepicker__wrapper--responsive]=\"isDatepickerBlock\">\n <div euiInputGroup>\n <div class=\"eui-input-group-addon\">\n <input\n euiInputText\n [readonly]=\"isReadOnly\"\n [euiClearable]=\"isClearable\"\n (clear)=\"onClear()\"\n [class.eui-datepicker--no-button]=\"hasNoButton\"\n [class.eui-datepicker--long-format]=\"!isDatepickerBlock && (isDatetimepicker || euiLetterFormat)\"\n [class.eui-datepicker--block]=\"isDatepickerBlock\"\n [formControl]=\"inputFormControl\"\n [matDatepicker]=\"calendar\"\n placeholder=\"{{ placeholder }}\"\n (dateInput)=\"onDateInput($event)\"\n (dateChange)=\"onDateChange($event)\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepickerFilter]=\"datepickerFilter\"\n (click)=\"openCalendar()\"\n autocomplete=\"off\"\n aria-label=\"Date Input Field\"\n (keypress)=\"onKeypress($event)\"\n (focusout)=\"onFocusOut()\"\n (change)=\"isDatetimepicker ? changedInput($event) : null\" />\n <mat-datepicker\n #calendar\n panelClass=\"mat-calendar-{{ type }}\"\n [startView]=\"type === 'regular' ? (startView ? startView : convTypeToStartView(type)) : convTypeToStartView(type)\"\n (yearSelected)=\"type === 'year' ? chosenDateHandler($event, calendar) : null\"\n (monthSelected)=\"type === 'month' ? chosenDateHandler($event, calendar) : null\"\n [touchUi]=\"breakpointsValue.isTablet || breakpointsValue.isMobile\"\n [panelClass]=\"isDatetimepicker ? 'eui-datepicker--container-height-large' : null\"\n [disabled]=\"isPickerDisabled\"\n [calendarHeaderComponent]=\"customHeader\"\n [dateClass]=\"dateClass\"\n (opened)=\"onOpened()\">\n </mat-datepicker>\n <button\n *ngIf=\"!hasNoButton && showDateButton\"\n (click)=\"openCalendar()\"\n euiButton\n type=\"button\"\n euiSecondary\n [euiIconButton]=\"!togglerLabel\"\n [euiDisabled]=\"isButtonDisabled\"\n aria-haspopup=\"dialog\">\n <span *ngIf=\"!togglerLabel && togglerIcon\" euiIcon aria-label=\"Open Calendar\" iconClass=\"{{ togglerIcon }}\"></span>\n <ng-container *ngIf=\"!togglerLabel && !togglerIcon\">\n <eui-icon-svg icon=\"{{ togglerIconSvg }}\" aria-label=\"Open Calendar\"></eui-icon-svg>\n </ng-container>\n <span *ngIf=\"togglerLabel\">{{ togglerLabel }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #templatePortalRef>\n <ng-content select=\"eui-action-buttons\"></ng-content>\n</ng-template>\n", styles: [":host.eui-datepicker{display:flex;width:100%}.eui-datepicker{display:flex;width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) .eui-input-group-addon{width:unset}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input{border-bottom-right-radius:0;border-top-right-radius:0;width:calc(8.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-input-text--clearable{width:calc(9 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--long-format{width:calc(12.5 * var(--eui-base-spacing-m))}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--block{width:100%}.eui-datepicker .eui-datepicker__wrapper:not(.eui-datepicker__wrapper--responsive) input.eui-datepicker--no-button{border-bottom-right-radius:var(--eui-base-border-radius);border-top-right-radius:var(--eui-base-border-radius)}.eui-datepicker .eui-datepicker__wrapper .eui-input-group{margin-bottom:0}.eui-datepicker .eui-datepicker__wrapper--responsive,.eui-datepicker .eui-datepicker__wrapper--responsive .eui-input-group-addon{width:100%}.eui-datepicker--container-height-large{height:auto!important}.eui-datepicker__action-buttons{display:flex;justify-content:flex-end;align-items:center;padding:0 var(--eui-base-spacing-xs) var(--eui-base-spacing-xs) var(--eui-base-spacing-xs)}.eui-datepicker__actions-cancel-button{margin-right:var(--eui-base-spacing-m)}.mat-calendar.mat-calendar-year .mat-calendar-period-button{display:none}.mat-datepicker-dialog .mat-datepicker-content-touch{max-height:none}.mat-datepicker-content-touch .mat-datepicker-content-container{height:auto!important;max-height:-moz-fit-content!important;max-height:fit-content!important}.mat-mdc-icon-button:disabled{color:var(--eui-base-color-grey-35)!important}.eui-datepicker--primary input{background-color:var(--eui-base-color-primary-10)}.eui-datepicker--secondary input{background-color:var(--eui-base-color-grey-10)}.eui-datepicker--info input{background-color:var(--eui-base-color-info-10)}.eui-datepicker--success input{background-color:var(--eui-base-color-success-10)}.eui-datepicker--warning input{background-color:var(--eui-base-color-warning-10)}.eui-datepicker--danger input{background-color:var(--eui-base-color-danger-10)}.eui-datepicker--accent input{background-color:var(--eui-base-color-accent-10)}\n"] }]
565
571
  }], ctorParameters: function () { return [{ type: i1.DateAdapter }, { type: i2.TranslateService }, { type: i3.LocaleService }, { type: i3.UxAppShellService }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.ViewContainerRef }, { type: EuiLetterFormatDirective, decorators: [{
566
572
  type: Optional
567
573
  }, {