@wavemaker/app-ng-runtime 11.14.1-next.28343 → 11.14.1-rc.236
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/components/base/bundles/index.umd.js +8 -8
- package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
- package/components/base/fesm2022/index.mjs +8 -8
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +5 -5
- package/components/basic/search/bundles/index.umd.js +4 -4
- package/components/basic/search/esm2022/scrollable.directive.mjs +3 -3
- package/components/basic/search/esm2022/search.component.mjs +3 -3
- package/components/basic/search/fesm2022/index.mjs +4 -4
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/scrollable.directive.d.ts +1 -1
- package/components/data/list/bundles/index.umd.js +33 -2
- package/components/data/list/esm2022/list.component.mjs +34 -3
- package/components/data/list/fesm2022/index.mjs +33 -2
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list.component.d.ts +4 -0
- package/components/data/table/bundles/index.umd.js +34 -3
- package/components/data/table/esm2022/table.component.mjs +35 -4
- package/components/data/table/fesm2022/index.mjs +34 -3
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table.component.d.ts +4 -0
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +3 -2
- package/runtime/base/esm2022/services/app.manager.service.mjs +4 -3
- package/runtime/base/fesm2022/index.mjs +3 -2
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
|
@@ -374,8 +374,10 @@ export class ListComponent extends StylableComponent {
|
|
|
374
374
|
this.allowpagesizechange = nv;
|
|
375
375
|
}
|
|
376
376
|
else if (key === 'pagesizeoptions') {
|
|
377
|
-
this.
|
|
378
|
-
this.
|
|
377
|
+
this.prevPagesizeoptions = this.sanitizeCommaSeparatedIntegers(ov);
|
|
378
|
+
this.pagesizeoptions = this.sanitizeCommaSeparatedIntegers(nv);
|
|
379
|
+
if (this.allowpagesizechange)
|
|
380
|
+
this.setDefaultPageSize(nv);
|
|
379
381
|
}
|
|
380
382
|
else {
|
|
381
383
|
super.onPropertyChange(key, nv, ov);
|
|
@@ -392,6 +394,10 @@ export class ListComponent extends StylableComponent {
|
|
|
392
394
|
nv = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b)[0];
|
|
393
395
|
this.pagesize = nv;
|
|
394
396
|
}
|
|
397
|
+
if (this.isPageSizeOptionsChanged()) {
|
|
398
|
+
this.dataNavigator.defaultPageSizeOptions = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b) || [];
|
|
399
|
+
this.dataNavigator.pageSizeOptions = [...this.dataNavigator.defaultPageSizeOptions];
|
|
400
|
+
}
|
|
395
401
|
}
|
|
396
402
|
this.updatedPageSize = nv;
|
|
397
403
|
this.dataNavigator.updatedPageSize = nv;
|
|
@@ -400,6 +406,31 @@ export class ListComponent extends StylableComponent {
|
|
|
400
406
|
};
|
|
401
407
|
this.dataNavigator.widget.maxResults = nv;
|
|
402
408
|
this.dataNavigator.maxResults = nv;
|
|
409
|
+
if (this.datasource) {
|
|
410
|
+
this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
isPageSizeOptionsChanged() {
|
|
414
|
+
return !isEqual(this.prevPagesizeoptions, this.pagesizeoptions);
|
|
415
|
+
}
|
|
416
|
+
selectPageSize(pagesize) {
|
|
417
|
+
if (!this.allowpagesizechange && !pagesize)
|
|
418
|
+
return;
|
|
419
|
+
if (pagesize < this.dataNavigator.pageSizeOptions[0] || pagesize > this.dataNavigator.pageSizeOptions[this.dataNavigator.pageSizeOptions.length - 1]
|
|
420
|
+
|| !this.dataNavigator.pageSizeOptions.includes(Number(pagesize))) {
|
|
421
|
+
pagesize = this.dataNavigator.pageSizeOptions[0];
|
|
422
|
+
}
|
|
423
|
+
this.dataNavigator.onPageSizeChange(undefined, pagesize);
|
|
424
|
+
}
|
|
425
|
+
sanitizeCommaSeparatedIntegers(input) {
|
|
426
|
+
if (!input)
|
|
427
|
+
return "";
|
|
428
|
+
const uniqueNumbers = Array.from(new Set(input
|
|
429
|
+
.split(",")
|
|
430
|
+
.map(v => v.trim())
|
|
431
|
+
.filter(v => /^-?\d+$/.test(v))
|
|
432
|
+
.map(v => Math.abs(parseInt(v, 10)))));
|
|
433
|
+
return uniqueNumbers.join(",");
|
|
403
434
|
}
|
|
404
435
|
onItemClick(evt, $listItem) {
|
|
405
436
|
let selectCount;
|
|
@@ -1140,4 +1171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1140
1171
|
type: ViewChildren,
|
|
1141
1172
|
args: [ListItemDirective]
|
|
1142
1173
|
}] } });
|
|
1143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9saXN0L3NyYy9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGdDQUFnQyxFQUVuQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFFSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUdOLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUNILFVBQVUsRUFDVixlQUFlLEVBQ2YsR0FBRyxFQUNILFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDZCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQ0gsS0FBSyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsR0FBRyxFQUNILEdBQUcsRUFDSCxRQUFRLEVBQ1IsT0FBTyxFQUNQLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBQ1gsSUFBSSxFQUNKLEdBQUcsRUFDSCxHQUFHLEVBQ0gsV0FBVyxFQUNYLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLFFBQVEsRUFDWCxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFJbkIsTUFBTSxXQUFXLEdBQUcsd0JBQXdCLENBQUM7QUFDN0MsTUFBTSxhQUFhLEdBQUcsRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsQ0FBQztBQVd0RSxNQUFNLE9BQU8sYUFBYyxTQUFRLGlCQUFpQjthQUN6QyxvQkFBZSxHQUFHLGFBQWEsRUFBRSxBQUFsQixDQUFtQjtJQStGekMsWUFDSSxHQUFhLEVBQ2IsS0FBd0IsRUFDeEIsUUFBb0IsRUFDcEIsR0FBUSxFQUNSLFdBQXdCLEVBQ3hCLE1BQWMsRUFDZSxhQUFxQixFQUNuQixlQUF1QixFQUMzQixXQUFtQixFQUNoQixjQUFzQixFQUNyQixZQUFvQixFQUNwQixZQUFvQixFQUNuRCxnQkFBa0MsRUFDbEMsaUJBQW9DLEVBQ0ksZUFBb0I7UUFFNUQsSUFBSSxTQUFTLEdBQWEsSUFBSSxDQUFDO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUE1RDFELHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQTZEeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFFckMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFFMUMsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxtQkFBbUIsR0FBRztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUMsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDNUQsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2xELG1IQUFtSDtnQkFDbkgsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNsQixjQUFjLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO2dCQUNELElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQztvQkFDbkQsT0FBTztnQkFDWCxDQUFDO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUM7WUFDRix1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQzdDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ3BELE9BQU87Z0JBQ1gsQ0FBQztnQkFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUM3QixDQUFDLENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxZQUFZLENBQUMsS0FBSztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsVUFBVSxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksVUFBVSxDQUFDLFVBQWtCLEVBQUUsS0FBYztRQUNoRCxJQUFJLE9BQU8sQ0FBQztRQUNaLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNyQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDakQsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDVixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO1FBQ0QsS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVwQixPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNMLENBQUM7SUFFRCxnR0FBZ0c7SUFDekYsT0FBTyxDQUFDLEtBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsSUFBUztRQUNyQixJQUFJLElBQUksWUFBWSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDTCxDQUFDO0lBQ08sa0JBQWtCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUYsTUFBTTtRQUNGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBSztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksUUFBUSxDQUFDO1lBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDUCxRQUFRLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSztRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFLO1FBQ1gsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxRQUFRLENBQUM7WUFDYixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLFFBQVEsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hELENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFLO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQUk7UUFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNwQyw0RkFBNEY7Z0JBQzVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNyRCxDQUFDO3FCQUFNLENBQUMsQ0FBQyw2QkFBNkI7b0JBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU0sd0JBQXdCLENBQUMsR0FBd0IsRUFBRSxNQUFhO1FBQ25FLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNwRCw0RUFBNEU7WUFDNUUsSUFBSSxlQUFlLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCw0REFBNEQ7SUFDckQsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDekksT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQWM7UUFDdkMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN2TCxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFpQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRS9ELElBQUksWUFBWSxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV4RSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekUsTUFBTSxXQUFXLEdBQVcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxSCxJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ3hELENBQUM7eUJBQU0sSUFBSSxZQUFZLEdBQUcsVUFBVSxFQUFFLENBQUM7d0JBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt3QkFDcEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3RFLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO29CQUMvRCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksTUFBTSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUNqQyxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QyxJQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO3dCQUN4RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUN4RCxDQUFDO3lCQUFNLElBQUksWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO3dCQUNuQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7d0JBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN0RSxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztvQkFDL0QsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixZQUFZLEdBQUcsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDckIsT0FBTztnQkFDWCxDQUFDO2dCQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckMsQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osWUFBWSxHQUFHLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7WUFDaEMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixZQUFZLEdBQUcsWUFBWSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMvRixJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsT0FBTztnQkFDWCxDQUFDO2dCQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFlBQVksR0FBRyxZQUFZLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1lBQ2hDLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsdUlBQXVJO1lBQ3ZJLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3pELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztnQkFDckQsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN0QixPQUFPO1lBQ1gsQ0FBQztZQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksQ0FBQyxZQUFZLDZCQUE2QixDQUFDO2dCQUN2RSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLENBQUMsWUFBWSwyQkFBMkIsQ0FBQztnQkFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUNELGlCQUFpQjtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVcsRUFBRSxFQUFPLEVBQUUsRUFBUTtRQUMzQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pELE9BQU87WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDOUIsSUFBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQTtZQUM1RSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUM5QixtRkFBbUY7WUFDbkYsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixPQUFPO1lBQ1gsQ0FBQztZQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDOUQsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUMvQixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDWCxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssZUFBZSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDcEMsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLHVHQUF1RztnQkFDdkcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQywyREFBMkQ7WUFDckYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQy9CLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLHFCQUFxQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sSUFBRyxHQUFHLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDbkMsQ0FBQzthQUFLLENBQUM7WUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQU87UUFDekIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMvQixFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQywwREFBMEQ7WUFDbEYsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDOUIsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDTCxDQUFDO1FBQ0csSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHO1lBQ3pCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVyxDQUFDLEdBQVEsRUFBRSxTQUE0QjtRQUNyRCxJQUFJLFdBQW1CLENBQUM7UUFFeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFNBQVMsQ0FBQztZQUM3RCw0REFBNEQ7WUFDNUQsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFNUcseUNBQXlDO1lBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzlELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzlELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO29CQUMzRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVDLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLEVBQUUsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUVoRCxrREFBa0Q7Z0JBQ2xELElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO29CQUNmLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQTBCLEVBQUUsRUFBRTt3QkFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQ3BDLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7NEJBQ2xDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDMUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUN0QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7WUFFTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN6QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztnQkFDL0QsQ0FBQztZQUNMLENBQUM7WUFDRCxVQUFVLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUVELGtDQUFrQztJQUMzQixLQUFLO1FBQ1IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWSxDQUFDLEdBQVE7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUEwQjtRQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ1osT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QscUJBQXFCO1FBQ3JCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6SyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDNUIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBRWhFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxHQUFrQixFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ04sR0FBRyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ04sR0FBRyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVU7UUFDTixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUFpQixFQUFFLFNBQWlCLEVBQUUsYUFBdUIsRUFBRSxNQUFXO1FBQzVGLHNGQUFzRjtRQUN0RixNQUFNLFlBQVksR0FBRztZQUNqQixHQUFHLEVBQUUsT0FBTztZQUNaLFNBQVMsRUFBRSxVQUFVO1NBQ3hCLENBQUM7UUFDRixJQUFJLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDOUIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsRUFDcEMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDSixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxlQUFlLEdBQXNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRTs0QkFDaEMsTUFBTSxFQUFFLGVBQWU7NEJBQ3ZCLE1BQU0sRUFBRSxHQUFHOzRCQUNYLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTt5QkFDN0IsQ0FBQyxDQUFDO29CQUNQLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUFPO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUN4QyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ2xELENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUs7UUFDbkMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLHFNQUFxTTtRQUNyTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3pFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHNCQUFzQixDQUFDLElBQUk7UUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDWCxLQUFLLGVBQWUsQ0FBQyxLQUFLO2dCQUN0QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsTUFBTTtZQUNWLEtBQUssZUFBZSxDQUFDLE1BQU07Z0JBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QixNQUFNO1lBQ1YsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDO1lBQzlCLEtBQUssZUFBZSxDQUFDLE9BQU87Z0JBQ3hCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxlQUFlLENBQUMsS0FBSztnQkFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzdCLE1BQU07WUFDVixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUNyQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsTUFBTTtZQUNWLEtBQUssZUFBZSxDQUFDLE1BQU07Z0JBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixNQUFNO1lBQ1YsS0FBSyxlQUFlLENBQUMsUUFBUTtnQkFDekIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxlQUFlLENBQUMsTUFBa0I7UUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkcsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsVUFBVSxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBTTtRQUN2QixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBRW5CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBRTFCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hGLCtHQUErRztnQkFDL0csTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBRUQsc0ZBQXNGO1lBQ3RGLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbE0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO29CQUNoRSxNQUFNLEVBQUUsQ0FBQztpQkFDWixDQUFDLENBQUM7WUFDUCxDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUVELHVFQUF1RTtJQUMvRCxlQUFlO1FBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFekMsYUFBYSxDQUFDLE9BQU8sR0FBRztZQUNwQixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO1NBQ2xDLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBRWpDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFDRCw4SEFBOEg7UUFDOUgsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCwwQ0FBMEM7UUFDMUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsQ0FBQztRQUNELDhIQUE4SDtRQUM5SCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsd0ZBQXdGO1FBQ3hGLHVGQUF1RjtRQUN2RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDN0IsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFDZixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFDakQsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsY0FBYyxFQUNuQixnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FDcEIsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBTTtRQUMxQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9HLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLHFEQUFxRDtnQkFDakYsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDakUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDOUcsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ3BDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JFLGdHQUFnRztZQUNoRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNMLENBQUM7SUFFRCxtREFBbUQ7SUFDM0MsaUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsbUZBQW1GO0lBQzNFLGtCQUFrQjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkIsVUFBVSxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxrQkFBa0IsQ0FBQyxTQUFTO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNwQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDakQsNEdBQTRHO2dCQUM1RyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDL0IsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVPLDBCQUEwQixDQUFDLHlCQUEwQjtRQUN6RCxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsV0FBVyxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdkMsbUdBQW1HO1lBQ25HLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsNEhBQTRIO2dCQUM1SCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3JELFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUNsQyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxZQUFpQjt3QkFDeEQsT0FBTyxZQUFZLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQztvQkFDekMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLG1CQUF3QyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBdUIsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0RCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxtQkFBd0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ2pGLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUN2RCxDQUFDO2dCQUNELEdBQUcsR0FBRyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO2dCQUNwQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDdkMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLFdBQVcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssTUFBTSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNyRSxJQUFJLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDO1lBQzNGLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0RBQWdELENBQUMsQ0FBQztZQUNwSCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssdUJBQXVCLENBQUMsU0FBNEIsRUFBRSx5QkFBMEI7UUFDcEYseURBQXlEO1FBQ3pELElBQUksU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDM0Msd0dBQXdHO2dCQUN4RyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDSixtR0FBbUc7Z0JBQ25HLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM5QixDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztnQkFDckUsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDOUIsQ0FBQztZQUNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssWUFBWSxDQUFDLFNBQXVDO1FBQ3hELDhLQUE4SztRQUM5SyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQix1RkFBdUY7WUFDdkYsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3RyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQzFILE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRSxXQUFXLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO2dCQUNyRCxnRUFBZ0U7Z0JBQ2hFLElBQUksbUJBQW1CLEtBQUssV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDcEcsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDdEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDOzRCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ3RDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFdEQsd0dBQXdHO1FBQ3hHLGtFQUFrRTtRQUNsRSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM5SCxNQUFNLFVBQVUsR0FBc0IsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUV0RCxJQUNJLENBQUMsVUFBVSxDQUFDLFdBQVc7Z0JBQ3ZCLElBQUksQ0FBQyxhQUFhO2dCQUNsQiw4SEFBOEg7Z0JBQzlILENBQUMsQ0FDRyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztvQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ3JCLEVBQ0gsQ0FBQztnQkFDQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7Z0JBQzVELDZCQUE2QjtnQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLFFBQVEsR0FBc0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNYLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO29CQUNqQywyQkFBMkI7b0JBQzNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2pFLDBJQUEwSTtZQUMxSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN6QyxJQUFJLFFBQVEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFaEcsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvRixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hELHlDQUF5QztZQUN6QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNwRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCwyQ0FBMkM7SUFDbkMsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCwwQkFBMEI7SUFDbEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSx5RkFBeUY7UUFDekYsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakcsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzVGLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1lBQzdDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELDhCQUE4QjtJQUN0QixRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxZQUFhO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUIsMkVBQTJFO1FBQzNFLE1BQU0sUUFBUSxHQUFHLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU5QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUUzQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLHFEQUFxRDtRQUNyRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRXpFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUV0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsTUFBTSxZQUFZLEdBQUc7Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDdkIsQ0FBQztZQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdDQUF3QztJQUNoQyxZQUFZO1FBQ2hCLElBQUksUUFBUSxDQUFDO1FBQ2IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDBHQUEwRztZQUNwSSxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLHNEQUFzRDtZQUMvRSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUMsQ0FBQyxzQ0FBc0M7WUFDM0MsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUN0QixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUc7WUFDWixRQUFRLEVBQUUsUUFBUTtTQUNyQixDQUFDO1FBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUVsRCxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVySCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUM7SUFJeEQsQ0FBQztJQUVELGtEQUFrRDtJQUMxQyxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsNkNBQTZDO0lBQ3JDLGtCQUFrQixDQUFDLEtBQWE7UUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQUMsSUFBdUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHdCQUF3QixDQUFDLEdBQVE7UUFDckMsSUFBSSxRQUEyQixDQUFDO1FBQ2hDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEIsUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNKLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWM7UUFDcEIsT0FBTyxNQUFNLENBQUMsQ0FBQywyQ0FBMkM7SUFDOUQsQ0FBQztJQUVELHVGQUF1RjtJQUMvRSx3QkFBd0I7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ25FLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLG1DQUFtQztZQUNuQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQzsrR0EvdUNRLGFBQWEseUtBdUdQLGdCQUFnQiw4QkFDaEIsa0JBQWtCLDhCQUNsQixjQUFjLDhCQUNkLGlCQUFpQiw4QkFDakIsa0JBQWtCLDhCQUNsQixrQkFBa0IsK0ZBR3JCLGtCQUFrQjttR0EvR3JCLGFBQWEsMERBSlg7WUFDUCxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7U0FDcEMsK1hBU2dCLGVBQWUsNEVBRXJCLG1CQUFtQiwrREFDaEIsaUJBQWlCLHVFQ2hIbkMsc2tQQW9LQSwyQ0RyRVksWUFBWSxvU0FBRSxvQkFBb0IsbUZBQUUsbUJBQW1CLDRHQUFFLGlCQUFpQjs7NEZBT3pFLGFBQWE7a0JBVHpCLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLFlBQ3pFLGFBQWEsYUFFWjt3QkFDUCxrQkFBa0IsZUFBZTtxQkFDcEM7OzBCQXlHSSxTQUFTOzJCQUFDLGdCQUFnQjs7MEJBQzFCLFNBQVM7MkJBQUMsa0JBQWtCOzswQkFDNUIsU0FBUzsyQkFBQyxjQUFjOzswQkFDeEIsU0FBUzsyQkFBQyxpQkFBaUI7OzBCQUMzQixTQUFTOzJCQUFDLGtCQUFrQjs7MEJBQzVCLFNBQVM7MkJBQUMsa0JBQWtCOzswQkFHNUIsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUFHLFFBQVE7eUNBNUdYLFlBQVk7c0JBQXpDLFlBQVk7dUJBQUMsY0FBYztnQkFFWSxzQkFBc0I7c0JBQTdELFlBQVk7dUJBQUMsd0JBQXdCO2dCQUNHLHVCQUF1QjtzQkFBL0QsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBQ0wsYUFBYTtzQkFBOUMsZUFBZTt1QkFBQyxlQUFlO2dCQUVBLGFBQWE7c0JBQTVDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNHLFNBQVM7c0JBQXpDLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFQUExZX1NUWUxFU19UWVBFLFxuICAgIGNvbmZpZ3VyZURuRCxcbiAgICBERUJPVU5DRV9USU1FUyxcbiAgICBleHRyYWN0RGF0YVNvdXJjZU5hbWUsXG4gICAgZ2V0T3JkZXJlZERhdGFzZXQsXG4gICAgZ3JvdXBEYXRhLFxuICAgIGhhbmRsZUhlYWRlckNsaWNrLFxuICAgIE5BVklHQVRJT05fVFlQRSxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgU3R5bGFibGVDb21wb25lbnQsXG4gICAgc3R5bGVyLFxuICAgIFRleHRDb250ZW50RGlyZWN0aXZlLFxuICAgIFRvRGF0ZVBpcGUsXG4gICAgdG9nZ2xlQWxsSGVhZGVycyxcbiAgICB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyxcbiAgICBXaWRnZXRSZWZcbn0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICRpbnZva2VXYXRjaGVycyxcbiAgICBBcHAsXG4gICAgQXBwRGVmYXVsdHMsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBnZW5lcmF0ZUdVSWQsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGlzRGF0YVNvdXJjZUVxdWFsLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc01vYmlsZSxcbiAgICBpc09iamVjdCxcbiAgICBub29wLFxuICAgIFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHNldExpc3RDbGFzcyxcbiAgICBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgIHN3aXRjaENsYXNzXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7UGFnaW5hdGlvbkNvbXBvbmVudH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9wYWdpbmF0aW9uJztcbmltcG9ydCB7QnV0dG9uQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dC9idXR0b24nO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vbGlzdC5wcm9wcyc7XG5pbXBvcnQge0xpc3RJdGVtRGlyZWN0aXZlfSBmcm9tICcuL2xpc3QtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtMaXN0QW5pbWF0b3J9IGZyb20gJy4vbGlzdC5hbmltYXRvcic7XG5pbXBvcnQge1xuICAgIGNsb25lLFxuICAgIGNsb25lRGVlcCxcbiAgICBmb3JFYWNoLFxuICAgIGdldCxcbiAgICBoYXMsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNBcnJheSxcbiAgICBpc0VtcHR5LFxuICAgIGlzRXF1YWwsXG4gICAgaXNOdW1iZXIsXG4gICAgaXNTdHJpbmcsXG4gICAgaXNVbmRlZmluZWQsXG4gICAgbGFzdCxcbiAgICBtYXgsXG4gICAgbWluLFxuICAgIHB1bGxBbGxXaXRoLFxuICAgIHB1bGxBdCxcbiAgICByZW1vdmUsXG4gICAgc29tZSxcbiAgICB0b051bWJlclxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWxpdmVsaXN0IGFwcC1wYW5lbCc7XG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1saXN0JywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUZXh0Q29udGVudERpcmVjdGl2ZSwgUGFnaW5hdGlvbkNvbXBvbmVudCwgTGlzdEl0ZW1EaXJlY3RpdmVdLFxuICAgIHNlbGVjdG9yOiAnZGl2W3dtTGlzdF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKExpc3RDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0Q29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2xpc3RUZW1wbGF0ZScpIGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8RWxlbWVudFJlZj47XG5cbiAgICBAQ29udGVudENoaWxkKCdsaXN0TGVmdEFjdGlvblRlbXBsYXRlJykgbGlzdExlZnRBY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8RWxlbWVudFJlZj47XG4gICAgQENvbnRlbnRDaGlsZCgnbGlzdFJpZ2h0QWN0aW9uVGVtcGxhdGUnKSBsaXN0UmlnaHRBY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8RWxlbWVudFJlZj47XG4gICAgQENvbnRlbnRDaGlsZHJlbihCdXR0b25Db21wb25lbnQpIGJ0bkNvbXBvbmVudHM7XG5cbiAgICBAVmlld0NoaWxkKFBhZ2luYXRpb25Db21wb25lbnQpIGRhdGFOYXZpZ2F0b3I7XG4gICAgQFZpZXdDaGlsZHJlbihMaXN0SXRlbURpcmVjdGl2ZSkgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8TGlzdEl0ZW1EaXJlY3RpdmU+O1xuICAgIHB1YmxpYyBub0RhdGFGb3VuZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgbGFzdFNlbGVjdGVkSXRlbTogTGlzdEl0ZW1EaXJlY3RpdmU7XG4gICAgcHVibGljIGZpZWxkRGVmczogQXJyYXk8YW55PjtcbiAgICBwdWJsaWMgZGlzYWJsZWl0ZW07XG4gICAgcHVibGljIG5hdmlnYXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgbmF2aWdhdGlvbmFsaWduOiBzdHJpbmc7XG4gICAgcHVibGljIHBhZ2VzaXplOiBudW1iZXI7XG4gICAgcHVibGljIGRhdGFzZXQ6IGFueTtcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3Q6IGJvb2xlYW47XG4gICAgcHVibGljIHNlbGVjdGZpcnN0aXRlbTogYm9vbGVhbjtcbiAgICBwdWJsaWMgb3JkZXJieTogc3RyaW5nO1xuICAgIHB1YmxpYyBsb2FkaW5naWNvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBwYWdpbmF0aW9uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgb25kZW1hbmRtZXNzYWdlOiBzdHJpbmc7XG4gICAgcHVibGljIGxvYWRpbmdkYXRhbXNnOiBzdHJpbmc7XG4gICAgcHVibGljIHNlbGVjdGlvbmxpbWl0OiBudW1iZXI7XG4gICAgcHVibGljIGluZlNjcm9sbDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZW5hYmxlcmVvcmRlcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgaXRlbXNwZXJyb3c6IHN0cmluZztcbiAgICBwdWJsaWMgaXRlbWNsYXNzOiBzdHJpbmc7XG4gICAgcHVibGljIHNlbGVjdGVkSXRlbVdpZGdldHM6IEFycmF5PFdpZGdldFJlZj4gfCBXaWRnZXRSZWY7XG4gICAgcHVibGljIHZhcmlhYmxlSW5mbGlnaHQ7XG4gICAgcHVibGljIG5hbWU7XG4gICAgcHVibGljIGN1cnJlbnRQYWdlO1xuICAgIHB1YmxpYyBkaXJlY3Rpb247XG4gICAgcHVibGljIHRhYmluZGV4O1xuICAgIHB1YmxpYyBoYW5kbGVIZWFkZXJDbGljazogRnVuY3Rpb247XG4gICAgcHVibGljIHRvZ2dsZUFsbEhlYWRlcnM6IHZvaWQ7XG4gICAgcHVibGljIGdyb3VwYnk6IHN0cmluZztcbiAgICBwdWJsaWMgY29sbGFwc2libGU6IHN0cmluZztcbiAgICBwdWJsaWMgZGF0ZVBpcGU6IFRvRGF0ZVBpcGU7XG4gICAgcHVibGljIGJpbmRpdGVtY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgYmluZGRpc2FibGVpdGVtOiBzdHJpbmc7XG4gICAgcHVibGljIGJpbmRkYXRhc2V0OiBzdHJpbmc7XG4gICAgcHVibGljIG1vdXNlRW50ZXJDQjogc3RyaW5nO1xuICAgIHB1YmxpYyBtb3VzZUxlYXZlQ0I6IHN0cmluZztcbiAgICBwdWJsaWMgcHVsbHRvcmVmcmVzaDogYm9vbGVhbjtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgICBwdWJsaWMgc3ViaGVhZGluZzogc3RyaW5nO1xuICAgIHB1YmxpYyBpY29uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgbGlzdGNsYXNzOiBhbnk7XG4gICAgcHVibGljIHN0YXRlaGFuZGxlcjogYW55O1xuICAgIHB1YmxpYyBjdXJyZW50SW5kZXg6IG51bWJlcjtcbiAgICBwdWJsaWMgdGl0bGVJZDogc3RyaW5nO1xuICAgIHB1YmxpYyBhbGxvd3BhZ2VzaXplY2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHBhZ2VzaXplb3B0aW9uczogc3RyaW5nO1xuICAgIHB1YmxpYyB1cGRhdGVkUGFnZVNpemU7XG4gICAgcHVibGljIGFjdHVhbFBhZ2VTaXplO1xuICAgIF9pc0RlcGVuZGVudDtcbiAgICBwcml2YXRlIGl0ZW1zUGVyUm93Q2xhc3M6IHN0cmluZztcbiAgICBwcml2YXRlIGZpcnN0U2VsZWN0ZWRJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcbiAgICBwcml2YXRlIG5hdmlnYXRvck1heFJlc3VsdFdhdGNoOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JSZXN1bHRXYXRjaDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbmF2Q29udHJvbHM6IHN0cmluZztcbiAgICBwcml2YXRlIG9uRGVtYW5kTG9hZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9pdGVtczogQXJyYXk8YW55PjtcbiAgICBwcml2YXRlIGRhdGFOYXZpZ2F0b3JXYXRjaGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgZGF0YXNvdXJjZTogYW55O1xuICAgIHByaXZhdGUgc2hvd05hdmlnYXRpb246IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZW9yZGVyUHJvcHM6IGFueTtcbiAgICBwcml2YXRlIGFwcDogYW55O1xuICAgIHByaXZhdGUgYXBwRGVmYXVsdHM6IGFueTtcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lO1xuICAgIHByaXZhdGUgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZTtcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZTtcbiAgICBwcml2YXRlIGJpbmRkYXRhc291cmNlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBtYXRjaDogc3RyaW5nO1xuICAgIHByaXZhdGUgZGF0ZWZvcm1hdDogc3RyaW5nO1xuICAgIHByaXZhdGUgZ3JvdXBlZERhdGE6IGFueTtcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgICBwcml2YXRlIHByb21pc2VSZXNvbHZlckZuOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIHByb3BzSW5pdFByb21pc2U6IFByb21pc2U8YW55PjtcbiAgICBwcml2YXRlICR1bEVsZTogYW55O1xuICAgIHByaXZhdGUgX2xpc3RBbmltYXRvcjogTGlzdEFuaW1hdG9yO1xuICAgIHByaXZhdGUgX2xpc3RlbmVyRGVzdHJveWVyczogQXJyYXk8YW55PjtcbiAgICBwcml2YXRlIGRlYm91bmNlZEZldGNoTmV4dERhdGFzZXRPblNjcm9sbDogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBpc0RhdGFDaGFuZ2VkOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNMaXN0RWxlbWVudE1vdmFibGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhcmlhVGV4dDogU3RyaW5nO1xuICAgIHByaXZhdGUgX3BhZ2VMb2FkO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbXNFeGlzdDtcblxuICAgIHByaXZhdGUgdG91Y2hpbmc7XG4gICAgcHJpdmF0ZSB0b3VjaGVkO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZGF0ZVBpcGU6IFRvRGF0ZVBpcGUsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBhcHBEZWZhdWx0czogQXBwRGVmYXVsdHMsXG4gICAgICAgIG5nWm9uZTogTmdab25lLFxuICAgICAgICBAQXR0cmlidXRlKCdpdGVtY2xhc3MuYmluZCcpIGJpbmRpdGVtY2xhc3M6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzYWJsZWl0ZW0uYmluZCcpIGJpbmRkaXNhYmxlaXRlbTogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBiaW5kZGF0YXNldDogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc291cmNlLmJpbmQnKSBiaW5kZGF0YXNvdXJjZTogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdtb3VzZWVudGVyLmV2ZW50JykgbW91c2VFbnRlckNCOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ21vdXNlbGVhdmUuZXZlbnQnKSBtb3VzZUxlYXZlQ0I6IHN0cmluZyxcbiAgICAgICAgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICAgICAgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgbGV0IHJlc29sdmVGbjogRnVuY3Rpb24gPSBub29wO1xuICAgICAgICBjb25zdCBwcm9wc0luaXRQcm9taXNlID0gbmV3IFByb21pc2UocmVzID0+IHJlc29sdmVGbiA9IHJlcyk7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0LCBwcm9wc0luaXRQcm9taXNlKTtcbiAgICAgICAgdGhpcy5wcm9wc0luaXRQcm9taXNlID0gcHJvcHNJbml0UHJvbWlzZTtcbiAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZXJGbiA9IHJlc29sdmVGbjtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuU0hFTEwpO1xuICAgICAgICB0aGlzLmNkUmVmID0gY2RSZWY7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmRhdGVQaXBlID0gZGF0ZVBpcGU7XG4gICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZSA9IHN0YXRlUGVyc2lzdGVuY2U7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UgPSBwYWdpbmF0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuYmluZGl0ZW1jbGFzcyA9IGJpbmRpdGVtY2xhc3M7XG4gICAgICAgIHRoaXMuYmluZGRpc2FibGVpdGVtID0gYmluZGRpc2FibGVpdGVtO1xuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gYmluZGRhdGFzZXQ7XG4gICAgICAgIHRoaXMubW91c2VFbnRlckNCID0gbW91c2VFbnRlckNCO1xuICAgICAgICB0aGlzLm1vdXNlTGVhdmVDQiA9IG1vdXNlTGVhdmVDQjtcbiAgICAgICAgdGhpcy5iaW5kZGF0YXNvdXJjZSA9IGJpbmRkYXRhc291cmNlO1xuXG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICB0aGlzLmFwcERlZmF1bHRzID0gYXBwRGVmYXVsdHM7XG4gICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSAhYmluZGRhdGFzZXQ7XG4gICAgICAgIHRoaXMudGl0bGVJZCA9ICd3bWxpc3QtJyArIGdlbmVyYXRlR1VJZCgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZXMgcGFnaW5hdGlvbiwgZmlsdGVyLCBzb3J0IGV0YyBvcHRpb25zIGZvciBzZXJ2aWNlIGFuZCBjcnVkIHZhcmlhYmxlc1xuICAgICAgICB0aGlzLl9saXN0ZW5lckRlc3Ryb3llcnMgPSBbXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ2NoZWNrLXN0YXRlLXBlcnNpc3RlbmNlLW9wdGlvbnMnLCBvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZU5hbWUgPSBnZXQodGhpcy5kYXRhc291cmNlLCAnbmFtZScpO1xuICAgICAgICAgICAgICAgIC8vIGluIFByZWZhYnMsIHRoaXMuZGF0YXNvdXJjZSBpcyBub3QgcmVzb2x2ZWQgYXQgdGhlIHRpbWUgb2YgdmFyaWFibGUgaW52b2NhdGlvbiwgc28gYWRkaXRpb25hbCBjaGVjayBpcyByZXF1aXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VOYW1lID0gZXh0cmFjdERhdGFTb3VyY2VOYW1lKHRoaXMuYmluZGRhdGFzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2V0KG9wdGlvbnMsICd2YXJpYWJsZS5uYW1lJykgIT09IGRhdGFTb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdGF0ZVBhcmFtcyhvcHRpb25zKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gU2hvdyBsb2FkaW5nIHN0YXR1cyBiYXNlZCBvbiB0aGUgdmFyaWFibGUgbGlmZSBjeWNsZVxuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCB0aGlzLmhhbmRsZUxvYWRpbmcuYmluZCh0aGlzKSksXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3NldHVwLWN1ZC1saXN0ZW5lcicsIHBhcmFtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpICE9PSBwYXJhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2lzRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3RlZGl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLl9pdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuX2l0ZW1zWzBdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkaXRlbShpdGVtcykge1xuICAgICAgICB0aGlzLl9pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmRlc2VsZWN0TGlzdEl0ZW1zKCk7XG5cbiAgICAgICAgaWYgKGlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5zZWxlY3RJdGVtKGl0ZW0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgbGlzdCBvZiB3aWRnZXRzIHByZXNlbnQgb24gbGlzdCBpdGVtIGJ5IGNvbnNpZGVyaW5nIG5hbWUgYW5kIGluZGV4IG9mIHRoZSB3aWRnZXQuXG4gICAgICogSWYgd2UgZGlkJ250IHBhc3MgaW5kZXgsIGl0IHJldHVybnMgYXJyYXkgb2YgYWxsIHRoZSB3aWRnZXRzIHdoaWNoIGFyZSBtYXRjaGluZyB0byB3aWRnZXQgbmFtZVxuICAgICAqIEBwYXJhbSB3aWRndGVOYW1lOiBOYW1lIG9mIHRoZSB3aWRnZXRcbiAgICAgKiBAcGFyYW0gaW5kZXg6IEluZGV4IG9mIHRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2lkZ2V0cyh3aWRndGVOYW1lOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGxldCAkdGFyZ2V0O1xuICAgICAgICBjb25zdCByZXRWYWwgPSBbXTtcblxuICAgICAgICBpZiAoIXdpZGd0ZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKGluZGV4KSkge1xuICAgICAgICAgICAgZm9yRWFjaCh0aGlzLmxpc3RJdGVtcy50b0FycmF5KCksIChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICR0YXJnZXQgPSBnZXQoZWwuY3VycmVudEl0ZW1XaWRnZXRzLCB3aWRndGVOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoJHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXRWYWwucHVzaCgkdGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCA9ICtpbmRleCB8fCAwO1xuXG4gICAgICAgICR0YXJnZXQgPSBnZXQodGhpcy5saXN0SXRlbXMudG9BcnJheSgpLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKCR0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBbZ2V0KCR0YXJnZXQuY3VycmVudEl0ZW1XaWRnZXRzLCB3aWRndGVOYW1lKV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxpc3RpdGVtIHJlZmVyZW5jZSBieSBpbmRleCB2YWx1ZS4gVGhpcyByZWZlcnMgdG8gdGhlIHNhbWUgbWV0aG9kIGdldExpc3RJdGVtQnlJbmRleC5cbiAgICBwdWJsaWMgZ2V0SXRlbShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExpc3RJdGVtQnlJbmRleChpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpbmRleCBvZiBsaXN0SXRlbShsaXN0SXRlbURpcmVjdGl2ZSAvIGxpc3RJdGVtT2JqZWN0KVxuICAgICAqIElmIGl0ZW0gaXMgYSBkaXJlY3RpdmUsIGluZGV4IGlzIGZldGNoZWQgZnJvbSBsaXN0SXRlbXNcbiAgICAgKiBJZiBpdGVtIGlzIGFuIG9iamVjdCwgaW5kZXggaXMgZmV0Y2hlZCBmcm9tIGZpZWxkRGVmc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbmRleChpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdEl0ZW1JbmRleChpdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWVsZERlZnMuZmluZEluZGV4KChvYmopID0+IGlzRXF1YWwob2JqLCBpdGVtKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgIHB1YmxpYyBnZXRVcGRhdGVkUGFnZVNpemUoKSB7XG4gICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVkUGFnZVNpemU7XG4gICAgIH1cblxuICAgIGNyZWF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRGVwZW5kZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJXTUV2ZW50KCdpbnNlcnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRSb3coaXRlbT8pIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRGVwZW5kZW50KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEl0ZW07XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRJdGVtUmVmQnlJbmRleE9yTW9kZWwoaXRlbSkuaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcldNRXZlbnQoJ3VwZGF0ZScsIGxpc3RJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShpdGVtPykge1xuICAgICAgICB0aGlzLmVkaXRSb3coaXRlbSk7XG4gICAgfVxuXG4gICAgZGVsZXRlUm93KGl0ZW0/KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgbGV0IGxpc3RJdGVtO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBsaXN0SXRlbSA9IHRoaXMuZ2V0SXRlbVJlZkJ5SW5kZXhPck1vZGVsKGl0ZW0pLml0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJXTUV2ZW50KCdkZWxldGUnLCBsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWxldGUoaXRlbT8pIHtcbiAgICAgICAgdGhpcy5kZWxldGVSb3coaXRlbSk7XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGlzRGF0YVNvdXJjZUVxdWFsKGRhdGEudmFyaWFibGUsIGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RhdGVQYXJhbXMoZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZGF0YS5hY3RpdmU7XG4gICAgICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTIzNzcyXSBVcGRhdGUgbm9kYXRhZm91bmQgZmxhZyBvbmNlIHRoZSByZXNwb25zZSBpcyByZWNpZXZlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEVsZSA9IGRhdGEuZGF0YT8ucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cztcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRvdGFsRWxlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gdG90YWxFbGUgPT09IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gdG90YWxlbGVtZW50cyBpcyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IGlzRW1wdHkoZGF0YS5kYXRhPy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyTGlzdEl0ZW1TZWxlY3Rpb24oJGVsOiBKUXVlcnk8SFRNTEVsZW1lbnQ+LCAkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICgkZWwgJiYgJGVsWzBdKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0SXRlbUNvbnRleHQgPSAkZWwuZGF0YSgnbGlzdEl0ZW1Db250ZXh0Jyk7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIGNsaWNrIGV2ZW50IG9ubHkgaWYgdGhlIGxpc3QgaXRlbSBpcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGxpc3QuXG4gICAgICAgICAgICBpZiAobGlzdEl0ZW1Db250ZXh0Lmxpc3RDb21wb25lbnQgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSXRlbUNsaWNrKCRldmVudCwgbGlzdEl0ZW1Db250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3JtIG90aGVyIGRhdGEgd2lkZ2V0cyBsaWtlIHRhYmxlLlxuICAgIHB1YmxpYyBleGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAoW0RhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSwgRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX1NFUlZFUl9GSUxURVJdLmluY2x1ZGVzKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlS2V5RG93bigkZXZlbnQsIGFjdGlvbjogc3RyaW5nKSB7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlICE9PSAxMyAmJiAkZXZlbnQua2V5Q29kZSAhPT0gOSAmJiAhKCgkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZm9ybS1jb250cm9sJykgfHwgJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ25vdGUtZWRpdGFibGUnKSkgJiYgJGV2ZW50LmtleUNvZGUgPT09IDMyKSkge1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT4gPSB0aGlzLmxpc3RJdGVtcztcblxuICAgICAgICBsZXQgcHJlc2VudEluZGV4OiBudW1iZXIgPSB0aGlzLmdldExpc3RJdGVtSW5kZXgodGhpcy5sYXN0U2VsZWN0ZWRJdGVtKTtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RJbmRleDogbnVtYmVyID0gdGhpcy5nZXRMaXN0SXRlbUluZGV4KHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0Q291bnQ6IG51bWJlciA9IGlzQXJyYXkodGhpcy5zZWxlY3RlZGl0ZW0pID8gdGhpcy5zZWxlY3RlZGl0ZW0ubGVuZ3RoIDogKGlzT2JqZWN0KHRoaXMuc2VsZWN0ZWRpdGVtKSA/IDEgOiAwKTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdzZWxlY3RQcmV2Jykge1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZW50SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJlc2VudEluZGV4IDw9IGZpcnN0SW5kZXgpICYmIHRoaXMuY2hlY2tTZWxlY3Rpb25MaW1pdChzZWxlY3RDb3VudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbih0aGlzLmxhc3RTZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXNlbnRJbmRleCA+IGZpcnN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24odGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0aW9ubGltaXRleGNlZWQnLCB7JGV2ZW50fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3NlbGVjdE5leHQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXNlbnRJbmRleCA8IGxpc3RJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocHJlc2VudEluZGV4ID49IGZpcnN0SW5kZXgpICYmIHRoaXMuY2hlY2tTZWxlY3Rpb25MaW1pdChzZWxlY3RDb3VudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbih0aGlzLmxhc3RTZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXNlbnRJbmRleCA8IGZpcnN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24odGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0aW9ubGltaXRleGNlZWQnLCB7JGV2ZW50fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2ZvY3VzUHJldicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdEVsZW1lbnRNb3ZhYmxlKSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudEluZGV4ID0gcHJlc2VudEluZGV4IDw9IDAgPyAwIDogKHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXNlbnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2RWx0ID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgcHJldkVsdC5uYXRpdmVFbGVtZW50LmJlZm9yZSh0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcywgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgICAgICBbYXJyW3ByZXNlbnRJbmRleCAtIDFdLCBhcnJbcHJlc2VudEluZGV4XV0gPSBbYXJyW3ByZXNlbnRJbmRleF0sIGFycltwcmVzZW50SW5kZXggLSAxXV07XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMucmVzZXQoYXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHByZXNlbnRJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFUZXh0ID0gXCJzZWxlY3RlZCBcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudEluZGV4ID0gcHJlc2VudEluZGV4IDw9IDAgPyAwIDogKHByZXNlbnRJbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHByZXNlbnRJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IFwic2VsZWN0ZWQgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZm9jdXNOZXh0Jykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0RWxlbWVudE1vdmFibGUpIHtcbiAgICAgICAgICAgICAgICBwcmVzZW50SW5kZXggPSBwcmVzZW50SW5kZXggPCAobGlzdEl0ZW1zLmxlbmd0aCAtIDEpID8gKHByZXNlbnRJbmRleCkgOiAobGlzdEl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZW50SW5kZXggPT09IHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsdCA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG5leHRFbHQubmF0aXZlRWxlbWVudC5hZnRlcih0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcywgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgICAgICBbYXJyW3ByZXNlbnRJbmRleF0sIGFycltwcmVzZW50SW5kZXggKyAxXV0gPSBbYXJyW3ByZXNlbnRJbmRleCArIDFdLCBhcnJbcHJlc2VudEluZGV4XV07XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMucmVzZXQoYXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHByZXNlbnRJbmRleCArIDI7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IFwic2VsZWN0ZWQgXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9IHByZXNlbnRJbmRleCA8IChsaXN0SXRlbXMubGVuZ3RoIC0gMSkgPyAocHJlc2VudEluZGV4ICsgMSkgOiAobGlzdEl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHByZXNlbnRJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IFwic2VsZWN0ZWQgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGVudGVyIGNsaWNrIGlzIHByZXNzZWQgb24gdGhlIGl0ZW0gd2hpY2ggaXMgbm90IHRoZSBsYXN0IHNlbGVjdGVkIGl0ZW0sIHRoZSBmaW5kIHRoZSBpdGVtIGZyb20gd2hpY2ggdGhlIGV2ZW50IGlzIG9yaWdpbmF0ZWQuXG4gICAgICAgICAgICBpZiAocHJlc2VudEluZGV4ID09PSAtMSB8fCAhJCgkZXZlbnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRsaSA9ICQoJGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnbGkuYXBwLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgICAgIGNvbnN0ICR1bCA9ICRsaS5jbG9zZXN0KCd1bC5hcHAtbGl2ZWxpc3QtY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgcHJlc2VudEluZGV4ID0gJHVsLmZpbmQoJ2xpLmFwcC1saXN0LWl0ZW0nKS5pbmRleCgkbGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGljaygkZXZlbnQsIHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3NwYWNlJykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzTGlzdEVsZW1lbnRNb3ZhYmxlID0gIXRoaXMuaXNMaXN0RWxlbWVudE1vdmFibGU7XG4gICAgICAgICAgICB0aGlzLm9uSXRlbUNsaWNrKCRldmVudCwgdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHByZXNlbnRJbmRleCArIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpc3RFbGVtZW50TW92YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBgSXRlbSAke3RoaXMuY3VycmVudEluZGV4fSBncmFiYmVkLCBjdXJyZW50IHBvc2l0aW9uIGA7XG4gICAgICAgICAgICAgICAgdGhpcy4kdWxFbGUuZGF0YSgnb2xkSW5kZXgnLCBwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFUZXh0ID0gYEl0ZW0gJHt0aGlzLmN1cnJlbnRJbmRleH0gZHJvcHBlZCwgZmluYWwgcG9zaXRpb24gYDtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVXBkYXRlKCRldmVudCwgdW5kZWZpbmVkLCBwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldEFjdHVhbFBhZ2VTaXplKCkgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgMjA7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICBpZiAoIW52ICYmIHRoaXMuYmluZGRhdGFzb3VyY2UgJiYgIXRoaXMuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25EYXRhU2V0Q2hhbmdlKG52KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdkYXRhc291cmNlJykge1xuICAgICAgICAgICAgaWYodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKXtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVNldENoYW5nZSh0aGlzLmRhdGFzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc3NpY1xuICAgICAgICAgICAgaWYgKG52ID09PSAnQWR2YW5jZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgbnYsIG92KTtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uVHlwZUNoYW5nZShudik7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRpb25DbGFzcyA9IHRoaXMucGFnaW5hdGlvbmNsYXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2l0ZW1zcGVycm93Jykge1xuICAgICAgICAgICAgc2V0TGlzdENsYXNzKHRoaXMpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3B1bGx0b3JlZnJlc2gnICYmIG52KSB7XG4gICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ3B1bGxUb1JlZnJlc2g6ZW5hYmxlJyk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvUHVsbFRvUmVmcmVzaCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3BhZ2luYXRpb25jbGFzcycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGRpbmcgc2V0VGltZW91dCBiZWNhdXNlIGluIHBhZ2luYXRpb24gY29tcG9uZW50IHVwZGF0ZU5hdlNpemUgbWV0aG9kIGlzIG92ZXJyaWRpbmcgbmF2aWdhdGlvbmNsYXNzXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRhdGFOYXZpZ2F0b3IubmF2aWdhdGlvbkNsYXNzID0gbnYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3BhZ2VzaXplJykge1xuICAgICAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IG52OyAvLyBtYWludGFpbiBkZWZhdWx0IHBhZ2Ugc2l6ZSB0byBjYWxjdWxhdGUgcGFnZXNpemUgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnZVNpemUobnYpXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZW5hYmxlcmVvcmRlcicpIHtcbiAgICAgICAgICAgIGlmIChudiAmJiB0aGlzLiR1bEVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aGlzLnRpdGxlSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRG5EKCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kdWxFbGUuc29ydGFibGUoJ2VuYWJsZScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLiR1bEVsZSAmJiAhbnYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5yZW1vdmVBdHRyKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kdWxFbGUuc29ydGFibGUoJ2Rpc2FibGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhbGxvd3BhZ2VzaXplY2hhbmdlJykge1xuICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZihrZXkgPT09ICdwYWdlc2l6ZW9wdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZW9wdGlvbnMgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdlU2l6ZShudilcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREZWZhdWx0UGFnZVNpemUobnY6IGFueSl7XG4gICAgIGlmICh0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdlc2l6ZScpKSB7XG4gICAgICAgICAgICBudiA9IGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzaXplID0gbnY7IC8vIHVwZGF0aW5nIHRoZSBkZWZhdWx0IHBhZ2VzaXplIHRvIHVzZXIgc2VsZWN0ZWQgcGFnZXNpemVcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VzaXplb3B0aW9ucykge1xuICAgICAgICAgICAgbnYgPSB0aGlzLnBhZ2VzaXplb3B0aW9ucz8uc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5zb3J0KChhLCBiKSA9PiBhIC0gYilbMF1cbiAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBudjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVkUGFnZVNpemUgPSBudjtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnVwZGF0ZWRQYWdlU2l6ZSA9IG52O1xuXG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgbWF4UmVzdWx0czogbnZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzID0gbnY7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSXRlbUNsaWNrKGV2dDogYW55LCAkbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgIGxldCBzZWxlY3RDb3VudDogbnVtYmVyO1xuXG4gICAgICAgIGlmICghJGxpc3RJdGVtLmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5maXJzdFNlbGVjdGVkSXRlbSB8fCAkbGlzdEl0ZW07XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHNlbGVjdENvdW50IHZhbHVlIGJhc2VkIG51bWJlciBvZiBpdGVtcyBzZWxlY3RlZC5cbiAgICAgICAgICAgIHNlbGVjdENvdW50ID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggOiAoaXNPYmplY3QodGhpcy5zZWxlY3RlZGl0ZW0pID8gMSA6IDApO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGluZyBtdWx0aXNlbGVjdCBmb3IgbW9iaWxlIGRldmljZVxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QgJiYgaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpIHx8ICRsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKCRsaXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnQ6IGV2dH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGV2dC5jdHJsS2V5IHx8IGV2dC5tZXRhS2V5KSAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tTZWxlY3Rpb25MaW1pdChzZWxlY3RDb3VudCkgfHwgJGxpc3RJdGVtLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkbGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24oJGxpc3RJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdGlvbmxpbWl0ZXhjZWVkJywgeyRldmVudDogZXZ0fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQuc2hpZnRLZXkgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9ICRsaXN0SXRlbS5jb250ZXh0LmluZGV4O1xuICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gdGhpcy5maXJzdFNlbGVjdGVkSXRlbS5jb250ZXh0LmluZGV4O1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgZmlyc3QgaXMgZ3JlYXRlciB0aGFuIGxhc3QsIHRoZW4gc3dhcCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QgPiBsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBbZmlyc3QsIGZpcnN0ID0gbGFzdF1bMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQobGFzdCAtIGZpcnN0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKCgkbGlJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkbGlJdGVtLmNvbnRleHQuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gZmlyc3QgJiYgaW5kZXggPD0gbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24oJGxpSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkbGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnQ6IGV2dH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoISRsaXN0SXRlbS5pc0FjdGl2ZSB8fCBzZWxlY3RDb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbigkbGlzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gJGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVtcHR5IHRoZSBsaXN0IGNvbnRlbnQgb24gY2xlYXJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmllbGREZWZzKFtdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZXNlbGVjdHMgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgKiBAcGFyYW0gdmFsOiBpbmRleCB8IG1vZGVsIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIGRlc2VsZWN0SXRlbSh2YWw6IGFueSkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IHRoaXMuZ2V0SXRlbVJlZkJ5SW5kZXhPck1vZGVsKHZhbCk7XG4gICAgICAgIGlmIChsaXN0SXRlbSAmJiBsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbihsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZWxlY3RzIGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICogQHBhcmFtIHZhbDogaW5kZXggfCBtb2RlbCBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtKHZhbCwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLmdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbCh2YWwpO1xuICAgICAgICBpZiAoIWxpc3RJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbihsaXN0SXRlbSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9jdXMgdGhlIGVsZW1lbnQuXG4gICAgICAgIGxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVIZWFkZXJDbGljayA9IG5vb3A7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRGZXRjaE5leHREYXRhc2V0T25TY3JvbGwgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmRlYm91bmNlZEZldGNoTmV4dERhdGFzZXRPblNjcm9sbCh0aGlzLmRhdGFOYXZpZ2F0b3IsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSwgdGhpcyk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdO1xuICAgICAgICB0aGlzLnJlb3JkZXJQcm9wcyA9IHtcbiAgICAgICAgICAgIG1pbkluZGV4OiBudWxsLFxuICAgICAgICAgICAgbWF4SW5kZXg6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmVyRm4oKTtcbiAgICAgICAgdGhpcy5wcm9wc0luaXRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgICAgICB0aGlzLnNldFVwQ1VESGFuZGxlcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtV2lkZ2V0cyA9IHRoaXMubXVsdGlzZWxlY3QgPyBbXSA6IHt9O1xuICAgICAgICAgICAgdmFyIGVsZSA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVyZW9yZGVyICYmICF0aGlzLmdyb3VwYnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZS5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVyZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGUucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwYnkgJiYgdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSGVhZGVyQ2xpY2sgPSBoYW5kbGVIZWFkZXJDbGljaztcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUFsbEhlYWRlcnMgPSB0b2dnbGVBbGxIZWFkZXJzLmJpbmQodW5kZWZpbmVkLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldExpc3RDbGFzcyh0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0dXBIYW5kbGVycygpO1xuICAgICAgICBjb25zdCAkdWwgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuICAgICAgICBzdHlsZXIoJHVsIGFzIEhUTUxFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5TQ1JPTExBQkxFX0NPTlRBSU5FUik7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgIGlmICgkdWwpIHtcbiAgICAgICAgICAgICAgICAkdWwuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlcmVvcmRlcikge1xuICAgICAgICAgICAgaWYgKCR1bCkge1xuICAgICAgICAgICAgICAgICR1bC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5fbGlzdEFuaW1hdG9yICYmIHRoaXMuX2xpc3RBbmltYXRvci4kYnRuU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0QW5pbWF0b3IuJGJ0blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyRGVzdHJveWVycy5mb3JFYWNoKGQgPT4gZCAmJiBkKCkpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXRhY2goKTtcbiAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICAvLyB0YXAgYW5kIGRvdWJsZVRhcCBldmVudHMgYXJlIG5vdCBnZXR0aW5nIHByb3BhZ2F0ZWQuU28sIHVzaW5nIG1vdXNlIGV2ZW50cyBpbnN0ZWFkLlxuICAgICAgICBjb25zdCB0b3VjaFRvTW91c2UgPSB7XG4gICAgICAgICAgICB0YXA6ICdjbGljaycsXG4gICAgICAgICAgICBkb3VibGV0YXA6ICdkYmxjbGljaydcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGluY2x1ZGVzKFsnY2xpY2snLCAndGFwJywgJ2RibGNsaWNrJywgJ2RvdWJsZXRhcCddLCBldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0b3VjaFRvTW91c2VbZXZlbnROYW1lXSB8fCBldmVudE5hbWUsXG4gICAgICAgICAgICAgICAgKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAkKGV2dC50YXJnZXQpLmNsb3Nlc3QoJy5hcHAtbGlzdC1pdGVtJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0SXRlbUNvbnRleHQ6IExpc3RJdGVtRGlyZWN0aXZlID0gdGFyZ2V0LmRhdGEoJ2xpc3RJdGVtQ29udGV4dCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0SXRlbUNvbnRleHQuZGlzYWJsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldDogbGlzdEl0ZW1Db250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQ6IGV2dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogbGlzdEl0ZW1Db250ZXh0Lml0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbmZpZ3VyZWRTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVN0YXRlUGFyYW1zKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucyA9IG9wdGlvbnMub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMucGFnZSA9IHdpZGdldFN0YXRlLnBhZ2luYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyV01FdmVudChldmVudE5hbWUsIGl0ZW0/KSB7XG4gICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBtdWx0aXNlbGVjdCBmb3IgdGhlIGxpdmVsaXN0KExpc3Qgd2l0aCBmb3JtIHRlbXBsYXRlKSwgaW4gcnVuIG1vZGUgZGVsZXRpbmcgYSByZWNvcmQgaXMgZ2V0dGluZyBmYWlsZWQuIEJlY3Vhc2UgdGhlIHNlbGVjdGVkaXRlbSB3aWxsIGJlIGFycmF5IG9mIG9iamVjdHMuIFNvIGNvbnNpZGVyIHRoZSBsYXN0IG9iamVjdC5cbiAgICAgICAgbGV0IHJvdyA9IHRoaXMubXVsdGlzZWxlY3QgPyBsYXN0KHRoaXMuc2VsZWN0ZWRpdGVtKSA6IHRoaXMuc2VsZWN0ZWRpdGVtO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcm93ID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ3dtLWV2ZW50Jywge2V2ZW50TmFtZSwgd2lkZ2V0TmFtZTogdGhpcy5uYW1lLCByb3c6IHJvd30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXROYXZpZ2F0aW9uKCkge1xuICAgICAgICB0aGlzLnNob3dOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaW5mU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25EZW1hbmRMb2FkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVCYXNpY05hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuQkFTSUM7XG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlSW5saW5lTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5uYXZDb250cm9scyA9IE5BVklHQVRJT05fVFlQRS5JTkxJTkU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVDbGFzc2ljTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5uYXZDb250cm9scyA9IE5BVklHQVRJT05fVFlQRS5DTEFTU0lDO1xuICAgICAgICB0aGlzLnNob3dOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZVBhZ2VyTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5uYXZDb250cm9scyA9IE5BVklHQVRJT05fVFlQRS5QQUdFUjtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROYXZpZ2F0aW9uVHlwZU5vbmUoKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuTk9ORTtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlSW5maW5pdGVTY3JvbGwoKSB7XG4gICAgICAgIHRoaXMuaW5mU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZU9uRGVtYW5kTG9hZCgpIHtcbiAgICAgICAgdGhpcy5vbkRlbWFuZExvYWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIE5hdmlnYXRpb24gdHlwZSBmb3IgdGhlIGxpc3QuXG4gICAgICogQHBhcmFtIHR5cGVcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uTmF2aWdhdGlvblR5cGVDaGFuZ2UodHlwZSkge1xuICAgICAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbigpO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLkJBU0lDOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5JTkxJTkU6XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVJbmxpbmVOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5BRFZBTkNFRDpcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLkNMQVNTSUM6XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVDbGFzc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuUEFHRVI6XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVQYWdlck5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLk5PTkUgOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TmF2aWdhdGlvblR5cGVOb25lKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5TQ1JPTEw6XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVJbmZpbml0ZVNjcm9sbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuT05ERU1BTkQ6XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVPbkRlbWFuZExvYWQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBmaWVsZERlZnMgcHJvcGVydHksIGZpZWxkRGVmcyBpcyB0aGUgbW9kZWwgb2YgdGhlIExpc3QgQ29tcG9uZW50LlxuICAgICAqIGZpZWxkRGVmcyBpcyBhbiBBcnJheSB0eXBlLlxuICAgICAqIEBwYXJhbSBuZXdWYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUZpZWxkRGVmcyhuZXdWYWw6IEFycmF5PGFueT4pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5mU2Nyb2xsIHx8IHRoaXMub25EZW1hbmRMb2FkKSB7XG4gICAgICAgICAgICBbdGhpcy5maWVsZERlZnMsIHRoaXMuY3VycmVudFBhZ2VdID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS51cGRhdGVGaWVsZHNPblBhZ2luYXRpb24odGhpcywgbmV3VmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZzID0gbmV3VmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3JkZXJieSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZnMgPSBnZXRPcmRlcmVkRGF0YXNldCh0aGlzLmZpZWxkRGVmcywgdGhpcy5vcmRlcmJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cGJ5KSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWREYXRhID0gZ3JvdXBEYXRhKHRoaXMsIHRoaXMuZmllbGREZWZzLCB0aGlzLmdyb3VwYnksIHRoaXMubWF0Y2gsIHRoaXMub3JkZXJieSwgdGhpcy5kYXRlZm9ybWF0LCB0aGlzLmRhdGVQaXBlLCB1bmRlZmluZWQsIHRoaXMuYXBwRGVmYXVsdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB0aGlzLmxpc3RJdGVtcy5zZXREaXJ0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EYXRhQ2hhbmdlKG5ld1ZhbCkge1xuICAgICAgICAvLyBDaGVjayBmb3IgbmV3VmFsIGlzIG5vdCBlbXB0eVxuICAgICAgICBpZiAoIWlzRW1wdHkobmV3VmFsKSkge1xuXG4gICAgICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzRGF0YUNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjbG9uZSB0aGUgdGhlIGRhdGEgaW4gY2FzZSBvZiBsaXZlIGFuZCBzZXJ2aWNlIHZhcmlhYmxlcyB0byBwcmV2ZW50IHRoZSB0d28td2F5IGJpbmRpbmcgZm9yIHRoZXNlIHZhcmlhYmxlcy5cbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBjbG9uZURlZXAobmV3VmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG5ld1ZhbCkgJiYgIWlzQXJyYXkobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGlzRW1wdHkobmV3VmFsKSA/IFtdIDogW25ld1ZhbF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gbmV3VmFsLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBwYWdlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gMSBvbiBpbml0aWFsIGxvYWQgdGhlbiB3ZSByZW5kZXIgdGhlIGZpcnN0IHBhZ2UuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5vd25lciA9PT0gJ0FwcCcgJiYgKHRoaXMuaW5mU2Nyb2xsIHx8IHRoaXMub25EZW1hbmRMb2FkKSAmJiAhdGhpcy5jdXJyZW50UGFnZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUEFHSU5HX09QVElPTlMpLm51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAgICAgJ3BhZ2UnOiAxXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWRhdGFyZW5kZXInLCB7JGRhdGE6IG5ld1ZhbH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkRGVmcyhuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZERlZnMoW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlcyB0aGUgZGF0YVNvdXJjZSB3aGVuIHBhZ2luYXRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIENvbXBvbmVudC5cbiAgICBwcml2YXRlIHNldHVwRGF0YVNvdXJjZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YU5hdmlnYXRvciA9IHRoaXMuZGF0YU5hdmlnYXRvcjtcblxuICAgICAgICBkYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtYXhSZXN1bHRzOiB0aGlzLnBhZ2VzaXplIHx8IDIwXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwicmVzdWx0XCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIHBhZ2luYXRlZCBkYXRhIGlzIGRpc3BsYXllZCBpbiB0aGUgbGl2ZS1saXN0LiovXG4gICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2ggPSBkYXRhTmF2aWdhdG9yLnJlc3VsdEVtaXR0ZXIuc3Vic2NyaWJlKChuZXdWYWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFDaGFuZ2UobmV3VmFsKTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIC8qRGUtcmVnaXN0ZXIgdGhlIHdhdGNoIGlmIGl0IGlzIGV4aXN0cyAqL1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJtYXhSZXN1bHRzXCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIFwicGFnZVNpemVcIiBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICB0aGlzLm5hdmlnYXRvck1heFJlc3VsdFdhdGNoID0gZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzRW1pdHRlci5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZSA9IHZhbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCAyMDtcbiAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUJpbmRpbmcoJ2RhdGFzZXQnKTtcbiAgICAgICAgLy8gd2hlbiBsaXN0IGhhdmluZyBcImRhdGFzZXRib3VuZGV4cHJcIiBhdHRyIGluZGljYXRlcyB0aGF0IGxpc3QgaXMgYm91bmQgdG8gaXRlbSBjb250ZXh0XG4gICAgICAgIC8vIHdoZW4gZGF0YXNldCBpcyBib3VuZCB0byBcIml0ZW0uRklFTERcIiB0aGVuIGl0ZW0gY29udGV4dCBpcyBwYXNzZWQgYXMgdGhlIGRhdGFzb3VyY2UuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRCb3VuZEV4cHIgPSB0aGlzLmdldEF0dHIoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnNldEJpbmREYXRhU2V0KFxuICAgICAgICAgICAgdGhpcy5iaW5kZGF0YXNldCxcbiAgICAgICAgICAgIHRoaXMudmlld1BhcmVudCxcbiAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIgPyB0aGlzLmNvbnRleHQgOiB0aGlzLmRhdGFzb3VyY2UsXG4gICAgICAgICAgICB0aGlzLmRhdGFzZXQsXG4gICAgICAgICAgICB0aGlzLmJpbmRkYXRhc291cmNlLFxuICAgICAgICAgICAgZGF0YXNldEJvdW5kRXhwcixcbiAgICAgICAgICAgIHRoaXMuc3RhdGVoYW5kbGVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRhdGFTZXRDaGFuZ2UobmV3VmFsKSB7XG4gICAgICAgIGlmIChnZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdGhpcy5fcGFnZUxvYWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHsgLy8gbWFpbnRhaW4gdXBkYXRlZCBwYWdlIHNpemUgaW4gdGhlIHN0YXRlUGVyc2lzdGVuY2VcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAncGFnaW5hdGlvbicpIHx8IGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uIHx8IDEsIHBhZ2VzaXplOiB3aWRnZXRTdGF0ZS5wYWdlc2l6ZX0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNoYW5nZWQoe3BhZ2U6IHdpZGdldFN0YXRlLnBhZ2luYXRpb259LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiAmJiB0aGlzLm5hdmlnYXRpb24gIT09IE5BVklHQVRJT05fVFlQRS5OT05FKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cERhdGFTb3VyY2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFDaGFuZ2UobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5hdmlnYXRpb24gJiYgdGhpcy5uYXZpZ2F0aW9uICE9PSBOQVZJR0FUSU9OX1RZUEUuTk9ORSkge1xuICAgICAgICAgICAgLy8gSWYgbmF2aWdhdGlvbiBpcyBhbHJlYWR5IHNldHVwIGFuZCBkYXRhc291cmNlIGlzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgZGF0YXNvdXJjZSBvbiBuYXZpZ2F0aW9uXG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iuc2V0RGF0YVNvdXJjZSh0aGlzLmRhdGFzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxsIHRoZSBMaXN0SXRlbSdzIEFjdGl2ZSBzdGF0ZSBpcyBzZXQgdG8gZmFsc2UuXG4gICAgcHJpdmF0ZSBkZXNlbGVjdExpc3RJdGVtcygpIHtcbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaXNBY3RpdmUgPSBmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gRGVzZWxlY3QgYWxsIHRoZSBMaXN0SXRlbXMgYW5kIGNsZWFyIHRoZSBzZWxlY3RlZGl0ZW0oSW5PdXRCb3VuZCBQcm9wZXJ0eSBtb2RlbClcbiAgICBwcml2YXRlIGNsZWFyU2VsZWN0ZWRJdGVtcygpIHtcbiAgICAgICAgdGhpcy5kZXNlbGVjdExpc3RJdGVtcygpO1xuICAgICAgICB0aGlzLl9pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRoZSBMaXN0SXRlbURpcmVjdGl2ZSBpbnN0YW5jZSBieSBjaGVja2luZyB0aGUgZXF1YWxpdHkgb2YgdGhlIG1vZGVsLlxuICAgICAqIEBwYXJhbSBsaXN0TW9kZWw6IG1vZGVsIHRvIGJlIHNlYXJjaGVkIGZvclxuICAgICAqIEByZXR1cm5zIExpc3RJdGVtIGlmIHRoZSBtb2RlbCBpcyBtYXRjaGVkIGVsc2UgcmV0dXJuIG51bGwuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRMaXN0SXRlbUJ5TW9kZWwobGlzdE1vZGVsKTogTGlzdEl0ZW1EaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0SXRlbXMuZmluZCgobGlzdEl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBpdGVtT2JqID0gbGlzdEl0ZW0uaXRlbTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwYnkgJiYgIWhhcyhsaXN0TW9kZWwsICdfZ3JvdXBJbmRleCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZ3JvdXBieSBpcyBlbmFibGVkLCBpdGVtIGNvbnRhaW5zIF9ncm91cEluZGV4IHByb3BlcnR5IHdoaWNoIHNob3VsZCBiZSBleGNsdWRlZCB3aGlsZSBjb21wYXJpbmcgbW9kZWwuXG4gICAgICAgICAgICAgICAgaXRlbU9iaiA9IGNsb25lKGl0ZW1PYmopO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtT2JqLl9ncm91cEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRXF1YWwoaXRlbU9iaiwgbGlzdE1vZGVsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRJdGVtc1dpZGdldHMoc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgbGV0IG9iaiA9IHt9LCB3aWRnZXRTdGF0ZTtcbiAgICAgICAgY29uc3QgcGFnZU51bSA9IGdldCh0aGlzLmRhdGFOYXZpZ2F0b3IsICdkbi5jdXJyZW50UGFnZScpIHx8IDE7XG4gICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgc2VsZWN0ZWQgaXRlbXMgZm9yIGN1cnJlbnQgcGFnZSBhbmQgY29uc3RydWN0IG5ldyBvbmVzIGxhdGVyIGJlbG93LlxuICAgICAgICAgICAgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcykgfHwge307XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIG11bHRpc2VsZWN0IGlzIG9uIGFuZCBhbiBpdGVtIGlzIHNlbGVjdGVkIHdpdGhvdXQgcHJlc3NpbmcgQ1RSTCwgcHJldmlvdXNseSBzZWxlY3RlZCBpdGVtcyBpbiBzdGF0ZSBzaG91bGQgYmUgZW1wdHkuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QgJiYgdGhpcy5zZWxlY3RlZGl0ZW0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSA9IFtdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW06IGFueSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbS5wYWdlID09PSBwYWdlTnVtO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgYXMgQXJyYXk8V2lkZ2V0UmVmPikubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRJdGVtV2lkZ2V0cyBhcyBBcnJheTxXaWRnZXRSZWY+KS5wdXNoKGl0ZW0uY3VycmVudEl0ZW1XaWRnZXRzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgPSBpdGVtLmN1cnJlbnRJdGVtV2lkZ2V0cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqID0ge3BhZ2U6IHBhZ2VOdW0sIGluZGV4OiBpbmRleH07XG4gICAgICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpICYmIHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzb21lKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgb2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSA9IFtvYmpdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgIXN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIGlmICh1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW19KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyB0aGUgbGlzdEl0ZW0gYW5kIHVwZGF0ZXMgc2VsZWN0ZWRpdGVtIHByb3BlcnR5LlxuICAgICAqIElmIHRoZSBsaXN0SXRlbSBpcyBhbHJlYWR5IGEgc2VsZWN0ZWQgaXRlbSB0aGVuIGRlc2VsZWN0cyB0aGUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge0xpc3RJdGVtRGlyZWN0aXZlfSAkbGlzdEl0ZW06IEl0ZW0gdG8gYmUgc2VsZWN0ZWQgb2YgZGVzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKCRsaXN0SXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIC8vIGl0ZW0gaXMgbm90IGFsbG93ZWQgdG8gZ2V0IHNlbGVjdGVkIGlmIGl0IGlzIGRpc2FibGVkLlxuICAgICAgICBpZiAoJGxpc3RJdGVtICYmICEkbGlzdEl0ZW0uZGlzYWJsZUl0ZW0pIHtcbiAgICAgICAgICAgIGxldCBpdGVtID0gJGxpc3RJdGVtLml0ZW07XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cGJ5ICYmIGhhcyhpdGVtLCAnX2dyb3VwSW5kZXgnKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGdyb3VwYnkgaXMgZW5hYmxlZCwgaXRlbSBjb250YWlucyBfZ3JvdXBJbmRleCBwcm9wZXJ0eSB3aGljaCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBzZWxlY3RlZGl0ZW0uXG4gICAgICAgICAgICAgICAgaXRlbSA9IGNsb25lKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLl9ncm91cEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCRsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gcHVsbEFsbFdpdGgodGhpcy5faXRlbXMsIFtpdGVtXSwgaXNFcXVhbCk7XG4gICAgICAgICAgICAgICAgJGxpc3RJdGVtLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIG11bHRpc2VsZWN0IGlzIGZhbHNlLCBjbGVhciB0aGUgc2VsZWN0SXRlbSBsaXN0IGJlZm9yZSBhZGRpbmcgYW4gaXRlbSB0byB0aGUgc2VsZWN0SXRlbSBsaXN0LlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0Jywge3dpZGdldDogJGxpc3RJdGVtLCAkZGF0YTogaXRlbX0pO1xuICAgICAgICAgICAgICAgICRsaXN0SXRlbS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSXRlbXNXaWRnZXRzKHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGlzIEludm9rZWQgd2hlbiB0aGUgbW9kZWwgZm9yIHRoZSBMaXN0IFdpZGdldCBpcyBjaGFuZ2VkLlxuICAgICAqIEBwYXJhbSB7UXVlcnlMaXN0PExpc3RJdGVtRGlyZWN0aXZlPn0gbGlzdEl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbkxpc3RSZW5kZXIobGlzdEl0ZW1zOiBRdWVyeUxpc3Q8TGlzdEl0ZW1EaXJlY3RpdmU+KSB7XG4gICAgICAgIC8vIEFkZGVkIHJlbmRlciBjYWxsYmFjayBldmVudC4gVGhpcyBtZXRob2Qob25MaXN0UmVuZGVyKSBpcyBjYWxsaW5nIG11bHRpcGxlIHRpbWVzIHNvIGNoZWNraW5nIGlzRGF0YWNoYW5nZWQgZmxhZyBiZWNhdXNlIHRoaXMgZmFsZyBpcyBjaGFuZ2VkIHdoZW5ldmVyIG5ldyBkYXRhIGlzIHJlbmRlcmVkLlxuICAgICAgICBpZiAodGhpcy5pc0RhdGFDaGFuZ2VkKSB7XG4gICAgICAgICAgICAvLyBXaGVuZXZlciBkYXRhc2V0IGlzIGNoYW5nZWQsIHRyaWdnZXIgd2F0Y2hlcnMgdG8gZXZhbHVhdGUgbGlzdGl0ZW0gYmluZCBleHByZXNzaW9ucy5cbiAgICAgICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncmVuZGVyJywgeyRkYXRhOiB0aGlzLmZpZWxkRGVmc30pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRGF0YUNoYW5nZWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIGxpc3RJdGVtcy5sZW5ndGggJiYgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0KSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXNMZW5ndGggPSBpc0FycmF5KHRoaXMuc2VsZWN0ZWRpdGVtKSA/IHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCA6IHRvTnVtYmVyKCFpc0VtcHR5KHRoaXMuc2VsZWN0ZWRpdGVtKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSBnZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnBhZ2luYXRpb24gPSB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uIHx8IDE7XG4gICAgICAgICAgICAgICAgLy8gdG8gcHJldmVudCBpdGVtIHNlbGVjdGlvbiBmcm9tIGJlaW5nIHRyaWdnZXJlZCBtb3JlIHRoYW4gb25jZVxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zTGVuZ3RoICE9PSB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ubGVuZ3RoICYmIHdpZGdldFN0YXRlLnBhZ2luYXRpb24gPT09IGN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5wYWdlID09PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtLmluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBpc0FycmF5KHRoaXMuc2VsZWN0ZWRpdGVtKSA/IHRoaXMuc2VsZWN0ZWRpdGVtIDogW3RoaXMuc2VsZWN0ZWRpdGVtXTtcblxuICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gbnVsbDtcblxuICAgICAgICAvLyBkb24ndCBzZWxlY3QgZmlyc3QgaXRlbSBpZiBtdWx0aS1zZWxlY3QgaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3QgaXRlbSBpcyBhbHJlYWR5IHNlbGVjdGVkIGluIHRoZSBsaXN0LlxuICAgICAgICAvLyBkb24ndCBzZWxlY3QgZmlyc3QgaXRlbSBpZiBzdGF0ZSBpbmZvcm1hdGlvbiBoYXMgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgaWYgKGxpc3RJdGVtcy5sZW5ndGggJiYgdGhpcy5zZWxlY3RmaXJzdGl0ZW0gJiYgISh0aGlzLl9pdGVtcy5sZW5ndGggJiYgdGhpcy5tdWx0aXNlbGVjdCkgJiYgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgJGZpcnN0SXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUgPSBsaXN0SXRlbXMuZmlyc3Q7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhJGZpcnN0SXRlbS5kaXNhYmxlSXRlbSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhQ2hhbmdlZCAmJlxuICAgICAgICAgICAgICAgIC8vIFwiaW5maW5pdGUgc2Nyb2xsXCIgb3IgXCJsb2FkIG9uIGRlbWFuZFwiIGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSBpdGVtIGlzIHNlbGVjdGVkIHRoZW4gZG9udCBhbHRlciB0aGUgc2VsZWN0ZWQgbGlzdCBpdGVtcy5cbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5pbmZTY3JvbGwgfHwgdGhpcy5vbkRlbWFuZExvYWQpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zLmxlbmd0aFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFNlbGVjdGVkSXRlbSA9IHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9ICRmaXJzdEl0ZW07XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0aW5nIHRoZSBmaXJzdCByZWNvcmRcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0TGlzdEl0ZW1zKCk7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goc2VsZWN0ZWRpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0SXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUgPSB0aGlzLmdldExpc3RJdGVtQnlNb2RlbChzZWxlY3RlZGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICAvLyBmb2N1cyB0aGUgYWN0aXZlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZmllbGREZWZzLmxlbmd0aCAmJiB0aGlzLmluZlNjcm9sbCkge1xuICAgICAgICAgICAgY29uc3Qgc21vb3RoU2Nyb2xsRWwgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1t3bXNtb290aHNjcm9sbF0nKTtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgbW9iaWxlIGFwcCB3aGVuIG1vZGFsIGV4aXN0cywgYW5kIGxpc3QgaXRlbXMgaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbW9kYWwgY29udGVudCBwcm92aWRlIGNjb250YWluZXIgYSBzY3JvbGxhYmxlIGhlaWdodFxuICAgICAgICAgICAgY29uc3QgbW9kYWxCb2R5ID0gdGhpcy4kZWxlbWVudC5jbG9zZXN0KCcubW9kYWwtYm9keScpO1xuICAgICAgICAgICAgY29uc3QgbGlzdEh0ID0gdGhpcy4kZWxlbWVudC5maW5kKCd1bCcpLmhlaWdodCgpO1xuICAgICAgICAgICAgY29uc3QgbW9kYWxIdCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIDE0MDtcbiAgICAgICAgICAgIGlmIChpc01vYmlsZSgpICYmIG1vZGFsQm9keS5sZW5ndGggJiYgbGlzdEh0ID4gbW9kYWxIdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKCdoZWlnaHQnLCBtb2RhbEh0ICsgJ3B4Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmJpbmRTY3JvbGxFdnQodGhpcywgJz4gdWwnLCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzRGF0YUNoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwSGFuZGxlcnMoKSB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGxpc3RJdGVtcyA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uTGlzdFJlbmRlcihsaXN0SXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBoYW5kbGUgY2xpY2sgZXZlbnQgaW4gY2FwdHVyaW5nIHBoYXNlLlxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9ICQoJGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLmFwcC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZpbmQgdGhlIGN1cnJlbnQgbGlzdCBpdGVtXG4gICAgICAgICAgICB3aGlsZSAodGFyZ2V0LmdldCgwKSAmJiAodGFyZ2V0LmNsb3Nlc3QoJ3VsLmFwcC1saXZlbGlzdC1jb250YWluZXInKS5nZXQoMCkgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnQoKS5jbG9zZXN0KCcuYXBwLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdEl0ZW1TZWxlY3Rpb24odGFyZ2V0LCAkZXZlbnQpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VycyBvbiBkcmFnIHN0YXJ0IHdoaWxlIHJlb3JkZXJpbmcuXG4gICAgcHJpdmF0ZSBvblJlb3JkZXJTdGFydChldnQsIHVpKSB7XG4gICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodCh1aS5pdGVtLmhlaWdodCgpKTtcbiAgICAgICAgdGhpcy4kdWxFbGUuZGF0YSgnb2xkSW5kZXgnLCB1aS5pdGVtLmluZGV4KCkpO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXJzIGR1cmluZyBzb3J0aW5nXG4gICAgcHJpdmF0ZSBvblNvcnQoZXZ0LCB1aSkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGluZmluaXRlIHNjcm9sbCwgd2hlbiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgc2Nyb2xsIGVuYWJsZWRcbiAgICAgICAgLy8gb24gZHJhZ2dpbmcgdGhlIGVsZW1lbnQgdG8gbGFzdCBpdGVtJ3MgcG9zaXRpb24gbWFudWFsbHkgdHJpZ2dlciBsb2FkaW5nIG9mIG5leHQgaXRlbXNcbiAgICAgICAgaWYgKHRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbU9mZnNldCA9IHRoaXMuJHVsRWxlLmZpbmQoYFtsaXN0aXRlbWluZGV4PSR7dGhpcy5maWVsZERlZnMubGVuZ3RoIC0gMX1dYCkub2Zmc2V0KCk7XG4gICAgICAgICAgICBpZiAobGFzdEl0ZW1PZmZzZXQgJiYgbGFzdEl0ZW1PZmZzZXQudG9wIDwgdWkub2Zmc2V0LnRvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuYmluZFNjcm9sbEV2dCh0aGlzLCAnPiB1bCcsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRGZXRjaE5leHREYXRhc2V0T25TY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyaWdnZXJzIGFmdGVyIHRoZSBzb3J0aW5nLlxuICAgIHByaXZhdGUgb25VcGRhdGUoZXZ0LCB1aSwgcHJlc2VudEluZGV4Pykge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5maWVsZERlZnM7XG4gICAgICAgIC8vIElmIHVpIGlzIG5vdCBwcmVzZW50IHRoZW4gaXQgaXMgY2FsbGVkIGZyb20gZHJhZyBhbmQgZHJvcCB1c2luZyBrZXlib2FyZFxuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHVpID09PSB1bmRlZmluZWQgPyBwcmVzZW50SW5kZXggOiB1aS5pdGVtLmluZGV4KCk7XG4gICAgICAgIGNvbnN0IG9sZEluZGV4ID0gdGhpcy4kdWxFbGUuZGF0YSgnb2xkSW5kZXgnKTtcblxuICAgICAgICBjb25zdCBtaW5JbmRleCA9IG1pbihbbmV3SW5kZXgsIG9sZEluZGV4XSk7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gbWF4KFtuZXdJbmRleCwgb2xkSW5kZXhdKTtcblxuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHB1bGxBdChkYXRhLCBvbGRJbmRleClbMF07XG4gICAgICAgIC8vIE1vZGlmeSB0aGUgZGF0YSBsaXN0IG9ubHkgaWYgd2UgZmluZCBhIGRyYWdnZWRJdGVtXG4gICAgICAgIGlmIChkcmFnZ2VkSXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVvcmRlclByb3BzLm1pbkluZGV4ID0gbWluKFttaW5JbmRleCwgdGhpcy5yZW9yZGVyUHJvcHMubWluSW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMucmVvcmRlclByb3BzLm1heEluZGV4ID0gbWF4KFttYXhJbmRleCwgdGhpcy5yZW9yZGVyUHJvcHMubWF4SW5kZXhdKTtcblxuICAgICAgICAgICAgZGF0YS5zcGxpY2UobmV3SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTtcblxuICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29uc3QgJGNoYW5nZWRJdGVtID0ge1xuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogZGF0YVtuZXdJbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jlb3JkZXInLCB7JGV2ZW50OiBldnQsICRkYXRhOiBkYXRhLCAkY2hhbmdlZEl0ZW19KTtcbiAgICAgICAgICAgIHRoaXMuJHVsRWxlLnJlbW92ZURhdGEoJ29sZEluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmVzIHJlb3JkZXJpbmcgdGhlIGxpc3QgaXRlbXMuXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEbkQoKSB7XG4gICAgICAgIGxldCBhcHBlbmRUbztcbiAgICAgICAgY29uc3QgbW9kYWxFbCA9ICQoZG9jdW1lbnQpLmZpbmQoJy5tb2RhbCcpO1xuICAgICAgICBpZiAodGhpcy5nZXRBdHRyKCdoZWlnaHQnKSkgeyAvLyB3aGVuIGhlaWdodCBpcyBhcHBsaWVkIHRvIHRoZSBsaXN0LCBhcHBlbmQgc2hvdWxkIGJlIHRoZSB1bCdzIHBhcmVudCBhcyBzY3JvbGwgaXMgYXBwbGllZCB0byB0aGUgcGFyZW50XG4gICAgICAgICAgICBhcHBlbmRUbyA9ICdwYXJlbnQnO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGFsRWwubGVuZ3RoKSB7IC8vIEluIGNhc2Ugb2YgZGlhbG9nLCBhcHBlbmRUbyBzaG91bGQgYmUgdGhlIG1vZGFsIGVsZVxuICAgICAgICAgICAgYXBwZW5kVG8gPSBtb2RhbEVsW21vZGFsRWwubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gZWxzZSB7IC8vIEFzIGRlZmF1bHQgYXBwZW5kIHRvIHNob3VsZCBiZSBib2R5XG4gICAgICAgICAgICBhcHBlbmRUbyA9ICdib2R5JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhcHBlbmRUbzogYXBwZW5kVG8sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgJGVsID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLiR1bEVsZSA9ICRlbC5maW5kKCcuYXBwLWxpdmVsaXN0LWNvbnRhaW5lcicpO1xuXG4gICAgICAgIGNvbmZpZ3VyZURuRCh0aGlzLiR1bEVsZSwgb3B0aW9ucywgdGhpcy5vblJlb3JkZXJTdGFydC5iaW5kKHRoaXMpLCB0aGlzLm9uVXBkYXRlLmJpbmQodGhpcyksIHRoaXMub25Tb3J0LmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuJHVsRWxlLmRyb3BwYWJsZSh7J2FjY2VwdCc6ICcuYXBwLWxpc3QtaXRlbSd9KTtcblxuXG5cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdGlvbiBsaW1pdCBpcyByZWFjaGVkLlxuICAgIHByaXZhdGUgY2hlY2tTZWxlY3Rpb25MaW1pdChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuc2VsZWN0aW9ubGltaXQgfHwgY291bnQgPCB0aGlzLnNlbGVjdGlvbmxpbWl0KTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxpc3RpdGVtIHJlZmVyZW5jZSBieSBpbmRleCB2YWx1ZS5cbiAgICBwcml2YXRlIGdldExpc3RJdGVtQnlJbmRleChpbmRleDogbnVtYmVyKTogTGlzdEl0ZW1EaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpW2luZGV4XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gaW5kZXggb2YgYW4gKGxpc3RJdGVtRGlyZWN0aXZlKSBpbiB0aGUgbGlzdEl0ZW1cbiAgICAgKiBAcGFyYW0ge0xpc3RJdGVtRGlyZWN0aXZlfSBpdGVtXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExpc3RJdGVtSW5kZXgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIExpc3RJdGVtIFJlZmVyZW5jZSBiYXNlZCBvbiB0aGUgaW5wdXQgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHZhbDogaW5kZXggfCBtb2RlbCBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIEByZXR1cm5zIHtMaXN0SXRlbURpcmVjdGl2ZX1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbCh2YWw6IGFueSk6IExpc3RJdGVtRGlyZWN0aXZlIHtcbiAgICAgICAgbGV0IGxpc3RJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKHZhbCkpIHtcbiAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgodmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5TW9kZWwodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdEl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZWZvcmVQYWdpbmF0aW9uQ2hhbmdlKCRldmVudCwgJGluZGV4KSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQsICRpbmRleH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnlGbigkaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gJGluZGV4OyAvLyBSZXR1cm4gYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZWFjaCBpdGVtXG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBkYXRhc291cmNlIHZhcmlhYmxlIGJ5IGRlZmF1bHQgd2hlbiBwdWxsdG9yZWZyZXNoIGV2ZW50IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1B1bGxUb1JlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyRGVzdHJveWVycy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgncHVsbHRvcmVmcmVzaCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmxpc3RSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLmxpc3RSZWNvcmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFVwQ1VESGFuZGxlcnMoKSB7XG4gICAgICAgIGNvbnN0ICRhZGRJdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFkZC1saXN0LWl0ZW1cIilbMF07XG4gICAgICAgIGlmICgkYWRkSXRlbSkge1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIG9uIGNsaWNrIG9mIGFkZCBhY3Rpb25cbiAgICAgICAgICAgICRhZGRJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZ0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKHRpdGxlIHx8IHN1YmhlYWRpbmcgfHwgaWNvbmNsYXNzKSB7XG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIHt7aWNvbmNsYXNzfX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbaGlkZGVuXT1cIiFpY29uY2xhc3NcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwic3ViaGVhZGluZ1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9oMz5cbiAgPC9kaXY+XG59XG5cbkBpZiAobmF2aWdhdGlvbiA9PT0gJ0lubGluZScgJiYgIW5vRGF0YUZvdW5kKSB7XG4gIDxkaXYgY2xhc3M9XCJhcHAtZGF0YW5hdmlnYXRvclwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVQcmV2aW91c1wiIGFyaWEtbGFiZWw9XCJQYWdlIG5hdmlnYXRpb25cIj5cbiAgICA8dWwgY2xhc3M9XCJwYWdlclwiPlxuICAgICAgPGxpIGNsYXNzPVwicHJldmlvdXNcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogKGRhdGFOYXZpZ2F0b3IgPyBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZVByZXZpb3VzIDogdHJ1ZSl9XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cImRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCdwcmV2JywgJGV2ZW50KVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZVByZXZpb3VzXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gUHJldmlvdXMgcGFnZSB7e2RhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlUHJldmlvdXMgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxufVxuQGlmIChuYXZpZ2F0aW9uID09PSAnSW5saW5lJyAmJiAhbm9EYXRhRm91bmQpIHtcbiAgPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIiBjbGFzcz1cInNyLW9ubHlcIj4ge3snUGFnZSAnICsgZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSArICcgb2YgJyArIGRhdGFOYXZpZ2F0b3IucGFnZUNvdW50IH19PC9kaXY+XG59XG5cbjxkaXY+XG4gIEBpZiAoZW5hYmxlcmVvcmRlcikge1xuICAgIDxkaXYgaWQ9e3t0aXRsZUlkfX0gY2xhc3M9XCJzci1vbmx5XCI+XG4gICAgICBQcmVzcyBzcGFjZSBiYXIgdG8gdG9nZ2xlIGRyYWcgZHJvcCBtb2RlLCB1c2UgYXJyb3cga2V5cyB0byBtb3ZlIHNlbGVjdGVkIGVsZW1lbnRzLlxuICAgIDwvZGl2PlxuICB9XG5cbiAgQGlmIChsaXN0SXRlbXMgJiYgZW5hYmxlcmVvcmRlciAmJiBjdXJyZW50SW5kZXgpIHtcbiAgICA8ZGl2IGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGNsYXNzPVwic3Itb25seVwiID5cbiAgICAgIHt7YXJpYVRleHQgKyBjdXJyZW50SW5kZXggKyAnIG9mICcgKyAgbGlzdEl0ZW1zLmxlbmd0aH19XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48dWwgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIiAgY2xhc3M9XCJhcHAtbGl2ZWxpc3QtY29udGFpbmVyIGNsZWFyZml4IHt7ZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYXBwLWhvcml6b250YWwtbGlzdCc6ICcnfX0ge3tsaXN0Y2xhc3N9fVwiIHJvbGU9XCJsaXN0XCJcbiAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3QnKVwiXG5cbiAgKGtleWRvd24uc3BhY2UpPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzcGFjZScpXCJcblxuICAoa2V5ZG93bi5hcnJvd3VwKT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnZm9jdXNQcmV2JylcIlxuICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdmb2N1c05leHQnKVwiXG4gIChrZXlkb3duLmFycm93bGVmdCk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ2ZvY3VzUHJldicpXCJcbiAgKGtleWRvd24uYXJyb3dyaWdodCk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ2ZvY3VzTmV4dCcpXCJcblxuICAoa2V5ZG93bi5zaGlmdC5hcnJvd3VwKT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnc2VsZWN0UHJldicpXCJcbiAgKGtleWRvd24uc2hpZnQuYXJyb3dkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnc2VsZWN0TmV4dCcpXCJcbiAgKGtleWRvd24uc2hpZnQuYXJyb3dsZWZ0KT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnc2VsZWN0UHJldicpXCJcbiAgKGtleWRvd24uc2hpZnQuYXJyb3dyaWdodCk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NlbGVjdE5leHQnKVwiXG4gIFtoaWRkZW5dPVwibm9EYXRhRm91bmQgJiYgIXZhcmlhYmxlSW5mbGlnaHRcIlxuICA+XG4gIEBpZiAoIWdyb3VwYnkpIHtcbiAgICBAZm9yIChpdGVtIG9mIGZpZWxkRGVmczsgdHJhY2sgaXRlbSkge1xuICAgICAgPGxpIGNsYXNzPVwiYXBwLWxpc3QtaXRlbSB7e2RpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJycgOiBpdGVtc1BlclJvd0NsYXNzfX1cIiBbbmdDbGFzc109XCJsaXN0SXRlbVJlZi5pdGVtQ2xhc3NcIlxuICAgICAgICBbd21MaXN0SXRlbV09XCJpdGVtXCJcbiAgICAgICAgI2xpc3RJdGVtUmVmPVwibGlzdEl0ZW1SZWZcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJjcmVhdGVDdXN0b21JbmplY3RvcignZmFsdF8nICsgbGlzdEl0ZW1SZWYudHJhY2tJZCwge2l0ZW06IGl0ZW0sICRpbmRleDogJGluZGV4LCBpdGVtUmVmOiBsaXN0SXRlbVJlZiwgJGZpcnN0OiAkZmlyc3QsICRsYXN0OiAkbGFzdCwgY3VycmVudEl0ZW1XaWRnZXRzOiBsaXN0SXRlbVJlZi5jdXJyZW50SXRlbVdpZGdldHN9KVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbSwgJGluZGV4OiAkaW5kZXgsIGl0ZW1SZWY6IGxpc3RJdGVtUmVmLCAkZmlyc3Q6ICRmaXJzdCwgJGxhc3Q6ICRsYXN0LCBjdXJyZW50SXRlbVdpZGdldHM6IGxpc3RJdGVtUmVmLmN1cnJlbnRJdGVtV2lkZ2V0c31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGk+XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAZm9yIChncm91cE9iaiBvZiBncm91cGVkRGF0YTsgdHJhY2sgZ3JvdXBPYmo7IGxldCBncm91cEluZGV4ID0gJGluZGV4KSB7XG4gICAgICA8bGkgY2xhc3M9XCJhcHAtbGlzdC1pdGVtLWdyb3VwIGNsZWFyZml4XCI+XG4gICAgICAgIDx1bCBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiIGNsYXNzPVwibGlzdC1ncm91cCBpdGVtLWdyb3VwXCIgW25nQ2xhc3NdPVwibGlzdGNsYXNzXCI+XG4gICAgICAgICAgPGxpIGNsYXNzPVwiYXBwLWxpc3QtaXRlbS1oZWFkZXIgbGlzdC1pdGVtIGxpc3QtZ3JvdXAtaGVhZGVyXCIgKGNsaWNrKT1cImhhbmRsZUhlYWRlckNsaWNrKCRldmVudClcIiBbbmdDbGFzc109XCJ7J2NvbGxhcHNpYmxlLWNvbnRlbnQnOiBjb2xsYXBzaWJsZX1cIj5cbiAgICAgICAgICAgIDxoND57e2dyb3VwT2JqLmtleX19XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgQGlmIChjb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB3aSBhY3Rpb24gd2ktY2hldnJvbi11cFwiPjwvaT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChzaG93Y291bnQpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwtZGVmYXVsdFwiPnt7Z3JvdXBPYmouZGF0YS5sZW5ndGh9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGNsZWFyZml4IHt7ZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYXBwLWhvcml6b250YWwtbGlzdCc6ICcnfX1cIj5cbiAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cE9iai5kYXRhOyB0cmFjayB0cmFja0J5Rm4oJGluZGV4LCBpdGVtKSkge1xuICAgICAgICAgICAgICAgIDxsaSBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFwcC1saXN0LWl0ZW0gZ3JvdXAtbGlzdC1pdGVtIHt7aXRlbXNQZXJSb3dDbGFzc319XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImxpc3RJdGVtUmVmLml0ZW1DbGFzc1wiXG4gICAgICAgICAgICAgICAgICBbd21MaXN0SXRlbV09XCJpdGVtXCIgI2xpc3RJdGVtUmVmPVwibGlzdEl0ZW1SZWZcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJjcmVhdGVDdXN0b21JbmplY3RvcignZ3JvdXBfJyArIGxpc3RJdGVtUmVmLnRyYWNrSWQsIHtpdGVtOiBpdGVtLCAkaW5kZXg6ICRpbmRleCwgaXRlbVJlZjogbGlzdEl0ZW1SZWYsICRmaXJzdDogJGZpcnN0LCAkbGFzdDogJGxhc3QsIGN1cnJlbnRJdGVtV2lkZ2V0czogbGlzdEl0ZW1SZWYuY3VycmVudEl0ZW1XaWRnZXRzfSlcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtLCAkaW5kZXg6ICRpbmRleCwgaXRlbVJlZjogbGlzdEl0ZW1SZWYsICRmaXJzdDogJGZpcnN0LCAkbGFzdDogJGxhc3QsIGN1cnJlbnRJdGVtV2lkZ2V0czogbGlzdEl0ZW1SZWYuY3VycmVudEl0ZW1XaWRnZXRzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgfVxuICB9XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdExlZnRBY3Rpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RSaWdodEFjdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L3VsPlxuXG5AaWYgKG5vRGF0YUZvdW5kICYmICF2YXJpYWJsZUluZmxpZ2h0KSB7XG4gIDxkaXYgY2xhc3M9XCJuby1kYXRhLW1zZ1wiIFt0ZXh0Q29udGVudF09XCJub2RhdGFtZXNzYWdlXCI+PC9kaXY+XG59XG5cbkBpZiAodmFyaWFibGVJbmZsaWdodCAmJiAhcHVsbHRvcmVmcmVzaCkge1xuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1kYXRhLW1zZ1wiPlxuICAgIDxzcGFuPlxuICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIGZhLXNwaW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbbmdDbGFzc109XCJsb2FkaW5naWNvblwiPjwvaT5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkxvYWRpbmc8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImxvYWRpbmctdGV4dFwiIFt0ZXh0Q29udGVudF09XCJsb2FkaW5nZGF0YW1zZ1wiPjwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxufVxuXG5AaWYgKG5hdmlnYXRpb24gPT09ICdJbmxpbmUnICYmICFub0RhdGFGb3VuZCkge1xuICA8ZGl2IGNsYXNzPVwiYXBwLWRhdGFuYXZpZ2F0b3JcIiBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dFwiPlxuICAgIDx1bCBjbGFzcz1cInBhZ2VyXCI+XG4gICAgICA8bGkgY2xhc3M9XCJuZXh0XCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IChkYXRhTmF2aWdhdG9yID8gZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ICA6IHRydWUpfVwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJkYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0XCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIE5leHQgcGFnZSB7e2RhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG59XG5cbkBpZiAobmF2aWdhdGlvbiAhPT0gJ05vbmUnKSB7XG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1mb290ZXJcIiBbaGlkZGVuXT1cIiFzaG93TmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkgfHwgKGRhdGFOYXZpZ2F0b3I/LmRhdGFTaXplIDw9IHBhZ2VzaXplICYmICFhbGxvd3BhZ2VzaXplY2hhbmdlKSB8fCAoIWRhdGFOYXZpZ2F0b3IuZGF0YVNpemUgJiYgIWRhdGFOYXZpZ2F0b3IuZGF0YXNvdXJjZT8ucGFnaW5hdGlvbj8ubmV4dClcIj5cbiAgICA8bmF2IHdtUGFnaW5hdGlvblxuICAgICAgbmF2aWdhdGlvbmFsaWduLmJpbmQ9XCJuYXZpZ2F0aW9uYWxpZ25cIlxuICAgICAgbmF2aWdhdGlvbi5iaW5kPVwibmF2Q29udHJvbHNcIlxuICAgICAgc2hvd3JlY29yZGNvdW50LmJpbmQ9XCJzaG93cmVjb3JkY291bnRcIlxuICAgICAgbWF4c2l6ZS5iaW5kPVwibWF4c2l6ZVwiXG4gICAgICBib3VuZGFyeWxpbmtzLmJpbmQ9XCJib3VuZGFyeWxpbmtzXCJcbiAgICAgIGZvcmNlZWxsaXBzZXMuYmluZD1cImZvcmNlZWxsaXBzZXNcIlxuICAgICAgZGlyZWN0aW9ubGlua3MuYmluZD1cImRpcmVjdGlvbmxpbmtzXCJcbiAgICAgIHNob3cuYmluZD1cIiFvbkRlbWFuZExvYWRcIlxuICAgICAgcGFnaW5hdGlvbmNoYW5nZS5ldmVudD1cImJlZm9yZVBhZ2luYXRpb25DaGFuZ2UoJGV2ZW50LCAkaW5kZXgpXCJcbiAgICA+PC9uYXY+XG4gICAgQGlmIChvbkRlbWFuZExvYWQpIHtcbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgKGNsaWNrKT1cImRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiYXBwLWJ1dHRvbiBidG4gYnRuLWJsb2NrXCJcbiAgICAgICAgW25nQ2xhc3NdPVwicGFnaW5hdGlvbmNsYXNzXCJcbiAgICAgICAgW3RleHRDb250ZW50XT1cIm9uZGVtYW5kbWVzc2FnZVwiXG4gICAgICA+PC9hPlxuICAgIH1cbiAgPC9kaXY+XG59XG5cbjwhLS1UaGlzIHRlbXBsYXRlIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4gZ3JvdXBieSBpcyBzcGVjaWZpZWQtLT5cbiJdfQ==
|
|
1174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9saXN0L3NyYy9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGdDQUFnQyxFQUVuQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFFSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUdOLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUNILFVBQVUsRUFDVixlQUFlLEVBQ2YsR0FBRyxFQUNILFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDZCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FB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YUFBYSxhQUVaO3dCQUNQLGtCQUFrQixlQUFlO3FCQUNwQzs7MEJBMEdJLFNBQVM7MkJBQUMsZ0JBQWdCOzswQkFDMUIsU0FBUzsyQkFBQyxrQkFBa0I7OzBCQUM1QixTQUFTOzJCQUFDLGNBQWM7OzBCQUN4QixTQUFTOzJCQUFDLGlCQUFpQjs7MEJBQzNCLFNBQVM7MkJBQUMsa0JBQWtCOzswQkFDNUIsU0FBUzsyQkFBQyxrQkFBa0I7OzBCQUc1QixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5Q0E3R1gsWUFBWTtzQkFBekMsWUFBWTt1QkFBQyxjQUFjO2dCQUVZLHNCQUFzQjtzQkFBN0QsWUFBWTt1QkFBQyx3QkFBd0I7Z0JBQ0csdUJBQXVCO3NCQUEvRCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFDTCxhQUFhO3NCQUE5QyxlQUFlO3VCQUFDLGVBQWU7Z0JBRUEsYUFBYTtzQkFBNUMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0csU0FBUztzQkFBekMsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQVBQTFlfU1RZTEVTX1RZUEUsXG4gICAgY29uZmlndXJlRG5ELFxuICAgIERFQk9VTkNFX1RJTUVTLFxuICAgIGV4dHJhY3REYXRhU291cmNlTmFtZSxcbiAgICBnZXRPcmRlcmVkRGF0YXNldCxcbiAgICBncm91cERhdGEsXG4gICAgaGFuZGxlSGVhZGVyQ2xpY2ssXG4gICAgTkFWSUdBVElPTl9UWVBFLFxuICAgIHByb3ZpZGVBc1dpZGdldFJlZixcbiAgICBTdHlsYWJsZUNvbXBvbmVudCxcbiAgICBzdHlsZXIsXG4gICAgVGV4dENvbnRlbnREaXJlY3RpdmUsXG4gICAgVG9EYXRlUGlwZSxcbiAgICB0b2dnbGVBbGxIZWFkZXJzLFxuICAgIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLFxuICAgIFdpZGdldFJlZlxufSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvYmFzZVwiO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgIEFwcCxcbiAgICBBcHBEZWZhdWx0cyxcbiAgICBEYXRhU291cmNlLFxuICAgIGdlbmVyYXRlR1VJZCxcbiAgICBnZXRDbG9uZWRPYmplY3QsXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIGlzT2JqZWN0LFxuICAgIG5vb3AsXG4gICAgUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgc2V0TGlzdENsYXNzLFxuICAgIFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgc3dpdGNoQ2xhc3Ncbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtQYWdpbmF0aW9uQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL3BhZ2luYXRpb24nO1xuaW1wb3J0IHtCdXR0b25Db21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0L2J1dHRvbic7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9saXN0LnByb3BzJztcbmltcG9ydCB7TGlzdEl0ZW1EaXJlY3RpdmV9IGZyb20gJy4vbGlzdC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0xpc3RBbmltYXRvcn0gZnJvbSAnLi9saXN0LmFuaW1hdG9yJztcbmltcG9ydCB7XG4gICAgY2xvbmUsXG4gICAgY2xvbmVEZWVwLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGhhcyxcbiAgICBpbmNsdWRlcyxcbiAgICBpc0FycmF5LFxuICAgIGlzRW1wdHksXG4gICAgaXNFcXVhbCxcbiAgICBpc051bWJlcixcbiAgICBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBsYXN0LFxuICAgIG1heCxcbiAgICBtaW4sXG4gICAgcHVsbEFsbFdpdGgsXG4gICAgcHVsbEF0LFxuICAgIHJlbW92ZSxcbiAgICBzb21lLFxuICAgIHRvTnVtYmVyXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtbGl2ZWxpc3QgYXBwLXBhbmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWxpc3QnLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRleHRDb250ZW50RGlyZWN0aXZlLCBQYWdpbmF0aW9uQ29tcG9uZW50LCBMaXN0SXRlbURpcmVjdGl2ZV0sXG4gICAgc2VsZWN0b3I6ICdkaXZbd21MaXN0XScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoTGlzdENvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnbGlzdFRlbXBsYXRlJykgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2xpc3RMZWZ0QWN0aW9uVGVtcGxhdGUnKSBsaXN0TGVmdEFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAQ29udGVudENoaWxkKCdsaXN0UmlnaHRBY3Rpb25UZW1wbGF0ZScpIGxpc3RSaWdodEFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAQ29udGVudENoaWxkcmVuKEJ1dHRvbkNvbXBvbmVudCkgYnRuQ29tcG9uZW50cztcblxuICAgIEBWaWV3Q2hpbGQoUGFnaW5hdGlvbkNvbXBvbmVudCkgZGF0YU5hdmlnYXRvcjtcbiAgICBAVmlld0NoaWxkcmVuKExpc3RJdGVtRGlyZWN0aXZlKSBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT47XG4gICAgcHVibGljIG5vRGF0YUZvdW5kOiBib29sZWFuO1xuICAgIHB1YmxpYyBsYXN0U2VsZWN0ZWRJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZTtcbiAgICBwdWJsaWMgZmllbGREZWZzOiBBcnJheTxhbnk+O1xuICAgIHB1YmxpYyBkaXNhYmxlaXRlbTtcbiAgICBwdWJsaWMgbmF2aWdhdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBuYXZpZ2F0aW9uYWxpZ246IHN0cmluZztcbiAgICBwdWJsaWMgcGFnZXNpemU6IG51bWJlcjtcbiAgICBwdWJsaWMgZGF0YXNldDogYW55O1xuICAgIHB1YmxpYyBtdWx0aXNlbGVjdDogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VsZWN0Zmlyc3RpdGVtOiBib29sZWFuO1xuICAgIHB1YmxpYyBvcmRlcmJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGxvYWRpbmdpY29uOiBzdHJpbmc7XG4gICAgcHVibGljIHBhZ2luYXRpb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBvbmRlbWFuZG1lc3NhZ2U6IHN0cmluZztcbiAgICBwdWJsaWMgbG9hZGluZ2RhdGFtc2c6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0aW9ubGltaXQ6IG51bWJlcjtcbiAgICBwdWJsaWMgaW5mU2Nyb2xsOiBib29sZWFuO1xuICAgIHB1YmxpYyBlbmFibGVyZW9yZGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBpdGVtc3BlcnJvdzogc3RyaW5nO1xuICAgIHB1YmxpYyBpdGVtY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtV2lkZ2V0czogQXJyYXk8V2lkZ2V0UmVmPiB8IFdpZGdldFJlZjtcbiAgICBwdWJsaWMgdmFyaWFibGVJbmZsaWdodDtcbiAgICBwdWJsaWMgbmFtZTtcbiAgICBwdWJsaWMgY3VycmVudFBhZ2U7XG4gICAgcHVibGljIGRpcmVjdGlvbjtcbiAgICBwdWJsaWMgdGFiaW5kZXg7XG4gICAgcHVibGljIGhhbmRsZUhlYWRlckNsaWNrOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgdG9nZ2xlQWxsSGVhZGVyczogdm9pZDtcbiAgICBwdWJsaWMgZ3JvdXBieTogc3RyaW5nO1xuICAgIHB1YmxpYyBjb2xsYXBzaWJsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBkYXRlUGlwZTogVG9EYXRlUGlwZTtcbiAgICBwdWJsaWMgYmluZGl0ZW1jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBiaW5kZGlzYWJsZWl0ZW06IHN0cmluZztcbiAgICBwdWJsaWMgYmluZGRhdGFzZXQ6IHN0cmluZztcbiAgICBwdWJsaWMgbW91c2VFbnRlckNCOiBzdHJpbmc7XG4gICAgcHVibGljIG1vdXNlTGVhdmVDQjogc3RyaW5nO1xuICAgIHB1YmxpYyBwdWxsdG9yZWZyZXNoOiBib29sZWFuO1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBzdWJoZWFkaW5nOiBzdHJpbmc7XG4gICAgcHVibGljIGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBsaXN0Y2xhc3M6IGFueTtcbiAgICBwdWJsaWMgc3RhdGVoYW5kbGVyOiBhbnk7XG4gICAgcHVibGljIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyB0aXRsZUlkOiBzdHJpbmc7XG4gICAgcHVibGljIGFsbG93cGFnZXNpemVjaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcGFnZXNpemVvcHRpb25zOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwcmV2UGFnZXNpemVvcHRpb25zOiBzdHJpbmc7XG4gICAgcHVibGljIHVwZGF0ZWRQYWdlU2l6ZTtcbiAgICBwdWJsaWMgYWN0dWFsUGFnZVNpemU7XG4gICAgX2lzRGVwZW5kZW50O1xuICAgIHByaXZhdGUgaXRlbXNQZXJSb3dDbGFzczogc3RyaW5nO1xuICAgIHByaXZhdGUgZmlyc3RTZWxlY3RlZEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlO1xuICAgIHByaXZhdGUgbmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2g6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG5hdmlnYXRvclJlc3VsdFdhdGNoOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBuYXZDb250cm9sczogc3RyaW5nO1xuICAgIHByaXZhdGUgb25EZW1hbmRMb2FkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2l0ZW1zOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgZGF0YU5hdmlnYXRvcldhdGNoZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkYXRhc291cmNlOiBhbnk7XG4gICAgcHJpdmF0ZSBzaG93TmF2aWdhdGlvbjogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlb3JkZXJQcm9wczogYW55O1xuICAgIHByaXZhdGUgYXBwOiBhbnk7XG4gICAgcHJpdmF0ZSBhcHBEZWZhdWx0czogYW55O1xuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmU7XG4gICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlO1xuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgYmluZGRhdGFzb3VyY2U6IHN0cmluZztcbiAgICBwcml2YXRlIG1hdGNoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYXRlZm9ybWF0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBncm91cGVkRGF0YTogYW55O1xuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIHByaXZhdGUgcHJvbWlzZVJlc29sdmVyRm46IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcHJvcHNJbml0UHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuICAgIHByaXZhdGUgJHVsRWxlOiBhbnk7XG4gICAgcHJpdmF0ZSBfbGlzdEFuaW1hdG9yOiBMaXN0QW5pbWF0b3I7XG4gICAgcHJpdmF0ZSBfbGlzdGVuZXJEZXN0cm95ZXJzOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgZGVib3VuY2VkRmV0Y2hOZXh0RGF0YXNldE9uU2Nyb2xsOiBGdW5jdGlvbjtcbiAgICBwcml2YXRlIGlzRGF0YUNoYW5nZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0xpc3RFbGVtZW50TW92YWJsZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGFyaWFUZXh0OiBTdHJpbmc7XG4gICAgcHJpdmF0ZSBfcGFnZUxvYWQ7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtc0V4aXN0O1xuXG4gICAgcHJpdmF0ZSB0b3VjaGluZztcbiAgICBwcml2YXRlIHRvdWNoZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBkYXRlUGlwZTogVG9EYXRlUGlwZSxcbiAgICAgICAgYXBwOiBBcHAsXG4gICAgICAgIGFwcERlZmF1bHRzOiBBcHBEZWZhdWx0cyxcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2l0ZW1jbGFzcy5iaW5kJykgYmluZGl0ZW1jbGFzczogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNhYmxlaXRlbS5iaW5kJykgYmluZGRpc2FibGVpdGVtOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIGJpbmRkYXRhc2V0OiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzb3VyY2UuYmluZCcpIGJpbmRkYXRhc291cmNlOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ21vdXNlZW50ZXIuZXZlbnQnKSBtb3VzZUVudGVyQ0I6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbW91c2VsZWF2ZS5ldmVudCcpIG1vdXNlTGVhdmVDQjogc3RyaW5nLFxuICAgICAgICBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBsZXQgcmVzb2x2ZUZuOiBGdW5jdGlvbiA9IG5vb3A7XG4gICAgICAgIGNvbnN0IHByb3BzSW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZShyZXMgPT4gcmVzb2x2ZUZuID0gcmVzKTtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQsIHByb3BzSW5pdFByb21pc2UpO1xuICAgICAgICB0aGlzLnByb3BzSW5pdFByb21pc2UgPSBwcm9wc0luaXRQcm9taXNlO1xuICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlckZuID0gcmVzb2x2ZUZuO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5TSEVMTCk7XG4gICAgICAgIHRoaXMuY2RSZWYgPSBjZFJlZjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuZGF0ZVBpcGUgPSBkYXRlUGlwZTtcbiAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlID0gc3RhdGVQZXJzaXN0ZW5jZTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZSA9IHBhZ2luYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5iaW5kaXRlbWNsYXNzID0gYmluZGl0ZW1jbGFzcztcbiAgICAgICAgdGhpcy5iaW5kZGlzYWJsZWl0ZW0gPSBiaW5kZGlzYWJsZWl0ZW07XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgdGhpcy5tb3VzZUVudGVyQ0IgPSBtb3VzZUVudGVyQ0I7XG4gICAgICAgIHRoaXMubW91c2VMZWF2ZUNCID0gbW91c2VMZWF2ZUNCO1xuICAgICAgICB0aGlzLmJpbmRkYXRhc291cmNlID0gYmluZGRhdGFzb3VyY2U7XG5cbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgICAgIHRoaXMuYXBwRGVmYXVsdHMgPSBhcHBEZWZhdWx0cztcbiAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9ICFiaW5kZGF0YXNldDtcbiAgICAgICAgdGhpcy50aXRsZUlkID0gJ3dtbGlzdC0nICsgZ2VuZXJhdGVHVUlkKCk7XG5cbiAgICAgICAgLy8gVXBkYXRlcyBwYWdpbmF0aW9uLCBmaWx0ZXIsIHNvcnQgZXRjIG9wdGlvbnMgZm9yIHNlcnZpY2UgYW5kIGNydWQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuX2xpc3RlbmVyRGVzdHJveWVycyA9IFtcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnY2hlY2stc3RhdGUtcGVyc2lzdGVuY2Utb3B0aW9ucycsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlTmFtZSA9IGdldCh0aGlzLmRhdGFzb3VyY2UsICduYW1lJyk7XG4gICAgICAgICAgICAgICAgLy8gaW4gUHJlZmFicywgdGhpcy5kYXRhc291cmNlIGlzIG5vdCByZXNvbHZlZCBhdCB0aGUgdGltZSBvZiB2YXJpYWJsZSBpbnZvY2F0aW9uLCBzbyBhZGRpdGlvbmFsIGNoZWNrIGlzIHJlcXVpcmVkLlxuICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBleHRyYWN0RGF0YVNvdXJjZU5hbWUodGhpcy5iaW5kZGF0YXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZXQob3B0aW9ucywgJ3ZhcmlhYmxlLm5hbWUnKSAhPT0gZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKG9wdGlvbnMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBTaG93IGxvYWRpbmcgc3RhdHVzIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSBsaWZlIGN5Y2xlXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIHRoaXMuaGFuZGxlTG9hZGluZy5iaW5kKHRoaXMpKSxcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnc2V0dXAtY3VkLWxpc3RlbmVyJywgcGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCduYW1lJykgIT09IHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXNEZXBlbmRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkaXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5faXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5KHRoaXMuX2l0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5faXRlbXNbMF0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWRpdGVtKGl0ZW1zKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RMaXN0SXRlbXMoKTtcblxuICAgICAgICBpZiAoaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB0aGlzLnNlbGVjdEl0ZW0oaXRlbSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBsaXN0IG9mIHdpZGdldHMgcHJlc2VudCBvbiBsaXN0IGl0ZW0gYnkgY29uc2lkZXJpbmcgbmFtZSBhbmQgaW5kZXggb2YgdGhlIHdpZGdldC5cbiAgICAgKiBJZiB3ZSBkaWQnbnQgcGFzcyBpbmRleCwgaXQgcmV0dXJucyBhcnJheSBvZiBhbGwgdGhlIHdpZGdldHMgd2hpY2ggYXJlIG1hdGNoaW5nIHRvIHdpZGdldCBuYW1lXG4gICAgICogQHBhcmFtIHdpZGd0ZU5hbWU6IE5hbWUgb2YgdGhlIHdpZGdldFxuICAgICAqIEBwYXJhbSBpbmRleDogSW5kZXggb2YgdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXaWRnZXRzKHdpZGd0ZU5hbWU6IHN0cmluZywgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgbGV0ICR0YXJnZXQ7XG4gICAgICAgIGNvbnN0IHJldFZhbCA9IFtdO1xuXG4gICAgICAgIGlmICghd2lkZ3RlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQoaW5kZXgpKSB7XG4gICAgICAgICAgICBmb3JFYWNoKHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKSwgKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgJHRhcmdldCA9IGdldChlbC5jdXJyZW50SXRlbVdpZGdldHMsIHdpZGd0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICgkdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC5wdXNoKCR0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gK2luZGV4IHx8IDA7XG5cbiAgICAgICAgJHRhcmdldCA9IGdldCh0aGlzLmxpc3RJdGVtcy50b0FycmF5KCksIGluZGV4KTtcblxuICAgICAgICBpZiAoJHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIFtnZXQoJHRhcmdldC5jdXJyZW50SXRlbVdpZGdldHMsIHdpZGd0ZU5hbWUpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybnMgbGlzdGl0ZW0gcmVmZXJlbmNlIGJ5IGluZGV4IHZhbHVlLiBUaGlzIHJlZmVycyB0byB0aGUgc2FtZSBtZXRob2QgZ2V0TGlzdEl0ZW1CeUluZGV4LlxuICAgIHB1YmxpYyBnZXRJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGluZGV4IG9mIGxpc3RJdGVtKGxpc3RJdGVtRGlyZWN0aXZlIC8gbGlzdEl0ZW1PYmplY3QpXG4gICAgICogSWYgaXRlbSBpcyBhIGRpcmVjdGl2ZSwgaW5kZXggaXMgZmV0Y2hlZCBmcm9tIGxpc3RJdGVtc1xuICAgICAqIElmIGl0ZW0gaXMgYW4gb2JqZWN0LCBpbmRleCBpcyBmZXRjaGVkIGZyb20gZmllbGREZWZzXG4gICAgICovXG4gICAgcHVibGljIGdldEluZGV4KGl0ZW06IGFueSkge1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaXN0SXRlbUluZGV4KGl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkRGVmcy5maW5kSW5kZXgoKG9iaikgPT4gaXNFcXVhbChvYmosIGl0ZW0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAgcHVibGljIGdldFVwZGF0ZWRQYWdlU2l6ZSgpIHtcbiAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZWRQYWdlU2l6ZTtcbiAgICAgfVxuXG4gICAgY3JlYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5faXNEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcldNRXZlbnQoJ2luc2VydCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWRpdFJvdyhpdGVtPykge1xuICAgICAgICBpZiAodGhpcy5faXNEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgIGxldCBsaXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgbGlzdEl0ZW0gPSB0aGlzLmdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbChpdGVtKS5pdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyV01FdmVudCgndXBkYXRlJywgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKGl0ZW0/KSB7XG4gICAgICAgIHRoaXMuZWRpdFJvdyhpdGVtKTtcbiAgICB9XG5cbiAgICBkZWxldGVSb3coaXRlbT8pIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRGVwZW5kZW50KSB7XG4gICAgICAgICAgICBsZXQgbGlzdEl0ZW07XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIGxpc3RJdGVtID0gdGhpcy5nZXRJdGVtUmVmQnlJbmRleE9yTW9kZWwoaXRlbSkuaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcldNRXZlbnQoJ2RlbGV0ZScsIGxpc3RJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlbGV0ZShpdGVtPykge1xuICAgICAgICB0aGlzLmRlbGV0ZVJvdyhpdGVtKTtcbiAgICB9XG5cbiAgICBoYW5kbGVMb2FkaW5nKGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgJiYgaXNEYXRhU291cmNlRXF1YWwoZGF0YS52YXJpYWJsZSwgZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdGF0ZVBhcmFtcyhkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjM3NzJdIFVwZGF0ZSBub2RhdGFmb3VuZCBmbGFnIG9uY2UgdGhlIHJlc3BvbnNlIGlzIHJlY2lldmVkIGZyb20gdGhlIHNlcnZlclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsRWxlID0gZGF0YS5kYXRhPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodG90YWxFbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSB0b3RhbEVsZSA9PT0gMCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyB0b3RhbGVsZW1lbnRzIGlzIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gaXNFbXB0eShkYXRhLmRhdGE/LmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJMaXN0SXRlbVNlbGVjdGlvbigkZWw6IEpRdWVyeTxIVE1MRWxlbWVudD4sICRldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKCRlbCAmJiAkZWxbMF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RJdGVtQ29udGV4dCA9ICRlbC5kYXRhKCdsaXN0SXRlbUNvbnRleHQnKTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgY2xpY2sgZXZlbnQgb25seSBpZiB0aGUgbGlzdCBpdGVtIGlzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgbGlzdC5cbiAgICAgICAgICAgIGlmIChsaXN0SXRlbUNvbnRleHQubGlzdENvbXBvbmVudCA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2soJGV2ZW50LCBsaXN0SXRlbUNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZvcm0gb3RoZXIgZGF0YSB3aWRnZXRzIGxpa2UgdGFibGUuXG4gICAgcHVibGljIGV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChbRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSwgRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfU0VSVkVSX0ZJTFRFUl0uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVLZXlEb3duKCRldmVudCwgYWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoJGV2ZW50LmtleUNvZGUgIT09IDEzICYmICRldmVudC5rZXlDb2RlICE9PSA5ICYmICEoKCRldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmb3JtLWNvbnRyb2wnKSB8fCAkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbm90ZS1lZGl0YWJsZScpKSAmJiAkZXZlbnQua2V5Q29kZSA9PT0gMzIpKSB7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpc3RJdGVtczogUXVlcnlMaXN0PExpc3RJdGVtRGlyZWN0aXZlPiA9IHRoaXMubGlzdEl0ZW1zO1xuXG4gICAgICAgIGxldCBwcmVzZW50SW5kZXg6IG51bWJlciA9IHRoaXMuZ2V0TGlzdEl0ZW1JbmRleCh0aGlzLmxhc3RTZWxlY3RlZEl0ZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEluZGV4OiBudW1iZXIgPSB0aGlzLmdldExpc3RJdGVtSW5kZXgodGhpcy5maXJzdFNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RDb3VudDogbnVtYmVyID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggOiAoaXNPYmplY3QodGhpcy5zZWxlY3RlZGl0ZW0pID8gMSA6IDApO1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ3NlbGVjdFByZXYnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXNlbnRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcmVzZW50SW5kZXggPD0gZmlyc3RJbmRleCkgJiYgdGhpcy5jaGVja1NlbGVjdGlvbkxpbWl0KHNlbGVjdENvdW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlc2VudEluZGV4ID4gZmlyc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbih0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnR9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnc2VsZWN0TmV4dCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VudEluZGV4IDwgbGlzdEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcmVzZW50SW5kZXggPj0gZmlyc3RJbmRleCkgJiYgdGhpcy5jaGVja1NlbGVjdGlvbkxpbWl0KHNlbGVjdENvdW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlc2VudEluZGV4IDwgZmlyc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbih0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHByZXNlbnRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnR9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uID09PSAnZm9jdXNQcmV2Jykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0RWxlbWVudE1vdmFibGUpIHtcbiAgICAgICAgICAgICAgICBwcmVzZW50SW5kZXggPSBwcmVzZW50SW5kZXggPD0gMCA/IDAgOiAocHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VudEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZFbHQgPSB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICBwcmV2RWx0Lm5hdGl2ZUVsZW1lbnQuYmVmb3JlKHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgIFthcnJbcHJlc2VudEluZGV4IC0gMV0sIGFycltwcmVzZW50SW5kZXhdXSA9IFthcnJbcHJlc2VudEluZGV4XSwgYXJyW3ByZXNlbnRJbmRleCAtIDFdXTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5yZXNldChhcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gcHJlc2VudEluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBcInNlbGVjdGVkIFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmVzZW50SW5kZXggPSBwcmVzZW50SW5kZXggPD0gMCA/IDAgOiAocHJlc2VudEluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gcHJlc2VudEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFUZXh0ID0gXCJzZWxlY3RlZCBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdmb2N1c05leHQnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpc3RFbGVtZW50TW92YWJsZSkge1xuICAgICAgICAgICAgICAgIHByZXNlbnRJbmRleCA9IHByZXNlbnRJbmRleCA8IChsaXN0SXRlbXMubGVuZ3RoIC0gMSkgPyAocHJlc2VudEluZGV4KSA6IChsaXN0SXRlbXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXNlbnRJbmRleCA9PT0gdGhpcy5saXN0SXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RWx0ID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgbmV4dEVsdC5uYXRpdmVFbGVtZW50LmFmdGVyKHRoaXMubGFzdFNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gdGhpcy5saXN0SXRlbXMudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgIFthcnJbcHJlc2VudEluZGV4XSwgYXJyW3ByZXNlbnRJbmRleCArIDFdXSA9IFthcnJbcHJlc2VudEluZGV4ICsgMV0sIGFycltwcmVzZW50SW5kZXhdXTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5yZXNldChhcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gcHJlc2VudEluZGV4ICsgMjtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFUZXh0ID0gXCJzZWxlY3RlZCBcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudEluZGV4ID0gcHJlc2VudEluZGV4IDwgKGxpc3RJdGVtcy5sZW5ndGggLSAxKSA/IChwcmVzZW50SW5kZXggKyAxKSA6IChsaXN0SXRlbXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gcHJlc2VudEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFUZXh0ID0gXCJzZWxlY3RlZCBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgZW50ZXIgY2xpY2sgaXMgcHJlc3NlZCBvbiB0aGUgaXRlbSB3aGljaCBpcyBub3QgdGhlIGxhc3Qgc2VsZWN0ZWQgaXRlbSwgdGhlIGZpbmQgdGhlIGl0ZW0gZnJvbSB3aGljaCB0aGUgZXZlbnQgaXMgb3JpZ2luYXRlZC5cbiAgICAgICAgICAgIGlmIChwcmVzZW50SW5kZXggPT09IC0xIHx8ICEkKCRldmVudC50YXJnZXQpLmNsb3Nlc3QodGhpcy5sYXN0U2VsZWN0ZWRJdGVtLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgJGxpID0gJCgkZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdsaS5hcHAtbGlzdC1pdGVtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgJHVsID0gJGxpLmNsb3Nlc3QoJ3VsLmFwcC1saXZlbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgICAgICAgICBwcmVzZW50SW5kZXggPSAkdWwuZmluZCgnbGkuYXBwLWxpc3QtaXRlbScpLmluZGV4KCRsaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uSXRlbUNsaWNrKCRldmVudCwgdGhpcy5nZXRMaXN0SXRlbUJ5SW5kZXgocHJlc2VudEluZGV4KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnc3BhY2UnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlcmVvcmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNMaXN0RWxlbWVudE1vdmFibGUgPSAhdGhpcy5pc0xpc3RFbGVtZW50TW92YWJsZTtcbiAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2soJGV2ZW50LCB0aGlzLmdldExpc3RJdGVtQnlJbmRleChwcmVzZW50SW5kZXgpKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gcHJlc2VudEluZGV4ICsgMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdEVsZW1lbnRNb3ZhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhVGV4dCA9IGBJdGVtICR7dGhpcy5jdXJyZW50SW5kZXh9IGdyYWJiZWQsIGN1cnJlbnQgcG9zaXRpb24gYDtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5kYXRhKCdvbGRJbmRleCcsIHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJpYVRleHQgPSBgSXRlbSAke3RoaXMuY3VycmVudEluZGV4fSBkcm9wcGVkLCBmaW5hbCBwb3NpdGlvbiBgO1xuICAgICAgICAgICAgICAgIHRoaXMub25VcGRhdGUoJGV2ZW50LCB1bmRlZmluZWQsIHByZXNlbnRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QWN0dWFsUGFnZVNpemUoKSAge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCAyMDtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgIGlmICghbnYgJiYgdGhpcy5iaW5kZGF0YXNvdXJjZSAmJiAhdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkRhdGFTZXRDaGFuZ2UobnYpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGFzb3VyY2UnKSB7XG4gICAgICAgICAgICBpZih0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2Upe1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0c1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU2V0Q2hhbmdlKHRoaXMuZGF0YXNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIG9sZGVyIHByb2plY3RzIHdoZXJlIG5hdmlnYXRpb24gdHlwZSB3YXMgYWR2YW5jZWQgaW5zdGVhZCBvZiBjbGFzc2ljXG4gICAgICAgICAgICBpZiAobnYgPT09ICdBZHZhbmNlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSAnQ2xhc3NpYyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBudiwgb3YpO1xuICAgICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25UeXBlQ2hhbmdlKG52KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubmF2aWdhdGlvbkNsYXNzID0gdGhpcy5wYWdpbmF0aW9uY2xhc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaXRlbXNwZXJyb3cnKSB7XG4gICAgICAgICAgICBzZXRMaXN0Q2xhc3ModGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncHVsbHRvcmVmcmVzaCcgJiYgbnYpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgncHVsbFRvUmVmcmVzaDplbmFibGUnKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9QdWxsVG9SZWZyZXNoKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncGFnaW5hdGlvbmNsYXNzJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgICAgIC8vIEFkZGluZyBzZXRUaW1lb3V0IGJlY2F1c2UgaW4gcGFnaW5hdGlvbiBjb21wb25lbnQgdXBkYXRlTmF2U2l6ZSBtZXRob2QgaXMgb3ZlcnJpZGluZyBuYXZpZ2F0aW9uY2xhc3NcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0aW9uQ2xhc3MgPSBudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncGFnZXNpemUnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gbnY7IC8vIG1haW50YWluIGRlZmF1bHQgcGFnZSBzaXplIHRvIGNhbGN1bGF0ZSBwYWdlc2l6ZSBvcHRpb25zXG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdlU2l6ZShudilcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdlbmFibGVyZW9yZGVyJykge1xuICAgICAgICAgICAgaWYgKG52ICYmIHRoaXMuJHVsRWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kdWxFbGUuYXR0cignYXJpYS1kZXNjcmliZWRieScsIHRoaXMudGl0bGVJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVEbkQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5zb3J0YWJsZSgnZW5hYmxlJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHVsRWxlICYmICFudikge1xuICAgICAgICAgICAgICAgIHRoaXMuJHVsRWxlLnJlbW92ZUF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgICAgICAgICB0aGlzLiR1bEVsZS5zb3J0YWJsZSgnZGlzYWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FsbG93cGFnZXNpemVjaGFuZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UgPSBudjtcbiAgICAgICAgfSBlbHNlIGlmKGtleSA9PT0gJ3BhZ2VzaXplb3B0aW9ucycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZQYWdlc2l6ZW9wdGlvbnMgPSB0aGlzLnNhbml0aXplQ29tbWFTZXBhcmF0ZWRJbnRlZ2Vycyhvdik7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlc2l6ZW9wdGlvbnMgPSB0aGlzLnNhbml0aXplQ29tbWFTZXBhcmF0ZWRJbnRlZ2Vycyhudik7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB0aGlzLnNldERlZmF1bHRQYWdlU2l6ZShudilcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREZWZhdWx0UGFnZVNpemUobnY6IGFueSl7XG4gICAgIGlmICh0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdlc2l6ZScpKSB7XG4gICAgICAgICAgICBudiA9IGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2VzaXplJyk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzaXplID0gbnY7IC8vIHVwZGF0aW5nIHRoZSBkZWZhdWx0IHBhZ2VzaXplIHRvIHVzZXIgc2VsZWN0ZWQgcGFnZXNpemVcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VzaXplb3B0aW9ucykge1xuICAgICAgICAgICAgbnYgPSB0aGlzLnBhZ2VzaXplb3B0aW9ucz8uc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5zb3J0KChhLCBiKSA9PiBhIC0gYilbMF1cbiAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBudjtcbiAgICAgICAgfVxuICAgICAgICAgaWYodGhpcy5pc1BhZ2VTaXplT3B0aW9uc0NoYW5nZWQoKSkge1xuICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5kZWZhdWx0UGFnZVNpemVPcHRpb25zID0gdGhpcy5wYWdlc2l6ZW9wdGlvbnM/LnNwbGl0KCcsJykubWFwKE51bWJlcikuc29ydCgoYSwgYikgPT4gYSAtIGIpIHx8IFtdO1xuICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlU2l6ZU9wdGlvbnMgPSBbLi4udGhpcy5kYXRhTmF2aWdhdG9yLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgfVxuICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVkUGFnZVNpemUgPSBudjtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnVwZGF0ZWRQYWdlU2l6ZSA9IG52O1xuXG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgbWF4UmVzdWx0czogbnZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgIGlmKHRoaXMuZGF0YXNvdXJjZSl7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1BhZ2VTaXplT3B0aW9uc0NoYW5nZWQoKSB7XG4gICAgICAgIHJldHVybiAhaXNFcXVhbCh0aGlzLnByZXZQYWdlc2l6ZW9wdGlvbnMsIHRoaXMucGFnZXNpemVvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzZWxlY3RQYWdlU2l6ZShwYWdlc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmKCF0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIXBhZ2VzaXplKSByZXR1cm47XG5cbiAgICAgICAgaWYocGFnZXNpemUgPCB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zWzBdIHx8IHBhZ2VzaXplID4gdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9uc1t0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICB8fCAhdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VTaXplT3B0aW9ucy5pbmNsdWRlcyhOdW1iZXIocGFnZXNpemUpKSkge1xuICAgICAgICAgICAgcGFnZXNpemUgPSB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZVNpemVPcHRpb25zWzBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vblBhZ2VTaXplQ2hhbmdlKHVuZGVmaW5lZCwgcGFnZXNpemUpO1xuICAgIH1cblxuICAgIHNhbml0aXplQ29tbWFTZXBhcmF0ZWRJbnRlZ2VycyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIFwiXCI7XG4gICAgICAgIGNvbnN0IHVuaXF1ZU51bWJlcnMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgbmV3IFNldChcbiAgICAgICAgICAgICAgICBpbnB1dFxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAodiA9PiB2LnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih2ID0+IC9eLT9cXGQrJC8udGVzdCh2KSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IE1hdGguYWJzKHBhcnNlSW50KHYsIDEwKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmlxdWVOdW1iZXJzLmpvaW4oXCIsXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkl0ZW1DbGljayhldnQ6IGFueSwgJGxpc3RJdGVtOiBMaXN0SXRlbURpcmVjdGl2ZSkge1xuICAgICAgICBsZXQgc2VsZWN0Q291bnQ6IG51bWJlcjtcblxuICAgICAgICBpZiAoISRsaXN0SXRlbS5kaXNhYmxlSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5maXJzdFNlbGVjdGVkSXRlbSA9IHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gfHwgJGxpc3RJdGVtO1xuICAgICAgICAgICAgLy8gU2V0dGluZyBzZWxlY3RDb3VudCB2YWx1ZSBiYXNlZCBudW1iZXIgb2YgaXRlbXMgc2VsZWN0ZWQuXG4gICAgICAgICAgICBzZWxlY3RDb3VudCA9IGlzQXJyYXkodGhpcy5zZWxlY3RlZGl0ZW0pID8gdGhpcy5zZWxlY3RlZGl0ZW0ubGVuZ3RoIDogKGlzT2JqZWN0KHRoaXMuc2VsZWN0ZWRpdGVtKSA/IDEgOiAwKTtcblxuICAgICAgICAgICAgLy8gSGFuZGxpbmcgbXVsdGlzZWxlY3QgZm9yIG1vYmlsZSBkZXZpY2VcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0ICYmIGlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja1NlbGVjdGlvbkxpbWl0KHNlbGVjdENvdW50KSB8fCAkbGlzdEl0ZW0uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVMaXN0SXRlbVNlbGVjdGlvbigkbGlzdEl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0aW9ubGltaXRleGNlZWQnLCB7JGV2ZW50OiBldnR9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChldnQuY3RybEtleSB8fCBldnQubWV0YUtleSkgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrU2VsZWN0aW9uTGltaXQoc2VsZWN0Q291bnQpIHx8ICRsaXN0SXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0U2VsZWN0ZWRJdGVtID0gdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gJGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKCRsaXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3Rpb25saW1pdGV4Y2VlZCcsIHskZXZlbnQ6IGV2dH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LnNoaWZ0S2V5ICYmIHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSAkbGlzdEl0ZW0uY29udGV4dC5pbmRleDtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0uY29udGV4dC5pbmRleDtcblxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0IGlzIGdyZWF0ZXIgdGhhbiBsYXN0LCB0aGVuIHN3YXAgdmFsdWVzXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0ID4gbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0ID0gW2ZpcnN0LCBmaXJzdCA9IGxhc3RdWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja1NlbGVjdGlvbkxpbWl0KGxhc3QgLSBmaXJzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoJGxpSXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gJGxpSXRlbS5jb250ZXh0LmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGZpcnN0ICYmIGluZGV4IDw9IGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUxpc3RJdGVtU2VsZWN0aW9uKCRsaUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRJdGVtID0gJGxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0aW9ubGltaXRleGNlZWQnLCB7JGV2ZW50OiBldnR9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCEkbGlzdEl0ZW0uaXNBY3RpdmUgfHwgc2VsZWN0Q291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24oJGxpc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFNlbGVjdGVkSXRlbSA9IHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9ICRsaXN0SXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbXB0eSB0aGUgbGlzdCBjb250ZW50IG9uIGNsZWFyXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkRGVmcyhbXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVzZWxlY3RzIGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICogQHBhcmFtIHZhbDogaW5kZXggfCBtb2RlbCBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdEl0ZW0odmFsOiBhbnkpIHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSB0aGlzLmdldEl0ZW1SZWZCeUluZGV4T3JNb2RlbCh2YWwpO1xuICAgICAgICBpZiAobGlzdEl0ZW0gJiYgbGlzdEl0ZW0uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24obGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2VsZWN0cyBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAqIEBwYXJhbSB2YWw6IGluZGV4IHwgbW9kZWwgb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0SXRlbSh2YWwsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtID0gdGhpcy5nZXRJdGVtUmVmQnlJbmRleE9yTW9kZWwodmFsKTtcbiAgICAgICAgaWYgKCFsaXN0SXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbGlzdEl0ZW0uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTGlzdEl0ZW1TZWxlY3Rpb24obGlzdEl0ZW0sIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZvY3VzIHRoZSBlbGVtZW50LlxuICAgICAgICBsaXN0SXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlSGVhZGVyQ2xpY2sgPSBub29wO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVib3VuY2VkRmV0Y2hOZXh0RGF0YXNldE9uU2Nyb2xsID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5kZWJvdW5jZWRGZXRjaE5leHREYXRhc2V0T25TY3JvbGwodGhpcy5kYXRhTmF2aWdhdG9yLCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUsIHRoaXMpO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBbXTtcbiAgICAgICAgdGhpcy5yZW9yZGVyUHJvcHMgPSB7XG4gICAgICAgICAgICBtaW5JbmRleDogbnVsbCxcbiAgICAgICAgICAgIG1heEluZGV4OiBudWxsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlckZuKCk7XG4gICAgICAgIHRoaXMucHJvcHNJbml0UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRVcENVREhhbmRsZXJzKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgPSB0aGlzLm11bHRpc2VsZWN0ID8gW10gOiB7fTtcbiAgICAgICAgICAgIHZhciBlbGUgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmFwcC1saXZlbGlzdC1jb250YWluZXInKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlcmVvcmRlciAmJiAhdGhpcy5ncm91cGJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGUuYXR0cignYXJpYS1kZXNjcmliZWRieScsIHRoaXMudGl0bGVJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJlRG5EKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlcmVvcmRlcikge1xuICAgICAgICAgICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlLnJlbW92ZUF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cGJ5ICYmIHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUhlYWRlckNsaWNrID0gaGFuZGxlSGVhZGVyQ2xpY2s7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVBbGxIZWFkZXJzID0gdG9nZ2xlQWxsSGVhZGVycy5iaW5kKHVuZGVmaW5lZCwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRMaXN0Q2xhc3ModGhpcyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldHVwSGFuZGxlcnMoKTtcbiAgICAgICAgY29uc3QgJHVsID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3VsLmFwcC1saXZlbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgc3R5bGVyKCR1bCBhcyBIVE1MRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuU0NST0xMQUJMRV9DT05UQUlORVIpO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVyZW9yZGVyKSB7XG4gICAgICAgICAgICBpZiAoJHVsKSB7XG4gICAgICAgICAgICAgICAgJHVsLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRoaXMudGl0bGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZXJlb3JkZXIpIHtcbiAgICAgICAgICAgIGlmICgkdWwpIHtcbiAgICAgICAgICAgICAgICAkdWwucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xpc3RBbmltYXRvciAmJiB0aGlzLl9saXN0QW5pbWF0b3IuJGJ0blN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fbGlzdEFuaW1hdG9yLiRidG5TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9saXN0ZW5lckRlc3Ryb3llcnMuZm9yRWFjaChkID0+IGQgJiYgZCgpKTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICBzdXBlci5uZ09uRGV0YWNoKCk7XG4gICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBldmVudENhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgLy8gdGFwIGFuZCBkb3VibGVUYXAgZXZlbnRzIGFyZSBub3QgZ2V0dGluZyBwcm9wYWdhdGVkLlNvLCB1c2luZyBtb3VzZSBldmVudHMgaW5zdGVhZC5cbiAgICAgICAgY29uc3QgdG91Y2hUb01vdXNlID0ge1xuICAgICAgICAgICAgdGFwOiAnY2xpY2snLFxuICAgICAgICAgICAgZG91YmxldGFwOiAnZGJsY2xpY2snXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbmNsdWRlcyhbJ2NsaWNrJywgJ3RhcCcsICdkYmxjbGljaycsICdkb3VibGV0YXAnXSwgZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdG91Y2hUb01vdXNlW2V2ZW50TmFtZV0gfHwgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIChldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gJChldnQudGFyZ2V0KS5jbG9zZXN0KCcuYXBwLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1Db250ZXh0OiBMaXN0SXRlbURpcmVjdGl2ZSA9IHRhcmdldC5kYXRhKCdsaXN0SXRlbUNvbnRleHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdEl0ZW1Db250ZXh0LmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6IGxpc3RJdGVtQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50OiBldnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGxpc3RJdGVtQ29udGV4dC5pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb25maWd1cmVkU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gbW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTdGF0ZVBhcmFtcyhvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnBhZ2UgPSB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpZ2dlcldNRXZlbnQoZXZlbnROYW1lLCBpdGVtPykge1xuICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgbXVsdGlzZWxlY3QgZm9yIHRoZSBsaXZlbGlzdChMaXN0IHdpdGggZm9ybSB0ZW1wbGF0ZSksIGluIHJ1biBtb2RlIGRlbGV0aW5nIGEgcmVjb3JkIGlzIGdldHRpbmcgZmFpbGVkLiBCZWN1YXNlIHRoZSBzZWxlY3RlZGl0ZW0gd2lsbCBiZSBhcnJheSBvZiBvYmplY3RzLiBTbyBjb25zaWRlciB0aGUgbGFzdCBvYmplY3QuXG4gICAgICAgIGxldCByb3cgPSB0aGlzLm11bHRpc2VsZWN0ID8gbGFzdCh0aGlzLnNlbGVjdGVkaXRlbSkgOiB0aGlzLnNlbGVjdGVkaXRlbTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJvdyA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHAubm90aWZ5KCd3bS1ldmVudCcsIHtldmVudE5hbWUsIHdpZGdldE5hbWU6IHRoaXMubmFtZSwgcm93OiByb3d9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0TmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluZlNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uRGVtYW5kTG9hZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlQmFzaWNOYXZpZ2F0aW9uKCkge1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gTkFWSUdBVElPTl9UWVBFLkJBU0lDO1xuICAgICAgICB0aGlzLnNob3dOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZUlubGluZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuSU5MSU5FO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlQ2xhc3NpY05hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuQ0xBU1NJQztcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVQYWdlck5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBOQVZJR0FUSU9OX1RZUEUuUEFHRVI7XG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TmF2aWdhdGlvblR5cGVOb25lKCkge1xuICAgICAgICB0aGlzLm5hdkNvbnRyb2xzID0gTkFWSUdBVElPTl9UWVBFLk5PTkU7XG4gICAgICAgIHRoaXMuc2hvd05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZUluZmluaXRlU2Nyb2xsKCkge1xuICAgICAgICB0aGlzLmluZlNjcm9sbCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVPbkRlbWFuZExvYWQoKSB7XG4gICAgICAgIHRoaXMub25EZW1hbmRMb2FkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93TmF2aWdhdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBOYXZpZ2F0aW9uIHR5cGUgZm9yIHRoZSBsaXN0LlxuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25UeXBlQ2hhbmdlKHR5cGUpIHtcbiAgICAgICAgdGhpcy5yZXNldE5hdmlnYXRpb24oKTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5CQVNJQzpcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuSU5MSU5FOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5saW5lTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuQURWQU5DRUQ6XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5DTEFTU0lDOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQ2xhc3NpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLlBBR0VSOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFnZXJOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIE5BVklHQVRJT05fVFlQRS5OT05FIDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25UeXBlTm9uZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQVZJR0FUSU9OX1RZUEUuU0NST0xMOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5maW5pdGVTY3JvbGwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkFWSUdBVElPTl9UWVBFLk9OREVNQU5EOlxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlT25EZW1hbmRMb2FkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgZmllbGREZWZzIHByb3BlcnR5LCBmaWVsZERlZnMgaXMgdGhlIG1vZGVsIG9mIHRoZSBMaXN0IENvbXBvbmVudC5cbiAgICAgKiBmaWVsZERlZnMgaXMgYW4gQXJyYXkgdHlwZS5cbiAgICAgKiBAcGFyYW0gbmV3VmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWVsZERlZnMobmV3VmFsOiBBcnJheTxhbnk+KSB7XG4gICAgICAgIGlmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkge1xuICAgICAgICAgICAgW3RoaXMuZmllbGREZWZzLCB0aGlzLmN1cnJlbnRQYWdlXSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlRmllbGRzT25QYWdpbmF0aW9uKHRoaXMsIG5ld1ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IG5ld1ZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZzID0gZ2V0T3JkZXJlZERhdGFzZXQodGhpcy5maWVsZERlZnMsIHRoaXMub3JkZXJieSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBieSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkRGF0YSA9IGdyb3VwRGF0YSh0aGlzLCB0aGlzLmZpZWxkRGVmcywgdGhpcy5ncm91cGJ5LCB0aGlzLm1hdGNoLCB0aGlzLm9yZGVyYnksIHRoaXMuZGF0ZWZvcm1hdCwgdGhpcy5kYXRlUGlwZSwgdW5kZWZpbmVkLCB0aGlzLmFwcERlZmF1bHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgdGhpcy5saXN0SXRlbXMuc2V0RGlydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YUNoYW5nZShuZXdWYWwpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5ld1ZhbCBpcyBub3QgZW1wdHlcbiAgICAgICAgaWYgKCFpc0VtcHR5KG5ld1ZhbCkpIHtcblxuICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFDaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvbmUgdGhlIHRoZSBkYXRhIGluIGNhc2Ugb2YgbGl2ZSBhbmQgc2VydmljZSB2YXJpYWJsZXMgdG8gcHJldmVudCB0aGUgdHdvLXdheSBiaW5kaW5nIGZvciB0aGVzZSB2YXJpYWJsZXMuXG4gICAgICAgICAgICAgICAgbmV3VmFsID0gY2xvbmVEZWVwKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc09iamVjdChuZXdWYWwpICYmICFpc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBpc0VtcHR5KG5ld1ZhbCkgPyBbXSA6IFtuZXdWYWxdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IG5ld1ZhbC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcGFnZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIDEgb24gaW5pdGlhbCBsb2FkIHRoZW4gd2UgcmVuZGVyIHRoZSBmaXJzdCBwYWdlLlxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2Uub3duZXIgPT09ICdBcHAnICYmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkgJiYgIXRoaXMuY3VycmVudFBhZ2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKS5udW1iZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgICAgICdwYWdlJzogMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVkYXRhcmVuZGVyJywgeyRkYXRhOiBuZXdWYWx9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZERlZnMobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmllbGREZWZzKFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZXMgdGhlIGRhdGFTb3VyY2Ugd2hlbiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBDb21wb25lbnQuXG4gICAgcHJpdmF0ZSBzZXR1cERhdGFTb3VyY2UoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFOYXZpZ2F0b3IgPSB0aGlzLmRhdGFOYXZpZ2F0b3I7XG5cbiAgICAgICAgZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCAyMFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLypSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBcInJlc3VsdFwiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBwYWdpbmF0ZWQgZGF0YSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gZGF0YU5hdmlnYXRvci5yZXN1bHRFbWl0dGVyLnN1YnNjcmliZSgobmV3VmFsOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKG5ld1ZhbCk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICAvKkRlLXJlZ2lzdGVyIHRoZSB3YXRjaCBpZiBpdCBpcyBleGlzdHMgKi9cbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwibWF4UmVzdWx0c1wiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBcInBhZ2VTaXplXCIgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IGRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0c0VtaXR0ZXIuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSB2YWw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgMjA7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlCaW5kaW5nKCdkYXRhc2V0Jyk7XG4gICAgICAgIC8vIHdoZW4gbGlzdCBoYXZpbmcgXCJkYXRhc2V0Ym91bmRleHByXCIgYXR0ciBpbmRpY2F0ZXMgdGhhdCBsaXN0IGlzIGJvdW5kIHRvIGl0ZW0gY29udGV4dFxuICAgICAgICAvLyB3aGVuIGRhdGFzZXQgaXMgYm91bmQgdG8gXCJpdGVtLkZJRUxEXCIgdGhlbiBpdGVtIGNvbnRleHQgaXMgcGFzc2VkIGFzIHRoZSBkYXRhc291cmNlLlxuICAgICAgICBjb25zdCBkYXRhc2V0Qm91bmRFeHByID0gdGhpcy5nZXRBdHRyKCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldChcbiAgICAgICAgICAgIHRoaXMuYmluZGRhdGFzZXQsXG4gICAgICAgICAgICB0aGlzLnZpZXdQYXJlbnQsXG4gICAgICAgICAgICBkYXRhc2V0Qm91bmRFeHByID8gdGhpcy5jb250ZXh0IDogdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgdGhpcy5kYXRhc2V0LFxuICAgICAgICAgICAgdGhpcy5iaW5kZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIsXG4gICAgICAgICAgICB0aGlzLnN0YXRlaGFuZGxlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EYXRhU2V0Q2hhbmdlKG5ld1ZhbCkge1xuICAgICAgICBpZiAoZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIHRoaXMuX3BhZ2VMb2FkKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB7IC8vIG1haW50YWluIHVwZGF0ZWQgcGFnZSBzaXplIGluIHRoZSBzdGF0ZVBlcnNpc3RlbmNlXG4gICAgICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSB8fCBnZXQod2lkZ2V0U3RhdGUsICdwYWdlc2l6ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ2hhbmdlZCh7cGFnZTogd2lkZ2V0U3RhdGUucGFnaW5hdGlvbiB8fCAxLCBwYWdlc2l6ZTogd2lkZ2V0U3RhdGUucGFnZXNpemV9LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnBhZ2VDaGFuZ2VkKHtwYWdlOiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9ufSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gJiYgdGhpcy5uYXZpZ2F0aW9uICE9PSBOQVZJR0FUSU9OX1RZUEUuTk9ORSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBEYXRhU291cmNlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5uYXZpZ2F0aW9uICYmIHRoaXMubmF2aWdhdGlvbiAhPT0gTkFWSUdBVElPTl9UWVBFLk5PTkUpIHtcbiAgICAgICAgICAgIC8vIElmIG5hdmlnYXRpb24gaXMgYWxyZWFkeSBzZXR1cCBhbmQgZGF0YXNvdXJjZSBpcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIGRhdGFzb3VyY2Ugb24gbmF2aWdhdGlvblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLnNldERhdGFTb3VyY2UodGhpcy5kYXRhc291cmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbCB0aGUgTGlzdEl0ZW0ncyBBY3RpdmUgc3RhdGUgaXMgc2V0IHRvIGZhbHNlLlxuICAgIHByaXZhdGUgZGVzZWxlY3RMaXN0SXRlbXMoKSB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmlzQWN0aXZlID0gZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIERlc2VsZWN0IGFsbCB0aGUgTGlzdEl0ZW1zIGFuZCBjbGVhciB0aGUgc2VsZWN0ZWRpdGVtKEluT3V0Qm91bmQgUHJvcGVydHkgbW9kZWwpXG4gICAgcHJpdmF0ZSBjbGVhclNlbGVjdGVkSXRlbXMoKSB7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RMaXN0SXRlbXMoKTtcbiAgICAgICAgdGhpcy5faXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgTGlzdEl0ZW1EaXJlY3RpdmUgaW5zdGFuY2UgYnkgY2hlY2tpbmcgdGhlIGVxdWFsaXR5IG9mIHRoZSBtb2RlbC5cbiAgICAgKiBAcGFyYW0gbGlzdE1vZGVsOiBtb2RlbCB0byBiZSBzZWFyY2hlZCBmb3JcbiAgICAgKiBAcmV0dXJucyBMaXN0SXRlbSBpZiB0aGUgbW9kZWwgaXMgbWF0Y2hlZCBlbHNlIHJldHVybiBudWxsLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TGlzdEl0ZW1CeU1vZGVsKGxpc3RNb2RlbCk6IExpc3RJdGVtRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLmZpbmQoKGxpc3RJdGVtKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbU9iaiA9IGxpc3RJdGVtLml0ZW07XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cGJ5ICYmICFoYXMobGlzdE1vZGVsLCAnX2dyb3VwSW5kZXgnKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGdyb3VwYnkgaXMgZW5hYmxlZCwgaXRlbSBjb250YWlucyBfZ3JvdXBJbmRleCBwcm9wZXJ0eSB3aGljaCBzaG91bGQgYmUgZXhjbHVkZWQgd2hpbGUgY29tcGFyaW5nIG1vZGVsLlxuICAgICAgICAgICAgICAgIGl0ZW1PYmogPSBjbG9uZShpdGVtT2JqKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbU9iai5fZ3JvdXBJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0VxdWFsKGl0ZW1PYmosIGxpc3RNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSXRlbXNXaWRnZXRzKHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGxldCBvYmogPSB7fSwgd2lkZ2V0U3RhdGU7XG4gICAgICAgIGNvbnN0IHBhZ2VOdW0gPSBnZXQodGhpcy5kYXRhTmF2aWdhdG9yLCAnZG4uY3VycmVudFBhZ2UnKSB8fCAxO1xuICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBjb25maWd1cmVkIHNlbGVjdGVkIGl0ZW1zIGZvciBjdXJyZW50IHBhZ2UgYW5kIGNvbnN0cnVjdCBuZXcgb25lcyBsYXRlciBiZWxvdy5cbiAgICAgICAgICAgIHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpIHx8IHt9O1xuICAgICAgICAgICAgaWYgKGdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBtdWx0aXNlbGVjdCBpcyBvbiBhbmQgYW4gaXRlbSBpcyBzZWxlY3RlZCB3aXRob3V0IHByZXNzaW5nIENUUkwsIHByZXZpb3VzbHkgc2VsZWN0ZWQgaXRlbXMgaW4gc3RhdGUgc2hvdWxkIGJlIGVtcHR5LlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0ICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0gPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW0ucGFnZSA9PT0gcGFnZU51bTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZEl0ZW1XaWRnZXRzIGFzIEFycmF5PFdpZGdldFJlZj4pLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkSXRlbVdpZGdldHMgYXMgQXJyYXk8V2lkZ2V0UmVmPikucHVzaChpdGVtLmN1cnJlbnRJdGVtV2lkZ2V0cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1XaWRnZXRzID0gaXRlbS5jdXJyZW50SXRlbVdpZGdldHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iaiA9IHtwYWdlOiBwYWdlTnVtLCBpbmRleDogaW5kZXh9O1xuICAgICAgICAgICAgICAgIGlmIChnZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSAmJiB0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc29tZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0gPSBbb2JqXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmICFzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdGhlIGxpc3RJdGVtIGFuZCB1cGRhdGVzIHNlbGVjdGVkaXRlbSBwcm9wZXJ0eS5cbiAgICAgKiBJZiB0aGUgbGlzdEl0ZW0gaXMgYWxyZWFkeSBhIHNlbGVjdGVkIGl0ZW0gdGhlbiBkZXNlbGVjdHMgdGhlIGl0ZW0uXG4gICAgICogQHBhcmFtIHtMaXN0SXRlbURpcmVjdGl2ZX0gJGxpc3RJdGVtOiBJdGVtIHRvIGJlIHNlbGVjdGVkIG9mIGRlc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b2dnbGVMaXN0SXRlbVNlbGVjdGlvbigkbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkPykge1xuICAgICAgICAvLyBpdGVtIGlzIG5vdCBhbGxvd2VkIHRvIGdldCBzZWxlY3RlZCBpZiBpdCBpcyBkaXNhYmxlZC5cbiAgICAgICAgaWYgKCRsaXN0SXRlbSAmJiAhJGxpc3RJdGVtLmRpc2FibGVJdGVtKSB7XG4gICAgICAgICAgICBsZXQgaXRlbSA9ICRsaXN0SXRlbS5pdGVtO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBieSAmJiBoYXMoaXRlbSwgJ19ncm91cEluZGV4JykpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBncm91cGJ5IGlzIGVuYWJsZWQsIGl0ZW0gY29udGFpbnMgX2dyb3VwSW5kZXggcHJvcGVydHkgd2hpY2ggc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gc2VsZWN0ZWRpdGVtLlxuICAgICAgICAgICAgICAgIGl0ZW0gPSBjbG9uZShpdGVtKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgaXRlbS5fZ3JvdXBJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkbGlzdEl0ZW0uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHB1bGxBbGxXaXRoKHRoaXMuX2l0ZW1zLCBbaXRlbV0sIGlzRXF1YWwpO1xuICAgICAgICAgICAgICAgICRsaXN0SXRlbS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBtdWx0aXNlbGVjdCBpcyBmYWxzZSwgY2xlYXIgdGhlIHNlbGVjdEl0ZW0gbGlzdCBiZWZvcmUgYWRkaW5nIGFuIGl0ZW0gdG8gdGhlIHNlbGVjdEl0ZW0gbGlzdC5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHt3aWRnZXQ6ICRsaXN0SXRlbSwgJGRhdGE6IGl0ZW19KTtcbiAgICAgICAgICAgICAgICAkbGlzdEl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW1zV2lkZ2V0cyhzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBpcyBJbnZva2VkIHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgTGlzdCBXaWRnZXQgaXMgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge1F1ZXJ5TGlzdDxMaXN0SXRlbURpcmVjdGl2ZT59IGxpc3RJdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25MaXN0UmVuZGVyKGxpc3RJdGVtczogUXVlcnlMaXN0PExpc3RJdGVtRGlyZWN0aXZlPikge1xuICAgICAgICAvLyBBZGRlZCByZW5kZXIgY2FsbGJhY2sgZXZlbnQuIFRoaXMgbWV0aG9kKG9uTGlzdFJlbmRlcikgaXMgY2FsbGluZyBtdWx0aXBsZSB0aW1lcyBzbyBjaGVja2luZyBpc0RhdGFjaGFuZ2VkIGZsYWcgYmVjYXVzZSB0aGlzIGZhbGcgaXMgY2hhbmdlZCB3aGVuZXZlciBuZXcgZGF0YSBpcyByZW5kZXJlZC5cbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhQ2hhbmdlZCkge1xuICAgICAgICAgICAgLy8gV2hlbmV2ZXIgZGF0YXNldCBpcyBjaGFuZ2VkLCB0cmlnZ2VyIHdhdGNoZXJzIHRvIGV2YWx1YXRlIGxpc3RpdGVtIGJpbmQgZXhwcmVzc2lvbnMuXG4gICAgICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3JlbmRlcicsIHskZGF0YTogdGhpcy5maWVsZERlZnN9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0RhdGFDaGFuZ2VkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiBsaXN0SXRlbXMubGVuZ3RoICYmIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICBpZiAoZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zTGVuZ3RoID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggOiB0b051bWJlcighaXNFbXB0eSh0aGlzLnNlbGVjdGVkaXRlbSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZ2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJykgfHwgMTtcbiAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uID0gd2lkZ2V0U3RhdGUucGFnaW5hdGlvbiB8fCAxO1xuICAgICAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgaXRlbSBzZWxlY3Rpb24gZnJvbSBiZWluZyB0cmlnZ2VyZWQgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtc0xlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCAmJiB3aWRnZXRTdGF0ZS5wYWdpbmF0aW9uID09PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucGFnZSA9PT0gY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbS5pbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkgPyB0aGlzLnNlbGVjdGVkaXRlbSA6IFt0aGlzLnNlbGVjdGVkaXRlbV07XG5cbiAgICAgICAgdGhpcy5maXJzdFNlbGVjdGVkSXRlbSA9IHRoaXMubGFzdFNlbGVjdGVkSXRlbSA9IG51bGw7XG5cbiAgICAgICAgLy8gZG9uJ3Qgc2VsZWN0IGZpcnN0IGl0ZW0gaWYgbXVsdGktc2VsZWN0IGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IGl0ZW0gaXMgYWxyZWFkeSBzZWxlY3RlZCBpbiB0aGUgbGlzdC5cbiAgICAgICAgLy8gZG9uJ3Qgc2VsZWN0IGZpcnN0IGl0ZW0gaWYgc3RhdGUgaW5mb3JtYXRpb24gaGFzIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgIGlmIChsaXN0SXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0Zmlyc3RpdGVtICYmICEodGhpcy5faXRlbXMubGVuZ3RoICYmIHRoaXMubXVsdGlzZWxlY3QpICYmIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0ICRmaXJzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlID0gbGlzdEl0ZW1zLmZpcnN0O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgISRmaXJzdEl0ZW0uZGlzYWJsZUl0ZW0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUNoYW5nZWQgJiZcbiAgICAgICAgICAgICAgICAvLyBcImluZmluaXRlIHNjcm9sbFwiIG9yIFwibG9hZCBvbiBkZW1hbmRcIiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZCB0aGVuIGRvbnQgYWx0ZXIgdGhlIHNlbGVjdGVkIGxpc3QgaXRlbXMuXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW5mU2Nyb2xsIHx8IHRoaXMub25EZW1hbmRMb2FkKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcy5sZW5ndGhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RTZWxlY3RlZEl0ZW0gPSB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSAkZmlyc3RJdGVtO1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGluZyB0aGUgZmlyc3QgcmVjb3JkXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdExpc3RJdGVtcygpO1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKHNlbGVjdGVkaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW06IExpc3RJdGVtRGlyZWN0aXZlID0gdGhpcy5nZXRMaXN0SXRlbUJ5TW9kZWwoc2VsZWN0ZWRpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW0gPSBsaXN0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMgdGhlIGFjdGl2ZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpZWxkRGVmcy5sZW5ndGggJiYgdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtb290aFNjcm9sbEVsID0gdGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbd21zbW9vdGhzY3JvbGxdJyk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG1vYmlsZSBhcHAgd2hlbiBtb2RhbCBleGlzdHMsIGFuZCBsaXN0IGl0ZW1zIGhlaWdodCBpcyBncmVhdGVyIHRoYW4gdGhlIG1vZGFsIGNvbnRlbnQgcHJvdmlkZSBjY29udGFpbmVyIGEgc2Nyb2xsYWJsZSBoZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsQm9keSA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnLm1vZGFsLWJvZHknKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RIdCA9IHRoaXMuJGVsZW1lbnQuZmluZCgndWwnKS5oZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsSHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxNDA7XG4gICAgICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiBtb2RhbEJvZHkubGVuZ3RoICYmIGxpc3RIdCA+IG1vZGFsSHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmNzcygnaGVpZ2h0JywgbW9kYWxIdCArICdweCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5iaW5kU2Nyb2xsRXZ0KHRoaXMsICc+IHVsJywgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0RhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLmxpc3RJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShsaXN0SXRlbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxpc3RSZW5kZXIobGlzdEl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaGFuZGxlIGNsaWNrIGV2ZW50IGluIGNhcHR1cmluZyBwaGFzZS5cbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3VsLmFwcC1saXZlbGlzdC1jb250YWluZXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSAkKCRldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5hcHAtbGlzdC1pdGVtJyk7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmaW5kIHRoZSBjdXJyZW50IGxpc3QgaXRlbVxuICAgICAgICAgICAgd2hpbGUgKHRhcmdldC5nZXQoMCkgJiYgKHRhcmdldC5jbG9zZXN0KCd1bC5hcHAtbGl2ZWxpc3QtY29udGFpbmVyJykuZ2V0KDApICE9PSAkZXZlbnQuY3VycmVudFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50KCkuY2xvc2VzdCgnLmFwcC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxpc3RJdGVtU2VsZWN0aW9uKHRhcmdldCwgJGV2ZW50KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcnMgb24gZHJhZyBzdGFydCB3aGlsZSByZW9yZGVyaW5nLlxuICAgIHByaXZhdGUgb25SZW9yZGVyU3RhcnQoZXZ0LCB1aSkge1xuICAgICAgICB1aS5wbGFjZWhvbGRlci5oZWlnaHQodWkuaXRlbS5oZWlnaHQoKSk7XG4gICAgICAgIHRoaXMuJHVsRWxlLmRhdGEoJ29sZEluZGV4JywgdWkuaXRlbS5pbmRleCgpKTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VycyBkdXJpbmcgc29ydGluZ1xuICAgIHByaXZhdGUgb25Tb3J0KGV2dCwgdWkpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBpbmZpbml0ZSBzY3JvbGwsIHdoZW4gdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIHNjcm9sbCBlbmFibGVkXG4gICAgICAgIC8vIG9uIGRyYWdnaW5nIHRoZSBlbGVtZW50IHRvIGxhc3QgaXRlbSdzIHBvc2l0aW9uIG1hbnVhbGx5IHRyaWdnZXIgbG9hZGluZyBvZiBuZXh0IGl0ZW1zXG4gICAgICAgIGlmICh0aGlzLmluZlNjcm9sbCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW1PZmZzZXQgPSB0aGlzLiR1bEVsZS5maW5kKGBbbGlzdGl0ZW1pbmRleD0ke3RoaXMuZmllbGREZWZzLmxlbmd0aCAtIDF9XWApLm9mZnNldCgpO1xuICAgICAgICAgICAgaWYgKGxhc3RJdGVtT2Zmc2V0ICYmIGxhc3RJdGVtT2Zmc2V0LnRvcCA8IHVpLm9mZnNldC50b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmJpbmRTY3JvbGxFdnQodGhpcywgJz4gdWwnLCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVib3VuY2VkRmV0Y2hOZXh0RGF0YXNldE9uU2Nyb2xsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VycyBhZnRlciB0aGUgc29ydGluZy5cbiAgICBwcml2YXRlIG9uVXBkYXRlKGV2dCwgdWksIHByZXNlbnRJbmRleD8pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmllbGREZWZzO1xuICAgICAgICAvLyBJZiB1aSBpcyBub3QgcHJlc2VudCB0aGVuIGl0IGlzIGNhbGxlZCBmcm9tIGRyYWcgYW5kIGRyb3AgdXNpbmcga2V5Ym9hcmRcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSB1aSA9PT0gdW5kZWZpbmVkID8gcHJlc2VudEluZGV4IDogdWkuaXRlbS5pbmRleCgpO1xuICAgICAgICBjb25zdCBvbGRJbmRleCA9IHRoaXMuJHVsRWxlLmRhdGEoJ29sZEluZGV4Jyk7XG5cbiAgICAgICAgY29uc3QgbWluSW5kZXggPSBtaW4oW25ld0luZGV4LCBvbGRJbmRleF0pO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IG1heChbbmV3SW5kZXgsIG9sZEluZGV4XSk7XG5cbiAgICAgICAgY29uc3QgZHJhZ2dlZEl0ZW0gPSBwdWxsQXQoZGF0YSwgb2xkSW5kZXgpWzBdO1xuICAgICAgICAvLyBNb2RpZnkgdGhlIGRhdGEgbGlzdCBvbmx5IGlmIHdlIGZpbmQgYSBkcmFnZ2VkSXRlbVxuICAgICAgICBpZiAoZHJhZ2dlZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcywgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlb3JkZXJQcm9wcy5taW5JbmRleCA9IG1pbihbbWluSW5kZXgsIHRoaXMucmVvcmRlclByb3BzLm1pbkluZGV4XSk7XG4gICAgICAgICAgICB0aGlzLnJlb3JkZXJQcm9wcy5tYXhJbmRleCA9IG1heChbbWF4SW5kZXgsIHRoaXMucmVvcmRlclByb3BzLm1heEluZGV4XSk7XG5cbiAgICAgICAgICAgIGRhdGEuc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkSXRlbSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbnN0ICRjaGFuZ2VkSXRlbSA9IHtcbiAgICAgICAgICAgICAgICBvbGRJbmRleDogb2xkSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IG5ld0luZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGRhdGFbbmV3SW5kZXhdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyZW9yZGVyJywgeyRldmVudDogZXZ0LCAkZGF0YTogZGF0YSwgJGNoYW5nZWRJdGVtfSk7XG4gICAgICAgICAgICB0aGlzLiR1bEVsZS5yZW1vdmVEYXRhKCdvbGRJbmRleCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uZmlndXJlcyByZW9yZGVyaW5nIHRoZSBsaXN0IGl0ZW1zLlxuICAgIHByaXZhdGUgY29uZmlndXJlRG5EKCkge1xuICAgICAgICBsZXQgYXBwZW5kVG87XG4gICAgICAgIGNvbnN0IG1vZGFsRWwgPSAkKGRvY3VtZW50KS5maW5kKCcubW9kYWwnKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QXR0cignaGVpZ2h0JykpIHsgLy8gd2hlbiBoZWlnaHQgaXMgYXBwbGllZCB0byB0aGUgbGlzdCwgYXBwZW5kIHNob3VsZCBiZSB0aGUgdWwncyBwYXJlbnQgYXMgc2Nyb2xsIGlzIGFwcGxpZWQgdG8gdGhlIHBhcmVudFxuICAgICAgICAgICAgYXBwZW5kVG8gPSAncGFyZW50JztcbiAgICAgICAgfSBlbHNlIGlmIChtb2RhbEVsLmxlbmd0aCkgeyAvLyBJbiBjYXNlIG9mIGRpYWxvZywgYXBwZW5kVG8gc2hvdWxkIGJlIHRoZSBtb2RhbCBlbGVcbiAgICAgICAgICAgIGFwcGVuZFRvID0gbW9kYWxFbFttb2RhbEVsLmxlbmd0aCAtIDFdO1xuICAgICAgICB9IGVsc2UgeyAvLyBBcyBkZWZhdWx0IGFwcGVuZCB0byBzaG91bGQgYmUgYm9keVxuICAgICAgICAgICAgYXBwZW5kVG8gPSAnYm9keSc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYXBwZW5kVG86IGFwcGVuZFRvLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0ICRlbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy4kdWxFbGUgPSAkZWwuZmluZCgnLmFwcC1saXZlbGlzdC1jb250YWluZXInKTtcblxuICAgICAgICBjb25maWd1cmVEbkQodGhpcy4kdWxFbGUsIG9wdGlvbnMsIHRoaXMub25SZW9yZGVyU3RhcnQuYmluZCh0aGlzKSwgdGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpLCB0aGlzLm9uU29ydC5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLiR1bEVsZS5kcm9wcGFibGUoeydhY2NlcHQnOiAnLmFwcC1saXN0LWl0ZW0nfSk7XG5cblxuXG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBzZWxlY3Rpb24gbGltaXQgaXMgcmVhY2hlZC5cbiAgICBwcml2YXRlIGNoZWNrU2VsZWN0aW9uTGltaXQoY291bnQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gKCF0aGlzLnNlbGVjdGlvbmxpbWl0IHx8IGNvdW50IDwgdGhpcy5zZWxlY3Rpb25saW1pdCk7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsaXN0aXRlbSByZWZlcmVuY2UgYnkgaW5kZXggdmFsdWUuXG4gICAgcHJpdmF0ZSBnZXRMaXN0SXRlbUJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IExpc3RJdGVtRGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKVtpbmRleF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIGluZGV4IG9mIGFuIChsaXN0SXRlbURpcmVjdGl2ZSkgaW4gdGhlIGxpc3RJdGVtXG4gICAgICogQHBhcmFtIHtMaXN0SXRlbURpcmVjdGl2ZX0gaXRlbVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRMaXN0SXRlbUluZGV4KGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuaW5kZXhPZihpdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJucyBMaXN0SXRlbSBSZWZlcmVuY2UgYmFzZWQgb24gdGhlIGlucHV0IHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB2YWw6IGluZGV4IHwgbW9kZWwgb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgKiBAcmV0dXJucyB7TGlzdEl0ZW1EaXJlY3RpdmV9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRJdGVtUmVmQnlJbmRleE9yTW9kZWwodmFsOiBhbnkpOiBMaXN0SXRlbURpcmVjdGl2ZSB7XG4gICAgICAgIGxldCBsaXN0SXRlbTogTGlzdEl0ZW1EaXJlY3RpdmU7XG4gICAgICAgIGlmIChpc051bWJlcih2YWwpKSB7XG4gICAgICAgICAgICBsaXN0SXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeUluZGV4KHZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0SXRlbSA9IHRoaXMuZ2V0TGlzdEl0ZW1CeU1vZGVsKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3RJdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVmb3JlUGFnaW5hdGlvbkNoYW5nZSgkZXZlbnQsICRpbmRleCkge1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50LCAkaW5kZXh9KTtcbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oJGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuICRpbmRleDsgLy8gUmV0dXJuIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggaXRlbVxuICAgIH1cblxuICAgIC8vIEludm9rZSB0aGUgZGF0YXNvdXJjZSB2YXJpYWJsZSBieSBkZWZhdWx0IHdoZW4gcHVsbHRvcmVmcmVzaCBldmVudCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9QdWxsVG9SZWZyZXNoKCkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lckRlc3Ryb3llcnMucHVzaCh0aGlzLmFwcC5zdWJzY3JpYmUoJ3B1bGx0b3JlZnJlc2gnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5saXN0UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5saXN0UmVjb3JkcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVcENVREhhbmRsZXJzKCkge1xuICAgICAgICBjb25zdCAkYWRkSXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJhZGQtbGlzdC1pdGVtXCIpWzBdO1xuICAgICAgICBpZiAoJGFkZEl0ZW0pIHtcbiAgICAgICAgICAgIC8vIFRyaWdnZXJlZCBvbiBjbGljayBvZiBhZGQgYWN0aW9uXG4gICAgICAgICAgICAkYWRkSXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2dCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmICh0aXRsZSB8fCBzdWJoZWFkaW5nIHx8IGljb25jbGFzcykge1xuICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gcGFuZWwtaWNvbiB7e2ljb25jbGFzc319XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2hpZGRlbl09XCIhaWNvbmNsYXNzXCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbaW5uZXJIVE1MXT1cInN1YmhlYWRpbmdcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvaDM+XG4gIDwvZGl2PlxufVxuXG5AaWYgKG5hdmlnYXRpb24gPT09ICdJbmxpbmUnICYmICFub0RhdGFGb3VuZCkge1xuICA8ZGl2IGNsYXNzPVwiYXBwLWRhdGFuYXZpZ2F0b3JcIiBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlUHJldmlvdXNcIiBhcmlhLWxhYmVsPVwiUGFnZSBuYXZpZ2F0aW9uXCI+XG4gICAgPHVsIGNsYXNzPVwicGFnZXJcIj5cbiAgICAgIDxsaSBjbGFzcz1cInByZXZpb3VzXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IChkYXRhTmF2aWdhdG9yID8gZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVQcmV2aW91cyA6IHRydWUpfVwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJkYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVQcmV2aW91c1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIFByZXZpb3VzIHBhZ2Uge3tkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZVByZXZpb3VzID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbn1cbkBpZiAobmF2aWdhdGlvbiA9PT0gJ0lubGluZScgJiYgIW5vRGF0YUZvdW5kKSB7XG4gIDxkaXYgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgY2xhc3M9XCJzci1vbmx5XCI+IHt7J1BhZ2UgJyArIGRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBkYXRhTmF2aWdhdG9yLnBhZ2VDb3VudCB9fTwvZGl2PlxufVxuXG48ZGl2PlxuICBAaWYgKGVuYWJsZXJlb3JkZXIpIHtcbiAgICA8ZGl2IGlkPXt7dGl0bGVJZH19IGNsYXNzPVwic3Itb25seVwiPlxuICAgICAgUHJlc3Mgc3BhY2UgYmFyIHRvIHRvZ2dsZSBkcmFnIGRyb3AgbW9kZSwgdXNlIGFycm93IGtleXMgdG8gbW92ZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBpZiAobGlzdEl0ZW1zICYmIGVuYWJsZXJlb3JkZXIgJiYgY3VycmVudEluZGV4KSB7XG4gICAgPGRpdiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiBjbGFzcz1cInNyLW9ubHlcIiA+XG4gICAgICB7e2FyaWFUZXh0ICsgY3VycmVudEluZGV4ICsgJyBvZiAnICsgIGxpc3RJdGVtcy5sZW5ndGh9fVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPHVsIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCIgIGNsYXNzPVwiYXBwLWxpdmVsaXN0LWNvbnRhaW5lciBjbGVhcmZpeCB7e2RpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2FwcC1ob3Jpem9udGFsLWxpc3QnOiAnJ319IHt7bGlzdGNsYXNzfX1cIiByb2xlPVwibGlzdFwiXG4gIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnc2VsZWN0JylcIlxuXG4gIChrZXlkb3duLnNwYWNlKT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnc3BhY2UnKVwiXG5cbiAgKGtleWRvd24uYXJyb3d1cCk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ2ZvY3VzUHJldicpXCJcbiAgKGtleWRvd24uYXJyb3dkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50LCAnZm9jdXNOZXh0JylcIlxuICAoa2V5ZG93bi5hcnJvd2xlZnQpPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdmb2N1c1ByZXYnKVwiXG4gIChrZXlkb3duLmFycm93cmlnaHQpPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdmb2N1c05leHQnKVwiXG5cbiAgKGtleWRvd24uc2hpZnQuYXJyb3d1cCk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NlbGVjdFByZXYnKVwiXG4gIChrZXlkb3duLnNoaWZ0LmFycm93ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NlbGVjdE5leHQnKVwiXG4gIChrZXlkb3duLnNoaWZ0LmFycm93bGVmdCk9XCJoYW5kbGVLZXlEb3duKCRldmVudCwgJ3NlbGVjdFByZXYnKVwiXG4gIChrZXlkb3duLnNoaWZ0LmFycm93cmlnaHQpPVwiaGFuZGxlS2V5RG93bigkZXZlbnQsICdzZWxlY3ROZXh0JylcIlxuICBbaGlkZGVuXT1cIm5vRGF0YUZvdW5kICYmICF2YXJpYWJsZUluZmxpZ2h0XCJcbiAgPlxuICBAaWYgKCFncm91cGJ5KSB7XG4gICAgQGZvciAoaXRlbSBvZiBmaWVsZERlZnM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgIDxsaSBjbGFzcz1cImFwcC1saXN0LWl0ZW0ge3tkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICcnIDogaXRlbXNQZXJSb3dDbGFzc319XCIgW25nQ2xhc3NdPVwibGlzdEl0ZW1SZWYuaXRlbUNsYXNzXCJcbiAgICAgICAgW3dtTGlzdEl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICNsaXN0SXRlbVJlZj1cImxpc3RJdGVtUmVmXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICByb2xlPVwibGlzdGl0ZW1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0VGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiY3JlYXRlQ3VzdG9tSW5qZWN0b3IoJ2ZhbHRfJyArIGxpc3RJdGVtUmVmLnRyYWNrSWQsIHtpdGVtOiBpdGVtLCAkaW5kZXg6ICRpbmRleCwgaXRlbVJlZjogbGlzdEl0ZW1SZWYsICRmaXJzdDogJGZpcnN0LCAkbGFzdDogJGxhc3QsIGN1cnJlbnRJdGVtV2lkZ2V0czogbGlzdEl0ZW1SZWYuY3VycmVudEl0ZW1XaWRnZXRzfSlcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW0sICRpbmRleDogJGluZGV4LCBpdGVtUmVmOiBsaXN0SXRlbVJlZiwgJGZpcnN0OiAkZmlyc3QsICRsYXN0OiAkbGFzdCwgY3VycmVudEl0ZW1XaWRnZXRzOiBsaXN0SXRlbVJlZi5jdXJyZW50SXRlbVdpZGdldHN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpPlxuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGZvciAoZ3JvdXBPYmogb2YgZ3JvdXBlZERhdGE7IHRyYWNrIGdyb3VwT2JqOyBsZXQgZ3JvdXBJbmRleCA9ICRpbmRleCkge1xuICAgICAgPGxpIGNsYXNzPVwiYXBwLWxpc3QtaXRlbS1ncm91cCBjbGVhcmZpeFwiPlxuICAgICAgICA8dWwgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIiBjbGFzcz1cImxpc3QtZ3JvdXAgaXRlbS1ncm91cFwiIFtuZ0NsYXNzXT1cImxpc3RjbGFzc1wiPlxuICAgICAgICAgIDxsaSBjbGFzcz1cImFwcC1saXN0LWl0ZW0taGVhZGVyIGxpc3QtaXRlbSBsaXN0LWdyb3VwLWhlYWRlclwiIChjbGljayk9XCJoYW5kbGVIZWFkZXJDbGljaygkZXZlbnQpXCIgW25nQ2xhc3NdPVwieydjb2xsYXBzaWJsZS1jb250ZW50JzogY29sbGFwc2libGV9XCI+XG4gICAgICAgICAgICA8aDQ+e3tncm91cE9iai5rZXl9fVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvblwiPlxuICAgICAgICAgICAgICAgIEBpZiAoY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gd2kgYWN0aW9uIHdpLWNoZXZyb24tdXBcIj48L2k+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd2NvdW50KSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsIGxhYmVsLWRlZmF1bHRcIj57e2dyb3VwT2JqLmRhdGEubGVuZ3RofX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBjbGVhcmZpeCB7e2RpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2FwcC1ob3Jpem9udGFsLWxpc3QnOiAnJ319XCI+XG4gICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZ3JvdXBPYmouZGF0YTsgdHJhY2sgdHJhY2tCeUZuKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICA8bGkgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhcHAtbGlzdC1pdGVtIGdyb3VwLWxpc3QtaXRlbSB7e2l0ZW1zUGVyUm93Q2xhc3N9fVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJsaXN0SXRlbVJlZi5pdGVtQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgW3dtTGlzdEl0ZW1dPVwiaXRlbVwiICNsaXN0SXRlbVJlZj1cImxpc3RJdGVtUmVmXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiY3JlYXRlQ3VzdG9tSW5qZWN0b3IoJ2dyb3VwXycgKyBsaXN0SXRlbVJlZi50cmFja0lkLCB7aXRlbTogaXRlbSwgJGluZGV4OiAkaW5kZXgsIGl0ZW1SZWY6IGxpc3RJdGVtUmVmLCAkZmlyc3Q6ICRmaXJzdCwgJGxhc3Q6ICRsYXN0LCBjdXJyZW50SXRlbVdpZGdldHM6IGxpc3RJdGVtUmVmLmN1cnJlbnRJdGVtV2lkZ2V0c30pXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbSwgJGluZGV4OiAkaW5kZXgsIGl0ZW1SZWY6IGxpc3RJdGVtUmVmLCAkZmlyc3Q6ICRmaXJzdCwgJGxhc3Q6ICRsYXN0LCBjdXJyZW50SXRlbVdpZGdldHM6IGxpc3RJdGVtUmVmLmN1cnJlbnRJdGVtV2lkZ2V0c31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIH1cbiAgfVxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RMZWZ0QWN0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0UmlnaHRBY3Rpb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC91bD5cblxuQGlmIChub0RhdGFGb3VuZCAmJiAhdmFyaWFibGVJbmZsaWdodCkge1xuICA8ZGl2IGNsYXNzPVwibm8tZGF0YS1tc2dcIiBbdGV4dENvbnRlbnRdPVwibm9kYXRhbWVzc2FnZVwiPjwvZGl2PlxufVxuXG5AaWYgKHZhcmlhYmxlSW5mbGlnaHQgJiYgIXB1bGx0b3JlZnJlc2gpIHtcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctZGF0YS1tc2dcIj5cbiAgICA8c3Bhbj5cbiAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gcGFuZWwtaWNvbiBmYS1zcGluXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW25nQ2xhc3NdPVwibG9hZGluZ2ljb25cIj48L2k+XG4gICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Mb2FkaW5nPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsb2FkaW5nLXRleHRcIiBbdGV4dENvbnRlbnRdPVwibG9hZGluZ2RhdGFtc2dcIj48L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbn1cblxuQGlmIChuYXZpZ2F0aW9uID09PSAnSW5saW5lJyAmJiAhbm9EYXRhRm91bmQpIHtcbiAgPGRpdiBjbGFzcz1cImFwcC1kYXRhbmF2aWdhdG9yXCIgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHRcIj5cbiAgICA8dWwgY2xhc3M9XCJwYWdlclwiPlxuICAgICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiAoZGF0YU5hdmlnYXRvciA/IGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCAgOiB0cnVlKX1cIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwiZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBOZXh0IHBhZ2Uge3tkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxufVxuXG5AaWYgKG5hdmlnYXRpb24gIT09ICdOb25lJykge1xuICA8ZGl2IGNsYXNzPVwicGFuZWwtZm9vdGVyXCIgW2hpZGRlbl09XCIhc2hvd05hdmlnYXRpb24gfHwgKG9uRGVtYW5kTG9hZCAmJiBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQpIHx8IChkYXRhTmF2aWdhdG9yPy5kYXRhU2l6ZSA8PSBwYWdlc2l6ZSAmJiAhYWxsb3dwYWdlc2l6ZWNoYW5nZSkgfHwgKCFkYXRhTmF2aWdhdG9yLmRhdGFTaXplICYmICFkYXRhTmF2aWdhdG9yLmRhdGFzb3VyY2U/LnBhZ2luYXRpb24/Lm5leHQpXCI+XG4gICAgPG5hdiB3bVBhZ2luYXRpb25cbiAgICAgIG5hdmlnYXRpb25hbGlnbi5iaW5kPVwibmF2aWdhdGlvbmFsaWduXCJcbiAgICAgIG5hdmlnYXRpb24uYmluZD1cIm5hdkNvbnRyb2xzXCJcbiAgICAgIHNob3dyZWNvcmRjb3VudC5iaW5kPVwic2hvd3JlY29yZGNvdW50XCJcbiAgICAgIG1heHNpemUuYmluZD1cIm1heHNpemVcIlxuICAgICAgYm91bmRhcnlsaW5rcy5iaW5kPVwiYm91bmRhcnlsaW5rc1wiXG4gICAgICBmb3JjZWVsbGlwc2VzLmJpbmQ9XCJmb3JjZWVsbGlwc2VzXCJcbiAgICAgIGRpcmVjdGlvbmxpbmtzLmJpbmQ9XCJkaXJlY3Rpb25saW5rc1wiXG4gICAgICBzaG93LmJpbmQ9XCIhb25EZW1hbmRMb2FkXCJcbiAgICAgIHBhZ2luYXRpb25jaGFuZ2UuZXZlbnQ9XCJiZWZvcmVQYWdpbmF0aW9uQ2hhbmdlKCRldmVudCwgJGluZGV4KVwiXG4gICAgPjwvbmF2PlxuICAgIEBpZiAob25EZW1hbmRMb2FkKSB7XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgIChjbGljayk9XCJkYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIlxuICAgICAgICBjbGFzcz1cImFwcC1idXR0b24gYnRuIGJ0bi1ibG9ja1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInBhZ2luYXRpb25jbGFzc1wiXG4gICAgICAgIFt0ZXh0Q29udGVudF09XCJvbmRlbWFuZG1lc3NhZ2VcIlxuICAgICAgPjwvYT5cbiAgICB9XG4gIDwvZGl2PlxufVxuXG48IS0tVGhpcyB0ZW1wbGF0ZSB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIGdyb3VwYnkgaXMgc3BlY2lmaWVkLS0+XG4iXX0=
|