@churchillliving/se-ui-toolkit 6.54.39 → 6.54.40
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.
|
@@ -4,18 +4,20 @@ import { EPermissionType } from '../../../models/user-info.model';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../../../services/authentication.service";
|
|
6
6
|
import * as i2 from "@angular/common";
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "primeng/
|
|
11
|
-
import * as i7 from "primeng/
|
|
12
|
-
import * as i8 from "primeng/
|
|
13
|
-
import * as i9 from "primeng/
|
|
14
|
-
import * as i10 from "primeng/
|
|
7
|
+
import * as i3 from "../../../services/hyperlink.service";
|
|
8
|
+
import * as i4 from "primeng/multiselect";
|
|
9
|
+
import * as i5 from "@angular/forms";
|
|
10
|
+
import * as i6 from "primeng/dropdown";
|
|
11
|
+
import * as i7 from "primeng/calendar";
|
|
12
|
+
import * as i8 from "primeng/button";
|
|
13
|
+
import * as i9 from "primeng/checkbox";
|
|
14
|
+
import * as i10 from "primeng/ripple";
|
|
15
|
+
import * as i11 from "primeng/inputtext";
|
|
15
16
|
export class HeaderComponent {
|
|
16
|
-
constructor(authService, datepipe) {
|
|
17
|
+
constructor(authService, datepipe, hyperlinkService) {
|
|
17
18
|
this.authService = authService;
|
|
18
19
|
this.datepipe = datepipe;
|
|
20
|
+
this.hyperlinkService = hyperlinkService;
|
|
19
21
|
this.dynamicCase = EFormControl;
|
|
20
22
|
this.roles = [];
|
|
21
23
|
this.isHeaderHidden = false;
|
|
@@ -36,6 +38,14 @@ export class HeaderComponent {
|
|
|
36
38
|
const time = x.value.substring(index - 2, index + 6);
|
|
37
39
|
x.value = time;
|
|
38
40
|
}
|
|
41
|
+
if (x.control === EFormControl.HYPERLINK && x.hyperlink?.linkId) {
|
|
42
|
+
this.hyperlinkService.buildUrl(x.hyperlink?.linkId).then((res) => {
|
|
43
|
+
if (res[0]?.url) {
|
|
44
|
+
const originalUrl = this.hyperlinkService.setUrl(x?.hyperlink?.params, res[0]);
|
|
45
|
+
x.hyperlink['link'] = originalUrl;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
39
49
|
});
|
|
40
50
|
}
|
|
41
51
|
}
|
|
@@ -88,13 +98,13 @@ export class HeaderComponent {
|
|
|
88
98
|
this.isHeaderHidden = totalFields > 0 && totalFields === hiddenFields;
|
|
89
99
|
}
|
|
90
100
|
}
|
|
91
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.AuthenticationService }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
92
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: HeaderComponent, selector: "se-header", inputs: { headers: "headers" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!isHeaderHidden && headers\" class=\"card sticky header-component\">\n <div class=\"header-list p-1 flex\">\n <div\n [class]=\"'md:col-' + headerField.column + ' sm:col-6 col-12 py-0'\"\n class=\"header-list-item section-wrapper-in-header\"\n *ngFor=\"let headerField of headers.fields\"\n >\n <div [ngSwitch]=\"headerField.control\">\n <!-- For Dropdown -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.DROPDOWN\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <p-dropdown\n [placeholder]=\"headerField.label\"\n [options]=\"headerField.data\"\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-dropdown>\n </div>\n </span>\n \n <!-- For label -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.LABEL\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <!-- for value -->\n <Span *ngIf=\"!headerField.format\">\n <label for=\"\">{{ headerField.value }}</label> \n </Span>\n\n <!-- for currency -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'currency'\n \"\n >\n <label>{{\n headerField.value\n | currency\n : (headerField.format.formatParams &&\n headerField.format.formatParams.currency\n ? headerField.format.formatParams.currency\n : 'USD')\n }}</label>\n </span>\n\n <!-- for percent -->\n <span *ngIf=\"headerField.format && headerField.format.type === 'percent'\">\n <label >{{ headerField.value }}%</label>\n </span>\n\n <!-- for decimal -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'decimal'\n \"\n >\n <label>{{\n headerField.value\n | number\n : (headerField.format.formatParams &&\n headerField.format.formatParams.digitsInfo\n ? '2.' +\n headerField.format.formatParams.digitsInfo +\n '-8'\n : '2.2-8')\n }}</label>\n </span>\n </div>\n </span>\n\n <!-- Text Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div *ngSwitchCase=\"dynamicCase.INPUT\">\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <input\n class=\"mr-2 form-control\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Number Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.NUMERIC\">\n <label>{{ headerField.label }}</label>\n <input\n class=\"flex-grow-1 mr-2 form-control\"\n type=\"number\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Checkbox -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CHECKBOX\">\n <label>{{ headerField.label }}</label>\n <p-checkbox\n class=\"flex align-items-center\"\n [(ngModel)]=\"headerField.value\"\n binary=\"true\"\n ></p-checkbox>\n </div>\n </span>\n\n <!-- Calendar -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CALENDAR\">\n <label>{{ headerField.label }}</label>\n <p-calendar\n class=\"flex-grow-1 mr-2\"\n [placeholder]=\"headerField.label\"\n [showButtonBar]=\"!headerField.timeOnly\"\n [(ngModel)]=\"headerField.value\"\n hourFormat=\"12\"\n dataType=\"string\"\n [timeOnly]=\"headerField.timeOnly\"\n [showTime]=\"headerField.showTime\"\n [dateFormat]=\"headerField.format ? headerField.format.dateType : 'mm/dd/yy'\"\n >\n </p-calendar>\n </div>\n </span>\n\n <!-- Multi-select -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.MULTISELECT\">\n <label>{{ headerField.label }}</label>\n <p-multiSelect\n [(ngModel)]=\"headerField.value\"\n [options]=\"headerField.data\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-multiSelect>\n </div>\n </span>\n\n <!-- Button -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.BUTTON\">\n <button\n pButton\n pRipple\n type=\"button\"\n label=\"{{ headerField.label }}\"\n class=\"{{ headerField.class }}\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n ></button>\n </div>\n </span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".header-list-item:after{content:\"\"}.header-list-item:last-child:after{display:none}.card.sticky{position:sticky;z-index:1;top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i8.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "directive", type: i9.Ripple, selector: "[pRipple]" }, { kind: "directive", type: i10.InputText, selector: "[pInputText]" }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }] }); }
|
|
101
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.AuthenticationService }, { token: i2.DatePipe }, { token: i3.HyperlinkService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: HeaderComponent, selector: "se-header", inputs: { headers: "headers" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!isHeaderHidden && headers\" class=\"card sticky header-component\">\n <div class=\"header-list p-1 flex\">\n <div\n [class]=\"'md:col-' + headerField.column + ' sm:col-6 col-12 py-0'\"\n class=\"header-list-item section-wrapper-in-header\"\n *ngFor=\"let headerField of headers.fields\"\n >\n <div [ngSwitch]=\"headerField.control\">\n <!-- For Dropdown -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.DROPDOWN\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <p-dropdown\n [placeholder]=\"headerField.label\"\n [options]=\"headerField.data\"\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-dropdown>\n </div>\n </span>\n \n <!-- For label -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.LABEL\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <!-- for value -->\n <Span *ngIf=\"!headerField.format\">\n <label for=\"\">{{ headerField.value }}</label> \n </Span>\n\n <!-- for currency -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'currency'\n \"\n >\n <label>{{\n headerField.value\n | currency\n : (headerField.format.formatParams &&\n headerField.format.formatParams.currency\n ? headerField.format.formatParams.currency\n : 'USD')\n }}</label>\n </span>\n\n <!-- for percent -->\n <span *ngIf=\"headerField.format && headerField.format.type === 'percent'\">\n <label >{{ headerField.value }}%</label>\n </span>\n\n <!-- for decimal -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'decimal'\n \"\n >\n <label>{{\n headerField.value\n | number\n : (headerField.format.formatParams &&\n headerField.format.formatParams.digitsInfo\n ? '2.' +\n headerField.format.formatParams.digitsInfo +\n '-8'\n : '2.2-8')\n }}</label>\n </span>\n </div>\n </span>\n\n <!-- Text Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div *ngSwitchCase=\"dynamicCase.INPUT\">\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <input\n class=\"mr-2 form-control\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Number Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.NUMERIC\">\n <label>{{ headerField.label }}</label>\n <input\n class=\"flex-grow-1 mr-2 form-control\"\n type=\"number\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Checkbox -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CHECKBOX\">\n <label>{{ headerField.label }}</label>\n <p-checkbox\n class=\"flex align-items-center\"\n [(ngModel)]=\"headerField.value\"\n binary=\"true\"\n ></p-checkbox>\n </div>\n </span>\n\n <!-- hyperLink -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.HYPERLINK\">\n <div *ngIf=\"headerField.hyperlink\">\n <a tabindex=\"-1\" [href]=\"headerField.hyperlink?.link\" [target]=\"headerField.hyperlink?.target ? headerField.hyperlink?.target : '_blank'\"\n data-title-element=\"self\">\n {{ headerField.label }}\n </a>\n </div>\n </div>\n </span>\n\n <!-- Calendar -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CALENDAR\">\n <label>{{ headerField.label }}</label>\n <p-calendar\n class=\"flex-grow-1 mr-2\"\n [placeholder]=\"headerField.label\"\n [showButtonBar]=\"!headerField.timeOnly\"\n [(ngModel)]=\"headerField.value\"\n hourFormat=\"12\"\n dataType=\"string\"\n [timeOnly]=\"headerField.timeOnly\"\n [showTime]=\"headerField.showTime\"\n [dateFormat]=\"headerField.format ? headerField.format.dateType : 'mm/dd/yy'\"\n >\n </p-calendar>\n </div>\n </span>\n\n <!-- Multi-select -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.MULTISELECT\">\n <label>{{ headerField.label }}</label>\n <p-multiSelect\n [(ngModel)]=\"headerField.value\"\n [options]=\"headerField.data\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-multiSelect>\n </div>\n </span>\n\n <!-- Button -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.BUTTON\">\n <button\n pButton\n pRipple\n type=\"button\"\n label=\"{{ headerField.label }}\"\n class=\"{{ headerField.class }}\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n ></button>\n </div>\n </span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".header-list-item:after{content:\"\"}.header-list-item:last-child:after{display:none}.card.sticky{position:sticky;z-index:1;top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "label", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i7.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "directive", type: i10.Ripple, selector: "[pRipple]" }, { kind: "directive", type: i11.InputText, selector: "[pInputText]" }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }] }); }
|
|
93
103
|
}
|
|
94
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
95
105
|
type: Component,
|
|
96
|
-
args: [{ selector: 'se-header', template: "<div *ngIf=\"!isHeaderHidden && headers\" class=\"card sticky header-component\">\n <div class=\"header-list p-1 flex\">\n <div\n [class]=\"'md:col-' + headerField.column + ' sm:col-6 col-12 py-0'\"\n class=\"header-list-item section-wrapper-in-header\"\n *ngFor=\"let headerField of headers.fields\"\n >\n <div [ngSwitch]=\"headerField.control\">\n <!-- For Dropdown -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.DROPDOWN\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <p-dropdown\n [placeholder]=\"headerField.label\"\n [options]=\"headerField.data\"\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-dropdown>\n </div>\n </span>\n \n <!-- For label -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.LABEL\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <!-- for value -->\n <Span *ngIf=\"!headerField.format\">\n <label for=\"\">{{ headerField.value }}</label> \n </Span>\n\n <!-- for currency -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'currency'\n \"\n >\n <label>{{\n headerField.value\n | currency\n : (headerField.format.formatParams &&\n headerField.format.formatParams.currency\n ? headerField.format.formatParams.currency\n : 'USD')\n }}</label>\n </span>\n\n <!-- for percent -->\n <span *ngIf=\"headerField.format && headerField.format.type === 'percent'\">\n <label >{{ headerField.value }}%</label>\n </span>\n\n <!-- for decimal -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'decimal'\n \"\n >\n <label>{{\n headerField.value\n | number\n : (headerField.format.formatParams &&\n headerField.format.formatParams.digitsInfo\n ? '2.' +\n headerField.format.formatParams.digitsInfo +\n '-8'\n : '2.2-8')\n }}</label>\n </span>\n </div>\n </span>\n\n <!-- Text Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div *ngSwitchCase=\"dynamicCase.INPUT\">\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <input\n class=\"mr-2 form-control\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Number Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.NUMERIC\">\n <label>{{ headerField.label }}</label>\n <input\n class=\"flex-grow-1 mr-2 form-control\"\n type=\"number\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Checkbox -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CHECKBOX\">\n <label>{{ headerField.label }}</label>\n <p-checkbox\n class=\"flex align-items-center\"\n [(ngModel)]=\"headerField.value\"\n binary=\"true\"\n ></p-checkbox>\n </div>\n </span>\n\n <!-- Calendar -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CALENDAR\">\n <label>{{ headerField.label }}</label>\n <p-calendar\n class=\"flex-grow-1 mr-2\"\n [placeholder]=\"headerField.label\"\n [showButtonBar]=\"!headerField.timeOnly\"\n [(ngModel)]=\"headerField.value\"\n hourFormat=\"12\"\n dataType=\"string\"\n [timeOnly]=\"headerField.timeOnly\"\n [showTime]=\"headerField.showTime\"\n [dateFormat]=\"headerField.format ? headerField.format.dateType : 'mm/dd/yy'\"\n >\n </p-calendar>\n </div>\n </span>\n\n <!-- Multi-select -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.MULTISELECT\">\n <label>{{ headerField.label }}</label>\n <p-multiSelect\n [(ngModel)]=\"headerField.value\"\n [options]=\"headerField.data\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-multiSelect>\n </div>\n </span>\n\n <!-- Button -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.BUTTON\">\n <button\n pButton\n pRipple\n type=\"button\"\n label=\"{{ headerField.label }}\"\n class=\"{{ headerField.class }}\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n ></button>\n </div>\n </span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".header-list-item:after{content:\"\"}.header-list-item:last-child:after{display:none}.card.sticky{position:sticky;z-index:1;top:0}\n"] }]
|
|
97
|
-
}], ctorParameters: function () { return [{ type: i1.AuthenticationService }, { type: i2.DatePipe }]; }, propDecorators: { headers: [{
|
|
106
|
+
args: [{ selector: 'se-header', template: "<div *ngIf=\"!isHeaderHidden && headers\" class=\"card sticky header-component\">\n <div class=\"header-list p-1 flex\">\n <div\n [class]=\"'md:col-' + headerField.column + ' sm:col-6 col-12 py-0'\"\n class=\"header-list-item section-wrapper-in-header\"\n *ngFor=\"let headerField of headers.fields\"\n >\n <div [ngSwitch]=\"headerField.control\">\n <!-- For Dropdown -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.DROPDOWN\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <p-dropdown\n [placeholder]=\"headerField.label\"\n [options]=\"headerField.data\"\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-dropdown>\n </div>\n </span>\n \n <!-- For label -->\n <span *ngIf=\"!headerField.hidden\">\n <div\n class=\"flex flex-wrap section-wrapper-in-header align-items-center\"\n *ngSwitchCase=\"dynamicCase.LABEL\"\n >\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <!-- for value -->\n <Span *ngIf=\"!headerField.format\">\n <label for=\"\">{{ headerField.value }}</label> \n </Span>\n\n <!-- for currency -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'currency'\n \"\n >\n <label>{{\n headerField.value\n | currency\n : (headerField.format.formatParams &&\n headerField.format.formatParams.currency\n ? headerField.format.formatParams.currency\n : 'USD')\n }}</label>\n </span>\n\n <!-- for percent -->\n <span *ngIf=\"headerField.format && headerField.format.type === 'percent'\">\n <label >{{ headerField.value }}%</label>\n </span>\n\n <!-- for decimal -->\n <span\n *ngIf=\"\n headerField.format && headerField.format.type === 'decimal'\n \"\n >\n <label>{{\n headerField.value\n | number\n : (headerField.format.formatParams &&\n headerField.format.formatParams.digitsInfo\n ? '2.' +\n headerField.format.formatParams.digitsInfo +\n '-8'\n : '2.2-8')\n }}</label>\n </span>\n </div>\n </span>\n\n <!-- Text Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div *ngSwitchCase=\"dynamicCase.INPUT\">\n <b\n ><label for=\"\">{{ headerField.label }}</label></b\n >\n <input\n class=\"mr-2 form-control\"\n type=\"text\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Number Input -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.NUMERIC\">\n <label>{{ headerField.label }}</label>\n <input\n class=\"flex-grow-1 mr-2 form-control\"\n type=\"number\"\n pInputText\n [(ngModel)]=\"headerField.value\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n />\n </div>\n </span>\n\n <!-- Checkbox -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CHECKBOX\">\n <label>{{ headerField.label }}</label>\n <p-checkbox\n class=\"flex align-items-center\"\n [(ngModel)]=\"headerField.value\"\n binary=\"true\"\n ></p-checkbox>\n </div>\n </span>\n\n <!-- hyperLink -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.HYPERLINK\">\n <div *ngIf=\"headerField.hyperlink\">\n <a tabindex=\"-1\" [href]=\"headerField.hyperlink?.link\" [target]=\"headerField.hyperlink?.target ? headerField.hyperlink?.target : '_blank'\"\n data-title-element=\"self\">\n {{ headerField.label }}\n </a>\n </div>\n </div>\n </span>\n\n <!-- Calendar -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.CALENDAR\">\n <label>{{ headerField.label }}</label>\n <p-calendar\n class=\"flex-grow-1 mr-2\"\n [placeholder]=\"headerField.label\"\n [showButtonBar]=\"!headerField.timeOnly\"\n [(ngModel)]=\"headerField.value\"\n hourFormat=\"12\"\n dataType=\"string\"\n [timeOnly]=\"headerField.timeOnly\"\n [showTime]=\"headerField.showTime\"\n [dateFormat]=\"headerField.format ? headerField.format.dateType : 'mm/dd/yy'\"\n >\n </p-calendar>\n </div>\n </span>\n\n <!-- Multi-select -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.MULTISELECT\">\n <label>{{ headerField.label }}</label>\n <p-multiSelect\n [(ngModel)]=\"headerField.value\"\n [options]=\"headerField.data\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n >\n </p-multiSelect>\n </div>\n </span>\n\n <!-- Button -->\n <span *ngIf=\"!headerField.hidden\">\n <div class=\"col-12 p-0\" *ngSwitchCase=\"dynamicCase.BUTTON\">\n <button\n pButton\n pRipple\n type=\"button\"\n label=\"{{ headerField.label }}\"\n class=\"{{ headerField.class }}\"\n (click)=\"headerField.onClick ? headerField.onClick() : ''\"\n ></button>\n </div>\n </span>\n </div>\n </div>\n </div>\n</div>\n", styles: [".header-list-item:after{content:\"\"}.header-list-item:last-child:after{display:none}.card.sticky{position:sticky;z-index:1;top:0}\n"] }]
|
|
107
|
+
}], ctorParameters: function () { return [{ type: i1.AuthenticationService }, { type: i2.DatePipe }, { type: i3.HyperlinkService }]; }, propDecorators: { headers: [{
|
|
98
108
|
type: Input
|
|
99
109
|
}] } });
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvaGVhZGVyL2hlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2hlYWRlci9oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUS9FLE1BQU0sT0FBTyxlQUFlO0lBTzFCLFlBQW9CLFdBQWtDLEVBQVMsUUFBa0I7UUFBN0QsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUpqRixnQkFBVyxHQUFHLFlBQVksQ0FBQztRQUMzQixVQUFLLEdBQWEsRUFBRSxDQUFDO1FBQ3JCLG1CQUFjLEdBQVksS0FBSyxDQUFDO0lBRW9ELENBQUM7SUFFckYsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUM7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hD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dEIsWUFBWSxFQUFFLENBQUM7aUJBQ2hCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxLQUFLLFlBQVksQ0FBQztTQUN2RTtJQUNILENBQUM7aUlBakZVLGVBQWU7cUhBQWYsZUFBZSxzR0NaNUIsdXJNQWdMQTs7MkZEcEthLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsV0FBVzttSUFLWixPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUhlYWRlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9oZWFkZXIubW9kZWwnO1xuaW1wb3J0IHsgRUZvcm1Db250cm9sIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFUGVybWlzc2lvblR5cGUsIElQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3VzZXItaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBoZWFkZXJzOiBJSGVhZGVyO1xuXG4gIGR5bmFtaWNDYXNlID0gRUZvcm1Db250cm9sO1xuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNIZWFkZXJIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsIHB1YmxpYyBkYXRlcGlwZTogRGF0ZVBpcGUpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG4gICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGZvcm1cbiAgICB0aGlzLmFwcGx5VXNlclBlcm1pc3Npb25zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZih0aGlzLmhlYWRlcnMgJiYgdGhpcy5oZWFkZXJzLmZpZWxkcyl7XG4gICAgICB0aGlzLmhlYWRlcnMuZmllbGRzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgaWYgKCF4LnNob3dUaW1lICYmICF4LnRpbWVPbmx5ICYmIHgudmFsdWU/LnRvU3RyaW5nKCkubWF0Y2goL1swLTldKy1cXHM/L2cpKSB7XG4gICAgICAgICAgeC52YWx1ZSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHgudmFsdWUsICd5eXl5LU1NLWRkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHgudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzonKSAmJiB4LnRpbWVPbmx5KSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB4LnZhbHVlLmluZGV4T2YoJzonKTtcbiAgICAgICAgICBjb25zdCB0aW1lID0geC52YWx1ZS5zdWJzdHJpbmcoaW5kZXggLSAyLCBpbmRleCArIDYpO1xuICAgICAgICAgIHgudmFsdWUgPSB0aW1lO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnNcbiAgYXBwbHlVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuaGVhZGVycykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5oZWFkZXJzLmZpZWxkcy5mb3JFYWNoKChoZWFkZXJGaWVsZCkgPT4ge1xuICAgICAgICBsZXQgcGVybWlzc2lvbnM6IGFueSA9IGhlYWRlckZpZWxkLnBlcm1pc3Npb25zO1xuICAgICAgICBpZiAoIXBlcm1pc3Npb25zKSBwZXJtaXNzaW9ucyA9IHRoaXMuaGVhZGVycy5wZXJtaXNzaW9ucztcbiAgICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdG90YWxGaWVsZHMrKztcblxuICAgICAgICBpZiAoaGVhZGVyRmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzSGVhZGVySGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgKm5nSWY9XCIhaXNIZWFkZXJIaWRkZW4gJiYgaGVhZGVyc1wiIGNsYXNzPVwiY2FyZCBzdGlja3kgaGVhZGVyLWNvbXBvbmVudFwiPlxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWxpc3QgcC0xIGZsZXhcIj5cbiAgICA8ZGl2XG4gICAgICBbY2xhc3NdPVwiJ21kOmNvbC0nICsgaGVhZGVyRmllbGQuY29sdW1uICsgJyBzbTpjb2wtNiBjb2wtMTIgcHktMCdcIlxuICAgICAgY2xhc3M9XCJoZWFkZXItbGlzdC1pdGVtIHNlY3Rpb24td3JhcHBlci1pbi1oZWFkZXJcIlxuICAgICAgKm5nRm9yPVwibGV0IGhlYWRlckZpZWxkIG9mIGhlYWRlcnMuZmllbGRzXCJcbiAgICA+XG4gICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJoZWFkZXJGaWVsZC5jb250cm9sXCI+XG4gICAgICAgIDwhLS0gRm9yIERyb3Bkb3duIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFoZWFkZXJGaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIHNlY3Rpb24td3JhcHBlci1pbi1oZWFkZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5EUk9QRE9XTlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgPjxsYWJlbCBmb3I9XCJcIj57eyBoZWFkZXJGaWVsZC5sYWJlbCB9fTwvbGFiZWw+PC9iXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaGVhZGVyRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJoZWFkZXJGaWVsZC5kYXRhXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJoZWFkZXJGaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoZWFkZXJGaWVsZC5vbkNsaWNrID8gaGVhZGVyRmllbGQub25DbGljaygpIDogJydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIFxuICAgICAgICA8IS0tIEZvciBsYWJlbCAgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgc2VjdGlvbi13cmFwcGVyLWluLWhlYWRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkxBQkVMXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YlxuICAgICAgICAgICAgICA+PGxhYmVsIGZvcj1cIlwiPnt7IGhlYWRlckZpZWxkLmxhYmVsIH19PC9sYWJlbD48L2JcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gZm9yIHZhbHVlIC0tPlxuICAgICAgICAgICAgPFNwYW4gKm5nSWY9XCIhaGVhZGVyRmllbGQuZm9ybWF0XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCI+e3sgaGVhZGVyRmllbGQudmFsdWUgfX08L2xhYmVsPiBcbiAgICAgICAgICA8L1NwYW4+XG5cbiAgICAgICAgICAgICA8IS0tIGZvciBjdXJyZW5jeSAtLT5cbiAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5mb3JtYXQgJiYgaGVhZGVyRmllbGQuZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICBcIlxuICAgICAgICAgICA+XG4gICAgICAgICAgICAgPGxhYmVsPnt7XG4gICAgICAgICAgICAgICBoZWFkZXJGaWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgICB8IGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgOiAoaGVhZGVyRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICA/IGhlYWRlckZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgOiAnVVNEJylcbiAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgIDwhLS0gZm9yIHBlcmNlbnQgLS0+XG4gICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoZWFkZXJGaWVsZC5mb3JtYXQgJiYgaGVhZGVyRmllbGQuZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50J1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgPnt7IGhlYWRlckZpZWxkLnZhbHVlIH19JTwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgPCEtLSBmb3IgZGVjaW1hbCAtLT5cbiAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5mb3JtYXQgJiYgaGVhZGVyRmllbGQuZm9ybWF0LnR5cGUgPT09ICdkZWNpbWFsJ1xuICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICA8bGFiZWw+e3tcbiAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICB8IG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgOiAoaGVhZGVyRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICA/ICcyLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICctOCdcbiAgICAgICAgICAgICAgICAgICAgICAgICA6ICcyLjItOCcpXG4gICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFoZWFkZXJGaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5JTlBVVFwiPlxuICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgPjxsYWJlbCBmb3I9XCJcIj57eyBoZWFkZXJGaWVsZC5sYWJlbCB9fTwvbGFiZWw+PC9iXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJtci0yIGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlckZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhlYWRlckZpZWxkLm9uQ2xpY2sgPyBoZWFkZXJGaWVsZC5vbkNsaWNrKCkgOiAnJ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcC0wXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLk5VTUVSSUNcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyBoZWFkZXJGaWVsZC5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMSBtci0yIGZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGVyRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGVhZGVyRmllbGQub25DbGljayA/IGhlYWRlckZpZWxkLm9uQ2xpY2soKSA6ICcnXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIENoZWNrYm94IC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFoZWFkZXJGaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHAtMFwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DSEVDS0JPWFwiPlxuICAgICAgICAgICAgPGxhYmVsPnt7IGhlYWRlckZpZWxkLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlckZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgYmluYXJ5PVwidHJ1ZVwiXG4gICAgICAgICAgICA+PC9wLWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBDYWxlbmRhciAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVhZGVyRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwLTBcIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0FMRU5EQVJcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyBoZWFkZXJGaWVsZC5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1yLTJcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaGVhZGVyRmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCIhaGVhZGVyRmllbGQudGltZU9ubHlcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlckZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgaG91ckZvcm1hdD1cIjEyXCJcbiAgICAgICAgICAgICAgZGF0YVR5cGU9XCJzdHJpbmdcIlxuICAgICAgICAgICAgICBbdGltZU9ubHldPVwiaGVhZGVyRmllbGQudGltZU9ubHlcIlxuICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaGVhZGVyRmllbGQuc2hvd1RpbWVcIlxuICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJoZWFkZXJGaWVsZC5mb3JtYXQgPyBoZWFkZXJGaWVsZC5mb3JtYXQuZGF0ZVR5cGUgOiAnbW0vZGQveXknXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcC1jYWxlbmRhcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gTXVsdGktc2VsZWN0IC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFoZWFkZXJGaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHAtMFwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5NVUxUSVNFTEVDVFwiPlxuICAgICAgICAgICAgPGxhYmVsPnt7IGhlYWRlckZpZWxkLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGVyRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJoZWFkZXJGaWVsZC5kYXRhXCJcbiAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhlYWRlckZpZWxkLm9uQ2xpY2sgPyBoZWFkZXJGaWVsZC5vbkNsaWNrKCkgOiAnJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVhZGVyRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwLTBcIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQlVUVE9OXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJ7eyBoZWFkZXJGaWVsZC5sYWJlbCB9fVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyRmllbGQuY2xhc3MgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGVhZGVyRmllbGQub25DbGljayA/IGhlYWRlckZpZWxkLm9uQ2xpY2soKSA6ICcnXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvaGVhZGVyL2hlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2hlYWRlci9oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVMvRSxNQUFNLE9BQU8sZUFBZTtJQU8xQixZQUFvQixXQUFrQyxFQUFTLFFBQWtCLEVBQVMsZ0JBQWtDO1FBQXhHLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQUFTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBUyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBSjVILGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBQzNCLFVBQUssR0FBYSxFQUFFLENBQUM7UUFDckIsbUJBQWMsR0FBWSxLQUFLLENBQUM7SUFFK0YsQ0FBQztJQUVoSSxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdDLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1B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SUFBSTtnQ0FDeEMsQ0FBQyxzQkFBc0IsRUFDdkI7Z0NBQ0EsSUFBSSxPQUFPLEVBQUU7b0NBQ1gsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7aUNBQzdCO3FDQUFNO29DQUNMLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2lDQUMzQjs2QkFDRjtpQ0FBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtnQ0FDbkQsSUFBSSxPQUFPLEVBQUU7b0NBQ1gsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO29DQUM5QixXQUFXLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQ0FDN0IsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7aUNBQzVCO3FDQUFNO29DQUNMLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2lDQUM3Qjs2QkFDRjt5QkFDRjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxXQUFXLEVBQUUsQ0FBQztnQkFFZCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7b0JBQ3RCLFlBQVksRUFBRSxDQUFDO2lCQUNoQjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsS0FBSyxZQUFZLENBQUM7U0FDdkU7SUFDSCxDQUFDO2lJQXpGVSxlQUFlO3FIQUFmLGVBQWUsc0dDYjVCLHNzTkE0TEE7OzJGRC9LYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFdBQVc7a0tBS1osT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElIZWFkZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaGVhZGVyLm1vZGVsJztcbmltcG9ydCB7IEVGb3JtQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hlYWRlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGhlYWRlcnM6IElIZWFkZXI7XG5cbiAgZHluYW1pY0Nhc2UgPSBFRm9ybUNvbnRyb2w7XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0hlYWRlckhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSwgcHVibGljIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG4gICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGZvcm1cbiAgICB0aGlzLmFwcGx5VXNlclBlcm1pc3Npb25zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oZWFkZXJzICYmIHRoaXMuaGVhZGVycy5maWVsZHMpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5maWVsZHMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICBpZiAoIXguc2hvd1RpbWUgJiYgIXgudGltZU9ubHkgJiYgeC52YWx1ZT8udG9TdHJpbmcoKS5tYXRjaCgvWzAtOV0rLVxccz8vZykpIHtcbiAgICAgICAgICB4LnZhbHVlID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oeC52YWx1ZSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnOicpICYmIHgudGltZU9ubHkpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHgudmFsdWUuaW5kZXhPZignOicpO1xuICAgICAgICAgIGNvbnN0IHRpbWUgPSB4LnZhbHVlLnN1YnN0cmluZyhpbmRleCAtIDIsIGluZGV4ICsgNik7XG4gICAgICAgICAgeC52YWx1ZSA9IHRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJiB4Lmh5cGVybGluaz8ubGlua0lkKSB7XG4gICAgICAgICAgdGhpcy5oeXBlcmxpbmtTZXJ2aWNlLmJ1aWxkVXJsKHguaHlwZXJsaW5rPy5saW5rSWQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc1swXT8udXJsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlLnNldFVybCh4Py5oeXBlcmxpbms/LnBhcmFtcywgcmVzWzBdKTtcbiAgICAgICAgICAgICAgeC5oeXBlcmxpbmtbJ2xpbmsnXSA9IG9yaWdpbmFsVXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9uc1xuICBhcHBseVVzZXJQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5oZWFkZXJzKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmhlYWRlcnMuZmllbGRzLmZvckVhY2goKGhlYWRlckZpZWxkKSA9PiB7XG4gICAgICAgIGxldCBwZXJtaXNzaW9uczogYW55ID0gaGVhZGVyRmllbGQucGVybWlzc2lvbnM7XG4gICAgICAgIGlmICghcGVybWlzc2lvbnMpIHBlcm1pc3Npb25zID0gdGhpcy5oZWFkZXJzLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0b3RhbEZpZWxkcysrO1xuXG4gICAgICAgIGlmIChoZWFkZXJGaWVsZC5oaWRkZW4pIHtcbiAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNIZWFkZXJIaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiAqbmdJZj1cIiFpc0hlYWRlckhpZGRlbiAmJiBoZWFkZXJzXCIgY2xhc3M9XCJjYXJkIHN0aWNreSBoZWFkZXItY29tcG9uZW50XCI+XG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItbGlzdCBwLTEgZmxleFwiPlxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCInbWQ6Y29sLScgKyBoZWFkZXJGaWVsZC5jb2x1bW4gKyAnIHNtOmNvbC02IGNvbC0xMiBweS0wJ1wiXG4gICAgICBjbGFzcz1cImhlYWRlci1saXN0LWl0ZW0gc2VjdGlvbi13cmFwcGVyLWluLWhlYWRlclwiXG4gICAgICAqbmdGb3I9XCJsZXQgaGVhZGVyRmllbGQgb2YgaGVhZGVycy5maWVsZHNcIlxuICAgID5cbiAgICAgIDxkaXYgW25nU3dpdGNoXT1cImhlYWRlckZpZWxkLmNvbnRyb2xcIj5cbiAgICAgICAgPCEtLSBGb3IgRHJvcGRvd24gLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgc2VjdGlvbi13cmFwcGVyLWluLWhlYWRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkRST1BET1dOXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YlxuICAgICAgICAgICAgICA+PGxhYmVsIGZvcj1cIlwiPnt7IGhlYWRlckZpZWxkLmxhYmVsIH19PC9sYWJlbD48L2JcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJoZWFkZXJGaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImhlYWRlckZpZWxkLmRhdGFcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlckZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhlYWRlckZpZWxkLm9uQ2xpY2sgPyBoZWFkZXJGaWVsZC5vbkNsaWNrKCkgOiAnJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gRm9yIGxhYmVsICAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVhZGVyRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBzZWN0aW9uLXdyYXBwZXItaW4taGVhZGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTEFCRUxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxiXG4gICAgICAgICAgICAgID48bGFiZWwgZm9yPVwiXCI+e3sgaGVhZGVyRmllbGQubGFiZWwgfX08L2xhYmVsPjwvYlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBmb3IgdmFsdWUgLS0+XG4gICAgICAgICAgICA8U3BhbiAqbmdJZj1cIiFoZWFkZXJGaWVsZC5mb3JtYXRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIj57eyBoZWFkZXJGaWVsZC52YWx1ZSB9fTwvbGFiZWw+IFxuICAgICAgICAgIDwvU3Bhbj5cblxuICAgICAgICAgICAgIDwhLS0gZm9yIGN1cnJlbmN5IC0tPlxuICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgIGhlYWRlckZpZWxkLmZvcm1hdCAmJiBoZWFkZXJGaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgIFwiXG4gICAgICAgICAgID5cbiAgICAgICAgICAgICA8bGFiZWw+e3tcbiAgICAgICAgICAgICAgIGhlYWRlckZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgIHwgY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICA6IChoZWFkZXJGaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICA6ICdVU0QnKVxuICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgPCEtLSBmb3IgcGVyY2VudCAtLT5cbiAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhlYWRlckZpZWxkLmZvcm1hdCAmJiBoZWFkZXJGaWVsZC5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCA+e3sgaGVhZGVyRmllbGQudmFsdWUgfX0lPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICA8IS0tIGZvciBkZWNpbWFsIC0tPlxuICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkLmZvcm1hdCAmJiBoZWFkZXJGaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2RlY2ltYWwnXG4gICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgIDxsYWJlbD57e1xuICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgIHwgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICA6IChoZWFkZXJGaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgID8gJzIuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm8gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgJy04J1xuICAgICAgICAgICAgICAgICAgICAgICAgIDogJzIuMi04JylcbiAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIFRleHQgSW5wdXQgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLklOUFVUXCI+XG4gICAgICAgICAgICA8YlxuICAgICAgICAgICAgICA+PGxhYmVsIGZvcj1cIlwiPnt7IGhlYWRlckZpZWxkLmxhYmVsIH19PC9sYWJlbD48L2JcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cIm1yLTIgZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGVyRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGVhZGVyRmllbGQub25DbGljayA/IGhlYWRlckZpZWxkLm9uQ2xpY2soKSA6ICcnXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIE51bWJlciBJbnB1dCAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVhZGVyRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwLTBcIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTlVNRVJJQ1wiPlxuICAgICAgICAgICAgPGxhYmVsPnt7IGhlYWRlckZpZWxkLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1yLTIgZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJoZWFkZXJGaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoZWFkZXJGaWVsZC5vbkNsaWNrID8gaGVhZGVyRmllbGQub25DbGljaygpIDogJydcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcC0wXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkNIRUNLQk9YXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgaGVhZGVyRmllbGQubGFiZWwgfX08L2xhYmVsPlxuICAgICAgICAgICAgPHAtY2hlY2tib3hcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGVhZGVyRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICBiaW5hcnk9XCJ0cnVlXCJcbiAgICAgICAgICAgID48L3AtY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgPCEtLSBoeXBlckxpbmsgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcC0wXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkhZUEVSTElOS1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlckZpZWxkLmh5cGVybGlua1wiPlxuICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2hyZWZdPVwiaGVhZGVyRmllbGQuaHlwZXJsaW5rPy5saW5rXCIgW3RhcmdldF09XCJoZWFkZXJGaWVsZC5oeXBlcmxpbms/LnRhcmdldCA/IGhlYWRlckZpZWxkLmh5cGVybGluaz8udGFyZ2V0IDogJ19ibGFuaydcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICAgICAgICB7eyBoZWFkZXJGaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gQ2FsZW5kYXIgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcC0wXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkNBTEVOREFSXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgaGVhZGVyRmllbGQubGFiZWwgfX08L2xhYmVsPlxuICAgICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMSBtci0yXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImhlYWRlckZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwiIWhlYWRlckZpZWxkLnRpbWVPbmx5XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJoZWFkZXJGaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgIGhvdXJGb3JtYXQ9XCIxMlwiXG4gICAgICAgICAgICAgIGRhdGFUeXBlPVwic3RyaW5nXCJcbiAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImhlYWRlckZpZWxkLnRpbWVPbmx5XCJcbiAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cImhlYWRlckZpZWxkLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiaGVhZGVyRmllbGQuZm9ybWF0ID8gaGVhZGVyRmllbGQuZm9ybWF0LmRhdGVUeXBlIDogJ21tL2RkL3l5J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGVhZGVyRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwLTBcIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTVVMVElTRUxFQ1RcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyBoZWFkZXJGaWVsZC5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhlYWRlckZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiaGVhZGVyRmllbGQuZGF0YVwiXG4gICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoZWFkZXJGaWVsZC5vbkNsaWNrID8gaGVhZGVyRmllbGQub25DbGljaygpIDogJydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBCdXR0b24gLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWhlYWRlckZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcC0wXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkJVVFRPTlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGxhYmVsPVwie3sgaGVhZGVyRmllbGQubGFiZWwgfX1cIlxuICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlckZpZWxkLmNsYXNzIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhlYWRlckZpZWxkLm9uQ2xpY2sgPyBoZWFkZXJGaWVsZC5vbkNsaWNrKCkgOiAnJ1wiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|