@smartbit4all/ng-client 3.3.191 → 3.3.193
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
- package/esm2020/lib/smart-grid/smart-grid.component.mjs +2 -1
- package/esm2020/lib/smart-table/smarttable.model.mjs +1 -1
- package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +3 -3
- package/esm2020/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +3 -3
- package/esm2020/lib/smart-table/tables/table.mjs +22 -14
- package/esm2020/lib/view-context/utility/smart-object-utility.mjs +30 -0
- package/fesm2015/smartbit4all-ng-client.mjs +55 -18
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +55 -17
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +5 -0
- package/lib/smart-table/smarttable.model.d.ts +2 -1
- package/lib/smart-table/tables/table.d.ts +6 -0
- package/lib/view-context/utility/smart-object-utility.d.ts +4 -0
- package/package.json +1 -1
- package/smartbit4all-ng-client-3.3.193.tgz +0 -0
- package/smartbit4all-ng-client-3.3.191.tgz +0 -0
|
@@ -5,6 +5,7 @@ import { SmartStyleUtility } from '../../view-context/utility/smart-style-utilit
|
|
|
5
5
|
import { DefaultActionsPopupComponent } from '../components/default-actions-popup/default-actions-popup.component';
|
|
6
6
|
import { LoadingComponent } from '../components/loading/loading.component';
|
|
7
7
|
import { SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableOptionButtonDirection, SmartTableOrder, SmartTableType, } from '../smarttable.model';
|
|
8
|
+
import { SmartObjectUtility } from '../../view-context/utility/smart-object-utility';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "../../component-factory-service/projects";
|
|
10
11
|
export class Table {
|
|
@@ -310,6 +311,12 @@ export class Table {
|
|
|
310
311
|
getRowStyles(row) {
|
|
311
312
|
return SmartStyleUtility.getNgStyles(row.style);
|
|
312
313
|
}
|
|
314
|
+
getColumnClasses(header) {
|
|
315
|
+
return SmartStyleUtility.getNgClasses(header.style);
|
|
316
|
+
}
|
|
317
|
+
getColumnStyles(header) {
|
|
318
|
+
return SmartStyleUtility.getNgStyles(header.style);
|
|
319
|
+
}
|
|
313
320
|
toCamelCase(css) {
|
|
314
321
|
return css.replace(/-([a-z])/g, function (g) {
|
|
315
322
|
return g[1].toUpperCase();
|
|
@@ -407,19 +414,20 @@ export class Table {
|
|
|
407
414
|
return false;
|
|
408
415
|
}
|
|
409
416
|
getValue(element, header) {
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
417
|
+
return SmartObjectUtility.getValueByPath(element, header);
|
|
418
|
+
// let headers = header.split('.');
|
|
419
|
+
// if (headers.length > 1) {
|
|
420
|
+
// let value: any = element;
|
|
421
|
+
// for (let index = 0; index < headers.length; index++) {
|
|
422
|
+
// const element = headers[index];
|
|
423
|
+
// value = value[element];
|
|
424
|
+
// if (!value && index !== headers.length - 1) {
|
|
425
|
+
// return undefined;
|
|
426
|
+
// }
|
|
427
|
+
// }
|
|
428
|
+
// return value;
|
|
429
|
+
// }
|
|
430
|
+
// return element[header];
|
|
423
431
|
}
|
|
424
432
|
showButton(button, element) {
|
|
425
433
|
if (button.showButtonIf) {
|
|
@@ -520,4 +528,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
520
528
|
}], smartTable: [{
|
|
521
529
|
type: Input
|
|
522
530
|
}] } });
|
|
523
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10YWJsZS90YWJsZXMvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUdMLG9CQUFvQixFQUVwQiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBSTdCLE1BQU0sT0FBTyxLQUFLO0lBdUJoQixZQUFzQixTQUFrQztRQUFsQyxjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQXRCakQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBWWhELGNBQVMsR0FBRyxjQUFjLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS3JELHVCQUFrQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSTNDLDJCQUFzQixHQUFHLENBQUMsVUFBZSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFD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Y2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgSW1hZ2VSZXNvdXJjZSwgVWlBY3Rpb24sIFVpQWN0aW9uVG9vbHRpcCB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvbW9kZWxzJztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi8uLi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1zdHlsZS11dGlsaXR5JztcclxuaW1wb3J0IHsgRGVmYXVsdEFjdGlvbnNQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVmYXVsdC1hY3Rpb25zLXBvcHVwL2RlZmF1bHQtYWN0aW9ucy1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBTbWFydFRhYmxlLFxyXG4gIFNtYXJ0VGFibGVCdXR0b24sXHJcbiAgU21hcnRUYWJsZUJ1dHRvblR5cGUsXHJcbiAgU21hcnRUYWJsZUhlYWRlcixcclxuICBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLFxyXG4gIFNtYXJ0VGFibGVPcHRpb25CdXR0b25EaXJlY3Rpb24sXHJcbiAgU21hcnRUYWJsZU9yZGVyLFxyXG4gIFNtYXJ0VGFibGVUeXBlLFxyXG59IGZyb20gJy4uL3NtYXJ0dGFibGUubW9kZWwnO1xyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogJycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwdWJsaWMgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkcmVuKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VycyE6IFF1ZXJ5TGlzdDxNYXRNZW51VHJpZ2dlcj47XHJcbiAgQFZpZXdDaGlsZHJlbignZXhwYW5kZWRBcmVhJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgdmNSZWY/OiBWaWV3Q29udGFpbmVyUmVmW107XHJcbiAgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oRGVmYXVsdEFjdGlvbnNQb3B1cENvbXBvbmVudClcclxuICBkZWZhdWx0QWN0aW9uTWVudUNvbXBvbmVudHMhOiBRdWVyeUxpc3Q8RGVmYXVsdEFjdGlvbnNQb3B1cENvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ215VGFibGUnKSBteVRhYmxlQ2hpbGQhOiBNYXRUYWJsZTxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBzbWFydFRhYmxlITogU21hcnRUYWJsZTxhbnk+O1xyXG4gIHRhYmxlVHlwZSA9IFNtYXJ0VGFibGVUeXBlO1xyXG4gIHNtYXJ0VGFibGVCdXR0b25UeXBlID0gU21hcnRUYWJsZUJ1dHRvblR5cGU7XHJcbiAgaGlnaGxpZ2h0ZWRSb3dzOiBhbnlbXSA9IFtdO1xyXG4gIHNvcnRFdmVudDogU3ViamVjdDxTbWFydFRhYmxlSGVhZGVyPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZXhwYW5kZWRFbGVtZW50OiBhbnkgfCBudWxsO1xyXG5cclxuICBlbGVtZW50PzogYW55O1xyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSkge31cclxuXHJcbiAgcHVibGljIGFzeW5jVHJhbnNsYXRpb25SZXN1bHQgPSAodHJhbnNsYXRvcjogYW55LCBwYXJhbTogc3RyaW5nKSA9PiB0cmFuc2xhdG9yKHBhcmFtKTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IEFDVElPTl9TRVBFUkFUT1IgPSAnX2FjdGlvblNlcGFyYXRvcl8nO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuc29ydGFibGUpIHRoaXMuc29ydEV2ZW50ID0gbmV3IFN1YmplY3QoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU9uUm93Q2xpY2soZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayhlbGVtZW50KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YKSB7XHJcbiAgICAgIGlmICghdGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2sgJiYgIXRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXHJcbiAgICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgICAgPyB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgICA6IGVsZW1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLlJPV19TRUxFQ1QpIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICA/IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICA6IGVsZW1lbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNtYXJ0VGFibGUoc21hcnRUYWJsZTogU21hcnRUYWJsZTxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0VGFibGUgPSBzbWFydFRhYmxlO1xyXG4gICAgdGhpcy5yZW5kZXJSb3dzKCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJSb3dzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5teVRhYmxlQ2hpbGQucmVuZGVyUm93cygpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Sb3dEb3VibGVDbGljayhlbGVtZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbnMgJiYgdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5vcGVuRGVmYXVsdEFjdGlvbnNNZW51KGVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRCkge1xyXG4gICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljayhlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1gpIHtcclxuICAgICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljayhlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGUoKTogdHlwZW9mIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUge1xyXG4gICAgcmV0dXJuIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGU7XHJcbiAgfVxyXG5cclxuICBzb3J0QnV0dG9uQ2xpY2tlZChldmVudDogYW55LCBoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zb3J0RXZlbnQubmV4dChoZWFkZXIpO1xyXG4gIH1cclxuXHJcbiAgY3VzdG9tQnV0dG9uQ2xpY2tlZChcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBidXR0b246IFNtYXJ0VGFibGVCdXR0b24sXHJcbiAgICBlbGVtZW50OiBhbnksXHJcbiAgICBidG4/OiBhbnksXHJcbiAgICBjbG9zZT86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGJ0bj8uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChidXR0b24udHlwZSA9PT0gU21hcnRUYWJsZUJ1dHRvblR5cGUuTUVOVSAmJiBidG4gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghYnV0dG9uLmNhbGxiYWNrKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQnV0dG9uIHdpdGggbmFtZSAke2J1dHRvbi5sYWJlbCB8fCBidXR0b24uaWNvbn0gZG9lcyBub3QgaGF2ZSBhIGNhbGxiYWNrIWApO1xyXG4gICAgfVxyXG4gICAgYnV0dG9uLmNhbGxiYWNrKGJ1dHRvbi5hcmdzLCBlbGVtZW50LCBidG4pO1xyXG4gICAgaWYgKGNsb3NlKSB7XHJcbiAgICAgIGxldCBvcGVuTWVudXMgPSB0aGlzLnRyaWdnZXJzLmZpbHRlcihcclxuICAgICAgICAobWF0TWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSA9PiBtYXRNZW51VHJpZ2dlci5tZW51T3BlblxyXG4gICAgICApO1xyXG4gICAgICBvcGVuTWVudXMuZm9yRWFjaCgobWF0TWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgbWF0TWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNTb3J0YWJsZShoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1NvcnRhYmxlVGFibGUgPSB0aGlzLnNtYXJ0VGFibGUuc29ydGFibGU7XHJcbiAgICBpZiAoaXNTb3J0YWJsZVRhYmxlKSB7XHJcbiAgICAgIHJldHVybiBoZWFkZXIuaXNTb3J0YWJsZSAhPT0gdW5kZWZpbmVkID8gaGVhZGVyLmlzU29ydGFibGUgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0U29ydEljb24oaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHRhYmxlSGVhZGVyID0gdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyXHJcbiAgICApO1xyXG4gICAgaWYgKHRhYmxlSGVhZGVyICYmIHRhYmxlSGVhZGVyLm9yZGVyKSB7XHJcbiAgICAgIHJldHVybiB0YWJsZUhlYWRlci5vcmRlciA9PT0gU21hcnRUYWJsZU9yZGVyLkFTQ1xyXG4gICAgICAgID8gdGhpcy5zbWFydFRhYmxlLnNvcnRJY29uQXNjID8/ICdrZXlib2FyZF9hcnJvd19kb3duJ1xyXG4gICAgICAgIDogdGhpcy5zbWFydFRhYmxlLnNvcnRJY29uRGVzYyA/PyAna2V5Ym9hcmRfYXJyb3dfdXAnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgaGFzU29ydE51bUljb24oaGVhZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCB0YWJsZUhlYWRlciA9IHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IGhlYWRlclxyXG4gICAgKTtcclxuICAgIHJldHVybiB0YWJsZUhlYWRlcj8ub3JkZXJOdW1iZXIgIT09IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgZ2V0U29ydE51bUljb24oaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRhYmxlSGVhZGVyID0gdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyXHJcbiAgICApO1xyXG4gICAgaWYgKHRhYmxlSGVhZGVyICYmIHRhYmxlSGVhZGVyLm9yZGVyTnVtYmVyKSB7XHJcbiAgICAgIHJldHVybiBgZmlsdGVyXyR7dGFibGVIZWFkZXIub3JkZXJOdW1iZXJ9YDtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldFRvb2xUaXAoZWxlbWVudDogYW55LCBoZWFkZXJJbmRleDogbnVtYmVyKTogVWlBY3Rpb25Ub29sdGlwIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tVGFibGVIZWFkZXJzIHByb3BlcnR5IGlzIG1pc3NpbmcnKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzYCk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIGljb25zIGRlZmluZWRgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdG9vbFRpcENvbHVtbiA9XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcz8udG9vbFRpcENvbHVtbjtcclxuICAgIHJldHVybiB0b29sVGlwQ29sdW1uID8gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCB0b29sVGlwQ29sdW1uKSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldEljb24odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIGhlYWRlckluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b21UYWJsZUhlYWRlcnMgcHJvcGVydHkgaXMgbWlzc2luZycpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgaWNvbnMgZGVmaW5lZGApO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMgPVxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zO1xyXG5cclxuICAgIGxldCBpY29uOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlckljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb25zIVtpXTtcclxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZU51bGwgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVOdWxsID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyIDwgdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciA+IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhTdHJpbmcgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaWNvbjtcclxuICB9XHJcblxyXG4gIGdldENvbG9yKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuLCBoZWFkZXJJbmRleDogbnVtYmVyKTogVGhlbWVQYWxldHRlIHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tVGFibGVIZWFkZXJzIHByb3BlcnR5IGlzIG1pc3NpbmcnKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzYCk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIGljb25zIGRlZmluZWRgKTtcclxuICAgIH1cclxuICAgIGxldCBjdXN0b21UYWJsZUhlYWRlckljb25zID1cclxuICAgICAgdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucztcclxuXHJcbiAgICBsZXQgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdwcmltYXJ5JztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlckljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb25zIVtpXTtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgPCB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZVNtYWxsZXJUaGFuTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgPiB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbG9yID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmNvbG9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCb29sZWFuID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sb3I7XHJcbiAgfVxyXG5cclxuICB0YWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbigpOiB0eXBlb2YgU21hcnRUYWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbiB7XHJcbiAgICByZXR1cm4gU21hcnRUYWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbjtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdGVkLmxlbmd0aDtcclxuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcblxyXG4gIC8qKiBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXHJcbiAgdG9nZ2xlQWxsUm93cygpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5jbGVhcigpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5tYXhOdW1PZlNlbGVjdGFibGVSb3dzKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLmNsZWFyKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuc2VsZWN0KFxyXG4gICAgICAgIC4uLnRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MubWFwKChyb3c6IGFueSkgPT5cclxuICAgICAgICAgIHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShyb3csIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSEpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuc2VsZWN0KC4uLnRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24odHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIGxhYmVsIGZvciB0aGUgY2hlY2tib3ggb24gdGhlIHBhc3NlZCByb3cgKi9cclxuICBjaGVja2JveExhYmVsKHJvdz86IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXJvdykge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5pc0FsbFNlbGVjdGVkKCkgPyAnZGVzZWxlY3QnIDogJ3NlbGVjdCd9IGFsbGA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7dGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuaXNTZWxlY3RlZChyb3cpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSByb3cgJHtcclxuICAgICAgcm93LnBvc2l0aW9uICsgMVxyXG4gICAgfWA7XHJcbiAgfVxyXG5cclxuICBpc0hpZ2hsaWdodGVkKHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodFByb3BlcnR5KSB7XHJcbiAgICAgIGlmIChyb3dbJ2RhdGEnXVt0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0UHJvcGVydHldKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluY2x1ZGVzKHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRSb3dDbGFzc2VzKHJvdzogYW55KSB7XHJcbiAgICBsZXQgY2xhc3Nlc1RvQWRkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGV0IGNsYXNzZXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGNsYXNzZXNUb0FkZC5wdXNoKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpID8gdGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodENsYXNzISA6ICd1bnNlbGVjdGVkJyk7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhvdmVyKSB7XHJcbiAgICAgIGNsYXNzZXNUb0FkZC5wdXNoKCdzbWFydFRhYmxlUm93SG92ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXNUb1JlbW92ZS5wdXNoKCdzbWFydFRhYmxlUm93SG92ZXInKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQocm93KSkge1xyXG4gICAgICBjbGFzc2VzVG9BZGQucHVzaCgnc2VsZWN0ZWQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXNUb1JlbW92ZS5wdXNoKCdzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nQ2xhc3Nlcyhyb3cuc3R5bGUsIGNsYXNzZXNUb0FkZCwgY2xhc3Nlc1RvUmVtb3ZlKTtcclxuICB9XHJcblxyXG4gIGdldFJvd1N0eWxlcyhyb3c6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0ge1xyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHJvdy5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvQ2FtZWxDYXNlKGNzczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjc3MucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24gKGcpIHtcclxuICAgICAgcmV0dXJuIGdbMV0udG9VcHBlckNhc2UoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5oaWdobGlnaHRPblJvd0NsaWNrKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzSGlnaGxpZ2h0ZWQocm93KSkge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluZGV4T2Yocm93LCAwKTtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmhpZ2hsaWdodGVkUm93cyB8fCAhdGhpcy5oaWdobGlnaHRlZFJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MgPSBbXTtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmV4cGFuZGFibGUgJiYgIXRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Ub2dnbGUocm93KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblJvd0RvdWJsZUNsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodE9uUm93Q2xpY2spIHtcclxuICAgICAgaWYgKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5oaWdobGlnaHRlZFJvd3MuaW5kZXhPZihyb3csIDApO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnB1c2gocm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ub2dnbGUoZWxlbWVudDogYW55LCBldmVudD86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUucm93RXhwYW5kZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdTbWFydFRhYmxlUm93RXhwYW5kZXIgbm90IGZvdW5kIS4gUGxlYXNlIHByb3ZpZGUgYSBTbWFydFRhYmxlUm93RXhwYW5kZXIgaW1wbGVtZW50YXRpb24uJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9sZEluZGV4ID0gdGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cy5maW5kSW5kZXgoXHJcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50ID09PSB0aGlzLmV4cGFuZGVkRWxlbWVudFxyXG4gICAgKTtcclxuICAgIGlmIChvbGRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgbGV0IHJlZiA9IHRoaXMudmNSZWYhLmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gb2xkSW5kZXgpO1xyXG4gICAgICByZWZbMF0uY2xlYXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRFbGVtZW50ID0gdGhpcy5leHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnQgPyBudWxsIDogZWxlbWVudDtcclxuXHJcbiAgICBsZXQgbmV3SW5kZXggPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmZpbmRJbmRleChcclxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgPT09IHRoaXMuZXhwYW5kZWRFbGVtZW50XHJcbiAgICApO1xyXG5cclxuICAgIGxldCByb3dEYXRhUmVzcG9uc2U7XHJcblxyXG4gICAgaWYgKG5ld0luZGV4ICE9PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLmFzeW5jT25FeHBhbmQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWY/LmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdISxcclxuICAgICAgICAgIExvYWRpbmdDb21wb25lbnQsXHJcbiAgICAgICAgICBuZXcgTWFwPHN0cmluZywgYW55PigpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcm93RGF0YVJlc3BvbnNlID0gYXdhaXQgdGhpcy5zbWFydFRhYmxlLnJvd0V4cGFuZGVyPy5leHBhbmRBc3luYyhuZXdJbmRleCk7XHJcblxyXG4gICAgICAgIGxldCByZWYgPSB0aGlzLnZjUmVmIS5maWx0ZXIoKGVsZW1lbnQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggPT09IG5ld0luZGV4KVswXSE7XHJcbiAgICAgICAgcmVmLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICAgIHRoaXMudmNSZWY/LmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdISxcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuZXhwYW5kZWRDb21wb25lbnQsXHJcbiAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1sncm93RGF0YScsIHJvd0RhdGFSZXNwb25zZV1dKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5lbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUubWF4TnVtT2ZTZWxlY3RhYmxlUm93cyAmJlxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuc21hcnRUYWJsZS5tYXhOdW1PZlNlbGVjdGFibGVSb3dzXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbj8udG9nZ2xlKGVsZW1lbnQpO1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25TZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLm9uU2VsZWN0aW9uKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd01lbnVCdXR0b24oZWxlbWVudDogYW55LCBidXR0b246IFNtYXJ0VGFibGVCdXR0b24pOiBib29sZWFuIHtcclxuICAgIGlmIChidXR0b24ubWVudUl0ZW1CdXR0b25zKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwgYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZSEpLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gbGVuZ3RoID4gMDtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldFZhbHVlKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IGhlYWRlcnMgPSBoZWFkZXIuc3BsaXQoJy4nKTtcclxuICAgIGlmIChoZWFkZXJzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgbGV0IHZhbHVlOiBhbnkgPSBlbGVtZW50O1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaGVhZGVycy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gaGVhZGVyc1tpbmRleF07XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVtlbGVtZW50XTtcclxuICAgICAgICBpZiAoIXZhbHVlICYmIGluZGV4ICE9PSBoZWFkZXJzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtZW50W2hlYWRlcl07XHJcbiAgfVxyXG5cclxuICBzaG93QnV0dG9uKGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbiwgZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYnV0dG9uLnNob3dCdXR0b25JZikge1xyXG4gICAgICByZXR1cm4gYnV0dG9uLnNob3dCdXR0b25JZihlbGVtZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZChlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnNlbGVjdGFibGVQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShcclxuICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3RhYmxlUHJvcGVydHlOYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBzZWxlY3RhYmxlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0YWJsZSA9PT0gbnVsbCA/IGZhbHNlIDogIXNlbGVjdGFibGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbj8uaXNTZWxlY3RlZChcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgID8gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcclxuICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICApID8/IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcmlnaW5hbFByb3BlcnR5KGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChoZWFkZXIuc3RhcnRzV2l0aCgnZGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gaGVhZGVyLnN1YnN0cmluZygnZGF0YS4nLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgaXNJbWFnZVJlc291cmNlKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghZWxlbWVudC5pY29ucykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgcHJvcGVydHkgPSB0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKTtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbGVtZW50Lmljb25zKS5zb21lKChrZXkpID0+IGtleSA9PT0gcHJvcGVydHkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUljb25zKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBJbWFnZVJlc291cmNlW10ge1xyXG4gICAgaWYgKGVsZW1lbnQ/Lmljb25zKSB7XHJcbiAgICAgIGxldCBpY29uQ29kZXMgPSBlbGVtZW50Py5pY29uc1t0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKV07XHJcbiAgICAgIHJldHVybiBpY29uQ29kZXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBnZXRJbWFnZVJlc291cmNlSWNvbihlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBlbGVtZW50Lmljb25zW3RoaXMub3JpZ2luYWxQcm9wZXJ0eShoZWFkZXIpXS5pZGVudGlmaWVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUNvbG9yKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuaWNvbnNbdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcildLmNvbG9yID8/ICdwcmltYXJ5JztcclxuICB9XHJcblxyXG4gIGdldEltYWdlUmVzb3VyY2VTdHlsZShyZXNvdXJjZTogSW1hZ2VSZXNvdXJjZSk6IGFueSB7XHJcbiAgICByZXR1cm4gcmVzb3VyY2Uuc3R5bGUgPyByZXNvdXJjZS5zdHlsZSA6IHt9O1xyXG4gIH1cclxuXHJcbiAgb3BlbkRlZmF1bHRBY3Rpb25zTWVudShyb3c6IGFueSkge1xyXG4gICAgbGV0IGFjdGlvbkNvZGVzRnJvbVJvdyA9IHJvdz8uYWN0aW9ucz8ubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiBhY3Rpb24uY29kZSk7XHJcbiAgICBpZiAoIWFjdGlvbkNvZGVzRnJvbVJvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZmlsdGVyZWRBY3Rpb25zID0gdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zPy5maWx0ZXIoKGFjdGlvbjogU21hcnRUYWJsZUJ1dHRvbikgPT5cclxuICAgICAgYWN0aW9uQ29kZXNGcm9tUm93LmluY2x1ZGVzKGFjdGlvbi5jb2RlISlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGZpbHRlcmVkQWN0aW9ucyAmJiBmaWx0ZXJlZEFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoZmlsdGVyZWRBY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2socm93KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZWZhdWx0QWN0aW9uTWVudUNvbXBvbmVudHNcclxuICAgICAgICAudG9BcnJheSgpXHJcbiAgICAgICAgLmZpbmQoKGNvbXA6IERlZmF1bHRBY3Rpb25zUG9wdXBDb21wb25lbnQpID0+IGNvbXAucm93LmlkID09PSByb3cuaWQpXHJcbiAgICAgICAgPy5vcGVuRGVmYXVsdEFjdGlvbnNNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWN0aW9uc0ZvclJvdyhlbGVtZW50OiBhbnkpOiBTbWFydFRhYmxlQnV0dG9uW10gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IGFjdGlvbkNvZGVzRnJvbVJvdyA9IGVsZW1lbnQ/LmFjdGlvbnM/Lm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUpO1xyXG4gICAgaWYgKGFjdGlvbkNvZGVzRnJvbVJvdykge1xyXG4gICAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zPy5maWx0ZXIoKGFjdGlvbjogU21hcnRUYWJsZUJ1dHRvbikgPT5cclxuICAgICAgICBhY3Rpb25Db2Rlc0Zyb21Sb3cuaW5jbHVkZXMoYWN0aW9uLmNvZGUhKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIl19
|
|
531
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10YWJsZS90YWJsZXMvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUdMLG9CQUFvQixFQUVwQiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7O0FBSXJGLE1BQU0sT0FBTyxLQUFLO0lBdUJoQixZQUFzQixTQUFrQztRQUFsQyxjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQXRCakQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBWWhELGNBQVMsR0FBRyxjQUFjLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS3JELHVCQUFrQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSTNDLDJCQUFzQixHQUFHLENBQUMsVUFBZSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRFLHFCQUFnQixHQUFHLG1CQUFtQixDQUFDO0lBSkksQ0FBQztJQU01RCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQVk7UUFDM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsU0FBUyxFQUFFO1lBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUI7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxTQUFTLEVBQUU7WUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLFlBQVksQ0FDZixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtvQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO29CQUM1RSxDQUFDLENBQUMsT0FBTyxDQUNaLENBQUM7YUFDSDtpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFCO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FDZixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtnQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO2dCQUM1RSxDQUFDLENBQUMsT0FBTyxDQUNaLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUEyQjtRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFZO1FBQ2pDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLFNBQVMsRUFBRTtnQkFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLFNBQVMsRUFBRTtnQkFDakUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFO29CQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2hDO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyw0QkFBNEIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBVSxFQUFFLE1BQXdCO1FBQ3BELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsbUJBQW1CLENBQ2pCLEtBQVUsRUFDVixNQUF3QixFQUN4QixPQUFZLEVBQ1osR0FBUyxFQUNULEtBQWU7UUFFZixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFHLEVBQUUsUUFBUSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUVELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBRTNFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksNEJBQTRCLENBQUMsQ0FBQztTQUM5RjtRQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUM1RCxDQUFDO1lBQ0YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQThCLEVBQUUsRUFBRTtnQkFDbkQsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQXdCO1FBQ2pDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQy9DLElBQUksZUFBZSxFQUFFO1lBQ25CLE9BQU8sTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUNuRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUM3RCxDQUFDLFdBQTZCLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUN2RSxDQUFDO1FBQ0YsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRTtZQUNwQyxPQUFPLFdBQVcsQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLEdBQUc7Z0JBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsSUFBSSxxQkFBcUI7Z0JBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksSUFBSSxtQkFBbUIsQ0FBQztTQUN6RDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxjQUFjLENBQUMsTUFBYztRQUMzQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FDN0QsQ0FBQyxXQUE2QixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FDdkUsQ0FBQztRQUNGLE9BQU8sV0FBVyxFQUFFLFdBQVcsS0FBSyxTQUFTLENBQUM7SUFDaEQsQ0FBQztJQUNELGNBQWMsQ0FBQyxNQUFjO1FBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUM3RCxDQUFDLFdBQTZCLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUN2RSxDQUFDO1FBQ0YsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUMxQyxPQUFPLFVBQVUsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQVksRUFBRSxXQUFtQjtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRTtZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7U0FDM0Q7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUU7WUFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsV0FBVywyQkFBMkIsQ0FBQyxDQUFDO1NBQ3pGO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVyxDQUFDLEtBQUssRUFBRTtZQUNsRixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxXQUFXLDhCQUE4QixDQUFDLENBQUM7U0FDNUY7UUFFRCxJQUFJLGFBQWEsR0FDZixJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUM7UUFDakYsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0UsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFnQyxFQUFFLFdBQW1CO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztTQUMzRDthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRTtZQUMzRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxXQUFXLDJCQUEyQixDQUFDLENBQUM7U0FDekY7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFXLENBQUMsS0FBSyxFQUFFO1lBQ2xGLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLFdBQVcsOEJBQThCLENBQUMsQ0FBQztTQUM1RjtRQUNELElBQUksc0JBQXNCLEdBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVyxDQUFDLEtBQUssQ0FBQztRQUV6RSxJQUFJLElBQUksR0FBVyxFQUFFLENBQUM7UUFFdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHNCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2RCxJQUFJLHFCQUFxQixHQUFHLHNCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDbEIsSUFDRSxxQkFBcUIsQ0FBQyxtQkFBbUI7b0JBQ3pDLHFCQUFxQixDQUFDLG1CQUFtQixLQUFLLEtBQUssRUFDbkQ7b0JBQ0EsSUFBSSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQztvQkFDbEMsTUFBTTtpQkFDUDthQUNGO1lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzdCLElBQ0UscUJBQXFCLENBQUMsK0JBQStCO29CQUNyRCxxQkFBcUIsQ0FBQywrQkFBK0IsR0FBRyxLQUFLLEVBQzdEO29CQUNBLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7b0JBQ2xDLE1BQU07aUJBQ1A7cUJBQU0sSUFDTCxxQkFBcUIsQ0FBQyxnQ0FBZ0M7b0JBQ3RELHFCQUFxQixDQUFDLGdDQUFnQyxHQUFHLEtBQUssRUFDOUQ7b0JBQ0EsSUFBSSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQztvQkFDbEMsTUFBTTtpQkFDUDtxQkFBTSxJQUNMLHFCQUFxQixDQUFDLCtCQUErQjtvQkFDckQscUJBQXFCLENBQUMsK0JBQStCLEtBQUssS0FBSyxFQUMvRDtvQkFDQSxJQUFJLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDO29CQUNsQyxNQUFNO2lCQUNQO2FBQ0Y7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ3BDLElBQ0UscUJBQXFCLENBQUMsK0JBQStCO29CQUNyRCxxQkFBcUIsQ0FBQywrQkFBK0IsS0FBSyxLQUFLLEVBQy9EO29CQUNBLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7b0JBQ2xDLE1BQU07aUJBQ1A7YUFDRjtpQkFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDckMsSUFDRSxxQkFBcUIsQ0FBQyxzQkFBc0I7b0JBQzVDLHFCQUFxQixDQUFDLHNCQUFzQixLQUFLLEtBQUssRUFDdEQ7b0JBQ0EsSUFBSSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQztvQkFDbEMsTUFBTTtpQkFDUDthQUNGO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBZ0MsRUFBRSxXQUFtQjtRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRTtZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7U0FDM0Q7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUU7WUFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsV0FBVywyQkFBMkIsQ0FBQyxDQUFDO1NBQ3pGO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVyxDQUFDLEtBQUssRUFBRTtZQUNsRixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxXQUFXLDhCQUE4QixDQUFDLENBQUM7U0FDNUY7UUFDRCxJQUFJLHNCQUFzQixHQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVcsQ0FBQyxLQUFLLENBQUM7UUFFekUsSUFBSSxLQUFLLEdBQWlCLFNBQVMsQ0FBQztRQUVwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsc0JBQXVCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZELElBQUkscUJBQXFCLEdBQUcsc0JBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzdCLElBQ0UscUJBQXFCLENBQUMsK0JBQStCO29CQUNyRCxxQkFBcUIsQ0FBQywrQkFBK0IsR0FBRyxLQUFLLEVBQzdEO29CQUNBLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7b0JBQ3BDLE1BQU07aUJBQ1A7cUJBQU0sSUFDTCxxQkFBcUIsQ0FBQyxnQ0FBZ0M7b0JBQ3RELHFCQUFxQixDQUFDLGdDQUFnQyxHQUFHLEtBQUssRUFDOUQ7b0JBQ0EsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztvQkFDcEMsTUFBTTtpQkFDUDtxQkFBTSxJQUNMLHFCQUFxQixDQUFDLCtCQUErQjtvQkFDckQscUJBQXFCLENBQUMsK0JBQStCLEtBQUssS0FBSyxFQUMvRDtvQkFDQSxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDO29CQUNwQyxNQUFNO2lCQUNQO2FBQ0Y7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ3BDLElBQ0UscUJBQXFCLENBQUMsK0JBQStCO29CQUNyRCxxQkFBcUIsQ0FBQywrQkFBK0IsS0FBSyxLQUFLLEVBQy9EO29CQUNBLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7b0JBQ3BDLE1BQU07aUJBQ1A7YUFDRjtpQkFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDckMsSUFDRSxxQkFBcUIsQ0FBQyxzQkFBc0I7b0JBQzVDLHFCQUFxQixDQUFDLHNCQUFzQixLQUFLLEtBQUssRUFDdEQ7b0JBQ0EsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztvQkFDcEMsTUFBTTtpQkFDUDthQUNGO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsT0FBTywrQkFBK0IsQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ2pELE9BQU8sV0FBVyxLQUFLLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVuQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2QztZQUNELE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVuQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2QztZQUVELE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVUsQ0FBQyxNQUFNLENBQy9CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWtCLENBQUMsQ0FDeEUsQ0FDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDakU7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxhQUFhLENBQUMsR0FBUztRQUNyQixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLE1BQU0sQ0FBQztTQUM5RDtRQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxRQUMxRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQ2pCLEVBQUUsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7WUFDckMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUNsRCxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3pELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxlQUFlLEdBQWEsRUFBRSxDQUFDO1FBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFlLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVGLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3pDO2FBQU07WUFDTCxlQUFlLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMvQjthQUFNO1lBQ0wsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8saUJBQWlCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUTtRQUNuQixPQUFPLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQXdCO1FBQ3ZDLE9BQU8saUJBQWlCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQXdCO1FBQ3RDLE9BQU8saUJBQWlCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDN0IsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUM7WUFDekMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVE7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDaEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxHQUFRO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtZQUN2QyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZDO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNoQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNoQztTQUNGO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFZLEVBQUUsS0FBVztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYiwwRkFBMEYsQ0FDM0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7U0FDMUI7UUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQ2hELENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FDOUMsQ0FBQztRQUNGLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ25CLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBWSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ2xGLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRXpFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDaEQsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsZUFBZSxDQUM5QyxDQUFDO1FBRUYsSUFBSSxlQUFlLENBQUM7UUFFcEIsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FDaEQsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFFLEVBQzNFLGdCQUFnQixFQUNoQixJQUFJLEdBQUcsRUFBZSxDQUN2QixDQUFDO2dCQUVGLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFM0UsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7Z0JBQ3RGLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNiO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FDaEQsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFFLEVBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQ2pDLElBQUksR0FBRyxDQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUNyRCxDQUFDO1lBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQVk7UUFDdkIsSUFDRSxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQjtZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQ3JGO1lBQ0EsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFZLEVBQUUsTUFBd0I7UUFDbkQsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTSxJQUFJLE1BQU0sQ0FBQywyQkFBMkIsRUFBRTtZQUM3QyxJQUFJO2dCQUNGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQywyQkFBNEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDaEYsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ25CO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQVksRUFBRSxNQUFjO1FBQ25DLE9BQU8sa0JBQWtCLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxRCxtQ0FBbUM7UUFDbkMsNEJBQTRCO1FBQzVCLDhCQUE4QjtRQUM5QiwyREFBMkQ7UUFDM0Qsc0NBQXNDO1FBQ3RDLDhCQUE4QjtRQUM5QixvREFBb0Q7UUFDcEQsMEJBQTBCO1FBQzFCLFFBQVE7UUFDUixNQUFNO1FBQ04sa0JBQWtCO1FBQ2xCLElBQUk7UUFDSiwwQkFBMEI7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUF3QixFQUFFLE9BQVk7UUFDL0MsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3ZCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFZO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDM0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUU7WUFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQy9DLE9BQU8sRUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUN2QyxDQUFDO1lBQ0YsT0FBTyxVQUFVLEtBQUssU0FBUyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7U0FDOUU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBWTtRQUNyQixPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtZQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7WUFDNUUsQ0FBQyxDQUFDLE9BQU8sQ0FDWixJQUFJLEtBQUssQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQWM7UUFDckMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzlCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQVksRUFBRSxNQUFjO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBWSxFQUFFLE1BQWM7UUFDaEQsSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQ2xCLElBQUksU0FBUyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDOUQsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFZLEVBQUUsTUFBYztRQUMvQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFZLEVBQUUsTUFBYztRQUNoRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQztJQUN6RSxDQUFDO0lBRUQscUJBQXFCLENBQUMsUUFBdUI7UUFDM0MsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELHNCQUFzQixDQUFDLEdBQVE7UUFDN0IsSUFBSSxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQWdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFLENBQ3hGLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSyxDQUFDLENBQzFDLENBQUM7UUFFRixJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RDLE9BQU87aUJBQ1I7YUFDRjtZQUNELElBQUksQ0FBQywyQkFBMkI7aUJBQzdCLE9BQU8sRUFBRTtpQkFDVCxJQUFJLENBQUMsQ0FBQyxJQUFrQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxFQUFFLHNCQUFzQixFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBWTtRQUNsQyxJQUFJLGtCQUFrQixHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBZ0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xGLElBQUksa0JBQWtCLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FDekUsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFLLENBQUMsQ0FDMUMsQ0FBQztTQUNIO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7a0dBL21CVSxLQUFLO3NGQUFMLEtBQUssaU5BRUYsY0FBYyxzR0FDVSxnQkFBZ0IsOERBSXhDLDRCQUE0QixnREFUaEMsRUFBRTsyRkFFRCxLQUFLO2tCQUhqQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiOzhHQUcrQixRQUFRO3NCQUFyQyxZQUFZO3VCQUFDLGNBQWM7Z0JBRTVCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS3hELDJCQUEyQjtzQkFEMUIsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBR3BCLFlBQVk7c0JBQWpDLFNBQVM7dUJBQUMsU0FBUztnQkFFWCxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50LWZhY3Rvcnktc2VydmljZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEltYWdlUmVzb3VyY2UsIFVpQWN0aW9uLCBVaUFjdGlvblRvb2x0aXAgfSBmcm9tICcuLi8uLi92aWV3LWNvbnRleHQvYXBpL21vZGVsL21vZGVscyc7XHJcbmltcG9ydCB7IFNtYXJ0U3R5bGVVdGlsaXR5IH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3V0aWxpdHkvc21hcnQtc3R5bGUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IERlZmF1bHRBY3Rpb25zUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2RlZmF1bHQtYWN0aW9ucy1wb3B1cC9kZWZhdWx0LWFjdGlvbnMtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRUYWJsZSxcclxuICBTbWFydFRhYmxlQnV0dG9uLFxyXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXIsXHJcbiAgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSxcclxuICBTbWFydFRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uLFxyXG4gIFNtYXJ0VGFibGVPcmRlcixcclxuICBTbWFydFRhYmxlVHlwZSxcclxufSBmcm9tICcuLi9zbWFydHRhYmxlLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRPYmplY3RVdGlsaXR5IH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3V0aWxpdHkvc21hcnQtb2JqZWN0LXV0aWxpdHknO1xyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogJycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwdWJsaWMgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkcmVuKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VycyE6IFF1ZXJ5TGlzdDxNYXRNZW51VHJpZ2dlcj47XHJcbiAgQFZpZXdDaGlsZHJlbignZXhwYW5kZWRBcmVhJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgdmNSZWY/OiBWaWV3Q29udGFpbmVyUmVmW107XHJcbiAgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oRGVmYXVsdEFjdGlvbnNQb3B1cENvbXBvbmVudClcclxuICBkZWZhdWx0QWN0aW9uTWVudUNvbXBvbmVudHMhOiBRdWVyeUxpc3Q8RGVmYXVsdEFjdGlvbnNQb3B1cENvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ215VGFibGUnKSBteVRhYmxlQ2hpbGQhOiBNYXRUYWJsZTxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBzbWFydFRhYmxlITogU21hcnRUYWJsZTxhbnk+O1xyXG4gIHRhYmxlVHlwZSA9IFNtYXJ0VGFibGVUeXBlO1xyXG4gIHNtYXJ0VGFibGVCdXR0b25UeXBlID0gU21hcnRUYWJsZUJ1dHRvblR5cGU7XHJcbiAgaGlnaGxpZ2h0ZWRSb3dzOiBhbnlbXSA9IFtdO1xyXG4gIHNvcnRFdmVudDogU3ViamVjdDxTbWFydFRhYmxlSGVhZGVyPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZXhwYW5kZWRFbGVtZW50OiBhbnkgfCBudWxsO1xyXG5cclxuICBlbGVtZW50PzogYW55O1xyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSkge31cclxuXHJcbiAgcHVibGljIGFzeW5jVHJhbnNsYXRpb25SZXN1bHQgPSAodHJhbnNsYXRvcjogYW55LCBwYXJhbTogc3RyaW5nKSA9PiB0cmFuc2xhdG9yKHBhcmFtKTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IEFDVElPTl9TRVBFUkFUT1IgPSAnX2FjdGlvblNlcGFyYXRvcl8nO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuc29ydGFibGUpIHRoaXMuc29ydEV2ZW50ID0gbmV3IFN1YmplY3QoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU9uUm93Q2xpY2soZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayhlbGVtZW50KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YKSB7XHJcbiAgICAgIGlmICghdGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2sgJiYgIXRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXHJcbiAgICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgICAgPyB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgICA6IGVsZW1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLlJPV19TRUxFQ1QpIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICA/IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICA6IGVsZW1lbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNtYXJ0VGFibGUoc21hcnRUYWJsZTogU21hcnRUYWJsZTxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0VGFibGUgPSBzbWFydFRhYmxlO1xyXG4gICAgdGhpcy5yZW5kZXJSb3dzKCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJSb3dzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5teVRhYmxlQ2hpbGQucmVuZGVyUm93cygpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Sb3dEb3VibGVDbGljayhlbGVtZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbnMgJiYgdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5vcGVuRGVmYXVsdEFjdGlvbnNNZW51KGVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRCkge1xyXG4gICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljayhlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1gpIHtcclxuICAgICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljayhlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGUoKTogdHlwZW9mIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUge1xyXG4gICAgcmV0dXJuIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGU7XHJcbiAgfVxyXG5cclxuICBzb3J0QnV0dG9uQ2xpY2tlZChldmVudDogYW55LCBoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zb3J0RXZlbnQubmV4dChoZWFkZXIpO1xyXG4gIH1cclxuXHJcbiAgY3VzdG9tQnV0dG9uQ2xpY2tlZChcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBidXR0b246IFNtYXJ0VGFibGVCdXR0b24sXHJcbiAgICBlbGVtZW50OiBhbnksXHJcbiAgICBidG4/OiBhbnksXHJcbiAgICBjbG9zZT86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGJ0bj8uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChidXR0b24udHlwZSA9PT0gU21hcnRUYWJsZUJ1dHRvblR5cGUuTUVOVSAmJiBidG4gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghYnV0dG9uLmNhbGxiYWNrKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQnV0dG9uIHdpdGggbmFtZSAke2J1dHRvbi5sYWJlbCB8fCBidXR0b24uaWNvbn0gZG9lcyBub3QgaGF2ZSBhIGNhbGxiYWNrIWApO1xyXG4gICAgfVxyXG4gICAgYnV0dG9uLmNhbGxiYWNrKGJ1dHRvbi5hcmdzLCBlbGVtZW50LCBidG4pO1xyXG4gICAgaWYgKGNsb3NlKSB7XHJcbiAgICAgIGxldCBvcGVuTWVudXMgPSB0aGlzLnRyaWdnZXJzLmZpbHRlcihcclxuICAgICAgICAobWF0TWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSA9PiBtYXRNZW51VHJpZ2dlci5tZW51T3BlblxyXG4gICAgICApO1xyXG4gICAgICBvcGVuTWVudXMuZm9yRWFjaCgobWF0TWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgbWF0TWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNTb3J0YWJsZShoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1NvcnRhYmxlVGFibGUgPSB0aGlzLnNtYXJ0VGFibGUuc29ydGFibGU7XHJcbiAgICBpZiAoaXNTb3J0YWJsZVRhYmxlKSB7XHJcbiAgICAgIHJldHVybiBoZWFkZXIuaXNTb3J0YWJsZSAhPT0gdW5kZWZpbmVkID8gaGVhZGVyLmlzU29ydGFibGUgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0U29ydEljb24oaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHRhYmxlSGVhZGVyID0gdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyXHJcbiAgICApO1xyXG4gICAgaWYgKHRhYmxlSGVhZGVyICYmIHRhYmxlSGVhZGVyLm9yZGVyKSB7XHJcbiAgICAgIHJldHVybiB0YWJsZUhlYWRlci5vcmRlciA9PT0gU21hcnRUYWJsZU9yZGVyLkFTQ1xyXG4gICAgICAgID8gdGhpcy5zbWFydFRhYmxlLnNvcnRJY29uQXNjID8/ICdrZXlib2FyZF9hcnJvd19kb3duJ1xyXG4gICAgICAgIDogdGhpcy5zbWFydFRhYmxlLnNvcnRJY29uRGVzYyA/PyAna2V5Ym9hcmRfYXJyb3dfdXAnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgaGFzU29ydE51bUljb24oaGVhZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCB0YWJsZUhlYWRlciA9IHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IGhlYWRlclxyXG4gICAgKTtcclxuICAgIHJldHVybiB0YWJsZUhlYWRlcj8ub3JkZXJOdW1iZXIgIT09IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgZ2V0U29ydE51bUljb24oaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRhYmxlSGVhZGVyID0gdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyXHJcbiAgICApO1xyXG4gICAgaWYgKHRhYmxlSGVhZGVyICYmIHRhYmxlSGVhZGVyLm9yZGVyTnVtYmVyKSB7XHJcbiAgICAgIHJldHVybiBgZmlsdGVyXyR7dGFibGVIZWFkZXIub3JkZXJOdW1iZXJ9YDtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldFRvb2xUaXAoZWxlbWVudDogYW55LCBoZWFkZXJJbmRleDogbnVtYmVyKTogVWlBY3Rpb25Ub29sdGlwIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tVGFibGVIZWFkZXJzIHByb3BlcnR5IGlzIG1pc3NpbmcnKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzYCk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIGljb25zIGRlZmluZWRgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdG9vbFRpcENvbHVtbiA9XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcz8udG9vbFRpcENvbHVtbjtcclxuICAgIHJldHVybiB0b29sVGlwQ29sdW1uID8gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCB0b29sVGlwQ29sdW1uKSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldEljb24odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIGhlYWRlckluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b21UYWJsZUhlYWRlcnMgcHJvcGVydHkgaXMgbWlzc2luZycpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgaWNvbnMgZGVmaW5lZGApO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMgPVxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zO1xyXG5cclxuICAgIGxldCBpY29uOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlckljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb25zIVtpXTtcclxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZU51bGwgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVOdWxsID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyIDwgdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciA+IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhTdHJpbmcgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaWNvbjtcclxuICB9XHJcblxyXG4gIGdldENvbG9yKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuLCBoZWFkZXJJbmRleDogbnVtYmVyKTogVGhlbWVQYWxldHRlIHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tVGFibGVIZWFkZXJzIHByb3BlcnR5IGlzIG1pc3NpbmcnKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzYCk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIGljb25zIGRlZmluZWRgKTtcclxuICAgIH1cclxuICAgIGxldCBjdXN0b21UYWJsZUhlYWRlckljb25zID1cclxuICAgICAgdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucztcclxuXHJcbiAgICBsZXQgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdwcmltYXJ5JztcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlckljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb25zIVtpXTtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgPCB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZVNtYWxsZXJUaGFuTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgPiB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbG9yID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmNvbG9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCb29sZWFuID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sb3I7XHJcbiAgfVxyXG5cclxuICB0YWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbigpOiB0eXBlb2YgU21hcnRUYWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbiB7XHJcbiAgICByZXR1cm4gU21hcnRUYWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbjtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdGVkLmxlbmd0aDtcclxuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcblxyXG4gIC8qKiBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXHJcbiAgdG9nZ2xlQWxsUm93cygpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5jbGVhcigpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5tYXhOdW1PZlNlbGVjdGFibGVSb3dzKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLmNsZWFyKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuc2VsZWN0KFxyXG4gICAgICAgIC4uLnRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MubWFwKChyb3c6IGFueSkgPT5cclxuICAgICAgICAgIHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShyb3csIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSEpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuc2VsZWN0KC4uLnRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24odHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIGxhYmVsIGZvciB0aGUgY2hlY2tib3ggb24gdGhlIHBhc3NlZCByb3cgKi9cclxuICBjaGVja2JveExhYmVsKHJvdz86IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXJvdykge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5pc0FsbFNlbGVjdGVkKCkgPyAnZGVzZWxlY3QnIDogJ3NlbGVjdCd9IGFsbGA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7dGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuaXNTZWxlY3RlZChyb3cpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSByb3cgJHtcclxuICAgICAgcm93LnBvc2l0aW9uICsgMVxyXG4gICAgfWA7XHJcbiAgfVxyXG5cclxuICBpc0hpZ2hsaWdodGVkKHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodFByb3BlcnR5KSB7XHJcbiAgICAgIGlmIChyb3dbJ2RhdGEnXVt0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0UHJvcGVydHldKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluY2x1ZGVzKHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRSb3dDbGFzc2VzKHJvdzogYW55KSB7XHJcbiAgICBsZXQgY2xhc3Nlc1RvQWRkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGV0IGNsYXNzZXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGNsYXNzZXNUb0FkZC5wdXNoKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpID8gdGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodENsYXNzISA6ICd1bnNlbGVjdGVkJyk7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhvdmVyKSB7XHJcbiAgICAgIGNsYXNzZXNUb0FkZC5wdXNoKCdzbWFydFRhYmxlUm93SG92ZXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXNUb1JlbW92ZS5wdXNoKCdzbWFydFRhYmxlUm93SG92ZXInKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQocm93KSkge1xyXG4gICAgICBjbGFzc2VzVG9BZGQucHVzaCgnc2VsZWN0ZWQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXNUb1JlbW92ZS5wdXNoKCdzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nQ2xhc3Nlcyhyb3cuc3R5bGUsIGNsYXNzZXNUb0FkZCwgY2xhc3Nlc1RvUmVtb3ZlKTtcclxuICB9XHJcblxyXG4gIGdldFJvd1N0eWxlcyhyb3c6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0ge1xyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHJvdy5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5DbGFzc2VzKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikge1xyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nQ2xhc3NlcyhoZWFkZXIuc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uU3R5bGVzKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikge1xyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKGhlYWRlci5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvQ2FtZWxDYXNlKGNzczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjc3MucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24gKGcpIHtcclxuICAgICAgcmV0dXJuIGdbMV0udG9VcHBlckNhc2UoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5oaWdobGlnaHRPblJvd0NsaWNrKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzSGlnaGxpZ2h0ZWQocm93KSkge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluZGV4T2Yocm93LCAwKTtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmhpZ2hsaWdodGVkUm93cyB8fCAhdGhpcy5oaWdobGlnaHRlZFJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MgPSBbXTtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmV4cGFuZGFibGUgJiYgIXRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Ub2dnbGUocm93KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblJvd0RvdWJsZUNsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodE9uUm93Q2xpY2spIHtcclxuICAgICAgaWYgKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5oaWdobGlnaHRlZFJvd3MuaW5kZXhPZihyb3csIDApO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnB1c2gocm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ub2dnbGUoZWxlbWVudDogYW55LCBldmVudD86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUucm93RXhwYW5kZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdTbWFydFRhYmxlUm93RXhwYW5kZXIgbm90IGZvdW5kIS4gUGxlYXNlIHByb3ZpZGUgYSBTbWFydFRhYmxlUm93RXhwYW5kZXIgaW1wbGVtZW50YXRpb24uJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9sZEluZGV4ID0gdGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cy5maW5kSW5kZXgoXHJcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50ID09PSB0aGlzLmV4cGFuZGVkRWxlbWVudFxyXG4gICAgKTtcclxuICAgIGlmIChvbGRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgbGV0IHJlZiA9IHRoaXMudmNSZWYhLmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gb2xkSW5kZXgpO1xyXG4gICAgICByZWZbMF0uY2xlYXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRFbGVtZW50ID0gdGhpcy5leHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnQgPyBudWxsIDogZWxlbWVudDtcclxuXHJcbiAgICBsZXQgbmV3SW5kZXggPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmZpbmRJbmRleChcclxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgPT09IHRoaXMuZXhwYW5kZWRFbGVtZW50XHJcbiAgICApO1xyXG5cclxuICAgIGxldCByb3dEYXRhUmVzcG9uc2U7XHJcblxyXG4gICAgaWYgKG5ld0luZGV4ICE9PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLmFzeW5jT25FeHBhbmQpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWY/LmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdISxcclxuICAgICAgICAgIExvYWRpbmdDb21wb25lbnQsXHJcbiAgICAgICAgICBuZXcgTWFwPHN0cmluZywgYW55PigpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcm93RGF0YVJlc3BvbnNlID0gYXdhaXQgdGhpcy5zbWFydFRhYmxlLnJvd0V4cGFuZGVyPy5leHBhbmRBc3luYyhuZXdJbmRleCk7XHJcblxyXG4gICAgICAgIGxldCByZWYgPSB0aGlzLnZjUmVmIS5maWx0ZXIoKGVsZW1lbnQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggPT09IG5ld0luZGV4KVswXSE7XHJcbiAgICAgICAgcmVmLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICAgIHRoaXMudmNSZWY/LmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdISxcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuZXhwYW5kZWRDb21wb25lbnQsXHJcbiAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1sncm93RGF0YScsIHJvd0RhdGFSZXNwb25zZV1dKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5lbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUubWF4TnVtT2ZTZWxlY3RhYmxlUm93cyAmJlxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMuc21hcnRUYWJsZS5tYXhOdW1PZlNlbGVjdGFibGVSb3dzXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbj8udG9nZ2xlKGVsZW1lbnQpO1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25TZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLm9uU2VsZWN0aW9uKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd01lbnVCdXR0b24oZWxlbWVudDogYW55LCBidXR0b246IFNtYXJ0VGFibGVCdXR0b24pOiBib29sZWFuIHtcclxuICAgIGlmIChidXR0b24ubWVudUl0ZW1CdXR0b25zKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwgYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZSEpLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gbGVuZ3RoID4gMDtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldFZhbHVlKGVsZW1lbnQ6IGFueSwgaGVhZGVyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIFNtYXJ0T2JqZWN0VXRpbGl0eS5nZXRWYWx1ZUJ5UGF0aChlbGVtZW50LCBoZWFkZXIpO1xyXG5cclxuICAgIC8vIGxldCBoZWFkZXJzID0gaGVhZGVyLnNwbGl0KCcuJyk7XHJcbiAgICAvLyBpZiAoaGVhZGVycy5sZW5ndGggPiAxKSB7XHJcbiAgICAvLyAgIGxldCB2YWx1ZTogYW55ID0gZWxlbWVudDtcclxuICAgIC8vICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlcnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAvLyAgICAgY29uc3QgZWxlbWVudCA9IGhlYWRlcnNbaW5kZXhdO1xyXG4gICAgLy8gICAgIHZhbHVlID0gdmFsdWVbZWxlbWVudF07XHJcbiAgICAvLyAgICAgaWYgKCF2YWx1ZSAmJiBpbmRleCAhPT0gaGVhZGVycy5sZW5ndGggLSAxKSB7XHJcbiAgICAvLyAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gICByZXR1cm4gdmFsdWU7XHJcbiAgICAvLyB9XHJcbiAgICAvLyByZXR1cm4gZWxlbWVudFtoZWFkZXJdO1xyXG4gIH1cclxuXHJcbiAgc2hvd0J1dHRvbihidXR0b246IFNtYXJ0VGFibGVCdXR0b24sIGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGJ1dHRvbi5zaG93QnV0dG9uSWYpIHtcclxuICAgICAgcmV0dXJuIGJ1dHRvbi5zaG93QnV0dG9uSWYoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWQoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmlzUm93RGlzYWJsZWRQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS5zZWxlY3RhYmxlUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGFibGUgPSB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoXHJcbiAgICAgICAgZWxlbWVudCxcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0YWJsZVByb3BlcnR5TmFtZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGFibGUgPT09IG51bGwgPyBmYWxzZSA6ICFzZWxlY3RhYmxlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZChlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmlzU2VsZWN0ZWQoXHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICA/IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXHJcbiAgICAgICAgICA6IGVsZW1lbnRcclxuICAgICAgKSA/PyBmYWxzZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3JpZ2luYWxQcm9wZXJ0eShoZWFkZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaGVhZGVyLnN0YXJ0c1dpdGgoJ2RhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIGhlYWRlci5zdWJzdHJpbmcoJ2RhdGEuJy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VSZXNvdXJjZShlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWVsZW1lbnQuaWNvbnMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IHByb3BlcnR5ID0gdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcik7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZWxlbWVudC5pY29ucykuc29tZSgoa2V5KSA9PiBrZXkgPT09IHByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIGdldEltYWdlUmVzb3VyY2VJY29ucyhlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogSW1hZ2VSZXNvdXJjZVtdIHtcclxuICAgIGlmIChlbGVtZW50Py5pY29ucykge1xyXG4gICAgICBsZXQgaWNvbkNvZGVzID0gZWxlbWVudD8uaWNvbnNbdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcildO1xyXG4gICAgICByZXR1cm4gaWNvbkNvZGVzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUljb24oZWxlbWVudDogYW55LCBoZWFkZXI6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5pY29uc1t0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKV0uaWRlbnRpZmllcjtcclxuICB9XHJcblxyXG4gIGdldEltYWdlUmVzb3VyY2VDb2xvcihlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBlbGVtZW50Lmljb25zW3RoaXMub3JpZ2luYWxQcm9wZXJ0eShoZWFkZXIpXS5jb2xvciA/PyAncHJpbWFyeSc7XHJcbiAgfVxyXG5cclxuICBnZXRJbWFnZVJlc291cmNlU3R5bGUocmVzb3VyY2U6IEltYWdlUmVzb3VyY2UpOiBhbnkge1xyXG4gICAgcmV0dXJuIHJlc291cmNlLnN0eWxlID8gcmVzb3VyY2Uuc3R5bGUgOiB7fTtcclxuICB9XHJcblxyXG4gIG9wZW5EZWZhdWx0QWN0aW9uc01lbnUocm93OiBhbnkpIHtcclxuICAgIGxldCBhY3Rpb25Db2Rlc0Zyb21Sb3cgPSByb3c/LmFjdGlvbnM/Lm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUpO1xyXG4gICAgaWYgKCFhY3Rpb25Db2Rlc0Zyb21Sb3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpbHRlcmVkQWN0aW9ucyA9IHRoaXMuc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9ucz8uZmlsdGVyKChhY3Rpb246IFNtYXJ0VGFibGVCdXR0b24pID0+XHJcbiAgICAgIGFjdGlvbkNvZGVzRnJvbVJvdy5pbmNsdWRlcyhhY3Rpb24uY29kZSEpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChmaWx0ZXJlZEFjdGlvbnMgJiYgZmlsdGVyZWRBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGZpbHRlcmVkQWN0aW9ucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKHJvdyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbk1lbnVDb21wb25lbnRzXHJcbiAgICAgICAgLnRvQXJyYXkoKVxyXG4gICAgICAgIC5maW5kKChjb21wOiBEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50KSA9PiBjb21wLnJvdy5pZCA9PT0gcm93LmlkKVxyXG4gICAgICAgID8ub3BlbkRlZmF1bHRBY3Rpb25zTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdEFjdGlvbnNGb3JSb3coZWxlbWVudDogYW55KTogU21hcnRUYWJsZUJ1dHRvbltdIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCBhY3Rpb25Db2Rlc0Zyb21Sb3cgPSBlbGVtZW50Py5hY3Rpb25zPy5tYXAoKGFjdGlvbjogVWlBY3Rpb24pID0+IGFjdGlvbi5jb2RlKTtcclxuICAgIGlmIChhY3Rpb25Db2Rlc0Zyb21Sb3cpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9ucz8uZmlsdGVyKChhY3Rpb246IFNtYXJ0VGFibGVCdXR0b24pID0+XHJcbiAgICAgICAgYWN0aW9uQ29kZXNGcm9tUm93LmluY2x1ZGVzKGFjdGlvbi5jb2RlISlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class SmartObjectUtility {
|
|
2
|
+
static getValueByPath(model, key) {
|
|
3
|
+
// Attempt to directly access the key in case it's fully represented with dots
|
|
4
|
+
if (key in model) {
|
|
5
|
+
return model[key];
|
|
6
|
+
}
|
|
7
|
+
// Split the key into parts on the dot for deeper checks
|
|
8
|
+
const keys = key.split('.');
|
|
9
|
+
// Use a recursive helper function to traverse the object
|
|
10
|
+
return this.traverse(model, keys, 0);
|
|
11
|
+
}
|
|
12
|
+
static traverse(currentModel, keys, index) {
|
|
13
|
+
if (index >= keys.length) {
|
|
14
|
+
return currentModel;
|
|
15
|
+
}
|
|
16
|
+
if (!currentModel) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
// Reconstruct possible keys with dots
|
|
20
|
+
for (let i = index; i < keys.length; i++) {
|
|
21
|
+
const reconstructedKey = keys.slice(index, i + 1).join('.');
|
|
22
|
+
if (reconstructedKey in currentModel) {
|
|
23
|
+
// Recursively continue with the next index past the current reconstructed key
|
|
24
|
+
return this.traverse(currentModel[reconstructedKey], keys, i + 1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtb2JqZWN0LXV0aWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1vYmplY3QtdXRpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBVSxFQUFFLEdBQVc7UUFDbEQsOEVBQThFO1FBQzlFLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRTtZQUNoQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUVELHdEQUF3RDtRQUN4RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVCLHlEQUF5RDtRQUN6RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFpQixFQUFFLElBQWMsRUFBRSxLQUFhO1FBQ3RFLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDeEIsT0FBTyxZQUFZLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsc0NBQXNDO1FBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1RCxJQUFJLGdCQUFnQixJQUFJLFlBQVksRUFBRTtnQkFDcEMsOEVBQThFO2dCQUM5RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNuRTtTQUNGO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFNtYXJ0T2JqZWN0VXRpbGl0eSB7XHJcbiAgcHVibGljIHN0YXRpYyBnZXRWYWx1ZUJ5UGF0aChtb2RlbDogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAvLyBBdHRlbXB0IHRvIGRpcmVjdGx5IGFjY2VzcyB0aGUga2V5IGluIGNhc2UgaXQncyBmdWxseSByZXByZXNlbnRlZCB3aXRoIGRvdHNcclxuICAgIGlmIChrZXkgaW4gbW9kZWwpIHtcclxuICAgICAgcmV0dXJuIG1vZGVsW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3BsaXQgdGhlIGtleSBpbnRvIHBhcnRzIG9uIHRoZSBkb3QgZm9yIGRlZXBlciBjaGVja3NcclxuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICAvLyBVc2UgYSByZWN1cnNpdmUgaGVscGVyIGZ1bmN0aW9uIHRvIHRyYXZlcnNlIHRoZSBvYmplY3RcclxuICAgIHJldHVybiB0aGlzLnRyYXZlcnNlKG1vZGVsLCBrZXlzLCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHRyYXZlcnNlKGN1cnJlbnRNb2RlbDogYW55LCBrZXlzOiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBpZiAoaW5kZXggPj0ga2V5cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGN1cnJlbnRNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWN1cnJlbnRNb2RlbCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlY29uc3RydWN0IHBvc3NpYmxlIGtleXMgd2l0aCBkb3RzXHJcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJlY29uc3RydWN0ZWRLZXkgPSBrZXlzLnNsaWNlKGluZGV4LCBpICsgMSkuam9pbignLicpO1xyXG4gICAgICBpZiAocmVjb25zdHJ1Y3RlZEtleSBpbiBjdXJyZW50TW9kZWwpIHtcclxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGluZGV4IHBhc3QgdGhlIGN1cnJlbnQgcmVjb25zdHJ1Y3RlZCBrZXlcclxuICAgICAgICByZXR1cm4gdGhpcy50cmF2ZXJzZShjdXJyZW50TW9kZWxbcmVjb25zdHJ1Y3RlZEtleV0sIGtleXMsIGkgKyAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|