cps-ui-kit 0.155.0 → 0.157.0

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.
@@ -5,16 +5,6 @@ import * as i1 from "primeng/treetable";
5
5
  export class TreeTableUnsortDirective {
6
6
  constructor(pTreeTable) {
7
7
  this.pTreeTable = pTreeTable;
8
- this.defaultSortOrderInitialized = false;
9
- pTreeTable.tableService.uiUpdateSource$.subscribe((val) => {
10
- if (val != null && val.length > 0 && !this.defaultSortOrderInitialized) {
11
- let i = 0;
12
- val.forEach((v) => {
13
- v._defaultSortOrder = i++;
14
- });
15
- this.defaultSortOrderInitialized = true;
16
- }
17
- });
18
8
  pTreeTable.sort = (event) => {
19
9
  if (pTreeTable.sortMode === 'single') {
20
10
  if (pTreeTable.sortField === event.field &&
@@ -67,6 +57,7 @@ export class TreeTableUnsortDirective {
67
57
  if (!nodes || nodes.length === 0) {
68
58
  return;
69
59
  }
60
+ this._syncNodesParams(pTreeTable.filteredNodes, nodes);
70
61
  if (pTreeTable.customSort) {
71
62
  pTreeTable.sortFunction.emit({
72
63
  data: nodes,
@@ -102,6 +93,27 @@ export class TreeTableUnsortDirective {
102
93
  pTreeTable.sortNodes(node.children);
103
94
  }
104
95
  };
96
+ pTreeTable.sortMultipleNodes = (nodes) => {
97
+ if (!nodes || nodes.length === 0) {
98
+ return;
99
+ }
100
+ this._syncNodesParams(pTreeTable.filteredNodes, nodes);
101
+ if (pTreeTable.customSort) {
102
+ pTreeTable.sortFunction.emit({
103
+ data: pTreeTable.value,
104
+ mode: pTreeTable.sortMode,
105
+ multiSortMeta: pTreeTable.multiSortMeta
106
+ });
107
+ }
108
+ else {
109
+ nodes.sort((node1, node2) => {
110
+ return pTreeTable.multisortField(node1, node2, pTreeTable.multiSortMeta, 0);
111
+ });
112
+ }
113
+ for (const node of nodes) {
114
+ pTreeTable.sortMultipleNodes(node.children);
115
+ }
116
+ };
105
117
  pTreeTable.multisortField = (node1, node2, multiSortMeta, index) => {
106
118
  if (ObjectUtils.isEmpty(pTreeTable.multiSortMeta) ||
107
119
  ObjectUtils.isEmpty(multiSortMeta[index])) {
@@ -137,6 +149,171 @@ export class TreeTableUnsortDirective {
137
149
  }
138
150
  return multiSortMeta[index].order * result;
139
151
  };
152
+ pTreeTable._filter = () => {
153
+ if (pTreeTable.lazy) {
154
+ pTreeTable.onLazyLoad.emit(pTreeTable.createLazyLoadMetadata());
155
+ }
156
+ else {
157
+ if (!pTreeTable.value) {
158
+ return;
159
+ }
160
+ if (!pTreeTable.hasFilter()) {
161
+ pTreeTable.filteredNodes = null;
162
+ if (pTreeTable.paginator) {
163
+ pTreeTable.totalRecords = pTreeTable.value
164
+ ? pTreeTable.value.length
165
+ : 0;
166
+ }
167
+ }
168
+ else {
169
+ let globalFilterFieldsArray;
170
+ if (pTreeTable.filters.global) {
171
+ if (!pTreeTable.columns && !pTreeTable.globalFilterFields)
172
+ throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
173
+ else
174
+ globalFilterFieldsArray =
175
+ pTreeTable.globalFilterFields || pTreeTable.columns;
176
+ }
177
+ this._syncNodesParams(pTreeTable.filteredNodes, pTreeTable.value);
178
+ pTreeTable.filteredNodes = [];
179
+ const isStrictMode = pTreeTable.filterMode === 'strict';
180
+ let isValueChanged = false;
181
+ for (const [idx, node] of pTreeTable.value.entries()) {
182
+ let copyNode = { ...node };
183
+ let localMatch = true;
184
+ let globalMatch = false;
185
+ let paramsWithoutNode;
186
+ for (const prop in pTreeTable.filters) {
187
+ if (
188
+ // eslint-disable-next-line no-prototype-builtins
189
+ pTreeTable.filters.hasOwnProperty(prop) &&
190
+ prop !== 'global') {
191
+ const filterMeta = pTreeTable.filters[prop];
192
+ const filterField = prop;
193
+ const filterValue = filterMeta?.value;
194
+ const filterMatchMode = filterMeta?.matchMode || 'startsWith';
195
+ const filterConstraint = pTreeTable.filterService.filters[filterMatchMode];
196
+ paramsWithoutNode = {
197
+ filterField,
198
+ filterValue,
199
+ filterConstraint,
200
+ isStrictMode
201
+ };
202
+ if ((isStrictMode &&
203
+ !(pTreeTable.findFilteredNodes(copyNode, paramsWithoutNode) ||
204
+ pTreeTable.isFilterMatched(copyNode, paramsWithoutNode))) ||
205
+ (!isStrictMode &&
206
+ !(pTreeTable.isFilterMatched(copyNode, paramsWithoutNode) ||
207
+ pTreeTable.findFilteredNodes(copyNode, paramsWithoutNode)))) {
208
+ localMatch = false;
209
+ }
210
+ if (!localMatch) {
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ if (pTreeTable.filters.global &&
216
+ !globalMatch &&
217
+ globalFilterFieldsArray) {
218
+ for (let j = 0; j < globalFilterFieldsArray.length; j++) {
219
+ const copyNodeForGlobal = { ...copyNode };
220
+ const filterField = globalFilterFieldsArray[j].field ||
221
+ globalFilterFieldsArray[j];
222
+ const filterValue = pTreeTable.filters.global.value;
223
+ const filterConstraint = pTreeTable.filterService.filters[pTreeTable.filters.global
224
+ .matchMode];
225
+ paramsWithoutNode = {
226
+ filterField,
227
+ filterValue,
228
+ filterConstraint,
229
+ isStrictMode
230
+ };
231
+ if ((isStrictMode &&
232
+ (pTreeTable.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) ||
233
+ pTreeTable.isFilterMatched(copyNodeForGlobal, paramsWithoutNode))) ||
234
+ (!isStrictMode &&
235
+ (pTreeTable.isFilterMatched(copyNodeForGlobal, paramsWithoutNode) ||
236
+ pTreeTable.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))) {
237
+ globalMatch = true;
238
+ copyNode = copyNodeForGlobal;
239
+ }
240
+ }
241
+ }
242
+ let matches = localMatch;
243
+ if (pTreeTable.filters.global) {
244
+ matches = localMatch && globalMatch;
245
+ }
246
+ if (matches) {
247
+ copyNode._idx = idx;
248
+ pTreeTable.filteredNodes.push(copyNode);
249
+ }
250
+ isValueChanged =
251
+ isValueChanged ||
252
+ !localMatch ||
253
+ globalMatch ||
254
+ (localMatch && pTreeTable.filteredNodes.length > 0) ||
255
+ (!globalMatch && pTreeTable.filteredNodes.length === 0);
256
+ }
257
+ if (!isValueChanged) {
258
+ pTreeTable.filteredNodes = null;
259
+ }
260
+ if (pTreeTable.paginator) {
261
+ pTreeTable.totalRecords = pTreeTable.filteredNodes
262
+ ? pTreeTable.filteredNodes.length
263
+ : pTreeTable.value
264
+ ? pTreeTable.value.length
265
+ : 0;
266
+ }
267
+ }
268
+ }
269
+ pTreeTable.first = 0;
270
+ const filteredValue = pTreeTable.filteredNodes || pTreeTable.value;
271
+ pTreeTable.onFilter.emit({
272
+ filters: pTreeTable.filters,
273
+ filteredValue
274
+ });
275
+ pTreeTable.tableService.onUIUpdate(filteredValue);
276
+ pTreeTable.updateSerializedValue();
277
+ if (pTreeTable.scrollable) {
278
+ pTreeTable.resetScrollTop();
279
+ }
280
+ };
281
+ pTreeTable.findFilteredNodes = (node, paramsWithoutNode) => {
282
+ if (node) {
283
+ let matched = false;
284
+ if (node.children) {
285
+ const childNodes = [...node.children];
286
+ node.children = [];
287
+ for (const [idx, childNode] of childNodes.entries()) {
288
+ const copyChildNode = { ...childNode };
289
+ if (pTreeTable.isFilterMatched(copyChildNode, paramsWithoutNode)) {
290
+ matched = true;
291
+ copyChildNode._idx = idx;
292
+ node.children.push(copyChildNode);
293
+ }
294
+ }
295
+ }
296
+ if (matched) {
297
+ return true;
298
+ }
299
+ }
300
+ };
301
+ }
302
+ _syncNodesParams(from, to) {
303
+ if (!from || !to)
304
+ return;
305
+ from.forEach((source) => {
306
+ const idx = source._idx;
307
+ if (typeof idx === 'number') {
308
+ const target = to[idx];
309
+ delete source._idx;
310
+ if (target) {
311
+ target.expanded = source.expanded;
312
+ target.partialSelected = source.partialSelected;
313
+ this._syncNodesParams(source.children, target.children);
314
+ }
315
+ }
316
+ });
140
317
  }
141
318
  }
142
319
  TreeTableUnsortDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TreeTableUnsortDirective, deps: [{ token: i1.TreeTable, host: true, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
@@ -154,4 +331,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
154
331
  }, {
155
332
  type: Optional
156
333
  }] }]; } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS11bnNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNNUMsTUFBTSxPQUFPLHdCQUF3QjtJQUduQyxZQUErQyxVQUFxQjtRQUFyQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBRnBFLGdDQUEyQixHQUFHLEtBQUssQ0FBQztRQUdsQyxVQUFVLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUMvRCxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDVixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hCLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQzthQUN6QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQy9CLElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7Z0JBQ3BDLElB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QkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0LCBTZWxmLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJlZVRhYmxlIH0gZnJvbSAncHJpbWVuZy90cmVldGFibGUnO1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICdwcmltZW5nL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW3R0V2l0aFVuc29ydF0nXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSB7XG4gIGRlZmF1bHRTb3J0T3JkZXJJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKEBIb3N0KCkgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgcFRyZWVUYWJsZTogVHJlZVRhYmxlKSB7XG4gICAgcFRyZWVUYWJsZS50YWJsZVNlcnZpY2UudWlVcGRhdGVTb3VyY2UkLnN1YnNjcmliZSgodmFsOiBhbnlbXSkgPT4ge1xuICAgICAgaWYgKHZhbCAhPSBudWxsICYmIHZhbC5sZW5ndGggPiAwICYmICF0aGlzLmRlZmF1bHRTb3J0T3JkZXJJbml0aWFsaXplZCkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHZhbC5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgdi5fZGVmYXVsdFNvcnRPcmRlciA9IGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNvcnRPcmRlckluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBUcmVlVGFibGUuc29ydCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAocFRyZWVUYWJsZS5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBUcmVlVGFibGUuc29ydEZpZWxkID09PSBldmVudC5maWVsZCAmJlxuICAgICAgICAgIHBUcmVlVGFibGUuc29ydE9yZGVyID09PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudC5maWVsZCA9ICdfZGVmYXVsdFNvcnRPcmRlcic7XG4gICAgICAgIH1cblxuICAgICAgICBwVHJlZVRhYmxlLl9zb3J0T3JkZXIgPVxuICAgICAgICAgIHBUcmVlVGFibGUuc29ydEZpZWxkID09PSBldmVudC5maWVsZFxuICAgICAgICAgICAgPyBwVHJlZVRhYmxlLnNvcnRPcmRlciAqIC0xXG4gICAgICAgICAgICA6IHBUcmVlVGFibGUuZGVmYXVsdFNvcnRPcmRlcjtcbiAgICAgICAgcFRyZWVUYWJsZS5fc29ydEZpZWxkID0gZXZlbnQuZmllbGQ7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydFNpbmdsZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHBUcmVlVGFibGUuc29ydE1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgbGV0IHJlc2V0SW5kZXggPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc29ydE1ldGEgPSBwVHJlZVRhYmxlLmdldFNvcnRNZXRhKGV2ZW50LmZpZWxkKTtcblxuICAgICAgICBpZiAoc29ydE1ldGEpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBUcmVlVGFibGUuX211bHRpU29ydE1ldGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhW2ldLmZpZWxkID09PSBzb3J0TWV0YS5maWVsZCkge1xuICAgICAgICAgICAgICBwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNvcnRNZXRhLm9yZGVyID09PSAxKSB7XG4gICAgICAgICAgICBzb3J0TWV0YS5vcmRlciA9IHNvcnRNZXRhLm9yZGVyICogLTE7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLm11bHRpU29ydE1ldGEucHVzaChzb3J0TWV0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YS5wdXNoKHtcbiAgICAgICAgICAgICAgZmllbGQ6ICdfZGVmYXVsdFNvcnRPcmRlcicsXG4gICAgICAgICAgICAgIG9yZGVyOiBwVHJlZVRhYmxlLmRlZmF1bHRTb3J0T3JkZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzZXRJbmRleCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghcFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBldmVudC5maWVsZCxcbiAgICAgICAgICAgIG9yZGVyOiBwVHJlZVRhYmxlLmRlZmF1bHRTb3J0T3JkZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBUcmVlVGFibGUuc29ydE11bHRpcGxlKCk7XG4gICAgICAgIGlmIChyZXNldEluZGV4KSBwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhID0gW107XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBUcmVlVGFibGUuc29ydE5vZGVzID0gKG5vZGVzKSA9PiB7XG4gICAgICBpZiAoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChwVHJlZVRhYmxlLmN1c3RvbVNvcnQpIHtcbiAgICAgICAgcFRyZWVUYWJsZS5zb3J0RnVuY3Rpb24uZW1pdCh7XG4gICAgICAgICAgZGF0YTogbm9kZXMsXG4gICAgICAgICAgbW9kZTogcFRyZWVUYWJsZS5zb3J0TW9kZSxcbiAgICAgICAgICBmaWVsZDogcFRyZWVUYWJsZS5zb3J0RmllbGQsXG4gICAgICAgICAgb3JkZXI6IHBUcmVlVGFibGUuc29ydE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNVbnNvcnQgPSBwVHJlZVRhYmxlLnNvcnRGaWVsZCA9PT0gJ19kZWZhdWx0U29ydE9yZGVyJztcbiAgICAgICAgbm9kZXMuc29ydCgobm9kZTE6IGFueSwgbm9kZTI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlMSA9IGlzVW5zb3J0XG4gICAgICAgICAgICA/IG5vZGUxLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTEuZGF0YSwgcFRyZWVUYWJsZS5zb3J0RmllbGQpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGlzVW5zb3J0XG4gICAgICAgICAgICA/IG5vZGUyLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTIuZGF0YSwgcFRyZWVUYWJsZS5zb3J0RmllbGQpO1xuICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMTtcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMTtcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMDtcbiAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUyID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSk7XG4gICAgICAgICAgZWxzZSByZXN1bHQgPSB2YWx1ZTEgPCB2YWx1ZTIgPyAtMSA6IHZhbHVlMSA+IHZhbHVlMiA/IDEgOiAwO1xuXG4gICAgICAgICAgcmV0dXJuIHBUcmVlVGFibGUuc29ydE9yZGVyICogcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydE5vZGVzKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLm11bHRpc29ydEZpZWxkID0gKG5vZGUxLCBub2RlMiwgbXVsdGlTb3J0TWV0YSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0VXRpbHMuaXNFbXB0eShwVHJlZVRhYmxlLm11bHRpU29ydE1ldGEpIHx8XG4gICAgICAgIE9iamVjdFV0aWxzLmlzRW1wdHkobXVsdGlTb3J0TWV0YVtpbmRleF0pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBjb25zdCBpc1Vuc29ydCA9IG11bHRpU29ydE1ldGFbaW5kZXhdLmZpZWxkID09PSAnX2RlZmF1bHRTb3J0T3JkZXInO1xuICAgICAgY29uc3QgdmFsdWUxID0gaXNVbnNvcnRcbiAgICAgICAgPyBub2RlMS5fZGVmYXVsdFNvcnRPcmRlclxuICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTEuZGF0YSwgbXVsdGlTb3J0TWV0YVtpbmRleF0uZmllbGQpO1xuICAgICAgY29uc3QgdmFsdWUyID0gaXNVbnNvcnRcbiAgICAgICAgPyBub2RlMi5fZGVmYXVsdFNvcnRPcmRlclxuICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTIuZGF0YSwgbXVsdGlTb3J0TWV0YVtpbmRleF0uZmllbGQpO1xuICAgICAgbGV0IHJlc3VsdCA9IDA7XG5cbiAgICAgIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgIT0gbnVsbCkgcmVzdWx0ID0gLTE7XG4gICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMTtcbiAgICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAwO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnIHx8IHZhbHVlMSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUxLmxvY2FsZUNvbXBhcmUgJiYgdmFsdWUxICE9PSB2YWx1ZTIpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbXVsdGlTb3J0TWV0YVtpbmRleF0ub3JkZXIgKlxuICAgICAgICAgICAgdmFsdWUxLmxvY2FsZUNvbXBhcmUodmFsdWUyLCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlMSA8IHZhbHVlMiA/IC0xIDogMTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyKSB7XG4gICAgICAgIHJldHVybiBtdWx0aVNvcnRNZXRhLmxlbmd0aCAtIDEgPiBpbmRleFxuICAgICAgICAgID8gcFRyZWVUYWJsZS5tdWx0aXNvcnRGaWVsZChub2RlMSwgbm9kZTIsIG11bHRpU29ydE1ldGEsIGluZGV4ICsgMSlcbiAgICAgICAgICA6IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtdWx0aVNvcnRNZXRhW2luZGV4XS5vcmRlciAqIHJlc3VsdDtcbiAgICB9O1xuICB9XG59XG4iXX0=
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS11bnNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNNUMsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUErQyxVQUFxQjtRQUFyQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ2xFLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUNwQyxJQUNFLFVBQVUsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEtBQUs7b0JBQ3BDLFVBQVUsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQzNCO29CQUNBLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUM7aUJBQ25DO2dCQUVELFVBQVUsQ0FBQyxVQUFVO29CQUNuQixVQUFVLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLO3dCQUNsQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQzNCLENBQUMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDcEMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxVQUFVLENBQUMsUUFBUSxLQUFL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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIFNlbGYsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbdHRXaXRoVW5zb3J0XSdcbn0pXG5leHBvcnQgY2xhc3MgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoQEhvc3QoKSBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBwVHJlZVRhYmxlOiBUcmVlVGFibGUpIHtcbiAgICBwVHJlZVRhYmxlLnNvcnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHBUcmVlVGFibGUuc29ydE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwVHJlZVRhYmxlLnNvcnRGaWVsZCA9PT0gZXZlbnQuZmllbGQgJiZcbiAgICAgICAgICBwVHJlZVRhYmxlLnNvcnRPcmRlciA9PT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQuZmllbGQgPSAnX2RlZmF1bHRTb3J0T3JkZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcFRyZWVUYWJsZS5fc29ydE9yZGVyID1cbiAgICAgICAgICBwVHJlZVRhYmxlLnNvcnRGaWVsZCA9PT0gZXZlbnQuZmllbGRcbiAgICAgICAgICAgID8gcFRyZWVUYWJsZS5zb3J0T3JkZXIgKiAtMVxuICAgICAgICAgICAgOiBwVHJlZVRhYmxlLmRlZmF1bHRTb3J0T3JkZXI7XG4gICAgICAgIHBUcmVlVGFibGUuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xuICAgICAgICBwVHJlZVRhYmxlLnNvcnRTaW5nbGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChwVHJlZVRhYmxlLnNvcnRNb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgIGxldCByZXNldEluZGV4ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNvcnRNZXRhID0gcFRyZWVUYWJsZS5nZXRTb3J0TWV0YShldmVudC5maWVsZCk7XG5cbiAgICAgICAgaWYgKHNvcnRNZXRhKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YVtpXS5maWVsZCA9PT0gc29ydE1ldGEuZmllbGQpIHtcbiAgICAgICAgICAgICAgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3J0TWV0YS5vcmRlciA9PT0gMSkge1xuICAgICAgICAgICAgc29ydE1ldGEub3JkZXIgPSBzb3J0TWV0YS5vcmRlciAqIC0xO1xuICAgICAgICAgICAgcFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhLnB1c2goc29ydE1ldGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLm11bHRpU29ydE1ldGEucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkOiAnX2RlZmF1bHRTb3J0T3JkZXInLFxuICAgICAgICAgICAgICBvcmRlcjogcFRyZWVUYWJsZS5kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc2V0SW5kZXggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSkge1xuICAgICAgICAgICAgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwVHJlZVRhYmxlLm11bHRpU29ydE1ldGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXG4gICAgICAgICAgICBvcmRlcjogcFRyZWVUYWJsZS5kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBwVHJlZVRhYmxlLnNvcnRNdWx0aXBsZSgpO1xuICAgICAgICBpZiAocmVzZXRJbmRleCkgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLnNvcnROb2RlcyA9IChub2RlcykgPT4ge1xuICAgICAgaWYgKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zeW5jTm9kZXNQYXJhbXMocFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzLCBub2Rlcyk7XG5cbiAgICAgIGlmIChwVHJlZVRhYmxlLmN1c3RvbVNvcnQpIHtcbiAgICAgICAgcFRyZWVUYWJsZS5zb3J0RnVuY3Rpb24uZW1pdCh7XG4gICAgICAgICAgZGF0YTogbm9kZXMsXG4gICAgICAgICAgbW9kZTogcFRyZWVUYWJsZS5zb3J0TW9kZSxcbiAgICAgICAgICBmaWVsZDogcFRyZWVUYWJsZS5zb3J0RmllbGQsXG4gICAgICAgICAgb3JkZXI6IHBUcmVlVGFibGUuc29ydE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNVbnNvcnQgPSBwVHJlZVRhYmxlLnNvcnRGaWVsZCA9PT0gJ19kZWZhdWx0U29ydE9yZGVyJztcbiAgICAgICAgbm9kZXMuc29ydCgobm9kZTE6IGFueSwgbm9kZTI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlMSA9IGlzVW5zb3J0XG4gICAgICAgICAgICA/IG5vZGUxLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTEuZGF0YSwgcFRyZWVUYWJsZS5zb3J0RmllbGQpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGlzVW5zb3J0XG4gICAgICAgICAgICA/IG5vZGUyLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTIuZGF0YSwgcFRyZWVUYWJsZS5zb3J0RmllbGQpO1xuICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMTtcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMTtcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMDtcbiAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUyID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSk7XG4gICAgICAgICAgZWxzZSByZXN1bHQgPSB2YWx1ZTEgPCB2YWx1ZTIgPyAtMSA6IHZhbHVlMSA+IHZhbHVlMiA/IDEgOiAwO1xuXG4gICAgICAgICAgcmV0dXJuIHBUcmVlVGFibGUuc29ydE9yZGVyICogcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydE5vZGVzKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLnNvcnRNdWx0aXBsZU5vZGVzID0gKG5vZGVzKSA9PiB7XG4gICAgICBpZiAoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N5bmNOb2Rlc1BhcmFtcyhwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMsIG5vZGVzKTtcblxuICAgICAgaWYgKHBUcmVlVGFibGUuY3VzdG9tU29ydCkge1xuICAgICAgICBwVHJlZVRhYmxlLnNvcnRGdW5jdGlvbi5lbWl0KHtcbiAgICAgICAgICBkYXRhOiBwVHJlZVRhYmxlLnZhbHVlLFxuICAgICAgICAgIG1vZGU6IHBUcmVlVGFibGUuc29ydE1vZGUsXG4gICAgICAgICAgbXVsdGlTb3J0TWV0YTogcFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZXMuc29ydCgobm9kZTE6IGFueSwgbm9kZTI6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwVHJlZVRhYmxlLm11bHRpc29ydEZpZWxkKFxuICAgICAgICAgICAgbm9kZTEsXG4gICAgICAgICAgICBub2RlMixcbiAgICAgICAgICAgIHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydE11bHRpcGxlTm9kZXMobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBUcmVlVGFibGUubXVsdGlzb3J0RmllbGQgPSAobm9kZTEsIG5vZGUyLCBtdWx0aVNvcnRNZXRhLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3RVdGlscy5pc0VtcHR5KHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSkgfHxcbiAgICAgICAgT2JqZWN0VXRpbHMuaXNFbXB0eShtdWx0aVNvcnRNZXRhW2luZGV4XSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzVW5zb3J0ID0gbXVsdGlTb3J0TWV0YVtpbmRleF0uZmllbGQgPT09ICdfZGVmYXVsdFNvcnRPcmRlcic7XG4gICAgICBjb25zdCB2YWx1ZTEgPSBpc1Vuc29ydFxuICAgICAgICA/IG5vZGUxLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgIDogT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShub2RlMS5kYXRhLCBtdWx0aVNvcnRNZXRhW2luZGV4XS5maWVsZCk7XG4gICAgICBjb25zdCB2YWx1ZTIgPSBpc1Vuc29ydFxuICAgICAgICA/IG5vZGUyLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgIDogT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShub2RlMi5kYXRhLCBtdWx0aVNvcnRNZXRhW2luZGV4XS5maWVsZCk7XG4gICAgICBsZXQgcmVzdWx0ID0gMDtcblxuICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMTtcbiAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAxO1xuICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDA7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgfHwgdmFsdWUxIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZTEubG9jYWxlQ29tcGFyZSAmJiB2YWx1ZTEgIT09IHZhbHVlMikge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtdWx0aVNvcnRNZXRhW2luZGV4XS5vcmRlciAqXG4gICAgICAgICAgICB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIsIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWUxIDwgdmFsdWUyID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpU29ydE1ldGEubGVuZ3RoIC0gMSA+IGluZGV4XG4gICAgICAgICAgPyBwVHJlZVRhYmxlLm11bHRpc29ydEZpZWxkKG5vZGUxLCBub2RlMiwgbXVsdGlTb3J0TWV0YSwgaW5kZXggKyAxKVxuICAgICAgICAgIDogMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG11bHRpU29ydE1ldGFbaW5kZXhdLm9yZGVyICogcmVzdWx0O1xuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLl9maWx0ZXIgPSAoKSA9PiB7XG4gICAgICBpZiAocFRyZWVUYWJsZS5sYXp5KSB7XG4gICAgICAgIHBUcmVlVGFibGUub25MYXp5TG9hZC5lbWl0KHBUcmVlVGFibGUuY3JlYXRlTGF6eUxvYWRNZXRhZGF0YSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghcFRyZWVUYWJsZS52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcFRyZWVUYWJsZS5oYXNGaWx0ZXIoKSkge1xuICAgICAgICAgIChwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgYXMgYW55KSA9IG51bGw7XG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyA9IHBUcmVlVGFibGUudmFsdWVcbiAgICAgICAgICAgICAgPyBwVHJlZVRhYmxlLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheTogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwpIHtcbiAgICAgICAgICAgIGlmICghcFRyZWVUYWJsZS5jb2x1bW5zICYmICFwVHJlZVRhYmxlLmdsb2JhbEZpbHRlckZpZWxkcylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdHbG9iYWwgZmlsdGVyaW5nIHJlcXVpcmVzIGR5bmFtaWMgY29sdW1ucyBvciBnbG9iYWxGaWx0ZXJGaWVsZHMgdG8gYmUgZGVmaW5lZC4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5ID1cbiAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmdsb2JhbEZpbHRlckZpZWxkcyB8fCBwVHJlZVRhYmxlLmNvbHVtbnM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fc3luY05vZGVzUGFyYW1zKHBUcmVlVGFibGUuZmlsdGVyZWROb2RlcywgcFRyZWVUYWJsZS52YWx1ZSk7XG5cbiAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBpc1N0cmljdE1vZGUgPSBwVHJlZVRhYmxlLmZpbHRlck1vZGUgPT09ICdzdHJpY3QnO1xuICAgICAgICAgIGxldCBpc1ZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbaWR4LCBub2RlXSBvZiBwVHJlZVRhYmxlLnZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgbGV0IGNvcHlOb2RlID0geyAuLi5ub2RlIH07XG4gICAgICAgICAgICBsZXQgbG9jYWxNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBsZXQgZ2xvYmFsTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBwYXJhbXNXaXRob3V0Tm9kZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHBUcmVlVGFibGUuZmlsdGVycykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgICAgICAgICAgIHByb3AgIT09ICdnbG9iYWwnXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck1ldGEgPSBwVHJlZVRhYmxlLmZpbHRlcnNbcHJvcF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRmllbGQgPSBwcm9wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZmlsdGVyTWV0YT8udmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTWF0Y2hNb2RlID0gZmlsdGVyTWV0YT8ubWF0Y2hNb2RlIHx8ICdzdGFydHNXaXRoJztcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJDb25zdHJhaW50ID1cbiAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzW1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJNYXRjaE1vZGUgYXMga2V5b2YgdHlwZW9mIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlID0ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnN0cmFpbnQsXG4gICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChpc1N0cmljdE1vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbmRGaWx0ZXJlZE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZVxuICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmlzRmlsdGVyTWF0Y2hlZChjb3B5Tm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgICAgICAgICAoIWlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuaXNGaWx0ZXJNYXRjaGVkKGNvcHlOb2RlLCBwYXJhbXNXaXRob3V0Tm9kZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbmRGaWx0ZXJlZE5vZGVzKGNvcHlOb2RlLCBwYXJhbXNXaXRob3V0Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWxvY2FsTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwgJiZcbiAgICAgICAgICAgICAgIWdsb2JhbE1hdGNoICYmXG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlOb2RlRm9yR2xvYmFsID0geyAuLi5jb3B5Tm9kZSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckZpZWxkID1cbiAgICAgICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5W2pdLmZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheVtqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwudmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uc3RyYWludCA9XG4gICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlclNlcnZpY2UuZmlsdGVyc1tcbiAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5maWx0ZXJzLmdsb2JhbFxuICAgICAgICAgICAgICAgICAgICAgIC5tYXRjaE1vZGUgYXMga2V5b2YgdHlwZW9mIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlID0ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnN0cmFpbnQsXG4gICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAocFRyZWVUYWJsZS5maW5kRmlsdGVyZWROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZVxuICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5pc0ZpbHRlck1hdGNoZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlXG4gICAgICAgICAgICAgICAgICAgICAgKSkpIHx8XG4gICAgICAgICAgICAgICAgICAoIWlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAocFRyZWVUYWJsZS5pc0ZpbHRlck1hdGNoZWQoXG4gICAgICAgICAgICAgICAgICAgICAgY29weU5vZGVGb3JHbG9iYWwsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1zV2l0aG91dE5vZGVcbiAgICAgICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmluZEZpbHRlcmVkTm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlXG4gICAgICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBnbG9iYWxNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjb3B5Tm9kZSA9IGNvcHlOb2RlRm9yR2xvYmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGxvY2FsTWF0Y2g7XG4gICAgICAgICAgICBpZiAocFRyZWVUYWJsZS5maWx0ZXJzLmdsb2JhbCkge1xuICAgICAgICAgICAgICBtYXRjaGVzID0gbG9jYWxNYXRjaCAmJiBnbG9iYWxNYXRjaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29weU5vZGUuX2lkeCA9IGlkeDtcbiAgICAgICAgICAgICAgcFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzLnB1c2goY29weU5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc1ZhbHVlQ2hhbmdlZCA9XG4gICAgICAgICAgICAgIGlzVmFsdWVDaGFuZ2VkIHx8XG4gICAgICAgICAgICAgICFsb2NhbE1hdGNoIHx8XG4gICAgICAgICAgICAgIGdsb2JhbE1hdGNoIHx8XG4gICAgICAgICAgICAgIChsb2NhbE1hdGNoICYmIHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAoIWdsb2JhbE1hdGNoICYmIHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlcy5sZW5ndGggPT09IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXNWYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIChwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgYXMgYW55KSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyA9IHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlc1xuICAgICAgICAgICAgICA/IHBUcmVlVGFibGUuZmlsdGVyZWROb2Rlcy5sZW5ndGhcbiAgICAgICAgICAgICAgOiBwVHJlZVRhYmxlLnZhbHVlXG4gICAgICAgICAgICAgID8gcFRyZWVUYWJsZS52YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwVHJlZVRhYmxlLmZpcnN0ID0gMDtcblxuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZSA9IHBUcmVlVGFibGUuZmlsdGVyZWROb2RlcyB8fCBwVHJlZVRhYmxlLnZhbHVlO1xuXG4gICAgICBwVHJlZVRhYmxlLm9uRmlsdGVyLmVtaXQoe1xuICAgICAgICBmaWx0ZXJzOiBwVHJlZVRhYmxlLmZpbHRlcnMsXG4gICAgICAgIGZpbHRlcmVkVmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICBwVHJlZVRhYmxlLnRhYmxlU2VydmljZS5vblVJVXBkYXRlKGZpbHRlcmVkVmFsdWUpO1xuICAgICAgcFRyZWVUYWJsZS51cGRhdGVTZXJpYWxpemVkVmFsdWUoKTtcblxuICAgICAgaWYgKHBUcmVlVGFibGUuc2Nyb2xsYWJsZSkge1xuICAgICAgICBwVHJlZVRhYmxlLnJlc2V0U2Nyb2xsVG9wKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBUcmVlVGFibGUuZmluZEZpbHRlcmVkTm9kZXMgPSAobm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpOiBhbnkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gWy4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtpZHgsIGNoaWxkTm9kZV0gb2YgY2hpbGROb2Rlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcHlDaGlsZE5vZGUgPSB7IC4uLmNoaWxkTm9kZSB9O1xuICAgICAgICAgICAgaWYgKHBUcmVlVGFibGUuaXNGaWx0ZXJNYXRjaGVkKGNvcHlDaGlsZE5vZGUsIHBhcmFtc1dpdGhvdXROb2RlKSkge1xuICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29weUNoaWxkTm9kZS5faWR4ID0gaWR4O1xuICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2goY29weUNoaWxkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTm9kZXNQYXJhbXMoZnJvbTogYW55W10gfCB1bmRlZmluZWQsIHRvOiBhbnlbXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZnJvbSB8fCAhdG8pIHJldHVybjtcblxuICAgIGZyb20uZm9yRWFjaCgoc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzb3VyY2UuX2lkeDtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0b1tpZHhdO1xuICAgICAgICBkZWxldGUgc291cmNlLl9pZHg7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXQuZXhwYW5kZWQgPSBzb3VyY2UuZXhwYW5kZWQ7XG4gICAgICAgICAgdGFyZ2V0LnBhcnRpYWxTZWxlY3RlZCA9IHNvdXJjZS5wYXJ0aWFsU2VsZWN0ZWQ7XG4gICAgICAgICAgdGhpcy5fc3luY05vZGVzUGFyYW1zKHNvdXJjZS5jaGlsZHJlbiwgdGFyZ2V0LmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=