ngx-tethys 16.1.6 → 16.1.7

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [16.1.7](https://github.com/atinc/ngx-tethys/compare/16.1.6...16.1.7) (2023-11-02)
6
+
7
+
8
+ ### Features
9
+
10
+ * **cascader:** search and select all nodes when isOnlySelectLeaf is false #INFR-10101 ([#2873](https://github.com/atinc/ngx-tethys/issues/2873)) ([f0d6751](https://github.com/atinc/ngx-tethys/commit/f0d67511309a092e9d7364009c9082d471e58517)), closes [#INFR-10101](https://github.com/atinc/ngx-tethys/issues/INFR-10101)
11
+ * **select:** #INFR-10094 dispatch toggle select panel not close when thyShowSearch is true ([#2872](https://github.com/atinc/ngx-tethys/issues/2872)) ([10c2ec1](https://github.com/atinc/ngx-tethys/commit/10c2ec19d8d6ff0024283d8a4f6c3a243eac717b))
12
+
13
+
14
+
5
15
  ## [16.1.6](https://github.com/atinc/ngx-tethys/compare/16.2.0-next...16.1.6) (2023-10-27)
6
16
 
7
17
 
@@ -11,6 +11,7 @@ export declare class ThyCascaderOptionComponent implements OnInit {
11
11
  class: string;
12
12
  item: boolean;
13
13
  active: boolean;
14
+ selected: boolean;
14
15
  get disabled(): boolean;
15
16
  get expand(): boolean;
16
17
  labelProperty: string;
@@ -19,5 +20,5 @@ export declare class ThyCascaderOptionComponent implements OnInit {
19
20
  ngOnInit(): void;
20
21
  toggleOption(value: boolean): void;
21
22
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyCascaderOptionComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderOptionComponent, "[thy-cascader-option]", never, { "option": { "alias": "option"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "isOnlySelectLeaf": { "alias": "isOnlySelectLeaf"; "required": false; }; "active": { "alias": "active"; "required": false; }; "labelProperty": { "alias": "labelProperty"; "required": false; }; }, { "toggleSelectChange": "toggleSelectChange"; }, never, never, true, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderOptionComponent, "[thy-cascader-option]", never, { "option": { "alias": "option"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "isOnlySelectLeaf": { "alias": "isOnlySelectLeaf"; "required": false; }; "active": { "alias": "active"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "labelProperty": { "alias": "labelProperty"; "required": false; }; }, { "toggleSelectChange": "toggleSelectChange"; }, never, never, true, never>;
23
24
  }
@@ -114,7 +114,8 @@ export declare class ThyCascaderComponent extends TabIndexDisabledControlValueAc
114
114
  */
115
115
  thyMaxTagCount: number;
116
116
  /**
117
- * @private 当多选时是否只能选择叶子项, 暂无实现
117
+ * 是否仅允许选择叶子项
118
+ * @default true
118
119
  */
119
120
  thyIsOnlySelectLeaf: boolean;
120
121
  /**
@@ -150,6 +151,10 @@ export declare class ThyCascaderComponent extends TabIndexDisabledControlValueAc
150
151
  * 清空选项时触发
151
152
  */
152
153
  thyClear: EventEmitter<void>;
154
+ /**
155
+ * 下拉选项展开和折叠状态事件
156
+ */
157
+ thyExpandStatusChange: EventEmitter<boolean>;
153
158
  cascaderOptions: QueryList<ElementRef>;
154
159
  cascaderOptionContainers: QueryList<ElementRef>;
155
160
  cdkConnectedOverlay: CdkConnectedOverlay;
@@ -196,6 +201,8 @@ export declare class ThyCascaderComponent extends TabIndexDisabledControlValueAc
196
201
  * 会导致恢复级联状态再变为搜索状态
197
202
  */
198
203
  private isSelectingSearchState;
204
+ private flattenOptions;
205
+ private leafNodes;
199
206
  ngOnInit(): void;
200
207
  private initSelectionModel;
201
208
  private initPosition;
@@ -211,6 +218,7 @@ export declare class ThyCascaderComponent extends TabIndexDisabledControlValueAc
211
218
  getOptionLabel(option: ThyCascaderOption): any;
212
219
  getOptionValue(option: ThyCascaderOption): any;
213
220
  isActivatedOption(option: ThyCascaderOption, index: number): boolean;
221
+ isSelectedOption(option: ThyCascaderOption, index: number): boolean;
214
222
  attached(): void;
215
223
  private scrollActiveElementIntoView;
216
224
  private findOption;
@@ -230,7 +238,7 @@ export declare class ThyCascaderComponent extends TabIndexDisabledControlValueAc
230
238
  private isHoverExpandTriggerAction;
231
239
  toggleClick($event: Event): void;
232
240
  toggleHover($event: Event): void;
233
- clickOption(option: ThyCascaderOption, index: number, event: Event): void;
241
+ clickOption(option: ThyCascaderOption, index: number, event: Event | boolean): void;
234
242
  mouseoverOption(option: ThyCascaderOption, index: number, event: Event): void;
235
243
  mouseleaveMenu(event: Event): void;
236
244
  onBlur(event?: FocusEvent): void;
@@ -255,10 +263,12 @@ export declare class ThyCascaderComponent extends TabIndexDisabledControlValueAc
255
263
  trackByFn(index: number, item: ThyCascaderOption): any;
256
264
  searchFilter(searchText: string): void;
257
265
  private initSearch;
266
+ private forEachColumns;
267
+ private setSearchResultList;
258
268
  private searchInLocal;
259
269
  private resetSearch;
260
270
  selectSearchResult(selectOptionData: ThyCascaderSearchOption): void;
261
271
  ngOnDestroy(): void;
262
272
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyCascaderComponent, never>;
263
- static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderComponent, "thy-cascader,[thy-cascader]", never, { "thyValueProperty": { "alias": "thyValueProperty"; "required": false; }; "thyLabelProperty": { "alias": "thyLabelProperty"; "required": false; }; "thyPlaceholder": { "alias": "thyPlaceholder"; "required": false; }; "thySize": { "alias": "thySize"; "required": false; }; "thyOptions": { "alias": "thyOptions"; "required": false; }; "thyChangeOn": { "alias": "thyChangeOn"; "required": false; }; "thyChangeOnSelect": { "alias": "thyChangeOnSelect"; "required": false; }; "thyShowInput": { "alias": "thyShowInput"; "required": false; }; "thyLabelRender": { "alias": "thyLabelRender"; "required": false; }; "thyLoadData": { "alias": "thyLoadData"; "required": false; }; "thyTriggerAction": { "alias": "thyTriggerAction"; "required": false; }; "thyExpandTriggerAction": { "alias": "thyExpandTriggerAction"; "required": false; }; "thyMenuStyle": { "alias": "thyMenuStyle"; "required": false; }; "thyMenuClassName": { "alias": "thyMenuClassName"; "required": false; }; "thyColumnClassName": { "alias": "thyColumnClassName"; "required": false; }; "thyDisabled": { "alias": "thyDisabled"; "required": false; }; "thyEmptyStateText": { "alias": "thyEmptyStateText"; "required": false; }; "thyMultiple": { "alias": "thyMultiple"; "required": false; }; "thyMaxTagCount": { "alias": "thyMaxTagCount"; "required": false; }; "thyIsOnlySelectLeaf": { "alias": "thyIsOnlySelectLeaf"; "required": false; }; "thyShowSearch": { "alias": "thyShowSearch"; "required": false; }; }, { "thyChange": "thyChange"; "thySelectionChange": "thySelectionChange"; "thySelect": "thySelect"; "thyDeselect": "thyDeselect"; "thyClear": "thyClear"; }, never, never, true, never>;
273
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderComponent, "thy-cascader,[thy-cascader]", never, { "thyValueProperty": { "alias": "thyValueProperty"; "required": false; }; "thyLabelProperty": { "alias": "thyLabelProperty"; "required": false; }; "thyPlaceholder": { "alias": "thyPlaceholder"; "required": false; }; "thySize": { "alias": "thySize"; "required": false; }; "thyOptions": { "alias": "thyOptions"; "required": false; }; "thyChangeOn": { "alias": "thyChangeOn"; "required": false; }; "thyChangeOnSelect": { "alias": "thyChangeOnSelect"; "required": false; }; "thyShowInput": { "alias": "thyShowInput"; "required": false; }; "thyLabelRender": { "alias": "thyLabelRender"; "required": false; }; "thyLoadData": { "alias": "thyLoadData"; "required": false; }; "thyTriggerAction": { "alias": "thyTriggerAction"; "required": false; }; "thyExpandTriggerAction": { "alias": "thyExpandTriggerAction"; "required": false; }; "thyMenuStyle": { "alias": "thyMenuStyle"; "required": false; }; "thyMenuClassName": { "alias": "thyMenuClassName"; "required": false; }; "thyColumnClassName": { "alias": "thyColumnClassName"; "required": false; }; "thyDisabled": { "alias": "thyDisabled"; "required": false; }; "thyEmptyStateText": { "alias": "thyEmptyStateText"; "required": false; }; "thyMultiple": { "alias": "thyMultiple"; "required": false; }; "thyMaxTagCount": { "alias": "thyMaxTagCount"; "required": false; }; "thyIsOnlySelectLeaf": { "alias": "thyIsOnlySelectLeaf"; "required": false; }; "thyShowSearch": { "alias": "thyShowSearch"; "required": false; }; }, { "thyChange": "thyChange"; "thySelectionChange": "thySelectionChange"; "thySelect": "thySelect"; "thyDeselect": "thyDeselect"; "thyClear": "thyClear"; "thyExpandStatusChange": "thyExpandStatusChange"; }, never, never, true, never>;
264
274
  }
@@ -17,4 +17,6 @@ export interface ThyCascaderSearchOption {
17
17
  valueList: Id[];
18
18
  selected: boolean;
19
19
  thyRowValue: ThyCascaderOption[];
20
+ isLeaf?: boolean;
21
+ disabled?: boolean;
20
22
  }
@@ -1,10 +1,12 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { InputBoolean } from 'ngx-tethys/core';
3
- import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
4
- import { FormsModule } from '@angular/forms';
5
2
  import { ThyCheckboxComponent } from 'ngx-tethys/checkbox';
3
+ import { InputBoolean } from 'ngx-tethys/core';
6
4
  import { ThyFlexibleTextComponent } from 'ngx-tethys/flexible-text';
5
+ import { ThyRadioComponent } from 'ngx-tethys/radio';
6
+ import { ThyStopPropagationDirective } from 'ngx-tethys/shared';
7
7
  import { NgIf } from '@angular/common';
8
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
9
+ import { FormsModule } from '@angular/forms';
8
10
  import * as i0 from "@angular/core";
9
11
  import * as i1 from "@angular/forms";
10
12
  /**
@@ -23,6 +25,7 @@ export class ThyCascaderOptionComponent {
23
25
  this.class = 'd-flex';
24
26
  this.item = true;
25
27
  this.active = false;
28
+ this.selected = false;
26
29
  this.labelProperty = 'label';
27
30
  this.toggleSelectChange = new EventEmitter();
28
31
  }
@@ -31,7 +34,7 @@ export class ThyCascaderOptionComponent {
31
34
  this.toggleSelectChange.emit(value);
32
35
  }
33
36
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ThyCascaderOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: ThyCascaderOptionComponent, isStandalone: true, selector: "[thy-cascader-option]", inputs: { option: "option", multiple: "multiple", isOnlySelectLeaf: "isOnlySelectLeaf", active: "active", labelProperty: "labelProperty" }, outputs: { toggleSelectChange: "toggleSelectChange" }, host: { properties: { "class": "this.class", "class.thy-cascader-menu-item": "this.item", "class.thy-cascader-menu-item-active": "this.active", "class.thy-cascader-menu-item-disabled": "this.disabled", "class.thy-cascader-menu-item-expand": "this.expand" } }, ngImport: i0, template: "<span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\" *ngIf=\"!multiple || !option.isLeaf\">\n {{ option[labelProperty] || '' }}</span\n>\n<ng-container *ngIf=\"multiple && option.isLeaf && isOnlySelectLeaf\">\n <label\n thyCheckbox\n class=\"w-100\"\n thyInline=\"true\"\n [disabled]=\"option.disabled\"\n [(ngModel)]=\"active\"\n (ngModelChange)=\"toggleOption(active)\"\n [name]=\"option.value || option._id\">\n <span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\">{{ option[labelProperty] || '' }}</span>\n </label>\n</ng-container>\n\n<span\n *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyFlexibleTextComponent, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "component", type: ThyCheckboxComponent, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: ThyCascaderOptionComponent, isStandalone: true, selector: "[thy-cascader-option]", inputs: { option: "option", multiple: "multiple", isOnlySelectLeaf: "isOnlySelectLeaf", active: "active", selected: "selected", labelProperty: "labelProperty" }, outputs: { toggleSelectChange: "toggleSelectChange" }, host: { properties: { "class": "this.class", "class.thy-cascader-menu-item": "this.item", "class.thy-cascader-menu-item-active": "this.active", "class.thy-cascader-menu-item-disabled": "this.disabled", "class.thy-cascader-menu-item-expand": "this.expand" } }, ngImport: i0, template: "<div thyStopPropagation>\n <label\n *ngIf=\"multiple && (!isOnlySelectLeaf || option.isLeaf)\"\n thyCheckbox\n [disabled]=\"option.disabled\"\n [name]=\"option.value || option._id\"\n [(ngModel)]=\"selected\"\n (ngModelChange)=\"toggleOption($event)\"></label>\n <label\n *ngIf=\"!multiple && !isOnlySelectLeaf\"\n thyRadio\n [disabled]=\"option.disabled\"\n [name]=\"option.value || option._id\"\n [(ngModel)]=\"selected\"\n (ngModelChange)=\"toggleOption($event)\"></label>\n</div>\n\n<span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\"> {{ option[labelProperty] || '' }}</span>\n\n<span\n *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyFlexibleTextComponent, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "component", type: ThyCheckboxComponent, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "component", type: ThyRadioComponent, selector: "[thy-radio],[thyRadio]", inputs: ["thyValue"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
35
38
  }
36
39
  __decorate([
37
40
  InputBoolean(),
@@ -45,9 +48,13 @@ __decorate([
45
48
  InputBoolean(),
46
49
  __metadata("design:type", Boolean)
47
50
  ], ThyCascaderOptionComponent.prototype, "active", void 0);
51
+ __decorate([
52
+ InputBoolean(),
53
+ __metadata("design:type", Boolean)
54
+ ], ThyCascaderOptionComponent.prototype, "selected", void 0);
48
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ThyCascaderOptionComponent, decorators: [{
49
56
  type: Component,
50
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, selector: '[thy-cascader-option]', standalone: true, imports: [NgIf, ThyFlexibleTextComponent, ThyCheckboxComponent, FormsModule], template: "<span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\" *ngIf=\"!multiple || !option.isLeaf\">\n {{ option[labelProperty] || '' }}</span\n>\n<ng-container *ngIf=\"multiple && option.isLeaf && isOnlySelectLeaf\">\n <label\n thyCheckbox\n class=\"w-100\"\n thyInline=\"true\"\n [disabled]=\"option.disabled\"\n [(ngModel)]=\"active\"\n (ngModelChange)=\"toggleOption(active)\"\n [name]=\"option.value || option._id\">\n <span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\">{{ option[labelProperty] || '' }}</span>\n </label>\n</ng-container>\n\n<span\n *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>\n" }]
57
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, selector: '[thy-cascader-option]', standalone: true, imports: [NgIf, ThyFlexibleTextComponent, ThyCheckboxComponent, ThyRadioComponent, FormsModule, ThyStopPropagationDirective], template: "<div thyStopPropagation>\n <label\n *ngIf=\"multiple && (!isOnlySelectLeaf || option.isLeaf)\"\n thyCheckbox\n [disabled]=\"option.disabled\"\n [name]=\"option.value || option._id\"\n [(ngModel)]=\"selected\"\n (ngModelChange)=\"toggleOption($event)\"></label>\n <label\n *ngIf=\"!multiple && !isOnlySelectLeaf\"\n thyRadio\n [disabled]=\"option.disabled\"\n [name]=\"option.value || option._id\"\n [(ngModel)]=\"selected\"\n (ngModelChange)=\"toggleOption($event)\"></label>\n</div>\n\n<span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\"> {{ option[labelProperty] || '' }}</span>\n\n<span\n *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>\n" }]
51
58
  }], ctorParameters: function () { return []; }, propDecorators: { option: [{
52
59
  type: Input
53
60
  }], multiple: [{
@@ -65,6 +72,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
65
72
  args: ['class.thy-cascader-menu-item-active']
66
73
  }, {
67
74
  type: Input
75
+ }], selected: [{
76
+ type: Input
68
77
  }], disabled: [{
69
78
  type: HostBinding,
70
79
  args: ['class.thy-cascader-menu-item-disabled']
@@ -76,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
76
85
  }], toggleSelectChange: [{
77
86
  type: Output
78
87
  }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXItbGkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLWxpLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci1saS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUV2Qzs7R0FFRztBQVVILE1BQU0sT0FBTywwQkFBMEI7SUFvQm5DLElBQ0ksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQ0ksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlDLENBQUM7SUFNRDtRQTdCQSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUVGLFVBQUssR0FBRyxRQUFRLENBQUM7UUFFTSxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBS3pELFdBQU0sR0FBWSxLQUFLLENBQUM7UUFZZixrQkFBYSxHQUFXLE9BQU8sQ0FBQztRQUUvQix1QkFBa0IsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUxRCxDQUFDO0lBRWhCLFFBQVEsS0FBSSxDQUFDO0lBRU4sWUFBWSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzhHQXhDUSwwQkFBMEI7a0dBQTFCLDBCQUEwQix3aEJDcEJ2QyxxeEJBb0JBLDRDREZjLElBQUksNkZBQUUsd0JBQXdCLG1PQUFFLG9CQUFvQixtSEFBRSxXQUFXOztBQUszRTtJQUNDLFlBQVksRUFBRTs7NERBQ0U7QUFFakI7SUFDQyxZQUFZLEVBQUU7O29FQUNTO0FBTXhCO0lBRUMsWUFBWSxFQUFFOzswREFDUzsyRkFsQmYsMEJBQTBCO2tCQVR0QyxTQUFTO3NDQUNXLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksWUFFM0IsdUJBQXVCLGNBRXJCLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSx3QkFBd0IsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLENBQUM7MEVBR25FLE1BQU07c0JBQWQsS0FBSztnQkFJTixRQUFRO3NCQUZQLEtBQUs7Z0JBTU4sZ0JBQWdCO3NCQUZmLEtBQUs7Z0JBSWdCLEtBQUs7c0JBQTFCLFdBQVc7dUJBQUMsT0FBTztnQkFFeUIsSUFBSTtzQkFBaEQsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBSzNDLE1BQU07c0JBSEwsV0FBVzt1QkFBQyxxQ0FBcUM7O3NCQUNqRCxLQUFLO2dCQUtGLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyx1Q0FBdUM7Z0JBTWhELE1BQU07c0JBRFQsV0FBVzt1QkFBQyxxQ0FBcUM7Z0JBS3pDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeUNhc2NhZGVyT3B0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnbmd4LXRldGh5cy9jaGVja2JveCc7XG5pbXBvcnQgeyBUaHlGbGV4aWJsZVRleHRDb21wb25lbnQgfSBmcm9tICduZ3gtdGV0aHlzL2ZsZXhpYmxlLXRleHQnO1xuaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1t0aHktY2FzY2FkZXItb3B0aW9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhc2NhZGVyLWxpLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBUaHlGbGV4aWJsZVRleHRDb21wb25lbnQsIFRoeUNoZWNrYm94Q29tcG9uZW50LCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5Q2FzY2FkZXJPcHRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb247XG5cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIGlzT25seVNlbGVjdExlYWYgPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ2QtZmxleCc7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1jYXNjYWRlci1tZW51LWl0ZW0nKSBpdGVtID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhc2NhZGVyLW1lbnUtaXRlbS1hY3RpdmUnKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1jYXNjYWRlci1tZW51LWl0ZW0tZGlzYWJsZWQnKVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uLmRpc2FibGVkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhc2NhZGVyLW1lbnUtaXRlbS1leHBhbmQnKVxuICAgIGdldCBleHBhbmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbiAmJiAhdGhpcy5vcHRpb24uaXNMZWFmO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxhYmVsUHJvcGVydHk6IHN0cmluZyA9ICdsYWJlbCc7XG5cbiAgICBAT3V0cHV0KCkgdG9nZ2xlU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHt9XG5cbiAgICBwdWJsaWMgdG9nZ2xlT3B0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0Q2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cbn1cbiIsIjxzcGFuIHRoeUZsZXhpYmxlVGV4dCBbdGh5VG9vbHRpcENvbnRlbnRdPVwib3B0aW9uW2xhYmVsUHJvcGVydHldIHx8ICcnXCIgKm5nSWY9XCIhbXVsdGlwbGUgfHwgIW9wdGlvbi5pc0xlYWZcIj5cbiAge3sgb3B0aW9uW2xhYmVsUHJvcGVydHldIHx8ICcnIH19PC9zcGFuXG4+XG48bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlwbGUgJiYgb3B0aW9uLmlzTGVhZiAmJiBpc09ubHlTZWxlY3RMZWFmXCI+XG4gIDxsYWJlbFxuICAgIHRoeUNoZWNrYm94XG4gICAgY2xhc3M9XCJ3LTEwMFwiXG4gICAgdGh5SW5saW5lPVwidHJ1ZVwiXG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgWyhuZ01vZGVsKV09XCJhY3RpdmVcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZU9wdGlvbihhY3RpdmUpXCJcbiAgICBbbmFtZV09XCJvcHRpb24udmFsdWUgfHwgb3B0aW9uLl9pZFwiPlxuICAgIDxzcGFuIHRoeUZsZXhpYmxlVGV4dCBbdGh5VG9vbHRpcENvbnRlbnRdPVwib3B0aW9uW2xhYmVsUHJvcGVydHldIHx8ICcnXCI+e3sgb3B0aW9uW2xhYmVsUHJvcGVydHldIHx8ICcnIH19PC9zcGFuPlxuICA8L2xhYmVsPlxuPC9uZy1jb250YWluZXI+XG5cbjxzcGFuXG4gICpuZ0lmPVwiIW9wdGlvbi5pc0xlYWYgfHwgKG9wdGlvbi5jaGlsZHJlbiAmJiBvcHRpb24uY2hpbGRyZW4ubGVuZ3RoKSB8fCBvcHRpb24ubG9hZGluZ1wiXG4gIGNsYXNzPVwid3RmIHd0Zi1hbmdsZS1yaWdodCB0aHktY2FzY2FkZXItbWVudS1pdGVtLWV4cGFuZC1pY29uXCI+XG48L3NwYW4+XG4iXX0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXItbGkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLWxpLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci1saS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUk3Qzs7R0FFRztBQVVILE1BQU0sT0FBTywwQkFBMEI7SUF3Qm5DLElBQ0ksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQ0ksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlDLENBQUM7SUFNRDtRQWpDQSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUVGLFVBQUssR0FBRyxRQUFRLENBQUM7UUFFTSxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBS3pELFdBQU0sR0FBWSxLQUFLLENBQUM7UUFJeEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQVlqQixrQkFBYSxHQUFXLE9BQU8sQ0FBQztRQUUvQix1QkFBa0IsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUxRCxDQUFDO0lBRWhCLFFBQVEsS0FBSSxDQUFDO0lBRU4sWUFBWSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzhHQTVDUSwwQkFBMEI7a0dBQTFCLDBCQUEwQiw4aUJDeEJ2Qyx3ekJBdUJBLDRDRERjLElBQUksNkZBQUUsd0JBQXdCLG1PQUFFLG9CQUFvQixvSEFBRSxpQkFBaUIsd0ZBQUUsV0FBVywrVkFBRSwyQkFBMkI7O0FBSzNIO0lBQ0MsWUFBWSxFQUFFOzs0REFDRTtBQUVqQjtJQUNDLFlBQVksRUFBRTs7b0VBQ1M7QUFNeEI7SUFFQyxZQUFZLEVBQUU7OzBEQUNTO0FBRXhCO0lBQ0MsWUFBWSxFQUFFOzs0REFDVzsyRkF0QmpCLDBCQUEwQjtrQkFUdEMsU0FBUztzQ0FDVyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFlBRTNCLHVCQUF1QixjQUVyQixJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixDQUFDOzBFQUduSCxNQUFNO3NCQUFkLEtBQUs7Z0JBSU4sUUFBUTtzQkFGUCxLQUFLO2dCQU1OLGdCQUFnQjtzQkFGZixLQUFLO2dCQUlnQixLQUFLO3NCQUExQixXQUFXO3VCQUFDLE9BQU87Z0JBRXlCLElBQUk7c0JBQWhELFdBQVc7dUJBQUMsOEJBQThCO2dCQUszQyxNQUFNO3NCQUhMLFdBQVc7dUJBQUMscUNBQXFDOztzQkFDakQsS0FBSztnQkFNTixRQUFRO3NCQUZQLEtBQUs7Z0JBS0YsUUFBUTtzQkFEWCxXQUFXO3VCQUFDLHVDQUF1QztnQkFNaEQsTUFBTTtzQkFEVCxXQUFXO3VCQUFDLHFDQUFxQztnQkFLekMsYUFBYTtzQkFBckIsS0FBSztnQkFFSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaHlDaGVja2JveENvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvY2hlY2tib3gnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IFRoeUZsZXhpYmxlVGV4dENvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvZmxleGlibGUtdGV4dCc7XG5pbXBvcnQgeyBUaHlSYWRpb0NvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvcmFkaW8nO1xuaW1wb3J0IHsgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuXG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUaHlDYXNjYWRlck9wdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbdGh5LWNhc2NhZGVyLW9wdGlvbl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXNjYWRlci1saS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgVGh5RmxleGlibGVUZXh0Q29tcG9uZW50LCBUaHlDaGVja2JveENvbXBvbmVudCwgVGh5UmFkaW9Db21wb25lbnQsIEZvcm1zTW9kdWxlLCBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIFRoeUNhc2NhZGVyT3B0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBpc09ubHlTZWxlY3RMZWFmID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzcyA9ICdkLWZsZXgnO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktY2FzY2FkZXItbWVudS1pdGVtJykgaXRlbSA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1jYXNjYWRlci1tZW51LWl0ZW0tYWN0aXZlJylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktY2FzY2FkZXItbWVudS1pdGVtLWRpc2FibGVkJylcbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbi5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1jYXNjYWRlci1tZW51LWl0ZW0tZXhwYW5kJylcbiAgICBnZXQgZXhwYW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24gJiYgIXRoaXMub3B0aW9uLmlzTGVhZjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBsYWJlbFByb3BlcnR5OiBzdHJpbmcgPSAnbGFiZWwnO1xuXG4gICAgQE91dHB1dCgpIHRvZ2dsZVNlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7fVxuXG4gICAgcHVibGljIHRvZ2dsZU9wdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG59XG4iLCI8ZGl2IHRoeVN0b3BQcm9wYWdhdGlvbj5cbiAgPGxhYmVsXG4gICAgKm5nSWY9XCJtdWx0aXBsZSAmJiAoIWlzT25seVNlbGVjdExlYWYgfHwgb3B0aW9uLmlzTGVhZilcIlxuICAgIHRoeUNoZWNrYm94XG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgW25hbWVdPVwib3B0aW9uLnZhbHVlIHx8IG9wdGlvbi5faWRcIlxuICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZU9wdGlvbigkZXZlbnQpXCI+PC9sYWJlbD5cbiAgPGxhYmVsXG4gICAgKm5nSWY9XCIhbXVsdGlwbGUgJiYgIWlzT25seVNlbGVjdExlYWZcIlxuICAgIHRoeVJhZGlvXG4gICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgW25hbWVdPVwib3B0aW9uLnZhbHVlIHx8IG9wdGlvbi5faWRcIlxuICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZU9wdGlvbigkZXZlbnQpXCI+PC9sYWJlbD5cbjwvZGl2PlxuXG48c3BhbiB0aHlGbGV4aWJsZVRleHQgW3RoeVRvb2x0aXBDb250ZW50XT1cIm9wdGlvbltsYWJlbFByb3BlcnR5XSB8fCAnJ1wiPiB7eyBvcHRpb25bbGFiZWxQcm9wZXJ0eV0gfHwgJycgfX08L3NwYW4+XG5cbjxzcGFuXG4gICpuZ0lmPVwiIW9wdGlvbi5pc0xlYWYgfHwgKG9wdGlvbi5jaGlsZHJlbiAmJiBvcHRpb24uY2hpbGRyZW4ubGVuZ3RoKSB8fCBvcHRpb24ubG9hZGluZ1wiXG4gIGNsYXNzPVwid3RmIHd0Zi1hbmdsZS1yaWdodCB0aHktY2FzY2FkZXItbWVudS1pdGVtLWV4cGFuZC1pY29uXCI+XG48L3NwYW4+XG4iXX0=