@yoyoboot/l-52abp-ng
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.13.
161 lines • 30.7 kB
JavaScript
import { Component } from '@angular/core';
import { ControlUIWidget, toBool } from '@delon/form';
import { format } from 'date-fns';
import { toDate } from '@delon/util/date-time';
import * as moment from 'moment';
import * as i0 from "@angular/core";
import * as i1 from "@delon/form";
import * as i2 from "ng-zorro-antd/date-picker";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
// tslint:disable-next-line:component-class-suffix
export class MomentWidget extends ControlUIWidget {
constructor() {
super(...arguments);
this.flatRange = false;
this.displayValue = null;
}
ngOnInit() {
const { mode, end, displayFormat, allowClear, showToday } = this.ui;
this.mode = mode || 'date';
this.flatRange = end != null;
// 构建属性对象时会对默认值进行校验,因此可以直接使用 format 作为格式化属性
this.startFormat = this.ui._format;
if (this.flatRange) {
this.mode = 'range';
const endUi = this.endProperty.ui;
this.endFormat = endUi.format ? endUi._format : this.startFormat;
}
if (!displayFormat) {
switch (this.mode) {
case 'year':
this.displayFormat = `yyyy`;
break;
case 'month':
this.displayFormat = `yyyy-MM`;
break;
case 'week':
this.displayFormat = `yyyy-ww`;
break;
}
}
else {
this.displayFormat = displayFormat;
}
this.i = {
allowClear: toBool(allowClear, true),
// nz-date-picker
showToday: toBool(showToday, true),
};
if (!this.startFormat) {
this.startFormat = 'yyyy-MM-dd';
}
if (!this.endFormat) {
this.endFormat = 'yyyy-MM-dd';
}
}
reset(value) {
const toDateOptions = { formatString: this.startFormat, defaultValue: null };
if (Array.isArray(value)) {
value = value.map(o => {
if (moment.isMoment(o)) {
return o.toDate();
}
else if (moment.isDate(o)) {
return o;
}
return o;
}).map(v => toDate(v, toDateOptions));
}
else {
let tmpVal;
if (moment.isMoment(value)) {
tmpVal = value.toDate();
}
else if (moment.isDate(value)) {
tmpVal = value;
}
value = toDate(tmpVal, toDateOptions);
}
if (this.flatRange) {
const endValue = toDate(this.endProperty.formData, {
formatString: this.endFormat || this.startFormat,
defaultValue: null,
});
this.displayValue = value == null || endValue == null ? [] : [value, endValue];
}
else {
this.displayValue = value;
}
this.detectChanges();
// TODO: Need to wait for the rendering to complete, otherwise it will be overwritten of end widget
if (this.displayValue) {
setTimeout(() => this._change(this.displayValue, false));
}
}
_change(value, emitModelChange = true) {
if (emitModelChange && this.ui.change) {
if (Array.isArray(value)) {
this.ui.change(value.map(o => moment(o)));
}
else {
this.ui.change(!!value ? moment(value) : null);
}
}
if (value == null || (Array.isArray(value) && value.length < 2)) {
this.setValue(null);
this.setEnd(null);
return;
}
const res = Array.isArray(value)
? [format(value[0], this.startFormat), format(value[1], this.endFormat || this.startFormat)]
: format(value, this.startFormat);
if (this.flatRange) {
this.setValue(moment(res[0]));
this.setEnd(res[1]);
}
else {
this.setValue(moment(res));
}
}
_openChange(status) {
if (this.ui.onOpenChange) {
this.ui.onOpenChange(status);
}
}
_ok(value) {
if (this.ui.onOk) {
if (!value) {
this.ui.onOk(null);
return;
}
if (!Array.isArray(value)) {
this.ui.onOk(moment(value));
return;
}
this.ui.onOk(value.map(o => moment(o)));
}
}
get endProperty() {
return this.formProperty.parent.properties[this.ui.end];
}
setEnd(value) {
if (!this.flatRange) {
return;
}
this.endProperty.setValue(value, true);
this.endProperty.updateValueAndValidity();
}
}
/* 用于注册小部件 KEY 值 */
MomentWidget.KEY = 'moment';
MomentWidget.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: MomentWidget, deps: null, target: i0.ɵɵFactoryTarget.Component });
MomentWidget.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: MomentWidget, selector: "sf-moment", usesInheritance: true, ngImport: i0, template: "<sf-item-wrap [id]=\"id\" [schema]=\"schema\" [ui]=\"ui\" [showError]=\"showError\" [error]=\"error\" [showTitle]=\"schema.title\">\n <ng-container [ngSwitch]=\"mode\">\n <nz-year-picker\n *ngSwitchCase=\"'year'\"\n [nzId]=\"id\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size!\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"ui.className!\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale!\"\n [nzPlaceHolder]=\"ui.placeholder!\"\n [nzPopupStyle]=\"ui.popupStyle!\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n [nzInline]=\"ui.inline!\"\n ></nz-year-picker>\n\n <nz-month-picker\n *ngSwitchCase=\"'month'\"\n [nzId]=\"id\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size!\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"ui.className!\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale!\"\n [nzPlaceHolder]=\"ui.placeholder!\"\n [nzPopupStyle]=\"ui.popupStyle!\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n [nzInline]=\"ui.inline!\"\n ></nz-month-picker>\n\n <nz-week-picker\n *ngSwitchCase=\"'week'\"\n [nzId]=\"id\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size!\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"ui.className!\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale!\"\n [nzPlaceHolder]=\"ui.placeholder!\"\n [nzPopupStyle]=\"ui.popupStyle!\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n [nzInline]=\"ui.inline!\"\n (nzOnOpenChange)=\"_openChange($event)\"\n ></nz-week-picker>\n\n <nz-range-picker\n *ngSwitchCase=\"'range'\"\n [nzId]=\"id\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size!\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"ui.className!\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale!\"\n [nzPlaceHolder]=\"ui.placeholder!\"\n [nzPopupStyle]=\"ui.popupStyle!\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzDisabledTime]=\"ui.disabledTime\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"\n [nzRanges]=\"ui.ranges\"\n [nzShowTime]=\"ui.showTime\"\n [nzMode]=\"ui.rangeMode\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n [nzInline]=\"ui.inline!\"\n (nzOnOk)=\"_ok($event)\"\n ></nz-range-picker>\n\n <nz-date-picker\n *ngSwitchDefault\n [nzId]=\"id\"\n [nzDisabled]=\"disabled\"\n [nzSize]=\"ui.size!\"\n [nzFormat]=\"displayFormat\"\n [(ngModel)]=\"displayValue\"\n (ngModelChange)=\"_change($event)\"\n [nzAllowClear]=\"i.allowClear\"\n [ngClass]=\"ui.className!\"\n [nzDisabledDate]=\"ui.disabledDate\"\n [nzLocale]=\"ui.locale!\"\n [nzPlaceHolder]=\"ui.placeholder!\"\n [nzPopupStyle]=\"ui.popupStyle!\"\n [nzDropdownClassName]=\"ui.dropdownClassName\"\n (nzOnOpenChange)=\"_openChange($event)\"\n [nzDisabledTime]=\"ui.disabledTime\"\n [nzRenderExtraFooter]=\"ui.renderExtraFooter\"\n [nzShowTime]=\"ui.showTime\"\n [nzShowToday]=\"i.showToday\"\n [nzInputReadOnly]=\"ui.inputReadOnly\"\n [nzInline]=\"ui.inline!\"\n (nzOnOk)=\"_ok($event)\"\n ></nz-date-picker>\n </ng-container>\n</sf-item-wrap>\n", components: [{ type: i1.SFItemWrapComponent, selector: "sf-item-wrap", inputs: ["title", "showTitle", "id", "schema", "ui", "showError", "error"] }, { type: i2.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzPlaceHolder", "nzPopupStyle", "nzSize", "nzShowToday", "nzMode", "nzShowNow", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzShowTime", "nzFormat", "nzLocale", "nzOpen", "nzDisabledDate", "nzDropdownClassName", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzRanges"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }], directives: [{ type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.NzYearPickerComponent, selector: "nz-year-picker", exportAs: ["nzYearPicker"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NzMonthPickerComponent, selector: "nz-month-picker", exportAs: ["nzMonthPicker"] }, { type: i2.NzWeekPickerComponent, selector: "nz-week-picker", exportAs: ["nzWeekPicker"] }, { type: i2.NzRangePickerComponent, selector: "nz-range-picker", exportAs: ["nzRangePicker"] }, { type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: MomentWidget, decorators: [{
type: Component,
args: [{
selector: 'sf-moment',
templateUrl: './moment.widget.html',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9tZW50LndpZGdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2wtNTJhYnAtbmcvc3JjL2pzb24tc2NoZW1hL3NmLXdpZGdldHMvbW9tZW50L21vbWVudC53aWRnZXQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sLTUyYWJwLW5nL3NyYy9qc29uLXNjaGVtYS9zZi13aWRnZXRzL21vbWVudC9tb21lbnQud2lkZ2V0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUE2QyxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7OztBQU9qQyxrREFBa0Q7QUFDbEQsTUFBTSxPQUFPLFlBQWEsU0FBUSxlQUFxQztJQUx2RTs7UUFXVSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGlCQUFZLEdBQXlCLElBQUksQ0FBQztLQTRJM0M7SUF4SUMsUUFBUTtRQUNOLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDO1FBQzdCLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBUSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNs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WUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBUSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU8sQ0FBQyxVQUE4QyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBSSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFvQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7O0FBbEpELG1CQUFtQjtBQUNILGdCQUFHLEdBQUcsUUFBUSxDQUFDOzBHQUZwQixZQUFZOzhGQUFaLFlBQVksd0VDYnpCLG9uSUFvSEE7NEZEdkdhLFlBQVk7a0JBTHhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFdBQVcsRUFBRSxzQkFBc0I7aUJBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xVSVdpZGdldCwgRm9ybVByb3BlcnR5LCBTRkRhdGVXaWRnZXRTY2hlbWEsIFNGVmFsdWUsIHRvQm9vbCB9IGZyb20gJ0BkZWxvbi9mb3JtJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gJ0BkZWxvbi91dGlsL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTRk1vbWVudFdpZGdldFNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2YtbW9tZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vbWVudC53aWRnZXQuaHRtbCcsXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBNb21lbnRXaWRnZXQgZXh0ZW5kcyBDb250cm9sVUlXaWRnZXQ8U0ZNb21lbnRXaWRnZXRTY2hlbWE+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyog55So5LqO5rOo5YaM5bCP6YOo5Lu2IEtFWSDlgLwgKi9cbiAgc3RhdGljIHJlYWRvbmx5IEtFWSA9ICdtb21lbnQnO1xuXG4gIHByaXZhdGUgc3RhcnRGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBlbmRGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBmbGF0UmFuZ2UgPSBmYWxzZTtcbiAgbW9kZTogc3RyaW5nO1xuICBkaXNwbGF5VmFsdWU6IERhdGUgfCBEYXRlW10gfCBudWxsID0gbnVsbDtcbiAgZGlzcGxheUZvcm1hdDogc3RyaW5nO1xuICBpOiBhbnk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBtb2RlLCBlbmQsIGRpc3BsYXlGb3JtYXQsIGFsbG93Q2xlYXIsIHNob3dUb2RheSB9ID0gdGhpcy51aTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlIHx8ICdkYXRlJztcbiAgICB0aGlzLmZsYXRSYW5nZSA9IGVuZCAhPSBudWxsO1xuICAgIC8vIOaehOW7uuWxnuaAp+WvueixoeaXtuS8muWvuem7mOiupOWAvOi/m+ihjOagoemqjO+8jOWboOatpOWPr+S7peebtOaOpeS9v+eUqCBmb3JtYXQg5L2c5Li65qC85byP5YyW5bGe5oCnXG4gICAgdGhpcy5zdGFydEZvcm1hdCA9IHRoaXMudWkuX2Zvcm1hdCE7XG4gICAgaWYgKHRoaXMuZmxhdFJhbmdlKSB7XG4gICAgICB0aGlzLm1vZGUgPSAncmFuZ2UnO1xuICAgICAgY29uc3QgZW5kVWkgPSB0aGlzLmVuZFByb3BlcnR5LnVpIGFzIFNGRGF0ZVdpZGdldFNjaGVtYTtcbiAgICAgIHRoaXMuZW5kRm9ybWF0ID0gZW5kVWkuZm9ybWF0ID8gZW5kVWkuX2Zvcm1hdCA6IHRoaXMuc3RhcnRGb3JtYXQ7XG4gICAgfVxuICAgIGlmICghZGlzcGxheUZvcm1hdCkge1xuICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5kaXNwbGF5Rm9ybWF0ID0gYHl5eXlgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5kaXNwbGF5Rm9ybWF0ID0gYHl5eXktTU1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICB0aGlzLmRpc3BsYXlGb3JtYXQgPSBgeXl5eS13d2A7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgfVxuICAgIHRoaXMuaSA9IHtcbiAgICAgIGFsbG93Q2xlYXI6IHRvQm9vbChhbGxvd0NsZWFyLCB0cnVlKSxcbiAgICAgIC8vIG56LWRhdGUtcGlja2VyXG4gICAgICBzaG93VG9kYXk6IHRvQm9vbChzaG93VG9kYXksIHRydWUpLFxuICAgIH07XG4gICAgaWYgKCF0aGlzLnN0YXJ0Rm9ybWF0KSB7XG4gICAgICB0aGlzLnN0YXJ0Rm9ybWF0ID0gJ3l5eXktTU0tZGQnO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW5kRm9ybWF0KSB7XG4gICAgICB0aGlzLmVuZEZvcm1hdCA9ICd5eXl5LU1NLWRkJztcbiAgICB9XG4gIH1cblxuICByZXNldCh2YWx1ZTogU0ZWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IHRvRGF0ZU9wdGlvbnMgPSB7IGZvcm1hdFN0cmluZzogdGhpcy5zdGFydEZvcm1hdCwgZGVmYXVsdFZhbHVlOiBudWxsIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvID0+IHtcbiAgICAgICAgaWYgKG1vbWVudC5pc01vbWVudChvKSkge1xuICAgICAgICAgIHJldHVybiAobyBhcyBtb21lbnQuTW9tZW50KS50b0RhdGUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb21lbnQuaXNEYXRlKG8pKSB7XG4gICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG87XG4gICAgICB9KS5tYXAodiA9PiB0b0RhdGUodiwgdG9EYXRlT3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdG1wVmFsOiBhbnk7XG4gICAgICBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgICB0bXBWYWwgPSAodmFsdWUgYXMgbW9tZW50Lk1vbWVudCkudG9EYXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKG1vbWVudC5pc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHRtcFZhbCA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0b0RhdGUodG1wVmFsLCB0b0RhdGVPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmxhdFJhbmdlKSB7XG4gICAgICBjb25zdCBlbmRWYWx1ZSA9IHRvRGF0ZSh0aGlzLmVuZFByb3BlcnR5LmZvcm1EYXRhIGFzIE56U2FmZUFueSwge1xuICAgICAgICBmb3JtYXRTdHJpbmc6IHRoaXMuZW5kRm9ybWF0IHx8IHRoaXMuc3RhcnRGb3JtYXQsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB2YWx1ZSA9PSBudWxsIHx8IGVuZFZhbHVlID09IG51bGwgPyBbXSA6IFt2YWx1ZSwgZW5kVmFsdWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBUT0RPOiBOZWVkIHRvIHdhaXQgZm9yIHRoZSByZW5kZXJpbmcgdG8gY29tcGxldGUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIG9mIGVuZCB3aWRnZXRcbiAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fY2hhbmdlKHRoaXMuZGlzcGxheVZhbHVlLCBmYWxzZSkpO1xuICAgIH1cbiAgfVxuXG4gIF9jaGFuZ2UodmFsdWU6IERhdGUgfCBEYXRlW10gfCBudWxsLCBlbWl0TW9kZWxDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKGVtaXRNb2RlbENoYW5nZSAmJiB0aGlzLnVpLmNoYW5nZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMudWkuY2hhbmdlKHZhbHVlLm1hcChvID0+IG1vbWVudChvKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51aS5jaGFuZ2UoXG4gICAgICAgICAgISF2YWx1ZSA/IG1vbWVudCh2YWx1ZSkgOiBudWxsLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoIDwgMikpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnNldEVuZChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgPyBbZm9ybWF0KHZhbHVlWzBdLCB0aGlzLnN0YXJ0Rm9ybWF0KSwgZm9ybWF0KHZhbHVlWzFdLCB0aGlzLmVuZEZvcm1hdCB8fCB0aGlzLnN0YXJ0Rm9ybWF0KV1cbiAgICAgIDogZm9ybWF0KHZhbHVlLCB0aGlzLnN0YXJ0Rm9ybWF0KTtcblxuICAgIGlmICh0aGlzLmZsYXRSYW5nZSkge1xuICAgICAgdGhpcy5zZXRWYWx1ZShtb21lbnQocmVzWzBdKSk7XG4gICAgICB0aGlzLnNldEVuZChyZXNbMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFZhbHVlKG1vbWVudChyZXMpKTtcbiAgICB9XG4gIH1cblxuICBfb3BlbkNoYW5nZShzdGF0dXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy51aS5vbk9wZW5DaGFuZ2UpIHtcbiAgICAgIHRoaXMudWkub25PcGVuQ2hhbmdlKHN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgX29rKHZhbHVlOiBEYXRlIHwgRGF0ZVtdIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVpLm9uT2spIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy51aS5vbk9rKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMudWkub25Payhtb21lbnQodmFsdWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVpLm9uT2sodmFsdWUubWFwKG8gPT4gbW9tZW50KG8pKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZW5kUHJvcGVydHkoKTogRm9ybVByb3BlcnR5IHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybVByb3BlcnR5LnBhcmVudCEucHJvcGVydGllcyBhcyB7IFtrZXk6IHN0cmluZ106IEZvcm1Qcm9wZXJ0eSB9KVt0aGlzLnVpLmVuZCFdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFbmQodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmxhdFJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbmRQcm9wZXJ0eS5zZXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgdGhpcy5lbmRQcm9wZXJ0eS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cbn1cbiIsIjxzZi1pdGVtLXdyYXAgW2lkXT1cImlkXCIgW3NjaGVtYV09XCJzY2hlbWFcIiBbdWldPVwidWlcIiBbc2hvd0Vycm9yXT1cInNob3dFcnJvclwiIFtlcnJvcl09XCJlcnJvclwiIFtzaG93VGl0bGVdPVwic2NoZW1hLnRpdGxlXCI+XG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIm1vZGVcIj5cbiAgICA8bnoteWVhci1waWNrZXJcbiAgICAgICpuZ1N3aXRjaENhc2U9XCIneWVhcidcIlxuICAgICAgW256SWRdPVwiaWRcIlxuICAgICAgW256RGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW256U2l6ZV09XCJ1aS5zaXplIVwiXG4gICAgICBbbnpGb3JtYXRdPVwiZGlzcGxheUZvcm1hdFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImRpc3BsYXlWYWx1ZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJfY2hhbmdlKCRldmVudClcIlxuICAgICAgW256QWxsb3dDbGVhcl09XCJpLmFsbG93Q2xlYXJcIlxuICAgICAgW25nQ2xhc3NdPVwidWkuY2xhc3NOYW1lIVwiXG4gICAgICBbbnpEaXNhYmxlZERhdGVdPVwidWkuZGlzYWJsZWREYXRlXCJcbiAgICAgIFtuekxvY2FsZV09XCJ1aS5sb2NhbGUhXCJcbiAgICAgIFtuelBsYWNlSG9sZGVyXT1cInVpLnBsYWNlaG9sZGVyIVwiXG4gICAgICBbbnpQb3B1cFN0eWxlXT1cInVpLnBvcHVwU3R5bGUhXCJcbiAgICAgIFtuekRyb3Bkb3duQ2xhc3NOYW1lXT1cInVpLmRyb3Bkb3duQ2xhc3NOYW1lXCJcbiAgICAgIChuek9uT3BlbkNoYW5nZSk9XCJfb3BlbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFtuelJlbmRlckV4dHJhRm9vdGVyXT1cInVpLnJlbmRlckV4dHJhRm9vdGVyXCJcbiAgICAgIFtueklucHV0UmVhZE9ubHldPVwidWkuaW5wdXRSZWFkT25seVwiXG4gICAgICBbbnpJbmxpbmVdPVwidWkuaW5saW5lIVwiXG4gICAgPjwvbnoteWVhci1waWNrZXI+XG5cbiAgICA8bnotbW9udGgtcGlja2VyXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiJ21vbnRoJ1wiXG4gICAgICBbbnpJZF09XCJpZFwiXG4gICAgICBbbnpEaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbbnpTaXplXT1cInVpLnNpemUhXCJcbiAgICAgIFtuekZvcm1hdF09XCJkaXNwbGF5Rm9ybWF0XCJcbiAgICAgIFsobmdNb2RlbCldPVwiZGlzcGxheVZhbHVlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl9jaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbbnpBbGxvd0NsZWFyXT1cImkuYWxsb3dDbGVhclwiXG4gICAgICBbbmdDbGFzc109XCJ1aS5jbGFzc05hbWUhXCJcbiAgICAgIFtuekRpc2FibGVkRGF0ZV09XCJ1aS5kaXNhYmxlZERhdGVcIlxuICAgICAgW256TG9jYWxlXT1cInVpLmxvY2FsZSFcIlxuICAgICAgW256UGxhY2VIb2xkZXJdPVwidWkucGxhY2Vob2xkZXIhXCJcbiAgICAgIFtuelBvcHVwU3R5bGVdPVwidWkucG9wdXBTdHlsZSFcIlxuICAgICAgW256RHJvcGRvd25DbGFzc05hbWVdPVwidWkuZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgKG56T25PcGVuQ2hhbmdlKT1cIl9vcGVuQ2hhbmdlKCRldmVudClcIlxuICAgICAgW256UmVuZGVyRXh0cmFGb290ZXJdPVwidWkucmVuZGVyRXh0cmFGb290ZXJcIlxuICAgICAgW256SW5wdXRSZWFkT25seV09XCJ1aS5pbnB1dFJlYWRPbmx5XCJcbiAgICAgIFtueklubGluZV09XCJ1aS5pbmxpbmUhXCJcbiAgICA+PC9uei1tb250aC1waWNrZXI+XG5cbiAgICA8bnotd2Vlay1waWNrZXJcbiAgICAgICpuZ1N3aXRjaENhc2U9XCInd2VlaydcIlxuICAgICAgW256SWRdPVwiaWRcIlxuICAgICAgW256RGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW256U2l6ZV09XCJ1aS5zaXplIVwiXG4gICAgICBbbnpGb3JtYXRdPVwiZGlzcGxheUZvcm1hdFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImRpc3BsYXlWYWx1ZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJfY2hhbmdlKCRldmVudClcIlxuICAgICAgW256QWxsb3dDbGVhcl09XCJpLmFsbG93Q2xlYXJcIlxuICAgICAgW25nQ2xhc3NdPVwidWkuY2xhc3NOYW1lIVwiXG4gICAgICBbbnpEaXNhYmxlZERhdGVdPVwidWkuZGlzYWJsZWREYXRlXCJcbiAgICAgIFtuekxvY2FsZV09XCJ1aS5sb2NhbGUhXCJcbiAgICAgIFtuelBsYWNlSG9sZGVyXT1cInVpLnBsYWNlaG9sZGVyIVwiXG4gICAgICBbbnpQb3B1cFN0eWxlXT1cInVpLnBvcHVwU3R5bGUhXCJcbiAgICAgIFtuekRyb3Bkb3duQ2xhc3NOYW1lXT1cInVpLmRyb3Bkb3duQ2xhc3NOYW1lXCJcbiAgICAgIFtueklucHV0UmVhZE9ubHldPVwidWkuaW5wdXRSZWFkT25seVwiXG4gICAgICBbbnpJbmxpbmVdPVwidWkuaW5saW5lIVwiXG4gICAgICAobnpPbk9wZW5DaGFuZ2UpPVwiX29wZW5DaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvbnotd2Vlay1waWNrZXI+XG5cbiAgICA8bnotcmFuZ2UtcGlja2VyXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3JhbmdlJ1wiXG4gICAgICBbbnpJZF09XCJpZFwiXG4gICAgICBbbnpEaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbbnpTaXplXT1cInVpLnNpemUhXCJcbiAgICAgIFtuekZvcm1hdF09XCJkaXNwbGF5Rm9ybWF0XCJcbiAgICAgIFsobmdNb2RlbCldPVwiZGlzcGxheVZhbHVlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl9jaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbbnpBbGxvd0NsZWFyXT1cImkuYWxsb3dDbGVhclwiXG4gICAgICBbbmdDbGFzc109XCJ1aS5jbGFzc05hbWUhXCJcbiAgICAgIFtuekRpc2FibGVkRGF0ZV09XCJ1aS5kaXNhYmxlZERhdGVcIlxuICAgICAgW256TG9jYWxlXT1cInVpLmxvY2FsZSFcIlxuICAgICAgW256UGxhY2VIb2xkZXJdPVwidWkucGxhY2Vob2xkZXIhXCJcbiAgICAgIFtuelBvcHVwU3R5bGVdPVwidWkucG9wdXBTdHlsZSFcIlxuICAgICAgW256RHJvcGRvd25DbGFzc05hbWVdPVwidWkuZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgKG56T25PcGVuQ2hhbmdlKT1cIl9vcGVuQ2hhbmdlKCRldmVudClcIlxuICAgICAgW256RGlzYWJsZWRUaW1lXT1cInVpLmRpc2FibGVkVGltZVwiXG4gICAgICBbbnpSZW5kZXJFeHRyYUZvb3Rlcl09XCJ1aS5yZW5kZXJFeHRyYUZvb3RlclwiXG4gICAgICBbbnpSYW5nZXNdPVwidWkucmFuZ2VzXCJcbiAgICAgIFtuelNob3dUaW1lXT1cInVpLnNob3dUaW1lXCJcbiAgICAgIFtuek1vZGVdPVwidWkucmFuZ2VNb2RlXCJcbiAgICAgIFtueklucHV0UmVhZE9ubHldPVwidWkuaW5wdXRSZWFkT25seVwiXG4gICAgICBbbnpJbmxpbmVdPVwidWkuaW5saW5lIVwiXG4gICAgICAobnpPbk9rKT1cIl9vaygkZXZlbnQpXCJcbiAgICA+PC9uei1yYW5nZS1waWNrZXI+XG5cbiAgICA8bnotZGF0ZS1waWNrZXJcbiAgICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICAgIFtueklkXT1cImlkXCJcbiAgICAgIFtuekRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtuelNpemVdPVwidWkuc2l6ZSFcIlxuICAgICAgW256Rm9ybWF0XT1cImRpc3BsYXlGb3JtYXRcIlxuICAgICAgWyhuZ01vZGVsKV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX2NoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFtuekFsbG93Q2xlYXJdPVwiaS5hbGxvd0NsZWFyXCJcbiAgICAgIFtuZ0NsYXNzXT1cInVpLmNsYXNzTmFtZSFcIlxuICAgICAgW256RGlzYWJsZWREYXRlXT1cInVpLmRpc2FibGVkRGF0ZVwiXG4gICAgICBbbnpMb2NhbGVdPVwidWkubG9jYWxlIVwiXG4gICAgICBbbnpQbGFjZUhvbGRlcl09XCJ1aS5wbGFjZWhvbGRlciFcIlxuICAgICAgW256UG9wdXBTdHlsZV09XCJ1aS5wb3B1cFN0eWxlIVwiXG4gICAgICBbbnpEcm9wZG93bkNsYXNzTmFtZV09XCJ1aS5kcm9wZG93bkNsYXNzTmFtZVwiXG4gICAgICAobnpPbk9wZW5DaGFuZ2UpPVwiX29wZW5DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbbnpEaXNhYmxlZFRpbWVdPVwidWkuZGlzYWJsZWRUaW1lXCJcbiAgICAgIFtuelJlbmRlckV4dHJhRm9vdGVyXT1cInVpLnJlbmRlckV4dHJhRm9vdGVyXCJcbiAgICAgIFtuelNob3dUaW1lXT1cInVpLnNob3dUaW1lXCJcbiAgICAgIFtuelNob3dUb2RheV09XCJpLnNob3dUb2RheVwiXG4gICAgICBbbnpJbnB1dFJlYWRPbmx5XT1cInVpLmlucHV0UmVhZE9ubHlcIlxuICAgICAgW256SW5saW5lXT1cInVpLmlubGluZSFcIlxuICAgICAgKG56T25Payk9XCJfb2soJGV2ZW50KVwiXG4gICAgPjwvbnotZGF0ZS1waWNrZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9zZi1pdGVtLXdyYXA+XG4iXX0=