tuain-ng-forms-lib 14.4.90 → 14.4.93
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/.browserslistrc +16 -0
- package/.yarn/cache/nanoid-npm-4.0.0-924f5c6312-7d5946df5c.zip +0 -0
- package/.yarn/cache/tslib-npm-2.4.1-36f0ed04db-19480d6e03.zip +0 -0
- package/.yarn/cache/yn-npm-5.0.0-b001dab23c-f0ec7710d3.zip +0 -0
- package/.yarn/install-state.gz +0 -0
- package/karma.conf.js +44 -0
- package/ng-package.json +11 -0
- package/package.json +6 -24
- package/src/lib/classes/forms/action.ts +56 -0
- package/src/lib/classes/forms/element.ts +29 -0
- package/src/lib/classes/forms/field.ts +500 -0
- package/src/lib/classes/forms/form.constants.ts +28 -0
- package/src/lib/classes/forms/form.ts +508 -0
- package/src/lib/classes/forms/piece-propagate.ts +46 -0
- package/src/lib/classes/forms/piece.ts +122 -0
- package/src/lib/classes/forms/section.ts +152 -0
- package/src/lib/classes/forms/subsection.ts +90 -0
- package/src/lib/classes/forms/table/action.ts +32 -0
- package/src/lib/classes/forms/table/column.ts +94 -0
- package/src/lib/classes/forms/table/row-data.ts +121 -0
- package/src/lib/classes/forms/table/table.ts +478 -0
- package/src/lib/components/elements/action.component.ts +59 -0
- package/src/lib/components/elements/field.component.ts +92 -0
- package/src/lib/components/elements/layout/element.component.ts +13 -0
- package/src/lib/components/elements/layout/form-error.component.ts +11 -0
- package/src/lib/components/elements/layout/form-header.component.ts +17 -0
- package/src/lib/components/elements/layout/piece.component.ts +34 -0
- package/src/lib/components/elements/layout/section.component.ts +31 -0
- package/src/lib/components/elements/layout/sub-section.component.ts +31 -0
- package/src/lib/components/elements/tables/table-record-action.component.ts +50 -0
- package/src/lib/components/elements/tables/table-record-field.component.ts +20 -0
- package/src/lib/components/elements/tables/table.component.ts +86 -0
- package/src/lib/components/forms/basic-form.ts +1588 -0
- package/src/lib/services/event-manager.service.ts +21 -0
- package/src/lib/services/file-manager.service.ts +6 -0
- package/src/lib/services/form-manager.service.ts +89 -0
- package/src/lib/services/icon-dictionary.service.ts +159 -0
- package/src/lib/tuain-ng-forms-lib.module.ts +40 -0
- package/{public-api.d.ts → src/public-api.ts} +5 -0
- package/src/test.ts +27 -0
- package/tsconfig.lib.json +15 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +17 -0
- package/esm2020/lib/classes/forms/action.mjs +0 -35
- package/esm2020/lib/classes/forms/element.mjs +0 -26
- package/esm2020/lib/classes/forms/field.mjs +0 -444
- package/esm2020/lib/classes/forms/form.constants.mjs +0 -26
- package/esm2020/lib/classes/forms/form.mjs +0 -431
- package/esm2020/lib/classes/forms/piece-propagate.mjs +0 -30
- package/esm2020/lib/classes/forms/piece.mjs +0 -95
- package/esm2020/lib/classes/forms/section.mjs +0 -137
- package/esm2020/lib/classes/forms/subsection.mjs +0 -80
- package/esm2020/lib/classes/forms/table/action.mjs +0 -18
- package/esm2020/lib/classes/forms/table/column.mjs +0 -74
- package/esm2020/lib/classes/forms/table/row-data.mjs +0 -116
- package/esm2020/lib/classes/forms/table/table.mjs +0 -415
- package/esm2020/lib/components/elements/action.component.mjs +0 -71
- package/esm2020/lib/components/elements/field.component.mjs +0 -80
- package/esm2020/lib/components/elements/layout/element.component.mjs +0 -20
- package/esm2020/lib/components/elements/layout/form-error.component.mjs +0 -20
- package/esm2020/lib/components/elements/layout/form-header.component.mjs +0 -31
- package/esm2020/lib/components/elements/layout/piece.component.mjs +0 -22
- package/esm2020/lib/components/elements/layout/section.component.mjs +0 -37
- package/esm2020/lib/components/elements/layout/sub-section.component.mjs +0 -37
- package/esm2020/lib/components/elements/tables/table-record-action.component.mjs +0 -56
- package/esm2020/lib/components/elements/tables/table-record-field.component.mjs +0 -30
- package/esm2020/lib/components/elements/tables/table.component.mjs +0 -93
- package/esm2020/lib/components/forms/basic-form.mjs +0 -1514
- package/esm2020/lib/services/event-manager.service.mjs +0 -18
- package/esm2020/lib/services/file-manager.service.mjs +0 -6
- package/esm2020/lib/services/form-manager.service.mjs +0 -80
- package/esm2020/lib/tuain-ng-forms-lib.module.mjs +0 -71
- package/esm2020/public-api.mjs +0 -19
- package/esm2020/tuain-ng-forms-lib.mjs +0 -5
- package/fesm2015/tuain-ng-forms-lib.mjs +0 -4229
- package/fesm2015/tuain-ng-forms-lib.mjs.map +0 -1
- package/fesm2020/tuain-ng-forms-lib.mjs +0 -4048
- package/fesm2020/tuain-ng-forms-lib.mjs.map +0 -1
- package/lib/classes/forms/action.d.ts +0 -22
- package/lib/classes/forms/element.d.ts +0 -17
- package/lib/classes/forms/field.d.ts +0 -205
- package/lib/classes/forms/form.constants.d.ts +0 -25
- package/lib/classes/forms/form.d.ts +0 -137
- package/lib/classes/forms/piece-propagate.d.ts +0 -11
- package/lib/classes/forms/piece.d.ts +0 -41
- package/lib/classes/forms/section.d.ts +0 -32
- package/lib/classes/forms/subsection.d.ts +0 -24
- package/lib/classes/forms/table/action.d.ts +0 -15
- package/lib/classes/forms/table/column.d.ts +0 -33
- package/lib/classes/forms/table/row-data.d.ts +0 -14
- package/lib/classes/forms/table/table.d.ts +0 -100
- package/lib/components/elements/action.component.d.ts +0 -17
- package/lib/components/elements/field.component.d.ts +0 -38
- package/lib/components/elements/layout/element.component.d.ts +0 -9
- package/lib/components/elements/layout/form-error.component.d.ts +0 -8
- package/lib/components/elements/layout/form-header.component.d.ts +0 -12
- package/lib/components/elements/layout/piece.component.d.ts +0 -10
- package/lib/components/elements/layout/section.component.d.ts +0 -11
- package/lib/components/elements/layout/sub-section.component.d.ts +0 -11
- package/lib/components/elements/tables/table-record-action.component.d.ts +0 -16
- package/lib/components/elements/tables/table-record-field.component.d.ts +0 -12
- package/lib/components/elements/tables/table.component.d.ts +0 -35
- package/lib/components/forms/basic-form.d.ts +0 -353
- package/lib/services/event-manager.service.d.ts +0 -9
- package/lib/services/file-manager.service.d.ts +0 -5
- package/lib/services/form-manager.service.d.ts +0 -28
- package/lib/tuain-ng-forms-lib.module.d.ts +0 -20
- package/tuain-ng-forms-lib.d.ts +0 -5
|
@@ -1,431 +0,0 @@
|
|
|
1
|
-
import { Subject } from 'rxjs';
|
|
2
|
-
import { FormAction } from './action';
|
|
3
|
-
import { FieldDescriptor } from './field';
|
|
4
|
-
import { RecordTable } from './table/table';
|
|
5
|
-
import { RecordFormSection } from './section';
|
|
6
|
-
const ACTIVE = 'active';
|
|
7
|
-
const SHOW = 'show';
|
|
8
|
-
const HIDE = 'hide';
|
|
9
|
-
const ENABLE = 'enable';
|
|
10
|
-
const DISABLE = 'disable';
|
|
11
|
-
const CLEAN = 'clean';
|
|
12
|
-
export class FormStructureAndData {
|
|
13
|
-
constructor(definitionReceived, formConfig) {
|
|
14
|
-
this._stateChange = new Subject();
|
|
15
|
-
this._name = '';
|
|
16
|
-
this._title = '';
|
|
17
|
-
this._fields = {};
|
|
18
|
-
this._actions = {};
|
|
19
|
-
this._tables = {};
|
|
20
|
-
this._sections = {};
|
|
21
|
-
this._immutableData = {};
|
|
22
|
-
this._extraInfo = {};
|
|
23
|
-
this._exclusiveSectionsByAttr = {};
|
|
24
|
-
this._formConfig = formConfig;
|
|
25
|
-
this.state = '';
|
|
26
|
-
this._actionArray = [];
|
|
27
|
-
this._fieldArray = [];
|
|
28
|
-
this._tableArray = [];
|
|
29
|
-
this._sectionArray = [];
|
|
30
|
-
this._stateFlow = {
|
|
31
|
-
defaultState: '',
|
|
32
|
-
states: [],
|
|
33
|
-
transitions: [],
|
|
34
|
-
};
|
|
35
|
-
if (!definitionReceived) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
this._name = (definitionReceived.form && definitionReceived.form.formCode)
|
|
39
|
-
? definitionReceived.form.formCode : this._name;
|
|
40
|
-
this._title = (definitionReceived.form && definitionReceived.form.formTitle)
|
|
41
|
-
? definitionReceived.form.formTitle : '';
|
|
42
|
-
this.setStateFlow(definitionReceived?.states, definitionReceived?.transitions, definitionReceived?.defaultState);
|
|
43
|
-
this.immutableData = definitionReceived.immutableData;
|
|
44
|
-
this.extraInfo = definitionReceived.extraInfo;
|
|
45
|
-
if (definitionReceived.actions) {
|
|
46
|
-
const formActions = definitionReceived.actions.map(objDef => {
|
|
47
|
-
let visibleStates = objDef.visibleStates;
|
|
48
|
-
let enabledStates = objDef.enabledStates;
|
|
49
|
-
if (!visibleStates) {
|
|
50
|
-
visibleStates = (objDef.actionModes || '').split(',')
|
|
51
|
-
.map(state => state.trim())
|
|
52
|
-
.filter(state => state.length > 0) || [];
|
|
53
|
-
enabledStates = [...visibleStates];
|
|
54
|
-
}
|
|
55
|
-
return { ...objDef, visibleStates, enabledStates };
|
|
56
|
-
});
|
|
57
|
-
for (const actionReceived of formActions) {
|
|
58
|
-
const globalAction = new FormAction(actionReceived, this._formConfig);
|
|
59
|
-
const globalActionCode = globalAction.actionCode;
|
|
60
|
-
if (globalActionCode) {
|
|
61
|
-
this._actionArray.push(globalAction);
|
|
62
|
-
this._actions[globalActionCode] = globalAction;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (definitionReceived.fields) {
|
|
67
|
-
const formFields = definitionReceived.fields.map(objDef => {
|
|
68
|
-
let visibleStates = objDef.visibleStates;
|
|
69
|
-
let enabledStates = objDef.enabledStates ?? objDef.editableStates;
|
|
70
|
-
if (!visibleStates) {
|
|
71
|
-
visibleStates = (objDef.fieldModes || '').split(',')
|
|
72
|
-
.map(state => state.trim())
|
|
73
|
-
.filter(state => state.length > 0) || [];
|
|
74
|
-
enabledStates = [...visibleStates];
|
|
75
|
-
}
|
|
76
|
-
return { ...objDef, visibleStates, enabledStates };
|
|
77
|
-
});
|
|
78
|
-
for (const fieldReceived of formFields) {
|
|
79
|
-
const fieldToAdd = new FieldDescriptor(fieldReceived, this._formConfig);
|
|
80
|
-
const fieldCode = fieldToAdd.code;
|
|
81
|
-
if (fieldCode) {
|
|
82
|
-
this._fieldArray.push(fieldToAdd);
|
|
83
|
-
this._fields[fieldCode] = fieldToAdd;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (definitionReceived.tables) {
|
|
88
|
-
const tables = definitionReceived.tables.map(objDef => {
|
|
89
|
-
let visibleStates = objDef.visibleStates;
|
|
90
|
-
let enabledStates = objDef.enabledStates || objDef.editableStates;
|
|
91
|
-
if (!visibleStates) {
|
|
92
|
-
visibleStates = (objDef.tableModes || '').split(',')
|
|
93
|
-
.map(state => state.trim())
|
|
94
|
-
.filter(state => state.length > 0) || [];
|
|
95
|
-
enabledStates = [...visibleStates];
|
|
96
|
-
}
|
|
97
|
-
return { ...objDef, visibleStates, enabledStates };
|
|
98
|
-
});
|
|
99
|
-
for (const tableReceived of tables) {
|
|
100
|
-
const tableToAdd = new RecordTable(tableReceived, this._formConfig);
|
|
101
|
-
const tableCode = tableToAdd.tableCode;
|
|
102
|
-
if (tableCode) {
|
|
103
|
-
this._tableArray.push(tableToAdd);
|
|
104
|
-
this._tables[tableCode] = tableToAdd;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (definitionReceived.sections) {
|
|
109
|
-
const formSections = definitionReceived.sections.map(objDef => {
|
|
110
|
-
let visibleStates = objDef.visibleStates;
|
|
111
|
-
if (!visibleStates) {
|
|
112
|
-
visibleStates = (objDef.sectionModes || '').split(',')
|
|
113
|
-
.map(state => state.trim())
|
|
114
|
-
.filter(state => state.length > 0) || [];
|
|
115
|
-
}
|
|
116
|
-
return { ...objDef, visibleStates };
|
|
117
|
-
});
|
|
118
|
-
for (const sectionReceived of formSections) {
|
|
119
|
-
const sectionToAdd = new RecordFormSection(sectionReceived, this, this._formConfig);
|
|
120
|
-
const sectionCode = sectionToAdd.sectionCode;
|
|
121
|
-
if (sectionCode) {
|
|
122
|
-
this._sectionArray.push(sectionToAdd);
|
|
123
|
-
this._sections[sectionCode] = sectionToAdd;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
getTitle() { return this._title; }
|
|
129
|
-
setTitle(title) { this._title = title; }
|
|
130
|
-
get name() { return this._name; }
|
|
131
|
-
set name(name) { this._name = name; }
|
|
132
|
-
// Estados
|
|
133
|
-
get defaultState() { return this._stateFlow.defaultState; }
|
|
134
|
-
supportState(state) { return this._stateFlow.states?.includes(state); }
|
|
135
|
-
supportMode(state) { return this.supportState(state); }
|
|
136
|
-
get states() { return this._stateFlow.states; }
|
|
137
|
-
getCurrentState() { return this.state; }
|
|
138
|
-
changeState(newState) {
|
|
139
|
-
if (!newState || !this.supportState(newState)) {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
if (!this.state) {
|
|
143
|
-
this.state = newState;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
const transitionToChange = this._stateFlow.transitions.find(trns => trns.source === this.state && trns.destination === newState);
|
|
147
|
-
if (transitionToChange) {
|
|
148
|
-
this.state = newState;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
this._stateChange.next({ state: this.state });
|
|
152
|
-
return (this.state === newState);
|
|
153
|
-
}
|
|
154
|
-
get stateChange() { return this._stateChange; }
|
|
155
|
-
setStateFlow(states, transitions, defaultState) {
|
|
156
|
-
this._stateFlow.states = states;
|
|
157
|
-
this._stateFlow.defaultState = defaultState || this._stateFlow.states[0];
|
|
158
|
-
this._stateFlow.transitions = transitions.map(transition => {
|
|
159
|
-
const name = transition.name;
|
|
160
|
-
const source = (this._stateFlow.states.includes(transition.source)) ? transition.source : '';
|
|
161
|
-
const destination = (this._stateFlow.states.includes(transition.destination)) ? transition.destination : '';
|
|
162
|
-
return { name, source, destination };
|
|
163
|
-
}).filter(item => item.name && item.source && item.destination);
|
|
164
|
-
}
|
|
165
|
-
// immutable Data
|
|
166
|
-
getImmutableElement(name) { return this._immutableData?.[name]?.value ?? null; }
|
|
167
|
-
set immutableData(immutableData) { Object.assign(this._immutableData, immutableData); }
|
|
168
|
-
get immutableData() { return JSON.parse(JSON.stringify(this._immutableData)); }
|
|
169
|
-
// extra Info
|
|
170
|
-
getExtraInfo(name) { return this._extraInfo?.[name]?.value ?? null; }
|
|
171
|
-
set extraInfo(extraInfo) { Object.assign(this._extraInfo, extraInfo); }
|
|
172
|
-
get extraInfo() { return JSON.parse(JSON.stringify(this._extraInfo)); }
|
|
173
|
-
// Fields
|
|
174
|
-
get fields() { return this._fields; }
|
|
175
|
-
get fieldNames() { return this.getFieldNames(); }
|
|
176
|
-
getFields() { return this._fieldArray; }
|
|
177
|
-
getFieldNames() { return this._fieldArray.map(field => field.code); }
|
|
178
|
-
getField(code) { return (code && this._fields?.[code]) ? this._fields[code] : null; }
|
|
179
|
-
enableField(code) { this.getField(code)?.enable(); }
|
|
180
|
-
disableField(code) { this.getField(code)?.disable(); }
|
|
181
|
-
getFieldValue(code) { return this.getField(code)?.value; }
|
|
182
|
-
getFieldOptionText(code) { return this.getField(code)?.optionText; }
|
|
183
|
-
getFieldOptions(code) { return this.getField(code)?.options ?? null; }
|
|
184
|
-
setFieldValue(code, value) { this.getField(code)?.setValue(value); }
|
|
185
|
-
setFieldError(code, errorCode, message, type = 'error') { this.getField(code)?.setError(errorCode, message, type); }
|
|
186
|
-
setFieldIntrinsicErrorMessage(code, message) { this.getField(code)?.setIntrinsicErrorMessage(message); }
|
|
187
|
-
setFieldRequired(inputCodes, required) {
|
|
188
|
-
const codes = this.getFieldSet(null, inputCodes ?? null);
|
|
189
|
-
for (const code of codes) {
|
|
190
|
-
try {
|
|
191
|
-
const field = this.getField(code) ?? null;
|
|
192
|
-
field && (field.required = required);
|
|
193
|
-
}
|
|
194
|
-
catch (e) {
|
|
195
|
-
console.log(`Error modificando campo ${code}: ${e}`);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
setFieldErrorMessage(code, message) { this.getField(code)?.setErrorMessage(message); }
|
|
200
|
-
setFieldOptions(code, optionsArray, idAttribute, nameAttribute) {
|
|
201
|
-
const field = this.getField(code);
|
|
202
|
-
if (field && optionsArray?.length > 0) {
|
|
203
|
-
const fieldOptions = optionsArray.map(item => ({
|
|
204
|
-
fieldOptionId: item[idAttribute],
|
|
205
|
-
fieldOptionValue: item[nameAttribute]
|
|
206
|
-
}));
|
|
207
|
-
field.setFieldOptions(fieldOptions);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
getFieldSet(filter, inputCodes, secCode, subCode) {
|
|
211
|
-
let codes = [];
|
|
212
|
-
if (inputCodes) {
|
|
213
|
-
if (typeof inputCodes === 'string') {
|
|
214
|
-
codes = [inputCodes];
|
|
215
|
-
}
|
|
216
|
-
else if (Array.isArray(inputCodes) && inputCodes.length > 0) {
|
|
217
|
-
codes = inputCodes ?? [];
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
else if (secCode && !subCode) {
|
|
221
|
-
codes = this.getSection(secCode)?.getFieldNames() ?? [];
|
|
222
|
-
}
|
|
223
|
-
else if (secCode && subCode) {
|
|
224
|
-
codes = this.getSubSection(secCode, subCode)?.getFieldNames() ?? [];
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
codes = this.getFieldNames() ?? [];
|
|
228
|
-
}
|
|
229
|
-
return (filter) ? codes.filter(fld => filter(this.getField(fld))) : codes;
|
|
230
|
-
}
|
|
231
|
-
applyOnFields(processFunc, inputCodes, secCode, subCode) {
|
|
232
|
-
if (!processFunc) {
|
|
233
|
-
return 0;
|
|
234
|
-
}
|
|
235
|
-
const codes = this.getFieldSet(null, inputCodes ?? null, secCode, subCode);
|
|
236
|
-
let processedFields = 0;
|
|
237
|
-
for (const code of codes) {
|
|
238
|
-
const field = this.getField(code);
|
|
239
|
-
if (field) {
|
|
240
|
-
try {
|
|
241
|
-
processFunc(field);
|
|
242
|
-
processedFields += 1;
|
|
243
|
-
}
|
|
244
|
-
catch (e) {
|
|
245
|
-
console.log(`Error procesando funcion en campo ${field}: ${e}`);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
return processedFields;
|
|
250
|
-
}
|
|
251
|
-
enableFields(codes, secCode, subCode) {
|
|
252
|
-
return this.applyOnFields(fld => fld?.enable(), codes, secCode, subCode);
|
|
253
|
-
}
|
|
254
|
-
showFields(codes, secCode, subCode) {
|
|
255
|
-
return this.applyOnFields(fld => fld?.show(), codes, secCode, subCode);
|
|
256
|
-
}
|
|
257
|
-
hideFields(codes, secCode, subCode) {
|
|
258
|
-
return this.applyOnFields(fld => fld?.hide(), codes, secCode, subCode);
|
|
259
|
-
}
|
|
260
|
-
showLabelFields(codes, secCode, subCode) {
|
|
261
|
-
return this.applyOnFields(fld => fld?.showLablel(), codes, secCode, subCode);
|
|
262
|
-
}
|
|
263
|
-
hideLabelFields(codes, secCode, subCode) {
|
|
264
|
-
return this.applyOnFields(fld => fld?.hideLabel(), codes, secCode, subCode);
|
|
265
|
-
}
|
|
266
|
-
disableFields(codes, secCode, subCode) {
|
|
267
|
-
return this.applyOnFields(fld => fld?.disable(), codes, secCode, subCode);
|
|
268
|
-
}
|
|
269
|
-
cleanFields(codes, secCode, subCode) {
|
|
270
|
-
return this.applyOnFields(fld => fld?.clean(), codes, secCode, subCode);
|
|
271
|
-
}
|
|
272
|
-
tagFieldsWithError(message, codes, secCode, subCode) {
|
|
273
|
-
return this.applyOnFields(fld => fld?.setErrorMessage(message), codes, secCode, subCode);
|
|
274
|
-
}
|
|
275
|
-
cleanErrorFields(codes, secCode, subCode) {
|
|
276
|
-
return this.tagFieldsWithError('', codes, secCode, subCode);
|
|
277
|
-
}
|
|
278
|
-
tagEmptyRequiredFields(message, codes = null, secCode, subCode) {
|
|
279
|
-
return this.tagFieldsWithError(message, this.getRequiredEmptyFields(codes, secCode, subCode)) > 0;
|
|
280
|
-
}
|
|
281
|
-
getRequiredFields(codes, secCode, subCode) {
|
|
282
|
-
return this.getFieldSet(fld => fld?.required, codes ?? null, secCode, subCode);
|
|
283
|
-
}
|
|
284
|
-
getRequiredEmptyFields(codes, secCode, subCode) {
|
|
285
|
-
return this.getFieldSet(fld => fld?.required && fld?.empty, codes ?? null, secCode, subCode);
|
|
286
|
-
}
|
|
287
|
-
getChangedFields(codes, secCode, subCode) {
|
|
288
|
-
return this.getFieldSet(fld => !fld?.outputOnly && fld?.hasChanged(), codes ?? null, secCode, subCode);
|
|
289
|
-
}
|
|
290
|
-
getFieldsWithValidationIssues(codes, secCode, subCode) {
|
|
291
|
-
return this.getFieldSet(fld => fld?.hasError(), codes ?? null, secCode, subCode);
|
|
292
|
-
}
|
|
293
|
-
getFieldsValues(inputCodes, secCode, subCode) {
|
|
294
|
-
const codes = this.getFieldSet(null, inputCodes ?? null, secCode, subCode);
|
|
295
|
-
const resultObject = {};
|
|
296
|
-
for (let index = 0; index < codes.length; index++) {
|
|
297
|
-
const code = codes[index];
|
|
298
|
-
if (code) {
|
|
299
|
-
resultObject[code] = this._fields?.[code]?.getValue() ?? null;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
return resultObject;
|
|
303
|
-
}
|
|
304
|
-
// Acciones
|
|
305
|
-
get actions() { return this._actions; }
|
|
306
|
-
getActionsByAttribute(name, value) { return this._actionArray.filter(actionItem => actionItem.matchAttribute(name, value)); }
|
|
307
|
-
getActions() { return this._actionArray; }
|
|
308
|
-
getAction(code) { return (code && this._actions?.[code]) ? this._actions[code] : null; }
|
|
309
|
-
showActions(codes) { return this.execOnActions(codes, SHOW); }
|
|
310
|
-
hideActions(codes) { return this.execOnActions(codes, HIDE); }
|
|
311
|
-
enableActions(codes) { return this.execOnActions(codes, ENABLE); }
|
|
312
|
-
disableActions(codes) { return this.execOnActions(codes, DISABLE); }
|
|
313
|
-
execOnActions(codes, functionName) {
|
|
314
|
-
const actionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);
|
|
315
|
-
if (!functionName || actionCodes.length === 0) {
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
actionCodes.forEach(code => {
|
|
319
|
-
const action = this.getAction(code);
|
|
320
|
-
action?.[functionName]?.();
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
// Tablas
|
|
324
|
-
get tables() { return this.tables; }
|
|
325
|
-
getTables() { return this._tableArray; }
|
|
326
|
-
getTable(code) { return (code && this._tables?.[code]) ? this._tables[code] : null; }
|
|
327
|
-
getTableRecord(code, id) { return this.getTable(code)?.getTableRecord(id); }
|
|
328
|
-
enableTables(codes) { return this.execOnTables(codes, ENABLE); }
|
|
329
|
-
disableTables(codes) { return this.execOnTables(codes, DISABLE); }
|
|
330
|
-
showTables(codes) { return this.execOnTables(codes, SHOW); }
|
|
331
|
-
hideTables(codes) { return this.execOnTables(codes, HIDE); }
|
|
332
|
-
cleanTables(codes) { return this.execOnTables(codes, CLEAN); }
|
|
333
|
-
execOnTables(codes, functionName) {
|
|
334
|
-
const tableCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);
|
|
335
|
-
if (!functionName || tableCodes.length === 0) {
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
tableCodes.forEach(code => {
|
|
339
|
-
const table = this.getTable(code);
|
|
340
|
-
table?.[functionName]?.();
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
// Secciones
|
|
344
|
-
get sections() { return this._sections; }
|
|
345
|
-
getSections() { return this._sectionArray; }
|
|
346
|
-
getSectionsByAttribute(name, value) { return this._sectionArray.filter(item => item.matchAttribute(name, value)); }
|
|
347
|
-
get sectionTitles() { return this._sectionArray.map(formSection => formSection.sectionTitle); }
|
|
348
|
-
get visibleSections() { return this._sectionArray.filter(sec => sec.absoluteVisible); }
|
|
349
|
-
getSection(code) { return (code && this._sections?.[code]) ? this._sections[code] : null; }
|
|
350
|
-
showSections(codes) { this.execOnSections(codes, SHOW); }
|
|
351
|
-
hideSections(codes) { this.execOnSections(codes, HIDE); }
|
|
352
|
-
activeSection() { return this._exclusiveSectionsByAttr[ACTIVE]; }
|
|
353
|
-
getSubSection(code, subCode) { return this.getSection(code)?.getSubsection(subCode) ?? null; }
|
|
354
|
-
showSubSections(code, subCodes) { return this.execOnSubSections(code, subCodes, SHOW); }
|
|
355
|
-
hideSubSections(code, subCodes) { return this.execOnSubSections(code, subCodes, HIDE); }
|
|
356
|
-
getSectionActions(code) { return this.getSection(code)?.getActions() ?? null; }
|
|
357
|
-
getSectionActionNames(code) { return this.getSection(code)?.getActionNames() ?? null; }
|
|
358
|
-
activateSection(code) {
|
|
359
|
-
if (code === this._exclusiveSectionsByAttr[ACTIVE]) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
this.getSection(this.activeSection())?.inactivate();
|
|
363
|
-
this.getSection(code)?.activate();
|
|
364
|
-
this._exclusiveSectionsByAttr[ACTIVE] = code;
|
|
365
|
-
}
|
|
366
|
-
execOnSections(codes, functionName) {
|
|
367
|
-
const sectionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);
|
|
368
|
-
if (!functionName || sectionCodes.length === 0) {
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
sectionCodes.forEach(code => {
|
|
372
|
-
const section = this.getSection(code);
|
|
373
|
-
section?.[functionName]?.();
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
execOnSubSections(code, subNames, functionName) {
|
|
377
|
-
const subCodes = (Array.isArray(subNames)) ? subNames : (subNames ? [subNames] : []);
|
|
378
|
-
const section = this.getSection(code);
|
|
379
|
-
if (!functionName || !section || subCodes.length === 0) {
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
for (const subCode of subCodes) {
|
|
383
|
-
const subSection = this.getSubSection(code, subCode);
|
|
384
|
-
subSection?.[functionName]?.();
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
/**
|
|
388
|
-
* Métodos propios de gestión del formulario
|
|
389
|
-
*/
|
|
390
|
-
cleanData() {
|
|
391
|
-
for (const field of this._fieldArray) {
|
|
392
|
-
field.setValue(field.defaultValue);
|
|
393
|
-
}
|
|
394
|
-
for (const table of this._tableArray) {
|
|
395
|
-
table.clean();
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
getPayload() {
|
|
399
|
-
const formData = {
|
|
400
|
-
fields: [],
|
|
401
|
-
tables: [],
|
|
402
|
-
};
|
|
403
|
-
formData.fields = this.getFields().filter(fld => !fld?.outputOnly)
|
|
404
|
-
.map(fld => {
|
|
405
|
-
const fieldPayload = {
|
|
406
|
-
fieldCode: fld?.code,
|
|
407
|
-
fieldValue: fld?.value,
|
|
408
|
-
editable: !fld?.absoluteDisabled,
|
|
409
|
-
visible: fld?.absoluteVisible,
|
|
410
|
-
required: fld?.required,
|
|
411
|
-
fieldOptions: '',
|
|
412
|
-
};
|
|
413
|
-
return fieldPayload;
|
|
414
|
-
});
|
|
415
|
-
formData.tables = this.getTables().map(tbl => {
|
|
416
|
-
const tablePayload = {
|
|
417
|
-
tableCode: tbl.tableCode,
|
|
418
|
-
visible: tbl.absoluteVisible,
|
|
419
|
-
currentPage: tbl.currentPage,
|
|
420
|
-
requestedPage: tbl.requestedPage,
|
|
421
|
-
recordsPerPage: tbl.recordsPerPage,
|
|
422
|
-
currentFilter: tbl.currentFilter,
|
|
423
|
-
sortingColumn: tbl.sorting.columnName,
|
|
424
|
-
sortingDirection: tbl.sorting.direction,
|
|
425
|
-
};
|
|
426
|
-
return tablePayload;
|
|
427
|
-
});
|
|
428
|
-
return formData;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUs5QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDeEIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQXNDdEIsTUFBTSxPQUFPLG9CQUFvQjtJQW9CL0IsWUFBWSxrQkFBa0IsRUFBRSxVQUFVO1FBbkJ6QixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFHbkQsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVYLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFHcEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFZCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsNkJBQXdCLEdBQUcsRUFBRSxDQUFDO1FBR3BDLElBQUksQ0FBQyxXQUFXLEdBQUcs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QUksQ0FBQyxDQUFDLENBQUM7SUFDN0YsSUFBSSxhQUFhLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsSUFBSSxhQUFhLEtBQVUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBGLGFBQWE7SUFDYixZQUFZLENBQUMsSUFBWSxJQUFTLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksU0FBUyxLQUFVLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1RSxTQUFTO0lBQ1QsSUFBSSxNQUFNLEtBQVUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLFVBQVUsS0FBZSxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsU0FBUyxLQUF3QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNELGFBQWEsS0FBZSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSxRQUFRLENBQUMsSUFBWSxJQUFxQixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlHLFdBQVcsQ0FBQyxJQUFZLElBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsWUFBWSxDQUFDLElBQVksSUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxhQUFhLENBQUMsSUFBWSxJQUFTLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLGtCQUFrQixDQUFDLElBQVksSUFBUyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqRixlQUFlLENBQUMsSUFBWSxJQUEwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEcsYUFBYSxDQUFDLElBQVksRUFBRSxLQUFVLElBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLGFBQWEsQ0FBQyxJQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFlLEVBQUUsT0FBZSxPQUFPLElBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekosNkJBQTZCLENBQUMsSUFBWSxFQUFFLE9BQWUsSUFBUyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3SCxnQkFBZ0IsQ0FBQyxVQUFvQyxFQUFFLFFBQWlCO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN6RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJO2dCQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO2dCQUMxQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO2FBQ3RDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDdEQ7U0FDRjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsT0FBZSxJQUFTLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzRyxlQUFlLENBQUMsSUFBWSxFQUFFLFlBQW1CLEVBQUUsV0FBbUIsRUFBRSxhQUFxQjtRQUMzRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxJQUFJLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDaEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNKLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFvQyxFQUFFLE9BQXVCLEVBQUUsT0FBdUI7UUFDeEcsSUFBSSxLQUFLLEdBQVUsRUFBRSxDQUFDO1FBQ3RCLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7Z0JBQ2xDLEtBQUssR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDN0QsS0FBSyxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7YUFDMUI7U0FDRjthQUFNLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN6RDthQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRTtZQUM3QixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3JFO2FBQU07WUFDTCxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNwQztRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzVFLENBQUM7SUFFRCxhQUFhLENBQUMsV0FBVyxFQUFFLFVBQXFDLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUNsRyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7U0FBRTtRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJO29CQUNGLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkIsZUFBZSxJQUFJLENBQUMsQ0FBQztpQkFDdEI7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pFO2FBQ0Y7U0FDRjtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQy9FLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQzdFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQzdFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ2hGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQzlFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFlLEVBQUUsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ3RHLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ25GLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFlLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ3RGLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBZ0MsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ3BGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQWdDLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUN6RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWdDLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQUNuRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLElBQUksR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxLQUFnQyxFQUFFLE9BQWdCLEVBQUUsT0FBZ0I7UUFDaEcsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxlQUFlLENBQUMsVUFBcUMsRUFBRSxPQUFnQixFQUFFLE9BQWdCO1FBQ3ZGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7YUFDL0Q7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO0lBQ1gsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUV2QyxxQkFBcUIsQ0FBQyxJQUFZLEVBQUUsS0FBSyxJQUFrQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkosVUFBVSxLQUFtQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFNBQVMsQ0FBQyxJQUFZLElBQWdCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUcsV0FBVyxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsV0FBVyxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsYUFBYSxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsY0FBYyxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0YsYUFBYSxDQUFDLEtBQStCLEVBQUUsWUFBb0I7UUFDakUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDMUQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO0lBQ1QsSUFBSSxNQUFNLEtBQVUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6QyxTQUFTLEtBQW9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsUUFBUSxDQUFDLElBQVksSUFBaUIsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRyxjQUFjLENBQUMsSUFBWSxFQUFFLEVBQVUsSUFBcUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFNUcsWUFBWSxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsYUFBYSxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsVUFBVSxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsVUFBVSxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsV0FBVyxDQUFDLEtBQXdCLElBQVUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkYsWUFBWSxDQUFDLEtBQStCLEVBQUUsWUFBb0I7UUFDaEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDekQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO0lBQ1osSUFBSSxRQUFRLEtBQVUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM5QyxXQUFXLEtBQTBCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDakUsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBeUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hJLElBQUksYUFBYSxLQUFlLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLElBQUksZUFBZSxLQUEwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxVQUFVLENBQUMsSUFBWSxJQUF1QixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RILFlBQVksQ0FBQyxLQUF3QixJQUFVLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixZQUFZLENBQUMsS0FBd0IsSUFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsYUFBYSxLQUFhLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxhQUFhLENBQUMsSUFBWSxFQUFFLE9BQU8sSUFBMEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVILGVBQWUsQ0FBQyxJQUFZLEVBQUUsUUFBMkIsSUFBVSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxlQUFlLENBQUMsSUFBWSxFQUFFLFFBQTJCLElBQVUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekgsaUJBQWlCLENBQUMsSUFBSSxJQUFrQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RixxQkFBcUIsQ0FBQyxJQUFJLElBQWMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFakcsZUFBZSxDQUFDLElBQVk7UUFDMUIsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBK0IsRUFBRSxZQUFvQjtRQUNsRSxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUMzRCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVksRUFBRSxRQUFrQyxFQUFFLFlBQW9CO1FBQ3RGLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDbkUsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7WUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckQsVUFBVSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBRUgsU0FBUztRQUNQLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNwQztRQUNELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxRQUFRLEdBQWdCO1lBQzVCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDO1FBQ0YsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO2FBQy9ELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNULE1BQU0sWUFBWSxHQUFpQjtnQkFDakMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJO2dCQUNwQixVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUs7Z0JBQ3RCLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0I7Z0JBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZTtnQkFDN0IsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRO2dCQUN2QixZQUFZLEVBQUUsRUFBRTthQUNqQixDQUFBO1lBQ0QsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFTCxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0MsTUFBTSxZQUFZLEdBQWlCO2dCQUNqQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7Z0JBQ3hCLE9BQU8sRUFBRSxHQUFHLENBQUMsZUFBZTtnQkFDNUIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO2dCQUM1QixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7Z0JBQ2hDLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztnQkFDbEMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO2dCQUNoQyxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVO2dCQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVM7YUFDeEMsQ0FBQztZQUNGLE9BQU8sWUFBWSxDQUFBO1FBQ3JCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybUFjdGlvbiB9IGZyb20gJy4vYWN0aW9uJztcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRvciwgRmllbGRPcHRpb24gfSBmcm9tICcuL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4vc2VjdGlvbic7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU3ViU2VjdGlvbiB9IGZyb20gJy4vc3Vic2VjdGlvbic7XG5pbXBvcnQgeyBOT19FUlJPUiwgSEVBREVSIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZVJlY29yZERhdGEgfSBmcm9tICcuL3RhYmxlL3Jvdy1kYXRhJztcblxuY29uc3QgQUNUSVZFID0gJ2FjdGl2ZSc7XG5jb25zdCBTSE9XID0gJ3Nob3cnO1xuY29uc3QgSElERSA9ICdoaWRlJztcbmNvbnN0IEVOQUJMRSA9ICdlbmFibGUnO1xuY29uc3QgRElTQUJMRSA9ICdkaXNhYmxlJztcbmNvbnN0IENMRUFOID0gJ2NsZWFuJztcbmludGVyZmFjZSBUcmFuc2l0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgZGVzdGluYXRpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN0YXRlRmxvdyB7XG4gIGRlZmF1bHRTdGF0ZTogc3RyaW5nO1xuICBzdGF0ZXM6IHN0cmluZ1tdO1xuICB0cmFuc2l0aW9uczogVHJhbnNpdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkUGF5bG9hZCB7XG4gIGZpZWxkQ29kZTogc3RyaW5nO1xuICBmaWVsZFZhbHVlOiBhbnk7XG4gIGVkaXRhYmxlOiBib29sZWFuO1xuICB2aXNpYmxlOiBib29sZWFuO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgZmllbGRPcHRpb25zOiBzdHJpbmcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVQYXlsb2FkIHtcbiAgdGFibGVDb2RlOiBzdHJpbmc7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIHJlcXVlc3RlZFBhZ2U6IG51bWJlcjtcbiAgcmVjb3Jkc1BlclBhZ2U6IG51bWJlcjtcbiAgY3VycmVudEZpbHRlcjogYW55LFxuICBzb3J0aW5nQ29sdW1uOiBzdHJpbmc7XG4gIHNvcnRpbmdEaXJlY3Rpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEZvcm1QYXlsb2FkIHtcbiAgZmllbGRzOiBGaWVsZFBheWxvYWRbXSxcbiAgdGFibGVzOiBUYWJsZVBheWxvYWRbXSxcbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgc3RhdGU6IHN0cmluZztcbiAgX25hbWU6IHN0cmluZyA9ICcnO1xuICBfZm9ybUNvbmZpZzogYW55O1xuICBwcml2YXRlIF90aXRsZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3N0YXRlRmxvdzogU3RhdGVGbG93O1xuICBwcml2YXRlIF9maWVsZEFycmF5OiBGaWVsZERlc2NyaXB0b3JbXTtcbiAgcHJpdmF0ZSBfZmllbGRzID0ge307XG4gIHByaXZhdGUgX2FjdGlvbkFycmF5OiBGb3JtQWN0aW9uW107XG4gIHByaXZhdGUgX2FjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVBcnJheTogUmVjb3JkVGFibGVbXTtcbiAgcHJpdmF0ZSBfdGFibGVzID0ge307XG4gIHByaXZhdGUgX3NlY3Rpb25BcnJheTogUmVjb3JkRm9ybVNlY3Rpb25bXTtcbiAgcHJpdmF0ZSBfc2VjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfaW1tdXRhYmxlRGF0YSA9IHt9O1xuICBwcml2YXRlIF9leHRyYUluZm8gPSB7fTtcbiAgcHJpdmF0ZSBfZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHIgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uUmVjZWl2ZWQsIGZvcm1Db25maWcpIHtcbiAgICB0aGlzLl9mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcbiAgICB0aGlzLnN0YXRlID0gJyc7XG4gICAgdGhpcy5fYWN0aW9uQXJyYXkgPSBbXTtcbiAgICB0aGlzLl9maWVsZEFycmF5ID0gW107XG4gICAgdGhpcy5fdGFibGVBcnJheSA9IFtdO1xuICAgIHRoaXMuX3NlY3Rpb25BcnJheSA9IFtdO1xuICAgIHRoaXMuX3N0YXRlRmxvdyA9IHtcbiAgICAgIGRlZmF1bHRTdGF0ZTogJycsXG4gICAgICBzdGF0ZXM6IFtdLFxuICAgICAgdHJhbnNpdGlvbnM6IFtdLFxuICAgIH07XG4gICAgaWYgKCFkZWZpbml0aW9uUmVjZWl2ZWQpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5fbmFtZSA9IChkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybSAmJiBkZWZpbml0aW9uUmVjZWl2ZWQuZm9ybS5mb3JtQ29kZSlcbiAgICAgID8gZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybUNvZGUgOiB0aGlzLl9uYW1lO1xuICAgIHRoaXMuX3RpdGxlID0gKGRlZmluaXRpb25SZWNlaXZlZC5mb3JtICYmIGRlZmluaXRpb25SZWNlaXZlZC5mb3JtLmZvcm1UaXRsZSlcbiAgICAgID8gZGVmaW5pdGlvblJlY2VpdmVkLmZvcm0uZm9ybVRpdGxlIDogJyc7XG4gICAgdGhpcy5zZXRTdGF0ZUZsb3coZGVmaW5pdGlvblJlY2VpdmVkPy5zdGF0ZXMsIGRlZmluaXRpb25SZWNlaXZlZD8udHJhbnNpdGlvbnMsXG4gICAgICBkZWZpbml0aW9uUmVjZWl2ZWQ/LmRlZmF1bHRTdGF0ZSk7XG4gICAgdGhpcy5pbW11dGFibGVEYXRhID0gZGVmaW5pdGlvblJlY2VpdmVkLmltbXV0YWJsZURhdGE7XG4gICAgdGhpcy5leHRyYUluZm8gPSBkZWZpbml0aW9uUmVjZWl2ZWQuZXh0cmFJbmZvO1xuXG4gICAgaWYgKGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtQWN0aW9ucyA9IGRlZmluaXRpb25SZWNlaXZlZC5hY3Rpb25zLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi5hY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApIHx8IFtdO1xuICAgICAgICAgIGVuYWJsZWRTdGF0ZXMgPSBbLi4udmlzaWJsZVN0YXRlc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uUmVjZWl2ZWQgb2YgZm9ybUFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQWN0aW9uID0gbmV3IEZvcm1BY3Rpb24oYWN0aW9uUmVjZWl2ZWQsIHRoaXMuX2Zvcm1Db25maWcpO1xuICAgICAgICBjb25zdCBnbG9iYWxBY3Rpb25Db2RlID0gZ2xvYmFsQWN0aW9uLmFjdGlvbkNvZGU7XG4gICAgICAgIGlmIChnbG9iYWxBY3Rpb25Db2RlKSB7XG4gICAgICAgICAgdGhpcy5fYWN0aW9uQXJyYXkucHVzaChnbG9iYWxBY3Rpb24pO1xuICAgICAgICAgIHRoaXMuX2FjdGlvbnNbZ2xvYmFsQWN0aW9uQ29kZV0gPSBnbG9iYWxBY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLmZpZWxkcykge1xuICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IGRlZmluaXRpb25SZWNlaXZlZC5maWVsZHMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGxldCBlbmFibGVkU3RhdGVzID0gb2JqRGVmLmVuYWJsZWRTdGF0ZXMgPz8gb2JqRGVmLmVkaXRhYmxlU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi5maWVsZE1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCkgfHwgW107XG4gICAgICAgICAgZW5hYmxlZFN0YXRlcyA9IFsuLi52aXNpYmxlU3RhdGVzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMsIGVuYWJsZWRTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBmaWVsZFJlY2VpdmVkIG9mIGZvcm1GaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZmllbGRUb0FkZCA9IG5ldyBGaWVsZERlc2NyaXB0b3IoZmllbGRSZWNlaXZlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IGZpZWxkVG9BZGQuY29kZTtcbiAgICAgICAgaWYgKGZpZWxkQ29kZSkge1xuICAgICAgICAgIHRoaXMuX2ZpZWxkQXJyYXkucHVzaChmaWVsZFRvQWRkKTtcbiAgICAgICAgICB0aGlzLl9maWVsZHNbZmllbGRDb2RlXSA9IGZpZWxkVG9BZGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvblJlY2VpdmVkLnRhYmxlcykge1xuICAgICAgY29uc3QgdGFibGVzID0gZGVmaW5pdGlvblJlY2VpdmVkLnRhYmxlcy5tYXAob2JqRGVmID0+IHtcbiAgICAgICAgbGV0IHZpc2libGVTdGF0ZXMgPSBvYmpEZWYudmlzaWJsZVN0YXRlcztcbiAgICAgICAgbGV0IGVuYWJsZWRTdGF0ZXMgPSBvYmpEZWYuZW5hYmxlZFN0YXRlcyB8fCBvYmpEZWYuZWRpdGFibGVTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLnRhYmxlTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBbXTtcbiAgICAgICAgICBlbmFibGVkU3RhdGVzID0gWy4uLnZpc2libGVTdGF0ZXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLm9iakRlZiwgdmlzaWJsZVN0YXRlcywgZW5hYmxlZFN0YXRlcyB9O1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlUmVjZWl2ZWQgb2YgdGFibGVzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlVG9BZGQgPSBuZXcgUmVjb3JkVGFibGUodGFibGVSZWNlaXZlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29kZSA9IHRhYmxlVG9BZGQudGFibGVDb2RlO1xuICAgICAgICBpZiAodGFibGVDb2RlKSB7XG4gICAgICAgICAgdGhpcy5fdGFibGVBcnJheS5wdXNoKHRhYmxlVG9BZGQpO1xuICAgICAgICAgIHRoaXMuX3RhYmxlc1t0YWJsZUNvZGVdID0gdGFibGVUb0FkZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uUmVjZWl2ZWQuc2VjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGZvcm1TZWN0aW9ucyA9IGRlZmluaXRpb25SZWNlaXZlZC5zZWN0aW9ucy5tYXAob2JqRGVmID0+IHtcbiAgICAgICAgbGV0IHZpc2libGVTdGF0ZXMgPSBvYmpEZWYudmlzaWJsZVN0YXRlcztcbiAgICAgICAgaWYgKCF2aXNpYmxlU3RhdGVzKSB7XG4gICAgICAgICAgdmlzaWJsZVN0YXRlcyA9IChvYmpEZWYuc2VjdGlvbk1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCkgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3Qgc2VjdGlvblJlY2VpdmVkIG9mIGZvcm1TZWN0aW9ucykge1xuICAgICAgICBjb25zdCBzZWN0aW9uVG9BZGQgPSBuZXcgUmVjb3JkRm9ybVNlY3Rpb24oc2VjdGlvblJlY2VpdmVkLCB0aGlzLCB0aGlzLl9mb3JtQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvZGUgPSBzZWN0aW9uVG9BZGQuc2VjdGlvbkNvZGU7XG4gICAgICAgIGlmIChzZWN0aW9uQ29kZSkge1xuICAgICAgICAgIHRoaXMuX3NlY3Rpb25BcnJheS5wdXNoKHNlY3Rpb25Ub0FkZCk7XG4gICAgICAgICAgdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkNvZGVdID0gc2VjdGlvblRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3RpdGxlOyB9XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy5fdGl0bGUgPSB0aXRsZTsgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fbmFtZTsgfVxuICBzZXQgbmFtZShuYW1lKSB7IHRoaXMuX25hbWUgPSBuYW1lOyB9XG5cbiAgLy8gRXN0YWRvc1xuICBnZXQgZGVmYXVsdFN0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9zdGF0ZUZsb3cuZGVmYXVsdFN0YXRlOyB9XG4gIHN1cHBvcnRTdGF0ZShzdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzPy5pbmNsdWRlcyhzdGF0ZSk7IH1cbiAgc3VwcG9ydE1vZGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdXBwb3J0U3RhdGUoc3RhdGUpOyB9XG4gIGdldCBzdGF0ZXMoKTogYW55W10geyByZXR1cm4gdGhpcy5fc3RhdGVGbG93LnN0YXRlczsgfVxuXG4gIGdldEN1cnJlbnRTdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdGF0ZTsgfVxuXG4gIGNoYW5nZVN0YXRlKG5ld1N0YXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld1N0YXRlIHx8ICF0aGlzLnN1cHBvcnRTdGF0ZShuZXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25Ub0NoYW5nZSA9IHRoaXMuX3N0YXRlRmxvdy50cmFuc2l0aW9ucy5maW5kKHRybnMgPT5cbiAgICAgICAgdHJucy5zb3VyY2UgPT09IHRoaXMuc3RhdGUgJiYgdHJucy5kZXN0aW5hdGlvbiA9PT0gbmV3U3RhdGUpO1xuICAgICAgaWYgKHRyYW5zaXRpb25Ub0NoYW5nZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlLm5leHQoeyBzdGF0ZTogdGhpcy5zdGF0ZSB9KTtcbiAgICByZXR1cm4gKHRoaXMuc3RhdGUgPT09IG5ld1N0YXRlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIHRoaXMuX3N0YXRlQ2hhbmdlOyB9XG5cbiAgc2V0U3RhdGVGbG93KHN0YXRlcz8sIHRyYW5zaXRpb25zPywgZGVmYXVsdFN0YXRlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGVGbG93LnN0YXRlcyA9IHN0YXRlcztcbiAgICB0aGlzLl9zdGF0ZUZsb3cuZGVmYXVsdFN0YXRlID0gZGVmYXVsdFN0YXRlIHx8IHRoaXMuX3N0YXRlRmxvdy5zdGF0ZXNbMF07XG4gICAgdGhpcy5fc3RhdGVGbG93LnRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnMubWFwKHRyYW5zaXRpb24gPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHRyYW5zaXRpb24ubmFtZTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9ICh0aGlzLl9zdGF0ZUZsb3cuc3RhdGVzLmluY2x1ZGVzKHRyYW5zaXRpb24uc291cmNlKSkgPyB0cmFuc2l0aW9uLnNvdXJjZSA6ICcnO1xuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSAodGhpcy5fc3RhdGVGbG93LnN0YXRlcy5pbmNsdWRlcyh0cmFuc2l0aW9uLmRlc3RpbmF0aW9uKSkgPyB0cmFuc2l0aW9uLmRlc3RpbmF0aW9uIDogJyc7XG4gICAgICByZXR1cm4geyBuYW1lLCBzb3VyY2UsIGRlc3RpbmF0aW9uIH07XG4gICAgfSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5uYW1lICYmIGl0ZW0uc291cmNlICYmIGl0ZW0uZGVzdGluYXRpb24pO1xuICB9XG5cbiAgLy8gaW1tdXRhYmxlIERhdGFcbiAgZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5faW1tdXRhYmxlRGF0YT8uW25hbWVdPy52YWx1ZSA/PyBudWxsOyB9XG4gIHNldCBpbW11dGFibGVEYXRhKGltbXV0YWJsZURhdGEpIHsgT2JqZWN0LmFzc2lnbih0aGlzLl9pbW11dGFibGVEYXRhLCBpbW11dGFibGVEYXRhKTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpOiBhbnkgeyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9pbW11dGFibGVEYXRhKSk7IH1cblxuICAvLyBleHRyYSBJbmZvXG4gIGdldEV4dHJhSW5mbyhuYW1lOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5fZXh0cmFJbmZvPy5bbmFtZV0/LnZhbHVlID8/IG51bGw7IH1cbiAgc2V0IGV4dHJhSW5mbyhleHRyYUluZm8pIHsgT2JqZWN0LmFzc2lnbih0aGlzLl9leHRyYUluZm8sIGV4dHJhSW5mbyk7IH1cbiAgZ2V0IGV4dHJhSW5mbygpOiBhbnkgeyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9leHRyYUluZm8pKTsgfVxuXG4gIC8vIEZpZWxkc1xuICBnZXQgZmllbGRzKCk6IGFueSB7IHJldHVybiB0aGlzLl9maWVsZHM7IH1cbiAgZ2V0IGZpZWxkTmFtZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5nZXRGaWVsZE5hbWVzKCk7IH1cbiAgZ2V0RmllbGRzKCk6IEZpZWxkRGVzY3JpcHRvcltdIHsgcmV0dXJuIHRoaXMuX2ZpZWxkQXJyYXk7IH1cbiAgZ2V0RmllbGROYW1lcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLl9maWVsZEFycmF5Lm1hcChmaWVsZCA9PiBmaWVsZC5jb2RlKTsgfVxuICBnZXRGaWVsZChjb2RlOiBzdHJpbmcpOiBGaWVsZERlc2NyaXB0b3IgeyByZXR1cm4gKGNvZGUgJiYgdGhpcy5fZmllbGRzPy5bY29kZV0pID8gdGhpcy5fZmllbGRzW2NvZGVdIDogbnVsbDsgfVxuICBlbmFibGVGaWVsZChjb2RlOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uZW5hYmxlKCk7IH1cbiAgZGlzYWJsZUZpZWxkKGNvZGU6IHN0cmluZyk6IHZvaWQgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5kaXNhYmxlKCk7IH1cbiAgZ2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcpOiBhbnkgeyByZXR1cm4gdGhpcy5nZXRGaWVsZChjb2RlKT8udmFsdWU7IH1cbiAgZ2V0RmllbGRPcHRpb25UZXh0KGNvZGU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLmdldEZpZWxkKGNvZGUpPy5vcHRpb25UZXh0OyB9XG4gIGdldEZpZWxkT3B0aW9ucyhjb2RlOiBzdHJpbmcpOiBGaWVsZE9wdGlvbltdIHwgbnVsbCB7IHJldHVybiB0aGlzLmdldEZpZWxkKGNvZGUpPy5vcHRpb25zID8/IG51bGw7IH1cbiAgc2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5zZXRWYWx1ZSh2YWx1ZSk7IH1cbiAgc2V0RmllbGRFcnJvcihjb2RlOiBzdHJpbmcsIGVycm9yQ29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9ICdlcnJvcicpOiBhbnkgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5zZXRFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2UsIHR5cGUpOyB9XG4gIHNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogYW55IHsgdGhpcy5nZXRGaWVsZChjb2RlKT8uc2V0SW50cmluc2ljRXJyb3JNZXNzYWdlKG1lc3NhZ2UpOyB9XG5cbiAgc2V0RmllbGRSZXF1aXJlZChpbnB1dENvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHJlcXVpcmVkOiBib29sZWFuKTogYW55IHtcbiAgICBjb25zdCBjb2RlcyA9IHRoaXMuZ2V0RmllbGRTZXQobnVsbCwgaW5wdXRDb2RlcyA/PyBudWxsKTtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgY29kZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChjb2RlKSA/PyBudWxsO1xuICAgICAgICBmaWVsZCAmJiAoZmllbGQucmVxdWlyZWQgPSByZXF1aXJlZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciBtb2RpZmljYW5kbyBjYW1wbyAke2NvZGV9OiAke2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBhbnkgeyB0aGlzLmdldEZpZWxkKGNvZGUpPy5zZXRFcnJvck1lc3NhZ2UobWVzc2FnZSk7IH1cblxuICBzZXRGaWVsZE9wdGlvbnMoY29kZTogc3RyaW5nLCBvcHRpb25zQXJyYXk6IGFueVtdLCBpZEF0dHJpYnV0ZTogc3RyaW5nLCBuYW1lQXR0cmlidXRlOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChjb2RlKTtcbiAgICBpZiAoZmllbGQgJiYgb3B0aW9uc0FycmF5Py5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWVsZE9wdGlvbnMgPSBvcHRpb25zQXJyYXkubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgZmllbGRPcHRpb25JZDogaXRlbVtpZEF0dHJpYnV0ZV0sXG4gICAgICAgIGZpZWxkT3B0aW9uVmFsdWU6IGl0ZW1bbmFtZUF0dHJpYnV0ZV1cbiAgICAgIH0pKTtcbiAgICAgIGZpZWxkLnNldEZpZWxkT3B0aW9ucyhmaWVsZE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkU2V0KGZpbHRlciwgaW5wdXRDb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nIHwgbnVsbCwgc3ViQ29kZT86IHN0cmluZyB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvZGVzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChpbnB1dENvZGVzKSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0Q29kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvZGVzID0gW2lucHV0Q29kZXNdO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0Q29kZXMpICYmIGlucHV0Q29kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2RlcyA9IGlucHV0Q29kZXMgPz8gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWNDb2RlICYmICFzdWJDb2RlKSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0U2VjdGlvbihzZWNDb2RlKT8uZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH0gZWxzZSBpZiAoc2VjQ29kZSAmJiBzdWJDb2RlKSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0U3ViU2VjdGlvbihzZWNDb2RlLCBzdWJDb2RlKT8uZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlcyA9IHRoaXMuZ2V0RmllbGROYW1lcygpID8/IFtdO1xuICAgIH1cbiAgICByZXR1cm4gKGZpbHRlcikgPyBjb2Rlcy5maWx0ZXIoZmxkID0+IGZpbHRlcih0aGlzLmdldEZpZWxkKGZsZCkpKSA6IGNvZGVzO1xuICB9XG5cbiAgYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYywgaW5wdXRDb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCFwcm9jZXNzRnVuYykgeyByZXR1cm4gMDsgfVxuICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRGaWVsZFNldChudWxsLCBpbnB1dENvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICAgIGxldCBwcm9jZXNzZWRGaWVsZHMgPSAwO1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBjb2Rlcykge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkKGNvZGUpO1xuICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvY2Vzc0Z1bmMoZmllbGQpO1xuICAgICAgICAgIHByb2Nlc3NlZEZpZWxkcyArPSAxO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYEVycm9yIHByb2Nlc2FuZG8gZnVuY2lvbiBlbiBjYW1wbyAke2ZpZWxkfTogJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzZWRGaWVsZHM7XG4gIH1cblxuICBlbmFibGVGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uZW5hYmxlKCksIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIHNob3dGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uc2hvdygpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBoaWRlRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LmhpZGUoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgc2hvd0xhYmVsRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LnNob3dMYWJsZWwoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgaGlkZUxhYmVsRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LmhpZGVMYWJlbCgpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBkaXNhYmxlRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseU9uRmllbGRzKGZsZCA9PiBmbGQ/LmRpc2FibGUoKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgY2xlYW5GaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uY2xlYW4oKSwgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgdGFnRmllbGRzV2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFwcGx5T25GaWVsZHMoZmxkID0+IGZsZD8uc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBjbGVhbkVycm9yRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IoJycsIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIHRhZ0VtcHR5UmVxdWlyZWRGaWVsZHMobWVzc2FnZTogc3RyaW5nLCBjb2RlcyA9IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IobWVzc2FnZSwgdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKSkgPiAwO1xuICB9XG5cbiAgZ2V0UmVxdWlyZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IGZsZD8ucmVxdWlyZWQsIGNvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFNldChmbGQgPT4gZmxkPy5yZXF1aXJlZCAmJiBmbGQ/LmVtcHR5LCBjb2RlcyA/PyBudWxsLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuXG4gIGdldENoYW5nZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+ICFmbGQ/Lm91dHB1dE9ubHkgJiYgZmxkPy5oYXNDaGFuZ2VkKCksIGNvZGVzID8/IG51bGwsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG5cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRTZXQoZmxkID0+IGZsZD8uaGFzRXJyb3IoKSwgY29kZXMgPz8gbnVsbCwgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cblxuICBnZXRGaWVsZHNWYWx1ZXMoaW5wdXRDb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbCwgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgY29kZXMgPSB0aGlzLmdldEZpZWxkU2V0KG51bGwsIGlucHV0Q29kZXMgPz8gbnVsbCwgc2VjQ29kZSwgc3ViQ29kZSk7XG4gICAgY29uc3QgcmVzdWx0T2JqZWN0ID0ge307XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvZGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgY29kZSA9IGNvZGVzW2luZGV4XTtcbiAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgIHJlc3VsdE9iamVjdFtjb2RlXSA9IHRoaXMuX2ZpZWxkcz8uW2NvZGVdPy5nZXRWYWx1ZSgpID8/IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRPYmplY3Q7XG4gIH1cblxuICAvLyBBY2Npb25lc1xuICBnZXQgYWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuX2FjdGlvbnM7IH1cblxuICBnZXRBY3Rpb25zQnlBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZSk6IEZvcm1BY3Rpb25bXSB7IHJldHVybiB0aGlzLl9hY3Rpb25BcnJheS5maWx0ZXIoYWN0aW9uSXRlbSA9PiBhY3Rpb25JdGVtLm1hdGNoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7IH1cbiAgZ2V0QWN0aW9ucygpOiBGb3JtQWN0aW9uW10geyByZXR1cm4gdGhpcy5fYWN0aW9uQXJyYXk7IH1cbiAgZ2V0QWN0aW9uKGNvZGU6IHN0cmluZyk6IEZvcm1BY3Rpb24geyByZXR1cm4gKGNvZGUgJiYgdGhpcy5fYWN0aW9ucz8uW2NvZGVdKSA/IHRoaXMuX2FjdGlvbnNbY29kZV0gOiBudWxsOyB9XG4gIHNob3dBY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25BY3Rpb25zKGNvZGVzLCBTSE9XKTsgfVxuICBoaWRlQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgSElERSk7IH1cbiAgZW5hYmxlQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgRU5BQkxFKTsgfVxuICBkaXNhYmxlQWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uQWN0aW9ucyhjb2RlcywgRElTQUJMRSk7IH1cblxuICBleGVjT25BY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uQ29kZXMgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGlmICghZnVuY3Rpb25OYW1lIHx8IGFjdGlvbkNvZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBhY3Rpb25Db2Rlcy5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5nZXRBY3Rpb24oY29kZSk7XG4gICAgICBhY3Rpb24/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRhYmxhc1xuICBnZXQgdGFibGVzKCk6IGFueSB7IHJldHVybiB0aGlzLnRhYmxlczsgfVxuICBnZXRUYWJsZXMoKTogUmVjb3JkVGFibGVbXSB7IHJldHVybiB0aGlzLl90YWJsZUFycmF5OyB9XG4gIGdldFRhYmxlKGNvZGU6IHN0cmluZyk6IFJlY29yZFRhYmxlIHsgcmV0dXJuIChjb2RlICYmIHRoaXMuX3RhYmxlcz8uW2NvZGVdKSA/IHRoaXMuX3RhYmxlc1tjb2RlXSA6IG51bGw7IH1cbiAgZ2V0VGFibGVSZWNvcmQoY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKTogVGFibGVSZWNvcmREYXRhIHsgcmV0dXJuIHRoaXMuZ2V0VGFibGUoY29kZSk/LmdldFRhYmxlUmVjb3JkKGlkKSB9XG5cbiAgZW5hYmxlVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIEVOQUJMRSk7IH1cbiAgZGlzYWJsZVRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uVGFibGVzKGNvZGVzLCBESVNBQkxFKTsgfVxuICBzaG93VGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyByZXR1cm4gdGhpcy5leGVjT25UYWJsZXMoY29kZXMsIFNIT1cpOyB9XG4gIGhpZGVUYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgSElERSk7IH1cbiAgY2xlYW5UYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblRhYmxlcyhjb2RlcywgQ0xFQU4pOyB9XG5cbiAgZXhlY09uVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFibGVDb2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgdGFibGVDb2Rlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgdGFibGVDb2Rlcy5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgICAgdGFibGU/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNlY2Npb25lc1xuICBnZXQgc2VjdGlvbnMoKTogYW55IHsgcmV0dXJuIHRoaXMuX3NlY3Rpb25zOyB9XG4gIGdldFNlY3Rpb25zKCk6IFJlY29yZEZvcm1TZWN0aW9uW10geyByZXR1cm4gdGhpcy5fc2VjdGlvbkFycmF5OyB9XG4gIGdldFNlY3Rpb25zQnlBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOiBSZWNvcmRGb3JtU2VjdGlvbltdIHsgcmV0dXJuIHRoaXMuX3NlY3Rpb25BcnJheS5maWx0ZXIoaXRlbSA9PiBpdGVtLm1hdGNoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7IH1cbiAgZ2V0IHNlY3Rpb25UaXRsZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5fc2VjdGlvbkFycmF5Lm1hcChmb3JtU2VjdGlvbiA9PiBmb3JtU2VjdGlvbi5zZWN0aW9uVGl0bGUpOyB9XG4gIGdldCB2aXNpYmxlU2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLl9zZWN0aW9uQXJyYXkuZmlsdGVyKHNlYyA9PiBzZWMuYWJzb2x1dGVWaXNpYmxlKTsgfVxuICBnZXRTZWN0aW9uKGNvZGU6IHN0cmluZyk6IFJlY29yZEZvcm1TZWN0aW9uIHsgcmV0dXJuIChjb2RlICYmIHRoaXMuX3NlY3Rpb25zPy5bY29kZV0pID8gdGhpcy5fc2VjdGlvbnNbY29kZV0gOiBudWxsOyB9XG4gIHNob3dTZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgdGhpcy5leGVjT25TZWN0aW9ucyhjb2RlcywgU0hPVyk7IH1cbiAgaGlkZVNlY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQgeyB0aGlzLmV4ZWNPblNlY3Rpb25zKGNvZGVzLCBISURFKTsgfVxuICBhY3RpdmVTZWN0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9leGNsdXNpdmVTZWN0aW9uc0J5QXR0cltBQ1RJVkVdOyB9XG4gIGdldFN1YlNlY3Rpb24oY29kZTogc3RyaW5nLCBzdWJDb2RlKTogUmVjb3JkRm9ybVN1YlNlY3Rpb24geyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5nZXRTdWJzZWN0aW9uKHN1YkNvZGUpID8/IG51bGw7IH1cbiAgc2hvd1N1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7IHJldHVybiB0aGlzLmV4ZWNPblN1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGVzLCBTSE9XKTsgfVxuICBoaWRlU3ViU2VjdGlvbnMoY29kZTogc3RyaW5nLCBzdWJDb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZXhlY09uU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZXMsIEhJREUpOyB9XG4gIGdldFNlY3Rpb25BY3Rpb25zKGNvZGUpOiBGb3JtQWN0aW9uW10geyByZXR1cm4gdGhpcy5nZXRTZWN0aW9uKGNvZGUpPy5nZXRBY3Rpb25zKCkgPz8gbnVsbDsgfVxuICBnZXRTZWN0aW9uQWN0aW9uTmFtZXMoY29kZSk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbihjb2RlKT8uZ2V0QWN0aW9uTmFtZXMoKSA/PyBudWxsOyB9XG5cbiAgYWN0aXZhdGVTZWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChjb2RlID09PSB0aGlzLl9leGNsdXNpdmVTZWN0aW9uc0J5QXR0cltBQ1RJVkVdKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZ2V0U2VjdGlvbih0aGlzLmFjdGl2ZVNlY3Rpb24oKSk/LmluYWN0aXZhdGUoKTtcbiAgICB0aGlzLmdldFNlY3Rpb24oY29kZSk/LmFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZXhjbHVzaXZlU2VjdGlvbnNCeUF0dHJbQUNUSVZFXSA9IGNvZGU7XG4gIH1cblxuICBleGVjT25TZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcgfCBudWxsLCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb25Db2RlcyA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgc2VjdGlvbkNvZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBzZWN0aW9uQ29kZXMuZm9yRWFjaChjb2RlID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgICBzZWN0aW9uPy5bZnVuY3Rpb25OYW1lXT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBleGVjT25TdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1Yk5hbWVzOiBzdHJpbmdbXSB8IHN0cmluZyB8IG51bGwsIGZ1bmN0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3ViQ29kZXMgPSAoQXJyYXkuaXNBcnJheShzdWJOYW1lcykpID8gc3ViTmFtZXMgOiAoc3ViTmFtZXMgPyBbc3ViTmFtZXNdIDogW10pO1xuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUgfHwgIXNlY3Rpb24gfHwgc3ViQ29kZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgIGZvciAoY29uc3Qgc3ViQ29kZSBvZiBzdWJDb2Rlcykge1xuICAgICAgY29uc3Qgc3ViU2VjdGlvbiA9IHRoaXMuZ2V0U3ViU2VjdGlvbihjb2RlLCBzdWJDb2RlKTtcbiAgICAgIHN1YlNlY3Rpb24/LltmdW5jdGlvbk5hbWVdPy4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kb3MgcHJvcGlvcyBkZSBnZXN0acOzbiBkZWwgZm9ybXVsYXJpb1xuICAgKi9cblxuICBjbGVhbkRhdGEoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLl9maWVsZEFycmF5KSB7XG4gICAgICBmaWVsZC5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRoaXMuX3RhYmxlQXJyYXkpIHtcbiAgICAgIHRhYmxlLmNsZWFuKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGF5bG9hZCgpOiBhbnkge1xuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtUGF5bG9hZCA9IHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICB0YWJsZXM6IFtdLFxuICAgIH07XG4gICAgZm9ybURhdGEuZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKS5maWx0ZXIoZmxkID0+ICFmbGQ/Lm91dHB1dE9ubHkpXG4gICAgICAubWFwKGZsZCA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkUGF5bG9hZDogRmllbGRQYXlsb2FkID0ge1xuICAgICAgICAgIGZpZWxkQ29kZTogZmxkPy5jb2RlLFxuICAgICAgICAgIGZpZWxkVmFsdWU6IGZsZD8udmFsdWUsXG4gICAgICAgICAgZWRpdGFibGU6ICFmbGQ/LmFic29sdXRlRGlzYWJsZWQsXG4gICAgICAgICAgdmlzaWJsZTogZmxkPy5hYnNvbHV0ZVZpc2libGUsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZsZD8ucmVxdWlyZWQsXG4gICAgICAgICAgZmllbGRPcHRpb25zOiAnJyxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRQYXlsb2FkO1xuICAgICAgfSk7XG5cbiAgICBmb3JtRGF0YS50YWJsZXMgPSB0aGlzLmdldFRhYmxlcygpLm1hcCh0YmwgPT4ge1xuICAgICAgY29uc3QgdGFibGVQYXlsb2FkOiBUYWJsZVBheWxvYWQgPSB7XG4gICAgICAgIHRhYmxlQ29kZTogdGJsLnRhYmxlQ29kZSxcbiAgICAgICAgdmlzaWJsZTogdGJsLmFic29sdXRlVmlzaWJsZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IHRibC5jdXJyZW50UGFnZSxcbiAgICAgICAgcmVxdWVzdGVkUGFnZTogdGJsLnJlcXVlc3RlZFBhZ2UsXG4gICAgICAgIHJlY29yZHNQZXJQYWdlOiB0YmwucmVjb3Jkc1BlclBhZ2UsXG4gICAgICAgIGN1cnJlbnRGaWx0ZXI6IHRibC5jdXJyZW50RmlsdGVyLFxuICAgICAgICBzb3J0aW5nQ29sdW1uOiB0Ymwuc29ydGluZy5jb2x1bW5OYW1lLFxuICAgICAgICBzb3J0aW5nRGlyZWN0aW9uOiB0Ymwuc29ydGluZy5kaXJlY3Rpb24sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRhYmxlUGF5bG9hZFxuICAgIH0pXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG59XG4iXX0=
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
-
import { FormPiece } from './piece';
|
|
3
|
-
const VISIBLE = 'visible';
|
|
4
|
-
const DISABLED = 'disabled';
|
|
5
|
-
export class FormPiecePropagate extends FormPiece {
|
|
6
|
-
constructor(pieceDefinition, formConfig) {
|
|
7
|
-
super(pieceDefinition, formConfig);
|
|
8
|
-
this._attributeChange = new BehaviorSubject(null);
|
|
9
|
-
}
|
|
10
|
-
get attributeChange() { return this._attributeChange; }
|
|
11
|
-
propagateAttribute(name, value) {
|
|
12
|
-
this._attributeChange?.next({ name, value });
|
|
13
|
-
}
|
|
14
|
-
setVisibility(visible, forced = null) {
|
|
15
|
-
super.setVisibility(visible, forced);
|
|
16
|
-
this.propagateAttribute(VISIBLE, this._visible);
|
|
17
|
-
}
|
|
18
|
-
set enabled(enabled) {
|
|
19
|
-
super.enabled = enabled;
|
|
20
|
-
this.propagateAttribute(DISABLED, this._disabled);
|
|
21
|
-
}
|
|
22
|
-
formStateChange(state) {
|
|
23
|
-
super.formStateChange(state);
|
|
24
|
-
if (state) {
|
|
25
|
-
this.propagateAttribute(VISIBLE, this._visible);
|
|
26
|
-
this.propagateAttribute(DISABLED, this._disabled);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllY2UtcHJvcGFnYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVhaW4tbmctZm9ybXMtbGliL3NyYy9saWIvY2xhc3Nlcy9mb3Jtcy9waWVjZS1wcm9wYWdhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXBDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUMxQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFFNUIsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQVM7SUFHL0MsWUFBWSxlQUFvQixFQUFFLFVBQWU7UUFDL0MsS0FBSyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksZUFBZSxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUV2RCxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVRLGFBQWEsQ0FBQyxPQUFnQixFQUFFLFNBQXlCLElBQUk7UUFDcEUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLE9BQU87UUFDMUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVRLGVBQWUsQ0FBQyxLQUFLO1FBQzVCLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybVBpZWNlIH0gZnJvbSAnLi9waWVjZSc7XG5cbmNvbnN0IFZJU0lCTEUgPSAndmlzaWJsZSc7XG5jb25zdCBESVNBQkxFRCA9ICdkaXNhYmxlZCc7XG5cbmV4cG9ydCBjbGFzcyBGb3JtUGllY2VQcm9wYWdhdGUgZXh0ZW5kcyBGb3JtUGllY2Uge1xuICBwcm90ZWN0ZWQgX2F0dHJpYnV0ZUNoYW5nZTogQmVoYXZpb3JTdWJqZWN0PGFueT47XG5cbiAgY29uc3RydWN0b3IocGllY2VEZWZpbml0aW9uOiBhbnksIGZvcm1Db25maWc6IGFueSkge1xuICAgIHN1cGVyKHBpZWNlRGVmaW5pdGlvbiwgZm9ybUNvbmZpZyk7XG4gICAgdGhpcy5fYXR0cmlidXRlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICB9XG5cbiAgZ2V0IGF0dHJpYnV0ZUNoYW5nZSgpIHsgcmV0dXJuIHRoaXMuX2F0dHJpYnV0ZUNoYW5nZTsgfVxuXG4gIHByb3BhZ2F0ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuX2F0dHJpYnV0ZUNoYW5nZT8ubmV4dCh7IG5hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgc2V0VmlzaWJpbGl0eSh2aXNpYmxlOiBib29sZWFuLCBmb3JjZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIHN1cGVyLnNldFZpc2liaWxpdHkodmlzaWJsZSwgZm9yY2VkKTtcbiAgICB0aGlzLnByb3BhZ2F0ZUF0dHJpYnV0ZShWSVNJQkxFLCB0aGlzLl92aXNpYmxlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHNldCBlbmFibGVkKGVuYWJsZWQpIHtcbiAgICBzdXBlci5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB0aGlzLnByb3BhZ2F0ZUF0dHJpYnV0ZShESVNBQkxFRCwgdGhpcy5fZGlzYWJsZWQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZm9ybVN0YXRlQ2hhbmdlKHN0YXRlKSB7XG4gICAgc3VwZXIuZm9ybVN0YXRlQ2hhbmdlKHN0YXRlKTtcbiAgICBpZiAoc3RhdGUpIHtcbiAgICAgIHRoaXMucHJvcGFnYXRlQXR0cmlidXRlKFZJU0lCTEUsIHRoaXMuX3Zpc2libGUpO1xuICAgICAgdGhpcy5wcm9wYWdhdGVBdHRyaWJ1dGUoRElTQUJMRUQsIHRoaXMuX2Rpc2FibGVkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|