@ng-nest/ui 18.0.19 → 18.0.21

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.
@@ -42,9 +42,13 @@ export class XInputNumberComponent extends XInputNumberProperty {
42
42
  this.valueChange.next(this.value());
43
43
  });
44
44
  }
45
- change(value) {
46
- this.verify(value);
47
- this.valueChange.next(this.value());
45
+ writeValue(value) {
46
+ this.value.set(value);
47
+ this.verify(Number(value));
48
+ this.setDisplayValue(this.value());
49
+ }
50
+ ngOnInit() {
51
+ this.setDisplayValue(this.value());
48
52
  }
49
53
  down(event, limit, increase = true) {
50
54
  if (this.disabledComputed())
@@ -115,6 +119,10 @@ export class XInputNumberComponent extends XInputNumberProperty {
115
119
  this.inputValue.next(value);
116
120
  }
117
121
  setDisplayValue(value) {
122
+ if (XIsEmpty(value)) {
123
+ this.displayValue.set('');
124
+ return;
125
+ }
118
126
  let displayValue = '';
119
127
  const formatter = this.formatter();
120
128
  if (!XIsEmpty(value) && !formatter) {
@@ -130,10 +138,10 @@ export class XInputNumberComponent extends XInputNumberProperty {
130
138
  this.displayValue.set(displayValue);
131
139
  }
132
140
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XInputNumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
133
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: XInputNumberComponent, isStandalone: true, selector: "x-input-number", providers: [XValueAccessor(XInputNumberComponent)], viewQueries: [{ propertyName: "inputNumber", first: true, predicate: ["inputNumber"], descendants: true, isSignal: true }, { propertyName: "inputEleRef", first: true, predicate: ["inputEleRef"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [attr.value]=\"displayValue()\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"change($event)\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "component", type: XButtonComponent, selector: "x-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
141
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: XInputNumberComponent, isStandalone: true, selector: "x-input-number", providers: [XValueAccessor(XInputNumberComponent)], viewQueries: [{ propertyName: "inputNumber", first: true, predicate: ["inputNumber"], descendants: true, isSignal: true }, { propertyName: "inputEleRef", first: true, predicate: ["inputEleRef"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [ngModel]=\"displayValue()\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "component", type: XButtonComponent, selector: "x-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
134
142
  }
135
143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XInputNumberComponent, decorators: [{
136
144
  type: Component,
137
- args: [{ selector: `${XInputNumberPrefix}`, standalone: true, imports: [FormsModule, ReactiveFormsModule, XInputComponent, XButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XInputNumberComponent)], template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [attr.value]=\"displayValue()\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"change($event)\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"] }]
145
+ args: [{ selector: `${XInputNumberPrefix}`, standalone: true, imports: [FormsModule, ReactiveFormsModule, XInputComponent, XButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XInputNumberComponent)], template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [ngModel]=\"displayValue()\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"] }]
138
146
  }], ctorParameters: () => [] });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2lucHV0LW51bWJlci9pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvaW5wdXQtbnVtYmVyL2lucHV0LW51bWJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakgsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQVcsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVkzQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsb0JBQW9CO0lBcUI3RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBckJWLGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBMEIsYUFBYSxD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QUFDLENBQUMsQ0FBQztZQUN2RCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0QyxDQUFDO2lJQTNIVSxxQkFBcUI7cUhBQXJCLHFCQUFxQiw2REFGckIsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQywwUkMxQnBELDB1RkF5RUEsMFVEcERZLFdBQVcsb3RCQUFFLG1CQUFtQiwrQkFBRSxlQUFlLG9EQUFFLGdCQUFnQjs7MkZBT2xFLHFCQUFxQjtrQkFWakMsU0FBUzsrQkFDRSxHQUFHLGtCQUFrQixFQUFFLGNBQ3JCLElBQUksV0FDUCxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsaUJBRy9ELGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tRXZlbnQsIGludGVydmFsLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgRWxlbWVudFJlZixcclxuICBpbmplY3QsXHJcbiAgdmlld0NoaWxkLFxyXG4gIHNpZ25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYSXNFbXB0eSwgWE51bWJlciwgWElzTm90TmlsLCBYSXNGdW5jdGlvbiwgWElzU3RyaW5nIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IFhJbnB1dE51bWJlclByZWZpeCwgWElucHV0TnVtYmVyUHJvcGVydHkgfSBmcm9tICcuL2lucHV0LW51bWJlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWElucHV0Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvaW5wdXQnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgWEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2J1dHRvbic7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYSW5wdXROdW1iZXJQcmVmaXh9YCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgWElucHV0Q29tcG9uZW50LCBYQnV0dG9uQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zdHlsZS9pbmRleC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtYVmFsdWVBY2Nlc3NvcihYSW5wdXROdW1iZXJDb21wb25lbnQpXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWElucHV0TnVtYmVyQ29tcG9uZW50IGV4dGVuZHMgWElucHV0TnVtYmVyUHJvcGVydHkge1xyXG4gIGlucHV0TnVtYmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignaW5wdXROdW1iZXInKTtcclxuICBpbnB1dEVsZVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxYSW5wdXRDb21wb25lbnQ+KCdpbnB1dEVsZVJlZicpO1xyXG5cclxuICBkaXNwbGF5VmFsdWUgPSBzaWduYWw8c3RyaW5nPignJyk7XHJcbiAgbWluRGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xyXG4gIG1heERpc2FibGVkID0gc2lnbmFsKGZhbHNlKTtcclxuICBtb3VzZWRvd24kITogU3Vic2NyaXB0aW9uO1xyXG4gIG1vdXNldXAkITogU3Vic2NyaXB0aW9uO1xyXG4gIHRpbWVyOiBhbnk7XHJcbiAgaWNvbiA9IHNpZ25hbCgnJyk7XHJcbiAgaWNvblNwaW4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIGNsZWFyYWJsZSA9IHNpZ25hbChmYWxzZSk7XHJcbiAgaXNEb3duID0gc2lnbmFsKGZhbHNlKTtcclxuICB2YWx1ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgdW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgaW5wdXRWYWx1ZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlICYmIHRoaXMub25DaGFuZ2UoeCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmlucHV0VmFsdWUucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgdGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoWElzRnVuY3Rpb24odGhpcy5mb3JtYXR0ZXIoKSkpIHtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbHVlID09PSAnJykge1xyXG4gICAgICAgIHRoaXMudmFsdWUuc2V0KG51bGwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmVyaWZ5KE51bWJlcih2YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMudmFsdWUoKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMudmFsdWUoKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnZlcmlmeSh2YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLm5leHQodGhpcy52YWx1ZSgpKTtcclxuICB9XHJcblxyXG4gIGRvd24oZXZlbnQ6IEV2ZW50LCBsaW1pdDogWE51bWJlciwgaW5jcmVhc2U6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZENvbXB1dGVkKCkpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuaXNEb3duLnNldCh0cnVlKTtcclxuICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5tb3VzZWRvd24kID0gaW50ZXJ2YWwoTnVtYmVyKHRoaXMuZGVib3VuY2UoKSkpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1cyhldmVudCwgbGltaXQsIGluY3JlYXNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5tb3VzZXVwJCA9IGZyb21FdmVudCh0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ21vdXNldXAnKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVwKGV2ZW50KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIDE1MCk7XHJcbiAgfVxyXG5cclxuICB1cChldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkQ29tcHV0ZWQoKSkgcmV0dXJuO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5pc0Rvd24uc2V0KGZhbHNlKTtcclxuICAgIGlmICh0aGlzLm1vdXNlZG93biQpIHRoaXMubW91c2Vkb3duJC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMubW91c2V1cCQpIHRoaXMubW91c2V1cCQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHBsdXMoZXZlbnQ6IEV2ZW50LCBsaW1pdDogWE51bWJlciwgaW5jcmVhc2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZENvbXB1dGVkKCkpIHJldHVybjtcclxuICAgIGxpbWl0ID0gTnVtYmVyKGxpbWl0KTtcclxuICAgIGlmICghaW5jcmVhc2UpIGxpbWl0ID0gLWxpbWl0O1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMudGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oK3RoaXMudmFsdWUoKSkpIHRoaXMudmFsdWUuc2V0KDApO1xyXG4gICAgbGV0IHZhbHVlID0gTnVtYmVyKHRoaXMudmFsdWUoKSkgKyBsaW1pdDtcclxuICAgIHRoaXMudmVyaWZ5KHZhbHVlKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHZhbHVlKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuICAgIGlmIChYSXNTdHJpbmcodmFsdWUpICYmIE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSAhPT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFsdWUgPSBOdW1iZXIoTnVtYmVyKHZhbHVlKS50b0ZpeGVkKE51bWJlcih0aGlzLnByZWNpc2lvbigpKSkpO1xyXG4gICAgY29uc3Qgb2xkVmFsdWU6IG51bWJlciA9IHRoaXMudmFsdWUoKTtcclxuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oK3RoaXMudmFsdWUoKSkpIHtcclxuICAgICAgdGhpcy52YWx1ZS5zZXQob2xkVmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tYXhEaXNhYmxlZC5zZXQodmFsdWUgPj0gdGhpcy5tYXgoKSk7XHJcbiAgICAgIHRoaXMubWluRGlzYWJsZWQuc2V0KHZhbHVlIDw9IHRoaXMubWluKCkpO1xyXG4gICAgICB0aGlzLnZhbHVlLnNldCh0aGlzLm1heERpc2FibGVkKCkgPyB0aGlzLm1heCgpIDogdGhpcy5taW5EaXNhYmxlZCgpID8gdGhpcy5taW4oKSA6IHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXQoeDogRXZlbnQpIHtcclxuICAgIGNvbnN0IGlucHV0ID0geC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGxldCB2YWx1ZSA9IGlucHV0LnZhbHVlO1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzcGxheVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuICAgIGxldCBkaXNwbGF5VmFsdWUgPSAnJztcclxuICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuZm9ybWF0dGVyKCk7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHZhbHVlKSAmJiAhZm9ybWF0dGVyKSB7XHJcbiAgICAgIGRpc3BsYXlWYWx1ZSA9IE51bWJlcih2YWx1ZSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbigpKTtcclxuICAgIH0gZWxzZSBpZiAoZm9ybWF0dGVyKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlRm9ybWF0dGVyID0gZm9ybWF0dGVyKE51bWJlcih0aGlzLnZhbHVlKCkpKTtcclxuICAgICAgY29uc3QgdmFsID0gWElzTm90TmlsKHZhbHVlRm9ybWF0dGVyKSA/IHZhbHVlRm9ybWF0dGVyIDogJyc7XHJcbiAgICAgIGlmIChYSXNOb3ROaWwodmFsKSkge1xyXG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9IHZhbC50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQoZGlzcGxheVZhbHVlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAjaW5wdXROdW1iZXIgY2xhc3M9XCJ4LWlucHV0LW51bWJlclwiIFtjbGFzcy54LWlucHV0LW51bWJlci1oaWRkZW4tYnV0dG9uXT1cImhpZGRlbkJ1dHRvbigpXCI+XHJcbiAgPGRpdiBjbGFzcz1cIngtaW5wdXQtbnVtYmVyLXJvd1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNiZWZvcmVCdXR0b25UcGw+XHJcbiAgICAgIDx4LWJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwieC1pbnB1dC1udW1iZXItcmVkdWNlXCJcclxuICAgICAgICBpY29uPVwiZnRvLW1pbnVzXCJcclxuICAgICAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gICAgICAgIFtvbmx5SWNvbl09XCIhYm9yZGVyZWQoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQ29tcHV0ZWQoKSB8fCBtaW5EaXNhYmxlZCgpXCJcclxuICAgICAgICAoY2xpY2spPVwiIW1pbkRpc2FibGVkKCkgJiYgcGx1cygkZXZlbnQsIHN0ZXAoKSwgZmFsc2UpOyBmb3JtQ29udHJvbFZhbGlkYXRvcigpXCJcclxuICAgICAgICBhdHRyVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKG1vdXNlZG93bik9XCIhbWluRGlzYWJsZWQoKSAmJiBkb3duKCRldmVudCwgc3RlcCgpLCBmYWxzZSlcIlxyXG4gICAgICAgIChtb3VzZXVwKT1cInVwKCRldmVudClcIlxyXG4gICAgICAgIHBsYWluXHJcbiAgICAgICAgZmxhdFxyXG4gICAgICA+PC94LWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8eC1pbnB1dFxyXG4gICAgICAjaW5wdXRFbGVSZWZcclxuICAgICAgY2xhc3M9XCJ4LWlucHV0LW51bWJlci1pbnB1dFwiXHJcbiAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcclxuICAgICAgW2xhYmVsV2lkdGhdPVwibGFiZWxXaWR0aCgpXCJcclxuICAgICAgW2xhYmVsQWxpZ25dPVwibGFiZWxBbGlnbigpXCJcclxuICAgICAgW2p1c3RpZnldPVwianVzdGlmeSgpXCJcclxuICAgICAgW2FsaWduXT1cImFsaWduKClcIlxyXG4gICAgICBbZGlyZWN0aW9uXT1cImRpcmVjdGlvbigpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZENvbXB1dGVkKClcIlxyXG4gICAgICBbdmFsaWRhdG9yXT1cInZhbGlkYXRvckNvbXB1dGVkKClcIlxyXG4gICAgICBbaW5wdXRWYWxpZGF0b3JdPVwiaW5wdXRWYWxpZGF0b3IoKVwiXHJcbiAgICAgIFtpY29uXT1cImljb24oKVwiXHJcbiAgICAgIFtpY29uU3Bpbl09XCJpY29uU3BpbigpXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXHJcbiAgICAgIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlKClcIlxyXG4gICAgICBbYXR0ci52YWx1ZV09XCJkaXNwbGF5VmFsdWUoKVwiXHJcbiAgICAgIFtuZ01vZGVsXT1cImRpc3BsYXlWYWx1ZSgpXCJcclxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIlxyXG4gICAgICBbdmFsdWVUcGxdPVwidmFsdWVUcGwoKVwiXHJcbiAgICAgIFt2YWx1ZVRwbENvbnRleHRdPVwidmFsdWVUcGxDb250ZXh0KClcIlxyXG4gICAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gICAgICBbbWluXT1cIm1pbigpXCJcclxuICAgICAgW21heF09XCJtYXgoKVwiXHJcbiAgICAgIFtib3JkZXJlZF09XCJib3JkZXJlZCgpXCJcclxuICAgICAgW2JlZm9yZV09XCJoaWRkZW5CdXR0b24oKSA/ICcnIDogYmVmb3JlQnV0dG9uVHBsXCJcclxuICAgICAgW2FmdGVyXT1cImhpZGRlbkJ1dHRvbigpID8gJycgOiBhZnRlckJ1dHRvblRwbFwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cInBhdHRlcm5Db21wdXRlZCgpXCJcclxuICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUNvbXB1dGVkKClcIlxyXG4gICAgICAoeElucHV0KT1cIm9uSW5wdXQoJGV2ZW50KTsgZm9ybUNvbnRyb2xWYWxpZGF0b3IoKVwiXHJcbiAgICA+PC94LWlucHV0PlxyXG4gICAgPG5nLXRlbXBsYXRlICNhZnRlckJ1dHRvblRwbD5cclxuICAgICAgPHgtYnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJ4LWlucHV0LW51bWJlci1wbHVzXCJcclxuICAgICAgICBpY29uPVwiZnRvLXBsdXNcIlxyXG4gICAgICAgIFtzaXplXT1cInNpemUoKVwiXHJcbiAgICAgICAgW29ubHlJY29uXT1cIiFib3JkZXJlZCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRDb21wdXRlZCgpIHx8IG1heERpc2FibGVkKClcIlxyXG4gICAgICAgIChjbGljayk9XCIhbWF4RGlzYWJsZWQoKSAmJiBwbHVzKCRldmVudCwgc3RlcCgpKTsgZm9ybUNvbnRyb2xWYWxpZGF0b3IoKVwiXHJcbiAgICAgICAgYXR0clR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChtb3VzZWRvd24pPVwiIW1heERpc2FibGVkKCkgJiYgZG93bigkZXZlbnQsIHN0ZXAoKSlcIlxyXG4gICAgICAgIChtb3VzZXVwKT1cInVwKCRldmVudClcIlxyXG4gICAgICAgIHBsYWluXHJcbiAgICAgICAgZmxhdFxyXG4gICAgICA+PC94LWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBAaWYgKGludmFsaWQoKSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwieC1ib3JkZXItZXJyb3IgeC10b3AtbGVmdFwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwieC1ib3JkZXItZXJyb3IgeC10b3AtcmlnaHRcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIngtYm9yZGVyLWVycm9yIHgtYm90dG9tLWxlZnRcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIngtYm9yZGVyLWVycm9yIHgtYm90dG9tLXJpZ2h0XCI+PC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2lucHV0LW51bWJlci9pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvaW5wdXQtbnVtYmVyL2lucHV0LW51bWJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakgsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQVcsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVkzQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsb0JBQW9CO0lBcUI3RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBckJWLGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBMEIsYUFBYSxD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ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZyb21FdmVudCwgaW50ZXJ2YWwsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICB2aWV3Q2hpbGQsXHJcbiAgc2lnbmFsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhJc0VtcHR5LCBYTnVtYmVyLCBYSXNOb3ROaWwsIFhJc0Z1bmN0aW9uLCBYSXNTdHJpbmcgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgWElucHV0TnVtYmVyUHJlZml4LCBYSW5wdXROdW1iZXJQcm9wZXJ0eSB9IGZyb20gJy4vaW5wdXQtbnVtYmVyLnByb3BlcnR5JztcclxuaW1wb3J0IHsgWFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAbmctbmVzdC91aS9iYXNlLWZvcm0nO1xyXG5pbXBvcnQgeyBYSW5wdXRDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9pbnB1dCc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hJbnB1dE51bWJlclByZWZpeH1gLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBYSW5wdXRDb21wb25lbnQsIFhCdXR0b25Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N0eWxlL2luZGV4LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1hWYWx1ZUFjY2Vzc29yKFhJbnB1dE51bWJlckNvbXBvbmVudCldXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYSW5wdXROdW1iZXJDb21wb25lbnQgZXh0ZW5kcyBYSW5wdXROdW1iZXJQcm9wZXJ0eSB7XHJcbiAgaW5wdXROdW1iZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdpbnB1dE51bWJlcicpO1xyXG4gIGlucHV0RWxlUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPFhJbnB1dENvbXBvbmVudD4oJ2lucHV0RWxlUmVmJyk7XHJcblxyXG4gIGRpc3BsYXlWYWx1ZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuICBtaW5EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XHJcbiAgbWF4RGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xyXG4gIG1vdXNlZG93biQhOiBTdWJzY3JpcHRpb247XHJcbiAgbW91c2V1cCQhOiBTdWJzY3JpcHRpb247XHJcbiAgdGltZXI6IGFueTtcclxuICBpY29uID0gc2lnbmFsKCcnKTtcclxuICBpY29uU3BpbiA9IHNpZ25hbChmYWxzZSk7XHJcbiAgY2xlYXJhYmxlID0gc2lnbmFsKGZhbHNlKTtcclxuICBpc0Rvd24gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHZhbHVlQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBpbnB1dFZhbHVlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UgJiYgdGhpcy5vbkNoYW5nZSh4KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5wdXRWYWx1ZS5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChYSXNGdW5jdGlvbih0aGlzLmZvcm1hdHRlcigpKSkge1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW14wLTldL2csICcnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZS5zZXQobnVsbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52ZXJpZnkoTnVtYmVyKHZhbHVlKSk7XHJcbiAgICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUodGhpcy52YWx1ZSgpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLm5leHQodGhpcy52YWx1ZSgpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICB0aGlzLnZlcmlmeShOdW1iZXIodmFsdWUpKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMudmFsdWUoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKHRoaXMudmFsdWUoKSk7XHJcbiAgfVxyXG5cclxuICBkb3duKGV2ZW50OiBFdmVudCwgbGltaXQ6IFhOdW1iZXIsIGluY3JlYXNlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpKSByZXR1cm47XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmlzRG93bi5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubW91c2Vkb3duJCA9IGludGVydmFsKE51bWJlcih0aGlzLmRlYm91bmNlKCkpKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsdXMoZXZlbnQsIGxpbWl0LCBpbmNyZWFzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMubW91c2V1cCQgPSBmcm9tRXZlbnQodGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdtb3VzZXVwJylcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51cChldmVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCAxNTApO1xyXG4gIH1cclxuXHJcbiAgdXAoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZENvbXB1dGVkKCkpIHJldHVybjtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuaXNEb3duLnNldChmYWxzZSk7XHJcbiAgICBpZiAodGhpcy5tb3VzZWRvd24kKSB0aGlzLm1vdXNlZG93biQudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLm1vdXNldXAkKSB0aGlzLm1vdXNldXAkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwbHVzKGV2ZW50OiBFdmVudCwgbGltaXQ6IFhOdW1iZXIsIGluY3JlYXNlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpKSByZXR1cm47XHJcbiAgICBsaW1pdCA9IE51bWJlcihsaW1pdCk7XHJcbiAgICBpZiAoIWluY3JlYXNlKSBsaW1pdCA9IC1saW1pdDtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICh0aGlzLnRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XHJcbiAgICBpZiAoTnVtYmVyLmlzTmFOKCt0aGlzLnZhbHVlKCkpKSB0aGlzLnZhbHVlLnNldCgwKTtcclxuICAgIGxldCB2YWx1ZSA9IE51bWJlcih0aGlzLnZhbHVlKCkpICsgbGltaXQ7XHJcbiAgICB0aGlzLnZlcmlmeSh2YWx1ZSk7XHJcbiAgICB0aGlzLnNldERpc3BsYXlWYWx1ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLm5leHQodGhpcy52YWx1ZSgpKTtcclxuICB9XHJcblxyXG4gIHZlcmlmeSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICBpZiAoWElzU3RyaW5nKHZhbHVlKSAmJiBOdW1iZXIodmFsdWUpLnRvU3RyaW5nKCkgIT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhbHVlID0gTnVtYmVyKE51bWJlcih2YWx1ZSkudG9GaXhlZChOdW1iZXIodGhpcy5wcmVjaXNpb24oKSkpKTtcclxuICAgIGNvbnN0IG9sZFZhbHVlOiBudW1iZXIgPSB0aGlzLnZhbHVlKCk7XHJcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICBpZiAoTnVtYmVyLmlzTmFOKCt0aGlzLnZhbHVlKCkpKSB7XHJcbiAgICAgIHRoaXMudmFsdWUuc2V0KG9sZFZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWF4RGlzYWJsZWQuc2V0KHZhbHVlID49IHRoaXMubWF4KCkpO1xyXG4gICAgICB0aGlzLm1pbkRpc2FibGVkLnNldCh2YWx1ZSA8PSB0aGlzLm1pbigpKTtcclxuICAgICAgdGhpcy52YWx1ZS5zZXQodGhpcy5tYXhEaXNhYmxlZCgpID8gdGhpcy5tYXgoKSA6IHRoaXMubWluRGlzYWJsZWQoKSA/IHRoaXMubWluKCkgOiB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbklucHV0KHg6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IHgudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBsZXQgdmFsdWUgPSBpbnB1dC52YWx1ZTtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZS5uZXh0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHNldERpc3BsYXlWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICBpZiAoWElzRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlLnNldCgnJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkaXNwbGF5VmFsdWUgPSAnJztcclxuICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuZm9ybWF0dGVyKCk7XHJcbiAgICBpZiAoIVhJc0VtcHR5KHZhbHVlKSAmJiAhZm9ybWF0dGVyKSB7XHJcbiAgICAgIGRpc3BsYXlWYWx1ZSA9IE51bWJlcih2YWx1ZSkudG9GaXhlZCh0aGlzLnByZWNpc2lvbigpKTtcclxuICAgIH0gZWxzZSBpZiAoZm9ybWF0dGVyKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlRm9ybWF0dGVyID0gZm9ybWF0dGVyKE51bWJlcih0aGlzLnZhbHVlKCkpKTtcclxuICAgICAgY29uc3QgdmFsID0gWElzTm90TmlsKHZhbHVlRm9ybWF0dGVyKSA/IHZhbHVlRm9ybWF0dGVyIDogJyc7XHJcbiAgICAgIGlmIChYSXNOb3ROaWwodmFsKSkge1xyXG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9IHZhbC50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQoZGlzcGxheVZhbHVlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAjaW5wdXROdW1iZXIgY2xhc3M9XCJ4LWlucHV0LW51bWJlclwiIFtjbGFzcy54LWlucHV0LW51bWJlci1oaWRkZW4tYnV0dG9uXT1cImhpZGRlbkJ1dHRvbigpXCI+XHJcbiAgPGRpdiBjbGFzcz1cIngtaW5wdXQtbnVtYmVyLXJvd1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNiZWZvcmVCdXR0b25UcGw+XHJcbiAgICAgIDx4LWJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwieC1pbnB1dC1udW1iZXItcmVkdWNlXCJcclxuICAgICAgICBpY29uPVwiZnRvLW1pbnVzXCJcclxuICAgICAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gICAgICAgIFtvbmx5SWNvbl09XCIhYm9yZGVyZWQoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQ29tcHV0ZWQoKSB8fCBtaW5EaXNhYmxlZCgpXCJcclxuICAgICAgICAoY2xpY2spPVwiIW1pbkRpc2FibGVkKCkgJiYgcGx1cygkZXZlbnQsIHN0ZXAoKSwgZmFsc2UpOyBmb3JtQ29udHJvbFZhbGlkYXRvcigpXCJcclxuICAgICAgICBhdHRyVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKG1vdXNlZG93bik9XCIhbWluRGlzYWJsZWQoKSAmJiBkb3duKCRldmVudCwgc3RlcCgpLCBmYWxzZSlcIlxyXG4gICAgICAgIChtb3VzZXVwKT1cInVwKCRldmVudClcIlxyXG4gICAgICAgIHBsYWluXHJcbiAgICAgICAgZmxhdFxyXG4gICAgICA+PC94LWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8eC1pbnB1dFxyXG4gICAgICAjaW5wdXRFbGVSZWZcclxuICAgICAgY2xhc3M9XCJ4LWlucHV0LW51bWJlci1pbnB1dFwiXHJcbiAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcclxuICAgICAgW2xhYmVsV2lkdGhdPVwibGFiZWxXaWR0aCgpXCJcclxuICAgICAgW2xhYmVsQWxpZ25dPVwibGFiZWxBbGlnbigpXCJcclxuICAgICAgW2p1c3RpZnldPVwianVzdGlmeSgpXCJcclxuICAgICAgW2FsaWduXT1cImFsaWduKClcIlxyXG4gICAgICBbZGlyZWN0aW9uXT1cImRpcmVjdGlvbigpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZENvbXB1dGVkKClcIlxyXG4gICAgICBbdmFsaWRhdG9yXT1cInZhbGlkYXRvckNvbXB1dGVkKClcIlxyXG4gICAgICBbaW5wdXRWYWxpZGF0b3JdPVwiaW5wdXRWYWxpZGF0b3IoKVwiXHJcbiAgICAgIFtpY29uXT1cImljb24oKVwiXHJcbiAgICAgIFtpY29uU3Bpbl09XCJpY29uU3BpbigpXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXHJcbiAgICAgIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlKClcIlxyXG4gICAgICBbbmdNb2RlbF09XCJkaXNwbGF5VmFsdWUoKVwiXHJcbiAgICAgIFt2YWx1ZVRwbF09XCJ2YWx1ZVRwbCgpXCJcclxuICAgICAgW3ZhbHVlVHBsQ29udGV4dF09XCJ2YWx1ZVRwbENvbnRleHQoKVwiXHJcbiAgICAgIFtzaXplXT1cInNpemUoKVwiXHJcbiAgICAgIFttaW5dPVwibWluKClcIlxyXG4gICAgICBbbWF4XT1cIm1heCgpXCJcclxuICAgICAgW2JvcmRlcmVkXT1cImJvcmRlcmVkKClcIlxyXG4gICAgICBbYmVmb3JlXT1cImhpZGRlbkJ1dHRvbigpID8gJycgOiBiZWZvcmVCdXR0b25UcGxcIlxyXG4gICAgICBbYWZ0ZXJdPVwiaGlkZGVuQnV0dG9uKCkgPyAnJyA6IGFmdGVyQnV0dG9uVHBsXCJcclxuICAgICAgW3BhdHRlcm5dPVwicGF0dGVybkNvbXB1dGVkKClcIlxyXG4gICAgICBbbWVzc2FnZV09XCJtZXNzYWdlQ29tcHV0ZWQoKVwiXHJcbiAgICAgICh4SW5wdXQpPVwib25JbnB1dCgkZXZlbnQpOyBmb3JtQ29udHJvbFZhbGlkYXRvcigpXCJcclxuICAgID48L3gtaW5wdXQ+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FmdGVyQnV0dG9uVHBsPlxyXG4gICAgICA8eC1idXR0b25cclxuICAgICAgICBjbGFzcz1cIngtaW5wdXQtbnVtYmVyLXBsdXNcIlxyXG4gICAgICAgIGljb249XCJmdG8tcGx1c1wiXHJcbiAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcclxuICAgICAgICBbb25seUljb25dPVwiIWJvcmRlcmVkKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZENvbXB1dGVkKCkgfHwgbWF4RGlzYWJsZWQoKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiFtYXhEaXNhYmxlZCgpICYmIHBsdXMoJGV2ZW50LCBzdGVwKCkpOyBmb3JtQ29udHJvbFZhbGlkYXRvcigpXCJcclxuICAgICAgICBhdHRyVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKG1vdXNlZG93bik9XCIhbWF4RGlzYWJsZWQoKSAmJiBkb3duKCRldmVudCwgc3RlcCgpKVwiXHJcbiAgICAgICAgKG1vdXNldXApPVwidXAoJGV2ZW50KVwiXHJcbiAgICAgICAgcGxhaW5cclxuICAgICAgICBmbGF0XHJcbiAgICAgID48L3gtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIEBpZiAoaW52YWxpZCgpKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ4LWJvcmRlci1lcnJvciB4LXRvcC1sZWZ0XCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ4LWJvcmRlci1lcnJvciB4LXRvcC1yaWdodFwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwieC1ib3JkZXItZXJyb3IgeC1ib3R0b20tbGVmdFwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwieC1ib3JkZXItZXJyb3IgeC1ib3R0b20tcmlnaHRcIj48L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -3,7 +3,7 @@ import { XPortalService, XPortalConnectedPosition } from '@ng-nest/ui/portal';
3
3
  import { Subject, fromEvent } from 'rxjs';
4
4
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, ViewContainerRef, inject, signal, computed, viewChild, effect } from '@angular/core';
5
5
  import { XTimePickerPrefix, XTimePickerProperty } from './time-picker.property';
6
- import { XIsEmpty, XIsDate, XIsNumber, XIsString, XParents } from '@ng-nest/ui/core';
6
+ import { XIsEmpty, XIsDate, XIsNumber, XIsString, XParents, XIsNull } from '@ng-nest/ui/core';
7
7
  import { XInputComponent } from '@ng-nest/ui/input';
8
8
  import { DOCUMENT, DatePipe } from '@angular/common';
9
9
  import { Overlay } from '@angular/cdk/overlay';
@@ -17,18 +17,21 @@ import * as i1 from "@angular/forms";
17
17
  export class XTimePickerComponent extends XTimePickerProperty {
18
18
  writeValue(value) {
19
19
  let valueType = 'date';
20
- if (XIsEmpty(value)) {
21
- value = '';
20
+ if (XIsDate(value)) {
21
+ valueType = 'date';
22
+ this.numberValue.set(value.getTime());
22
23
  }
23
24
  else if (XIsNumber(value)) {
24
25
  valueType = 'number';
26
+ this.numberValue.set(value);
25
27
  }
26
28
  else if (XIsString(value)) {
27
- value = new Date(value).getTime();
28
29
  valueType = 'string';
30
+ const valueTime = new Date(value).getTime();
31
+ this.numberValue.set(!isNaN(valueTime) ? valueTime : '');
29
32
  }
30
- else if (XIsDate(value)) {
31
- value = value.getTime();
33
+ else if (XIsEmpty(value) || XIsNull(value)) {
34
+ this.numberValue.set('');
32
35
  }
33
36
  this.value.set(value);
34
37
  this.valueType.set(valueType);
@@ -43,13 +46,14 @@ export class XTimePickerComponent extends XTimePickerProperty {
43
46
  this.i18n = inject(XI18nService);
44
47
  this.datePicker = viewChild.required('datePicker');
45
48
  this.inputCom = viewChild.required('inputCom');
49
+ this.numberValue = signal(null);
46
50
  this.locale = toSignal(this.i18n.localeChange.pipe(map((x) => x.timePicker)), {
47
51
  initialValue: zh_CN.timePicker
48
52
  });
49
53
  this.displayValue = computed(() => {
50
- const value = this.value();
54
+ const value = this.numberValue();
51
55
  if (!value)
52
- return;
56
+ return null;
53
57
  if (this.use12Hours()) {
54
58
  let dt = new Date(value);
55
59
  let hour = dt.getHours();
@@ -98,7 +102,7 @@ export class XTimePickerComponent extends XTimePickerProperty {
98
102
  this.realPlacement = signal(null);
99
103
  this.portalComponent = signal(null);
100
104
  this.portalOverlayRef = signal(null);
101
- effect(() => this.portalComponent()?.setInput('value', this.value()));
105
+ effect(() => this.portalComponent()?.setInput('value', this.numberValue()));
102
106
  effect(() => this.portalComponent()?.setInput('placement', this.realPlacement()));
103
107
  effect(() => this.portalComponent()?.setInput('use12Hours', this.use12Hours()));
104
108
  effect(() => this.portalComponent()?.setInput('type', this.type()));
@@ -153,7 +157,7 @@ export class XTimePickerComponent extends XTimePickerProperty {
153
157
  if (this.disabledComputed())
154
158
  return;
155
159
  this.enter.set(true);
156
- if (!XIsEmpty(this.value())) {
160
+ if (!XIsEmpty(this.numberValue())) {
157
161
  this.icon.set('');
158
162
  this.clearable.set(true);
159
163
  }
@@ -168,10 +172,10 @@ export class XTimePickerComponent extends XTimePickerProperty {
168
172
  }
169
173
  }
170
174
  clearEmit() {
171
- this.value.set('');
175
+ this.value.set(null);
176
+ this.numberValue.set(null);
172
177
  this.mleave();
173
- if (this.onChange)
174
- this.onChange(this.value());
178
+ this.modelChange();
175
179
  }
176
180
  portalAttached() {
177
181
  return this.portalOverlayRef()?.hasAttached();
@@ -232,14 +236,21 @@ export class XTimePickerComponent extends XTimePickerProperty {
232
236
  animating.subscribe((ing) => this.animating.set(ing));
233
237
  }
234
238
  onNodeClick(date) {
235
- this.value.set(this.setValue(date));
236
- if (this.onChange)
237
- this.onChange(this.value());
238
- this.formControlValidator();
239
+ this.numberValue.set(date.getTime());
240
+ this.value.set(this.getValue());
241
+ this.modelChange();
239
242
  this.nodeEmit.emit(this.value());
240
243
  }
241
- setValue(value) {
242
- return ['date', 'string'].includes(this.valueType()) ? new Date(value) : value.getTime();
244
+ modelChange() {
245
+ if (this.onChange) {
246
+ this.onChange(this.getValue());
247
+ }
248
+ this.formControlValidator();
249
+ }
250
+ getValue() {
251
+ if (this.numberValue() === '')
252
+ return null;
253
+ return ['date', 'string'].includes(this.valueType()) ? new Date(this.numberValue()) : this.numberValue();
243
254
  }
244
255
  setPlacement() {
245
256
  return this.portalService.setPlacement({
@@ -263,4 +274,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
263
274
  type: Component,
264
275
  args: [{ selector: `${XTimePickerPrefix}`, standalone: true, imports: [FormsModule, XInputComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTimePickerComponent), DatePipe], template: "<div #datePicker class=\"x-time-picker\">\r\n <div class=\"x-time-picker-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [placeholder]=\"getPlaceholder()!\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [(ngModel)]=\"value\"\r\n [valueTpl]=\"valueTpl() ? valueTpl() : valueTemplate\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"before()\"\r\n [after]=\"after()\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n [pointer]=\"pointer()\"\r\n [(active)]=\"active\"\r\n (clearEmit)=\"clearEmit()\"\r\n (xClick)=\"showPortal()\"\r\n (xMouseenter)=\"menter()\"\r\n (xMouseleave)=\"mleave()\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n\r\n<ng-template #valueTemplate>{{ displayValue() }}</ng-template>\r\n", styles: ["@charset \"UTF-8\";x-time-picker{display:inline-block;width:12rem}.x-time-picker{margin:0;padding:0}.x-time-picker{width:100%}.x-time-picker x-input{width:100%}\n"] }]
265
276
  }], ctorParameters: () => [] });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBcUIsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixNQUFNLEVBR04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBRVQsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBVyxTQUFTLEVBQUUsUUFBUSxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNMLE9BQU8sRUFLUixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFB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Q0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVB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S0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNGLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUNyQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUN0QyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFhLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO1lBQzlGLGlCQUFpQixFQUFFLHNCQUFzQjtTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7aUlBblFVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLDREQUZwQixDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxrUkM1QzdELDJ6Q0F1Q0EsMk5EQVksV0FBVyxxdEJBQUUsZUFBZTs7MkZBTzNCLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxHQUFHLGlCQUFpQixFQUFFLGNBQ3BCLElBQUksV0FDUCxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsaUJBR3hCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFhUaW1lUGlja2VyUG9ydGFsQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lLXBpY2tlci1wb3J0YWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWFBvcnRhbFNlcnZpY2UsIFhQb3J0YWxPdmVybGF5UmVmLCBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBpbmplY3QsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgc2lnbmFsLFxyXG4gIGNvbXB1dGVkLFxyXG4gIHZpZXdDaGlsZCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgZWZmZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhUaW1lUGlja2VyUHJlZml4LCBYVGltZVBpY2tlclByb3BlcnR5IH0gZnJvbSAnLi90aW1lLXBpY2tlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFhJc0VtcHR5LCBYSXNEYXRlLCBYSXNOdW1iZXIsIFhDb3JuZXIsIFhJc1N0cmluZywgWFBhcmVudHMsIFhQbGFjZW1lbnQgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgWElucHV0Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvaW5wdXQnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCwgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIE92ZXJsYXksXHJcbiAgT3ZlcmxheUNvbmZpZyxcclxuICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLFxyXG4gIE92ZXJsYXlSZWZcclxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgbWFwLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWEkxOG5TZXJ2aWNlLCBYSTE4blRpbWVQaWNrZXIsIHpoX0NOIH0gZnJvbSAnQG5nLW5lc3QvdWkvaTE4bic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYVGltZVBpY2tlclByZWZpeH1gLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlLCBYSW5wdXRDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1hWYWx1ZUFjY2Vzc29yKFhUaW1lUGlja2VyQ29tcG9uZW50KSwgRGF0ZVBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYVGltZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIFhUaW1lUGlja2VyUHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIHByaXZhdGUgcG9ydGFsU2VydmljZSA9IGluamVjdChYUG9ydGFsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgZGF0ZVBpcGUgPSBpbmplY3QoRGF0ZVBpcGUpO1xyXG4gIHByaXZhdGUgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcclxuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoWEkxOG5TZXJ2aWNlKTtcclxuXHJcbiAgZGF0ZVBpY2tlciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2RhdGVQaWNrZXInKTtcclxuICBpbnB1dENvbSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxYSW5wdXRDb21wb25lbnQ+KCdpbnB1dENvbScpO1xyXG5cclxuICBsb2NhbGUgPSB0b1NpZ25hbCh0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUobWFwKCh4KSA9PiB4LnRpbWVQaWNrZXIgYXMgWEkxOG5UaW1lUGlja2VyKSksIHtcclxuICAgIGluaXRpYWxWYWx1ZTogemhfQ04udGltZVBpY2tlclxyXG4gIH0pO1xyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGxldCB2YWx1ZVR5cGU6ICdkYXRlJyB8ICdudW1iZXInIHwgJ3N0cmluZycgPSAnZGF0ZSc7XHJcbiAgICBpZiAoWElzRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgIHZhbHVlID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKFhJc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgdmFsdWVUeXBlID0gJ251bWJlcic7XHJcbiAgICB9IGVsc2UgaWYgKFhJc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpO1xyXG4gICAgICB2YWx1ZVR5cGUgPSAnc3RyaW5nJztcclxuICAgIH0gZWxzZSBpZiAoWElzRGF0ZSh2YWx1ZSkpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS5nZXRUaW1lKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlVHlwZS5zZXQodmFsdWVUeXBlKTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSgpO1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudXNlMTJIb3VycygpKSB7XHJcbiAgICAgIGxldCBkdCA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgbGV0IGhvdXIgPSBkdC5nZXRIb3VycygpO1xyXG4gICAgICBsZXQgc3VmZml4ID0gaG91ciA+PSAxMiA/IHRoaXMubG9jYWxlKCkucG0gOiB0aGlzLmxvY2FsZSgpLmFtO1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgICAgZHQuc2V0SG91cnMoaG91ciA9PT0gMCA/IDEyIDogaG91ciA+IDEyID8gaG91ciAtIDEyIDogaG91ciksXHJcbiAgICAgICAgdGhpcy5mb3JtYXRTaWduYWwoKVxyXG4gICAgICApfSAke3N1ZmZpeH1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCB0aGlzLmZvcm1hdFNpZ25hbCgpKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgZm9ybWF0U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9ybWF0KCkgPT09ICdISDptbTpzcycpIHtcclxuICAgICAgaWYgKHRoaXMudHlwZSgpID09PSAnaG91cicpIHtcclxuICAgICAgICByZXR1cm4gJ0hIJztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUoKSA9PT0gJ21pbnV0ZScpIHtcclxuICAgICAgICByZXR1cm4gJ0hIOm1tJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KCk7XHJcbiAgfSk7XHJcblxyXG4gIGNsZWFyYWJsZSA9IHNpZ25hbChmYWxzZSk7XHJcbiAgZW50ZXIgPSBzaWduYWwoZmFsc2UpO1xyXG4gIGFuaW1hdGluZyA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcG9ydGFsITogWFBvcnRhbE92ZXJsYXlSZWY8WFRpbWVQaWNrZXJQb3J0YWxDb21wb25lbnQ+O1xyXG4gIGljb24gPSBzaWduYWwoJ2Z0by1jbG9jaycpO1xyXG4gIGNsb3NlU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgdmFsdWVUeXBlID0gc2lnbmFsPCdkYXRlJyB8ICdudW1iZXInIHwgJ3N0cmluZyc+KCdkYXRlJyk7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuXHJcbiAgZ2V0UGxhY2Vob2xkZXIgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wbGFjZWhvbGRlcigpKSByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcigpO1xyXG4gICAgaWYgKHRoaXMudHlwZSgpID09PSAndGltZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKCkuc2VsZWN0VGltZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlKCkgPT09ICdob3VyJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS5zZWxlY3RIb3VyO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUoKSA9PT0gJ21pbnV0ZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKCkuc2VsZWN0TWludXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKCkuc2VsZWN0VGltZTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSByZWFsUGxhY2VtZW50ID0gc2lnbmFsPFhQbGFjZW1lbnQgfCBudWxsPihudWxsKTtcclxuICBwb3J0YWxDb21wb25lbnQgPSBzaWduYWw8Q29tcG9uZW50UmVmPFhUaW1lUGlja2VyUG9ydGFsQ29tcG9uZW50PiB8IG51bGw+KG51bGwpO1xyXG4gIHBvcnRhbE92ZXJsYXlSZWYgPSBzaWduYWw8T3ZlcmxheVJlZiB8IG51bGw+KG51bGwpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3ZhbHVlJywgdGhpcy52YWx1ZSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3BsYWNlbWVudCcsIHRoaXMucmVhbFBsYWNlbWVudCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3VzZTEySG91cnMnLCB0aGlzLnVzZTEySG91cnMoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCd0eXBlJywgdGhpcy50eXBlKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnaG91clN0ZXAnLCB0aGlzLmhvdXJTdGVwKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnbWludXRlU3RlcCcsIHRoaXMubWludXRlU3RlcCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3NlY29uZFN0ZXAnLCB0aGlzLnNlY29uZFN0ZXAoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdwcmVzZXQnLCB0aGlzLnByZXNldCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ2lucHV0Q29tJywgdGhpcy5pbnB1dENvbSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ2Rpc2FibGVkVGltZScsIHRoaXMuZGlzYWJsZWRUaW1lKCkpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRTdWJqZWN0KCk7XHJcbiAgICB0aGlzLnNldFBhcmFudFNjcm9sbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZXRQb3J0YWwoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51blN1YmplY3QubmV4dCgpO1xyXG4gICAgdGhpcy51blN1YmplY3QuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHNldFBhcmFudFNjcm9sbCgpIHtcclxuICAgIGlmICghdGhpcy5kb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgY29uc3QgcGFyZW50cyA9IFhQYXJlbnRzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIGxldCBmaXJzdFNjcm9sbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICAgIGZvciAobGV0IGl0ZW0gb2YgcGFyZW50cykge1xyXG4gICAgICBpZiAoaXRlbS5jbGllbnRIZWlnaHQgPCBpdGVtLnNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgIGZpcnN0U2Nyb2xsID0gaXRlbTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGZpcnN0U2Nyb2xsICYmIGZpcnN0U2Nyb2xsLnRhZ05hbWUgIT09ICdCT0RZJykge1xyXG4gICAgICBmcm9tRXZlbnQoZmlyc3RTY3JvbGwsICdzY3JvbGwnKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMucG9ydGFsQXR0YWNoZWQoKSEpLFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgICAgICAgY29uc3QgZXJhY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIGNvbnN0IGZyZWN0ID0gZmlyc3RTY3JvbGwhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgaWYgKGVyYWN0LnRvcCArIGVyYWN0LmhlaWdodCAtIGZyZWN0LnRvcCA8IDAgfHwgZXJhY3QuYm90dG9tID4gZnJlY3QuYm90dG9tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFN1YmplY3QoKSB7XHJcbiAgICB0aGlzLmNsb3NlU3ViamVjdC5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xvc2VQb3J0YWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWVudGVyKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpKSByZXR1cm47XHJcbiAgICB0aGlzLmVudGVyLnNldCh0cnVlKTtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZSgpKSkge1xyXG4gICAgICB0aGlzLmljb24uc2V0KCcnKTtcclxuICAgICAgdGhpcy5jbGVhcmFibGUuc2V0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWxlYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpKSByZXR1cm47XHJcbiAgICB0aGlzLmVudGVyLnNldChmYWxzZSk7XHJcbiAgICBpZiAodGhpcy5jbGVhcmFibGUoKSkge1xyXG4gICAgICB0aGlzLmljb24uc2V0KCdmdG8tY2xvY2snKTtcclxuICAgICAgdGhpcy5jbGVhcmFibGUuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyRW1pdCgpIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KCcnKTtcclxuICAgIHRoaXMubWxlYXZlKCk7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LmRldGFjaCgpO1xyXG4gICAgICB0aGlzLmFjdGl2ZS5zZXQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3lQb3J0YWwoKSB7XHJcbiAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1BvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkQ29tcHV0ZWQoKSB8fCB0aGlzLmFuaW1hdGluZygpKSByZXR1cm47XHJcbiAgICB0aGlzLmFjdGl2ZS5zZXQodHJ1ZSk7XHJcbiAgICBjb25zdCBjb25maWc6IE92ZXJsYXlDb25maWcgPSB7XHJcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICcnLFxyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnNldFBsYWNlbWVudCgpLFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZXRQb3NpdGlvbihjb25maWcpO1xyXG4gICAgdGhpcy5wb3J0YWwgPSB0aGlzLnBvcnRhbFNlcnZpY2UuYXR0YWNoKHtcclxuICAgICAgY29udGVudDogWFRpbWVQaWNrZXJQb3J0YWxDb21wb25lbnQsXHJcbiAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcclxuICAgICAgb3ZlcmxheUNvbmZpZzogY29uZmlnXHJcbiAgICB9KTtcclxuICAgIHRoaXMucG9ydGFsLm92ZXJsYXlSZWZcclxuICAgICAgPy5vdXRzaWRlUG9pbnRlckV2ZW50cygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNldEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihjb25maWc6IE92ZXJsYXlDb25maWcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICAgIHBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgocG9zOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpID0+IHtcclxuICAgICAgY29uc3QgcGxhY2UgPSBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24uZ2V0KHBvcy5jb25uZWN0aW9uUGFpcikgYXMgWENvcm5lcjtcclxuICAgICAgaWYgKHBsYWNlICE9PSB0aGlzLnJlYWxQbGFjZW1lbnQoKSkge1xyXG4gICAgICAgIHRoaXMucmVhbFBsYWNlbWVudC5zZXQocGxhY2UpO1xyXG4gICAgICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEluc3RhbmNlKCkge1xyXG4gICAgbGV0IHsgY29tcG9uZW50UmVmLCBvdmVybGF5UmVmIH0gPSB0aGlzLnBvcnRhbDtcclxuICAgIGlmICghY29tcG9uZW50UmVmIHx8ICFvdmVybGF5UmVmKSByZXR1cm47XHJcbiAgICB0aGlzLnBvcnRhbENvbXBvbmVudC5zZXQoY29tcG9uZW50UmVmKTtcclxuICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZi5zZXQob3ZlcmxheVJlZik7XHJcbiAgICB0aGlzLnJlYWxQbGFjZW1lbnQuc2V0KHRoaXMucGxhY2VtZW50KCkpO1xyXG4gICAgY29uc3QgeyBub2RlQ2xpY2ssIGFuaW1hdGluZyB9ID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG4gICAgbm9kZUNsaWNrLnN1YnNjcmliZSgobm9kZTogRGF0ZSkgPT4gdGhpcy5vbk5vZGVDbGljayhub2RlKSk7XHJcbiAgICBhbmltYXRpbmcuc3Vic2NyaWJlKChpbmc6IGJvb2xlYW4pID0+IHRoaXMuYW5pbWF0aW5nLnNldChpbmcpKTtcclxuICB9XHJcblxyXG4gIG9uTm9kZUNsaWNrKGRhdGU6IERhdGUpIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KHRoaXMuc2V0VmFsdWUoZGF0ZSkpO1xyXG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSgpKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2xWYWxpZGF0b3IoKTtcclxuICAgIHRoaXMubm9kZUVtaXQuZW1pdCh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodmFsdWU6IERhdGUpIHtcclxuICAgIHJldHVybiBbJ2RhdGUnLCAnc3RyaW5nJ10uaW5jbHVkZXModGhpcy52YWx1ZVR5cGUoKSkgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZS5nZXRUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQbGFjZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxTZXJ2aWNlLnNldFBsYWNlbWVudCh7XHJcbiAgICAgIGVsZW1lbnRSZWY6IHRoaXMuaW5wdXRDb20oKS5pbnB1dFJlZigpLFxyXG4gICAgICBwbGFjZW1lbnQ6IFt0aGlzLnBsYWNlbWVudCgpIGFzIFhDb3JuZXIsICdib3R0b20tc3RhcnQnLCAnYm90dG9tLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wLWVuZCddLFxyXG4gICAgICB0cmFuc2Zvcm1PcmlnaW5PbjogJ3gtdGltZS1waWNrZXItcG9ydGFsJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3J0YWwoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuc2V0UGxhY2VtZW50KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybUNvbnRyb2xDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNkYXRlUGlja2VyIGNsYXNzPVwieC10aW1lLXBpY2tlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRpbWUtcGlja2VyLXJvd1wiPlxyXG4gICAgPHgtaW5wdXRcclxuICAgICAgI2lucHV0Q29tXHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgW2xhYmVsXT1cImxhYmVsKClcIlxyXG4gICAgICBbbGFiZWxXaWR0aF09XCJsYWJlbFdpZHRoKClcIlxyXG4gICAgICBbbGFiZWxBbGlnbl09XCJsYWJlbEFsaWduKClcIlxyXG4gICAgICBbanVzdGlmeV09XCJqdXN0aWZ5KClcIlxyXG4gICAgICBbYWxpZ25dPVwiYWxpZ24oKVwiXHJcbiAgICAgIFtkaXJlY3Rpb25dPVwiZGlyZWN0aW9uKClcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRDb21wdXRlZCgpXCJcclxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFt2YWxpZGF0b3JdPVwidmFsaWRhdG9yQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFtpbnB1dFZhbGlkYXRvcl09XCJpbnB1dFZhbGlkYXRvcigpXCJcclxuICAgICAgW2ljb25dPVwiaWNvbigpXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKCkhXCJcclxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxyXG4gICAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZSgpXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAgIFt2YWx1ZVRwbF09XCJ2YWx1ZVRwbCgpID8gdmFsdWVUcGwoKSA6IHZhbHVlVGVtcGxhdGVcIlxyXG4gICAgICBbdmFsdWVUcGxDb250ZXh0XT1cInZhbHVlVHBsQ29udGV4dCgpXCJcclxuICAgICAgW3NpemVdPVwic2l6ZSgpXCJcclxuICAgICAgW2JvcmRlcmVkXT1cImJvcmRlcmVkKClcIlxyXG4gICAgICBbYmVmb3JlXT1cImJlZm9yZSgpXCJcclxuICAgICAgW2FmdGVyXT1cImFmdGVyKClcIlxyXG4gICAgICBbcGF0dGVybl09XCJwYXR0ZXJuQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VDb21wdXRlZCgpXCJcclxuICAgICAgW3BvaW50ZXJdPVwicG9pbnRlcigpXCJcclxuICAgICAgWyhhY3RpdmUpXT1cImFjdGl2ZVwiXHJcbiAgICAgIChjbGVhckVtaXQpPVwiY2xlYXJFbWl0KClcIlxyXG4gICAgICAoeENsaWNrKT1cInNob3dQb3J0YWwoKVwiXHJcbiAgICAgICh4TW91c2VlbnRlcik9XCJtZW50ZXIoKVwiXHJcbiAgICAgICh4TW91c2VsZWF2ZSk9XCJtbGVhdmUoKVwiXHJcbiAgICA+PC94LWlucHV0PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdmFsdWVUZW1wbGF0ZT57eyBkaXNwbGF5VmFsdWUoKSB9fTwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBcUIsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixNQUFNLEVBR04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBRVQsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBVyxTQUFTLEVBQUUsUUFBUSxFQUFjLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCxPQUFPLEVBS1IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FB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LENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztpSUFoUlUsb0JBQW9CO3FIQUFwQixvQkFBb0IsNERBRnBCLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxDQUFDLGtSQzVDN0QsMnpDQXVDQSwyTkRBWSxXQUFXLHF0QkFBRSxlQUFlOzsyRkFPM0Isb0JBQW9CO2tCQVZoQyxTQUFTOytCQUNFLEdBQUcsaUJBQWlCLEVBQUUsY0FDcEIsSUFBSSxXQUNQLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxpQkFHeEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGNBQWMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWFRpbWVQaWNrZXJQb3J0YWxDb21wb25lbnQgfSBmcm9tICcuL3RpbWUtcGlja2VyLXBvcnRhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBYUG9ydGFsU2VydmljZSwgWFBvcnRhbE92ZXJsYXlSZWYsIFhQb3J0YWxDb25uZWN0ZWRQb3NpdGlvbiB9IGZyb20gJ0BuZy1uZXN0L3VpL3BvcnRhbCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgRWxlbWVudFJlZixcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gIGluamVjdCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBzaWduYWwsXHJcbiAgY29tcHV0ZWQsXHJcbiAgdmlld0NoaWxkLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBlZmZlY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWFRpbWVQaWNrZXJQcmVmaXgsIFhUaW1lUGlja2VyUHJvcGVydHkgfSBmcm9tICcuL3RpbWUtcGlja2VyLnByb3BlcnR5JztcclxuaW1wb3J0IHsgWElzRW1wdHksIFhJc0RhdGUsIFhJc051bWJlciwgWENvcm5lciwgWElzU3RyaW5nLCBYUGFyZW50cywgWFBsYWNlbWVudCwgWElzTnVsbCB9IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBYSW5wdXRDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9pbnB1dCc7XHJcbmltcG9ydCB7IERPQ1VNRU5ULCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5Q29uZmlnLFxyXG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsXHJcbiAgT3ZlcmxheVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCBtYXAsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgWFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAbmctbmVzdC91aS9iYXNlLWZvcm0nO1xyXG5pbXBvcnQgeyBYSTE4blNlcnZpY2UsIFhJMThuVGltZVBpY2tlciwgemhfQ04gfSBmcm9tICdAbmctbmVzdC91aS9pMThuJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUaW1lUGlja2VyUHJlZml4fWAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFhJbnB1dENvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbWFZhbHVlQWNjZXNzb3IoWFRpbWVQaWNrZXJDb21wb25lbnQpLCBEYXRlUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFhUaW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgWFRpbWVQaWNrZXJQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbiAgcHJpdmF0ZSBwb3J0YWxTZXJ2aWNlID0gaW5qZWN0KFhQb3J0YWxTZXJ2aWNlKTtcclxuICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcHJpdmF0ZSBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7XHJcbiAgcHJpdmF0ZSBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xyXG4gIHByaXZhdGUgaTE4biA9IGluamVjdChYSTE4blNlcnZpY2UpO1xyXG5cclxuICBkYXRlUGlja2VyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZGF0ZVBpY2tlcicpO1xyXG4gIGlucHV0Q29tID0gdmlld0NoaWxkLnJlcXVpcmVkPFhJbnB1dENvbXBvbmVudD4oJ2lucHV0Q29tJyk7XHJcbiAgbnVtYmVyVmFsdWUgPSBzaWduYWw8bnVtYmVyIHwgc3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGxvY2FsZSA9IHRvU2lnbmFsKHRoaXMuaTE4bi5sb2NhbGVDaGFuZ2UucGlwZShtYXAoKHgpID0+IHgudGltZVBpY2tlciBhcyBYSTE4blRpbWVQaWNrZXIpKSwge1xyXG4gICAgaW5pdGlhbFZhbHVlOiB6aF9DTi50aW1lUGlja2VyXHJcbiAgfSk7XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlVHlwZTogJ2RhdGUnIHwgJ251bWJlcicgfCAnc3RyaW5nJyA9ICdkYXRlJztcclxuICAgIGlmIChYSXNEYXRlKHZhbHVlKSkge1xyXG4gICAgICB2YWx1ZVR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgIHRoaXMubnVtYmVyVmFsdWUuc2V0KHZhbHVlLmdldFRpbWUoKSk7XHJcbiAgICB9IGVsc2UgaWYgKFhJc051bWJlcih2YWx1ZSkpIHtcclxuICAgICAgdmFsdWVUeXBlID0gJ251bWJlcic7XHJcbiAgICAgIHRoaXMubnVtYmVyVmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIH0gZWxzZSBpZiAoWElzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICB2YWx1ZVR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgY29uc3QgdmFsdWVUaW1lID0gbmV3IERhdGUodmFsdWUpLmdldFRpbWUoKTtcclxuICAgICAgdGhpcy5udW1iZXJWYWx1ZS5zZXQoIWlzTmFOKHZhbHVlVGltZSkgPyB2YWx1ZVRpbWUgOiAnJyk7XHJcbiAgICB9IGVsc2UgaWYgKFhJc0VtcHR5KHZhbHVlKSB8fCBYSXNOdWxsKHZhbHVlKSkge1xyXG4gICAgICB0aGlzLm51bWJlclZhbHVlLnNldCgnJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlVHlwZS5zZXQodmFsdWVUeXBlKTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5udW1iZXJWYWx1ZSgpO1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAodGhpcy51c2UxMkhvdXJzKCkpIHtcclxuICAgICAgbGV0IGR0ID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICBsZXQgaG91ciA9IGR0LmdldEhvdXJzKCk7XHJcbiAgICAgIGxldCBzdWZmaXggPSBob3VyID49IDEyID8gdGhpcy5sb2NhbGUoKS5wbSA6IHRoaXMubG9jYWxlKCkuYW07XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICBkdC5zZXRIb3Vycyhob3VyID09PSAwID8gMTIgOiBob3VyID4gMTIgPyBob3VyIC0gMTIgOiBob3VyKSxcclxuICAgICAgICB0aGlzLmZvcm1hdFNpZ25hbCgpXHJcbiAgICAgICl9ICR7c3VmZml4fWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIHRoaXMuZm9ybWF0U2lnbmFsKCkpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBmb3JtYXRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5mb3JtYXQoKSA9PT0gJ0hIOm1tOnNzJykge1xyXG4gICAgICBpZiAodGhpcy50eXBlKCkgPT09ICdob3VyJykge1xyXG4gICAgICAgIHJldHVybiAnSEgnO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSgpID09PSAnbWludXRlJykge1xyXG4gICAgICAgIHJldHVybiAnSEg6bW0nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtYXQoKTtcclxuICB9KTtcclxuXHJcbiAgY2xlYXJhYmxlID0gc2lnbmFsKGZhbHNlKTtcclxuICBlbnRlciA9IHNpZ25hbChmYWxzZSk7XHJcbiAgYW5pbWF0aW5nID0gc2lnbmFsKGZhbHNlKTtcclxuICBwb3J0YWwhOiBYUG9ydGFsT3ZlcmxheVJlZjxYVGltZVBpY2tlclBvcnRhbENvbXBvbmVudD47XHJcbiAgaWNvbiA9IHNpZ25hbCgnZnRvLWNsb2NrJyk7XHJcbiAgY2xvc2VTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICB2YWx1ZVR5cGUgPSBzaWduYWw8J2RhdGUnIHwgJ251bWJlcicgfCAnc3RyaW5nJz4oJ2RhdGUnKTtcclxuICBwcml2YXRlIHVuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG5cclxuICBnZXRQbGFjZWhvbGRlciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKCkpIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyKCk7XHJcbiAgICBpZiAodGhpcy50eXBlKCkgPT09ICd0aW1lJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS5zZWxlY3RUaW1lO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUoKSA9PT0gJ2hvdXInKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsZSgpLnNlbGVjdEhvdXI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSgpID09PSAnbWludXRlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS5zZWxlY3RNaW51dGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUoKS5zZWxlY3RUaW1lO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIHJlYWxQbGFjZW1lbnQgPSBzaWduYWw8WFBsYWNlbWVudCB8IG51bGw+KG51bGwpO1xyXG4gIHBvcnRhbENvbXBvbmVudCA9IHNpZ25hbDxDb21wb25lbnRSZWY8WFRpbWVQaWNrZXJQb3J0YWxDb21wb25lbnQ+IHwgbnVsbD4obnVsbCk7XHJcbiAgcG9ydGFsT3ZlcmxheVJlZiA9IHNpZ25hbDxPdmVybGF5UmVmIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgndmFsdWUnLCB0aGlzLm51bWJlclZhbHVlKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgncGxhY2VtZW50JywgdGhpcy5yZWFsUGxhY2VtZW50KCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgndXNlMTJIb3VycycsIHRoaXMudXNlMTJIb3VycygpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3R5cGUnLCB0aGlzLnR5cGUoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdob3VyU3RlcCcsIHRoaXMuaG91clN0ZXAoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdtaW51dGVTdGVwJywgdGhpcy5taW51dGVTdGVwKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnc2Vjb25kU3RlcCcsIHRoaXMuc2Vjb25kU3RlcCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3ByZXNldCcsIHRoaXMucHJlc2V0KCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnaW5wdXRDb20nLCB0aGlzLmlucHV0Q29tKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnZGlzYWJsZWRUaW1lJywgdGhpcy5kaXNhYmxlZFRpbWUoKSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICAgIHRoaXMuc2V0UGFyYW50U2Nyb2xsKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldFBvcnRhbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFyYW50U2Nyb2xsKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvY3VtZW50KSByZXR1cm47XHJcbiAgICBjb25zdCBwYXJlbnRzID0gWFBhcmVudHModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgbGV0IGZpcnN0U2Nyb2xsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiBwYXJlbnRzKSB7XHJcbiAgICAgIGlmIChpdGVtLmNsaWVudEhlaWdodCA8IGl0ZW0uc2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgZmlyc3RTY3JvbGwgPSBpdGVtO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZmlyc3RTY3JvbGwgJiYgZmlyc3RTY3JvbGwudGFnTmFtZSAhPT0gJ0JPRFknKSB7XHJcbiAgICAgIGZyb21FdmVudChmaXJzdFNjcm9sbCwgJ3Njcm9sbCcpXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5wb3J0YWxBdHRhY2hlZCgpISksXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy51blN1YmplY3QpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgICBjb25zdCBlcmFjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgY29uc3QgZnJlY3QgPSBmaXJzdFNjcm9sbCEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICBpZiAoZXJhY3QudG9wICsgZXJhY3QuaGVpZ2h0IC0gZnJlY3QudG9wIDwgMCB8fCBlcmFjdC5ib3R0b20gPiBmcmVjdC5ib3R0b20pIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U3ViamVjdCgpIHtcclxuICAgIHRoaXMuY2xvc2VTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtZW50ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZENvbXB1dGVkKCkpIHJldHVybjtcclxuICAgIHRoaXMuZW50ZXIuc2V0KHRydWUpO1xyXG4gICAgaWYgKCFYSXNFbXB0eSh0aGlzLm51bWJlclZhbHVlKCkpKSB7XHJcbiAgICAgIHRoaXMuaWNvbi5zZXQoJycpO1xyXG4gICAgICB0aGlzLmNsZWFyYWJsZS5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtbGVhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZENvbXB1dGVkKCkpIHJldHVybjtcclxuICAgIHRoaXMuZW50ZXIuc2V0KGZhbHNlKTtcclxuICAgIGlmICh0aGlzLmNsZWFyYWJsZSgpKSB7XHJcbiAgICAgIHRoaXMuaWNvbi5zZXQoJ2Z0by1jbG9jaycpO1xyXG4gICAgICB0aGlzLmNsZWFyYWJsZS5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJFbWl0KCkge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQobnVsbCk7XHJcbiAgICB0aGlzLm51bWJlclZhbHVlLnNldChudWxsKTtcclxuICAgIHRoaXMubWxlYXZlKCk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwb3J0YWxBdHRhY2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uaGFzQXR0YWNoZWQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlUG9ydGFsKCkge1xyXG4gICAgaWYgKHRoaXMucG9ydGFsQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uZGV0YWNoKCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlLnNldChmYWxzZSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveVBvcnRhbCgpIHtcclxuICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBzaG93UG9ydGFsKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpIHx8IHRoaXMuYW5pbWF0aW5nKCkpIHJldHVybjtcclxuICAgIHRoaXMuYWN0aXZlLnNldCh0cnVlKTtcclxuICAgIGNvbnN0IGNvbmZpZzogT3ZlcmxheUNvbmZpZyA9IHtcclxuICAgICAgYmFja2Ryb3BDbGFzczogJycsXHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuc2V0UGxhY2VtZW50KCksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcclxuICAgIH07XHJcbiAgICB0aGlzLnNldFBvc2l0aW9uKGNvbmZpZyk7XHJcbiAgICB0aGlzLnBvcnRhbCA9IHRoaXMucG9ydGFsU2VydmljZS5hdHRhY2goe1xyXG4gICAgICBjb250ZW50OiBYVGltZVBpY2tlclBvcnRhbENvbXBvbmVudCxcclxuICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICBvdmVybGF5Q29uZmlnOiBjb25maWdcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wb3J0YWwub3ZlcmxheVJlZlxyXG4gICAgICA/Lm91dHNpZGVQb2ludGVyRXZlbnRzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2V0SW5zdGFuY2UoKTtcclxuICB9XHJcblxyXG4gIHNldFBvc2l0aW9uKGNvbmZpZzogT3ZlcmxheUNvbmZpZykge1xyXG4gICAgbGV0IHBvc2l0aW9uID0gY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xyXG4gICAgcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKChwb3M6IENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSkgPT4ge1xyXG4gICAgICBjb25zdCBwbGFjZSA9IFhQb3J0YWxDb25uZWN0ZWRQb3NpdGlvbi5nZXQocG9zLmNvbm5lY3Rpb25QYWlyKSBhcyBYQ29ybmVyO1xyXG4gICAgICBpZiAocGxhY2UgIT09IHRoaXMucmVhbFBsYWNlbWVudCgpKSB7XHJcbiAgICAgICAgdGhpcy5yZWFsUGxhY2VtZW50LnNldChwbGFjZSk7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5zdGFuY2UoKSB7XHJcbiAgICBsZXQgeyBjb21wb25lbnRSZWYsIG92ZXJsYXlSZWYgfSA9IHRoaXMucG9ydGFsO1xyXG4gICAgaWYgKCFjb21wb25lbnRSZWYgfHwgIW92ZXJsYXlSZWYpIHJldHVybjtcclxuICAgIHRoaXMucG9ydGFsQ29tcG9uZW50LnNldChjb21wb25lbnRSZWYpO1xyXG4gICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmLnNldChvdmVybGF5UmVmKTtcclxuICAgIHRoaXMucmVhbFBsYWNlbWVudC5zZXQodGhpcy5wbGFjZW1lbnQoKSk7XHJcbiAgICBjb25zdCB7IG5vZGVDbGljaywgYW5pbWF0aW5nIH0gPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBub2RlQ2xpY2suc3Vic2NyaWJlKChub2RlOiBEYXRlKSA9PiB0aGlzLm9uTm9kZUNsaWNrKG5vZGUpKTtcclxuICAgIGFuaW1hdGluZy5zdWJzY3JpYmUoKGluZzogYm9vbGVhbikgPT4gdGhpcy5hbmltYXRpbmcuc2V0KGluZykpO1xyXG4gIH1cclxuXHJcbiAgb25Ob2RlQ2xpY2soZGF0ZTogRGF0ZSkge1xyXG4gICAgdGhpcy5udW1iZXJWYWx1ZS5zZXQoZGF0ZS5nZXRUaW1lKCkpO1xyXG4gICAgdGhpcy52YWx1ZS5zZXQodGhpcy5nZXRWYWx1ZSgpKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UoKTtcclxuICAgIHRoaXMubm9kZUVtaXQuZW1pdCh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgbW9kZWxDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Db250cm9sVmFsaWRhdG9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZSgpIHtcclxuICAgIGlmICh0aGlzLm51bWJlclZhbHVlKCkgPT09ICcnKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBbJ2RhdGUnLCAnc3RyaW5nJ10uaW5jbHVkZXModGhpcy52YWx1ZVR5cGUoKSkgPyBuZXcgRGF0ZSh0aGlzLm51bWJlclZhbHVlKCkhKSA6IHRoaXMubnVtYmVyVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHNldFBsYWNlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBvcnRhbFNlcnZpY2Uuc2V0UGxhY2VtZW50KHtcclxuICAgICAgZWxlbWVudFJlZjogdGhpcy5pbnB1dENvbSgpLmlucHV0UmVmKCksXHJcbiAgICAgIHBsYWNlbWVudDogW3RoaXMucGxhY2VtZW50KCkgYXMgWENvcm5lciwgJ2JvdHRvbS1zdGFydCcsICdib3R0b20tZW5kJywgJ3RvcC1zdGFydCcsICd0b3AtZW5kJ10sXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbk9uOiAneC10aW1lLXBpY2tlci1wb3J0YWwnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5zZXRQbGFjZW1lbnQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtQ29udHJvbENoYW5nZXMoKSB7XHJcbiAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2RhdGVQaWNrZXIgY2xhc3M9XCJ4LXRpbWUtcGlja2VyXCI+XHJcbiAgPGRpdiBjbGFzcz1cIngtdGltZS1waWNrZXItcm93XCI+XHJcbiAgICA8eC1pbnB1dFxyXG4gICAgICAjaW5wdXRDb21cclxuICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXHJcbiAgICAgIFtsYWJlbFdpZHRoXT1cImxhYmVsV2lkdGgoKVwiXHJcbiAgICAgIFtsYWJlbEFsaWduXT1cImxhYmVsQWxpZ24oKVwiXHJcbiAgICAgIFtqdXN0aWZ5XT1cImp1c3RpZnkoKVwiXHJcbiAgICAgIFthbGlnbl09XCJhbGlnbigpXCJcclxuICAgICAgW2RpcmVjdGlvbl09XCJkaXJlY3Rpb24oKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZENvbXB1dGVkKClcIlxyXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRDb21wdXRlZCgpXCJcclxuICAgICAgW3ZhbGlkYXRvcl09XCJ2YWxpZGF0b3JDb21wdXRlZCgpXCJcclxuICAgICAgW2lucHV0VmFsaWRhdG9yXT1cImlucHV0VmFsaWRhdG9yKClcIlxyXG4gICAgICBbaWNvbl09XCJpY29uKClcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0UGxhY2Vob2xkZXIoKSFcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXHJcbiAgICAgIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlKClcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgW3ZhbHVlVHBsXT1cInZhbHVlVHBsKCkgPyB2YWx1ZVRwbCgpIDogdmFsdWVUZW1wbGF0ZVwiXHJcbiAgICAgIFt2YWx1ZVRwbENvbnRleHRdPVwidmFsdWVUcGxDb250ZXh0KClcIlxyXG4gICAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gICAgICBbYm9yZGVyZWRdPVwiYm9yZGVyZWQoKVwiXHJcbiAgICAgIFtiZWZvcmVdPVwiYmVmb3JlKClcIlxyXG4gICAgICBbYWZ0ZXJdPVwiYWZ0ZXIoKVwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cInBhdHRlcm5Db21wdXRlZCgpXCJcclxuICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUNvbXB1dGVkKClcIlxyXG4gICAgICBbcG9pbnRlcl09XCJwb2ludGVyKClcIlxyXG4gICAgICBbKGFjdGl2ZSldPVwiYWN0aXZlXCJcclxuICAgICAgKGNsZWFyRW1pdCk9XCJjbGVhckVtaXQoKVwiXHJcbiAgICAgICh4Q2xpY2spPVwic2hvd1BvcnRhbCgpXCJcclxuICAgICAgKHhNb3VzZWVudGVyKT1cIm1lbnRlcigpXCJcclxuICAgICAgKHhNb3VzZWxlYXZlKT1cIm1sZWF2ZSgpXCJcclxuICAgID48L3gtaW5wdXQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICN2YWx1ZVRlbXBsYXRlPnt7IGRpc3BsYXlWYWx1ZSgpIH19PC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -184,9 +184,13 @@ class XInputNumberComponent extends XInputNumberProperty {
184
184
  this.valueChange.next(this.value());
185
185
  });
186
186
  }
187
- change(value) {
188
- this.verify(value);
189
- this.valueChange.next(this.value());
187
+ writeValue(value) {
188
+ this.value.set(value);
189
+ this.verify(Number(value));
190
+ this.setDisplayValue(this.value());
191
+ }
192
+ ngOnInit() {
193
+ this.setDisplayValue(this.value());
190
194
  }
191
195
  down(event, limit, increase = true) {
192
196
  if (this.disabledComputed())
@@ -257,6 +261,10 @@ class XInputNumberComponent extends XInputNumberProperty {
257
261
  this.inputValue.next(value);
258
262
  }
259
263
  setDisplayValue(value) {
264
+ if (XIsEmpty(value)) {
265
+ this.displayValue.set('');
266
+ return;
267
+ }
260
268
  let displayValue = '';
261
269
  const formatter = this.formatter();
262
270
  if (!XIsEmpty(value) && !formatter) {
@@ -272,11 +280,11 @@ class XInputNumberComponent extends XInputNumberProperty {
272
280
  this.displayValue.set(displayValue);
273
281
  }
274
282
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XInputNumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
275
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: XInputNumberComponent, isStandalone: true, selector: "x-input-number", providers: [XValueAccessor(XInputNumberComponent)], viewQueries: [{ propertyName: "inputNumber", first: true, predicate: ["inputNumber"], descendants: true, isSignal: true }, { propertyName: "inputEleRef", first: true, predicate: ["inputEleRef"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [attr.value]=\"displayValue()\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"change($event)\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "component", type: XButtonComponent, selector: "x-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
283
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: XInputNumberComponent, isStandalone: true, selector: "x-input-number", providers: [XValueAccessor(XInputNumberComponent)], viewQueries: [{ propertyName: "inputNumber", first: true, predicate: ["inputNumber"], descendants: true, isSignal: true }, { propertyName: "inputEleRef", first: true, predicate: ["inputEleRef"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [ngModel]=\"displayValue()\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: XInputComponent, selector: "x-input" }, { kind: "component", type: XButtonComponent, selector: "x-button" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
276
284
  }
277
285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XInputNumberComponent, decorators: [{
278
286
  type: Component,
279
- args: [{ selector: `${XInputNumberPrefix}`, standalone: true, imports: [FormsModule, ReactiveFormsModule, XInputComponent, XButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XInputNumberComponent)], template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [attr.value]=\"displayValue()\"\r\n [ngModel]=\"displayValue()\"\r\n (ngModelChange)=\"change($event)\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"] }]
287
+ args: [{ selector: `${XInputNumberPrefix}`, standalone: true, imports: [FormsModule, ReactiveFormsModule, XInputComponent, XButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XInputNumberComponent)], template: "<div #inputNumber class=\"x-input-number\" [class.x-input-number-hidden-button]=\"hiddenButton()\">\r\n <div class=\"x-input-number-row\">\r\n <ng-template #beforeButtonTpl>\r\n <x-button\r\n class=\"x-input-number-reduce\"\r\n icon=\"fto-minus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || minDisabled()\"\r\n (click)=\"!minDisabled() && plus($event, step(), false); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!minDisabled() && down($event, step(), false)\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n <x-input\r\n #inputEleRef\r\n class=\"x-input-number-input\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [inputValidator]=\"inputValidator()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"readonly()\"\r\n [clearable]=\"clearable()\"\r\n [ngModel]=\"displayValue()\"\r\n [valueTpl]=\"valueTpl()\"\r\n [valueTplContext]=\"valueTplContext()\"\r\n [size]=\"size()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"hiddenButton() ? '' : beforeButtonTpl\"\r\n [after]=\"hiddenButton() ? '' : afterButtonTpl\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n (xInput)=\"onInput($event); formControlValidator()\"\r\n ></x-input>\r\n <ng-template #afterButtonTpl>\r\n <x-button\r\n class=\"x-input-number-plus\"\r\n icon=\"fto-plus\"\r\n [size]=\"size()\"\r\n [onlyIcon]=\"!bordered()\"\r\n [disabled]=\"disabledComputed() || maxDisabled()\"\r\n (click)=\"!maxDisabled() && plus($event, step()); formControlValidator()\"\r\n attrType=\"button\"\r\n (mousedown)=\"!maxDisabled() && down($event, step())\"\r\n (mouseup)=\"up($event)\"\r\n plain\r\n flat\r\n ></x-button>\r\n </ng-template>\r\n @if (invalid()) {\r\n <div class=\"x-border-error x-top-left\"></div>\r\n <div class=\"x-border-error x-top-right\"></div>\r\n <div class=\"x-border-error x-bottom-left\"></div>\r\n <div class=\"x-border-error x-bottom-right\"></div>\r\n }\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-input-number{display:inline-block;width:12rem}.x-input-number{margin:0;padding:0}.x-input-number,.x-input-number-input{width:100%}.x-input-number-input input{text-align:center}.x-input-number-hidden-button .x-input-number-input input{text-align:left}\n"] }]
280
288
  }], ctorParameters: () => [] });
281
289
 
282
290
  class XInputNumberModule {