@libs-ui/components-inputs-multi-language 0.2.356-24 → 0.2.356-26
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/esm2022/interfaces/multi-language.interface.mjs +1 -1
- package/esm2022/items/items.component.mjs +26 -50
- package/esm2022/multi-language.component.mjs +15 -31
- package/fesm2022/libs-ui-components-inputs-multi-language.mjs +38 -78
- package/fesm2022/libs-ui-components-inputs-multi-language.mjs.map +1 -1
- package/interfaces/multi-language.interface.d.ts +4 -0
- package/items/items.component.d.ts +5 -15
- package/multi-language.component.d.ts +5 -8
- package/package.json +10 -10
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaW50ZXJmYWNlcy9tdWx0aS1sYW5ndWFnZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElWYWxpZFJlcXVpcmVkIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhSXRlbSB7XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgaGVhZGVyPzogSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXI7XG4gIGlzT25lVmFsdWU/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVJbnB1dD86IHN0cmluZztcbiAgdGl0bGVGaWVsZD86IHN0cmluZztcbiAgaXNDb3VudENoYXJhY3RlcnM/OiBib29sZWFuO1xuICB2YWxpZFJlcXVpcmVkPzogSVZhbGlkUmVxdWlyZWQ7XG4gIGRhdGFNdWx0aUxhbmd1YWdlPzogSURhdGFNdWx0aUxhbmd1YWdlO1xuICB2YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbiAgdmFsaWRSZXF1aXJlZERlZmF1bHQ/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaW50ZXJmYWNlcy9tdWx0aS1sYW5ndWFnZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElWYWxpZFJlcXVpcmVkIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhSXRlbSB7XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgaGVhZGVyPzogSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXI7XG4gIGlzT25lVmFsdWU/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVJbnB1dD86IHN0cmluZztcbiAgdGl0bGVGaWVsZD86IHN0cmluZztcbiAgaXNDb3VudENoYXJhY3RlcnM/OiBib29sZWFuO1xuICB2YWxpZFJlcXVpcmVkPzogSVZhbGlkUmVxdWlyZWQ7XG4gIGRhdGFNdWx0aUxhbmd1YWdlPzogSURhdGFNdWx0aUxhbmd1YWdlO1xuICB2YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbiAgdmFsaWRSZXF1aXJlZERlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbiAgbWluSGVpZ2h0RWRpdG9yQ29udGVudERlZmF1bHQ/OiBudW1iZXI7XG4gIG1heEhlaWdodEVkaXRvckNvbnRlbnREZWZhdWx0PzogbnVtYmVyO1xuICBoZWlnaHRFZGl0b3JDb250ZW50RGVmYXVsdD86IG51bWJlcjtcbiAgcmVzaXplPzogJ3ZlcnRpY2FsJyB8ICdub25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YU11bHRpTGFuZ3VhZ2Uge1xuICBbcGFyYW06IHN0cmluZ106IElEYXRhTGFuZ3VhZ2UgfCBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFMYW5ndWFnZSB7XG4gIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudE11bHRpTGFuZ3VhZ2Uge1xuICBhY3Rpb246ICdhZGQnIHwgJ3JlbW92ZSc7XG4gIGRhdGE6IElEYXRhTXVsdGlMYW5ndWFnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29uZmlnTXVsdGlMYW5ndWFnZUhlYWRlciB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpc1Nob3dJbnB1dD86IGJvb2xlYW47XG4gIHZhbGlkUmVxdWlyZWQ/OiB7XG4gICAgaXNSZXF1aXJlZD86IGJvb2xlYW47XG4gIH07XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBkYXRhRGVmYXVsdD86XG4gICAgfCBJRGF0YU11bHRpTGFuZ3VhZ2VcbiAgICB8IHtcbiAgICAgICAgdG90YWw/OiBJRGF0YU11bHRpTGFuZ3VhZ2U7XG4gICAgICB9O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1ZJRVdfTVVMVElfTEFOR1VBR0UgPSAndGV4dCcgfCAnaW50ZWdlcicgfCAnbnVtYmVyJyB8ICdlZGl0b3InIHwgJ2Zsb2F0JyB8ICdiaWdpbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gIGNoZWNrSXNWYWxpZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgZ2V0RGF0YTogKCkgPT4gSURhdGFNdWx0aUxhbmd1YWdlW10gfCBJRGF0YU11bHRpTGFuZ3VhZ2UgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUN1cnJlbmN5VW5pdCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, effect, input, model, output, signal, untracked } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, effect, input, model, output, signal, untracked, viewChildren } from '@angular/core';
|
|
2
2
|
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
3
3
|
import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';
|
|
4
4
|
import { cloneDeep, isNil, UtilsCache } from '@libs-ui/utils';
|
|
@@ -14,10 +14,8 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
14
14
|
validRequired = signal({ isRequired: false });
|
|
15
15
|
validRequiredWhenInputHasValue = signal(undefined);
|
|
16
16
|
dataHeader = signal(undefined);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/** Một control multi-language cho mỗi dòng (theo index). */
|
|
20
|
-
multiLanguageByRow = signal(new Map());
|
|
17
|
+
inputComponentRefs = viewChildren(LibsUiComponentsInputsValidComponent);
|
|
18
|
+
multiLanguageComponentRefs = viewChildren(LibsUiComponentsInputsMultiLanguageComponent);
|
|
21
19
|
configItems = input([]);
|
|
22
20
|
dataMultiLanguage = model([{}]);
|
|
23
21
|
zIndex = input();
|
|
@@ -29,8 +27,6 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
29
27
|
maxValueNumber = input();
|
|
30
28
|
onlyAcceptNegativeValue = input();
|
|
31
29
|
classIconAddLanguage = input('libs-ui-icon-add', { transform: (value) => value || 'libs-ui-icon-add' });
|
|
32
|
-
outClick = output();
|
|
33
|
-
outFunctionControl = output();
|
|
34
30
|
outChangeValue = output();
|
|
35
31
|
constructor() {
|
|
36
32
|
effect(() => {
|
|
@@ -53,9 +49,6 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
53
49
|
});
|
|
54
50
|
});
|
|
55
51
|
}
|
|
56
|
-
ngOnInit() {
|
|
57
|
-
this.outFunctionControl.emit(this.FunctionsControl);
|
|
58
|
-
}
|
|
59
52
|
get FunctionsControl() {
|
|
60
53
|
return {
|
|
61
54
|
checkIsValid: this.validate.bind(this),
|
|
@@ -65,65 +58,48 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
65
58
|
/**
|
|
66
59
|
* Mỗi dòng cần một bản `data` (shallow copy từng `IDataItem`) để multi-language con không dùng chung một mảng tham chiếu.
|
|
67
60
|
*/
|
|
68
|
-
syncDataMultiKey() {
|
|
61
|
+
syncDataMultiKey(indexRemove) {
|
|
69
62
|
const templates = this.configItems();
|
|
70
63
|
const rowCount = this.dataMultiLanguage().length;
|
|
71
64
|
if (!templates?.length) {
|
|
72
65
|
this.dataMultiKey.set([]);
|
|
73
66
|
return;
|
|
74
67
|
}
|
|
75
|
-
this.dataMultiKey
|
|
68
|
+
if (this.dataMultiKey().length === rowCount) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (this.dataMultiKey().length > rowCount && !isNil(indexRemove)) {
|
|
72
|
+
this.dataMultiKey.update((data) => {
|
|
73
|
+
data.splice(indexRemove, 1);
|
|
74
|
+
return data;
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const newData = Array.from({ length: rowCount - this.dataMultiKey().length }, () => templates.map((c) => cloneDeep(c)));
|
|
79
|
+
this.dataMultiKey.update((data) => [...data, ...newData]);
|
|
76
80
|
}
|
|
77
81
|
handlerAdd() {
|
|
78
82
|
const header = this.configHeader();
|
|
79
83
|
const dataLanguage = header?.dataDefault ? cloneDeep(header.dataDefault) : {};
|
|
80
84
|
this.dataMultiLanguage.update((items) => [...items, dataLanguage]);
|
|
81
|
-
this.syncDataMultiKey();
|
|
82
85
|
this.handlerChangeValue();
|
|
83
86
|
}
|
|
84
87
|
handlerRemove(index) {
|
|
85
88
|
this.dataMultiLanguage.update((items) => items.filter((_, i) => i !== index));
|
|
86
|
-
this.
|
|
87
|
-
this.syncDataMultiKey();
|
|
89
|
+
this.syncDataMultiKey(index);
|
|
88
90
|
this.handlerChangeValue();
|
|
89
91
|
}
|
|
90
|
-
reindexRowMapsAfterRemove(removedIndex) {
|
|
91
|
-
const reindex = (m) => {
|
|
92
|
-
const next = new Map();
|
|
93
|
-
m.forEach((v, k) => {
|
|
94
|
-
if (k < removedIndex) {
|
|
95
|
-
next.set(k, v);
|
|
96
|
-
}
|
|
97
|
-
else if (k > removedIndex) {
|
|
98
|
-
next.set(k - 1, v);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
return next;
|
|
102
|
-
};
|
|
103
|
-
this.inputValidByRow.update((m) => reindex(m));
|
|
104
|
-
this.multiLanguageByRow.update((m) => reindex(m));
|
|
105
|
-
}
|
|
106
|
-
handlerClick(e) {
|
|
107
|
-
e.stopPropagation();
|
|
108
|
-
this.outClick.emit();
|
|
109
|
-
}
|
|
110
|
-
handlerFunctionsControlInputLanguage(event, rowIndex) {
|
|
111
|
-
this.multiLanguageByRow.update((m) => new Map(m).set(rowIndex, event));
|
|
112
|
-
}
|
|
113
|
-
handlerFunctionsControlInputValid(event, rowIndex) {
|
|
114
|
-
this.inputValidByRow.update((m) => new Map(m).set(rowIndex, event));
|
|
115
|
-
}
|
|
116
92
|
async validate() {
|
|
117
93
|
let valid = true;
|
|
118
94
|
this.applyValidRequiredWhenHeaderHasValue();
|
|
119
95
|
const rowCount = this.dataMultiLanguage().length;
|
|
120
96
|
for (let i = 0; i < rowCount; i++) {
|
|
121
|
-
const inputCtrl = this.
|
|
122
|
-
if (inputCtrl && !(await inputCtrl.checkIsValid())) {
|
|
97
|
+
const inputCtrl = this.inputComponentRefs()[i];
|
|
98
|
+
if (inputCtrl && !(await inputCtrl.FunctionsControl.checkIsValid())) {
|
|
123
99
|
valid = false;
|
|
124
100
|
}
|
|
125
|
-
const mlCtrl = this.
|
|
126
|
-
if (mlCtrl && !(await mlCtrl.checkIsValid())) {
|
|
101
|
+
const mlCtrl = this.multiLanguageComponentRefs()[i];
|
|
102
|
+
if (mlCtrl && !(await mlCtrl.FunctionsControl.checkIsValid())) {
|
|
127
103
|
valid = false;
|
|
128
104
|
}
|
|
129
105
|
}
|
|
@@ -133,8 +109,8 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
133
109
|
const rowCount = this.dataMultiLanguage().length;
|
|
134
110
|
const out = [];
|
|
135
111
|
for (let i = 0; i < rowCount; i++) {
|
|
136
|
-
const ctrl = this.
|
|
137
|
-
out.push((ctrl?.getData() ?? {}));
|
|
112
|
+
const ctrl = this.multiLanguageComponentRefs()[i];
|
|
113
|
+
out.push((ctrl?.FunctionsControl.getData() ?? {}));
|
|
138
114
|
}
|
|
139
115
|
return out;
|
|
140
116
|
}
|
|
@@ -152,10 +128,10 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
152
128
|
}
|
|
153
129
|
}
|
|
154
130
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsMultiLanguageItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
155
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsMultiLanguageItemsComponent, isStandalone: true, selector: "libs_ui-components-inputs-multi_language-items", inputs: { configItems: { classPropertyName: "configItems", publicName: "configItems", isSignal: true, isRequired: false, transformFunction: null }, dataMultiLanguage: { classPropertyName: "dataMultiLanguage", publicName: "dataMultiLanguage", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreAdd: { classPropertyName: "ignoreAdd", publicName: "ignoreAdd", isSignal: true, isRequired: false, transformFunction: null }, labelAddItem: { classPropertyName: "labelAddItem", publicName: "labelAddItem", isSignal: true, isRequired: false, transformFunction: null }, singleLanguage: { classPropertyName: "singleLanguage", publicName: "singleLanguage", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, classIconAddLanguage: { classPropertyName: "classIconAddLanguage", publicName: "classIconAddLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataMultiLanguage: "dataMultiLanguageChange",
|
|
131
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsMultiLanguageItemsComponent, isStandalone: true, selector: "libs_ui-components-inputs-multi_language-items", inputs: { configItems: { classPropertyName: "configItems", publicName: "configItems", isSignal: true, isRequired: false, transformFunction: null }, dataMultiLanguage: { classPropertyName: "dataMultiLanguage", publicName: "dataMultiLanguage", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreAdd: { classPropertyName: "ignoreAdd", publicName: "ignoreAdd", isSignal: true, isRequired: false, transformFunction: null }, labelAddItem: { classPropertyName: "labelAddItem", publicName: "labelAddItem", isSignal: true, isRequired: false, transformFunction: null }, singleLanguage: { classPropertyName: "singleLanguage", publicName: "singleLanguage", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, classIconAddLanguage: { classPropertyName: "classIconAddLanguage", publicName: "classIconAddLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataMultiLanguage: "dataMultiLanguageChange", outChangeValue: "outChangeValue" }, viewQueries: [{ propertyName: "inputComponentRefs", predicate: LibsUiComponentsInputsValidComponent, descendants: true, isSignal: true }, { propertyName: "multiLanguageComponentRefs", predicate: LibsUiComponentsInputsMultiLanguageComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col gap-[8px]\">\n @for (item of dataMultiLanguage(); track item) {\n <div class=\"libs-ui-border-general w-full rounded-[4px]\">\n @if (configHeader(); as configHeader) {\n <div class=\"flex bg-[var(--libs-ui-color-light-2)] p-[12px] gap-[16px]\">\n <div class=\"flex gap-[8px] w-full\">\n <div class=\"libs-ui-font-h6m h-[32px] flex items-center shrink-0\">\n @let constHtmlTitle = configHeader.title ?? ' ';\n {{ constHtmlTitle | translate }}\n </div>\n <div class=\"w-full\">\n @if (configHeader.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: item; as itemMap) {\n <libs_ui-components-inputs-valid\n [(item)]=\"itemMap\"\n [dataType]=\"configHeader.type && configHeader.type === 'number' ? 'int' : 'string'\"\n [fieldNameBind]=\"langDefault()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"{ isRequired: configItems()[0].validRequired?.isRequired ?? false }\"\n [placeholder]=\"'i18n_enter_value'\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [fixedFloat]=\"15\"\n (outValueChange)=\"handlerChangeValue($event, 'input')\" />\n }\n </div>\n </div>\n @if (!$first) {\n <div class=\"flex items-center h-[32px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemove($index)\" />\n </div>\n }\n </div>\n <div class=\"p-[12px] flex w-full\">\n <libs_ui-components-inputs-multi_language\n class=\"w-full\"\n [singleLanguage]=\"singleLanguage()\"\n [titleField]=\"configItems()[0].titleField || ''\"\n [keyHeader]=\"configHeader.keyBindData ?? ''\"\n [placeholder]=\"'i18n_import_content'\"\n [classIncludeValue]=\"'libs-ui-font-h5r'\"\n [data]=\"dataMultiKey()[$index]\"\n [validRequired]=\"validRequiredWhenInputHasValue() || configItems()[0].validRequired\"\n [dataLanguage]=\"item\"\n [zIndex]=\"zIndex() ?? 1203\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [classIconAddLanguage]=\"classIconAddLanguage()\"\n [viewType]=\"configItems()[0].type ? (configItems()[0].type === 'number' ? 'number' : configItems()[0].type === 'float' ? 'float' : 'text') : 'text'\"\n (outEventMultiLanguage)=\"handlerChangeValue()\"\n (outChangeValueInput)=\"handlerChangeValue()\" />\n </div>\n }\n </div>\n }\n @if (!ignoreAdd()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classLabel]=\"'libs-ui-font-h6mi'\"\n [classInclude]=\"'!px-0 !py-[2px]'\"\n [label]=\"labelAddItem() || ''\"\n (outClick)=\"handlerAdd()\" />\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageGetItemPipe, name: "LibsUiComponentsInputsMultiLanguageGetItemPipe" }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "ignoreShowMessageError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsInputsMultiLanguageComponent, selector: "libs_ui-components-inputs-multi_language", inputs: ["optionsLanguage", "zIndex", "viewType", "singleLanguage", "data", "validRequired", "ignoreAdd", "titleField", "keyHeader", "textArea", "placeholder", "extendClass", "extendClassContent", "viewPosition", "ignoreRemove", "validMaxLength", "validMinLength", "countCharacters", "viewContent", "classIncludeKey", "classIncludeValue", "dataLanguage", "readonly", "acceptNegativeValue", "valueUpDownNumber", "maxValueNumber", "onlyAcceptNegativeValue", "validOneDefaultMultiLanguage", "classIconAddLanguage", "validPattern"], outputs: ["dataChange", "ignoreAddChange", "extendClassChange", "dataLanguageChange", "outEventMultiLanguage", "outChangeTypeLanguage", "outChangeValueInput"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
156
132
|
}
|
|
157
133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsMultiLanguageItemsComponent, decorators: [{
|
|
158
134
|
type: Component,
|
|
159
|
-
args: [{ selector: 'libs_ui-components-inputs-multi_language-items', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsMultiLanguageGetItemPipe, LibsUiComponentsInputsValidComponent, LibsUiComponentsInputsMultiLanguageComponent, LibsUiComponentsButtonsButtonComponent], template: "<div class=\"flex flex-col gap-[8px]\">\n @for (item of dataMultiLanguage(); track item) {\n <div class=\"libs-ui-border-general w-full rounded-[4px]\">\n @if (configHeader(); as configHeader) {\n <div class=\"flex bg-[var(--libs-ui-color-light-2)] p-[12px] gap-[16px]\">\n <div class=\"flex
|
|
135
|
+
args: [{ selector: 'libs_ui-components-inputs-multi_language-items', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsMultiLanguageGetItemPipe, LibsUiComponentsInputsValidComponent, LibsUiComponentsInputsMultiLanguageComponent, LibsUiComponentsButtonsButtonComponent], template: "<div class=\"flex flex-col gap-[8px]\">\n @for (item of dataMultiLanguage(); track item) {\n <div class=\"libs-ui-border-general w-full rounded-[4px]\">\n @if (configHeader(); as configHeader) {\n <div class=\"flex bg-[var(--libs-ui-color-light-2)] p-[12px] gap-[16px]\">\n <div class=\"flex gap-[8px] w-full\">\n <div class=\"libs-ui-font-h6m h-[32px] flex items-center shrink-0\">\n @let constHtmlTitle = configHeader.title ?? ' ';\n {{ constHtmlTitle | translate }}\n </div>\n <div class=\"w-full\">\n @if (configHeader.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: item; as itemMap) {\n <libs_ui-components-inputs-valid\n [(item)]=\"itemMap\"\n [dataType]=\"configHeader.type && configHeader.type === 'number' ? 'int' : 'string'\"\n [fieldNameBind]=\"langDefault()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"{ isRequired: configItems()[0].validRequired?.isRequired ?? false }\"\n [placeholder]=\"'i18n_enter_value'\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [fixedFloat]=\"15\"\n (outValueChange)=\"handlerChangeValue($event, 'input')\" />\n }\n </div>\n </div>\n @if (!$first) {\n <div class=\"flex items-center h-[32px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemove($index)\" />\n </div>\n }\n </div>\n <div class=\"p-[12px] flex w-full\">\n <libs_ui-components-inputs-multi_language\n class=\"w-full\"\n [singleLanguage]=\"singleLanguage()\"\n [titleField]=\"configItems()[0].titleField || ''\"\n [keyHeader]=\"configHeader.keyBindData ?? ''\"\n [placeholder]=\"'i18n_import_content'\"\n [classIncludeValue]=\"'libs-ui-font-h5r'\"\n [data]=\"dataMultiKey()[$index]\"\n [validRequired]=\"validRequiredWhenInputHasValue() || configItems()[0].validRequired\"\n [dataLanguage]=\"item\"\n [zIndex]=\"zIndex() ?? 1203\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [classIconAddLanguage]=\"classIconAddLanguage()\"\n [viewType]=\"configItems()[0].type ? (configItems()[0].type === 'number' ? 'number' : configItems()[0].type === 'float' ? 'float' : 'text') : 'text'\"\n (outEventMultiLanguage)=\"handlerChangeValue()\"\n (outChangeValueInput)=\"handlerChangeValue()\" />\n </div>\n }\n </div>\n }\n @if (!ignoreAdd()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classLabel]=\"'libs-ui-font-h6mi'\"\n [classInclude]=\"'!px-0 !py-[2px]'\"\n [label]=\"labelAddItem() || ''\"\n (outClick)=\"handlerAdd()\" />\n }\n</div>\n" }]
|
|
160
136
|
}], ctorParameters: () => [] });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQW1ELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekksT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNGLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFVeEYsTUFBTSxPQUFPLGlEQUFpRDtJQUNsRCxZQUFZLEdBQUcsTUFBTSxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUN6QyxXQUFXLEdBQUcsTUFBTSxDQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELFlBQVksR0FBRyxNQUFNLENBQXlDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLGFBQWEsR0FBRyxNQUFNLENBQWlCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFD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Q0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO3dHQWhLVSxpREFBaUQ7NEZBQWpELGlEQUFpRCw0M0RDakI5RCwycUlBc0ZBLDJDRHZFWSxlQUFlLHVGQUFFLDhDQUE4Qyx1RkFBRSxvQ0FBb0MsZzNEQUFFLDRDQUE0Qyw2d0JBQUUsc0NBQXNDOzs0RkFFMUwsaURBQWlEO2tCQVI3RCxTQUFTOytCQUVFLGdEQUFnRCxjQUU5QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsOENBQThDLEVBQUUsb0NBQW9DLEVBQUUsNENBQTRDLEVBQUUsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIGlucHV0LCBtb2RlbCwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVZhbGlkUmVxdWlyZWQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNOaWwsIFV0aWxzQ2FjaGUgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElDb25maWdNdWx0aUxhbmd1YWdlSGVhZGVyLCBJRGF0YUl0ZW0sIElEYXRhTXVsdGlMYW5ndWFnZSwgSUlucHV0TXVsdGlMYW5ndWFnZUZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tdWx0aS1sYW5ndWFnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1sYW5ndWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2dldC1pdGVtLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLW11bHRpX2xhbmd1YWdlLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2l0ZW1zLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGUsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VJdGVtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb3RlY3RlZCBkYXRhTXVsdGlLZXkgPSBzaWduYWw8SURhdGFJdGVtW11bXT4oW10pO1xuICBwcm90ZWN0ZWQgbGFuZ0RlZmF1bHQgPSBzaWduYWw8c3RyaW5nPihVdGlsc0NhY2hlLmdldExhbmcoKSk7XG4gIHByb3RlY3RlZCBjb25maWdIZWFkZXIgPSBzaWduYWw8SUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCB2YWxpZFJlcXVpcmVkID0gc2lnbmFsPElWYWxpZFJlcXVpcmVkPih7IGlzUmVxdWlyZWQ6IGZhbHNlIH0pO1xuICBwcm90ZWN0ZWQgdmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlID0gc2lnbmFsPElWYWxpZFJlcXVpcmVkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgZGF0YUhlYWRlciA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIE3hu5l0IGNvbnRyb2wgdmFsaWQgaGVhZGVyIGNobyBt4buXaSBkw7JuZyAodGhlbyBpbmRleCkuICovXG4gIHByaXZhdGUgaW5wdXRWYWxpZEJ5Um93ID0gc2lnbmFsPE1hcDxudW1iZXIsIElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+PihuZXcgTWFwKCkpO1xuICAvKiogTeG7mXQgY29udHJvbCBtdWx0aS1sYW5ndWFnZSBjaG8gbeG7l2kgZMOybmcgKHRoZW8gaW5kZXgpLiAqL1xuICBwcml2YXRlIG11bHRpTGFuZ3VhZ2VCeVJvdyA9IHNpZ25hbDxNYXA8bnVtYmVyLCBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQ+PihuZXcgTWFwKCkpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ0l0ZW1zID0gaW5wdXQ8QXJyYXk8SURhdGFJdGVtPj4oW10pO1xuICByZWFkb25seSBkYXRhTXVsdGlMYW5ndWFnZSA9IG1vZGVsPEFycmF5PElEYXRhTXVsdGlMYW5ndWFnZT4+KFt7fV0pO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUFkZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQWRkSXRlbSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2luZ2xlTGFuZ3VhZ2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsdWVVcERvd25OdW1iZXIgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1heFZhbHVlTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSWNvbkFkZExhbmd1YWdlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdsaWJzLXVpLWljb24tYWRkJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJ2xpYnMtdWktaWNvbi1hZGQnIH0pO1xuXG4gIHJlYWRvbmx5IG91dENsaWNrID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbCA9IG91dHB1dDxJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5jb25maWdJdGVtcygpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWdIZWFkZXIuc2V0KGl0ZW1zPy5bMF0/LmhlYWRlcik7XG4gICAgICAgIHRoaXMudmFsaWRSZXF1aXJlZC5zZXQoaXRlbXM/LlswXT8udmFsaWRSZXF1aXJlZCA/PyB7IGlzUmVxdWlyZWQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoIXJvd3M/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuY29uZmlnSGVhZGVyKCk7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbDogSURhdGFNdWx0aUxhbmd1YWdlID0gaGVhZGVyPy5kYXRhRGVmYXVsdCA/IChjbG9uZURlZXAoaGVhZGVyLmRhdGFEZWZhdWx0KSBhcyBJRGF0YU11bHRpTGFuZ3VhZ2UpIDoge307XG4gICAgICAgICAgdGhpcy5kYXRhTXVsdGlMYW5ndWFnZS5zZXQoW2luaXRpYWxdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbkNvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICB9XG5cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgZ2V0RGF0YTogdGhpcy5nZXREYXRhLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBN4buXaSBkw7JuZyBj4bqnbiBt4buZdCBi4bqjbiBgZGF0YWAgKHNoYWxsb3cgY29weSB04burbmcgYElEYXRhSXRlbWApIMSR4buDIG11bHRpLWxhbmd1YWdlIGNvbiBraMO0bmcgZMO5bmcgY2h1bmcgbeG7mXQgbeG6o25nIHRoYW0gY2hp4bq/dS5cbiAgICovXG4gIHByaXZhdGUgc3luY0RhdGFNdWx0aUtleSgpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSB0aGlzLmNvbmZpZ0l0ZW1zKCk7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoO1xuICAgIGlmICghdGVtcGxhdGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0YU11bHRpS2V5LnNldChbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGF0YU11bHRpS2V5LnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiByb3dDb3VudCB9LCAoKSA9PiB0ZW1wbGF0ZXMubWFwKChjKSA9PiAoeyAuLi5jIH0pKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJBZGQoKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5jb25maWdIZWFkZXIoKTtcbiAgICBjb25zdCBkYXRhTGFuZ3VhZ2U6IElEYXRhTXVsdGlMYW5ndWFnZSA9IGhlYWRlcj8uZGF0YURlZmF1bHQgPyAoY2xvbmVEZWVwKGhlYWRlci5kYXRhRGVmYXVsdCkgYXMgSURhdGFNdWx0aUxhbmd1YWdlKSA6IHt9O1xuICAgIHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCBkYXRhTGFuZ3VhZ2VdKTtcbiAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoKTtcbiAgICB0aGlzLmhhbmRsZXJDaGFuZ2VWYWx1ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZW1vdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UudXBkYXRlKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpO1xuICAgIHRoaXMucmVpbmRleFJvd01hcHNBZnRlclJlbW92ZShpbmRleCk7XG4gICAgdGhpcy5zeW5jRGF0YU11bHRpS2V5KCk7XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVpbmRleFJvd01hcHNBZnRlclJlbW92ZShyZW1vdmVkSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlaW5kZXggPSA8VD4obTogTWFwPG51bWJlciwgVD4pOiBNYXA8bnVtYmVyLCBUPiA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IE1hcDxudW1iZXIsIFQ+KCk7XG4gICAgICBtLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgaWYgKGsgPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgICBuZXh0LnNldChrLCB2KTtcbiAgICAgICAgfSBlbHNlIGlmIChrID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgICAgbmV4dC5zZXQoayAtIDEsIHYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gICAgdGhpcy5pbnB1dFZhbGlkQnlSb3cudXBkYXRlKChtKSA9PiByZWluZGV4KG0pKTtcbiAgICB0aGlzLm11bHRpTGFuZ3VhZ2VCeVJvdy51cGRhdGUoKG0pID0+IHJlaW5kZXgobSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGljayhlOiBFdmVudCk6IHZvaWQge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5vdXRDbGljay5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2xJbnB1dExhbmd1YWdlKGV2ZW50OiBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpTGFuZ3VhZ2VCeVJvdy51cGRhdGUoKG0pID0+IG5ldyBNYXAobSkuc2V0KHJvd0luZGV4LCBldmVudCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbnNDb250cm9sSW5wdXRWYWxpZChldmVudDogSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRWYWxpZEJ5Um93LnVwZGF0ZSgobSkgPT4gbmV3IE1hcChtKS5zZXQocm93SW5kZXgsIGV2ZW50KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgdGhpcy5hcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTtcbiAgICBjb25zdCByb3dDb3VudCA9IHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UoKS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBpbnB1dEN0cmwgPSB0aGlzLmlucHV0VmFsaWRCeVJvdygpLmdldChpKTtcbiAgICAgIGlmIChpbnB1dEN0cmwgJiYgIShhd2FpdCBpbnB1dEN0cmwuY2hlY2tJc1ZhbGlkKCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBtbEN0cmwgPSB0aGlzLm11bHRpTGFuZ3VhZ2VCeVJvdygpLmdldChpKTtcbiAgICAgIGlmIChtbEN0cmwgJiYgIShhd2FpdCBtbEN0cmwuY2hlY2tJc1ZhbGlkKCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREYXRhKCk6IElEYXRhTXVsdGlMYW5ndWFnZVtdIHtcbiAgICBjb25zdCByb3dDb3VudCA9IHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UoKS5sZW5ndGg7XG4gICAgY29uc3Qgb3V0OiBJRGF0YU11bHRpTGFuZ3VhZ2VbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgY3RybCA9IHRoaXMubXVsdGlMYW5ndWFnZUJ5Um93KCkuZ2V0KGkpO1xuICAgICAgb3V0LnB1c2goKGN0cmw/LmdldERhdGEoKSA/PyB7fSkgYXMgSURhdGFNdWx0aUxhbmd1YWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVmFsdWUodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIsIHR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ2lucHV0Jykge1xuICAgICAgdGhpcy5kYXRhSGVhZGVyLnNldCh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5VmFsaWRSZXF1aXJlZFdoZW5IZWFkZXJIYXNWYWx1ZSgpO1xuICAgIHRoaXMub3V0Q2hhbmdlVmFsdWUuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUuc2V0KHVuZGVmaW5lZCk7XG4gICAgaWYgKCFpc05pbCh0aGlzLmRhdGFIZWFkZXIoKSkpIHtcbiAgICAgIHRoaXMudmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlLnNldCh7IGlzUmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtWzhweF1cIj5cbiAgQGZvciAoaXRlbSBvZiBkYXRhTXVsdGlMYW5ndWFnZSgpOyB0cmFjayBpdGVtKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktYm9yZGVyLWdlbmVyYWwgdy1mdWxsIHJvdW5kZWQtWzRweF1cIj5cbiAgICAgIEBpZiAoY29uZmlnSGVhZGVyKCk7IGFzIGNvbmZpZ0hlYWRlcikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBiZy1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0yKV0gcC1bMTJweF0gZ2FwLVsxNnB4XVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzhweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2bSBoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBzaHJpbmstMFwiPlxuICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbFRpdGxlID0gY29uZmlnSGVhZGVyLnRpdGxlID8/ICcgJztcbiAgICAgICAgICAgICAge3sgY29uc3RIdG1sVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICBAaWYgKGNvbmZpZ0hlYWRlci5rZXlCaW5kRGF0YSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGU6IGl0ZW07IGFzIGl0ZW1NYXApIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtTWFwXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCJjb25maWdIZWFkZXIudHlwZSAmJiBjb25maWdIZWFkZXIudHlwZSA9PT0gJ251bWJlcicgPyAnaW50JyA6ICdzdHJpbmcnXCJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cImxhbmdEZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgW2VtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRSZXF1aXJlZF09XCJ7IGlzUmVxdWlyZWQ6IGNvbmZpZ0l0ZW1zKClbMF0udmFsaWRSZXF1aXJlZD8uaXNSZXF1aXJlZCA/PyBmYWxzZSB9XCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaTE4bl9lbnRlcl92YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8/IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cInZhbHVlVXBEb3duTnVtYmVyKCkgfHwgMVwiXG4gICAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwibWF4VmFsdWVOdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgICBbZml4ZWRGbG9hdF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKCRldmVudCwgJ2lucHV0JylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2xJbnB1dFZhbGlkKCRldmVudCwgJGluZGV4KVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoISRmaXJzdCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtWzMycHhdXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkN1c3RvbV09XCJ7XG4gICAgICAgICAgICAgICAgICBjb25maWdTdGVwQ29sb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyMwNzE2MzEnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2hvdmVyOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICAgICAgICAgIHRleHRfYWN0aXZlOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJzA3MTYzMScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgcm9vdENvbG9yOiAnIzA3MTYzMScsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9kZWxldGUnLCB6SW5kZXg6IDEyMDUgfSB9XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlbW92ZSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclJlbW92ZSgkaW5kZXgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLVsxMnB4XSBmbGV4IHctZnVsbFwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLW11bHRpX2xhbmd1YWdlXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICBbc2luZ2xlTGFuZ3VhZ2VdPVwic2luZ2xlTGFuZ3VhZ2UoKVwiXG4gICAgICAgICAgICBbdGl0bGVGaWVsZF09XCJjb25maWdJdGVtcygpWzBdLnRpdGxlRmllbGQgfHwgJydcIlxuICAgICAgICAgICAgW2tleUhlYWRlcl09XCJjb25maWdIZWFkZXIua2V5QmluZERhdGEgPz8gJydcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpMThuX2ltcG9ydF9jb250ZW50J1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlVmFsdWVdPVwiJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImRhdGFNdWx0aUtleSgpWyRpbmRleF1cIlxuICAgICAgICAgICAgW3ZhbGlkUmVxdWlyZWRdPVwidmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlKCkgfHwgY29uZmlnSXRlbXMoKVswXS52YWxpZFJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtkYXRhTGFuZ3VhZ2VdPVwiaXRlbVwiXG4gICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpID8/IDEyMDNcIlxuICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8/IHRydWVcIlxuICAgICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cInZhbHVlVXBEb3duTnVtYmVyKCkgfHwgMVwiXG4gICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwibWF4VmFsdWVOdW1iZXIoKVwiXG4gICAgICAgICAgICBbb25seUFjY2VwdE5lZ2F0aXZlVmFsdWVdPVwib25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICAgICAgICBbY2xhc3NJY29uQWRkTGFuZ3VhZ2VdPVwiY2xhc3NJY29uQWRkTGFuZ3VhZ2UoKVwiXG4gICAgICAgICAgICBbdmlld1R5cGVdPVwiY29uZmlnSXRlbXMoKVswXS50eXBlID8gKGNvbmZpZ0l0ZW1zKClbMF0udHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6IGNvbmZpZ0l0ZW1zKClbMF0udHlwZSA9PT0gJ2Zsb2F0JyA/ICdmbG9hdCcgOiAndGV4dCcpIDogJ3RleHQnXCJcbiAgICAgICAgICAgIChvdXRFdmVudE11bHRpTGFuZ3VhZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKClcIlxuICAgICAgICAgICAgKG91dENoYW5nZVZhbHVlSW5wdXQpPVwiaGFuZGxlckNoYW5nZVZhbHVlKClcIlxuICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2xJbnB1dExhbmd1YWdlKCRldmVudCwgJGluZGV4KVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoIWlnbm9yZUFkZCgpKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tYWRkJ1wiXG4gICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg2bWknXCJcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFweC0wICFweS1bMnB4XSdcIlxuICAgICAgW2xhYmVsXT1cImxhYmVsQWRkSXRlbSgpIHx8ICcnXCJcbiAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQWRkKClcIiAvPlxuICB9XG48L2Rpdj5cbiJdfQ==
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFrQixvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBVXhGLE1BQU0sT0FBTyxpREFBaUQ7SUFDbEQsWUFBWSxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7SUFDekMsV0FBVyxHQUFHLE1BQU0sQ0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRCxZQUFZLEdBQUcsTUFBTSxDQUF5QyxTQUFTLENBQUMsQ0FBQztJQUN6RSxhQUFhLEdBQUcsTUFBTSxDQUFpQixFQUFFLFVBQVUsRUFBRSxLQUFL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OEIsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQzt3R0F0SVUsaURBQWlEOzRGQUFqRCxpREFBaUQsbTJEQVFsQixvQ0FBb0MsZ0dBQzVCLDRDQUE0QyxnRUMxQmhHLG82SEFrRkEsMkNEbkVZLGVBQWUsdUZBQUUsOENBQThDLHVGQUFFLG9DQUFvQyxnM0RBQUUsNENBQTRDLHN3QkFBRSxzQ0FBc0M7OzRGQUUxTCxpREFBaUQ7a0JBUjdELFNBQVM7K0JBRUUsZ0RBQWdELGNBRTlDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSw4Q0FBOEMsRUFBRSxvQ0FBb0MsRUFBRSw0Q0FBNEMsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJVmFsaWRSZXF1aXJlZCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc05pbCwgVXRpbHNDYWNoZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXIsIElEYXRhSXRlbSwgSURhdGFNdWx0aUxhbmd1YWdlLCBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL211bHRpLWxhbmd1YWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUNvbXBvbmVudCB9IGZyb20gJy4uL211bHRpLWxhbmd1YWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldEl0ZW1QaXBlIH0gZnJvbSAnLi4vcGlwZXMvZ2V0LWl0ZW0ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtbXVsdGlfbGFuZ3VhZ2UtaXRlbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUl0ZW1zQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIGRhdGFNdWx0aUtleSA9IHNpZ25hbDxJRGF0YUl0ZW1bXVtdPihbXSk7XG4gIHByb3RlY3RlZCBsYW5nRGVmYXVsdCA9IHNpZ25hbDxzdHJpbmc+KFV0aWxzQ2FjaGUuZ2V0TGFuZygpKTtcbiAgcHJvdGVjdGVkIGNvbmZpZ0hlYWRlciA9IHNpZ25hbDxJQ29uZmlnTXVsdGlMYW5ndWFnZUhlYWRlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHZhbGlkUmVxdWlyZWQgPSBzaWduYWw8SVZhbGlkUmVxdWlyZWQ+KHsgaXNSZXF1aXJlZDogZmFsc2UgfSk7XG4gIHByb3RlY3RlZCB2YWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUgPSBzaWduYWw8SVZhbGlkUmVxdWlyZWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBkYXRhSGVhZGVyID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIGlucHV0Q29tcG9uZW50UmVmcyA9IHZpZXdDaGlsZHJlbihMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnQpO1xuICBwcml2YXRlIG11bHRpTGFuZ3VhZ2VDb21wb25lbnRSZWZzID0gdmlld0NoaWxkcmVuKExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlQ29tcG9uZW50KTtcblxuICByZWFkb25seSBjb25maWdJdGVtcyA9IGlucHV0PEFycmF5PElEYXRhSXRlbT4+KFtdKTtcbiAgcmVhZG9ubHkgZGF0YU11bHRpTGFuZ3VhZ2UgPSBtb2RlbDxBcnJheTxJRGF0YU11bHRpTGFuZ3VhZ2U+Pihbe31dKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBpZ25vcmVBZGQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsYWJlbEFkZEl0ZW0gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNpbmdsZUxhbmd1YWdlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZhbHVlVXBEb3duTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtYXhWYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb25seUFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0ljb25BZGRMYW5ndWFnZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbGlicy11aS1pY29uLWFkZCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdsaWJzLXVpLWljb24tYWRkJyB9KTtcblxuICByZWFkb25seSBvdXRDaGFuZ2VWYWx1ZSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnSXRlbXMoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnSGVhZGVyLnNldChpdGVtcz8uWzBdPy5oZWFkZXIpO1xuICAgICAgICB0aGlzLnZhbGlkUmVxdWlyZWQuc2V0KGl0ZW1zPy5bMF0/LnZhbGlkUmVxdWlyZWQgPz8geyBpc1JlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zeW5jRGF0YU11bHRpS2V5KCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhTXVsdGlMYW5ndWFnZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKCFyb3dzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmNvbmZpZ0hlYWRlcigpO1xuICAgICAgICAgIGNvbnN0IGluaXRpYWw6IElEYXRhTXVsdGlMYW5ndWFnZSA9IGhlYWRlcj8uZGF0YURlZmF1bHQgPyAoY2xvbmVEZWVwKGhlYWRlci5kYXRhRGVmYXVsdCkgYXMgSURhdGFNdWx0aUxhbmd1YWdlKSA6IHt9O1xuICAgICAgICAgIHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2Uuc2V0KFtpbml0aWFsXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zeW5jRGF0YU11bHRpS2V5KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKSxcbiAgICAgIGdldERhdGE6IHRoaXMuZ2V0RGF0YS5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTeG7l2kgZMOybmcgY+G6p24gbeG7mXQgYuG6o24gYGRhdGFgIChzaGFsbG93IGNvcHkgdOG7q25nIGBJRGF0YUl0ZW1gKSDEkeG7gyBtdWx0aS1sYW5ndWFnZSBjb24ga2jDtG5nIGTDuW5nIGNodW5nIG3hu5l0IG3huqNuZyB0aGFtIGNoaeG6v3UuXG4gICAqL1xuICBwcml2YXRlIHN5bmNEYXRhTXVsdGlLZXkoaW5kZXhSZW1vdmU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSB0aGlzLmNvbmZpZ0l0ZW1zKCk7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoO1xuICAgIGlmICghdGVtcGxhdGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0YU11bHRpS2V5LnNldChbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YU11bHRpS2V5KCkubGVuZ3RoID09PSByb3dDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhTXVsdGlLZXkoKS5sZW5ndGggPiByb3dDb3VudCAmJiAhaXNOaWwoaW5kZXhSZW1vdmUpKSB7XG4gICAgICB0aGlzLmRhdGFNdWx0aUtleS51cGRhdGUoKGRhdGEpID0+IHtcbiAgICAgICAgZGF0YS5zcGxpY2UoaW5kZXhSZW1vdmUsIDEpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0RhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiByb3dDb3VudCAtIHRoaXMuZGF0YU11bHRpS2V5KCkubGVuZ3RoIH0sICgpID0+IHRlbXBsYXRlcy5tYXAoKGMpID0+IGNsb25lRGVlcChjKSkpO1xuICAgIHRoaXMuZGF0YU11bHRpS2V5LnVwZGF0ZSgoZGF0YSkgPT4gWy4uLmRhdGEsIC4uLm5ld0RhdGFdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQWRkKCk6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuY29uZmlnSGVhZGVyKCk7XG4gICAgY29uc3QgZGF0YUxhbmd1YWdlOiBJRGF0YU11bHRpTGFuZ3VhZ2UgPSBoZWFkZXI/LmRhdGFEZWZhdWx0ID8gKGNsb25lRGVlcChoZWFkZXIuZGF0YURlZmF1bHQpIGFzIElEYXRhTXVsdGlMYW5ndWFnZSkgOiB7fTtcbiAgICB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlLnVwZGF0ZSgoaXRlbXMpID0+IFsuLi5pdGVtcywgZGF0YUxhbmd1YWdlXSk7XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlVmFsdWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVtb3ZlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlLnVwZGF0ZSgoaXRlbXMpID0+IGl0ZW1zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKTtcbiAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoaW5kZXgpO1xuICAgIHRoaXMuaGFuZGxlckNoYW5nZVZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgdGhpcy5hcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTtcbiAgICBjb25zdCByb3dDb3VudCA9IHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UoKS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBpbnB1dEN0cmwgPSB0aGlzLmlucHV0Q29tcG9uZW50UmVmcygpW2ldO1xuICAgICAgaWYgKGlucHV0Q3RybCAmJiAhKGF3YWl0IGlucHV0Q3RybC5GdW5jdGlvbnNDb250cm9sLmNoZWNrSXNWYWxpZCgpKSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWxDdHJsID0gdGhpcy5tdWx0aUxhbmd1YWdlQ29tcG9uZW50UmVmcygpW2ldO1xuICAgICAgaWYgKG1sQ3RybCAmJiAhKGF3YWl0IG1sQ3RybC5GdW5jdGlvbnNDb250cm9sLmNoZWNrSXNWYWxpZCgpKSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0YSgpOiBJRGF0YU11bHRpTGFuZ3VhZ2VbXSB7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoO1xuICAgIGNvbnN0IG91dDogSURhdGFNdWx0aUxhbmd1YWdlW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLm11bHRpTGFuZ3VhZ2VDb21wb25lbnRSZWZzKClbaV07XG4gICAgICBvdXQucHVzaCgoY3RybD8uRnVuY3Rpb25zQ29udHJvbC5nZXREYXRhKCkgPz8ge30pIGFzIElEYXRhTXVsdGlMYW5ndWFnZSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVZhbHVlKHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyLCB0eXBlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgPT09ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuZGF0YUhlYWRlci5zZXQodmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTtcbiAgICB0aGlzLm91dENoYW5nZVZhbHVlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlWYWxpZFJlcXVpcmVkV2hlbkhlYWRlckhhc1ZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlLnNldCh1bmRlZmluZWQpO1xuICAgIGlmICghaXNOaWwodGhpcy5kYXRhSGVhZGVyKCkpKSB7XG4gICAgICB0aGlzLnZhbGlkUmVxdWlyZWRXaGVuSW5wdXRIYXNWYWx1ZS5zZXQoeyBpc1JlcXVpcmVkOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLVs4cHhdXCI+XG4gIEBmb3IgKGl0ZW0gb2YgZGF0YU11bHRpTGFuZ3VhZ2UoKTsgdHJhY2sgaXRlbSkge1xuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHctZnVsbCByb3VuZGVkLVs0cHhdXCI+XG4gICAgICBAaWYgKGNvbmZpZ0hlYWRlcigpOyBhcyBjb25maWdIZWFkZXIpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYmctW3ZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMildIHAtWzEycHhdIGdhcC1bMTZweF1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtWzhweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2bSBoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBzaHJpbmstMFwiPlxuICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbFRpdGxlID0gY29uZmlnSGVhZGVyLnRpdGxlID8/ICcgJztcbiAgICAgICAgICAgICAge3sgY29uc3RIdG1sVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICBAaWYgKGNvbmZpZ0hlYWRlci5rZXlCaW5kRGF0YSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGU6IGl0ZW07IGFzIGl0ZW1NYXApIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtTWFwXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCJjb25maWdIZWFkZXIudHlwZSAmJiBjb25maWdIZWFkZXIudHlwZSA9PT0gJ251bWJlcicgPyAnaW50JyA6ICdzdHJpbmcnXCJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cImxhbmdEZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgW2VtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRSZXF1aXJlZF09XCJ7IGlzUmVxdWlyZWQ6IGNvbmZpZ0l0ZW1zKClbMF0udmFsaWRSZXF1aXJlZD8uaXNSZXF1aXJlZCA/PyBmYWxzZSB9XCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaTE4bl9lbnRlcl92YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8/IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cInZhbHVlVXBEb3duTnVtYmVyKCkgfHwgMVwiXG4gICAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwibWF4VmFsdWVOdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgICBbZml4ZWRGbG9hdF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKCRldmVudCwgJ2lucHV0JylcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKCEkZmlyc3QpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLVszMnB4XVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLWN1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtidXR0b25DdXN0b21dPVwie1xuICAgICAgICAgICAgICAgICAgY29uZmlnU3RlcENvbG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICcjMDcxNjMxJyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dF9ob3ZlcjogJyNlZTJkNDEnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2FjdGl2ZTogJyNlZTJkNDEnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2Rpc2FibGU6ICcwNzE2MzEnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHJvb3RDb2xvcjogJyMwNzE2MzEnLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwieyBjb25maWc6IHsgY29udGVudDogJ2kxOG5fZGVsZXRlJywgekluZGV4OiAxMjA1IH0gfVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yZW1vdmUnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC0wJ1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZW1vdmUoJGluZGV4KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1bMTJweF0gZmxleCB3LWZ1bGxcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1tdWx0aV9sYW5ndWFnZVxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgW3NpbmdsZUxhbmd1YWdlXT1cInNpbmdsZUxhbmd1YWdlKClcIlxuICAgICAgICAgICAgW3RpdGxlRmllbGRdPVwiY29uZmlnSXRlbXMoKVswXS50aXRsZUZpZWxkIHx8ICcnXCJcbiAgICAgICAgICAgIFtrZXlIZWFkZXJdPVwiY29uZmlnSGVhZGVyLmtleUJpbmREYXRhID8/ICcnXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaTE4bl9pbXBvcnRfY29udGVudCdcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZVZhbHVlXT1cIidsaWJzLXVpLWZvbnQtaDVyJ1wiXG4gICAgICAgICAgICBbZGF0YV09XCJkYXRhTXVsdGlLZXkoKVskaW5kZXhdXCJcbiAgICAgICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cInZhbGlkUmVxdWlyZWRXaGVuSW5wdXRIYXNWYWx1ZSgpIHx8IGNvbmZpZ0l0ZW1zKClbMF0udmFsaWRSZXF1aXJlZFwiXG4gICAgICAgICAgICBbZGF0YUxhbmd1YWdlXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSA/PyAxMjAzXCJcbiAgICAgICAgICAgIFthY2NlcHROZWdhdGl2ZVZhbHVlXT1cImFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/PyB0cnVlXCJcbiAgICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCJ2YWx1ZVVwRG93bk51bWJlcigpIHx8IDFcIlxuICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm1heFZhbHVlTnVtYmVyKClcIlxuICAgICAgICAgICAgW29ubHlBY2NlcHROZWdhdGl2ZVZhbHVlXT1cIm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKClcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkFkZExhbmd1YWdlXT1cImNsYXNzSWNvbkFkZExhbmd1YWdlKClcIlxuICAgICAgICAgICAgW3ZpZXdUeXBlXT1cImNvbmZpZ0l0ZW1zKClbMF0udHlwZSA/IChjb25maWdJdGVtcygpWzBdLnR5cGUgPT09ICdudW1iZXInID8gJ251bWJlcicgOiBjb25maWdJdGVtcygpWzBdLnR5cGUgPT09ICdmbG9hdCcgPyAnZmxvYXQnIDogJ3RleHQnKSA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAob3V0RXZlbnRNdWx0aUxhbmd1YWdlKT1cImhhbmRsZXJDaGFuZ2VWYWx1ZSgpXCJcbiAgICAgICAgICAgIChvdXRDaGFuZ2VWYWx1ZUlucHV0KT1cImhhbmRsZXJDaGFuZ2VWYWx1ZSgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmICghaWdub3JlQWRkKCkpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hZGQnXCJcbiAgICAgIFtjbGFzc0xhYmVsXT1cIidsaWJzLXVpLWZvbnQtaDZtaSdcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXB4LTAgIXB5LVsycHhdJ1wiXG4gICAgICBbbGFiZWxdPVwibGFiZWxBZGRJdGVtKCkgfHwgJydcIlxuICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJBZGQoKVwiIC8+XG4gIH1cbjwvZGl2PlxuIl19
|