UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

212 lines 27 kB
import { FORM_MODULE, SelectModule, TooltipDirective, } from '@alauda/ui'; import { AsyncPipe, NgForOf, NgIf, NgTemplateOutlet } from '@angular/common'; import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, forwardRef, TemplateRef, ChangeDetectorRef, } from '@angular/core'; import { FormsModule, NG_VALUE_ACCESSOR, } from '@angular/forms'; import { BehaviorSubject } from 'rxjs'; import { PurePipe, noop } from '../../core/public-api'; import { EffectDirectiveModule } from '../../effect-directive/module'; import { TranslateModule } from '../../translate/public-api'; import { SelectPrefixLabelDirective } from '../../widget/select-prefix-label/directive'; import { DEFAULT_LIMIT_COUNT, ALL_VALUE, checkValueExit } from './util'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "../../translate/translate.pipe"; import * as i3 from "@alauda/ui"; import * as i4 from "../../effect-directive/e2e-attribute-binding.directive"; import * as i5 from "../../effect-directive/validators.directive"; const _c0 = a0 => ({ count: a0 }); const _c1 = a0 => ({ $implicit: a0 }); const _c2 = a0 => ({ resource: a0 }); const _c3 = a0 => ({ resource: a0, inOption: true }); function ResourceMultiSelectComponent_aui_option_group_3_ng_container_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainer(0); } } function ResourceMultiSelectComponent_aui_option_group_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "aui-option-group")(1, "aui-option", 3); i0.ɵɵtemplate(2, ResourceMultiSelectComponent_aui_option_group_3_ng_container_2_Template, 1, 0, "ng-container", 4); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("value", ctx_r0.ALL_VALUE)("label", ctx_r0.allOptionTemplate); i0.ɵɵadvance(); i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.allOptionTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(4, _c1, ctx_r0.allOptionTemplateContext)); } } function ResourceMultiSelectComponent_aui_option_5_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "aui-option", 5); i0.ɵɵpipe(1, "async"); i0.ɵɵpipe(2, "pure"); i0.ɵɵpipe(3, "translate"); i0.ɵɵelementContainer(4, 6); i0.ɵɵelementEnd(); } if (rf & 2) { const option_r2 = ctx.$implicit; const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵproperty("value", option_r2)("label", ctx_r0.optionTemplate)("disabled", i0.ɵɵpipeBind3(2, 10, option_r2, ctx_r0.disableOption, i0.ɵɵpipeBind1(1, 8, ctx_r0.values$$)))("auiTooltip", i0.ɵɵpipeBind2(3, 14, "multi_select_limit", i0.ɵɵpureFunction1(17, _c0, ctx_r0.limit)))("auiTooltipDisabled", !ctx_r0.countLimited ? true : !ctx_r0.isPartial)("labelContext", i0.ɵɵpureFunction1(19, _c2, option_r2)); i0.ɵɵadvance(4); i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.optionTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(21, _c3, option_r2)); } } export class ResourceMultiSelectComponent { constructor(cdr) { this.cdr = cdr; this.limit = DEFAULT_LIMIT_COUNT; this.disabled = false; this.required = false; this.readonly = false; this.placeholder = ''; this.countLimited = true; this.filter = (filter, option) => option.value?.includes(filter); this.trackBy = (val) => val; this.allowEmpty = false; this.valueChange = new EventEmitter(); this.values$$ = new BehaviorSubject([]); this.values = []; this.isSelectAllOption = false; this.isPartial = false; this.ALL_VALUE = ALL_VALUE; this.onChange = noop; this.onTouched = noop; this.disableOption = (checkedValue, values) => { this.isPartial = false; if (!checkedValue) { return false; } if (this.isSelectAllOption) { return true; } // 如果不限制个数直接返回 false if (!this.countLimited) { return false; } if (values?.length === this.limit && values?.length < this.list?.length) { this.isPartial = true; return !checkValueExit(checkedValue, values); } return false; }; this.filterFn = (filter, option) => { const value = option.value; if (value === ALL_VALUE) { return true; } return this.filter?.(filter, option); }; this.trackByFn = (value) => { if (value === ALL_VALUE) { return ALL_VALUE; } return this.trackBy?.(value); }; } writeValue(values) { this.values$$.next(values); this.isSelectAllOption = checkValueExit(ALL_VALUE, values); this.cdr.markForCheck(); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } onValueChange(values) { this.isSelectAllOption = checkValueExit(ALL_VALUE, values); const currentValue = this.isSelectAllOption ? [ALL_VALUE] : values; this.values$$.next(currentValue); this.valueChange.emit(currentValue); this.onChange(currentValue); this.onTouched(); } static { this.ɵfac = function ResourceMultiSelectComponent_Factory(t) { return new (t || ResourceMultiSelectComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceMultiSelectComponent, selectors: [["acl-resource-multi-select"]], inputs: { list: "list", limit: "limit", prefixLabel: "prefixLabel", disabled: "disabled", required: "required", readonly: "readonly", allOptionTemplate: "allOptionTemplate", allOptionTemplateContext: "allOptionTemplateContext", optionTemplate: "optionTemplate", placeholder: "placeholder", countLimited: "countLimited", filter: "filter", trackBy: "trackBy", allowEmpty: "allowEmpty" }, outputs: { valueChange: "valueChange" }, standalone: true, features: [i0.ɵɵProvidersFeature([ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ResourceMultiSelectComponent), multi: true, }, ]), i0.ɵɵStandaloneFeature], decls: 9, vars: 23, consts: [["auiFormItemControl", "", 3, "ngModelChange", "ngModel", "filterFn", "trackFn", "aclPrefixLabel", "placeholder", "maxRowCount", "disabled", "required", "readonly", "filterable", "clearable"], [4, "ngIf"], [3, "value", "label", "disabled", "auiTooltip", "auiTooltipDisabled", "labelContext", 4, "ngFor", "ngForOf"], [3, "value", "label"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [3, "value", "label", "disabled", "auiTooltip", "auiTooltipDisabled", "labelContext"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function ResourceMultiSelectComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "aui-multi-select", 0); i0.ɵɵpipe(1, "async"); i0.ɵɵpipe(2, "translate"); i0.ɵɵlistener("ngModelChange", function ResourceMultiSelectComponent_Template_aui_multi_select_ngModelChange_0_listener($event) { return ctx.onValueChange($event); }); i0.ɵɵtemplate(3, ResourceMultiSelectComponent_aui_option_group_3_Template, 3, 6, "aui-option-group", 1); i0.ɵɵelementStart(4, "aui-option-group"); i0.ɵɵtemplate(5, ResourceMultiSelectComponent_aui_option_5_Template, 5, 23, "aui-option", 2); i0.ɵɵelementEnd(); i0.ɵɵelementStart(6, "aui-option-placeholder"); i0.ɵɵtext(7); i0.ɵɵpipe(8, "translate"); i0.ɵɵelementEnd()(); } if (rf & 2) { i0.ɵɵproperty("ngModel", i0.ɵɵpipeBind1(1, 14, ctx.values$$))("filterFn", ctx.filterFn)("trackFn", ctx.trackByFn)("aclPrefixLabel", ctx.prefixLabel)("placeholder", ctx.placeholder || ctx.countLimited ? i0.ɵɵpipeBind2(2, 16, "multi_select_limit", i0.ɵɵpureFunction1(21, _c0, ctx.limit)) : "")("maxRowCount", 6)("disabled", ctx.disabled)("required", ctx.required)("readonly", ctx.readonly)("filterable", true)("clearable", true); i0.ɵɵadvance(3); i0.ɵɵproperty("ngIf", ctx.allOptionTemplate && (ctx.list == null ? null : ctx.list.length) || ctx.allowEmpty); i0.ɵɵadvance(2); i0.ɵɵproperty("ngForOf", ctx.list); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 19, "no_data"), " "); } }, dependencies: [FormsModule, i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, AsyncPipe, NgIf, TranslateModule, i2.TranslatePipe, SelectModule, i3.OptionComponent, i3.OptionGroupComponent, i3.OptionPlaceholderComponent, i3.MultiSelectComponent, NgForOf, NgTemplateOutlet, PurePipe, TooltipDirective, i3.FormItemControlDirective, SelectPrefixLabelDirective, EffectDirectiveModule, i4.E2eAttributeBindingDirective, i5.ValidatorsDirective], encapsulation: 2, changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceMultiSelectComponent, [{ type: Component, args: [{ selector: 'acl-resource-multi-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ResourceMultiSelectComponent), multi: true, }, ], standalone: true, imports: [ FormsModule, AsyncPipe, NgIf, TranslateModule, SelectModule, NgForOf, NgTemplateOutlet, PurePipe, TooltipDirective, ...FORM_MODULE, SelectPrefixLabelDirective, EffectDirectiveModule, ], template: "<aui-multi-select\n [ngModel]=\"values$$ | async\"\n auiFormItemControl\n [filterFn]=\"filterFn\"\n [trackFn]=\"trackByFn\"\n (ngModelChange)=\"onValueChange($event)\"\n [aclPrefixLabel]=\"prefixLabel\"\n [placeholder]=\"\n placeholder || countLimited\n ? ('multi_select_limit' | translate: { count: limit })\n : ''\n \"\n [maxRowCount]=\"6\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [filterable]=\"true\"\n [clearable]=\"true\"\n>\n <aui-option-group *ngIf=\"(allOptionTemplate && list?.length) || allowEmpty\">\n <aui-option\n [value]=\"ALL_VALUE\"\n [label]=\"allOptionTemplate\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n allOptionTemplate;\n context: { $implicit: allOptionTemplateContext }\n \"\n ></ng-container>\n </aui-option>\n </aui-option-group>\n\n <aui-option-group>\n <aui-option\n *ngFor=\"let option of list\"\n [value]=\"option\"\n [label]=\"optionTemplate\"\n [disabled]=\"option | pure: disableOption:(values$$ | async)\"\n [auiTooltip]=\"'multi_select_limit' | translate: { count: limit }\"\n [auiTooltipDisabled]=\"!countLimited ? true : !isPartial\"\n [labelContext]=\"{ resource: option }\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ resource: option, inOption: true }\"\n ></ng-container>\n </aui-option>\n </aui-option-group>\n <aui-option-placeholder>\n {{ 'no_data' | translate }}\n </aui-option-placeholder>\n</aui-multi-select>\n" }] }], () => [{ type: i0.ChangeDetectorRef }], { list: [{ type: Input }], limit: [{ type: Input }], prefixLabel: [{ type: Input }], disabled: [{ type: Input }], required: [{ type: Input }], readonly: [{ type: Input }], allOptionTemplate: [{ type: Input }], allOptionTemplateContext: [{ type: Input }], optionTemplate: [{ type: Input }], placeholder: [{ type: Input }], countLimited: [{ type: Input }], filter: [{ type: Input }], trackBy: [{ type: Input }], allowEmpty: [{ type: Input }], valueChange: [{ type: Output }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceMultiSelectComponent, { className: "ResourceMultiSelectComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3dpZGdldC9yZXNvdXJjZS1tdWx0aS1zZWxlY3QvY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3dpZGdldC9yZXNvdXJjZS1tdWx0aS1zZWxlY3QvdGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUdYLFlBQVksRUFDWixnQkFBZ0IsR0FFakIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLEVBQWEsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7SUNQbEUsd0JBS2dCOzs7SUFUbEIsQUFERix3Q0FBNEUsb0JBSXpFO0lBQ0Ms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UTtrQkFEUCxLQUFLO1lBSU4sUUFBUTtrQkFEUCxLQUFLO1lBSU4saUJBQWlCO2tCQURoQixLQUFLO1lBSU4sd0JBQXdCO2tCQUR2QixLQUFLO1lBSU4sY0FBYztrQkFEYixLQUFLO1lBSU4sV0FBVztrQkFEVixLQUFLO1lBSU4sWUFBWTtrQkFEWCxLQUFLO1lBSU4sTUFBTTtrQkFETCxLQUFLO1lBT04sT0FBTztrQkFETixLQUFLO1lBSU4sVUFBVTtrQkFEVCxLQUFLO1lBSU4sV0FBVztrQkFEVixNQUFNOztrRkE5Q0ksNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRk9STV9NT0RVTEUsXG4gIE9wdGlvbkZpbHRlckZuLFxuICBTZWxlY3RGaWx0ZXJPcHRpb24sXG4gIFNlbGVjdE1vZHVsZSxcbiAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgVHJhY2tGbixcbn0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yT2YsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1zTW9kdWxlLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFB1cmVQaXBlLCBTdHJpbmdNYXAsIG5vb3AgfSBmcm9tICcuLi8uLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgRWZmZWN0RGlyZWN0aXZlTW9kdWxlIH0gZnJvbSAnLi4vLi4vZWZmZWN0LWRpcmVjdGl2ZS9tb2R1bGUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgU2VsZWN0UHJlZml4TGFiZWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi93aWRnZXQvc2VsZWN0LXByZWZpeC1sYWJlbC9kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBERUZBVUxUX0xJTUlUX0NPVU5ULCBBTExfVkFMVUUsIGNoZWNrVmFsdWVFeGl0IH0gZnJvbSAnLi91dGlsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLXJlc291cmNlLW11bHRpLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmVzb3VyY2VNdWx0aVNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIE5nSWYsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBOZ0Zvck9mLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgUHVyZVBpcGUsXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICAuLi5GT1JNX01PRFVMRSxcbiAgICBTZWxlY3RQcmVmaXhMYWJlbERpcmVjdGl2ZSxcbiAgICBFZmZlY3REaXJlY3RpdmVNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlTXVsdGlTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpXG4gIGxpc3Q6IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIGxpbWl0OiBudW1iZXIgPSBERUZBVUxUX0xJTUlUX0NPVU5UO1xuXG4gIEBJbnB1dCgpXG4gIHByZWZpeExhYmVsOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYWxsT3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KClcbiAgYWxsT3B0aW9uVGVtcGxhdGVDb250ZXh0OiBTdHJpbmdNYXA7XG5cbiAgQElucHV0KClcbiAgb3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXIgPSAnJztcblxuICBASW5wdXQoKVxuICBjb3VudExpbWl0ZWQgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGZpbHRlcjogT3B0aW9uRmlsdGVyRm48c3RyaW5nPiA9IChcbiAgICBmaWx0ZXI6IHN0cmluZyxcbiAgICBvcHRpb246IFNlbGVjdEZpbHRlck9wdGlvbjxzdHJpbmc+LFxuICApID0+IG9wdGlvbi52YWx1ZT8uaW5jbHVkZXMoZmlsdGVyKTtcblxuICBASW5wdXQoKVxuICB0cmFja0J5OiBUcmFja0ZuPHN0cmluZz4gPSAodmFsOiBzdHJpbmcpID0+IHZhbDtcblxuICBASW5wdXQoKVxuICBhbGxvd0VtcHR5ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICB2YWx1ZXMkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc1NlbGVjdEFsbE9wdGlvbiA9IGZhbHNlO1xuICBpc1BhcnRpYWwgPSBmYWxzZTtcbiAgQUxMX1ZBTFVFID0gQUxMX1ZBTFVFO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICB3cml0ZVZhbHVlKHZhbHVlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnZhbHVlcyQkLm5leHQodmFsdWVzKTtcbiAgICB0aGlzLmlzU2VsZWN0QWxsT3B0aW9uID0gY2hlY2tWYWx1ZUV4aXQoQUxMX1ZBTFVFIGFzIHN0cmluZywgdmFsdWVzKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ2hhbmdlID0gbm9vcDtcblxuICBvblRvdWNoZWQgPSBub29wO1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBkaXNhYmxlT3B0aW9uID0gKGNoZWNrZWRWYWx1ZTogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKSA9PiB7XG4gICAgdGhpcy5pc1BhcnRpYWwgPSBmYWxzZTtcbiAgICBpZiAoIWNoZWNrZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2VsZWN0QWxsT3B0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8g5aaC5p6c5LiN6ZmQ5Yi25Liq5pWw55u05o6l6L+U5ZueIGZhbHNlXG4gICAgaWYgKCF0aGlzLmNvdW50TGltaXRlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmFsdWVzPy5sZW5ndGggPT09IHRoaXMubGltaXQgJiYgdmFsdWVzPy5sZW5ndGggPCB0aGlzLmxpc3Q/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5pc1BhcnRpYWwgPSB0cnVlO1xuICAgICAgcmV0dXJuICFjaGVja1ZhbHVlRXhpdChjaGVja2VkVmFsdWUsIHZhbHVlcyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBvblZhbHVlQ2hhbmdlKHZhbHVlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmlzU2VsZWN0QWxsT3B0aW9uID0gY2hlY2tWYWx1ZUV4aXQoQUxMX1ZBTFVFIGFzIHN0cmluZywgdmFsdWVzKTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmlzU2VsZWN0QWxsT3B0aW9uXG4gICAgICA/IFtBTExfVkFMVUUgYXMgc3RyaW5nXVxuICAgICAgOiB2YWx1ZXM7XG4gICAgdGhpcy52YWx1ZXMkJC5uZXh0KGN1cnJlbnRWYWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGN1cnJlbnRWYWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZShjdXJyZW50VmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBmaWx0ZXJGbiA9IChmaWx0ZXI6IHN0cmluZywgb3B0aW9uOiBTZWxlY3RGaWx0ZXJPcHRpb248c3RyaW5nPikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gQUxMX1ZBTFVFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyPy4oZmlsdGVyLCBvcHRpb24pO1xuICB9O1xuXG4gIHRyYWNrQnlGbiA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBBTExfVkFMVUUpIHtcbiAgICAgIHJldHVybiBBTExfVkFMVUU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYWNrQnk/Lih2YWx1ZSk7XG4gIH07XG59XG4iLCI8YXVpLW11bHRpLXNlbGVjdFxuICBbbmdNb2RlbF09XCJ2YWx1ZXMkJCB8IGFzeW5jXCJcbiAgYXVpRm9ybUl0ZW1Db250cm9sXG4gIFtmaWx0ZXJGbl09XCJmaWx0ZXJGblwiXG4gIFt0cmFja0ZuXT1cInRyYWNrQnlGblwiXG4gIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gIFthY2xQcmVmaXhMYWJlbF09XCJwcmVmaXhMYWJlbFwiXG4gIFtwbGFjZWhvbGRlcl09XCJcbiAgICBwbGFjZWhvbGRlciB8fCBjb3VudExpbWl0ZWRcbiAgICAgID8gKCdtdWx0aV9zZWxlY3RfbGltaXQnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBsaW1pdCB9KVxuICAgICAgOiAnJ1xuICBcIlxuICBbbWF4Um93Q291bnRdPVwiNlwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxuICBbY2xlYXJhYmxlXT1cInRydWVcIlxuPlxuICA8YXVpLW9wdGlvbi1ncm91cCAqbmdJZj1cIihhbGxPcHRpb25UZW1wbGF0ZSAmJiBsaXN0Py5sZW5ndGgpIHx8IGFsbG93RW1wdHlcIj5cbiAgICA8YXVpLW9wdGlvblxuICAgICAgW3ZhbHVlXT1cIkFMTF9WQUxVRVwiXG4gICAgICBbbGFiZWxdPVwiYWxsT3B0aW9uVGVtcGxhdGVcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBhbGxPcHRpb25UZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogYWxsT3B0aW9uVGVtcGxhdGVDb250ZXh0IH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2F1aS1vcHRpb24+XG4gIDwvYXVpLW9wdGlvbi1ncm91cD5cblxuICA8YXVpLW9wdGlvbi1ncm91cD5cbiAgICA8YXVpLW9wdGlvblxuICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBsaXN0XCJcbiAgICAgIFt2YWx1ZV09XCJvcHRpb25cIlxuICAgICAgW2xhYmVsXT1cIm9wdGlvblRlbXBsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24gfCBwdXJlOiBkaXNhYmxlT3B0aW9uOih2YWx1ZXMkJCB8IGFzeW5jKVwiXG4gICAgICBbYXVpVG9vbHRpcF09XCInbXVsdGlfc2VsZWN0X2xpbWl0JyB8IHRyYW5zbGF0ZTogeyBjb3VudDogbGltaXQgfVwiXG4gICAgICBbYXVpVG9vbHRpcERpc2FibGVkXT1cIiFjb3VudExpbWl0ZWQgPyB0cnVlIDogIWlzUGFydGlhbFwiXG4gICAgICBbbGFiZWxDb250ZXh0XT1cInsgcmVzb3VyY2U6IG9wdGlvbiB9XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcmVzb3VyY2U6IG9wdGlvbiwgaW5PcHRpb246IHRydWUgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9hdWktb3B0aW9uPlxuICA8L2F1aS1vcHRpb24tZ3JvdXA+XG4gIDxhdWktb3B0aW9uLXBsYWNlaG9sZGVyPlxuICAgIHt7ICdub19kYXRhJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2F1aS1vcHRpb24tcGxhY2Vob2xkZXI+XG48L2F1aS1tdWx0aS1zZWxlY3Q+XG4iXX0=