tuain-ng-forms-lib 14.3.20 → 14.4.90
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/esm2020/lib/classes/forms/element.mjs +8 -69
- package/esm2020/lib/classes/forms/field.mjs +5 -12
- package/esm2020/lib/classes/forms/form.mjs +11 -7
- package/esm2020/lib/classes/forms/piece-propagate.mjs +30 -0
- package/esm2020/lib/classes/forms/piece.mjs +95 -0
- package/esm2020/lib/classes/forms/section.mjs +44 -44
- package/esm2020/lib/classes/forms/subsection.mjs +24 -14
- package/esm2020/lib/classes/forms/table/action.mjs +5 -18
- package/esm2020/lib/classes/forms/table/column.mjs +8 -15
- package/esm2020/lib/classes/forms/table/row-data.mjs +14 -9
- package/esm2020/lib/classes/forms/table/table.mjs +62 -42
- package/esm2020/lib/components/elements/action.component.mjs +26 -13
- package/esm2020/lib/components/elements/field.component.mjs +20 -22
- package/esm2020/lib/components/elements/layout/element.component.mjs +5 -16
- package/esm2020/lib/components/elements/layout/form-header.component.mjs +5 -5
- package/esm2020/lib/components/elements/layout/piece.component.mjs +22 -0
- package/esm2020/lib/components/elements/layout/section.component.mjs +20 -5
- package/esm2020/lib/components/elements/layout/sub-section.component.mjs +20 -7
- package/esm2020/lib/components/elements/tables/table-record-action.component.mjs +21 -5
- package/esm2020/lib/components/elements/tables/table.component.mjs +50 -54
- package/esm2020/lib/components/forms/basic-form.mjs +26 -15
- package/fesm2015/tuain-ng-forms-lib.mjs +533 -398
- package/fesm2015/tuain-ng-forms-lib.mjs.map +1 -1
- package/fesm2020/tuain-ng-forms-lib.mjs +500 -368
- package/fesm2020/tuain-ng-forms-lib.mjs.map +1 -1
- package/lib/classes/forms/element.d.ts +3 -29
- package/lib/classes/forms/field.d.ts +0 -3
- package/lib/classes/forms/form.d.ts +3 -0
- package/lib/classes/forms/piece-propagate.d.ts +11 -0
- package/lib/classes/forms/piece.d.ts +41 -0
- package/lib/classes/forms/section.d.ts +10 -18
- package/lib/classes/forms/subsection.d.ts +10 -12
- package/lib/classes/forms/table/action.d.ts +3 -11
- package/lib/classes/forms/table/column.d.ts +4 -7
- package/lib/classes/forms/table/row-data.d.ts +1 -1
- package/lib/classes/forms/table/table.d.ts +3 -4
- package/lib/components/elements/action.component.d.ts +4 -8
- package/lib/components/elements/field.component.d.ts +5 -10
- package/lib/components/elements/layout/element.component.d.ts +3 -8
- package/lib/components/elements/layout/form-header.component.d.ts +3 -3
- package/lib/components/elements/layout/piece.component.d.ts +10 -0
- package/lib/components/elements/layout/section.component.d.ts +4 -3
- package/lib/components/elements/layout/sub-section.component.d.ts +4 -4
- package/lib/components/elements/tables/table-record-action.component.d.ts +2 -2
- package/lib/components/elements/tables/table.component.d.ts +6 -18
- package/lib/components/forms/basic-form.d.ts +2 -0
- package/package.json +1 -1
|
@@ -6,6 +6,21 @@ import { TableAction } from './action';
|
|
|
6
6
|
import { TableRecordData } from './row-data';
|
|
7
7
|
const TABLE_SORT_ASCENDING = 'asc';
|
|
8
8
|
const TABLE_SORT_DESCENDING = 'desc';
|
|
9
|
+
const attrs = {
|
|
10
|
+
allSelected: { name: 'allSelected', propagate: 'allSelected' },
|
|
11
|
+
tableCode: { name: 'tableCode', propagate: 'code' },
|
|
12
|
+
clientPaging: { name: 'clientPaging', propagate: null },
|
|
13
|
+
globalSearch: { name: 'globalSearch', propagate: 'globalSearch' },
|
|
14
|
+
globalFilterString: { name: 'globalFilterString', propagate: 'globalFilterString' },
|
|
15
|
+
sorting: { name: 'sorting', propagate: null },
|
|
16
|
+
recordsPerPage: { name: 'recordsPerPage', propagate: 'recordsPerPage' },
|
|
17
|
+
layout: { name: 'layout', propagate: 'layout' },
|
|
18
|
+
columns: { name: 'columns', propagate: 'columns' },
|
|
19
|
+
selectedRecords: { name: 'selectedRecords', propagate: 'selectedRecords' },
|
|
20
|
+
currentPage: { name: 'currentPage', propagate: 'currentPage' },
|
|
21
|
+
totalRecordsNumber: { name: 'totalRecordsNumber', propagate: 'totalRecordsNumber' },
|
|
22
|
+
visibleRecords: { name: 'visibleRecords', propagate: 'visibleRecords' },
|
|
23
|
+
};
|
|
9
24
|
export class RecordTable extends FormElement {
|
|
10
25
|
constructor(tableReceived, formConfig) {
|
|
11
26
|
super(tableReceived, formConfig);
|
|
@@ -14,10 +29,10 @@ export class RecordTable extends FormElement {
|
|
|
14
29
|
this._recordSelectionTrigger = new Subject();
|
|
15
30
|
this._selectionActionTrigger = new Subject();
|
|
16
31
|
this._getDataTrigger = new Subject();
|
|
17
|
-
this._attributeChange = new Subject();
|
|
18
32
|
this._tableColumnObj = {};
|
|
19
33
|
this._actionsObj = {};
|
|
20
34
|
// Mecanismos de filtrado nueva versión
|
|
35
|
+
this.globalFilterString = '';
|
|
21
36
|
this.globalFilterStrings = [];
|
|
22
37
|
this.layout = null;
|
|
23
38
|
this.tableRecordObj = {};
|
|
@@ -45,22 +60,27 @@ export class RecordTable extends FormElement {
|
|
|
45
60
|
this.selectable = tableReceived?.selectable ?? false;
|
|
46
61
|
this.selectionBackend = tableReceived?.selectionBackend ?? false;
|
|
47
62
|
this.sortable = tableReceived?.sortable ?? false;
|
|
48
|
-
this.setAttr(
|
|
49
|
-
this.setAttr(
|
|
50
|
-
this.setAttr(
|
|
51
|
-
this.setAttr(
|
|
52
|
-
this.setAttr(
|
|
53
|
-
this.setAttr(
|
|
54
|
-
this.setAttr(
|
|
55
|
-
this.setAttr(
|
|
63
|
+
this.setAttr(attrs.allSelected, false);
|
|
64
|
+
this.setAttr(attrs.tableCode, tableReceived.tableCode);
|
|
65
|
+
this.setAttr(attrs.clientPaging, tableReceived?.clientPaging ?? true);
|
|
66
|
+
this.setAttr(attrs.globalSearch, tableReceived?.simpleFilter ?? false);
|
|
67
|
+
this.setAttr(attrs.globalFilterString, '');
|
|
68
|
+
this.setAttr(attrs.sorting, { columnName: '', direction: '' });
|
|
69
|
+
this.setAttr(attrs.recordsPerPage, formConfig.defaultRecordsPerPage);
|
|
70
|
+
this.setAttr(attrs.layout, '');
|
|
56
71
|
if (tableReceived.fields) {
|
|
57
72
|
const columns = [];
|
|
58
73
|
for (const columnReceived of tableReceived.fields) {
|
|
59
|
-
const
|
|
74
|
+
const columnEnriched = {
|
|
75
|
+
...columnReceived,
|
|
76
|
+
visibleStates: this.visibleStates,
|
|
77
|
+
enabledStates: this.enabledStates
|
|
78
|
+
};
|
|
79
|
+
const columnDefinition = new RecordTableColumn(columnEnriched, this._formConfig);
|
|
60
80
|
columns.push(columnDefinition);
|
|
61
81
|
this._tableColumnObj[columnDefinition.fieldCode] = columnDefinition;
|
|
62
82
|
}
|
|
63
|
-
this.setAttr(
|
|
83
|
+
this.setAttr(attrs.columns, columns);
|
|
64
84
|
}
|
|
65
85
|
if (tableReceived.actions) {
|
|
66
86
|
const tableActions = tableReceived.actions.map(objDef => {
|
|
@@ -77,7 +97,7 @@ export class RecordTable extends FormElement {
|
|
|
77
97
|
return { ...objDef, visibleStates, enabledStates };
|
|
78
98
|
});
|
|
79
99
|
for (const actionReceived of tableActions) {
|
|
80
|
-
const inlineAction = new TableAction(actionReceived);
|
|
100
|
+
const inlineAction = new TableAction(actionReceived, this._formConfig);
|
|
81
101
|
this._actions.push(inlineAction);
|
|
82
102
|
this._actionsObj[inlineAction.actionCode] = inlineAction;
|
|
83
103
|
}
|
|
@@ -96,9 +116,8 @@ export class RecordTable extends FormElement {
|
|
|
96
116
|
get selectionActionTrigger() { return this._selectionActionTrigger; }
|
|
97
117
|
get recordSelectionTrigger() { return this._recordSelectionTrigger; }
|
|
98
118
|
get getDataTrigger() { return this._getDataTrigger; }
|
|
99
|
-
get attributeChange() { return this._attributeChange; }
|
|
100
119
|
getLayout() { return this.layout; }
|
|
101
|
-
setLayout(layout) { this.setAttr(
|
|
120
|
+
setLayout(layout) { this.setAttr(attrs.layout, layout); }
|
|
102
121
|
hasActions() { return (this._actions.length > 0); }
|
|
103
122
|
getSelectedRecords() { return this.tableRecords.filter(rec => rec.selected).map(rec => rec.recordId); }
|
|
104
123
|
activateGlobalSearch() { this.globalSearch = true; }
|
|
@@ -106,12 +125,6 @@ export class RecordTable extends FormElement {
|
|
|
106
125
|
columnDefinition(fieldCode) { return this._tableColumnObj[fieldCode]; }
|
|
107
126
|
putOnWait() { this.waiting = true; }
|
|
108
127
|
freeWaiting() { this.waiting = false; }
|
|
109
|
-
setAttr(name, value) {
|
|
110
|
-
this[name] = value;
|
|
111
|
-
if (this._formConfig.monitoredTableAttributes.includes(name)) {
|
|
112
|
-
this._attributeChange.next({ name, value });
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
128
|
notifyGlobalAction(actionCode) {
|
|
116
129
|
const tableEvent = {
|
|
117
130
|
tableCode: this.tableCode,
|
|
@@ -176,23 +189,23 @@ export class RecordTable extends FormElement {
|
|
|
176
189
|
this.updateVisibleRecords();
|
|
177
190
|
}
|
|
178
191
|
selectAll() {
|
|
179
|
-
this.setAttr(
|
|
192
|
+
this.setAttr(attrs.allSelected, true);
|
|
180
193
|
this.tableRecords.forEach(record => record.select());
|
|
181
|
-
this.setAttr(
|
|
194
|
+
this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
|
|
182
195
|
return true;
|
|
183
196
|
}
|
|
184
197
|
unSelectAll() {
|
|
185
|
-
this.setAttr(
|
|
198
|
+
this.setAttr(attrs.allSelected, false);
|
|
186
199
|
this.tableRecords.forEach(record => record.unselect());
|
|
187
|
-
this.setAttr(
|
|
200
|
+
this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
|
|
188
201
|
return true;
|
|
189
202
|
}
|
|
190
203
|
setTableRecords(tableRecords, append) {
|
|
191
204
|
if (!append) {
|
|
192
205
|
this.tableRecords = [];
|
|
193
|
-
this.setAttr(
|
|
206
|
+
this.setAttr(attrs.allSelected, false);
|
|
194
207
|
this.tableRecords.forEach(record => record.unselect());
|
|
195
|
-
this.setAttr(
|
|
208
|
+
this.setAttr(attrs.selectedRecords, []);
|
|
196
209
|
this.tableRecordObj = {};
|
|
197
210
|
}
|
|
198
211
|
const newRecordsObj = { ...this.tableRecordObj };
|
|
@@ -204,7 +217,7 @@ export class RecordTable extends FormElement {
|
|
|
204
217
|
newRecordsObj[recordIdKey] = recordReceived;
|
|
205
218
|
}
|
|
206
219
|
this.tableRecords = newRecords;
|
|
207
|
-
this.setAttr(
|
|
220
|
+
this.setAttr(attrs.selectedRecords, this.getSelectedRecords());
|
|
208
221
|
this.tableRecordObj = newRecordsObj;
|
|
209
222
|
this.updateVisibleRecords();
|
|
210
223
|
}
|
|
@@ -213,7 +226,7 @@ export class RecordTable extends FormElement {
|
|
|
213
226
|
setTableAppend(append) { this._appendPages = append; }
|
|
214
227
|
changePage(requestedPage) {
|
|
215
228
|
if (this.clientPaging) {
|
|
216
|
-
this.setAttr(
|
|
229
|
+
this.setAttr(attrs.currentPage, requestedPage);
|
|
217
230
|
this.updateVisibleRecords();
|
|
218
231
|
}
|
|
219
232
|
else {
|
|
@@ -221,11 +234,10 @@ export class RecordTable extends FormElement {
|
|
|
221
234
|
}
|
|
222
235
|
}
|
|
223
236
|
updateVisibleRecords() {
|
|
224
|
-
// updateView const changeViewAttributes = ['currentPage', 'recordsPerPage', 'sorting'];
|
|
225
237
|
let visibleRecords;
|
|
226
238
|
if (this.clientPaging) {
|
|
227
239
|
let filteredRecords = this.getFilteredRecords();
|
|
228
|
-
this.setAttr(
|
|
240
|
+
this.setAttr(attrs.totalRecordsNumber, filteredRecords.length);
|
|
229
241
|
const sliceNumber1 = (this.currentPage - 1) * this.recordsPerPage;
|
|
230
242
|
const sliceNumber2 = (this.currentPage - 1) * this.recordsPerPage + this.recordsPerPage;
|
|
231
243
|
visibleRecords = filteredRecords.slice(sliceNumber1, sliceNumber2);
|
|
@@ -238,17 +250,17 @@ export class RecordTable extends FormElement {
|
|
|
238
250
|
else {
|
|
239
251
|
visibleRecords = this.tableRecords;
|
|
240
252
|
}
|
|
241
|
-
this.setAttr(
|
|
253
|
+
this.setAttr(attrs.visibleRecords, visibleRecords);
|
|
242
254
|
}
|
|
243
255
|
updateFromServer(tableReceived) {
|
|
244
256
|
this.requestedPage = 1;
|
|
245
257
|
this.visible = tableReceived?.visible || true;
|
|
246
258
|
this.totalPages = tableReceived.totalPages || 1;
|
|
247
259
|
this.recordsNumber = tableReceived.recordsNumber;
|
|
248
|
-
this.setAttr(
|
|
249
|
-
this.setAttr(
|
|
250
|
-
this.setAttr(
|
|
251
|
-
this.setAttr(
|
|
260
|
+
this.setAttr(attrs.currentPage, +tableReceived?.currentPage || 1);
|
|
261
|
+
this.setAttr(attrs.recordsPerPage, +tableReceived.recordsPerPage);
|
|
262
|
+
this.setAttr(attrs.totalRecordsNumber, (this.clientPaging) ? tableReceived.tableRecords.length : +tableReceived.totalRecordsNumber);
|
|
263
|
+
this.setAttr(attrs.sorting, {
|
|
252
264
|
columnName: tableReceived.sortingColumn || '',
|
|
253
265
|
direction: tableReceived.sortingDirection || ''
|
|
254
266
|
});
|
|
@@ -297,7 +309,7 @@ export class RecordTable extends FormElement {
|
|
|
297
309
|
this.changePage(1);
|
|
298
310
|
}
|
|
299
311
|
if (notifyComponent) {
|
|
300
|
-
this.setAttr(
|
|
312
|
+
this.setAttr(attrs.globalFilterString, text.trim());
|
|
301
313
|
}
|
|
302
314
|
}
|
|
303
315
|
addFilterDefinition(columnName, filterDefinition) {
|
|
@@ -345,10 +357,10 @@ export class RecordTable extends FormElement {
|
|
|
345
357
|
for (let index = 0; index < columnFilters.length; index++) {
|
|
346
358
|
const columnFilter = columnFilters[index];
|
|
347
359
|
compactFilter.advancedFilter.push({
|
|
348
|
-
fieldCode: columnFilter
|
|
349
|
-
operator: columnFilter
|
|
350
|
-
fieldValue1: columnFilter
|
|
351
|
-
fieldValue2: columnFilter
|
|
360
|
+
fieldCode: columnFilter?.fieldCode,
|
|
361
|
+
operator: columnFilter?.operator,
|
|
362
|
+
fieldValue1: columnFilter?.values[0],
|
|
363
|
+
fieldValue2: columnFilter?.values[1],
|
|
352
364
|
});
|
|
353
365
|
}
|
|
354
366
|
return compactFilter;
|
|
@@ -364,7 +376,7 @@ export class RecordTable extends FormElement {
|
|
|
364
376
|
}
|
|
365
377
|
}
|
|
366
378
|
setRequiredOrder(columnField, direction = null) {
|
|
367
|
-
this.setAttr(
|
|
379
|
+
this.setAttr(attrs.sorting, {
|
|
368
380
|
columnName: columnField,
|
|
369
381
|
direction: (direction === 'ascend') ? TABLE_SORT_ASCENDING : TABLE_SORT_DESCENDING,
|
|
370
382
|
});
|
|
@@ -391,5 +403,13 @@ export class RecordTable extends FormElement {
|
|
|
391
403
|
}
|
|
392
404
|
return direction === TABLE_SORT_ASCENDING ? result : -result;
|
|
393
405
|
}
|
|
406
|
+
formStateChangeCustomSubscribe(formChangeSubject) {
|
|
407
|
+
this.columns?.forEach(column => {
|
|
408
|
+
column?.subscribeFormStateChange(formChangeSubject);
|
|
409
|
+
});
|
|
410
|
+
this._actions?.forEach(action => {
|
|
411
|
+
action?.subscribeFormStateChange(formChangeSubject);
|
|
412
|
+
});
|
|
413
|
+
}
|
|
394
414
|
}
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL3RhYmxlL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUNuQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQWNyQyxNQUFNLE9BQU8sV0FBWSxTQUFRLFdBQVc7SUEwQzFDLFlBQVksYUFBYSxFQUFFLFVBQVU7UUFDbkMsS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQTFDbEIseUJBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNqRCx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBQ2pELDRCQUF1QixHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDcEQsNEJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNwRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUMvQyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUdyQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUV6Qix1Q0FBdUM7UUFDL0Isd0JBQW1CLEdBQWEsRUFB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RyxDQUFDLENBQUM7UUFDZixJQUFJLGFBQWEsR0FBRyxhQUFhLEVBQUU7WUFDakMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2I7YUFBTSxJQUFJLGFBQWEsR0FBRyxhQUFhLEVBQUU7WUFDeEMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNaO1FBQ0QsT0FBTyxTQUFTLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZWxlbWVudFR5cGVzIH0gZnJvbSAnLi4vZm9ybS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnQgfSBmcm9tICcuLi9lbGVtZW50JztcbmltcG9ydCB7IFJlY29yZFRhYmxlQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVBY3Rpb24gfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBUYWJsZVJlY29yZERhdGEgfSBmcm9tICcuL3Jvdy1kYXRhJztcblxuY29uc3QgVEFCTEVfU09SVF9BU0NFTkRJTkcgPSAnYXNjJztcbmNvbnN0IFRBQkxFX1NPUlRfREVTQ0VORElORyA9ICdkZXNjJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUFjdGlvbkV2ZW50IHtcbiAgYWN0aW9uQ29kZTogc3RyaW5nO1xuICByZWNvcmRJZDogYW55O1xuICByZWNvcmREYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVFdmVudCB7XG4gIHRhYmxlQ29kZTogc3RyaW5nO1xuICBhY3Rpb25Db2RlOiBzdHJpbmcgfCBudWxsO1xuICBhY3Rpb25EZXRhaWw6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlY29yZFRhYmxlIGV4dGVuZHMgRm9ybUVsZW1lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmxpbmVBY3Rpb25UcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZ2xvYmFsQWN0aW9uVHJpZ2dlciA9IG5ldyBTdWJqZWN0PFRhYmxlRXZlbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlY29yZFNlbGVjdGlvblRyaWdnZXIgPSBuZXcgU3ViamVjdDxUYWJsZUV2ZW50PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25BY3Rpb25UcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZ2V0RGF0YVRyaWdnZXIgPSBuZXcgU3ViamVjdDxUYWJsZUV2ZW50PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdHRyaWJ1dGVDaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByaXZhdGUgX3RhYmxlQ29sdW1uT2JqID0ge307XG4gIHByaXZhdGUgX2FwcGVuZFBhZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIF9hY3Rpb25zOiBUYWJsZUFjdGlvbltdO1xuICBwcml2YXRlIF9hY3Rpb25zT2JqID0ge307XG5cbiAgLy8gTWVjYW5pc21vcyBkZSBmaWx0cmFkbyBudWV2YSB2ZXJzacOzblxuICBwcml2YXRlIGdsb2JhbEZpbHRlclN0cmluZ3M6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgc2VsZWN0ZWRSZWNvcmRzOiBhbnk7XG4gIHByaXZhdGUgZ2xvYmFsU2VhcmNoOiBib29sZWFuO1xuICBwcml2YXRlIHJlc3RyaWN0ZWRJZDogYW55O1xuICBwcml2YXRlIGxheW91dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgdGFibGVSZWNvcmRzOiBUYWJsZVJlY29yZERhdGFbXTtcbiAgdGFibGVSZWNvcmRPYmogPSB7fTtcbiAgdmlzaWJsZVJlY29yZHM6IFRhYmxlUmVjb3JkRGF0YVtdIHwgbnVsbCA9IG51bGw7XG4gIGNvbHVtbnM6IFJlY29yZFRhYmxlQ29sdW1uW107XG4gIHNlbGVjdGFibGU6IGJvb2xlYW47XG4gIHNlbGVjdGlvbkJhY2tlbmQ6IGJvb2xlYW47XG4gIHNlbGVjdGlvbkZpZWxkOiBzdHJpbmc7XG4gIGFsbFNlbGVjdGVkID0gZmFsc2U7XG5cbiAgdGFibGVDb2RlOiBzdHJpbmcgPSAnJztcbiAgdGFibGVUaXRsZTogc3RyaW5nO1xuICBjdXJyZW50UGFnZTogbnVtYmVyO1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIHJlcXVlc3RlZFBhZ2U6IG51bWJlcjtcbiAgcmVjb3Jkc1BlclBhZ2U6IG51bWJlciA9IDEwO1xuICB0b3RhbFJlY29yZHNOdW1iZXI6IG51bWJlciA9IDA7XG4gIHJlY29yZHNOdW1iZXI6IG51bWJlciA9IDA7XG4gIHNvcnRpbmc6IGFueTtcblxuICB3YWl0aW5nOiBib29sZWFuO1xuICBjbGllbnRQYWdpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBzb3J0YWJsZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih0YWJsZVJlY2VpdmVkLCBmb3JtQ29uZmlnKSB7XG4gICAgc3VwZXIodGFibGVSZWNlaXZlZCwgZm9ybUNvbmZpZyk7XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlcy50YWJsZTtcbiAgICB0aGlzLndhaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSAxO1xuICAgIHRoaXMucmVxdWVzdGVkUGFnZSA9IDE7XG4gICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgdGhpcy5fdGFibGVDb2x1bW5PYmogPSB7fTtcbiAgICB0aGlzLl9hY3Rpb25zID0gW107XG4gICAgdGhpcy5fYWN0aW9uc09iaiA9IHt9O1xuICAgIHRoaXMudGFibGVSZWNvcmRzID0gW107XG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBmYWxzZTtcbiAgICB0aGlzLnJlc3RyaWN0ZWRJZCA9IG51bGw7XG5cbiAgICB0aGlzLnRhYmxlVGl0bGUgPSB0YWJsZVJlY2VpdmVkLnRhYmxlVGl0bGU7XG4gICAgdGhpcy5fYXBwZW5kUGFnZXMgPSB0YWJsZVJlY2VpdmVkPy5hcHBlbmQgPz8gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gdGFibGVSZWNlaXZlZD8uc2VsZWN0YWJsZSA/PyBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGlvbkJhY2tlbmQgPSB0YWJsZVJlY2VpdmVkPy5zZWxlY3Rpb25CYWNrZW5kID8/IGZhbHNlO1xuICAgIHRoaXMuc29ydGFibGUgPSB0YWJsZVJlY2VpdmVkPy5zb3J0YWJsZSA/PyBmYWxzZTtcblxuICAgIHRoaXMuc2V0QXR0cignYWxsU2VsZWN0ZWQnLCBmYWxzZSk7XG4gICAgdGhpcy5zZXRBdHRyKCd0YWJsZUNvZGUnLCB0YWJsZVJlY2VpdmVkLnRhYmxlQ29kZSk7XG4gICAgdGhpcy5zZXRBdHRyKCdjbGllbnRQYWdpbmcnLCB0YWJsZVJlY2VpdmVkPy5jbGllbnRQYWdpbmcgPz8gdHJ1ZSk7XG4gICAgdGhpcy5zZXRBdHRyKCdnbG9iYWxTZWFyY2gnLCB0YWJsZVJlY2VpdmVkPy5zaW1wbGVGaWx0ZXIgPz8gZmFsc2UpO1xuICAgIHRoaXMuc2V0QXR0cignZ2xvYmFsRmlsdGVyU3RyaW5nJywgJycpO1xuICAgIHRoaXMuc2V0QXR0cignc29ydGluZycsIHsgY29sdW1uTmFtZTogJycsIGRpcmVjdGlvbjogJycgfSk7XG4gICAgdGhpcy5zZXRBdHRyKCdyZWNvcmRzUGVyUGFnZScsIGZvcm1Db25maWcuZGVmYXVsdFJlY29yZHNQZXJQYWdlKTtcbiAgICB0aGlzLnNldEF0dHIoJ2xheW91dCcsICcnKTtcblxuICAgIGlmICh0YWJsZVJlY2VpdmVkLmZpZWxkcykge1xuICAgICAgY29uc3QgY29sdW1uczogUmVjb3JkVGFibGVDb2x1bW5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjb2x1bW5SZWNlaXZlZCBvZiB0YWJsZVJlY2VpdmVkLmZpZWxkcykge1xuICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uOiBSZWNvcmRUYWJsZUNvbHVtbiA9IG5ldyBSZWNvcmRUYWJsZUNvbHVtbihjb2x1bW5SZWNlaXZlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5PYmpbY29sdW1uRGVmaW5pdGlvbi5maWVsZENvZGVdID0gY29sdW1uRGVmaW5pdGlvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0QXR0cignY29sdW1ucycsIGNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAodGFibGVSZWNlaXZlZC5hY3Rpb25zKSB7XG4gICAgICBjb25zdCB0YWJsZUFjdGlvbnMgPSB0YWJsZVJlY2VpdmVkLmFjdGlvbnMubWFwKG9iakRlZiA9PiB7XG4gICAgICAgIGxldCB2aXNpYmxlU3RhdGVzID0gb2JqRGVmLnZpc2libGVTdGF0ZXM7XG4gICAgICAgIGxldCBlbmFibGVkU3RhdGVzID0gb2JqRGVmLmVuYWJsZWRTdGF0ZXM7XG4gICAgICAgIGlmICghdmlzaWJsZVN0YXRlcykge1xuICAgICAgICAgIHZpc2libGVTdGF0ZXMgPSAob2JqRGVmLmFjdGlvbk1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCk7XG4gICAgICAgICAgZW5hYmxlZFN0YXRlcyA9IChvYmpEZWYuYWN0aW9uTW9kZXMgfHwgJycpLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5sZW5ndGggPiAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5vYmpEZWYsIHZpc2libGVTdGF0ZXMsIGVuYWJsZWRTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBhY3Rpb25SZWNlaXZlZCBvZiB0YWJsZUFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaW5saW5lQWN0aW9uID0gbmV3IFRhYmxlQWN0aW9uKGFjdGlvblJlY2VpdmVkKTtcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5wdXNoKGlubGluZUFjdGlvbik7XG4gICAgICAgIHRoaXMuX2FjdGlvbnNPYmpbaW5saW5lQWN0aW9uLmFjdGlvbkNvZGVdID0gaW5saW5lQWN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbkZpZWxkID0gKHRoaXMuc2VsZWN0YWJsZSkgPyB0YWJsZVJlY2VpdmVkPy5zZWxlY3Rpb25GaWVsZCA6IG51bGw7XG4gICAgLy8gRmlsdHJvcyBwcmVkZWZpbmlkb3MgZW4gZWwgZm9ybXVsYXJpb1xuICAgIGlmICh0YWJsZVJlY2VpdmVkLmZpbHRlcnMpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0YWJsZVJlY2VpdmVkLmZpbHRlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHRoaXMuYWRkRmlsdGVyRGVmaW5pdGlvbih0YWJsZVJlY2VpdmVkLmZpbHRlcnNbaW5kZXhdLmZpZWxkQ29kZSwgdGFibGVSZWNlaXZlZC5maWx0ZXJzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbHVtbk5hbWVzKCkgeyByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGFibGVDb2x1bW5PYmopOyB9XG4gIGdldCBpbmxpbmVBY3Rpb25UcmlnZ2VyKCkgeyByZXR1cm4gdGhpcy5faW5saW5lQWN0aW9uVHJpZ2dlcjsgfVxuICBnZXQgZ2xvYmFsQWN0aW9uVHJpZ2dlcigpIHsgcmV0dXJuIHRoaXMuX2dsb2JhbEFjdGlvblRyaWdnZXI7IH1cbiAgZ2V0IHNlbGVjdGlvbkFjdGlvblRyaWdnZXIoKSB7IHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY3Rpb25UcmlnZ2VyOyB9XG4gIGdldCByZWNvcmRTZWxlY3Rpb25UcmlnZ2VyKCkgeyByZXR1cm4gdGhpcy5fcmVjb3JkU2VsZWN0aW9uVHJpZ2dlcjsgfVxuICBnZXQgZ2V0RGF0YVRyaWdnZXIoKSB7IHJldHVybiB0aGlzLl9nZXREYXRhVHJpZ2dlcjsgfVxuICBnZXQgYXR0cmlidXRlQ2hhbmdlKCkgeyByZXR1cm4gdGhpcy5fYXR0cmlidXRlQ2hhbmdlOyB9XG5cbiAgZ2V0TGF5b3V0KCkgeyByZXR1cm4gdGhpcy5sYXlvdXQ7IH1cbiAgc2V0TGF5b3V0KGxheW91dCkgeyB0aGlzLnNldEF0dHIoJ2xheW91dCcsIGxheW91dCk7IH1cbiAgaGFzQWN0aW9ucygpIHsgcmV0dXJuICh0aGlzLl9hY3Rpb25zLmxlbmd0aCA+IDApOyB9XG4gIGdldFNlbGVjdGVkUmVjb3JkcygpIHsgcmV0dXJuIHRoaXMudGFibGVSZWNvcmRzLmZpbHRlcihyZWMgPT4gcmVjLnNlbGVjdGVkKS5tYXAocmVjID0+IHJlYy5yZWNvcmRJZCk7IH1cbiAgYWN0aXZhdGVHbG9iYWxTZWFyY2goKSB7IHRoaXMuZ2xvYmFsU2VhcmNoID0gdHJ1ZTsgfVxuICBpbmFjdGl2YXRlR2xvYmFsU2VhcmNoKCkgeyB0aGlzLmdsb2JhbFNlYXJjaCA9IGZhbHNlOyB9XG4gIGNvbHVtbkRlZmluaXRpb24oZmllbGRDb2RlKTogUmVjb3JkVGFibGVDb2x1bW4geyByZXR1cm4gdGhpcy5fdGFibGVDb2x1bW5PYmpbZmllbGRDb2RlXTsgfVxuICBwdXRPbldhaXQoKSB7IHRoaXMud2FpdGluZyA9IHRydWU7IH1cbiAgZnJlZVdhaXRpbmcoKSB7IHRoaXMud2FpdGluZyA9IGZhbHNlOyB9XG5cbiAgc2V0QXR0cihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX2Zvcm1Db25maWcubW9uaXRvcmVkVGFibGVBdHRyaWJ1dGVzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICB0aGlzLl9hdHRyaWJ1dGVDaGFuZ2UubmV4dCh7IG5hbWUsIHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5vdGlmeUdsb2JhbEFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLl9nbG9iYWxBY3Rpb25UcmlnZ2VyLm5leHQodGFibGVFdmVudCk7XG4gIH1cblxuICBub3RpZnlJbmxpbmVBY3Rpb24odGFibGVBY3Rpb25FdmVudDogVGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHRhYmxlRXZlbnQ6IFRhYmxlRXZlbnQgPSB7XG4gICAgICB0YWJsZUNvZGU6IHRoaXMudGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZTogdGFibGVBY3Rpb25FdmVudC5hY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHJlY29yZElkOiB0YWJsZUFjdGlvbkV2ZW50LnJlY29yZElkLFxuICAgICAgICByZWNvcmREYXRhOiB0YWJsZUFjdGlvbkV2ZW50LnJlY29yZERhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX2lubGluZUFjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVJlY29yZFNlbGVjdGlvbihyZWNvcmRJZCkge1xuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuZ2V0VGFibGVSZWNvcmQocmVjb3JkSWQpO1xuICAgIGlmICghcmVjb3JkKSB7IHJldHVybjsgfVxuICAgIHJlY29yZC50b2dnbGVTZWxlY3QoKTtcbiAgICB0aGlzLnJlcXVlc3RlZFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlID8/IDE7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHJlY29yZElkOiByZWNvcmQucmVjb3JkSWQsXG4gICAgICAgIHJlY29yZERhdGE6IHJlY29yZC5yZWNvcmREYXRhXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnJlY29yZFNlbGVjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVNlbGVjdGlvbkFjdGlvbihhY3Rpb25Db2RlKSB7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uRGV0YWlsOiB7XG4gICAgICAgIHNlbGVjdGVkUmVjb3JkczogdGhpcy5zZWxlY3RlZFJlY29yZHNcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeUdldERhdGFBY3Rpb24ocmVxdWVzdGVkUGFnZSA9IG51bGwpIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gICAgdGhpcy5yZXF1ZXN0ZWRQYWdlID0gcmVxdWVzdGVkUGFnZSB8fCB0aGlzLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgYWN0aW9uRGV0YWlsOiBudWxsLFxuICAgIH07XG4gICAgdGhpcy5fZ2V0RGF0YVRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIHRoaXMudGFibGVSZWNvcmRzID0gW107XG4gICAgdGhpcy51blNlbGVjdEFsbCgpO1xuICAgIHRoaXMudGFibGVSZWNvcmRPYmogPSB7fTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5zZXRBdHRyKCdhbGxTZWxlY3RlZCcsIHRydWUpO1xuICAgIHRoaXMudGFibGVSZWNvcmRzLmZvckVhY2gocmVjb3JkID0+IHJlY29yZC5zZWxlY3QoKSk7XG4gICAgdGhpcy5zZXRBdHRyKCdzZWxlY3RlZFJlY29yZHMnLCB0aGlzLmdldFNlbGVjdGVkUmVjb3JkcygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgdW5TZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5zZXRBdHRyKCdhbGxTZWxlY3RlZCcsIGZhbHNlKTtcbiAgICB0aGlzLnRhYmxlUmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiByZWNvcmQudW5zZWxlY3QoKSk7XG4gICAgdGhpcy5zZXRBdHRyKCdzZWxlY3RlZFJlY29yZHMnLCB0aGlzLmdldFNlbGVjdGVkUmVjb3JkcygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNldFRhYmxlUmVjb3Jkcyh0YWJsZVJlY29yZHMsIGFwcGVuZCkge1xuICAgIGlmICghYXBwZW5kKSB7XG4gICAgICB0aGlzLnRhYmxlUmVjb3JkcyA9IFtdO1xuICAgICAgdGhpcy5zZXRBdHRyKCdhbGxTZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgIHRoaXMudGFibGVSZWNvcmRzLmZvckVhY2gocmVjb3JkID0+IHJlY29yZC51bnNlbGVjdCgpKTtcbiAgICAgIHRoaXMuc2V0QXR0cignc2VsZWN0ZWRSZWNvcmRzJywgW10pO1xuICAgICAgdGhpcy50YWJsZVJlY29yZE9iaiA9IHt9O1xuICAgIH1cbiAgICBjb25zdCBuZXdSZWNvcmRzT2JqID0geyAuLi50aGlzLnRhYmxlUmVjb3JkT2JqIH07XG4gICAgY29uc3QgbmV3UmVjb3JkcyA9IFsuLi50aGlzLnRhYmxlUmVjb3Jkc107XG4gICAgZm9yIChjb25zdCB0YWJsZVJlY29yZCBvZiB0YWJsZVJlY29yZHMpIHtcbiAgICAgIGNvbnN0IHJlY29yZFJlY2VpdmVkOiBUYWJsZVJlY29yZERhdGEgPSBuZXcgVGFibGVSZWNvcmREYXRhKHRhYmxlUmVjb3JkLCB0aGlzLmNvbHVtbnMsIHRoaXMuc2VsZWN0aW9uRmllbGQpO1xuICAgICAgY29uc3QgcmVjb3JkSWRLZXkgPSByZWNvcmRSZWNlaXZlZC5yZWNvcmRJZEtleTtcbiAgICAgIG5ld1JlY29yZHMucHVzaChyZWNvcmRSZWNlaXZlZCk7XG4gICAgICBuZXdSZWNvcmRzT2JqW3JlY29yZElkS2V5XSA9IHJlY29yZFJlY2VpdmVkO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlUmVjb3JkcyA9IG5ld1JlY29yZHM7XG4gICAgdGhpcy5zZXRBdHRyKCdzZWxlY3RlZFJlY29yZHMnLCB0aGlzLmdldFNlbGVjdGVkUmVjb3JkcygpKTtcbiAgICB0aGlzLnRhYmxlUmVjb3JkT2JqID0gbmV3UmVjb3Jkc09iajtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBhcHBlbmRSZWNvcmRzKHJlY29yZHMpIHsgdGhpcy5zZXRUYWJsZVJlY29yZHMocmVjb3JkcywgdHJ1ZSk7IH1cbiAgcmVwbGFjZVJlY29yZHMocmVjb3JkcykgeyB0aGlzLnNldFRhYmxlUmVjb3JkcyhyZWNvcmRzLCBmYWxzZSk7IH1cblxuICBzZXRUYWJsZUFwcGVuZChhcHBlbmQ6IGJvb2xlYW4pIHsgdGhpcy5fYXBwZW5kUGFnZXMgPSBhcHBlbmQgfVxuXG4gIGNoYW5nZVBhZ2UocmVxdWVzdGVkUGFnZSkge1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgdGhpcy5zZXRBdHRyKCdjdXJyZW50UGFnZScsIHJlcXVlc3RlZFBhZ2UpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vdGlmeUdldERhdGFBY3Rpb24ocmVxdWVzdGVkUGFnZSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVmlzaWJsZVJlY29yZHMoKSB7XG4gICAgLy8gdXBkYXRlVmlldyBjb25zdCBjaGFuZ2VWaWV3QXR0cmlidXRlcyA9IFsnY3VycmVudFBhZ2UnLCAncmVjb3Jkc1BlclBhZ2UnLCAnc29ydGluZyddO1xuICAgIGxldCB2aXNpYmxlUmVjb3JkczogYW55W107XG4gICAgaWYgKHRoaXMuY2xpZW50UGFnaW5nKSB7XG4gICAgICBsZXQgZmlsdGVyZWRSZWNvcmRzID0gdGhpcy5nZXRGaWx0ZXJlZFJlY29yZHMoKTtcbiAgICAgIHRoaXMuc2V0QXR0cigndG90YWxSZWNvcmRzTnVtYmVyJywgZmlsdGVyZWRSZWNvcmRzLmxlbmd0aCk7XG4gICAgICBjb25zdCBzbGljZU51bWJlcjEgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5yZWNvcmRzUGVyUGFnZTtcbiAgICAgIGNvbnN0IHNsaWNlTnVtYmVyMiA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJlY29yZHNQZXJQYWdlICsgdGhpcy5yZWNvcmRzUGVyUGFnZVxuICAgICAgdmlzaWJsZVJlY29yZHMgPSBmaWx0ZXJlZFJlY29yZHMuc2xpY2Uoc2xpY2VOdW1iZXIxLCBzbGljZU51bWJlcjIpO1xuICAgICAgY29uc3QgcmVjb3Jkc0xhc3RQYWdlID0gdGhpcy50b3RhbFJlY29yZHNOdW1iZXIgJSB0aGlzLnJlY29yZHNQZXJQYWdlO1xuICAgICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGgudHJ1bmModGhpcy50b3RhbFJlY29yZHNOdW1iZXIgLyB0aGlzLnJlY29yZHNQZXJQYWdlICsgKHJlY29yZHNMYXN0UGFnZSA/IDEgOiAwKSk7XG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRvdGFsUGFnZXMgfHwgMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmlzaWJsZVJlY29yZHMgPSB0aGlzLnRhYmxlUmVjb3JkcztcbiAgICB9XG4gICAgdGhpcy5zZXRBdHRyKCd2aXNpYmxlUmVjb3JkcycsIHZpc2libGVSZWNvcmRzKTtcbiAgfVxuXG4gIHVwZGF0ZUZyb21TZXJ2ZXIodGFibGVSZWNlaXZlZCkge1xuICAgIHRoaXMucmVxdWVzdGVkUGFnZSA9IDE7XG4gICAgdGhpcy52aXNpYmxlID0gdGFibGVSZWNlaXZlZD8udmlzaWJsZSB8fCB0cnVlO1xuICAgIHRoaXMudG90YWxQYWdlcyA9IHRhYmxlUmVjZWl2ZWQudG90YWxQYWdlcyB8fCAxO1xuICAgIHRoaXMucmVjb3Jkc051bWJlciA9IHRhYmxlUmVjZWl2ZWQucmVjb3Jkc051bWJlcjtcbiAgICB0aGlzLnNldEF0dHIoJ2N1cnJlbnRQYWdlJywgK3RhYmxlUmVjZWl2ZWQ/LmN1cnJlbnRQYWdlIHx8IDEpO1xuICAgIHRoaXMuc2V0QXR0cigncmVjb3Jkc1BlclBhZ2UnLCArdGFibGVSZWNlaXZlZC5yZWNvcmRzUGVyUGFnZSk7XG4gICAgdGhpcy5zZXRBdHRyKCd0b3RhbFJlY29yZHNOdW1iZXInLCAodGhpcy5jbGllbnRQYWdpbmcpID8gdGFibGVSZWNlaXZlZC50YWJsZVJlY29yZHMubGVuZ3RoIDogK3RhYmxlUmVjZWl2ZWQudG90YWxSZWNvcmRzTnVtYmVyKTtcbiAgICB0aGlzLnNldEF0dHIoJ3NvcnRpbmcnLCB7XG4gICAgICBjb2x1bW5OYW1lOiB0YWJsZVJlY2VpdmVkLnNvcnRpbmdDb2x1bW4gfHwgJycsXG4gICAgICBkaXJlY3Rpb246IHRhYmxlUmVjZWl2ZWQuc29ydGluZ0RpcmVjdGlvbiB8fCAnJ1xuICAgIH0pO1xuICAgIHRoaXMud2FpdGluZyA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5fYXBwZW5kUGFnZXMpIHtcbiAgICAgIHRoaXMucmVwbGFjZVJlY29yZHModGFibGVSZWNlaXZlZC50YWJsZVJlY29yZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcGVuZFJlY29yZHModGFibGVSZWNlaXZlZC50YWJsZVJlY29yZHMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBnZXRUYWJsZVJlY29yZChyZWNvcmRJZCkge1xuICAgIGNvbnN0IHJlY29yZElkS2V5ID0gKHR5cGVvZiByZWNvcmRJZCA9PT0gJ29iamVjdCcpID8gSlNPTi5zdHJpbmdpZnkocmVjb3JkSWQpIDogcmVjb3JkSWQ7XG4gICAgcmV0dXJuICh0aGlzLnRhYmxlUmVjb3JkT2JqICYmIHJlY29yZElkICYmIHRoaXMudGFibGVSZWNvcmRPYmpbcmVjb3JkSWRdKVxuICAgICAgPyB0aGlzLnRhYmxlUmVjb3JkT2JqW3JlY29yZElkXSA6IG51bGw7XG4gIH1cblxuICBnZXRBY3Rpb24oYWN0aW9uQ29kZSkge1xuICAgIHJldHVybiAodGhpcy5fYWN0aW9uc09iaiAmJiBhY3Rpb25Db2RlICYmIHRoaXMuX2FjdGlvbnNPYmpbYWN0aW9uQ29kZV0pXG4gICAgICA/IHRoaXMuX2FjdGlvbnNPYmpbYWN0aW9uQ29kZV0gOiBudWxsO1xuICB9XG5cbiAgZ2V0QWN0aW9ucyhhY3Rpb25DbGFzczogc3RyaW5nID0gdGhpcy5fZm9ybUNvbmZpZy50YWJsZUFjdGlvbnMuaW5saW5lLCBhY3Rpb25UeXBlczogc3RyaW5nW10gPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMuZmlsdGVyKGFjdGlvbkRlZiA9PiB7XG4gICAgICBjb25zdCB0eXBlSW5jbHVkZWQgPSAoYWN0aW9uVHlwZXMpID8gYWN0aW9uVHlwZXMuaW5jbHVkZXMoYWN0aW9uRGVmLmFjdGlvblR5cGUpIDogdHJ1ZTtcbiAgICAgIHJldHVybiBhY3Rpb25EZWYuYWN0aW9uQ2xhc3MgPT09IGFjdGlvbkNsYXNzICYmIHR5cGVJbmNsdWRlZDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZpbHRyb3NcblxuICBzZXRGaWx0ZXJCeUlkKGlkKSB7XG4gICAgaWYgKHRoaXMucmVzdHJpY3RlZElkID09PSBpZCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc3RyaWN0ZWRJZCA9IGlkO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIGNsZWFuSWRGaWx0ZXIoKSB7XG4gICAgaWYgKHRoaXMucmVzdHJpY3RlZElkID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzdHJpY3RlZElkID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBzZXRHbG9iYWxGaWx0ZXJTdHJpbmcodGV4dCwgbm90aWZ5Q29tcG9uZW50ID0gdHJ1ZSkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyU3RyaW5ncyA9IHRleHQuc3BsaXQoJyAnKS5maWx0ZXIodCA9PiB0ICYmIHQudHJpbSgpLmxlbmd0aCA+IDApLm1hcCh0ID0+IHQudHJpbSgpKSA/PyBbXTtcbiAgICBpZiAodGhpcy5jbGllbnRQYWdpbmcpIHtcbiAgICAgIHRoaXMuY2hhbmdlUGFnZSgxKTtcbiAgICB9XG4gICAgaWYgKG5vdGlmeUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5zZXRBdHRyKCdnbG9iYWxGaWx0ZXJTdHJpbmcnLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICBhZGRGaWx0ZXJEZWZpbml0aW9uKGNvbHVtbk5hbWUsIGZpbHRlckRlZmluaXRpb24pIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihjb2x1bW5OYW1lKTtcbiAgICB0YWJsZUNvbHVtbiAmJiB0YWJsZUNvbHVtbi5hZGRGaWx0ZXJEZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb24pO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRSZWNvcmRzKCkge1xuICAgIGxldCBmaWx0ZXJlZFJlY29yZHMgPSB0aGlzLnRhYmxlUmVjb3JkcztcbiAgICBpZiAodGhpcy5yZXN0cmljdGVkSWQpIHtcbiAgICAgIGZpbHRlcmVkUmVjb3JkcyA9IGZpbHRlcmVkUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5yZWNvcmRJZCA9PT0gdGhpcy5yZXN0cmljdGVkSWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJTdHJpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbHRlcmVkUmVjb3JkcyA9IGZpbHRlcmVkUmVjb3Jkcy5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5oYXNQYXR0ZXJuKHRoaXMuZ2xvYmFsRmlsdGVyU3RyaW5ncywgdGhpcy5fdGFibGVDb2x1bW5PYmopKTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uRmlsdGVycyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpbHRlcik7XG4gICAgaWYgKGNvbHVtbkZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVyZWRSZWNvcmRzID0gZmlsdGVyZWRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmhhc0NvbmRpdGlvbihjb2x1bW5GaWx0ZXJzKSk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZFJlY29yZHM7XG4gIH1cblxuICBnZXRDb2x1bW5GaWx0ZXIoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmNvbHVtbkRlZmluaXRpb24oY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuIHRhYmxlQ29sdW1uPy5maWx0ZXIgPz8gbnVsbDtcbiAgfVxuXG4gIGFkZENvbHVtbkZpbHRlcihjb2x1bW5OYW1lOiBzdHJpbmcsIGNvbHVtblZhbHVlczogYW55IHwgYW55W10sIG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmNvbHVtbkRlZmluaXRpb24oY29sdW1uTmFtZSk7XG4gICAgY29uc3QgY29sdW1uRmlsdGVyRGVmaW5pdGlvbiA9IHRhYmxlQ29sdW1uPy5maWx0ZXJEZWZpbml0aW9uID8/IG51bGw7XG4gICAgaWYgKCFjb2x1bW5GaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRhYmxlQ29sdW1uICYmIHRhYmxlQ29sdW1uLmFkZEZpbHRlcihjb2x1bW5WYWx1ZXMsIG9wZXJhdG9yKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICByZW1vdmVDb2x1bW5GaWx0ZXIoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmNvbHVtbkRlZmluaXRpb24oY29sdW1uTmFtZSk7XG4gICAgdGFibGVDb2x1bW4gJiYgdGFibGVDb2x1bW4ucmVtb3ZlRmlsdGVyKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgY29uc3QgY29tcGFjdEZpbHRlcjogYW55ID0ge1xuICAgICAgc2ltcGxlRmlsdGVyV29yZHM6IHRoaXMuZ2xvYmFsRmlsdGVyU3RyaW5ncyxcbiAgICAgIGFkdmFuY2VkRmlsdGVyOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbHVtbkZpbHRlcnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2x1bW5GaWx0ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgY29sdW1uRmlsdGVyID0gY29sdW1uRmlsdGVyc1tpbmRleF07XG4gICAgICBjb21wYWN0RmlsdGVyLmFkdmFuY2VkRmlsdGVyLnB1c2goe1xuICAgICAgICBmaWVsZENvZGU6IGNvbHVtbkZpbHRlci5maWVsZENvZGUsXG4gICAgICAgIG9wZXJhdG9yOiBjb2x1bW5GaWx0ZXIub3BlcmF0b3IsXG4gICAgICAgIGZpZWxkVmFsdWUxOiBjb2x1bW5GaWx0ZXIudmFsdWVzWzBdLFxuICAgICAgICBmaWVsZFZhbHVlMjogY29sdW1uRmlsdGVyLnZhbHVlc1sxXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGFjdEZpbHRlcjtcbiAgfVxuXG4gIC8vIE9yZGVuYW1pZW50byBkZSByZWdpc3Ryb3MgbG9jYWxcblxuICBzb3J0KGNvbHVtbk5hbWUsIGRpcmVjdGlvbikge1xuICAgIHRoaXMuc2V0UmVxdWlyZWRPcmRlcihjb2x1bW5OYW1lLCBkaXJlY3Rpb24pO1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgdGhpcy5sb2NhbFNvcnREYXRhKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ub3RpZnlHZXREYXRhQWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVxdWlyZWRPcmRlcihjb2x1bW5GaWVsZCwgZGlyZWN0aW9uID0gbnVsbCkge1xuICAgIHRoaXMuc2V0QXR0cignc29ydGluZycsIHtcbiAgICAgIGNvbHVtbk5hbWU6IGNvbHVtbkZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiAoZGlyZWN0aW9uID09PSAnYXNjZW5kJykgPyBUQUJMRV9TT1JUX0FTQ0VORElORyA6IFRBQkxFX1NPUlRfREVTQ0VORElORyxcbiAgICB9KTtcbiAgfVxuXG4gIGxvY2FsU29ydERhdGEoKSB7XG4gICAgaWYgKCF0aGlzLnNvcnRpbmcuY29sdW1uTmFtZSB8fCAhdGhpcy5zb3J0aW5nLmRpcmVjdGlvbikgeyByZXR1cm47IH1cbiAgICB0aGlzLnRhYmxlUmVjb3Jkcy5zb3J0KChhLCBiKSA9PiB0aGlzLnJlY29yZENvbXBhcmUoYSwgYiwgdGhpcy5zb3J0aW5nLmNvbHVtbk5hbWUsIHRoaXMuc29ydGluZy5kaXJlY3Rpb24pKTtcbiAgICAvL3RoaXMudW5TZWxlY3RBbGwoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICByZWNvcmRDb21wYXJlKHJlY29yZEE6IFRhYmxlUmVjb3JkRGF0YSwgcmVjb3JkQjogVGFibGVSZWNvcmREYXRhLCBjb2x1bW5Db21wYXJlLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCByZWNvcmRBVmFsdWUgPSByZWNvcmRBLmdldEZpZWxkVmFsdWUoY29sdW1uQ29tcGFyZSk7XG4gICAgY29uc3QgcmVjb3JkQlZhbHVlID0gcmVjb3JkQi5nZXRGaWVsZFZhbHVlKGNvbHVtbkNvbXBhcmUpO1xuICAgIGNvbnN0IHJlY29yZEFDb2x1bW4gPSBpc05hTihyZWNvcmRBVmFsdWUpID8gcmVjb3JkQVZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiArcmVjb3JkQVZhbHVlO1xuICAgIGNvbnN0IHJlY29yZEJDb2x1bW4gPSBpc05hTihyZWNvcmRCVmFsdWUpID8gcmVjb3JkQlZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiArcmVjb3JkQlZhbHVlO1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGlmIChyZWNvcmRBQ29sdW1uIDwgcmVjb3JkQkNvbHVtbikge1xuICAgICAgcmVzdWx0ID0gLTE7XG4gICAgfSBlbHNlIGlmIChyZWNvcmRBQ29sdW1uID4gcmVjb3JkQkNvbHVtbikge1xuICAgICAgcmVzdWx0ID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gVEFCTEVfU09SVF9BU0NFTkRJTkcgPyByZXN1bHQgOiAtcmVzdWx0O1xuICB9XG59XG4iXX0=
|
|
415
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL3RhYmxlL3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUNuQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUVyQyxNQUFNLEtBQUssR0FBRztJQUNaLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRTtJQUM5RCxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7SUFDbkQsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQ3ZELFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtJQUNqRSxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUU7SUFDbkYsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQzdDLGNBQWMsRUFBRSxFQUFFLElB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QUFDLFlBQVksQ0FBQztRQUM3RixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLGFBQWEsR0FBRyxhQUFhLEVBQUU7WUFDakMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2I7YUFBTSxJQUFJLGFBQWEsR0FBRyxhQUFhLEVBQUU7WUFDeEMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNaO1FBQ0QsT0FBTyxTQUFTLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0QsQ0FBQztJQUVRLDhCQUE4QixDQUFDLGlCQUFpQjtRQUN2RCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixNQUFNLEVBQUUsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlCLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZWxlbWVudFR5cGVzIH0gZnJvbSAnLi4vZm9ybS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnQgfSBmcm9tICcuLi9lbGVtZW50JztcbmltcG9ydCB7IFJlY29yZFRhYmxlQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVBY3Rpb24gfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBUYWJsZVJlY29yZERhdGEgfSBmcm9tICcuL3Jvdy1kYXRhJztcblxuY29uc3QgVEFCTEVfU09SVF9BU0NFTkRJTkcgPSAnYXNjJztcbmNvbnN0IFRBQkxFX1NPUlRfREVTQ0VORElORyA9ICdkZXNjJztcblxuY29uc3QgYXR0cnMgPSB7XG4gIGFsbFNlbGVjdGVkOiB7IG5hbWU6ICdhbGxTZWxlY3RlZCcsIHByb3BhZ2F0ZTogJ2FsbFNlbGVjdGVkJyB9LFxuICB0YWJsZUNvZGU6IHsgbmFtZTogJ3RhYmxlQ29kZScsIHByb3BhZ2F0ZTogJ2NvZGUnIH0sXG4gIGNsaWVudFBhZ2luZzogeyBuYW1lOiAnY2xpZW50UGFnaW5nJywgcHJvcGFnYXRlOiBudWxsIH0sXG4gIGdsb2JhbFNlYXJjaDogeyBuYW1lOiAnZ2xvYmFsU2VhcmNoJywgcHJvcGFnYXRlOiAnZ2xvYmFsU2VhcmNoJyB9LFxuICBnbG9iYWxGaWx0ZXJTdHJpbmc6IHsgbmFtZTogJ2dsb2JhbEZpbHRlclN0cmluZycsIHByb3BhZ2F0ZTogJ2dsb2JhbEZpbHRlclN0cmluZycgfSxcbiAgc29ydGluZzogeyBuYW1lOiAnc29ydGluZycsIHByb3BhZ2F0ZTogbnVsbCB9LFxuICByZWNvcmRzUGVyUGFnZTogeyBuYW1lOiAncmVjb3Jkc1BlclBhZ2UnLCBwcm9wYWdhdGU6ICdyZWNvcmRzUGVyUGFnZScgfSxcbiAgbGF5b3V0OiB7IG5hbWU6ICdsYXlvdXQnLCBwcm9wYWdhdGU6ICdsYXlvdXQnIH0sXG4gIGNvbHVtbnM6IHsgbmFtZTogJ2NvbHVtbnMnLCBwcm9wYWdhdGU6ICdjb2x1bW5zJyB9LFxuICBzZWxlY3RlZFJlY29yZHM6IHsgbmFtZTogJ3NlbGVjdGVkUmVjb3JkcycsIHByb3BhZ2F0ZTogJ3NlbGVjdGVkUmVjb3JkcycgfSxcbiAgY3VycmVudFBhZ2U6IHsgbmFtZTogJ2N1cnJlbnRQYWdlJywgcHJvcGFnYXRlOiAnY3VycmVudFBhZ2UnIH0sXG4gIHRvdGFsUmVjb3Jkc051bWJlcjogeyBuYW1lOiAndG90YWxSZWNvcmRzTnVtYmVyJywgcHJvcGFnYXRlOiAndG90YWxSZWNvcmRzTnVtYmVyJyB9LFxuICB2aXNpYmxlUmVjb3JkczogeyBuYW1lOiAndmlzaWJsZVJlY29yZHMnLCBwcm9wYWdhdGU6ICd2aXNpYmxlUmVjb3JkcycgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVBY3Rpb25FdmVudCB7XG4gIGFjdGlvbkNvZGU6IHN0cmluZztcbiAgcmVjb3JkSWQ6IGFueTtcbiAgcmVjb3JkRGF0YTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRXZlbnQge1xuICB0YWJsZUNvZGU6IHN0cmluZztcbiAgYWN0aW9uQ29kZTogc3RyaW5nIHwgbnVsbDtcbiAgYWN0aW9uRGV0YWlsOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWNvcmRUYWJsZSBleHRlbmRzIEZvcm1FbGVtZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5saW5lQWN0aW9uVHJpZ2dlciA9IG5ldyBTdWJqZWN0PFRhYmxlRXZlbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dsb2JhbEFjdGlvblRyaWdnZXIgPSBuZXcgU3ViamVjdDxUYWJsZUV2ZW50PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWNvcmRTZWxlY3Rpb25UcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0aW9uQWN0aW9uVHJpZ2dlciA9IG5ldyBTdWJqZWN0PFRhYmxlRXZlbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dldERhdGFUcmlnZ2VyID0gbmV3IFN1YmplY3Q8VGFibGVFdmVudD4oKTtcbiAgcHJpdmF0ZSBfdGFibGVDb2x1bW5PYmogPSB7fTtcbiAgcHJpdmF0ZSBfYXBwZW5kUGFnZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FjdGlvbnM6IFRhYmxlQWN0aW9uW107XG4gIHByaXZhdGUgX2FjdGlvbnNPYmogPSB7fTtcblxuICAvLyBNZWNhbmlzbW9zIGRlIGZpbHRyYWRvIG51ZXZhIHZlcnNpw7NuXG4gIHByaXZhdGUgZ2xvYmFsRmlsdGVyU3RyaW5nOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBnbG9iYWxGaWx0ZXJTdHJpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHNlbGVjdGVkUmVjb3JkczogYW55O1xuICBwcml2YXRlIHJlc3RyaWN0ZWRJZDogYW55O1xuICBwcml2YXRlIGxheW91dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgZ2xvYmFsU2VhcmNoOiBib29sZWFuO1xuICB0YWJsZVJlY29yZHM6IFRhYmxlUmVjb3JkRGF0YVtdO1xuICB0YWJsZVJlY29yZE9iaiA9IHt9O1xuICB2aXNpYmxlUmVjb3JkczogVGFibGVSZWNvcmREYXRhW10gfCBudWxsID0gbnVsbDtcbiAgY29sdW1uczogUmVjb3JkVGFibGVDb2x1bW5bXTtcbiAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgc2VsZWN0aW9uQmFja2VuZDogYm9vbGVhbjtcbiAgc2VsZWN0aW9uRmllbGQ6IHN0cmluZztcbiAgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICB0YWJsZUNvZGU6IHN0cmluZyA9ICcnO1xuICB0YWJsZVRpdGxlOiBzdHJpbmc7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgcmVxdWVzdGVkUGFnZTogbnVtYmVyO1xuICByZWNvcmRzUGVyUGFnZTogbnVtYmVyID0gMTA7XG4gIHRvdGFsUmVjb3Jkc051bWJlcjogbnVtYmVyID0gMDtcbiAgcmVjb3Jkc051bWJlcjogbnVtYmVyID0gMDtcbiAgc29ydGluZzogYW55O1xuXG4gIHdhaXRpbmc6IGJvb2xlYW47XG4gIGNsaWVudFBhZ2luZzogYm9vbGVhbiA9IHRydWU7XG4gIHNvcnRhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHRhYmxlUmVjZWl2ZWQsIGZvcm1Db25maWcpIHtcbiAgICBzdXBlcih0YWJsZVJlY2VpdmVkLCBmb3JtQ29uZmlnKTtcbiAgICB0aGlzLmVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGVzLnRhYmxlO1xuICAgIHRoaXMud2FpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMudG90YWxQYWdlcyA9IDE7XG4gICAgdGhpcy5yZXF1ZXN0ZWRQYWdlID0gMTtcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICB0aGlzLl90YWJsZUNvbHVtbk9iaiA9IHt9O1xuICAgIHRoaXMuX2FjdGlvbnMgPSBbXTtcbiAgICB0aGlzLl9hY3Rpb25zT2JqID0ge307XG4gICAgdGhpcy50YWJsZVJlY29yZHMgPSBbXTtcbiAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IGZhbHNlO1xuICAgIHRoaXMucmVzdHJpY3RlZElkID0gbnVsbDtcblxuICAgIHRoaXMudGFibGVUaXRsZSA9IHRhYmxlUmVjZWl2ZWQudGFibGVUaXRsZTtcbiAgICB0aGlzLl9hcHBlbmRQYWdlcyA9IHRhYmxlUmVjZWl2ZWQ/LmFwcGVuZCA/PyBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGFibGUgPSB0YWJsZVJlY2VpdmVkPy5zZWxlY3RhYmxlID8/IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0aW9uQmFja2VuZCA9IHRhYmxlUmVjZWl2ZWQ/LnNlbGVjdGlvbkJhY2tlbmQgPz8gZmFsc2U7XG4gICAgdGhpcy5zb3J0YWJsZSA9IHRhYmxlUmVjZWl2ZWQ/LnNvcnRhYmxlID8/IGZhbHNlO1xuXG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmFsbFNlbGVjdGVkLCBmYWxzZSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnRhYmxlQ29kZSwgdGFibGVSZWNlaXZlZC50YWJsZUNvZGUpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5jbGllbnRQYWdpbmcsIHRhYmxlUmVjZWl2ZWQ/LmNsaWVudFBhZ2luZyA/PyB0cnVlKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuZ2xvYmFsU2VhcmNoLCB0YWJsZVJlY2VpdmVkPy5zaW1wbGVGaWx0ZXIgPz8gZmFsc2UpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5nbG9iYWxGaWx0ZXJTdHJpbmcsICcnKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuc29ydGluZywgeyBjb2x1bW5OYW1lOiAnJywgZGlyZWN0aW9uOiAnJyB9KTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMucmVjb3Jkc1BlclBhZ2UsIGZvcm1Db25maWcuZGVmYXVsdFJlY29yZHNQZXJQYWdlKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMubGF5b3V0LCAnJyk7XG5cbiAgICBpZiAodGFibGVSZWNlaXZlZC5maWVsZHMpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnM6IFJlY29yZFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uUmVjZWl2ZWQgb2YgdGFibGVSZWNlaXZlZC5maWVsZHMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uRW5yaWNoZWQgPSB7XG4gICAgICAgICAgLi4uY29sdW1uUmVjZWl2ZWQsXG4gICAgICAgICAgdmlzaWJsZVN0YXRlczogdGhpcy52aXNpYmxlU3RhdGVzLFxuICAgICAgICAgIGVuYWJsZWRTdGF0ZXM6IHRoaXMuZW5hYmxlZFN0YXRlc1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uOiBSZWNvcmRUYWJsZUNvbHVtbiA9IG5ldyBSZWNvcmRUYWJsZUNvbHVtbihjb2x1bW5FbnJpY2hlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5PYmpbY29sdW1uRGVmaW5pdGlvbi5maWVsZENvZGVdID0gY29sdW1uRGVmaW5pdGlvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5jb2x1bW5zLCBjb2x1bW5zKTtcbiAgICB9XG4gICAgaWYgKHRhYmxlUmVjZWl2ZWQuYWN0aW9ucykge1xuICAgICAgY29uc3QgdGFibGVBY3Rpb25zID0gdGFibGVSZWNlaXZlZC5hY3Rpb25zLm1hcChvYmpEZWYgPT4ge1xuICAgICAgICBsZXQgdmlzaWJsZVN0YXRlcyA9IG9iakRlZi52aXNpYmxlU3RhdGVzO1xuICAgICAgICBsZXQgZW5hYmxlZFN0YXRlcyA9IG9iakRlZi5lbmFibGVkU3RhdGVzO1xuICAgICAgICBpZiAoIXZpc2libGVTdGF0ZXMpIHtcbiAgICAgICAgICB2aXNpYmxlU3RhdGVzID0gKG9iakRlZi5hY3Rpb25Nb2RlcyB8fCAnJykuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApO1xuICAgICAgICAgIGVuYWJsZWRTdGF0ZXMgPSAob2JqRGVmLmFjdGlvbk1vZGVzIHx8ICcnKS5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ub2JqRGVmLCB2aXNpYmxlU3RhdGVzLCBlbmFibGVkU3RhdGVzIH07XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uUmVjZWl2ZWQgb2YgdGFibGVBY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGlubGluZUFjdGlvbiA9IG5ldyBUYWJsZUFjdGlvbihhY3Rpb25SZWNlaXZlZCwgdGhpcy5fZm9ybUNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMucHVzaChpbmxpbmVBY3Rpb24pO1xuICAgICAgICB0aGlzLl9hY3Rpb25zT2JqW2lubGluZUFjdGlvbi5hY3Rpb25Db2RlXSA9IGlubGluZUFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb25GaWVsZCA9ICh0aGlzLnNlbGVjdGFibGUpID8gdGFibGVSZWNlaXZlZD8uc2VsZWN0aW9uRmllbGQgOiBudWxsO1xuICAgIC8vIEZpbHRyb3MgcHJlZGVmaW5pZG9zIGVuIGVsIGZvcm11bGFyaW9cbiAgICBpZiAodGFibGVSZWNlaXZlZC5maWx0ZXJzKSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGFibGVSZWNlaXZlZC5maWx0ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB0aGlzLmFkZEZpbHRlckRlZmluaXRpb24odGFibGVSZWNlaXZlZC5maWx0ZXJzW2luZGV4XS5maWVsZENvZGUsIHRhYmxlUmVjZWl2ZWQuZmlsdGVyc1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBjb2x1bW5OYW1lcygpIHsgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3RhYmxlQ29sdW1uT2JqKTsgfVxuICBnZXQgaW5saW5lQWN0aW9uVHJpZ2dlcigpIHsgcmV0dXJuIHRoaXMuX2lubGluZUFjdGlvblRyaWdnZXI7IH1cbiAgZ2V0IGdsb2JhbEFjdGlvblRyaWdnZXIoKSB7IHJldHVybiB0aGlzLl9nbG9iYWxBY3Rpb25UcmlnZ2VyOyB9XG4gIGdldCBzZWxlY3Rpb25BY3Rpb25UcmlnZ2VyKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWN0aW9uVHJpZ2dlcjsgfVxuICBnZXQgcmVjb3JkU2VsZWN0aW9uVHJpZ2dlcigpIHsgcmV0dXJuIHRoaXMuX3JlY29yZFNlbGVjdGlvblRyaWdnZXI7IH1cbiAgZ2V0IGdldERhdGFUcmlnZ2VyKCkgeyByZXR1cm4gdGhpcy5fZ2V0RGF0YVRyaWdnZXI7IH1cblxuICBnZXRMYXlvdXQoKSB7IHJldHVybiB0aGlzLmxheW91dDsgfVxuICBzZXRMYXlvdXQobGF5b3V0KSB7IHRoaXMuc2V0QXR0cihhdHRycy5sYXlvdXQsIGxheW91dCk7IH1cbiAgaGFzQWN0aW9ucygpIHsgcmV0dXJuICh0aGlzLl9hY3Rpb25zLmxlbmd0aCA+IDApOyB9XG4gIGdldFNlbGVjdGVkUmVjb3JkcygpIHsgcmV0dXJuIHRoaXMudGFibGVSZWNvcmRzLmZpbHRlcihyZWMgPT4gcmVjLnNlbGVjdGVkKS5tYXAocmVjID0+IHJlYy5yZWNvcmRJZCk7IH1cbiAgYWN0aXZhdGVHbG9iYWxTZWFyY2goKSB7IHRoaXMuZ2xvYmFsU2VhcmNoID0gdHJ1ZTsgfVxuICBpbmFjdGl2YXRlR2xvYmFsU2VhcmNoKCkgeyB0aGlzLmdsb2JhbFNlYXJjaCA9IGZhbHNlOyB9XG4gIGNvbHVtbkRlZmluaXRpb24oZmllbGRDb2RlKTogUmVjb3JkVGFibGVDb2x1bW4geyByZXR1cm4gdGhpcy5fdGFibGVDb2x1bW5PYmpbZmllbGRDb2RlXTsgfVxuICBwdXRPbldhaXQoKSB7IHRoaXMud2FpdGluZyA9IHRydWU7IH1cbiAgZnJlZVdhaXRpbmcoKSB7IHRoaXMud2FpdGluZyA9IGZhbHNlOyB9XG5cbiAgbm90aWZ5R2xvYmFsQWN0aW9uKGFjdGlvbkNvZGUpIHtcbiAgICBjb25zdCB0YWJsZUV2ZW50OiBUYWJsZUV2ZW50ID0ge1xuICAgICAgdGFibGVDb2RlOiB0aGlzLnRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBhY3Rpb25EZXRhaWw6IG51bGxcbiAgICB9O1xuICAgIHRoaXMuX2dsb2JhbEFjdGlvblRyaWdnZXIubmV4dCh0YWJsZUV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeUlubGluZUFjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBUYWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgdGFibGVFdmVudDogVGFibGVFdmVudCA9IHtcbiAgICAgIHRhYmxlQ29kZTogdGhpcy50YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlOiB0YWJsZUFjdGlvbkV2ZW50LmFjdGlvbkNvZGUsXG4gICAgICBhY3Rpb25EZXRhaWw6IHtcbiAgICAgICAgcmVjb3JkSWQ6IHRhYmxlQWN0aW9uRXZlbnQucmVjb3JkSWQsXG4gICAgICAgIHJlY29yZERhdGE6IHRhYmxlQWN0aW9uRXZlbnQucmVjb3JkRGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5faW5saW5lQWN0aW9uVHJpZ2dlci5uZXh0KHRhYmxlRXZlbnQpO1xuICB9XG5cbiAgbm90aWZ5UmVjb3JkU2VsZWN0aW9uKHJlY29yZElkKSB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5nZXRUYWJsZVJlY29yZChyZWNvcmRJZCk7XG4gICAgaWYgKCFyZWNvcmQpIHsgcmV0dXJuOyB9XG4gICAgcmVjb3JkLnRvZ2dsZVNlbGVjdCgpO1xuICAgIHRoaXMucmVxdWVzdGVkUGFnZSA9IHRoaXMuY3VycmVudFBhZ2UgPz8gMTtcbiAgICBjb25zdCB0YWJsZUV2ZW50OiBUYWJsZUV2ZW50ID0ge1xuICAgICAgdGFibGVDb2RlOiB0aGlzLnRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGU6IG51bGwsXG4gICAgICBhY3Rpb25EZXRhaWw6IHtcbiAgICAgICAgcmVjb3JkSWQ6IHJlY29yZC5yZWNvcmRJZCxcbiAgICAgICAgcmVjb3JkRGF0YTogcmVjb3JkLnJlY29yZERhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMucmVjb3JkU2VsZWN0aW9uVHJpZ2dlci5uZXh0KHRhYmxlRXZlbnQpO1xuICB9XG5cbiAgbm90aWZ5U2VsZWN0aW9uQWN0aW9uKGFjdGlvbkNvZGUpIHtcbiAgICBjb25zdCB0YWJsZUV2ZW50OiBUYWJsZUV2ZW50ID0ge1xuICAgICAgdGFibGVDb2RlOiB0aGlzLnRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBhY3Rpb25EZXRhaWw6IHtcbiAgICAgICAgc2VsZWN0ZWRSZWNvcmRzOiB0aGlzLnNlbGVjdGVkUmVjb3Jkc1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fc2VsZWN0aW9uQWN0aW9uVHJpZ2dlci5uZXh0KHRhYmxlRXZlbnQpO1xuICB9XG5cbiAgbm90aWZ5R2V0RGF0YUFjdGlvbihyZXF1ZXN0ZWRQYWdlID0gbnVsbCkge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgICB0aGlzLnJlcXVlc3RlZFBhZ2UgPSByZXF1ZXN0ZWRQYWdlIHx8IHRoaXMuY3VycmVudFBhZ2UgfHwgMTtcbiAgICBjb25zdCB0YWJsZUV2ZW50OiBUYWJsZUV2ZW50ID0ge1xuICAgICAgdGFibGVDb2RlOiB0aGlzLnRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGU6IG51bGwsXG4gICAgICBhY3Rpb25EZXRhaWw6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLl9nZXREYXRhVHJpZ2dlci5uZXh0KHRhYmxlRXZlbnQpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy50YWJsZVJlY29yZHMgPSBbXTtcbiAgICB0aGlzLnVuU2VsZWN0QWxsKCk7XG4gICAgdGhpcy50YWJsZVJlY29yZE9iaiA9IHt9O1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuYWxsU2VsZWN0ZWQsIHRydWUpO1xuICAgIHRoaXMudGFibGVSZWNvcmRzLmZvckVhY2gocmVjb3JkID0+IHJlY29yZC5zZWxlY3QoKSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnNlbGVjdGVkUmVjb3JkcywgdGhpcy5nZXRTZWxlY3RlZFJlY29yZHMoKSk7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIHVuU2VsZWN0QWxsKCkge1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5hbGxTZWxlY3RlZCwgZmFsc2UpO1xuICAgIHRoaXMudGFibGVSZWNvcmRzLmZvckVhY2gocmVjb3JkID0+IHJlY29yZC51bnNlbGVjdCgpKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuc2VsZWN0ZWRSZWNvcmRzLCB0aGlzLmdldFNlbGVjdGVkUmVjb3JkcygpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNldFRhYmxlUmVjb3Jkcyh0YWJsZVJlY29yZHMsIGFwcGVuZCkge1xuICAgIGlmICghYXBwZW5kKSB7XG4gICAgICB0aGlzLnRhYmxlUmVjb3JkcyA9IFtdO1xuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLmFsbFNlbGVjdGVkLCBmYWxzZSk7XG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiByZWNvcmQudW5zZWxlY3QoKSk7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMuc2VsZWN0ZWRSZWNvcmRzLCBbXSk7XG4gICAgICB0aGlzLnRhYmxlUmVjb3JkT2JqID0ge307XG4gICAgfVxuICAgIGNvbnN0IG5ld1JlY29yZHNPYmogPSB7IC4uLnRoaXMudGFibGVSZWNvcmRPYmogfTtcbiAgICBjb25zdCBuZXdSZWNvcmRzID0gWy4uLnRoaXMudGFibGVSZWNvcmRzXTtcbiAgICBmb3IgKGNvbnN0IHRhYmxlUmVjb3JkIG9mIHRhYmxlUmVjb3Jkcykge1xuICAgICAgY29uc3QgcmVjb3JkUmVjZWl2ZWQ6IFRhYmxlUmVjb3JkRGF0YSA9IG5ldyBUYWJsZVJlY29yZERhdGEodGFibGVSZWNvcmQsIHRoaXMuY29sdW1ucywgdGhpcy5zZWxlY3Rpb25GaWVsZCk7XG4gICAgICBjb25zdCByZWNvcmRJZEtleSA9IHJlY29yZFJlY2VpdmVkLnJlY29yZElkS2V5O1xuICAgICAgbmV3UmVjb3Jkcy5wdXNoKHJlY29yZFJlY2VpdmVkKTtcbiAgICAgIG5ld1JlY29yZHNPYmpbcmVjb3JkSWRLZXldID0gcmVjb3JkUmVjZWl2ZWQ7XG4gICAgfVxuICAgIHRoaXMudGFibGVSZWNvcmRzID0gbmV3UmVjb3JkcztcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuc2VsZWN0ZWRSZWNvcmRzLCB0aGlzLmdldFNlbGVjdGVkUmVjb3JkcygpKTtcbiAgICB0aGlzLnRhYmxlUmVjb3JkT2JqID0gbmV3UmVjb3Jkc09iajtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBhcHBlbmRSZWNvcmRzKHJlY29yZHMpIHsgdGhpcy5zZXRUYWJsZVJlY29yZHMocmVjb3JkcywgdHJ1ZSk7IH1cbiAgcmVwbGFjZVJlY29yZHMocmVjb3JkcykgeyB0aGlzLnNldFRhYmxlUmVjb3JkcyhyZWNvcmRzLCBmYWxzZSk7IH1cblxuICBzZXRUYWJsZUFwcGVuZChhcHBlbmQ6IGJvb2xlYW4pIHsgdGhpcy5fYXBwZW5kUGFnZXMgPSBhcHBlbmQgfVxuXG4gIGNoYW5nZVBhZ2UocmVxdWVzdGVkUGFnZSkge1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLmN1cnJlbnRQYWdlLCByZXF1ZXN0ZWRQYWdlKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ub3RpZnlHZXREYXRhQWN0aW9uKHJlcXVlc3RlZFBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZpc2libGVSZWNvcmRzKCkge1xuICAgIGxldCB2aXNpYmxlUmVjb3JkczogYW55W107XG4gICAgaWYgKHRoaXMuY2xpZW50UGFnaW5nKSB7XG4gICAgICBsZXQgZmlsdGVyZWRSZWNvcmRzID0gdGhpcy5nZXRGaWx0ZXJlZFJlY29yZHMoKTtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy50b3RhbFJlY29yZHNOdW1iZXIsIGZpbHRlcmVkUmVjb3Jkcy5sZW5ndGgpO1xuICAgICAgY29uc3Qgc2xpY2VOdW1iZXIxID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucmVjb3Jkc1BlclBhZ2U7XG4gICAgICBjb25zdCBzbGljZU51bWJlcjIgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5yZWNvcmRzUGVyUGFnZSArIHRoaXMucmVjb3Jkc1BlclBhZ2VcbiAgICAgIHZpc2libGVSZWNvcmRzID0gZmlsdGVyZWRSZWNvcmRzLnNsaWNlKHNsaWNlTnVtYmVyMSwgc2xpY2VOdW1iZXIyKTtcbiAgICAgIGNvbnN0IHJlY29yZHNMYXN0UGFnZSA9IHRoaXMudG90YWxSZWNvcmRzTnVtYmVyICUgdGhpcy5yZWNvcmRzUGVyUGFnZTtcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLnRydW5jKHRoaXMudG90YWxSZWNvcmRzTnVtYmVyIC8gdGhpcy5yZWNvcmRzUGVyUGFnZSArIChyZWNvcmRzTGFzdFBhZ2UgPyAxIDogMCkpO1xuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0b3RhbFBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzIHx8IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpc2libGVSZWNvcmRzID0gdGhpcy50YWJsZVJlY29yZHM7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cihhdHRycy52aXNpYmxlUmVjb3JkcywgdmlzaWJsZVJlY29yZHMpO1xuICB9XG5cbiAgdXBkYXRlRnJvbVNlcnZlcih0YWJsZVJlY2VpdmVkKSB7XG4gICAgdGhpcy5yZXF1ZXN0ZWRQYWdlID0gMTtcbiAgICB0aGlzLnZpc2libGUgPSB0YWJsZVJlY2VpdmVkPy52aXNpYmxlIHx8IHRydWU7XG4gICAgdGhpcy50b3RhbFBhZ2VzID0gdGFibGVSZWNlaXZlZC50b3RhbFBhZ2VzIHx8IDE7XG4gICAgdGhpcy5yZWNvcmRzTnVtYmVyID0gdGFibGVSZWNlaXZlZC5yZWNvcmRzTnVtYmVyO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5jdXJyZW50UGFnZSwgK3RhYmxlUmVjZWl2ZWQ/LmN1cnJlbnRQYWdlIHx8IDEpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5yZWNvcmRzUGVyUGFnZSwgK3RhYmxlUmVjZWl2ZWQucmVjb3Jkc1BlclBhZ2UpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy50b3RhbFJlY29yZHNOdW1iZXIsICh0aGlzLmNsaWVudFBhZ2luZykgPyB0YWJsZVJlY2VpdmVkLnRhYmxlUmVjb3Jkcy5sZW5ndGggOiArdGFibGVSZWNlaXZlZC50b3RhbFJlY29yZHNOdW1iZXIpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5zb3J0aW5nLCB7XG4gICAgICBjb2x1bW5OYW1lOiB0YWJsZVJlY2VpdmVkLnNvcnRpbmdDb2x1bW4gfHwgJycsXG4gICAgICBkaXJlY3Rpb246IHRhYmxlUmVjZWl2ZWQuc29ydGluZ0RpcmVjdGlvbiB8fCAnJ1xuICAgIH0pO1xuICAgIHRoaXMud2FpdGluZyA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5fYXBwZW5kUGFnZXMpIHtcbiAgICAgIHRoaXMucmVwbGFjZVJlY29yZHModGFibGVSZWNlaXZlZC50YWJsZVJlY29yZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcGVuZFJlY29yZHModGFibGVSZWNlaXZlZC50YWJsZVJlY29yZHMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBnZXRUYWJsZVJlY29yZChyZWNvcmRJZCkge1xuICAgIGNvbnN0IHJlY29yZElkS2V5ID0gKHR5cGVvZiByZWNvcmRJZCA9PT0gJ29iamVjdCcpID8gSlNPTi5zdHJpbmdpZnkocmVjb3JkSWQpIDogcmVjb3JkSWQ7XG4gICAgcmV0dXJuICh0aGlzLnRhYmxlUmVjb3JkT2JqICYmIHJlY29yZElkICYmIHRoaXMudGFibGVSZWNvcmRPYmpbcmVjb3JkSWRdKVxuICAgICAgPyB0aGlzLnRhYmxlUmVjb3JkT2JqW3JlY29yZElkXSA6IG51bGw7XG4gIH1cblxuICBnZXRBY3Rpb24oYWN0aW9uQ29kZSkge1xuICAgIHJldHVybiAodGhpcy5fYWN0aW9uc09iaiAmJiBhY3Rpb25Db2RlICYmIHRoaXMuX2FjdGlvbnNPYmpbYWN0aW9uQ29kZV0pXG4gICAgICA/IHRoaXMuX2FjdGlvbnNPYmpbYWN0aW9uQ29kZV0gOiBudWxsO1xuICB9XG5cbiAgZ2V0QWN0aW9ucyhhY3Rpb25DbGFzczogc3RyaW5nID0gdGhpcy5fZm9ybUNvbmZpZy50YWJsZUFjdGlvbnMuaW5saW5lLCBhY3Rpb25UeXBlczogc3RyaW5nW10gPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMuZmlsdGVyKGFjdGlvbkRlZiA9PiB7XG4gICAgICBjb25zdCB0eXBlSW5jbHVkZWQgPSAoYWN0aW9uVHlwZXMpID8gYWN0aW9uVHlwZXMuaW5jbHVkZXMoYWN0aW9uRGVmLmFjdGlvblR5cGUpIDogdHJ1ZTtcbiAgICAgIHJldHVybiBhY3Rpb25EZWYuYWN0aW9uQ2xhc3MgPT09IGFjdGlvbkNsYXNzICYmIHR5cGVJbmNsdWRlZDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEZpbHRyb3NcblxuICBzZXRGaWx0ZXJCeUlkKGlkKSB7XG4gICAgaWYgKHRoaXMucmVzdHJpY3RlZElkID09PSBpZCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc3RyaWN0ZWRJZCA9IGlkO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIGNsZWFuSWRGaWx0ZXIoKSB7XG4gICAgaWYgKHRoaXMucmVzdHJpY3RlZElkID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzdHJpY3RlZElkID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBzZXRHbG9iYWxGaWx0ZXJTdHJpbmcodGV4dCwgbm90aWZ5Q29tcG9uZW50ID0gdHJ1ZSkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyU3RyaW5ncyA9IHRleHQuc3BsaXQoJyAnKS5maWx0ZXIodCA9PiB0ICYmIHQudHJpbSgpLmxlbmd0aCA+IDApLm1hcCh0ID0+IHQudHJpbSgpKSA/PyBbXTtcbiAgICBpZiAodGhpcy5jbGllbnRQYWdpbmcpIHtcbiAgICAgIHRoaXMuY2hhbmdlUGFnZSgxKTtcbiAgICB9XG4gICAgaWYgKG5vdGlmeUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLmdsb2JhbEZpbHRlclN0cmluZywgdGV4dC50cmltKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEZpbHRlckRlZmluaXRpb24oY29sdW1uTmFtZSwgZmlsdGVyRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZpbml0aW9uKGNvbHVtbk5hbWUpO1xuICAgIHRhYmxlQ29sdW1uICYmIHRhYmxlQ29sdW1uLmFkZEZpbHRlckRlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbik7XG4gIH1cblxuICBnZXRGaWx0ZXJlZFJlY29yZHMoKSB7XG4gICAgbGV0IGZpbHRlcmVkUmVjb3JkcyA9IHRoaXMudGFibGVSZWNvcmRzO1xuICAgIGlmICh0aGlzLnJlc3RyaWN0ZWRJZCkge1xuICAgICAgZmlsdGVyZWRSZWNvcmRzID0gZmlsdGVyZWRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLnJlY29yZElkID09PSB0aGlzLnJlc3RyaWN0ZWRJZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlclN0cmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVyZWRSZWNvcmRzID0gZmlsdGVyZWRSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmhhc1BhdHRlcm4odGhpcy5nbG9iYWxGaWx0ZXJTdHJpbmdzLCB0aGlzLl90YWJsZUNvbHVtbk9iaikpO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlcikubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKTtcbiAgICBpZiAoY29sdW1uRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJlZFJlY29yZHMgPSBmaWx0ZXJlZFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuaGFzQ29uZGl0aW9uKGNvbHVtbkZpbHRlcnMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkUmVjb3JkcztcbiAgfVxuXG4gIGdldENvbHVtbkZpbHRlcihjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihjb2x1bW5OYW1lKTtcbiAgICByZXR1cm4gdGFibGVDb2x1bW4/LmZpbHRlciA/PyBudWxsO1xuICB9XG5cbiAgYWRkQ29sdW1uRmlsdGVyKGNvbHVtbk5hbWU6IHN0cmluZywgY29sdW1uVmFsdWVzOiBhbnkgfCBhbnlbXSwgb3BlcmF0b3I6IHN0cmluZyA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihjb2x1bW5OYW1lKTtcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXJEZWZpbml0aW9uID0gdGFibGVDb2x1bW4/LmZpbHRlckRlZmluaXRpb24gPz8gbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGFibGVDb2x1bW4gJiYgdGFibGVDb2x1bW4uYWRkRmlsdGVyKGNvbHVtblZhbHVlcywgb3BlcmF0b3IpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJlY29yZHMoKTtcbiAgfVxuXG4gIHJlbW92ZUNvbHVtbkZpbHRlcihjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRGVmaW5pdGlvbihjb2x1bW5OYW1lKTtcbiAgICB0YWJsZUNvbHVtbiAmJiB0YWJsZUNvbHVtbi5yZW1vdmVGaWx0ZXIoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWNvcmRzKCk7XG4gIH1cblxuICBnZXQgY3VycmVudEZpbHRlcigpIHtcbiAgICBjb25zdCBjb21wYWN0RmlsdGVyOiBhbnkgPSB7XG4gICAgICBzaW1wbGVGaWx0ZXJXb3JkczogdGhpcy5nbG9iYWxGaWx0ZXJTdHJpbmdzLFxuICAgICAgYWR2YW5jZWRGaWx0ZXI6IFtdLFxuICAgIH07XG4gICAgY29uc3QgY29sdW1uRmlsdGVycyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpbHRlcik7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbHVtbkZpbHRlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBjb2x1bW5GaWx0ZXIgPSBjb2x1bW5GaWx0ZXJzW2luZGV4XTtcbiAgICAgIGNvbXBhY3RGaWx0ZXIuYWR2YW5jZWRGaWx0ZXIucHVzaCh7XG4gICAgICAgIGZpZWxkQ29kZTogY29sdW1uRmlsdGVyPy5maWVsZENvZGUsXG4gICAgICAgIG9wZXJhdG9yOiBjb2x1bW5GaWx0ZXI/Lm9wZXJhdG9yLFxuICAgICAgICBmaWVsZFZhbHVlMTogY29sdW1uRmlsdGVyPy52YWx1ZXNbMF0sXG4gICAgICAgIGZpZWxkVmFsdWUyOiBjb2x1bW5GaWx0ZXI/LnZhbHVlc1sxXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGFjdEZpbHRlcjtcbiAgfVxuXG4gIC8vIE9yZGVuYW1pZW50byBkZSByZWdpc3Ryb3MgbG9jYWxcblxuICBzb3J0KGNvbHVtbk5hbWUsIGRpcmVjdGlvbikge1xuICAgIHRoaXMuc2V0UmVxdWlyZWRPcmRlcihjb2x1bW5OYW1lLCBkaXJlY3Rpb24pO1xuICAgIGlmICh0aGlzLmNsaWVudFBhZ2luZykge1xuICAgICAgdGhpcy5sb2NhbFNvcnREYXRhKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ub3RpZnlHZXREYXRhQWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVxdWlyZWRPcmRlcihjb2x1bW5GaWVsZCwgZGlyZWN0aW9uID0gbnVsbCkge1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5zb3J0aW5nLCB7XG4gICAgICBjb2x1bW5OYW1lOiBjb2x1bW5GaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogKGRpcmVjdGlvbiA9PT0gJ2FzY2VuZCcpID8gVEFCTEVfU09SVF9BU0NFTkRJTkcgOiBUQUJMRV9TT1JUX0RFU0NFTkRJTkcsXG4gICAgfSk7XG4gIH1cblxuICBsb2NhbFNvcnREYXRhKCkge1xuICAgIGlmICghdGhpcy5zb3J0aW5nLmNvbHVtbk5hbWUgfHwgIXRoaXMuc29ydGluZy5kaXJlY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGhpcy50YWJsZVJlY29yZHMuc29ydCgoYSwgYikgPT4gdGhpcy5yZWNvcmRDb21wYXJlKGEsIGIsIHRoaXMuc29ydGluZy5jb2x1bW5OYW1lLCB0aGlzLnNvcnRpbmcuZGlyZWN0aW9uKSk7XG4gICAgLy90aGlzLnVuU2VsZWN0QWxsKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUmVjb3JkcygpO1xuICB9XG5cbiAgcmVjb3JkQ29tcGFyZShyZWNvcmRBOiBUYWJsZVJlY29yZERhdGEsIHJlY29yZEI6IFRhYmxlUmVjb3JkRGF0YSwgY29sdW1uQ29tcGFyZSwgZGlyZWN0aW9uKSB7XG4gICAgY29uc3QgcmVjb3JkQVZhbHVlID0gcmVjb3JkQS5nZXRGaWVsZFZhbHVlKGNvbHVtbkNvbXBhcmUpO1xuICAgIGNvbnN0IHJlY29yZEJWYWx1ZSA9IHJlY29yZEIuZ2V0RmllbGRWYWx1ZShjb2x1bW5Db21wYXJlKTtcbiAgICBjb25zdCByZWNvcmRBQ29sdW1uID0gaXNOYU4ocmVjb3JkQVZhbHVlKSA/IHJlY29yZEFWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpIDogK3JlY29yZEFWYWx1ZTtcbiAgICBjb25zdCByZWNvcmRCQ29sdW1uID0gaXNOYU4ocmVjb3JkQlZhbHVlKSA/IHJlY29yZEJWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpIDogK3JlY29yZEJWYWx1ZTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAocmVjb3JkQUNvbHVtbiA8IHJlY29yZEJDb2x1bW4pIHtcbiAgICAgIHJlc3VsdCA9IC0xO1xuICAgIH0gZWxzZSBpZiAocmVjb3JkQUNvbHVtbiA+IHJlY29yZEJDb2x1bW4pIHtcbiAgICAgIHJlc3VsdCA9IDE7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IFRBQkxFX1NPUlRfQVNDRU5ESU5HID8gcmVzdWx0IDogLXJlc3VsdDtcbiAgfVxuXG4gIG92ZXJyaWRlIGZvcm1TdGF0ZUNoYW5nZUN1c3RvbVN1YnNjcmliZShmb3JtQ2hhbmdlU3ViamVjdCkge1xuICAgIHRoaXMuY29sdW1ucz8uZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgY29sdW1uPy5zdWJzY3JpYmVGb3JtU3RhdGVDaGFuZ2UoZm9ybUNoYW5nZVN1YmplY3QpO1xuICAgIH0pO1xuICAgIHRoaXMuX2FjdGlvbnM/LmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgIGFjdGlvbj8uc3Vic2NyaWJlRm9ybVN0YXRlQ2hhbmdlKGZvcm1DaGFuZ2VTdWJqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,15 +1,36 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { ElementComponent } from './layout/element.component';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
|
-
export class ActionComponent {
|
|
4
|
+
export class ActionComponent extends ElementComponent {
|
|
4
5
|
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.inProgress = false;
|
|
8
|
+
this.action = null;
|
|
5
9
|
this.style = 'primary';
|
|
6
10
|
this.showLabel = true;
|
|
7
11
|
}
|
|
8
12
|
ngOnInit() {
|
|
13
|
+
if (!this.action) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
9
16
|
this.formConfig = this.action?._formConfig;
|
|
17
|
+
const mapping = Object.entries(this.formConfig?.actionPropagateAttributes);
|
|
18
|
+
for (let index = 0; index < mapping.length; index++) {
|
|
19
|
+
const actionAttr = mapping[index]?.[0];
|
|
20
|
+
const componentAttr = mapping[index]?.[1]?.toString() ?? '';
|
|
21
|
+
if (componentAttr) {
|
|
22
|
+
const value = this.action?.[actionAttr];
|
|
23
|
+
this.defaultProcessAttributeChange(componentAttr, value);
|
|
24
|
+
this.customProcessAttributeChange(componentAttr, value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
this.action?.attributeChange?.subscribe(event => {
|
|
28
|
+
const { name: componentAttr, value } = event;
|
|
29
|
+
this.defaultProcessAttributeChange(componentAttr, value);
|
|
30
|
+
this.customProcessAttributeChange(componentAttr, value);
|
|
31
|
+
});
|
|
10
32
|
this.start();
|
|
11
33
|
}
|
|
12
|
-
start() { }
|
|
13
34
|
activate() {
|
|
14
35
|
if (this.action?.notifyActivation) {
|
|
15
36
|
this.action.notifyActivation();
|
|
@@ -27,15 +48,9 @@ export class ActionComponent {
|
|
|
27
48
|
}
|
|
28
49
|
return false;
|
|
29
50
|
}
|
|
30
|
-
get visible() {
|
|
31
|
-
return this.action?.visibleOn(this.state) && this.visibleOnRestriction();
|
|
32
|
-
}
|
|
33
|
-
get disabled() {
|
|
34
|
-
return !(this.action?.enabledOn(this.state));
|
|
35
|
-
}
|
|
36
51
|
}
|
|
37
|
-
ActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ActionComponent, deps:
|
|
38
|
-
ActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.6", type: ActionComponent, selector: "lib-action", inputs: { action: "action", busy: "busy", relatedField: "relatedField",
|
|
52
|
+
ActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ActionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
ActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.6", type: ActionComponent, selector: "lib-action", inputs: { action: "action", busy: "busy", relatedField: "relatedField", style: "style", showLabel: "showLabel" }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
39
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ActionComponent, decorators: [{
|
|
40
55
|
type: Component,
|
|
41
56
|
args: [{
|
|
@@ -48,11 +63,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImpor
|
|
|
48
63
|
type: Input
|
|
49
64
|
}], relatedField: [{
|
|
50
65
|
type: Input
|
|
51
|
-
}], state: [{
|
|
52
|
-
type: Input
|
|
53
66
|
}], style: [{
|
|
54
67
|
type: Input
|
|
55
68
|
}], showLabel: [{
|
|
56
69
|
type: Input
|
|
57
70
|
}] } });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZWxlbWVudHMvYWN0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTs7QUFPN0QsTUFBTSxPQUFPLGVBQWdCLFNBQVEsZ0JBQWdCO0lBTHJEOztRQU1FLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFbkIsV0FBTSxHQUFzQixJQUFJLENBQUM7UUFJakMsVUFBSyxHQUFHLFNBQVMsQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxDQUFDO0tBeUMzQjtJQXZDQyxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUMzRSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUQsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6RDtTQUNGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztZQUM3QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsS0FBSyxJQUFJO2VBQzFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQztlQUNyRCxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEtBQUssSUFBSTttQkFDekMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7WUFDNUQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7NEdBaERVLGVBQWU7Z0dBQWYsZUFBZSwyTEFIaEIsMkJBQTJCOzJGQUcxQixlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs4QkFLVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BY3Rpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2FjdGlvbic7XG5pbXBvcnQgeyBFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQvZWxlbWVudC5jb21wb25lbnQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1hY3Rpb24nLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBhY3Rpb246IEZvcm1BY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYnVzeTogYW55O1xuICBASW5wdXQoKSByZWxhdGVkRmllbGQ6IGFueTtcblxuICBASW5wdXQoKSBzdHlsZSA9ICdwcmltYXJ5JztcbiAgQElucHV0KCkgc2hvd0xhYmVsID0gdHJ1ZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHRoaXMuYWN0aW9uPy5fZm9ybUNvbmZpZztcbiAgICBjb25zdCBtYXBwaW5nID0gT2JqZWN0LmVudHJpZXModGhpcy5mb3JtQ29uZmlnPy5hY3Rpb25Qcm9wYWdhdGVBdHRyaWJ1dGVzKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFwcGluZy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGFjdGlvbkF0dHIgPSBtYXBwaW5nW2luZGV4XT8uWzBdO1xuICAgICAgY29uc3QgY29tcG9uZW50QXR0ciA9IG1hcHBpbmdbaW5kZXhdPy5bMV0/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgICBpZiAoY29tcG9uZW50QXR0cikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuYWN0aW9uPy5bYWN0aW9uQXR0cl07XG4gICAgICAgIHRoaXMuZGVmYXVsdFByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoY29tcG9uZW50QXR0ciwgdmFsdWUpO1xuICAgICAgICB0aGlzLmN1c3RvbVByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoY29tcG9uZW50QXR0ciwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFjdGlvbj8uYXR0cmlidXRlQ2hhbmdlPy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lOiBjb21wb25lbnRBdHRyLCB2YWx1ZSB9ID0gZXZlbnQ7XG4gICAgICB0aGlzLmRlZmF1bHRQcm9jZXNzQXR0cmlidXRlQ2hhbmdlKGNvbXBvbmVudEF0dHIsIHZhbHVlKTtcbiAgICAgIHRoaXMuY3VzdG9tUHJvY2Vzc0F0dHJpYnV0ZUNoYW5nZShjb21wb25lbnRBdHRyLCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuYWN0aW9uPy5ub3RpZnlBY3RpdmF0aW9uKSB7XG4gICAgICB0aGlzLmFjdGlvbi5ub3RpZnlBY3RpdmF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdmlzaWJsZU9uUmVzdHJpY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmFjdGlvbj8ucmVzdHJpY3RlZE9uRmllbGQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuYWN0aW9uPy5yZXN0cmljdGVkT25PcGVyYXRvciA9PT0gJz09J1xuICAgICAgJiYgdGhpcy5yZWxhdGVkRmllbGQgPT09IHRoaXMuYWN0aW9uPy5yZXN0cmljdGVkT25WYWx1ZSlcbiAgICAgIHx8ICh0aGlzLmFjdGlvbj8ucmVzdHJpY3RlZE9uT3BlcmF0b3IgPT09ICchPSdcbiAgICAgICAgJiYgdGhpcy5yZWxhdGVkRmllbGQgIT09IHRoaXMuYWN0aW9uPy5yZXN0cmljdGVkT25WYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0iXX0=
|