mmhglobal-dynamicform 2.43.0 → 2.44.1
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/README.md +58 -1
- package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +30 -6
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +17 -9
- package/esm2020/lib/zchip/zchip.component.mjs +36 -9
- package/esm2020/lib/zinput-container/zinput-container.component.mjs +14 -12
- package/esm2020/lib/zslider/zslider.component.mjs +181 -0
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +162 -42
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +22 -3
- package/esm2020/lib/zudf/zudf.component.mjs +2 -1
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/mmhglobal-dynamicform.mjs +586 -208
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +576 -207
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/embed-components/input-field-addons/input-field-addons.component.d.ts +3 -0
- package/lib/mmhglobal-dynamicform.module.d.ts +42 -41
- package/lib/zchip/zchip.component.d.ts +8 -0
- package/lib/zinput-container/zinput-container.component.d.ts +1 -0
- package/lib/zslider/zslider.component.d.ts +39 -0
- package/lib/ztexteditor/ztexteditor.component.d.ts +20 -8
- package/lib/ztreelist/ztreelist.component.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -12,16 +12,18 @@ import * as i1 from "../services/zcomponent.service";
|
|
|
12
12
|
import * as i2 from "mmhglobal-zcore";
|
|
13
13
|
import * as i3 from "@progress/kendo-angular-buttons";
|
|
14
14
|
import * as i4 from "@fortawesome/angular-fontawesome";
|
|
15
|
-
import * as i5 from "
|
|
16
|
-
import * as i6 from "@angular/
|
|
17
|
-
import * as i7 from "@angular/
|
|
18
|
-
import * as i8 from "@
|
|
19
|
-
import * as i9 from "
|
|
15
|
+
import * as i5 from "../embed-components/input-field-addons/input-field-addons.component";
|
|
16
|
+
import * as i6 from "@angular/common";
|
|
17
|
+
import * as i7 from "@angular/forms";
|
|
18
|
+
import * as i8 from "@angular/flex-layout/extended";
|
|
19
|
+
import * as i9 from "@progress/kendo-angular-tooltip";
|
|
20
|
+
import * as i10 from "../pipe/htmlSanitize.pipe";
|
|
20
21
|
export class ZChipComponent extends InputFieldBase {
|
|
21
22
|
constructor(componentService, fontAweSomeService) {
|
|
22
23
|
super(componentService);
|
|
23
24
|
this.componentService = componentService;
|
|
24
25
|
this.fontAweSomeService = fontAweSomeService;
|
|
26
|
+
this.inputFieldAddOn = { top: {}, left: {}, right: {}, bottom: {} };
|
|
25
27
|
}
|
|
26
28
|
ngOnInit() {
|
|
27
29
|
super.initComponent().pipe(tap(() => {
|
|
@@ -29,11 +31,26 @@ export class ZChipComponent extends InputFieldBase {
|
|
|
29
31
|
if (this.dataSource && this.dataSource.length > 0) {
|
|
30
32
|
this.setupDataSourceByzModel();
|
|
31
33
|
}
|
|
34
|
+
this.setupAddOnValue();
|
|
32
35
|
})).subscribe();
|
|
33
36
|
}
|
|
37
|
+
setupAddOnValue(addOns) {
|
|
38
|
+
const inputFieldAddOnGroupValue = ZComponentHelper.getGroupValue(addOns || this.data.InputFieldAddOns, this.group);
|
|
39
|
+
const addOnValue = inputFieldAddOnGroupValue || addOns || this.data.InputFieldAddOns;
|
|
40
|
+
if (addOnValue && Array.isArray(addOnValue)) {
|
|
41
|
+
for (const key of Object.keys(this.inputFieldAddOn)) {
|
|
42
|
+
this.inputFieldAddOn[key] = addOnValue.find(i => i.Position === key);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
34
46
|
ngAfterViewInit() {
|
|
35
47
|
this.componentService.decrementComponentCounterForField(this.data);
|
|
36
48
|
}
|
|
49
|
+
get isReadOnly() {
|
|
50
|
+
return !!this.componentProperties.isReadOnlyField
|
|
51
|
+
? this.group[this.componentProperties.isReadOnlyField]
|
|
52
|
+
: this.componentProperties.isReadOnly;
|
|
53
|
+
}
|
|
37
54
|
setupDataSource() {
|
|
38
55
|
if (!this.data.DataSource) {
|
|
39
56
|
console.error("No data source found for zchip");
|
|
@@ -57,7 +74,17 @@ export class ZChipComponent extends InputFieldBase {
|
|
|
57
74
|
}
|
|
58
75
|
}
|
|
59
76
|
setData(data) {
|
|
60
|
-
|
|
77
|
+
if (data !== undefined && data !== null) {
|
|
78
|
+
// Datasource replacement mode: caller provides a new chip array directly.
|
|
79
|
+
// Used when the chip list itself changes
|
|
80
|
+
this.dataSource = data;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Selection-refresh mode: chip list stays the same, only re-evaluate which chips
|
|
84
|
+
// are marked Selected based on the current group.zModel[data.Value].
|
|
85
|
+
this.setupDataSourceByzModel();
|
|
86
|
+
}
|
|
87
|
+
// Spread into a new array reference so Angular detects the change and re-renders.
|
|
61
88
|
this.dataSource = [...this.dataSource];
|
|
62
89
|
// Need to set in this way as the chips are QueryList
|
|
63
90
|
if (this.chipList && this.chipList.chips && this.chipList.chips.length > 0) {
|
|
@@ -108,12 +135,12 @@ export class ZChipComponent extends InputFieldBase {
|
|
|
108
135
|
}
|
|
109
136
|
}
|
|
110
137
|
ZChipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZChipComponent, deps: [{ token: i1.ZComponentService }, { token: i2.FontAweSomeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
111
|
-
ZChipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZChipComponent, selector: "app-zchip", viewQueries: [{ propertyName: "chipList", first: true, predicate: ChipListComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"getClass(form, data)\" [style]=\"componentProperties.style.style\">\r\n <div
|
|
138
|
+
ZChipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZChipComponent, selector: "app-zchip", viewQueries: [{ propertyName: "chipList", first: true, predicate: ChipListComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"getClass(form, data)\" [style]=\"componentProperties.style.style\">\r\n <div class=\"e1tag-style1\" [style]=\"componentProperties.style.style1\"\r\n *ngIf=\"!data.InputFieldAddOns || data.InputFieldAddOns.length <= 0\">\r\n <div kendoTooltip>\r\n <kendo-chip-list [selection]=\"isReadOnly ? 'none' : (data.Multiple ? 'multiple' : 'single')\"\r\n [style.pointer-events]=\"isReadOnly ? 'none' : 'auto'\"\r\n (selectedChange)=\"chipListChangeSelection($event)\" [style]=\"componentProperties.style.style2\"\r\n class=\"e1tag-style2\">\r\n <kendo-chip *ngFor=\"let chip of dataSource\" [selected]=\"chip.Selected\" [ngClass]=\"chip.Class\"\r\n [removable]=\"chip.Removable\" (remove)=\"onRemove(chip)\"\r\n (mouseover)=\"mouseover($event, chip)\" (contentClick)=\"onItemClick($event, chip)\"\r\n [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <div class=\"e1-chip-content-container e1tag-style4\" [style]=\"componentProperties.style.style4\">\r\n <div *ngIf=\"chip.Label\" [innerHTML]=\"chip.Label | htmlSanitize\" [style]=\"componentProperties.style.style5\"\r\n class=\"e1tag-style5\"></div>\r\n <fa-icon *ngIf=\"chip.Icon\" [icon]=\"getFontAwesome(chip.Icon, fontAweSomeService)\"\r\n [style]=\"componentProperties.style.style6\" class=\"e1tag-style6\"></fa-icon>\r\n </div>\r\n </kendo-chip>\r\n </kendo-chip-list>\r\n </div>\r\n </div>\r\n <div class=\"label-div-container e1tag-style5\" [style]=\"componentProperties.style.style5\"\r\n *ngIf=\"data.InputFieldAddOns && data.InputFieldAddOns.length > 0\">\r\n <div class=\"addon-top-row\" *ngIf=\"inputFieldAddOn.top\">\r\n <app-input-field-addons class=\"addon-top e1tag-style4\" [position]=\"'top'\" [addOn]=\"inputFieldAddOn.top\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n </div>\r\n <div class=\"content-withaddon-container e1tag-style1\" [style]=\"componentProperties.style.style1\">\r\n <app-input-field-addons class=\"addon-left e1tag-style4\" [position]=\"'left'\" [addOn]=\"inputFieldAddOn.left\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n <div kendoTooltip>\r\n <kendo-chip-list [selection]=\"isReadOnly ? 'none' : (data.Multiple ? 'multiple' : 'single')\"\r\n [style.pointer-events]=\"isReadOnly ? 'none' : 'auto'\"\r\n (selectedChange)=\"chipListChangeSelection($event)\" [style]=\"componentProperties.style.style2\"\r\n class=\"e1tag-style2\">\r\n <kendo-chip *ngFor=\"let chip of dataSource\" [selected]=\"chip.Selected\" [ngClass]=\"chip.Class\"\r\n [removable]=\"chip.Removable\" (remove)=\"onRemove(chip)\"\r\n (mouseover)=\"mouseover($event, chip)\" (contentClick)=\"onItemClick($event, chip)\"\r\n [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <div class=\"e1-chip-content-container e1tag-style4\" [style]=\"componentProperties.style.style4\">\r\n <div *ngIf=\"chip.Label\" [innerHTML]=\"chip.Label | htmlSanitize\" [style]=\"componentProperties.style.style5\"\r\n class=\"e1tag-style5\"></div>\r\n <fa-icon *ngIf=\"chip.Icon\" [icon]=\"getFontAwesome(chip.Icon, fontAweSomeService)\"\r\n [style]=\"componentProperties.style.style6\" class=\"e1tag-style6\"></fa-icon>\r\n </div>\r\n </kendo-chip>\r\n </kendo-chip-list>\r\n </div>\r\n <app-input-field-addons class=\"addon-right e1tag-style4\" [position]=\"'right'\" [addOn]=\"inputFieldAddOn.right\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n </div>\r\n <div class=\"addon-bottom-row\" *ngIf=\"inputFieldAddOn.bottom\">\r\n <app-input-field-addons class=\"addon-bottom e1tag-style4\" [position]=\"'bottom'\" [addOn]=\"inputFieldAddOn.bottom\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-chip-list .k-chip-filled,:host ::ng-deep kendo-chip-list .k-chip{background:white;border:1px solid #d1d1d1}:host ::ng-deep kendo-chip-list .k-chip-filled.k-selected,:host ::ng-deep kendo-chip-list .k-chip.k-selected{background:rgba(var(--ion-color-primary-rgb),.2);color:#000;box-shadow:0 0 1px 1px rgba(var(--ion-color-primary-rgb),1)}.e1-chip-content-container{display:flex;gap:5px;margin:2px 4px}.label-div-container{width:100%}.addon-top-row,.addon-bottom-row{display:block}.content-withaddon-container{display:flex;align-items:center;gap:5px}\n"], components: [{ type: i3.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size"], outputs: ["selectedChange", "remove"] }, { type: i3.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "contentClick"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.InputFieldAddOnsComponent, selector: "app-input-field-addons", inputs: ["position", "addOn"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i9.TooltipDirective, selector: "[kendoTooltip]", inputs: ["filter", "position", "titleTemplate", "showOn", "showAfter", "callout", "closable", "offset", "tooltipWidth", "tooltipHeight", "tooltipClass", "collision", "closeTitle", "tooltipTemplate"], exportAs: ["kendoTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "htmlSanitize": i10.HtmlSanitizePipe } });
|
|
112
139
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZChipComponent, decorators: [{
|
|
113
140
|
type: Component,
|
|
114
|
-
args: [{ selector: 'app-zchip', template: "<div [formGroup]=\"form\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"getClass(form, data)\" [style]=\"componentProperties.style.style\">\r\n <div
|
|
141
|
+
args: [{ selector: 'app-zchip', template: "<div [formGroup]=\"form\" class=\"e1tag-style\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"getClass(form, data)\" [style]=\"componentProperties.style.style\">\r\n <div class=\"e1tag-style1\" [style]=\"componentProperties.style.style1\"\r\n *ngIf=\"!data.InputFieldAddOns || data.InputFieldAddOns.length <= 0\">\r\n <div kendoTooltip>\r\n <kendo-chip-list [selection]=\"isReadOnly ? 'none' : (data.Multiple ? 'multiple' : 'single')\"\r\n [style.pointer-events]=\"isReadOnly ? 'none' : 'auto'\"\r\n (selectedChange)=\"chipListChangeSelection($event)\" [style]=\"componentProperties.style.style2\"\r\n class=\"e1tag-style2\">\r\n <kendo-chip *ngFor=\"let chip of dataSource\" [selected]=\"chip.Selected\" [ngClass]=\"chip.Class\"\r\n [removable]=\"chip.Removable\" (remove)=\"onRemove(chip)\"\r\n (mouseover)=\"mouseover($event, chip)\" (contentClick)=\"onItemClick($event, chip)\"\r\n [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <div class=\"e1-chip-content-container e1tag-style4\" [style]=\"componentProperties.style.style4\">\r\n <div *ngIf=\"chip.Label\" [innerHTML]=\"chip.Label | htmlSanitize\" [style]=\"componentProperties.style.style5\"\r\n class=\"e1tag-style5\"></div>\r\n <fa-icon *ngIf=\"chip.Icon\" [icon]=\"getFontAwesome(chip.Icon, fontAweSomeService)\"\r\n [style]=\"componentProperties.style.style6\" class=\"e1tag-style6\"></fa-icon>\r\n </div>\r\n </kendo-chip>\r\n </kendo-chip-list>\r\n </div>\r\n </div>\r\n <div class=\"label-div-container e1tag-style5\" [style]=\"componentProperties.style.style5\"\r\n *ngIf=\"data.InputFieldAddOns && data.InputFieldAddOns.length > 0\">\r\n <div class=\"addon-top-row\" *ngIf=\"inputFieldAddOn.top\">\r\n <app-input-field-addons class=\"addon-top e1tag-style4\" [position]=\"'top'\" [addOn]=\"inputFieldAddOn.top\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n </div>\r\n <div class=\"content-withaddon-container e1tag-style1\" [style]=\"componentProperties.style.style1\">\r\n <app-input-field-addons class=\"addon-left e1tag-style4\" [position]=\"'left'\" [addOn]=\"inputFieldAddOn.left\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n <div kendoTooltip>\r\n <kendo-chip-list [selection]=\"isReadOnly ? 'none' : (data.Multiple ? 'multiple' : 'single')\"\r\n [style.pointer-events]=\"isReadOnly ? 'none' : 'auto'\"\r\n (selectedChange)=\"chipListChangeSelection($event)\" [style]=\"componentProperties.style.style2\"\r\n class=\"e1tag-style2\">\r\n <kendo-chip *ngFor=\"let chip of dataSource\" [selected]=\"chip.Selected\" [ngClass]=\"chip.Class\"\r\n [removable]=\"chip.Removable\" (remove)=\"onRemove(chip)\"\r\n (mouseover)=\"mouseover($event, chip)\" (contentClick)=\"onItemClick($event, chip)\"\r\n [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\">\r\n <div class=\"e1-chip-content-container e1tag-style4\" [style]=\"componentProperties.style.style4\">\r\n <div *ngIf=\"chip.Label\" [innerHTML]=\"chip.Label | htmlSanitize\" [style]=\"componentProperties.style.style5\"\r\n class=\"e1tag-style5\"></div>\r\n <fa-icon *ngIf=\"chip.Icon\" [icon]=\"getFontAwesome(chip.Icon, fontAweSomeService)\"\r\n [style]=\"componentProperties.style.style6\" class=\"e1tag-style6\"></fa-icon>\r\n </div>\r\n </kendo-chip>\r\n </kendo-chip-list>\r\n </div>\r\n <app-input-field-addons class=\"addon-right e1tag-style4\" [position]=\"'right'\" [addOn]=\"inputFieldAddOn.right\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n </div>\r\n <div class=\"addon-bottom-row\" *ngIf=\"inputFieldAddOn.bottom\">\r\n <app-input-field-addons class=\"addon-bottom e1tag-style4\" [position]=\"'bottom'\" [addOn]=\"inputFieldAddOn.bottom\"\r\n [data]=\"data\" [group]=\"group\" [form]=\"form\" [containerField]=\"containerField\"\r\n [componentProperties]=\"componentProperties\" [style]=\"componentProperties.style.style4\">\r\n </app-input-field-addons>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-chip-list .k-chip-filled,:host ::ng-deep kendo-chip-list .k-chip{background:white;border:1px solid #d1d1d1}:host ::ng-deep kendo-chip-list .k-chip-filled.k-selected,:host ::ng-deep kendo-chip-list .k-chip.k-selected{background:rgba(var(--ion-color-primary-rgb),.2);color:#000;box-shadow:0 0 1px 1px rgba(var(--ion-color-primary-rgb),1)}.e1-chip-content-container{display:flex;gap:5px;margin:2px 4px}.label-div-container{width:100%}.addon-top-row,.addon-bottom-row{display:block}.content-withaddon-container{display:flex;align-items:center;gap:5px}\n"] }]
|
|
115
142
|
}], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.FontAweSomeService }]; }, propDecorators: { chipList: [{
|
|
116
143
|
type: ViewChild,
|
|
117
144
|
args: [ChipListComponent]
|
|
118
145
|
}] } });
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNoaXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemNoaXAvemNoaXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemNoaXAvemNoaXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFjLGdCQUFnQixFQUE2QyxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7OztBQVNwRSxNQUFNLE9BQU8sY0FBZSxTQUFRLGNBQWM7SUFJaEQsWUFDUyxnQkFBbUMsRUFDbkMsa0JBQXNDO1FBRTdDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBSGpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFDbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUcvQyxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQ3hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakQsSUFBSSxD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RSxTQUFTO2dCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQ3pCLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7YUFDOUMsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFTO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7MkdBN0dVLGNBQWM7K0ZBQWQsY0FBYywyRkFDZCxpQkFBaUIsdUVDdEI5QixrbURBc0JBOzJGRERhLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsV0FBVzt5SUFNZ0IsUUFBUTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgRm9udEF3ZVNvbWVTZXJ2aWNlIH0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuaW1wb3J0IHsgQ2hpcExpc3RDb21wb25lbnQgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItYnV0dG9uc1wiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpjaGlwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vemNoaXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3pjaGlwLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWkNoaXBDb21wb25lbnQgZXh0ZW5kcyBJbnB1dEZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChDaGlwTGlzdENvbXBvbmVudCkgcHVibGljIGNoaXBMaXN0OiBDaGlwTGlzdENvbXBvbmVudDtcclxuICBwdWJsaWMgZGF0YVNvdXJjZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkucGlwZShcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHVwRGF0YVNvdXJjZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2V0dXBEYXRhU291cmNlQnl6TW9kZWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldHVwRGF0YVNvdXJjZSgpIHtcclxuICAgIGlmICghdGhpcy5kYXRhLkRhdGFTb3VyY2UpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk5vIGRhdGEgc291cmNlIGZvdW5kIGZvciB6Y2hpcFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YS5EYXRhU291cmNlO1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuRGF0YVNvdXJjZSA9PSAnc3RyaW5nJyAmJiB0aGlzLmRhdGEuRGF0YVNvdXJjZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkRhdGFTb3VyY2UsIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cERhdGFTb3VyY2VCeXpNb2RlbCgpIHtcclxuICAgIGNvbnN0IG1vZGVsRGF0YSA9IHRoaXMuZ3JvdXAuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBpZiAoIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkobW9kZWxEYXRhKSkge1xyXG4gICAgICBjb25zdCBtb2RlbFZhbHVlS2V5TGlzdCA9IG1vZGVsRGF0YS5tYXAoeCA9PiB4LkxhYmVsKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICBpdGVtLlNlbGVjdGVkID0gbW9kZWxWYWx1ZUtleUxpc3QuaW5jbHVkZXMoaXRlbS5MYWJlbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCh4ID0+IHguU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0dXBEYXRhU291cmNlQnl6TW9kZWwoKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG5cclxuICAgIC8vIE5lZWQgdG8gc2V0IGluIHRoaXMgd2F5IGFzIHRoZSBjaGlwcyBhcmUgUXVlcnlMaXN0XHJcbiAgICBpZiAodGhpcy5jaGlwTGlzdCAmJiB0aGlzLmNoaXBMaXN0LmNoaXBzICYmIHRoaXMuY2hpcExpc3QuY2hpcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaXAgb2YgdGhpcy5jaGlwTGlzdC5jaGlwcykge1xyXG4gICAgICAgIGNoaXAuc2VsZWN0ZWQgPSAhIXRoaXMuZGF0YVNvdXJjZVtpbmRleF0/LlNlbGVjdGVkIHx8IGZhbHNlO1xyXG4gICAgICAgIGluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldHVwRGF0YVNvdXJjZUZvckljb25DaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBEYXRhU291cmNlRm9ySWNvbkNoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0NoYW5nZUljb25VcG9uU2VsZWN0ZWQnXSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB4IG9mIHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgeC5fSWNvbiA9IHguSWNvbjtcclxuICAgICAgICAgIHguSWNvbiA9ICEheC5TZWxlY3RlZCA/IHguU2VsZWN0ZWRJY29uIDogeC5fSWNvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBFdmVudHNcclxuICBwdWJsaWMgY2hpcExpc3RDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0ZWRDaGlwSW5kZXhlczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZENoaXBzID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcigoeCwgaSkgPT4gc2VsZWN0ZWRDaGlwSW5kZXhlcy5pbmNsdWRlcyhpKSk7XHJcbiAgICBpZiAodGhpcy5kYXRhWydDaGFuZ2VJY29uVXBvblNlbGVjdGVkJ10pIHtcclxuICAgICAgZm9yIChjb25zdCBjaGlwIG9mIHNlbGVjdGVkQ2hpcHMpIHtcclxuICAgICAgICBjaGlwLkljb24gPSBjaGlwLlNlbGVjdGVkSWNvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgbm90U2VsZWN0ZWRDaGlwcyA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKHgsIGkpID0+ICFzZWxlY3RlZENoaXBJbmRleGVzLmluY2x1ZGVzKGkpKTtcclxuICAgICAgZm9yIChjb25zdCBjaGlwIG9mIG5vdFNlbGVjdGVkQ2hpcHMpIHtcclxuICAgICAgICBjaGlwLkljb24gPSB0aGlzLmRhdGFTb3VyY2UuZmluZCh4ID0+IHguTGFiZWwgPT09IGNoaXAuTGFiZWwpLl9JY29uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIub25DaGFuZ2UobnVsbCwgc2VsZWN0ZWRDaGlwcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW91c2VvdmVyKGV2ZW50OiBhbnksIGNoaXA6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5PbkhvdmVyKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcIm9uSG92ZXJcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5PbkhvdmVyLFxyXG4gICAgICAgIGRhdGE6IHsgdmFsdWU6IHRoaXMuZGF0YVNvdXJjZSwgc2VsZWN0ZWRJdGVtOiBjaGlwLCBmaWVsZDogdGhpcy5kYXRhIH1cclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVtb3ZlKGNoaXA6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZmluZEluZGV4KChjKSA9PiBjLkxhYmVsID09PSBjaGlwLkxhYmVsKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZTF0YWctc3R5bGVcIlxyXG4gICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCJcclxuICBbbmdDbGFzc109XCJnZXRDbGFzcyhmb3JtLCBkYXRhKVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcbiAgPGRpdiBrZW5kb1Rvb2x0aXAgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIj5cclxuICAgIDxrZW5kby1jaGlwLWxpc3QgW3NlbGVjdGlvbl09XCJkYXRhLk11bHRpcGxlID8gJ211bHRpcGxlJyA6ICdzaW5nbGUnXCJcclxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cImNoaXBMaXN0Q2hhbmdlU2VsZWN0aW9uKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIlxyXG4gICAgICBjbGFzcz1cImUxdGFnLXN0eWxlMlwiPlxyXG4gICAgICA8a2VuZG8tY2hpcCAqbmdGb3I9XCJsZXQgY2hpcCBvZiBkYXRhU291cmNlXCIgW3NlbGVjdGVkXT1cImNoaXAuU2VsZWN0ZWRcIiBbbmdDbGFzc109XCJjaGlwLkNsYXNzXCJcclxuICAgICAgICBbcmVtb3ZhYmxlXT1cImNoaXAuUmVtb3ZhYmxlXCIgKHJlbW92ZSk9XCJvblJlbW92ZShjaGlwKVwiXHJcbiAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXIoJGV2ZW50LCBjaGlwKVwiIChjb250ZW50Q2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LCBjaGlwKVwiXHJcbiAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZTEtY2hpcC1jb250ZW50LWNvbnRhaW5lciBlMXRhZy1zdHlsZTRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjaGlwLkxhYmVsXCIgW2lubmVySFRNTF09XCJjaGlwLkxhYmVsIHwgaHRtbFNhbml0aXplXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTVcIj48L2Rpdj5cclxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImNoaXAuTGFiZWxcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiPnt7Y2hpcC5MYWJlbH19PC9kaXY+IC0tPlxyXG4gICAgICAgICAgPGZhLWljb24gKm5nSWY9XCJjaGlwLkljb25cIiBbaWNvbl09XCJnZXRGb250QXdlc29tZShjaGlwLkljb24sIGZvbnRBd2VTb21lU2VydmljZSlcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIiBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9rZW5kby1jaGlwPlxyXG4gICAgPC9rZW5kby1jaGlwLWxpc3Q+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNoaXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemNoaXAvemNoaXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemNoaXAvemNoaXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFjLGdCQUFnQixFQUE2QyxNQUFNLGlCQUFpQixDQUFDO0FBRTFHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFTcEUsTUFBTSxPQUFPLGNBQWUsU0FBUSxjQUFjO0lBS2hELFlBQ1MsZ0JBQW1DLEVBQ25DLGtCQUFzQztRQUU3QyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUhqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ25DLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFKeEMsb0JBQWUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQU90RSxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQ3hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJ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LEVBQUU7WUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsU0FBUztnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUN6QixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO2FBQzlDLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTSxRQUFRLENBQUMsSUFBUztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7OzJHQXhJVSxjQUFjOytGQUFkLGNBQWMsMkZBQ2QsaUJBQWlCLHVFQ3ZCOUIsKzBKQW9FQTsyRkQ5Q2EsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXO3lJQU1nQixRQUFRO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbnB1dEZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2lucHV0ZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBGb250QXdlU29tZVNlcnZpY2UgfSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ2hpcExpc3RDb21wb25lbnQgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItYnV0dG9uc1wiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpjaGlwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vemNoaXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3pjaGlwLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWkNoaXBDb21wb25lbnQgZXh0ZW5kcyBJbnB1dEZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChDaGlwTGlzdENvbXBvbmVudCkgcHVibGljIGNoaXBMaXN0OiBDaGlwTGlzdENvbXBvbmVudDtcclxuICBwdWJsaWMgZGF0YVNvdXJjZTtcclxuICBwdWJsaWMgaW5wdXRGaWVsZEFkZE9uID0geyB0b3A6IHt9LCBsZWZ0OiB7fSwgcmlnaHQ6IHt9LCBib3R0b206IHt9IH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGZvbnRBd2VTb21lU2VydmljZTogRm9udEF3ZVNvbWVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuaW5pdENvbXBvbmVudCgpLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR1cERhdGFTb3VyY2UoKTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlICYmIHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNldHVwRGF0YVNvdXJjZUJ5ek1vZGVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0dXBBZGRPblZhbHVlKCk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEFkZE9uVmFsdWUoYWRkT25zPzogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dEZpZWxkQWRkT25Hcm91cFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGFkZE9ucyB8fCB0aGlzLmRhdGEuSW5wdXRGaWVsZEFkZE9ucyBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgY29uc3QgYWRkT25WYWx1ZSA9IGlucHV0RmllbGRBZGRPbkdyb3VwVmFsdWUgfHwgYWRkT25zIHx8IHRoaXMuZGF0YS5JbnB1dEZpZWxkQWRkT25zO1xyXG4gICAgaWYgKGFkZE9uVmFsdWUgJiYgQXJyYXkuaXNBcnJheShhZGRPblZhbHVlKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmlucHV0RmllbGRBZGRPbikpIHtcclxuICAgICAgICB0aGlzLmlucHV0RmllbGRBZGRPbltrZXldID0gYWRkT25WYWx1ZS5maW5kKGkgPT4gaS5Qb3NpdGlvbiA9PT0ga2V5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUmVhZE9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXHJcbiAgICAgID8gKHRoaXMuZ3JvdXAgYXMgYW55KVt0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXVxyXG4gICAgICA6IHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldHVwRGF0YVNvdXJjZSgpIHtcclxuICAgIGlmICghdGhpcy5kYXRhLkRhdGFTb3VyY2UpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk5vIGRhdGEgc291cmNlIGZvdW5kIGZvciB6Y2hpcFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YS5EYXRhU291cmNlO1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuRGF0YVNvdXJjZSA9PSAnc3RyaW5nJyAmJiB0aGlzLmRhdGEuRGF0YVNvdXJjZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkRhdGFTb3VyY2UsIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cERhdGFTb3VyY2VCeXpNb2RlbCgpIHtcclxuICAgIGNvbnN0IG1vZGVsRGF0YSA9IHRoaXMuZ3JvdXAuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBpZiAoIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkobW9kZWxEYXRhKSkge1xyXG4gICAgICBjb25zdCBtb2RlbFZhbHVlS2V5TGlzdCA9IG1vZGVsRGF0YS5tYXAoeCA9PiB4LkxhYmVsKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICBpdGVtLlNlbGVjdGVkID0gbW9kZWxWYWx1ZUtleUxpc3QuaW5jbHVkZXMoaXRlbS5MYWJlbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCh4ID0+IHguU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnkpIHtcclxuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCkge1xyXG4gICAgICAvLyBEYXRhc291cmNlIHJlcGxhY2VtZW50IG1vZGU6IGNhbGxlciBwcm92aWRlcyBhIG5ldyBjaGlwIGFycmF5IGRpcmVjdGx5LlxyXG4gICAgICAvLyBVc2VkIHdoZW4gdGhlIGNoaXAgbGlzdCBpdHNlbGYgY2hhbmdlc1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2VsZWN0aW9uLXJlZnJlc2ggbW9kZTogY2hpcCBsaXN0IHN0YXlzIHRoZSBzYW1lLCBvbmx5IHJlLWV2YWx1YXRlIHdoaWNoIGNoaXBzXHJcbiAgICAgIC8vIGFyZSBtYXJrZWQgU2VsZWN0ZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZ3JvdXAuek1vZGVsW2RhdGEuVmFsdWVdLlxyXG4gICAgICB0aGlzLnNldHVwRGF0YVNvdXJjZUJ5ek1vZGVsKCk7XHJcbiAgICB9XHJcbiAgICAvLyBTcHJlYWQgaW50byBhIG5ldyBhcnJheSByZWZlcmVuY2Ugc28gQW5ndWxhciBkZXRlY3RzIHRoZSBjaGFuZ2UgYW5kIHJlLXJlbmRlcnMuXHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcclxuXHJcbiAgICAvLyBOZWVkIHRvIHNldCBpbiB0aGlzIHdheSBhcyB0aGUgY2hpcHMgYXJlIFF1ZXJ5TGlzdFxyXG4gICAgaWYgKHRoaXMuY2hpcExpc3QgJiYgdGhpcy5jaGlwTGlzdC5jaGlwcyAmJiB0aGlzLmNoaXBMaXN0LmNoaXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgZm9yIChjb25zdCBjaGlwIG9mIHRoaXMuY2hpcExpc3QuY2hpcHMpIHtcclxuICAgICAgICBjaGlwLnNlbGVjdGVkID0gISF0aGlzLmRhdGFTb3VyY2VbaW5kZXhdPy5TZWxlY3RlZCB8fCBmYWxzZTtcclxuICAgICAgICBpbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXR1cERhdGFTb3VyY2VGb3JJY29uQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwRGF0YVNvdXJjZUZvckljb25DaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhWydDaGFuZ2VJY29uVXBvblNlbGVjdGVkJ10pIHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgeCBvZiB0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgIHguX0ljb24gPSB4Lkljb247XHJcbiAgICAgICAgICB4Lkljb24gPSAhIXguU2VsZWN0ZWQgPyB4LlNlbGVjdGVkSWNvbiA6IHguX0ljb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gRXZlbnRzXHJcbiAgcHVibGljIGNoaXBMaXN0Q2hhbmdlU2VsZWN0aW9uKHNlbGVjdGVkQ2hpcEluZGV4ZXM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRDaGlwcyA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKHgsIGkpID0+IHNlbGVjdGVkQ2hpcEluZGV4ZXMuaW5jbHVkZXMoaSkpO1xyXG4gICAgaWYgKHRoaXMuZGF0YVsnQ2hhbmdlSWNvblVwb25TZWxlY3RlZCddKSB7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpcCBvZiBzZWxlY3RlZENoaXBzKSB7XHJcbiAgICAgICAgY2hpcC5JY29uID0gY2hpcC5TZWxlY3RlZEljb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG5vdFNlbGVjdGVkQ2hpcHMgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKCh4LCBpKSA9PiAhc2VsZWN0ZWRDaGlwSW5kZXhlcy5pbmNsdWRlcyhpKSk7XHJcbiAgICAgIGZvciAoY29uc3QgY2hpcCBvZiBub3RTZWxlY3RlZENoaXBzKSB7XHJcbiAgICAgICAgY2hpcC5JY29uID0gdGhpcy5kYXRhU291cmNlLmZpbmQoeCA9PiB4LkxhYmVsID09PSBjaGlwLkxhYmVsKS5fSWNvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLm9uQ2hhbmdlKG51bGwsIHNlbGVjdGVkQ2hpcHMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdXNlb3ZlcihldmVudDogYW55LCBjaGlwOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuT25Ib3Zlcikge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJvbkhvdmVyXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuT25Ib3ZlcixcclxuICAgICAgICBkYXRhOiB7IHZhbHVlOiB0aGlzLmRhdGFTb3VyY2UsIHNlbGVjdGVkSXRlbTogY2hpcCwgZmllbGQ6IHRoaXMuZGF0YSB9XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlbW92ZShjaGlwOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhU291cmNlLmZpbmRJbmRleCgoYykgPT4gYy5MYWJlbCA9PT0gY2hpcC5MYWJlbCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImUxdGFnLXN0eWxlXCJcclxuICAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZm9ybSwgZGF0YSlcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIlxyXG4gICAgKm5nSWY9XCIhZGF0YS5JbnB1dEZpZWxkQWRkT25zIHx8IGRhdGEuSW5wdXRGaWVsZEFkZE9ucy5sZW5ndGggPD0gMFwiPlxyXG4gICAgPGRpdiBrZW5kb1Rvb2x0aXA+XHJcbiAgICAgIDxrZW5kby1jaGlwLWxpc3QgW3NlbGVjdGlvbl09XCJpc1JlYWRPbmx5ID8gJ25vbmUnIDogKGRhdGEuTXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJ3NpbmdsZScpXCJcclxuICAgICAgICBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiaXNSZWFkT25seSA/ICdub25lJyA6ICdhdXRvJ1wiXHJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cImNoaXBMaXN0Q2hhbmdlU2VsZWN0aW9uKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIlxyXG4gICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGUyXCI+XHJcbiAgICAgICAgPGtlbmRvLWNoaXAgKm5nRm9yPVwibGV0IGNoaXAgb2YgZGF0YVNvdXJjZVwiIFtzZWxlY3RlZF09XCJjaGlwLlNlbGVjdGVkXCIgW25nQ2xhc3NdPVwiY2hpcC5DbGFzc1wiXHJcbiAgICAgICAgICBbcmVtb3ZhYmxlXT1cImNoaXAuUmVtb3ZhYmxlXCIgKHJlbW92ZSk9XCJvblJlbW92ZShjaGlwKVwiXHJcbiAgICAgICAgICAobW91c2VvdmVyKT1cIm1vdXNlb3ZlcigkZXZlbnQsIGNoaXApXCIgKGNvbnRlbnRDbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIGNoaXApXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlM1wiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZTEtY2hpcC1jb250ZW50LWNvbnRhaW5lciBlMXRhZy1zdHlsZTRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNoaXAuTGFiZWxcIiBbaW5uZXJIVE1MXT1cImNoaXAuTGFiZWwgfCBodG1sU2FuaXRpemVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGU1XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxmYS1pY29uICpuZ0lmPVwiY2hpcC5JY29uXCIgW2ljb25dPVwiZ2V0Rm9udEF3ZXNvbWUoY2hpcC5JY29uLCBmb250QXdlU29tZVNlcnZpY2UpXCJcclxuICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIiBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwva2VuZG8tY2hpcD5cclxuICAgICAgPC9rZW5kby1jaGlwLWxpc3Q+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibGFiZWwtZGl2LWNvbnRhaW5lciBlMXRhZy1zdHlsZTVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIlxyXG4gICAgKm5nSWY9XCJkYXRhLklucHV0RmllbGRBZGRPbnMgJiYgZGF0YS5JbnB1dEZpZWxkQWRkT25zLmxlbmd0aCA+IDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGRvbi10b3Atcm93XCIgKm5nSWY9XCJpbnB1dEZpZWxkQWRkT24udG9wXCI+XHJcbiAgICAgIDxhcHAtaW5wdXQtZmllbGQtYWRkb25zIGNsYXNzPVwiYWRkb24tdG9wIGUxdGFnLXN0eWxlNFwiIFtwb3NpdGlvbl09XCIndG9wJ1wiIFthZGRPbl09XCJpbnB1dEZpZWxkQWRkT24udG9wXCJcclxuICAgICAgICBbZGF0YV09XCJkYXRhXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiXHJcbiAgICAgICAgW2NvbXBvbmVudFByb3BlcnRpZXNdPVwiY29tcG9uZW50UHJvcGVydGllc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNFwiPlxyXG4gICAgICA8L2FwcC1pbnB1dC1maWVsZC1hZGRvbnM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LXdpdGhhZGRvbi1jb250YWluZXIgZTF0YWctc3R5bGUxXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCI+XHJcbiAgICAgIDxhcHAtaW5wdXQtZmllbGQtYWRkb25zIGNsYXNzPVwiYWRkb24tbGVmdCBlMXRhZy1zdHlsZTRcIiBbcG9zaXRpb25dPVwiJ2xlZnQnXCIgW2FkZE9uXT1cImlucHV0RmllbGRBZGRPbi5sZWZ0XCJcclxuICAgICAgICBbZGF0YV09XCJkYXRhXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiXHJcbiAgICAgICAgW2NvbXBvbmVudFByb3BlcnRpZXNdPVwiY29tcG9uZW50UHJvcGVydGllc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNFwiPlxyXG4gICAgICA8L2FwcC1pbnB1dC1maWVsZC1hZGRvbnM+XHJcbiAgICAgIDxkaXYga2VuZG9Ub29sdGlwPlxyXG4gICAgICAgIDxrZW5kby1jaGlwLWxpc3QgW3NlbGVjdGlvbl09XCJpc1JlYWRPbmx5ID8gJ25vbmUnIDogKGRhdGEuTXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJ3NpbmdsZScpXCJcclxuICAgICAgICBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiaXNSZWFkT25seSA/ICdub25lJyA6ICdhdXRvJ1wiXHJcbiAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiY2hpcExpc3RDaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiXHJcbiAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlMlwiPlxyXG4gICAgICAgICAgPGtlbmRvLWNoaXAgKm5nRm9yPVwibGV0IGNoaXAgb2YgZGF0YVNvdXJjZVwiIFtzZWxlY3RlZF09XCJjaGlwLlNlbGVjdGVkXCIgW25nQ2xhc3NdPVwiY2hpcC5DbGFzc1wiXHJcbiAgICAgICAgICAgIFtyZW1vdmFibGVdPVwiY2hpcC5SZW1vdmFibGVcIiAocmVtb3ZlKT1cIm9uUmVtb3ZlKGNoaXApXCJcclxuICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJtb3VzZW92ZXIoJGV2ZW50LCBjaGlwKVwiIChjb250ZW50Q2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LCBjaGlwKVwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlM1wiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlMS1jaGlwLWNvbnRlbnQtY29udGFpbmVyIGUxdGFnLXN0eWxlNFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjaGlwLkxhYmVsXCIgW2lubmVySFRNTF09XCJjaGlwLkxhYmVsIHwgaHRtbFNhbml0aXplXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGU1XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gKm5nSWY9XCJjaGlwLkljb25cIiBbaWNvbl09XCJnZXRGb250QXdlc29tZShjaGlwLkljb24sIGZvbnRBd2VTb21lU2VydmljZSlcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTZcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9rZW5kby1jaGlwPlxyXG4gICAgICAgIDwva2VuZG8tY2hpcC1saXN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGFwcC1pbnB1dC1maWVsZC1hZGRvbnMgY2xhc3M9XCJhZGRvbi1yaWdodCBlMXRhZy1zdHlsZTRcIiBbcG9zaXRpb25dPVwiJ3JpZ2h0J1wiIFthZGRPbl09XCJpbnB1dEZpZWxkQWRkT24ucmlnaHRcIlxyXG4gICAgICAgIFtkYXRhXT1cImRhdGFcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCIgW2NvbnRhaW5lckZpZWxkXT1cImNvbnRhaW5lckZpZWxkXCJcclxuICAgICAgICBbY29tcG9uZW50UHJvcGVydGllc109XCJjb21wb25lbnRQcm9wZXJ0aWVzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCI+XHJcbiAgICAgIDwvYXBwLWlucHV0LWZpZWxkLWFkZG9ucz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFkZG9uLWJvdHRvbS1yb3dcIiAqbmdJZj1cImlucHV0RmllbGRBZGRPbi5ib3R0b21cIj5cclxuICAgICAgPGFwcC1pbnB1dC1maWVsZC1hZGRvbnMgY2xhc3M9XCJhZGRvbi1ib3R0b20gZTF0YWctc3R5bGU0XCIgW3Bvc2l0aW9uXT1cIidib3R0b20nXCIgW2FkZE9uXT1cImlucHV0RmllbGRBZGRPbi5ib3R0b21cIlxyXG4gICAgICAgIFtkYXRhXT1cImRhdGFcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCIgW2NvbnRhaW5lckZpZWxkXT1cImNvbnRhaW5lckZpZWxkXCJcclxuICAgICAgICBbY29tcG9uZW50UHJvcGVydGllc109XCJjb21wb25lbnRQcm9wZXJ0aWVzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCI+XHJcbiAgICAgIDwvYXBwLWlucHV0LWZpZWxkLWFkZG9ucz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|