@trudb/tru-common-lib 0.1.267 → 0.1.269
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.
|
@@ -19,14 +19,11 @@ export class TruCardColumn {
|
|
|
19
19
|
parentTablePluralLabel;
|
|
20
20
|
childTableName;
|
|
21
21
|
childTablePluralLabel;
|
|
22
|
-
key;
|
|
23
22
|
parentQuery = null;
|
|
24
23
|
lockProperty;
|
|
25
|
-
color;
|
|
26
24
|
unassignedVisible;
|
|
27
25
|
unassignedName;
|
|
28
26
|
unassignedLocked;
|
|
29
|
-
unassignedColor;
|
|
30
27
|
unassignedDraggable;
|
|
31
28
|
unassignedDroppable;
|
|
32
29
|
inactiveVisible;
|
|
@@ -37,15 +34,18 @@ export class TruCardColumn {
|
|
|
37
34
|
relatedParentName;
|
|
38
35
|
relatedChildName;
|
|
39
36
|
insertBefore;
|
|
40
|
-
selectedCards = [];
|
|
41
|
-
columnFilterRefs = [];
|
|
42
|
-
cardFilterStr;
|
|
43
37
|
uniqueId;
|
|
44
38
|
subs = [];
|
|
45
39
|
busyMessage = 'Rendering...';
|
|
46
40
|
isBusy = false;
|
|
47
41
|
columns = [];
|
|
48
42
|
lockedColumns = [];
|
|
43
|
+
columnFilterRefs = [];
|
|
44
|
+
cardFilterStr = null;
|
|
45
|
+
selectedCards = [];
|
|
46
|
+
color;
|
|
47
|
+
unassignedColor;
|
|
48
|
+
key;
|
|
49
49
|
constructor(dataContext, modelTypeLookup, searchViewEventHandler) {
|
|
50
50
|
this.dataContext = dataContext;
|
|
51
51
|
this.modelTypeLookup = modelTypeLookup;
|
|
@@ -160,7 +160,7 @@ export class TruCardColumn {
|
|
|
160
160
|
if (this.lockProperty !== null && parent[this.lockProperty]) {
|
|
161
161
|
lockedColumns.push(parent);
|
|
162
162
|
}
|
|
163
|
-
else if (this.lockProperty
|
|
163
|
+
else if (this.lockProperty === null || !parent[this.lockProperty] && !_.contains(emptyParents, parent)) {
|
|
164
164
|
columns.push(parent);
|
|
165
165
|
}
|
|
166
166
|
}
|
|
@@ -254,7 +254,7 @@ export class TruCardColumn {
|
|
|
254
254
|
this.columns = columns;
|
|
255
255
|
setTimeout(() => {
|
|
256
256
|
this.clear();
|
|
257
|
-
new CardView(this.lockedColumns, this.columns);
|
|
257
|
+
new CardView(this, this.lockedColumns, this.columns);
|
|
258
258
|
if (revert) {
|
|
259
259
|
let columnElement = this.portal.nativeElement.querySelectorAll('.tru-card-portal-columns')[0];
|
|
260
260
|
let previousScrollPosition = localStorage.getItem('scroll_position' + uuidv4());
|
|
@@ -262,10 +262,6 @@ export class TruCardColumn {
|
|
|
262
262
|
}
|
|
263
263
|
});
|
|
264
264
|
});
|
|
265
|
-
class CardView {
|
|
266
|
-
constructor(lockedColumns, columns) {
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
265
|
}
|
|
270
266
|
subscribeTo = () => {
|
|
271
267
|
this.subs.push(this.searchViewEventHandler.onSearch().pipe(skip(1)).subscribe((setupQuery) => {
|
|
@@ -287,6 +283,121 @@ export class TruCardColumn {
|
|
|
287
283
|
}
|
|
288
284
|
});
|
|
289
285
|
};
|
|
286
|
+
updateSelection = (card) => {
|
|
287
|
+
if (!card.selected) {
|
|
288
|
+
var index = this.selectedCards.indexOf(card);
|
|
289
|
+
if (index !== -1)
|
|
290
|
+
this.selectedCards.splice(index, 1);
|
|
291
|
+
card.cardElement.classList.remove('tru-card-selected');
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
var index = this.selectedCards.indexOf(card);
|
|
295
|
+
if (index === -1)
|
|
296
|
+
this.selectedCards.push(card);
|
|
297
|
+
card.cardElement.classList.add('tru-card-selected');
|
|
298
|
+
}
|
|
299
|
+
//scope.config.onSelectionChanged(selectedCards);
|
|
300
|
+
};
|
|
301
|
+
dragStart = (e, card) => {
|
|
302
|
+
e.stopPropagation();
|
|
303
|
+
//scope.config.closeSearchPanel();
|
|
304
|
+
if ((card.column.data.unassigned && !this.unassignedDraggable) ||
|
|
305
|
+
(card.column.data.inactive && !this.inactiveDraggable)) {
|
|
306
|
+
e.preventDefault();
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
e.dataTransfer.dropEffect = 'move';
|
|
310
|
+
if (!card.selected) {
|
|
311
|
+
card.selected = true;
|
|
312
|
+
this.updateSelection(card);
|
|
313
|
+
}
|
|
314
|
+
let clonedNode = e.target.cloneNode(true);
|
|
315
|
+
clonedNode.style.position = "absolute";
|
|
316
|
+
clonedNode.style.top = "0px";
|
|
317
|
+
clonedNode.style.left = "-10000px";
|
|
318
|
+
clonedNode.style.overflow = 'visible';
|
|
319
|
+
clonedNode.classList.add('cloned-card');
|
|
320
|
+
var inner = clonedNode.getElementsByClassName("tru-card-portal-card")[0];
|
|
321
|
+
inner.style.transform = "rotate(-10deg)";
|
|
322
|
+
inner.style.position = 'relative';
|
|
323
|
+
inner.style.zIndex = 10;
|
|
324
|
+
document.body.appendChild(clonedNode);
|
|
325
|
+
e.dataTransfer.setDragImage(clonedNode, 50, 50);
|
|
326
|
+
return true;
|
|
327
|
+
};
|
|
328
|
+
dragOver = (e, card) => {
|
|
329
|
+
e.stopPropagation();
|
|
330
|
+
e.preventDefault();
|
|
331
|
+
var target = e.target;
|
|
332
|
+
if (!target.classList.contains('tru-card-portal-card-container') ||
|
|
333
|
+
(card.column.data.unassigned && !this.unassignedDroppable) ||
|
|
334
|
+
(card.column.data.inactive && !this.inactiveDroppable)) {
|
|
335
|
+
e.dataTransfer.dropEffect = 'none';
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
e.dataTransfer.dropEffect = 'move';
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
dragEnd = (e) => {
|
|
342
|
+
e.stopPropagation();
|
|
343
|
+
let elements = document.getElementsByClassName('cloned-card');
|
|
344
|
+
while (elements.length > 0) {
|
|
345
|
+
elements[0].parentNode?.removeChild(elements[0]);
|
|
346
|
+
}
|
|
347
|
+
elements = document.getElementsByClassName('tru-card-placeholder');
|
|
348
|
+
while (elements.length > 0) {
|
|
349
|
+
elements[0].parentNode?.removeChild(elements[0]);
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
drop = (e, card) => {
|
|
353
|
+
e.stopPropagation();
|
|
354
|
+
for (var i = this.selectedCards.length - 1; i >= 0; --i) {
|
|
355
|
+
let index = card.column.cards.indexOf(this.selectedCards[i]);
|
|
356
|
+
if (index !== -1)
|
|
357
|
+
this.selectedCards[i].updateData();
|
|
358
|
+
}
|
|
359
|
+
if (card.column.data.unassigned && !this.unassignedDroppable ||
|
|
360
|
+
card.column.data.inactive && !this.inactiveDroppable ||
|
|
361
|
+
!this.selectedCards.length) {
|
|
362
|
+
e.preventDefault();
|
|
363
|
+
return false;
|
|
364
|
+
}
|
|
365
|
+
;
|
|
366
|
+
if (this.config === null) {
|
|
367
|
+
//this.config.onDrop(card, this.selectedCards, this.config, this.portal, e);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
for (let i = 0; i < this.selectedCards.length; i++) {
|
|
371
|
+
card.column.addCard(this.selectedCards[i]);
|
|
372
|
+
}
|
|
373
|
+
for (var i = this.selectedCards.length - 1; i >= 0; --i) {
|
|
374
|
+
this.selectedCards[i].column.removeCard(this.selectedCards[i]);
|
|
375
|
+
}
|
|
376
|
+
while (this.selectedCards.length) {
|
|
377
|
+
this.selectedCards.pop();
|
|
378
|
+
}
|
|
379
|
+
;
|
|
380
|
+
//let savePromise = .config.save();
|
|
381
|
+
//if (savePromise) {
|
|
382
|
+
// this.portal.nativeElement.classList.add('tru-card-portal-disabled');
|
|
383
|
+
// await savePromise.then(() => {
|
|
384
|
+
// this.portal.nativeElement.classList.remove('tru-card-portal-disabled');
|
|
385
|
+
// }).catch(() => {
|
|
386
|
+
// e.preventDefault();
|
|
387
|
+
// var columnElement = this.portal.nativeElement.querySelectorAll('.tru-card-portal-columns')[0];
|
|
388
|
+
// localStorage.setItem('scroll_position' + this.uniqueId, columnElement.scrollLeft);
|
|
389
|
+
// scope.config.revert();
|
|
390
|
+
// this.portal.nativeElement.classList.remove('tru-card-portal-disabled');
|
|
391
|
+
// });
|
|
392
|
+
//} else {
|
|
393
|
+
// e.preventDefault();
|
|
394
|
+
// var columnElement = this.portal.nativeElement.querySelectorAll('.tru-card-portal-columns')[0];
|
|
395
|
+
// localStorage.setItem('scroll_position' + this.uniqueId, columnElement.scrollLeft);
|
|
396
|
+
// scope.config.revert();
|
|
397
|
+
//}
|
|
398
|
+
}
|
|
399
|
+
return true;
|
|
400
|
+
};
|
|
290
401
|
ngOnInit() {
|
|
291
402
|
this.parentTableName = this.config.parentTableName;
|
|
292
403
|
this.parentTablePluralLabel = this.config.parentTablePluralLabel;
|
|
@@ -334,4 +445,284 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
334
445
|
type: ViewChild,
|
|
335
446
|
args: ['cardPortal', { static: false }]
|
|
336
447
|
}] } });
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNhcmQtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtY29sdW1uL3RydS1jYXJkLWNvbHVtbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWNvbHVtbi90cnUtY2FyZC1jb2x1bW4uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtwQyxPQUFPLEVBQWdCLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVFwRCxNQUFNLE9BQU8sYUFBYTtJQTJDZDtJQUNBO0lBQ0E7SUE1Q0QsTUFBTSxDQUF1QjtJQUM3QixJQUFJLENBQU87SUFFd0IsTUFBTSxDQUFjO0lBRXhELGVBQWUsQ0FBVTtJQUN6QixzQkFBc0IsQ0FBVTtJQUNoQyxjQUFjLENBQVU7SUFDeEIscUJBQXFCLENBQVU7SUFDL0IsR0FBRyxDQUFVO0lBQ2IsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixZQUFZLENBQWlCO0lBQzdCLEtBQUssQ0FBaUI7SUFDdEIsaUJBQWlCLENBQVc7SUFDNUIsY0FBYyxDQUFpQjtJQUMvQixnQkFBZ0IsQ0FBVTtJQUMxQixlQUFlLENBQWlCO0lBQ2hDLG1CQUFtQixDQUFXO0lBQzlCLG1CQUFtQixDQUFXO0lBRTlCLGVBQWUsQ0FBVztJQUMxQixpQkFBaUIsQ0FBVztJQUM1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QUM7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQzt1R0FuV1UsYUFBYTsyRkFBYixhQUFhLHlNQ2hCMUIsczVCQW1CQTs7MkZESGEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxpQkFBaUI7NEpBS2xCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRXNDLE1BQU07c0JBQWpELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xyXG5pbXBvcnQgeyBicmVlemUgfSBmcm9tICdicmVlemUtY2xpZW50JztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWRhdGEtY29udGV4dCc7XHJcbmltcG9ydCB7IFRydUVudGl0eUJhc2UgfSBmcm9tICcuLi8uLi9iYXNlLWNsYXNzZXMvdHJ1LWVudGl0eS1iYXNlJztcclxuaW1wb3J0IHsgVHJ1TW9kZWxUeXBlTG9va3VwIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLXR5cGUtbG9va3VwJztcclxuaW1wb3J0IHsgSVRydUNhcmRDb2x1bW5Db25maWcgfSBmcm9tICcuL2NsYXNzZXMvdHJ1LWNhcmQtY29sdW1uLWNvbmZpZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZm9ya0pvaW4sIHNraXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2Jhc2Utdmlld3Mvc2VhcmNoL3NlcnZpY2VzL3RydS1zZWFyY2gtdmlldy1ldmVudC1oYW5kbGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1LWNhcmQtY29sdW1uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWNhcmQtY29sdW1uLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RydS1jYXJkLWNvbHVtbi5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJ1Q2FyZENvbHVtbiB7XHJcbiAgQElucHV0KCkgY29uZmlnITogSVRydUNhcmRDb2x1bW5Db25maWdcclxuICBASW5wdXQoKSBuYW1lITogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKCdjYXJkUG9ydGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHBvcnRhbCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgcGFyZW50VGFibGVOYW1lITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcGFyZW50VGFibGVQbHVyYWxMYWJlbCE6IHN0cmluZztcclxuICBwcml2YXRlIGNoaWxkVGFibGVOYW1lITogc3RyaW5nO1xyXG4gIHByaXZhdGUgY2hpbGRUYWJsZVBsdXJhbExhYmVsITogc3RyaW5nO1xyXG4gIHByaXZhdGUga2V5ITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcGFyZW50UXVlcnkgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9ja1Byb3BlcnR5ITogc3RyaW5nIHwgbnVsbDtcclxuICBwcml2YXRlIGNvbG9yITogc3RyaW5nIHwgbnVsbDtcclxuICBwcml2YXRlIHVuYXNzaWduZWRWaXNpYmxlITogYm9vbGVhbjtcclxuICBwcml2YXRlIHVuYXNzaWduZWROYW1lITogc3RyaW5nIHwgbnVsbDtcclxuICBwcml2YXRlIHVuYXNzaWduZWRMb2NrZWQhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkQ29sb3IhOiBzdHJpbmcgfCBudWxsO1xyXG4gIHByaXZhdGUgdW5hc3NpZ25lZERyYWdnYWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkRHJvcHBhYmxlITogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBpbmFjdGl2ZVZpc2libGUhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgaW5hY3RpdmVEcmFnZ2FibGUhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgaW5hY3RpdmVEcm9wcGFibGUhOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIGNvbHVtblNvcnQ6ICgoY29sdW1uczogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgY2FyZFNvcnQ6ICgoY2FyZHM6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSByZWxhdGVkUGFyZW50TmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIHJlbGF0ZWRDaGlsZE5hbWUhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBpbnNlcnRCZWZvcmU6IGFueTtcclxuICBwcml2YXRlIHNlbGVjdGVkQ2FyZHMgPSBbXTtcclxuICBwcml2YXRlIGNvbHVtbkZpbHRlclJlZnMgPSBbXTtcclxuICBwcml2YXRlIGNhcmRGaWx0ZXJTdHI6IGFueTtcclxuICBwcml2YXRlIHVuaXF1ZUlkITogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xyXG5cclxuICBidXN5TWVzc2FnZTogc3RyaW5nID0gJ1JlbmRlcmluZy4uLic7XHJcbiAgaXNCdXN5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29sdW1uczogYW55ID0gW107XHJcbiAgbG9ja2VkQ29sdW1uczogYW55ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXHJcbiAgICBwcml2YXRlIG1vZGVsVHlwZUxvb2t1cDogVHJ1TW9kZWxUeXBlTG9va3VwLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hWaWV3RXZlbnRIYW5kbGVyOiBUcnVTZWFyY2hWaWV3RXZlbnRIYW5kbGVyKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcmVudFRhYmxlTW9kZWwgPSBudWxsOy8vZGF0YVNlcnZpY2UubW9kZWwudGFibGVzW3BhcmVudFRhYmxlTmFtZV07XHJcbiAgcHJpdmF0ZSB1c2VySGFzUGFyZW50VGFibGVSb2xlID0gbnVsbDsgLy9wYXJlbnRUYWJsZU1vZGVsLmNhbkRpc3BsYXk7XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGF0YUZvckVudGl0eSA9IChlbnRpdHk6IFRydUVudGl0eUJhc2UpID0+IHtcclxuICAgIHZhciBkYXRhID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnJvd0RhdGFFbmhhbmNlcigpO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYXNVbmRlZmluZWRDaGlsZHJlbiA9IChlbnRpdHk6IFRydUVudGl0eUJhc2UpID0+IHtcclxuICAgIHR5cGUgRW50aXR5T2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IGVudGl0eVByb3BlcnR5TmFtZSA9IHRoaXMuY29uZmlnLnBhcmVudFRvQ2hpbGRSZWxhdGlvbnNoaXBOYW1lIGFzIEVudGl0eU9iamVjdEtleTtcclxuICAgIHJldHVybiAhZW50aXR5W2VudGl0eVByb3BlcnR5TmFtZV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0VtcHR5Q2hpbGRyZW4gPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB0eXBlIEVudGl0eU9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICByZXR1cm4gIWVudGl0eVtlbnRpdHlQcm9wZXJ0eU5hbWVdLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5hY3RpdmVDaGlsZHJlbiA9IChlbnRpdHk6IFRydUVudGl0eUJhc2UpID0+IHtcclxuICAgIHR5cGUgRW50aXR5T2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IGVudGl0eVByb3BlcnR5TmFtZSA9IHRoaXMuY29uZmlnLnBhcmVudFRvQ2hpbGRSZWxhdGlvbnNoaXBOYW1lIGFzIEVudGl0eU9iamVjdEtleTtcclxuICAgIHJldHVybiBfLmV2ZXJ5KFtlbnRpdHlQcm9wZXJ0eU5hbWVdLCAoY2hpbGQ6IGFueSkgPT4geyByZXR1cm4gIWNoaWxkLmFjdGl2ZTsgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0FkZGVkVW5zYXZlZENoaWxkcmVuID0gKGVudGl0aWVzOiBBcnJheTxUcnVFbnRpdHlCYXNlPiwgcGFyZW50UmVmOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiBfLnNvbWUoZW50aXRpZXMsIChlbnRpdHk6IFRydUVudGl0eUJhc2UpID0+IHtcclxuICAgICAgdHlwZSBFbnRpdHlPYmplY3RLZXkgPSBrZXlvZiB0eXBlb2YgZW50aXR5O1xyXG4gICAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmtleSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICAgIHJldHVybiBlbnRpdHlbZW50aXR5UHJvcGVydHlOYW1lXSA9PT0gcGFyZW50UmVmXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXIgPSAoKSA9PiB7XHJcbiAgICB2YXIgbG9ja2VkQ29sdW1ucyA9IHRoaXMucG9ydGFsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxvY2tlZC1jb2x1bW5zJylbMF07XHJcbiAgICB2YXIgdW5sb2NrZWRDb2x1bW5zID0gdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudW5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG5cclxuICAgIHdoaWxlIChsb2NrZWRDb2x1bW5zICYmIGxvY2tlZENvbHVtbnMubGFzdENoaWxkKSB7IGxvY2tlZENvbHVtbnMucmVtb3ZlQ2hpbGQobG9ja2VkQ29sdW1ucy5sYXN0Q2hpbGQpOyB9O1xyXG4gICAgd2hpbGUgKHVubG9ja2VkQ29sdW1ucyAmJiB1bmxvY2tlZENvbHVtbnMubGFzdENoaWxkKSB7IHVubG9ja2VkQ29sdW1ucy5yZW1vdmVDaGlsZCh1bmxvY2tlZENvbHVtbnMubGFzdENoaWxkKTsgfVxyXG4gICAgd2hpbGUgKHRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGgpIHsgdGhpcy5zZWxlY3RlZENhcmRzLnBvcCgpOyB9O1xyXG4gICAgLy90aGlzLmNvbmZpZy5vblNlbGVjdGlvbkNoYW5nZWQoW10pO1xyXG4gICAgLy90aGlzLmNvbmZpZy5jbGVhckZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVGcm9tU29ydFBhdGggPSAoYXJnczogW2FueSwgc3RyaW5nW11dKTogYW55ID0+IHtcclxuICAgIGxldCBjdXJyZW50OiBhbnkgPSBhcmdzWzBdO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGFyZ3NbMV0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBhcnROYW1lOiBzdHJpbmc7XHJcbiAgICAgIGlmIChpICE9PSBhcmdzWzFdLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBwYXJ0TmFtZSA9ICdvJyArIGFyZ3NbMV1baV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFydE5hbWUgPSBhcmdzWzFdW2ldO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY3VycmVudFtwYXJ0TmFtZV0pIHtcclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0TmFtZV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdXJyZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVJdGVtc1NvdXJjZShuZXdFbnRpdGllczogQXJyYXk8YW55PiwgcmV2ZXJ0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBpZiAoIXJldmVydClcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB1dWlkdjQoKSwgJzAnKTtcclxuXHJcbiAgICB0aGlzLmNvbHVtbkZpbHRlclJlZnMgPSBbXTtcclxuICAgIHRoaXMuY2FyZEZpbHRlclN0ciA9IG51bGw7XHJcblxyXG4gICAgaWYgKCFuZXdFbnRpdGllcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5sb2NrZWRDb2x1bW5zID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxvY2tlZENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIGxldCBlbXB0eVBhcmVudHM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIGxldCBjb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gICAgbGV0IHF1ZXJ5ID0gbmV3IGJyZWV6ZS5FbnRpdHlRdWVyeSgnUXVlcnknICsgdGhpcy5wYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgbGV0IHBhcmVudFJlZnMgPSBuZXdFbnRpdGllcy5tYXAoKGU6IGFueSkgPT4geyByZXR1cm4gZVt0aGlzLnBhcmVudFRhYmxlTmFtZSArICdSZWYnXTsgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLnF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHRoaXMuY29uZmlnLnF1ZXJ5KHF1ZXJ5LCB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHF1ZXJ5ID0gcXVlcnkuZXhwYW5kKHRoaXMuY29uZmlnLnBhcmVudFRvQ2hpbGRSZWxhdGlvbnNoaXBOYW1lKTtcclxuXHJcbiAgICBsZXQgdW5pcXVlUGFyZW50UmVmcyA9IFsuLi5uZXcgU2V0KHBhcmVudFJlZnMpXVxyXG4gICAgcXVlcnkgPSBxdWVyeS53aGVyZSh0aGlzLnBhcmVudFRhYmxlTmFtZSArICdSZWYnLCAnaW4nLCB1bmlxdWVQYXJlbnRSZWZzKTtcclxuXHJcbiAgICAvL2lmICh0aGlzLnBhcmVudFF1ZXJ5KVxyXG4gICAgLy8gIHF1ZXJ5ID0gcXVlcmllc1t0aGlzLnBhcmVudFF1ZXJ5XShxdWVyeSk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5jdXN0b21TZWFyY2godGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSh0aGlzLnBhcmVudFRhYmxlTmFtZSksIHF1ZXJ5KS5zdWJzY3JpYmUoKHBhcmVudHMpID0+IHtcclxuICAgICAgLy90aGlzLmNvbmZpZy5hZGRQYXJlbnRzVG9GaWx0ZXIocGFyZW50cyk7XHJcblxyXG4gICAgICBlbXB0eVBhcmVudHMgPSBfLmZpbHRlcihwYXJlbnRzLCAocGFyZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzVW5kZWZpbmVkQ2hpbGRyZW4ocGFyZW50KSB8fCB0aGlzLmhhc0VtcHR5Q2hpbGRyZW4ocGFyZW50KSB8fCB0aGlzLmhhc0luYWN0aXZlQ2hpbGRyZW4ocGFyZW50KSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0FkZGVkVW5zYXZlZENoaWxkcmVuKG5ld0VudGl0aWVzLCBwYXJlbnQuUmVmKSkge1xyXG4gICAgICAgICAgICBwYXJlbnRbJ2NhcmRzJ10gPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBxdWVyeWFibGVQYXJlbnRSZWZzID0gXy5wbHVjayhwYXJlbnRzLCB0aGlzLmtleSlcclxuXHJcbiAgICAgIGxldCBpbmFjdGl2ZVdpdGhQYXJlbnQ6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgbGV0IGFjdGl2ZVdpdGhvdXRQYXJlbnQ6IEFycmF5PGFueT4gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdW5hc3NpZ25lZDogdHJ1ZSxcclxuICAgICAgICAgIGNhcmRzOiBbXVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuXHJcbiAgICAgIHBhcmVudHMuZm9yRWFjaCgocGFyZW50OiBhbnkpID0+IHtcclxuICAgICAgICBwYXJlbnRbJ2NhcmRzJ10gPSBbXTtcclxuICAgICAgICBpZiAocXVlcnlhYmxlUGFyZW50UmVmcy5pbmRleE9mKHBhcmVudFt0aGlzLmtleV0pICE9PSAtMSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMubG9ja1Byb3BlcnR5ICE9PSBudWxsICYmIHBhcmVudFt0aGlzLmxvY2tQcm9wZXJ0eV0pIHtcclxuICAgICAgICAgICAgbG9ja2VkQ29sdW1ucy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubG9ja1Byb3BlcnR5ICE9PSBudWxsICYmICFwYXJlbnRbdGhpcy5sb2NrUHJvcGVydHldICYmICFfLmNvbnRhaW5zKGVtcHR5UGFyZW50cywgcGFyZW50KSkge1xyXG4gICAgICAgICAgICBjb2x1bW5zLnB1c2gocGFyZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyZW50WydpbmFjdGl2ZSddID0gdHJ1ZTtcclxuICAgICAgICAgIGluYWN0aXZlV2l0aFBhcmVudC5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG5ld0VudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xyXG4gICAgICAgIHZhciBlbnRpdHlQYXJlbnQgPSBfLmZpbmQocGFyZW50cywgKHApID0+IHtcclxuICAgICAgICAgIGlmIChlbnRpdHlbJ28nICsgdGhpcy5yZWxhdGVkUGFyZW50TmFtZV0pXHJcbiAgICAgICAgICAgIHJldHVybiBwLlJlZiA9PT0gZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdLlJlZjtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGVudGl0eVBhcmVudCkge1xyXG4gICAgICAgICAgaWYgKHF1ZXJ5YWJsZVBhcmVudFJlZnMuaW5kZXhPZihlbnRpdHlQYXJlbnRbdGhpcy5rZXldKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgZW50aXR5UGFyZW50LmNhcmRzLnB1c2godGhpcy5jcmVhdGVEYXRhRm9yRW50aXR5KGVudGl0eSkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZW50aXR5UGFyZW50LmNhcmRzLnB1c2godGhpcy5jcmVhdGVEYXRhRm9yRW50aXR5KGVudGl0eSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAhZW50aXR5UGFyZW50ICYmXHJcbiAgICAgICAgICBlbnRpdHlbJ28nICsgdGhpcy5yZWxhdGVkUGFyZW50TmFtZV0gJiZcclxuICAgICAgICAgIGVudGl0eVsnbycgKyB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lXS5SZWYgPiAwKSB7XHJcbiAgICAgICAgICBsZXQgaW5hY3RpdmVQYXJlbnQgPSBlbnRpdHlbJ28nICsgdGhpcy5yZWxhdGVkUGFyZW50TmFtZV07XHJcbiAgICAgICAgICBpZiAoaW5hY3RpdmVXaXRoUGFyZW50LmluZGV4T2YoaW5hY3RpdmVQYXJlbnQpID09PSAtMSkge1xyXG4gICAgICAgICAgICBpbmFjdGl2ZVBhcmVudFsnY2FyZHMnXSA9IFtdO1xyXG4gICAgICAgICAgICBpbmFjdGl2ZVBhcmVudFsnaW5hY3RpdmUnXSA9IHRydWU7XHJcbiAgICAgICAgICAgIGluYWN0aXZlV2l0aFBhcmVudC5wdXNoKGluYWN0aXZlUGFyZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGluYWN0aXZlUGFyZW50LmNhcmRzLnB1c2godGhpcy5jcmVhdGVEYXRhRm9yRW50aXR5KGVudGl0eSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhY3RpdmVXaXRob3V0UGFyZW50WzBdLmNhcmRzLnB1c2godGhpcy5jcmVhdGVEYXRhRm9yRW50aXR5KGVudGl0eSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb2x1bW5Tb3J0KSB7XHJcbiAgICAgICAgdmFyIGNvbHVtblNvcnRQYXJ0cyA9IFsnJ107IC8vdGhpcy5jb2x1bW5Tb3J0LnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgIGxvY2tlZENvbHVtbnMgPSBfLnNvcnRCeShsb2NrZWRDb2x1bW5zLCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29sdW1ucyA9IF8uc29ydEJ5KGNvbHVtbnMsIChvKSA9PiB7XHJcbiAgICAgICAgICB2YXIgdiA9IHRoaXMuZ2V0VmFsdWVGcm9tU29ydFBhdGgoW28sIGNvbHVtblNvcnRQYXJ0c10pO1xyXG4gICAgICAgICAgaWYgKHYpXHJcbiAgICAgICAgICAgIHJldHVybiBfLmlzU3RyaW5nKHYpID8gdi50cmltKCkgOiB2O1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQgPSBfLnNvcnRCeShpbmFjdGl2ZVdpdGhQYXJlbnQsIChvKSA9PiB7XHJcbiAgICAgICAgICB2YXIgdiA9IHRoaXMuZ2V0VmFsdWVGcm9tU29ydFBhdGgoW28sIGNvbHVtblNvcnRQYXJ0c10pO1xyXG4gICAgICAgICAgaWYgKHYpXHJcbiAgICAgICAgICAgIHJldHVybiBfLmlzU3RyaW5nKHYpID8gdi50cmltKCkgOiB2O1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBlbXB0eVBhcmVudHMgPSBfLnNvcnRCeShlbXB0eVBhcmVudHMsIChvKSA9PiB7XHJcbiAgICAgICAgICB2YXIgdiA9IHRoaXMuZ2V0VmFsdWVGcm9tU29ydFBhdGgoW28sIGNvbHVtblNvcnRQYXJ0c10pO1xyXG4gICAgICAgICAgaWYgKHYpXHJcbiAgICAgICAgICAgIHJldHVybiBfLmlzU3RyaW5nKHYpID8gdi50cmltKCkgOiB2O1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5jYXJkU29ydCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGxvY2tlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICAgIGNvbHVtbi5jYXJkcyA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5jYXJkU29ydChjb2x1bW4uY2FyZHMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYWN0aXZlV2l0aG91dFBhcmVudC5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICAgIGNvbHVtbi5jYXJkcyA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5jYXJkU29ydChjb2x1bW4uY2FyZHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pbmFjdGl2ZVZpc2libGUpXHJcbiAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGluYWN0aXZlV2l0aFBhcmVudCk7XHJcblxyXG4gICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQoZW1wdHlQYXJlbnRzKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnVuYXNzaWduZWRWaXNpYmxlICYmICF0aGlzLnVuYXNzaWduZWRMb2NrZWQpXHJcbiAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGFjdGl2ZVdpdGhvdXRQYXJlbnQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMudW5hc3NpZ25lZFZpc2libGUgJiYgdGhpcy51bmFzc2lnbmVkTG9ja2VkKVxyXG4gICAgICAgIGxvY2tlZENvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChsb2NrZWRDb2x1bW5zKTtcclxuXHJcbiAgICAgIHRoaXMubG9ja2VkQ29sdW1ucyA9IGxvY2tlZENvbHVtbnM7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgbmV3IENhcmRWaWV3KHRoaXMubG9ja2VkQ29sdW1ucywgdGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAgICAgaWYgKHJldmVydCkge1xyXG4gICAgICAgICAgbGV0IGNvbHVtbkVsZW1lbnQgPSB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50cnUtY2FyZC1wb3J0YWwtY29sdW1ucycpWzBdO1xyXG4gICAgICAgICAgbGV0IHByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2Nyb2xsX3Bvc2l0aW9uJyArIHV1aWR2NCgpKTtcclxuICAgICAgICAgIGNvbHVtbkVsZW1lbnQuc2Nyb2xsTGVmdCA9IHByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPyArcHJldmlvdXNTY3JvbGxQb3NpdGlvbiA6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNsYXNzIENhcmRWaWV3IHtcclxuICAgICAgY29uc3RydWN0b3IobG9ja2VkQ29sdW1uczogYW55LCBjb2x1bW5zOiBhbnkpIHtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG8gPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnNlYXJjaFZpZXdFdmVudEhhbmRsZXIub25TZWFyY2goKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25TZWFyY2goc2V0dXBRdWVyeSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VhcmNoID0gKHNldHVwUXVlcnk6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5pc0J1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5idXN5TWVzc2FnZSA9ICdTZWFyY2hpbmcuLi4nO1xyXG4gICAgbGV0IGpvaW5zID0gW107XHJcblxyXG4gICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaChcclxuICAgICAgdGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSh0aGlzLmNoaWxkVGFibGVOYW1lKSxcclxuICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgbnVsbCwgZmFsc2UpKTtcclxuXHJcbiAgICBmb3JrSm9pbihqb2lucykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogcmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1NvdXJjZShyZXN1bHRzWzBdLCBmYWxzZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJ1c3lNZXNzYWdlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudFRhYmxlTmFtZSA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlTmFtZTtcclxuICAgIHRoaXMucGFyZW50VGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVOYW1lID0gdGhpcy5jb25maWcuY2hpbGRUYWJsZU5hbWU7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLmNoaWxkVGFibGVQbHVyYWxMYWJlbDtcclxuICAgIHRoaXMua2V5ID0gdGhpcy5jb25maWcua2V5O1xyXG4gICAgdGhpcy5wYXJlbnRRdWVyeSA9IG51bGxcclxuICAgIHRoaXMubG9ja1Byb3BlcnR5ID0gdGhpcy5jb25maWcubG9ja1Byb3BlcnR5O1xyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29uZmlnLmNvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkVmlzaWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWRWaXNpYmxlO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTmFtZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWROYW1lO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTG9ja2VkID0gdGhpcy5jb25maWcudW5hc3NpZ25lZExvY2tlZDtcclxuICAgIHRoaXMudW5hc3NpZ25lZENvbG9yID0gdGhpcy5jb25maWcudW5hc3NpZ25lZENvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkRHJhZ2dhYmxlID0gdGhpcy5jb25maWcudW5hc3NpZ25lZERyYWdnYWJsZTtcclxuICAgIHRoaXMudW5hc3NpZ25lZERyb3BwYWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWREcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5pbmFjdGl2ZVZpc2libGUgPSB0aGlzLmNvbmZpZy5pbmFjdGl2ZVZpc2libGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJhZ2dhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcmFnZ2FibGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJvcHBhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5Tb3J0ID0gdGhpcy5jb25maWcuY29sdW1uU29ydDtcclxuICAgIHRoaXMuY2FyZFNvcnQgPSB0aGlzLmNvbmZpZy5jYXJkU29ydDtcclxuXHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmtleS5sYXN0SW5kZXhPZih0aGlzLnBhcmVudFRhYmxlTmFtZSk7XHJcbiAgICBsZXQgcHJlZml4ID0gdGhpcy5rZXkuc3Vic3RyaW5nKGluZGV4LCAtMSk7XHJcbiAgICBpZiAocHJlZml4KSB7XHJcbiAgICAgIHRoaXMucmVsYXRlZFBhcmVudE5hbWUgPSBwcmVmaXggKyB0aGlzLnBhcmVudFRhYmxlTmFtZTtcclxuICAgICAgdGhpcy5yZWxhdGVkQ2hpbGROYW1lID0gcHJlZml4ICsgdGhpcy5jaGlsZFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lID0gdGhpcy5wYXJlbnRUYWJsZU5hbWU7XHJcbiAgICAgIHRoaXMucmVsYXRlZENoaWxkTmFtZSA9IHRoaXMuY2hpbGRUYWJsZVBsdXJhbExhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5pcXVlSWQgPSB1dWlkdjQoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG8oKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRydS1jYXJkXCI+XHJcbiAgPGRpdiAqbmdJZj1cImlzQnVzeVwiXHJcbiAgICAgICBjbGFzcz1cInRydS1jYXJkLWJ1c3ktaW5kaWNhdG9yXCI+XHJcbiAgICA8cD5TZWFyY2hpbmcgZm9yIHt7Y29uZmlnLmNoaWxkVGFibGVQbHVyYWxMYWJlbH19Li4uPC9wPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS08dHJ1LXRvb2xiYXIgW2NvbmZpZ109XCJjb25maWcudG9vbGJhckNvbmZpZ1wiIGNsYXNzPVwibWFpbi10b29sYmFyXCI+PC90cnUtdG9vbGJhcj4tLT5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWNhcmQtcG9ydGFsXCIgI2NhcmRQb3J0YWw+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnd2lkdGgnOiAoKGNvbmZpZy53aWR0aCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoKSArICgxMCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoIC0gMSkpICsgJ3B4JyB9XCJcclxuICAgICAgICAgW25nQ2xhc3NdPVwieyd0cnUtY2FyZC1wb3J0YWwtbG9ja2VkLWNvbHVtbnMtZGl2aWRlcic6IGxvY2tlZENvbHVtbnMubGVuZ3RofVwiXHJcbiAgICAgICAgICpuZ0lmPVwibG9ja2VkQ29sdW1ucy5sZW5ndGhcIlxyXG4gICAgICAgICBjbGFzcz1cInRydS1jYXJkLXBvcnRhbC1sb2NrZWQtY29sdW1ucyBsb2NrZWQtY29sdW1uc1wiPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBbbmdTdHlsZV09XCJ7J2xlZnQnOiBsb2NrZWRDb2x1bW5zLmxlbmd0aCA/ICgoY29uZmlnLndpZHRoICogbG9ja2VkQ29sdW1ucy5sZW5ndGgpICsgKDEwICogbG9ja2VkQ29sdW1ucy5sZW5ndGggLSAxKSArIDIyKSArICdweCcgOiAwIH1cIlxyXG4gICAgICAgICBjbGFzcz1cInRydS1jYXJkLXBvcnRhbC1jb2x1bW5zIHVubG9ja2VkLWNvbHVtbnNcIj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
448
|
+
class CardView {
|
|
449
|
+
cardColumn;
|
|
450
|
+
lockedColumns;
|
|
451
|
+
columns;
|
|
452
|
+
lockedColumnsElement;
|
|
453
|
+
unlockedColumnsElement;
|
|
454
|
+
constructor(cardColumn, lockedColumns, columns) {
|
|
455
|
+
this.cardColumn = cardColumn;
|
|
456
|
+
this.lockedColumns = lockedColumns;
|
|
457
|
+
this.columns = columns;
|
|
458
|
+
this.lockedColumnsElement = this.cardColumn.portal.nativeElement.querySelectorAll('.locked-columns')[0];
|
|
459
|
+
this.unlockedColumnsElement = this.cardColumn.portal.nativeElement.querySelectorAll('.unlocked-columns')[0];
|
|
460
|
+
if (lockedColumns && lockedColumns.length)
|
|
461
|
+
this.addColumns(lockedColumns, true);
|
|
462
|
+
if (columns && columns.length)
|
|
463
|
+
this.addColumns(columns, false);
|
|
464
|
+
}
|
|
465
|
+
columnViews = [];
|
|
466
|
+
addColumns = (columnData, locked) => {
|
|
467
|
+
let columnsElement;
|
|
468
|
+
if (locked)
|
|
469
|
+
columnsElement = this.cardColumn.portal.nativeElement.querySelectorAll('.locked-columns')[0];
|
|
470
|
+
else
|
|
471
|
+
columnsElement = this.cardColumn.portal.nativeElement.querySelectorAll('.unlocked-columns')[0];
|
|
472
|
+
let fragment = document.createDocumentFragment();
|
|
473
|
+
for (let i = 0; i < columnData.length; i++) {
|
|
474
|
+
this.columnViews.push(new Column(this.cardColumn, columnData[i], columnsElement, locked, i));
|
|
475
|
+
}
|
|
476
|
+
columnsElement.appendChild(fragment);
|
|
477
|
+
this.cardColumn.busyMessage = '';
|
|
478
|
+
};
|
|
479
|
+
updateColumns = () => {
|
|
480
|
+
if (this.cardColumn.columnFilterRefs && this.cardColumn.columnFilterRefs.length) {
|
|
481
|
+
let filteredColumns;
|
|
482
|
+
for (var i = 0; i < this.columns.length; i++) {
|
|
483
|
+
var column = this.columns[i];
|
|
484
|
+
if (!column.locked && column.data.entityAspect) {
|
|
485
|
+
var found = this.cardColumn.columnFilterRefs.filter(x => x === column.data.Ref).length > 0;
|
|
486
|
+
if (found) {
|
|
487
|
+
column.columnElement.classList.remove('tru-card-portal-column-filtered');
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
column.columnElement.classList.add('tru-card-portal-column-filtered');
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
for (var i = 0; i < this.columns.length; i++) {
|
|
497
|
+
var column = this.columns[i];
|
|
498
|
+
column.columnElement.classList.remove('tru-card-portal-column-filtered');
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
class Column {
|
|
504
|
+
cardColumn;
|
|
505
|
+
data;
|
|
506
|
+
cards = [];
|
|
507
|
+
locked;
|
|
508
|
+
parentElement;
|
|
509
|
+
columnElement;
|
|
510
|
+
cardScrollPortElement;
|
|
511
|
+
selectAllButton;
|
|
512
|
+
constructor(cardColumn, data, parentElement, locked, index) {
|
|
513
|
+
this.cardColumn = cardColumn;
|
|
514
|
+
this.locked = locked;
|
|
515
|
+
this.parentElement = parentElement;
|
|
516
|
+
let columnElement = document.createElement('div');
|
|
517
|
+
columnElement.classList.add('tru-card-portal-column');
|
|
518
|
+
columnElement.id = index.toString();
|
|
519
|
+
if (data.inactive)
|
|
520
|
+
columnElement.classList.add('tru-card-portal-column-inactive');
|
|
521
|
+
columnElement.style.width = this.cardColumn.config.width + 'px';
|
|
522
|
+
this.columnElement = columnElement;
|
|
523
|
+
this.cardScrollPortElement = document.createElement('div');
|
|
524
|
+
this.cardScrollPortElement.classList.add('tru-card-portal-card-scroll-port');
|
|
525
|
+
//this.columnHeader = new ColumnHeader(_this);
|
|
526
|
+
this.columnElement.appendChild(this.cardScrollPortElement);
|
|
527
|
+
this.columnElement.addEventListener('filter-cards', (e) => {
|
|
528
|
+
this.updateDataByFilter();
|
|
529
|
+
});
|
|
530
|
+
this.updateData();
|
|
531
|
+
this.parentElement.appendChild(this.columnElement);
|
|
532
|
+
}
|
|
533
|
+
addCard = (card) => {
|
|
534
|
+
card.data.$entity[this.cardColumn.key] = this.data.Ref;
|
|
535
|
+
this.data.cards.unshift(card.data);
|
|
536
|
+
this.cards.unshift(new Card(this.cardColumn, this, card.data, true));
|
|
537
|
+
};
|
|
538
|
+
addEmptyCard = () => {
|
|
539
|
+
let emptyCards = _.filter(this.cards, function (card) { return !card.data; });
|
|
540
|
+
if (!emptyCards.length)
|
|
541
|
+
this.cards.push(new Card(this.cardColumn, this, null, false));
|
|
542
|
+
this.selectAllButton.style.display = 'none';
|
|
543
|
+
};
|
|
544
|
+
removeEmptyCard = () => {
|
|
545
|
+
var emptyCards = _.filter(this.cards, (card) => { return !card.data; });
|
|
546
|
+
if (emptyCards.length) {
|
|
547
|
+
var emptyCard = emptyCards[0];
|
|
548
|
+
var emptyCardElement = emptyCard.cardContainerElement;
|
|
549
|
+
emptyCardElement.parentNode.removeChild(emptyCardElement);
|
|
550
|
+
var index = this.cards.indexOf(emptyCards[0]);
|
|
551
|
+
if (index !== -1)
|
|
552
|
+
this.cards.splice(index, 1);
|
|
553
|
+
}
|
|
554
|
+
this.selectAllButton.style.display = 'block';
|
|
555
|
+
};
|
|
556
|
+
columnIsVisuallyEmpty = () => {
|
|
557
|
+
return this.cards.every(function (card) {
|
|
558
|
+
return card.cardContainerElement.classList.contains('tru-card-portal-card-filtered');
|
|
559
|
+
});
|
|
560
|
+
};
|
|
561
|
+
removeCard = (card) => {
|
|
562
|
+
card.cardContainerElement.parentNode.removeChild(card.cardContainerElement);
|
|
563
|
+
var index = this.data.cards.indexOf(card.data);
|
|
564
|
+
if (index !== -1)
|
|
565
|
+
this.data.cards.splice(index, 1);
|
|
566
|
+
index = this.cards.indexOf(card);
|
|
567
|
+
if (index !== -1)
|
|
568
|
+
this.cards.splice(index, 1);
|
|
569
|
+
if (!this.cards.length || this.columnIsVisuallyEmpty())
|
|
570
|
+
this.addEmptyCard();
|
|
571
|
+
card = null;
|
|
572
|
+
};
|
|
573
|
+
selectAll = (selectAll) => {
|
|
574
|
+
for (var i = 0; i < this.cards.length; i++)
|
|
575
|
+
this.cards[i].selectAll(selectAll);
|
|
576
|
+
};
|
|
577
|
+
updateDataByFilter = () => {
|
|
578
|
+
let cardFilterStr = this.cardColumn.cardFilterStr;
|
|
579
|
+
if (cardFilterStr) {
|
|
580
|
+
for (var i = 0; i < this.cards.length; i++) {
|
|
581
|
+
var card = this.cards[i];
|
|
582
|
+
if (card.data && card.data.$entity) {
|
|
583
|
+
let filterParts = cardFilterStr.split(/(\s+)/).filter(function (s) { return s.trim().length > 0; });
|
|
584
|
+
let cardFilterResult;
|
|
585
|
+
//if (scope.config.cardId) {
|
|
586
|
+
// cardFilterResult = filterParts.every(function (part) {
|
|
587
|
+
// return scope.config.cardId(card.data.$entity).toLowerCase().indexOf(part) != -1;
|
|
588
|
+
// });
|
|
589
|
+
//} else {
|
|
590
|
+
// cardFilterResult = scope.config.cardFilter(card.data, cardFilterStr)
|
|
591
|
+
//}
|
|
592
|
+
if (cardFilterResult) {
|
|
593
|
+
card.cardContainerElement.classList.remove('tru-card-portal-card-filtered');
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
card.cardContainerElement.classList.add('tru-card-portal-card-filtered');
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
else {
|
|
602
|
+
for (let i = 0; i < this.cards.length; i++) {
|
|
603
|
+
let card = this.cards[i];
|
|
604
|
+
card.cardContainerElement.classList.remove('tru-card-portal-card-filtered');
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
let cardElements = this.columnElement.querySelectorAll('.tru-card-portal-card-container:not(.tru-card-portal-card-filtered):not(.empty)');
|
|
608
|
+
if (cardElements.length) {
|
|
609
|
+
this.removeEmptyCard();
|
|
610
|
+
if (!this.locked) {
|
|
611
|
+
this.parentElement.insertBefore(this.columnElement, this.parentElement.firstChild);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
else {
|
|
615
|
+
this.addEmptyCard();
|
|
616
|
+
}
|
|
617
|
+
};
|
|
618
|
+
updateData = () => {
|
|
619
|
+
this.cardScrollPortElement.innerHTML = '';
|
|
620
|
+
while (this.cards.length) {
|
|
621
|
+
this.cards.pop();
|
|
622
|
+
}
|
|
623
|
+
;
|
|
624
|
+
if (this.data.cards.length) {
|
|
625
|
+
for (let i = 0; i < this.data.cards.length; i++)
|
|
626
|
+
this.cards.push(new Card(this.cardColumn, this, this.data.cards[i], false));
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
this.addEmptyCard();
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
class Card {
|
|
634
|
+
cardColumn;
|
|
635
|
+
cardContainerElement;
|
|
636
|
+
data;
|
|
637
|
+
column;
|
|
638
|
+
cardElement;
|
|
639
|
+
selected = false;
|
|
640
|
+
constructor(cardColumn, column, data, dropped) {
|
|
641
|
+
this.cardColumn = cardColumn;
|
|
642
|
+
this.column = column;
|
|
643
|
+
this.data = data;
|
|
644
|
+
this.cardContainerElement = document.createElement('div');
|
|
645
|
+
this.cardContainerElement.classList.add('tru-card-portal-card-container');
|
|
646
|
+
if (dropped) {
|
|
647
|
+
this.cardContainerElement.classList.add('animated');
|
|
648
|
+
this.cardContainerElement.classList.add('rubberBand');
|
|
649
|
+
}
|
|
650
|
+
this.cardContainerElement.setAttribute('draggable', 'true');
|
|
651
|
+
this.cardContainerElement.setAttribute('droppable', 'true');
|
|
652
|
+
this.cardElement = document.createElement('div');
|
|
653
|
+
this.cardElement.classList.add('tru-card-portal-card');
|
|
654
|
+
if (!this.column.data.unassigned)
|
|
655
|
+
this.cardElement.style.backgroundColor = this.cardColumn.color ? this.cardColumn.color : '#fff';
|
|
656
|
+
else
|
|
657
|
+
this.cardElement.style.backgroundColor = this.cardColumn.unassignedColor ? this.cardColumn.unassignedColor : '#fff';
|
|
658
|
+
if (this.data) {
|
|
659
|
+
this.cardContainerElement.addEventListener('dragstart', (e) => {
|
|
660
|
+
this.cardColumn.dragStart(e, this);
|
|
661
|
+
});
|
|
662
|
+
this.cardContainerElement.addEventListener('dragover', (e) => {
|
|
663
|
+
this.cardColumn.dragOver(e, this);
|
|
664
|
+
});
|
|
665
|
+
this.cardContainerElement.addEventListener('dragend', (e) => {
|
|
666
|
+
this.cardColumn.dragEnd(e);
|
|
667
|
+
});
|
|
668
|
+
this.cardContainerElement.addEventListener('drop', (e) => {
|
|
669
|
+
this.cardColumn.drop(e, this);
|
|
670
|
+
});
|
|
671
|
+
this.cardContainerElement.addEventListener('click', () => {
|
|
672
|
+
this.selected = !this.selected;
|
|
673
|
+
this.cardColumn.updateSelection(this);
|
|
674
|
+
});
|
|
675
|
+
this.cardContainerElement.addEventListener('dblclick', () => {
|
|
676
|
+
//goToDetail(this.data.$entity.Ref);
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
else {
|
|
680
|
+
this.cardContainerElement.addEventListener('dragover', (e) => {
|
|
681
|
+
this.cardColumn.dragOver(e, this);
|
|
682
|
+
});
|
|
683
|
+
this.cardContainerElement.addEventListener('dragend', (e) => {
|
|
684
|
+
this.cardColumn.dragEnd(e);
|
|
685
|
+
});
|
|
686
|
+
this.cardContainerElement.addEventListener('drop', (e) => {
|
|
687
|
+
this.cardColumn.drop(e, this);
|
|
688
|
+
if (!e.defaultPrevented)
|
|
689
|
+
this.column.removeEmptyCard();
|
|
690
|
+
});
|
|
691
|
+
}
|
|
692
|
+
this.updateData();
|
|
693
|
+
this.cardContainerElement.appendChild(this.cardElement);
|
|
694
|
+
if (dropped)
|
|
695
|
+
this.column.cardScrollPortElement.insertBefore(this.cardContainerElement, this.column.cardScrollPortElement.firstChild);
|
|
696
|
+
else
|
|
697
|
+
this.column.cardScrollPortElement.appendChild(this.cardContainerElement);
|
|
698
|
+
}
|
|
699
|
+
selectAll = (selectAll) => {
|
|
700
|
+
this.selected = selectAll;
|
|
701
|
+
this.cardColumn.updateSelection(this);
|
|
702
|
+
};
|
|
703
|
+
updateData = () => {
|
|
704
|
+
this.cardElement.innerHTML = '';
|
|
705
|
+
this.column.removeSelection(this);
|
|
706
|
+
if (this.data) {
|
|
707
|
+
this.selected = false;
|
|
708
|
+
if (false) {
|
|
709
|
+
//scope.config.customCardViewFactory(_this, scope.config);
|
|
710
|
+
}
|
|
711
|
+
else {
|
|
712
|
+
var cardText = document.createElement('p');
|
|
713
|
+
//cardText.innerHTML = this.cardColumn.config.cardId(this.data.$entity);
|
|
714
|
+
this.cardElement.appendChild(cardText);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
else {
|
|
718
|
+
this.cardContainerElement.setAttribute('draggable', 'false');
|
|
719
|
+
this.cardContainerElement.classList.add('empty');
|
|
720
|
+
this.cardElement.classList.add('empty');
|
|
721
|
+
var cardContainerEmptyText = document.createElement('p');
|
|
722
|
+
cardContainerEmptyText.classList.add('exclude-from-filter');
|
|
723
|
+
cardContainerEmptyText.innerHTML = 'Drag items here';
|
|
724
|
+
this.cardElement.appendChild(cardContainerEmptyText);
|
|
725
|
+
}
|
|
726
|
+
};
|
|
727
|
+
}
|
|
728
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNhcmQtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtY29sdW1uL3RydS1jYXJkLWNvbHVtbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWNvbHVtbi90cnUtY2FyZC1jb2x1bW4uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtwQyxPQUFPLEVBQWdCLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVNwRCxNQUFNLE9BQU8sYUFBYTtJQTRDZDtJQUNBO0lBQ0E7SUE3Q0QsTUFBTSxDQUF1QjtJQUM3QixJQUFJLENBQU87SUFFd0IsTUFBTSxDQUFjO0lBRXhELGVBQWUsQ0FBVTtJQUN6QixzQkFBc0IsQ0FBVTtJQUNoQyxjQUFjLENBQVU7SUFDeEIscUJBQXFCLENBQVU7SUFDL0IsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixZQUFZLENBQWlCO0lBRTdCLGlCQUFpQixDQUFXO0lBQzVCLGNBQWMsQ0FBaUI7SUFDL0IsZ0JBQWdCLENBQVU7SUFDMUIsbUJBQW1CLENBQVc7SUFDOUIsbUJBQW1CLENBQVc7SUFFOUIsZUFBZSxDQUFXO0lBQzFCLGlCQUFpQixDQUFXO0lBQzVCLGlCQUFpQixDQUFXO0lBRTVCLFVBQVUsQ0FBc0M7SUFDaEQsUUFBUSxDQUFvQztJQUU1QyxpQkFBaUIsQ0FBVTtJQUMzQixnQkFBZ0IsQ0FBVTtJQUMxQixZQUFZLENBQU07SUFDbEIsUUFBUSxDQUFVO0lBQ2xCLElBQUksR0FBd0IsRUFBRSxDQUFDO0lBRXZDLFdBQVcsR0FBVyxjQUFjLENBQUM7SUFDckMsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLGFBQWEsR0FBUSxFQUFFLENBQUM7SUFDeEIsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLGFBQWEsR0FBa0IsSUFBSSxDQUFDO0lBQ3BDLGFBQWEsR0FBZ0IsRUFBRSxDQUFDO0lBQ2hDLEtBQUssQ0FBaUI7SUFDdEIsZUFBZSxDQUFpQjtJQUNoQyxHQUFHLENBQVU7SUFFYixZQUNVLFdBQTJCLEVBQzNCLGVBQW1DLEVBQ25DLHNCQUFpRDtRQUZqRCxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMkI7SUFDM0QsQ0FBQztJQUVPLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFBLDRDQUE0QztJQUNwRSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsQ0FBQyw4QkFBOEI7SUFFN0QsbUJBQW1CLEdBQUcsQ0FBQyxNQUFxQixFQUFFLEVBQUU7UUFDdEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFTSxvQkFBb0IsR0FBRyxDQUFDLE1BQXFCLEVBQUUsRUFBRTtRQUV2RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQWdELENBQUM7UUFDeEYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQTtJQUVPLGdCQUFnQixHQUFHLENBQUMsTUFBcUIsRUFBRSxFQUFFO1FBRW5ELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBZ0QsQ0FBQztRQUN4RixPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUMsQ0FBQTtJQUVPLG1CQUFtQixHQUFHLENBQUMsTUFBcUIsRUFBRSxFQUFFO1FBRXRELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBZ0QsQ0FBQztRQUN4RixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUMsQ0FBQTtJQUVPLHVCQUF1QixHQUFHLENBQUMsUUFBOEIsRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDdEYsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQXFCLEVBQUUsRUFBRTtZQUVoRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFzQixDQUFDO1lBQ3ZELE9BQU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQUssU0FBUyxDQUFBO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFBO0lBRU8sS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNuQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekYsT0FBTyxhQUFhLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFBQyxDQUFDO1FBQUEsQ0FBQztRQUN6RyxPQUFPLGVBQWUsSUFBSSxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUM7WUFBQyxlQUFlLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUFDLENBQUM7UUFDaEgsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFBQSxDQUFDO1FBQ2hFLHFDQUFxQztRQUNyQyw2QkFBNkI7SUFDL0IsQ0FBQyxDQUFBO0lBRU8sb0JBQW9CLEdBQUcsQ0FBQyxJQUFxQixFQUFPLEVBQUU7UUFDNUQsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEQsSUFBSSxRQUFnQixDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLENBQUM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFBO0lBRU8saUJBQWlCLENBQUMsV0FBdUIsRUFBRSxNQUFlO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxNQUFNO1lBQ1QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLGFBQWEsR0FBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxZQUFZLEdBQWUsRUFBRSxDQUFDO1FBQ2xDLElBQUksT0FBTyxHQUFlLEVBQUUsQ0FBQztRQUU3QixJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRSxJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDbkIsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7O1lBRTVFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUVsRSxJQUFJLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQy9DLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFFLHVCQUF1QjtRQUN2Qiw2Q0FBNkM7UUFFN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVILDBDQUEwQztZQUUxQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMzRyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDckIsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUVwRCxJQUFJLGtCQUFrQixHQUFlLEVBQUUsQ0FBQztZQUN4QyxJQUFJLG1CQUFtQixHQUFlO2dCQUNwQztvQkFDRSxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsS0FBSyxFQUFFLEVBQUU7aUJBQ1Y7YUFDRixDQUFDO1lBRUYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7d0JBQzVELGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzdCLENBQUM7eUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUN6RyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2QixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUMxQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDdEMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDO29CQUM1RCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNqQixJQUFJLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDL0QsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzVELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDNUQsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQ0wsQ0FBQyxZQUFZO29CQUNiLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO29CQUNwQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDN0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDbEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUMxQyxDQUFDO29CQUNELGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7Z0JBRXpELGFBQWEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUM1QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxDQUFDO3dCQUNILE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O3dCQUVwQyxPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUM7d0JBQ0gsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7d0JBRXBDLE9BQU8sSUFBSSxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQztnQkFDSCxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUM7d0JBQ0gsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7d0JBRXBDLE9BQU8sSUFBSSxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQztnQkFDSCxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQzt3QkFDSCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzt3QkFFcEMsT0FBTyxJQUFJLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDL0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUMvQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDekIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxDQUFDLENBQUMsQ0FBQztnQkFFSCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxDQUFDLENBQUMsQ0FBQztnQkFFSCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDckMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlO2dCQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRS9DLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXZDLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbEQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUVoRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqRCxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUV2QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXJELElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUYsSUFBSSxzQkFBc0IsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQ2hGLGFBQWEsQ0FBQyxVQUFVLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEYsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO1lBQ2hHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQTtJQUVPLFFBQVEsR0FBRyxDQUFDLFVBQWUsRUFBRSxFQUFFO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ2xDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVmLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDakQsVUFBVSxFQUNWLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWhCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCxlQUFlLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELGlEQUFpRDtJQUNuRCxDQUFDLENBQUE7SUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFNLEVBQUUsSUFBVSxFQUFFLEVBQUU7UUFDakMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXBCLGtDQUFrQztRQUVsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQzVELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUN6RCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBRW5DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixDQUFDO1FBRUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ3ZDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFDbkMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXhDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNsQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFeEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVoRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQTtJQUVELFFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxJQUFVLEVBQUUsRUFBRTtRQUNoQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRW5CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO1lBQzlELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQzFELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUN6RCxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELE9BQU8sR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVwQixJQUFJLFFBQVEsR0FBOEIsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsSUFBSSxHQUFHLENBQUMsQ0FBTSxFQUFFLElBQVUsRUFBRSxFQUFFO1FBQzVCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVwQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFDcEQsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFBQSxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3pCLDRFQUE0RTtRQUM5RSxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7WUFBQyxDQUFDO1lBQUEsQ0FBQztZQUVoRSxtQ0FBbUM7WUFDbkMsb0JBQW9CO1lBQ3BCLHdFQUF3RTtZQUN4RSxrQ0FBa0M7WUFDbEMsNkVBQTZFO1lBQzdFLG9CQUFvQjtZQUNwQix5QkFBeUI7WUFDekIsb0dBQW9HO1lBQ3BHLHdGQUF3RjtZQUN4Riw0QkFBNEI7WUFDNUIsNkVBQTZFO1lBQzdFLE9BQU87WUFDUCxVQUFVO1lBQ1YsdUJBQXVCO1lBQ3ZCLGtHQUFrRztZQUNsRyxzRkFBc0Y7WUFDdEYsMEJBQTBCO1lBQzFCLEdBQUc7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUE7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUNuRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ2pELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1FBQy9ELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUNuRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUUzRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBRXZELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUVyQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUM5RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7dUdBbmVVLGFBQWE7MkZBQWIsYUFBYSx5TUNqQjFCLHM1QkFtQkE7OzJGREZhLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsaUJBQWlCOzRKQUtsQixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVzQyxNQUFNO3NCQUFqRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O0FBa2U1QyxNQUFNLFFBQVE7SUFLRjtJQUNBO0lBQ0E7SUFORixvQkFBb0IsQ0FBQztJQUNyQixzQkFBc0IsQ0FBQTtJQUU5QixZQUNVLFVBQXlCLEVBQ3pCLGFBQWtCLEVBQ2xCLE9BQVk7UUFGWixlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFLO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQUs7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RyxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsTUFBTTtZQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTTtZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sV0FBVyxHQUFrQixFQUFFLENBQUM7SUFFaEMsVUFBVSxHQUFHLENBQUMsVUFBc0IsRUFBRSxNQUFlLEVBQUUsRUFBRTtRQUMvRCxJQUFJLGNBQThCLENBQUM7UUFDbkMsSUFBSSxNQUFNO1lBQ1IsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3RixjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakcsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ25DLENBQUMsQ0FBQTtJQUVELGFBQWEsR0FBRyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEYsSUFBSSxlQUFlLENBQUM7WUFFcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzdDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQy9DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFFM0YsSUFBSSxLQUFLLEVBQUUsQ0FBQzt3QkFDVixNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztvQkFDM0UsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO29CQUN4RSxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7Q0FDRjtBQUVELE1BQU0sTUFBTTtJQVlBO0lBVkYsSUFBSSxDQUFNO0lBQ1YsS0FBSyxHQUFlLEVBQUUsQ0FBQztJQUN2QixNQUFNLENBQVU7SUFDaEIsYUFBYSxDQUFpQjtJQUM5QixhQUFhLENBQUM7SUFFdEIscUJBQXFCLENBQWlCO0lBQ3RDLGVBQWUsQ0FBcUI7SUFFcEMsWUFDVSxVQUF5QixFQUNqQyxJQUFTLEVBQ1QsYUFBNkIsRUFDN0IsTUFBZSxFQUNmLEtBQWE7UUFKTCxlQUFVLEdBQVYsVUFBVSxDQUFlO1FBTWpDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBRW5DLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0RCxhQUFhLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ2YsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNqRSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBRW5DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFHN0UsOENBQThDO1FBRTlDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQTtJQUVPLFlBQVksR0FBRyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDOUMsQ0FBQyxDQUFBO0lBRU8sZUFBZSxHQUFHLEdBQUcsRUFBRTtRQUM3QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1lBQ3RELGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQy9DLENBQUMsQ0FBQTtJQUVPLHFCQUFxQixHQUFHLEdBQUcsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSTtZQUNwQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFTyxVQUFVLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtRQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUU1RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3BELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV0QixJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFBO0lBRU8sU0FBUyxHQUFHLENBQUMsU0FBa0IsRUFBRSxFQUFFO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFBO0lBRU8sa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ2xELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXpCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQyxJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BHLElBQUksZ0JBQWdCLENBQUM7b0JBQ3JCLDRCQUE0QjtvQkFDNUIsMERBQTBEO29CQUMxRCxzRkFBc0Y7b0JBQ3RGLE9BQU87b0JBQ1AsVUFBVTtvQkFDVix3RUFBd0U7b0JBQ3hFLEdBQUc7b0JBRUgsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNyQixJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO29CQUM5RSxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztvQkFDM0UsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDOUUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDMUksSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELFVBQVUsR0FBRyxHQUFHLEVBQUU7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFBQSxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUMsQ0FBQTtDQUNGO0FBRUQsTUFBTSxJQUFJO0lBVUU7SUFURixvQkFBb0IsQ0FBaUI7SUFDckMsSUFBSSxDQUFDO0lBRWIsTUFBTSxDQUFDO0lBQ1AsV0FBVyxDQUFpQjtJQUM1QixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBR2pCLFlBQ1UsVUFBeUIsRUFDakMsTUFBVyxFQUNYLElBQVMsRUFDVCxPQUFnQjtRQUhSLGVBQVUsR0FBVixVQUFVLENBQWU7UUFLakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUUxRSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7O1lBRWhHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV0SCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQzFELG9DQUFvQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO29CQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4RCxJQUFJLE9BQU87WUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzs7WUFFeEgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELFNBQVMsR0FBRyxDQUFDLFNBQWMsRUFBRSxFQUFFO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQTtJQUVELFVBQVUsR0FBRyxHQUFHLEVBQUU7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWpDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFFdEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDViwwREFBMEQ7WUFDNUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLHdFQUF3RTtnQkFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXhDLElBQUksc0JBQXNCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6RCxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDNUQsc0JBQXNCLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO1lBRXJELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUMsQ0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAndW5kZXJzY29yZSc7XHJcbmltcG9ydCB7IGJyZWV6ZSB9IGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcclxuaW1wb3J0IHsgVHJ1RW50aXR5QmFzZSB9IGZyb20gJy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtZW50aXR5LWJhc2UnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFR5cGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdHlwZS1sb29rdXAnO1xyXG5pbXBvcnQgeyBJVHJ1Q2FyZENvbHVtbkNvbmZpZyB9IGZyb20gJy4vY2xhc3Nlcy90cnUtY2FyZC1jb2x1bW4tY29uZmlnJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgc2tpcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcnVTZWFyY2hWaWV3RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vYmFzZS12aWV3cy9zZWFyY2gvc2VydmljZXMvdHJ1LXNlYXJjaC12aWV3LWV2ZW50LWhhbmRsZXInO1xyXG5pbXBvcnQgeyBIVE1MIH0gZnJvbSAnbmd4LWVkaXRvci9saWIvdHJ1c3RlZFR5cGVzVXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1jYXJkLWNvbHVtbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1jYXJkLWNvbHVtbi5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cnUtY2FyZC1jb2x1bW4uY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydUNhcmRDb2x1bW4ge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IElUcnVDYXJkQ29sdW1uQ29uZmlnXHJcbiAgQElucHV0KCkgbmFtZSE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FyZFBvcnRhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwb3J0YWwhOiBFbGVtZW50UmVmO1xyXG5cclxuICBwcml2YXRlIHBhcmVudFRhYmxlTmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIHBhcmVudFRhYmxlUGx1cmFsTGFiZWwhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBjaGlsZFRhYmxlTmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIGNoaWxkVGFibGVQbHVyYWxMYWJlbCE6IHN0cmluZztcclxuICBwcml2YXRlIHBhcmVudFF1ZXJ5ID0gbnVsbDtcclxuICBwcml2YXRlIGxvY2tQcm9wZXJ0eSE6IHN0cmluZyB8IG51bGw7XHJcbiAgXHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkVmlzaWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkTmFtZSE6IHN0cmluZyB8IG51bGw7XHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkTG9ja2VkITogc3RyaW5nO1xyXG4gIHByaXZhdGUgdW5hc3NpZ25lZERyYWdnYWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkRHJvcHBhYmxlITogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBpbmFjdGl2ZVZpc2libGUhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgaW5hY3RpdmVEcmFnZ2FibGUhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgaW5hY3RpdmVEcm9wcGFibGUhOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIGNvbHVtblNvcnQ6ICgoY29sdW1uczogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgY2FyZFNvcnQ6ICgoY2FyZHM6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSByZWxhdGVkUGFyZW50TmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIHJlbGF0ZWRDaGlsZE5hbWUhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBpbnNlcnRCZWZvcmU6IGFueTtcclxuICBwcml2YXRlIHVuaXF1ZUlkITogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xyXG5cclxuICBidXN5TWVzc2FnZTogc3RyaW5nID0gJ1JlbmRlcmluZy4uLic7XHJcbiAgaXNCdXN5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29sdW1uczogYW55ID0gW107XHJcbiAgbG9ja2VkQ29sdW1uczogYW55ID0gW107XHJcbiAgY29sdW1uRmlsdGVyUmVmcyA9IFtdO1xyXG4gIGNhcmRGaWx0ZXJTdHI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkQ2FyZHM6IEFycmF5PENhcmQ+ID0gW107XHJcbiAgY29sb3IhOiBzdHJpbmcgfCBudWxsO1xyXG4gIHVuYXNzaWduZWRDb2xvciE6IHN0cmluZyB8IG51bGw7XHJcbiAga2V5ITogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxyXG4gICAgcHJpdmF0ZSBtb2RlbFR5cGVMb29rdXA6IFRydU1vZGVsVHlwZUxvb2t1cCxcclxuICAgIHByaXZhdGUgc2VhcmNoVmlld0V2ZW50SGFuZGxlcjogVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlcikge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJlbnRUYWJsZU1vZGVsID0gbnVsbDsvL2RhdGFTZXJ2aWNlLm1vZGVsLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdO1xyXG4gIHByaXZhdGUgdXNlckhhc1BhcmVudFRhYmxlUm9sZSA9IG51bGw7IC8vcGFyZW50VGFibGVNb2RlbC5jYW5EaXNwbGF5O1xyXG5cclxuICBwcml2YXRlIGNyZWF0ZURhdGFGb3JFbnRpdHkgPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB2YXIgZGF0YSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5yb3dEYXRhRW5oYW5jZXIoKTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFzVW5kZWZpbmVkQ2hpbGRyZW4gPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB0eXBlIEVudGl0eU9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICByZXR1cm4gIWVudGl0eVtlbnRpdHlQcm9wZXJ0eU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNFbXB0eUNoaWxkcmVuID0gKGVudGl0eTogVHJ1RW50aXR5QmFzZSkgPT4ge1xyXG4gICAgdHlwZSBFbnRpdHlPYmplY3RLZXkgPSBrZXlvZiB0eXBlb2YgZW50aXR5O1xyXG4gICAgY29uc3QgZW50aXR5UHJvcGVydHlOYW1lID0gdGhpcy5jb25maWcucGFyZW50VG9DaGlsZFJlbGF0aW9uc2hpcE5hbWUgYXMgRW50aXR5T2JqZWN0S2V5O1xyXG4gICAgcmV0dXJuICFlbnRpdHlbZW50aXR5UHJvcGVydHlOYW1lXS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0luYWN0aXZlQ2hpbGRyZW4gPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB0eXBlIEVudGl0eU9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICByZXR1cm4gXy5ldmVyeShbZW50aXR5UHJvcGVydHlOYW1lXSwgKGNoaWxkOiBhbnkpID0+IHsgcmV0dXJuICFjaGlsZC5hY3RpdmU7IH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBZGRlZFVuc2F2ZWRDaGlsZHJlbiA9IChlbnRpdGllczogQXJyYXk8VHJ1RW50aXR5QmFzZT4sIHBhcmVudFJlZjogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gXy5zb21lKGVudGl0aWVzLCAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICAgIHR5cGUgRW50aXR5T2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgICAgY29uc3QgZW50aXR5UHJvcGVydHlOYW1lID0gdGhpcy5rZXkgYXMgRW50aXR5T2JqZWN0S2V5O1xyXG4gICAgICByZXR1cm4gZW50aXR5W2VudGl0eVByb3BlcnR5TmFtZV0gPT09IHBhcmVudFJlZlxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyID0gKCkgPT4ge1xyXG4gICAgdmFyIGxvY2tlZENvbHVtbnMgPSB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG4gICAgdmFyIHVubG9ja2VkQ29sdW1ucyA9IHRoaXMucG9ydGFsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnVubG9ja2VkLWNvbHVtbnMnKVswXTtcclxuXHJcbiAgICB3aGlsZSAobG9ja2VkQ29sdW1ucyAmJiBsb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCkgeyBsb2NrZWRDb2x1bW5zLnJlbW92ZUNoaWxkKGxvY2tlZENvbHVtbnMubGFzdENoaWxkKTsgfTtcclxuICAgIHdoaWxlICh1bmxvY2tlZENvbHVtbnMgJiYgdW5sb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCkgeyB1bmxvY2tlZENvbHVtbnMucmVtb3ZlQ2hpbGQodW5sb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCk7IH1cclxuICAgIHdoaWxlICh0aGlzLnNlbGVjdGVkQ2FyZHMubGVuZ3RoKSB7IHRoaXMuc2VsZWN0ZWRDYXJkcy5wb3AoKTsgfTtcclxuICAgIC8vdGhpcy5jb25maWcub25TZWxlY3Rpb25DaGFuZ2VkKFtdKTtcclxuICAgIC8vdGhpcy5jb25maWcuY2xlYXJGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhbHVlRnJvbVNvcnRQYXRoID0gKGFyZ3M6IFthbnksIHN0cmluZ1tdXSk6IGFueSA9PiB7XHJcbiAgICBsZXQgY3VycmVudDogYW55ID0gYXJnc1swXTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBhcmdzWzFdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYXJ0TmFtZTogc3RyaW5nO1xyXG4gICAgICBpZiAoaSAhPT0gYXJnc1sxXS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgcGFydE5hbWUgPSAnbycgKyBhcmdzWzFdW2ldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcnROYW1lID0gYXJnc1sxXVtpXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGN1cnJlbnRbcGFydE5hbWVdKSB7XHJcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydE5hbWVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlSXRlbXNTb3VyY2UobmV3RW50aXRpZXM6IEFycmF5PGFueT4sIHJldmVydDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKCFyZXZlcnQpXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzY3JvbGxfcG9zaXRpb24nICsgdXVpZHY0KCksICcwJyk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJSZWZzID0gW107XHJcbiAgICB0aGlzLmNhcmRGaWx0ZXJTdHIgPSBudWxsO1xyXG5cclxuICAgIGlmICghbmV3RW50aXRpZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubG9ja2VkQ29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2NrZWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBsZXQgZW1wdHlQYXJlbnRzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBsZXQgY29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICAgIGxldCBxdWVyeSA9IG5ldyBicmVlemUuRW50aXR5UXVlcnkoJ1F1ZXJ5JyArIHRoaXMucGFyZW50VGFibGVOYW1lKTtcclxuICAgIGxldCBwYXJlbnRSZWZzID0gbmV3RW50aXRpZXMubWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIGVbdGhpcy5wYXJlbnRUYWJsZU5hbWUgKyAnUmVmJ107IH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5xdWVyeSlcclxuICAgICAgcXVlcnkgPSB0aGlzLmNvbmZpZy5xdWVyeShxdWVyeSwgdGhpcy5jb25maWcucGFyZW50VG9DaGlsZFJlbGF0aW9uc2hpcE5hbWUpO1xyXG4gICAgZWxzZVxyXG4gICAgICBxdWVyeSA9IHF1ZXJ5LmV4cGFuZCh0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSk7XHJcblxyXG4gICAgbGV0IHVuaXF1ZVBhcmVudFJlZnMgPSBbLi4ubmV3IFNldChwYXJlbnRSZWZzKV1cclxuICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUodGhpcy5wYXJlbnRUYWJsZU5hbWUgKyAnUmVmJywgJ2luJywgdW5pcXVlUGFyZW50UmVmcyk7XHJcblxyXG4gICAgLy9pZiAodGhpcy5wYXJlbnRRdWVyeSlcclxuICAgIC8vICBxdWVyeSA9IHF1ZXJpZXNbdGhpcy5wYXJlbnRRdWVyeV0ocXVlcnkpO1xyXG5cclxuICAgIHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuY3VzdG9tU2VhcmNoKHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUodGhpcy5wYXJlbnRUYWJsZU5hbWUpLCBxdWVyeSkuc3Vic2NyaWJlKChwYXJlbnRzKSA9PiB7XHJcbiAgICAgIC8vdGhpcy5jb25maWcuYWRkUGFyZW50c1RvRmlsdGVyKHBhcmVudHMpO1xyXG5cclxuICAgICAgZW1wdHlQYXJlbnRzID0gXy5maWx0ZXIocGFyZW50cywgKHBhcmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1VuZGVmaW5lZENoaWxkcmVuKHBhcmVudCkgfHwgdGhpcy5oYXNFbXB0eUNoaWxkcmVuKHBhcmVudCkgfHwgdGhpcy5oYXNJbmFjdGl2ZUNoaWxkcmVuKHBhcmVudCkpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5oYXNBZGRlZFVuc2F2ZWRDaGlsZHJlbihuZXdFbnRpdGllcywgcGFyZW50LlJlZikpIHtcclxuICAgICAgICAgICAgcGFyZW50WydjYXJkcyddID0gW107XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgcXVlcnlhYmxlUGFyZW50UmVmcyA9IF8ucGx1Y2socGFyZW50cywgdGhpcy5rZXkpXHJcblxyXG4gICAgICBsZXQgaW5hY3RpdmVXaXRoUGFyZW50OiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgIGxldCBhY3RpdmVXaXRob3V0UGFyZW50OiBBcnJheTxhbnk+ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVuYXNzaWduZWQ6IHRydWUsXHJcbiAgICAgICAgICBjYXJkczogW11cclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcblxyXG4gICAgICBwYXJlbnRzLmZvckVhY2goKHBhcmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgcGFyZW50WydjYXJkcyddID0gW107XHJcbiAgICAgICAgaWYgKHF1ZXJ5YWJsZVBhcmVudFJlZnMuaW5kZXhPZihwYXJlbnRbdGhpcy5rZXldKSAhPT0gLTEpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxvY2tQcm9wZXJ0eSAhPT0gbnVsbCAmJiBwYXJlbnRbdGhpcy5sb2NrUHJvcGVydHldKSB7XHJcbiAgICAgICAgICAgIGxvY2tlZENvbHVtbnMucHVzaChwYXJlbnQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxvY2tQcm9wZXJ0eSA9PT0gbnVsbCB8fCAhcGFyZW50W3RoaXMubG9ja1Byb3BlcnR5XSAmJiAhXy5jb250YWlucyhlbXB0eVBhcmVudHMsIHBhcmVudCkpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmVudFsnaW5hY3RpdmUnXSA9IHRydWU7XHJcbiAgICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBuZXdFbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgICB2YXIgZW50aXR5UGFyZW50ID0gXy5maW5kKHBhcmVudHMsIChwKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdKVxyXG4gICAgICAgICAgICByZXR1cm4gcC5SZWYgPT09IGVudGl0eVsnbycgKyB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lXS5SZWY7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChlbnRpdHlQYXJlbnQpIHtcclxuICAgICAgICAgIGlmIChxdWVyeWFibGVQYXJlbnRSZWZzLmluZGV4T2YoZW50aXR5UGFyZW50W3RoaXMua2V5XSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGVudGl0eVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVudGl0eVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgIWVudGl0eVBhcmVudCAmJlxyXG4gICAgICAgICAgZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdICYmXHJcbiAgICAgICAgICBlbnRpdHlbJ28nICsgdGhpcy5yZWxhdGVkUGFyZW50TmFtZV0uUmVmID4gMCkge1xyXG4gICAgICAgICAgbGV0IGluYWN0aXZlUGFyZW50ID0gZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdO1xyXG4gICAgICAgICAgaWYgKGluYWN0aXZlV2l0aFBhcmVudC5pbmRleE9mKGluYWN0aXZlUGFyZW50KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgaW5hY3RpdmVQYXJlbnRbJ2NhcmRzJ10gPSBbXTtcclxuICAgICAgICAgICAgaW5hY3RpdmVQYXJlbnRbJ2luYWN0aXZlJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQucHVzaChpbmFjdGl2ZVBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbmFjdGl2ZVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWN0aXZlV2l0aG91dFBhcmVudFswXS5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29sdW1uU29ydCkge1xyXG4gICAgICAgIHZhciBjb2x1bW5Tb3J0UGFydHMgPSBbJyddOyAvL3RoaXMuY29sdW1uU29ydC5zcGxpdCgnLycpO1xyXG5cclxuICAgICAgICBsb2NrZWRDb2x1bW5zID0gXy5zb3J0QnkobG9ja2VkQ29sdW1ucywgKG8pID0+IHtcclxuICAgICAgICAgIHZhciB2ID0gdGhpcy5nZXRWYWx1ZUZyb21Tb3J0UGF0aChbbywgY29sdW1uU29ydFBhcnRzXSk7XHJcbiAgICAgICAgICBpZiAodilcclxuICAgICAgICAgICAgcmV0dXJuIF8uaXNTdHJpbmcodikgPyB2LnRyaW0oKSA6IHY7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbHVtbnMgPSBfLnNvcnRCeShjb2x1bW5zLCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW5hY3RpdmVXaXRoUGFyZW50ID0gXy5zb3J0QnkoaW5hY3RpdmVXaXRoUGFyZW50LCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZW1wdHlQYXJlbnRzID0gXy5zb3J0QnkoZW1wdHlQYXJlbnRzLCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuY2FyZFNvcnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBsb2NrZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgY29sdW1uLmNhcmRzID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmNhcmRTb3J0KGNvbHVtbi5jYXJkcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaW5hY3RpdmVXaXRoUGFyZW50LmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgY29sdW1uLmNhcmRzID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmNhcmRTb3J0KGNvbHVtbi5jYXJkcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFjdGl2ZVdpdGhvdXRQYXJlbnQuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuaW5hY3RpdmVWaXNpYmxlKVxyXG4gICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChpbmFjdGl2ZVdpdGhQYXJlbnQpO1xyXG5cclxuICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGVtcHR5UGFyZW50cyk7XHJcblxyXG4gICAgICBpZiAodGhpcy51bmFzc2lnbmVkVmlzaWJsZSAmJiAhdGhpcy51bmFzc2lnbmVkTG9ja2VkKVxyXG4gICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChhY3RpdmVXaXRob3V0UGFyZW50KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnVuYXNzaWduZWRWaXNpYmxlICYmIHRoaXMudW5hc3NpZ25lZExvY2tlZClcclxuICAgICAgICBsb2NrZWRDb2x1bW5zID0gY29sdW1ucy5jb25jYXQobG9ja2VkQ29sdW1ucyk7XHJcblxyXG4gICAgICB0aGlzLmxvY2tlZENvbHVtbnMgPSBsb2NrZWRDb2x1bW5zO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIG5ldyBDYXJkVmlldyh0aGlzLCB0aGlzLmxvY2tlZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgICAgIGlmIChyZXZlcnQpIHtcclxuICAgICAgICAgIGxldCBjb2x1bW5FbGVtZW50ID0gdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNvbHVtbnMnKVswXTtcclxuICAgICAgICAgIGxldCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB1dWlkdjQoKSk7XHJcbiAgICAgICAgICBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQgPSBwcmV2aW91c1Njcm9sbFBvc2l0aW9uID8gK3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24gOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG8gPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnNlYXJjaFZpZXdFdmVudEhhbmRsZXIub25TZWFyY2goKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25TZWFyY2goc2V0dXBRdWVyeSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VhcmNoID0gKHNldHVwUXVlcnk6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5pc0J1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5idXN5TWVzc2FnZSA9ICdTZWFyY2hpbmcuLi4nO1xyXG4gICAgbGV0IGpvaW5zID0gW107XHJcblxyXG4gICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaChcclxuICAgICAgdGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSh0aGlzLmNoaWxkVGFibGVOYW1lKSxcclxuICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgbnVsbCwgZmFsc2UpKTtcclxuXHJcbiAgICBmb3JrSm9pbihqb2lucykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogcmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1NvdXJjZShyZXN1bHRzWzBdLCBmYWxzZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJ1c3lNZXNzYWdlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0aW9uID0gKGNhcmQ6IENhcmQpID0+IHtcclxuICAgIGlmICghY2FyZC5zZWxlY3RlZCkge1xyXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkQ2FyZHMuaW5kZXhPZihjYXJkKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2FyZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgIGNhcmQuY2FyZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtc2VsZWN0ZWQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0ZWRDYXJkcy5pbmRleE9mKGNhcmQpO1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkcy5wdXNoKGNhcmQpO1xyXG5cclxuICAgICAgY2FyZC5jYXJkRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1zZWxlY3RlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vc2NvcGUuY29uZmlnLm9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3RlZENhcmRzKTtcclxuICB9XHJcblxyXG4gIGRyYWdTdGFydCA9IChlOiBhbnksIGNhcmQ6IENhcmQpID0+IHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgLy9zY29wZS5jb25maWcuY2xvc2VTZWFyY2hQYW5lbCgpO1xyXG5cclxuICAgIGlmICgoY2FyZC5jb2x1bW4uZGF0YS51bmFzc2lnbmVkICYmICF0aGlzLnVuYXNzaWduZWREcmFnZ2FibGUpIHx8XHJcbiAgICAgIChjYXJkLmNvbHVtbi5kYXRhLmluYWN0aXZlICYmICF0aGlzLmluYWN0aXZlRHJhZ2dhYmxlKSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xyXG5cclxuICAgIGlmICghY2FyZC5zZWxlY3RlZCkge1xyXG4gICAgICBjYXJkLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oY2FyZClcclxuICAgIH0gICBcclxuXHJcbiAgICBsZXQgY2xvbmVkTm9kZSA9IGUudGFyZ2V0LmNsb25lTm9kZSh0cnVlKTtcclxuICAgIGNsb25lZE5vZGUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLmxlZnQgPSBcIi0xMDAwMHB4XCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG4gICAgY2xvbmVkTm9kZS5jbGFzc0xpc3QuYWRkKCdjbG9uZWQtY2FyZCcpO1xyXG5cclxuICAgIHZhciBpbm5lciA9IGNsb25lZE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRydS1jYXJkLXBvcnRhbC1jYXJkXCIpWzBdO1xyXG4gICAgaW5uZXIuc3R5bGUudHJhbnNmb3JtID0gXCJyb3RhdGUoLTEwZGVnKVwiO1xyXG4gICAgaW5uZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgaW5uZXIuc3R5bGUuekluZGV4ID0gMTA7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTtcclxuICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShjbG9uZWROb2RlLCA1MCwgNTApO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZHJhZ092ZXIgPSAoZTogYW55LCBjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndHJ1LWNhcmQtcG9ydGFsLWNhcmQtY29udGFpbmVyJykgfHxcclxuICAgICAgKGNhcmQuY29sdW1uLmRhdGEudW5hc3NpZ25lZCAmJiAhdGhpcy51bmFzc2lnbmVkRHJvcHBhYmxlKSB8fFxyXG4gICAgICAoY2FyZC5jb2x1bW4uZGF0YS5pbmFjdGl2ZSAmJiAhdGhpcy5pbmFjdGl2ZURyb3BwYWJsZSkpIHtcclxuICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnRW5kID0gKGU6IGFueSkgPT4ge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBsZXQgZWxlbWVudHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbG9uZWQtY2FyZCcpO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZWxlbWVudHNbMF0ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoZWxlbWVudHNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHJ1LWNhcmQtcGxhY2Vob2xkZXInKTtcclxuICAgIHdoaWxlIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGVsZW1lbnRzWzBdLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGVsZW1lbnRzWzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3AgPSAoZTogYW55LCBjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnNlbGVjdGVkQ2FyZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcclxuICAgICAgbGV0IGluZGV4ID0gY2FyZC5jb2x1bW4uY2FyZHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkQ2FyZHNbaV0pO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkc1tpXS51cGRhdGVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcmQuY29sdW1uLmRhdGEudW5hc3NpZ25lZCAmJiAhdGhpcy51bmFzc2lnbmVkRHJvcHBhYmxlIHx8XHJcbiAgICAgIGNhcmQuY29sdW1uLmRhdGEuaW5hY3RpdmUgJiYgIXRoaXMuaW5hY3RpdmVEcm9wcGFibGUgfHxcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGgpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICAvL3RoaXMuY29uZmlnLm9uRHJvcChjYXJkLCB0aGlzLnNlbGVjdGVkQ2FyZHMsIHRoaXMuY29uZmlnLCB0aGlzLnBvcnRhbCwgZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNhcmQuY29sdW1uLmFkZENhcmQodGhpcy5zZWxlY3RlZENhcmRzW2ldKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkc1tpXS5jb2x1bW4ucmVtb3ZlQ2FyZCh0aGlzLnNlbGVjdGVkQ2FyZHNbaV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3aGlsZSAodGhpcy5zZWxlY3RlZENhcmRzLmxlbmd0aCkgeyB0aGlzLnNlbGVjdGVkQ2FyZHMucG9wKCk7IH07XHJcbiAgICAgIFxyXG4gICAgICAvL2xldCBzYXZlUHJvbWlzZSA9IC5jb25maWcuc2F2ZSgpO1xyXG4gICAgICAvL2lmIChzYXZlUHJvbWlzZSkge1xyXG4gICAgICAvLyAgdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtZGlzYWJsZWQnKTtcclxuICAgICAgLy8gIGF3YWl0IHNhdmVQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyAgICB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RydS1jYXJkLXBvcnRhbC1kaXNhYmxlZCcpO1xyXG4gICAgICAvLyAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAvLyAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIC8vICAgIHZhciBjb2x1bW5FbGVtZW50ID0gdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNvbHVtbnMnKVswXTtcclxuICAgICAgLy8gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB0aGlzLnVuaXF1ZUlkLCBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICAvLyAgICBzY29wZS5jb25maWcucmV2ZXJ0KCk7XHJcbiAgICAgIC8vICAgIHRoaXMucG9ydGFsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtcG9ydGFsLWRpc2FibGVkJyk7XHJcbiAgICAgIC8vICB9KTtcclxuICAgICAgLy99IGVsc2Uge1xyXG4gICAgICAvLyAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAvLyAgdmFyIGNvbHVtbkVsZW1lbnQgPSB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50cnUtY2FyZC1wb3J0YWwtY29sdW1ucycpWzBdO1xyXG4gICAgICAvLyAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB0aGlzLnVuaXF1ZUlkLCBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICAvLyAgc2NvcGUuY29uZmlnLnJldmVydCgpO1xyXG4gICAgICAvL31cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudFRhYmxlTmFtZSA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlTmFtZTtcclxuICAgIHRoaXMucGFyZW50VGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVOYW1lID0gdGhpcy5jb25maWcuY2hpbGRUYWJsZU5hbWU7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLmNoaWxkVGFibGVQbHVyYWxMYWJlbDtcclxuICAgIHRoaXMua2V5ID0gdGhpcy5jb25maWcua2V5O1xyXG4gICAgdGhpcy5wYXJlbnRRdWVyeSA9IG51bGxcclxuICAgIHRoaXMubG9ja1Byb3BlcnR5ID0gdGhpcy5jb25maWcubG9ja1Byb3BlcnR5O1xyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29uZmlnLmNvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkVmlzaWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWRWaXNpYmxlO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTmFtZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWROYW1lO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTG9ja2VkID0gdGhpcy5jb25maWcudW5hc3NpZ25lZExvY2tlZDtcclxuICAgIHRoaXMudW5hc3NpZ25lZENvbG9yID0gdGhpcy5jb25maWcudW5hc3NpZ25lZENvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkRHJhZ2dhYmxlID0gdGhpcy5jb25maWcudW5hc3NpZ25lZERyYWdnYWJsZTtcclxuICAgIHRoaXMudW5hc3NpZ25lZERyb3BwYWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWREcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5pbmFjdGl2ZVZpc2libGUgPSB0aGlzLmNvbmZpZy5pbmFjdGl2ZVZpc2libGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJhZ2dhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcmFnZ2FibGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJvcHBhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5Tb3J0ID0gdGhpcy5jb25maWcuY29sdW1uU29ydDtcclxuICAgIHRoaXMuY2FyZFNvcnQgPSB0aGlzLmNvbmZpZy5jYXJkU29ydDtcclxuXHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmtleS5sYXN0SW5kZXhPZih0aGlzLnBhcmVudFRhYmxlTmFtZSk7XHJcbiAgICBsZXQgcHJlZml4ID0gdGhpcy5rZXkuc3Vic3RyaW5nKGluZGV4LCAtMSk7XHJcbiAgICBpZiAocHJlZml4KSB7XHJcbiAgICAgIHRoaXMucmVsYXRlZFBhcmVudE5hbWUgPSBwcmVmaXggKyB0aGlzLnBhcmVudFRhYmxlTmFtZTtcclxuICAgICAgdGhpcy5yZWxhdGVkQ2hpbGROYW1lID0gcHJlZml4ICsgdGhpcy5jaGlsZFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lID0gdGhpcy5wYXJlbnRUYWJsZU5hbWU7XHJcbiAgICAgIHRoaXMucmVsYXRlZENoaWxkTmFtZSA9IHRoaXMuY2hpbGRUYWJsZVBsdXJhbExhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5pcXVlSWQgPSB1dWlkdjQoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG8oKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENhcmRWaWV3IHtcclxuICBwcml2YXRlIGxvY2tlZENvbHVtbnNFbGVtZW50O1xyXG4gIHByaXZhdGUgdW5sb2NrZWRDb2x1bW5zRWxlbWVudFxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FyZENvbHVtbjogVHJ1Q2FyZENvbHVtbixcclxuICAgIHByaXZhdGUgbG9ja2VkQ29sdW1uczogYW55LFxyXG4gICAgcHJpdmF0ZSBjb2x1bW5zOiBhbnkpIHtcclxuICAgIHRoaXMubG9ja2VkQ29sdW1uc0VsZW1lbnQgPSB0aGlzLmNhcmRDb2x1bW4ucG9ydGFsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxvY2tlZC1jb2x1bW5zJylbMF07XHJcbiAgICB0aGlzLnVubG9ja2VkQ29sdW1uc0VsZW1lbnQgPSB0aGlzLmNhcmRDb2x1bW4ucG9ydGFsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnVubG9ja2VkLWNvbHVtbnMnKVswXTtcclxuXHJcbiAgICBpZiAobG9ja2VkQ29sdW1ucyAmJiBsb2NrZWRDb2x1bW5zLmxlbmd0aClcclxuICAgICAgdGhpcy5hZGRDb2x1bW5zKGxvY2tlZENvbHVtbnMsIHRydWUpO1xyXG5cclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoKVxyXG4gICAgICB0aGlzLmFkZENvbHVtbnMoY29sdW1ucywgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2x1bW5WaWV3czogQXJyYXk8Q29sdW1uPiA9IFtdO1xyXG5cclxuICBwcml2YXRlIGFkZENvbHVtbnMgPSAoY29sdW1uRGF0YTogQXJyYXk8YW55PiwgbG9ja2VkOiBib29sZWFuKSA9PiB7XHJcbiAgICBsZXQgY29sdW1uc0VsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gICAgaWYgKGxvY2tlZClcclxuICAgICAgY29sdW1uc0VsZW1lbnQgPSB0aGlzLmNhcmRDb2x1bW4ucG9ydGFsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxvY2tlZC1jb2x1bW5zJylbMF07XHJcbiAgICBlbHNlXHJcbiAgICAgIGNvbHVtbnNFbGVtZW50ID0gdGhpcy5jYXJkQ29sdW1uLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy51bmxvY2tlZC1jb2x1bW5zJylbMF07XHJcblxyXG4gICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNvbHVtblZpZXdzLnB1c2gobmV3IENvbHVtbih0aGlzLmNhcmRDb2x1bW4sIGNvbHVtbkRhdGFbaV0sIGNvbHVtbnNFbGVtZW50LCBsb2NrZWQsIGkpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb2x1bW5zRWxlbWVudC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5jYXJkQ29sdW1uLmJ1c3lNZXNzYWdlID0gJyc7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb2x1bW5zID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuY2FyZENvbHVtbi5jb2x1bW5GaWx0ZXJSZWZzICYmIHRoaXMuY2FyZENvbHVtbi5jb2x1bW5GaWx0ZXJSZWZzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgZmlsdGVyZWRDb2x1bW5zO1xyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zW2ldO1xyXG5cclxuICAgICAgICBpZiAoIWNvbHVtbi5sb2NrZWQgJiYgY29sdW1uLmRhdGEuZW50aXR5QXNwZWN0KSB7XHJcbiAgICAgICAgICB2YXIgZm91bmQgPSB0aGlzLmNhcmRDb2x1bW4uY29sdW1uRmlsdGVyUmVmcy5maWx0ZXIoeCA9PiB4ID09PSBjb2x1bW4uZGF0YS5SZWYpLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5jb2x1bW5FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RydS1jYXJkLXBvcnRhbC1jb2x1bW4tZmlsdGVyZWQnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5jb2x1bW5FbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jb2x1bW4tZmlsdGVyZWQnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcclxuICAgICAgICBjb2x1bW4uY29sdW1uRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWZpbHRlcmVkJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbHVtbiB7XHJcblxyXG4gIHByaXZhdGUgZGF0YTogYW55O1xyXG4gIHByaXZhdGUgY2FyZHM6IEFycmF5PGFueT4gPSBbXTtcclxuICBwcml2YXRlIGxvY2tlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIHBhcmVudEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gIHByaXZhdGUgY29sdW1uRWxlbWVudDtcclxuXHJcbiAgY2FyZFNjcm9sbFBvcnRFbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcclxuICBzZWxlY3RBbGxCdXR0b24hOiBIVE1MQW5jaG9yRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcmRDb2x1bW46IFRydUNhcmRDb2x1bW4sXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBwYXJlbnRFbGVtZW50OiBIVE1MRGl2RWxlbWVudCxcclxuICAgIGxvY2tlZDogYm9vbGVhbixcclxuICAgIGluZGV4OiBudW1iZXIpIHtcclxuXHJcbiAgICB0aGlzLmxvY2tlZCA9IGxvY2tlZDtcclxuICAgIHRoaXMucGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGNvbHVtbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGNvbHVtbkVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHJ1LWNhcmQtcG9ydGFsLWNvbHVtbicpO1xyXG4gICAgY29sdW1uRWxlbWVudC5pZCA9IGluZGV4LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKGRhdGEuaW5hY3RpdmUpXHJcbiAgICAgIGNvbHVtbkVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHJ1LWNhcmQtcG9ydGFsLWNvbHVtbi1pbmFjdGl2ZScpO1xyXG4gICAgY29sdW1uRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuY2FyZENvbHVtbi5jb25maWcud2lkdGggKyAncHgnO1xyXG4gICAgdGhpcy5jb2x1bW5FbGVtZW50ID0gY29sdW1uRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmNhcmRTY3JvbGxQb3J0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGhpcy5jYXJkU2Nyb2xsUG9ydEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHJ1LWNhcmQtcG9ydGFsLWNhcmQtc2Nyb2xsLXBvcnQnKTtcclxuXHJcblxyXG4gICAgLy90aGlzLmNvbHVtbkhlYWRlciA9IG5ldyBDb2x1bW5IZWFkZXIoX3RoaXMpO1xyXG5cclxuICAgIHRoaXMuY29sdW1uRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhcmRTY3JvbGxQb3J0RWxlbWVudCk7XHJcbiAgICB0aGlzLmNvbHVtbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZmlsdGVyLWNhcmRzJywgKGUpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVEYXRhQnlGaWx0ZXIoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIHRoaXMucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbHVtbkVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FyZCA9IChjYXJkOiBhbnkpID0+IHtcclxuICAgIGNhcmQuZGF0YS4kZW50aXR5W3RoaXMuY2FyZENvbHVtbi5rZXldID0gdGhpcy5kYXRhLlJlZjtcclxuICAgIHRoaXMuZGF0YS5jYXJkcy51bnNoaWZ0KGNhcmQuZGF0YSk7XHJcbiAgICB0aGlzLmNhcmRzLnVuc2hpZnQobmV3IENhcmQodGhpcy5jYXJkQ29sdW1uLCB0aGlzLCBjYXJkLmRhdGEsIHRydWUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRW1wdHlDYXJkID0gKCkgPT4ge1xyXG4gICAgbGV0IGVtcHR5Q2FyZHMgPSBfLmZpbHRlcih0aGlzLmNhcmRzLCBmdW5jdGlvbiAoY2FyZCkgeyByZXR1cm4gIWNhcmQuZGF0YSB9KTtcclxuICAgIGlmICghZW1wdHlDYXJkcy5sZW5ndGgpXHJcbiAgICAgIHRoaXMuY2FyZHMucHVzaChuZXcgQ2FyZCh0aGlzLmNhcmRDb2x1bW4sIHRoaXMsIG51bGwsIGZhbHNlKSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RBbGxCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRW1wdHlDYXJkID0gKCkgPT4ge1xyXG4gICAgdmFyIGVtcHR5Q2FyZHMgPSBfLmZpbHRlcih0aGlzLmNhcmRzLCAoY2FyZCkgPT4geyByZXR1cm4gIWNhcmQuZGF0YSB9KTtcclxuICAgIGlmIChlbXB0eUNhcmRzLmxlbmd0aCkge1xyXG4gICAgICB2YXIgZW1wdHlDYXJkID0gZW1wdHlDYXJkc1swXTtcclxuICAgICAgdmFyIGVtcHR5Q2FyZEVsZW1lbnQgPSBlbXB0eUNhcmQuY2FyZENvbnRhaW5lckVsZW1lbnQ7XHJcbiAgICAgIGVtcHR5Q2FyZEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbXB0eUNhcmRFbGVtZW50KTtcclxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5jYXJkcy5pbmRleE9mKGVtcHR5Q2FyZHNbMF0pO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICAgIHRoaXMuY2FyZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdEFsbEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29sdW1uSXNWaXN1YWxseUVtcHR5ID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FyZHMuZXZlcnkoZnVuY3Rpb24gKGNhcmQpIHtcclxuICAgICAgcmV0dXJuIGNhcmQuY2FyZENvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0cnUtY2FyZC1wb3J0YWwtY2FyZC1maWx0ZXJlZCcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUNhcmQgPSAoY2FyZDogYW55KSA9PiB7XHJcbiAgICBjYXJkLmNhcmRDb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudCk7XHJcblxyXG4gICAgdmFyIGluZGV4ID0gdGhpcy5kYXRhLmNhcmRzLmluZGV4T2YoY2FyZC5kYXRhKTtcclxuICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgIHRoaXMuZGF0YS5jYXJkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaW5kZXggPSB0aGlzLmNhcmRzLmluZGV4T2YoY2FyZCk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICB0aGlzLmNhcmRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBpZiAoIXRoaXMuY2FyZHMubGVuZ3RoIHx8IHRoaXMuY29sdW1uSXNWaXN1YWxseUVtcHR5KCkpXHJcbiAgICAgIHRoaXMuYWRkRW1wdHlDYXJkKCk7XHJcblxyXG4gICAgY2FyZCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdEFsbCA9IChzZWxlY3RBbGw6IGJvb2xlYW4pID0+IHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYXJkcy5sZW5ndGg7IGkrKylcclxuICAgICAgdGhpcy5jYXJkc1tpXS5zZWxlY3RBbGwoc2VsZWN0QWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGF0YUJ5RmlsdGVyID0gKCkgPT4ge1xyXG4gICAgbGV0IGNhcmRGaWx0ZXJTdHIgPSB0aGlzLmNhcmRDb2x1bW4uY2FyZEZpbHRlclN0cjtcclxuICAgIGlmIChjYXJkRmlsdGVyU3RyKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYXJkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjYXJkID0gdGhpcy5jYXJkc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGNhcmQuZGF0YSAmJiBjYXJkLmRhdGEuJGVudGl0eSkge1xyXG4gICAgICAgICAgbGV0IGZpbHRlclBhcnRzID0gY2FyZEZpbHRlclN0ci5zcGxpdCgvKFxccyspLykuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnRyaW0oKS5sZW5ndGggPiAwOyB9KTtcclxuICAgICAgICAgIGxldCBjYXJkRmlsdGVyUmVzdWx0O1xyXG4gICAgICAgICAgLy9pZiAoc2NvcGUuY29uZmlnLmNhcmRJZCkge1xyXG4gICAgICAgICAgLy8gIGNhcmRGaWx0ZXJSZXN1bHQgPSBmaWx0ZXJQYXJ0cy5ldmVyeShmdW5jdGlvbiAocGFydCkge1xyXG4gICAgICAgICAgLy8gICAgcmV0dXJuIHNjb3BlLmNvbmZpZy5jYXJkSWQoY2FyZC5kYXRhLiRlbnRpdHkpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihwYXJ0KSAhPSAtMTtcclxuICAgICAgICAgIC8vICB9KTtcclxuICAgICAgICAgIC8vfSBlbHNlIHtcclxuICAgICAgICAgIC8vICBjYXJkRmlsdGVyUmVzdWx0ID0gc2NvcGUuY29uZmlnLmNhcmRGaWx0ZXIoY2FyZC5kYXRhLCBjYXJkRmlsdGVyU3RyKVxyXG4gICAgICAgICAgLy99XHJcblxyXG4gICAgICAgICAgaWYgKGNhcmRGaWx0ZXJSZXN1bHQpIHtcclxuICAgICAgICAgICAgY2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd0cnUtY2FyZC1wb3J0YWwtY2FyZC1maWx0ZXJlZCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY2FyZC1maWx0ZXJlZCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNhcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGNhcmQgPSB0aGlzLmNhcmRzW2ldO1xyXG4gICAgICAgIGNhcmQuY2FyZENvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtcG9ydGFsLWNhcmQtZmlsdGVyZWQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjYXJkRWxlbWVudHMgPSB0aGlzLmNvbHVtbkVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRydS1jYXJkLXBvcnRhbC1jYXJkLWNvbnRhaW5lcjpub3QoLnRydS1jYXJkLXBvcnRhbC1jYXJkLWZpbHRlcmVkKTpub3QoLmVtcHR5KScpO1xyXG4gICAgaWYgKGNhcmRFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZW1vdmVFbXB0eUNhcmQoKTtcclxuICAgICAgaWYgKCF0aGlzLmxvY2tlZCkge1xyXG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5jb2x1bW5FbGVtZW50LCB0aGlzLnBhcmVudEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkRW1wdHlDYXJkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jYXJkU2Nyb2xsUG9ydEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuY2FyZHMubGVuZ3RoKSB7IHRoaXMuY2FyZHMucG9wKCk7IH07XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5jYXJkcy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEuY2FyZHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgdGhpcy5jYXJkcy5wdXNoKG5ldyBDYXJkKHRoaXMuY2FyZENvbHVtbiwgdGhpcywgdGhpcy5kYXRhLmNhcmRzW2ldLCBmYWxzZSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRFbXB0eUNhcmQoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENhcmQge1xyXG4gIHByaXZhdGUgY2FyZENvbnRhaW5lckVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gIHByaXZhdGUgZGF0YTtcclxuXHJcbiAgY29sdW1uO1xyXG4gIGNhcmRFbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcclxuICBzZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcmRDb2x1bW46IFRydUNhcmRDb2x1bW4sXHJcbiAgICBjb2x1bW46IGFueSxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRyb3BwZWQ6IGJvb2xlYW4pIHtcclxuXHJcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcclxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY2FyZC1jb250YWluZXInKTtcclxuXHJcbiAgICBpZiAoZHJvcHBlZCkge1xyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FuaW1hdGVkJyk7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgncnViYmVyQmFuZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCdkcmFnZ2FibGUnLCAndHJ1ZScpO1xyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Ryb3BwYWJsZScsICd0cnVlJyk7XHJcblxyXG4gICAgdGhpcy5jYXJkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGhpcy5jYXJkRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY2FyZCcpO1xyXG5cclxuICAgIGlmICghdGhpcy5jb2x1bW4uZGF0YS51bmFzc2lnbmVkKVxyXG4gICAgICB0aGlzLmNhcmRFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY2FyZENvbHVtbi5jb2xvciA/IHRoaXMuY2FyZENvbHVtbi5jb2xvciA6ICcjZmZmJztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jYXJkRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNhcmRDb2x1bW4udW5hc3NpZ25lZENvbG9yID8gdGhpcy5jYXJkQ29sdW1uLnVuYXNzaWduZWRDb2xvciA6ICcjZmZmJztcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgKGUpID0+IHtcclxuICAgICAgICB0aGlzLmNhcmRDb2x1bW4uZHJhZ1N0YXJ0KGUsIHRoaXMpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnT3ZlcihlLCB0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnRW5kKGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLmRyb3AoZSwgdGhpcyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLnVwZGF0ZVNlbGVjdGlvbih0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIC8vZ29Ub0RldGFpbCh0aGlzLmRhdGEuJGVudGl0eS5SZWYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnT3ZlcihlLCB0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnRW5kKGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLmRyb3AoZSwgdGhpcyk7XHJcbiAgICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpXHJcbiAgICAgICAgICB0aGlzLmNvbHVtbi5yZW1vdmVFbXB0eUNhcmQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhcmRFbGVtZW50KTtcclxuXHJcbiAgICBpZiAoZHJvcHBlZClcclxuICAgICAgdGhpcy5jb2x1bW4uY2FyZFNjcm9sbFBvcnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LCB0aGlzLmNvbHVtbi5jYXJkU2Nyb2xsUG9ydEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY29sdW1uLmNhcmRTY3JvbGxQb3J0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhcmRDb250YWluZXJFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbCA9IChzZWxlY3RBbGw6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdEFsbDtcclxuICAgIHRoaXMuY2FyZENvbHVtbi51cGRhdGVTZWxlY3Rpb24odGhpcyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jYXJkRWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuICAgIHRoaXMuY29sdW1uLnJlbW92ZVNlbGVjdGlvbih0aGlzKVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKGZhbHNlKSB7XHJcbiAgICAgICAgLy9zY29wZS5jb25maWcuY3VzdG9tQ2FyZFZpZXdGYWN0b3J5KF90aGlzLCBzY29wZS5jb25maWcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBjYXJkVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcclxuICAgICAgICAvL2NhcmRUZXh0LmlubmVySFRNTCA9IHRoaXMuY2FyZENvbHVtbi5jb25maWcuY2FyZElkKHRoaXMuZGF0YS4kZW50aXR5KTtcclxuICAgICAgICB0aGlzLmNhcmRFbGVtZW50LmFwcGVuZENoaWxkKGNhcmRUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RyYWdnYWJsZScsICdmYWxzZScpO1xyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2VtcHR5Jyk7XHJcbiAgICAgIHRoaXMuY2FyZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcclxuXHJcbiAgICAgIHZhciBjYXJkQ29udGFpbmVyRW1wdHlUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgICBjYXJkQ29udGFpbmVyRW1wdHlUZXh0LmNsYXNzTGlzdC5hZGQoJ2V4Y2x1ZGUtZnJvbS1maWx0ZXInKTtcclxuICAgICAgY2FyZENvbnRhaW5lckVtcHR5VGV4dC5pbm5lckhUTUwgPSAnRHJhZyBpdGVtcyBoZXJlJztcclxuXHJcbiAgICAgIHRoaXMuY2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FyZENvbnRhaW5lckVtcHR5VGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0cnUtY2FyZFwiPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0J1c3lcIlxyXG4gICAgICAgY2xhc3M9XCJ0cnUtY2FyZC1idXN5LWluZGljYXRvclwiPlxyXG4gICAgPHA+U2VhcmNoaW5nIGZvciB7e2NvbmZpZy5jaGlsZFRhYmxlUGx1cmFsTGFiZWx9fS4uLjwvcD5cclxuICA8L2Rpdj5cclxuICA8IS0tPHRydS10b29sYmFyIFtjb25maWddPVwiY29uZmlnLnRvb2xiYXJDb25maWdcIiBjbGFzcz1cIm1haW4tdG9vbGJhclwiPjwvdHJ1LXRvb2xiYXI+LS0+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1jYXJkLXBvcnRhbFwiICNjYXJkUG9ydGFsPlxyXG4gICAgPGRpdiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogKChjb25maWcud2lkdGggKiBsb2NrZWRDb2x1bW5zLmxlbmd0aCkgKyAoMTAgKiBsb2NrZWRDb2x1bW5zLmxlbmd0aCAtIDEpKSArICdweCcgfVwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cInsndHJ1LWNhcmQtcG9ydGFsLWxvY2tlZC1jb2x1bW5zLWRpdmlkZXInOiBsb2NrZWRDb2x1bW5zLmxlbmd0aH1cIlxyXG4gICAgICAgICAqbmdJZj1cImxvY2tlZENvbHVtbnMubGVuZ3RoXCJcclxuICAgICAgICAgY2xhc3M9XCJ0cnUtY2FyZC1wb3J0YWwtbG9ja2VkLWNvbHVtbnMgbG9ja2VkLWNvbHVtbnNcIj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwieydsZWZ0JzogbG9ja2VkQ29sdW1ucy5sZW5ndGggPyAoKGNvbmZpZy53aWR0aCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoKSArICgxMCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoIC0gMSkgKyAyMikgKyAncHgnIDogMCB9XCJcclxuICAgICAgICAgY2xhc3M9XCJ0cnUtY2FyZC1wb3J0YWwtY29sdW1ucyB1bmxvY2tlZC1jb2x1bW5zXCI+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|