@wavemaker/app-ng-runtime 11.15.5-rc.259 → 11.15.6-1.647697
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/build-task/bundles/index.umd.js +1 -1
- package/build-task/esm2022/data/form/form-field/form-field.build.mjs +2 -2
- package/build-task/fesm2022/index.mjs +1 -1
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/base/bundles/index.umd.js +4 -4
- package/components/base/esm2022/utils/widget-utils.mjs +5 -5
- package/components/base/fesm2022/index.mjs +5 -5
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +0 -2
- package/components/containers/accordion/bundles/index.umd.js +0 -5
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +1 -6
- package/components/containers/accordion/fesm2022/index.mjs +1 -6
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +2 -4
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +3 -5
- package/components/data/form/fesm2022/index.mjs +2 -4
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/bundles/index.umd.js +2 -2
- package/components/data/pagination/esm2022/pagination.component.mjs +3 -3
- package/components/data/pagination/fesm2022/index.mjs +2 -2
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +1 -8
- package/components/data/table/esm2022/table.component.mjs +2 -9
- package/components/data/table/fesm2022/index.mjs +1 -8
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/login-dialog/bundles/index.umd.js +1 -1
- package/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +2 -2
- package/components/dialogs/login-dialog/fesm2022/index.mjs +1 -1
- package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
- package/components/input/calendar/fesm2022/index.mjs +1 -1
- package/components/input/chips/fesm2022/index.mjs +1 -1
- package/components/input/dataset-aware-form/fesm2022/index.mjs +1 -1
- package/components/input/epoch/base-date-time/bundles/index.umd.js +1 -2
- package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +2 -3
- package/components/input/epoch/base-date-time/fesm2022/index.mjs +1 -2
- package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/fesm2022/index.mjs +1 -1
- package/core/bundles/index.umd.js +4 -0
- package/core/esm2022/utils/utils.mjs +5 -1
- package/core/fesm2022/index.mjs +4 -0
- package/core/fesm2022/index.mjs.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +1 -1
- package/runtime/base/esm2022/services/app.manager.service.mjs +2 -2
- package/runtime/base/fesm2022/index.mjs +1 -1
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/dynamic/fesm2022/index.mjs +2 -2
- package/scripts/datatable/datatable.js +1 -8
- package/transpiler/bundles/index.umd.js +2 -2
- package/transpiler/esm2022/build.mjs +3 -3
- package/transpiler/fesm2022/index.mjs +2 -2
- package/transpiler/fesm2022/index.mjs.map +1 -1
- package/variables/bundles/index.umd.js +10 -10
- package/variables/esm2022/constants/variables.constants.mjs +6 -6
- package/variables/esm2022/factory/variable-manager.factory.mjs +5 -5
- package/variables/esm2022/service/variables.service.mjs +2 -2
- package/variables/fesm2022/index.mjs +10 -10
- package/variables/fesm2022/index.mjs.map +1 -1
|
@@ -559,8 +559,8 @@
|
|
|
559
559
|
if (parts[0] === 'Variables' || parts[0] === 'Widgets') {
|
|
560
560
|
bindPagingOptions = `${parts[0]}.${parts[1]}.pagination`;
|
|
561
561
|
}
|
|
562
|
-
else if (parts[0] === 'App' && parts[1] === 'activePage' && parts[2]
|
|
563
|
-
bindPagingOptions = `App.activePage.${parts[
|
|
562
|
+
else if (parts[0] === 'App' && parts[1] === 'activePage' && parts[2] === 'Variables' && parts[3]) {
|
|
563
|
+
bindPagingOptions = `App.activePage.Variables.${parts[3]}.pagination`;
|
|
564
564
|
}
|
|
565
565
|
if (!binddatasource && dataset && !datasetBoundExpr) {
|
|
566
566
|
this.dataset = dataset;
|
|
@@ -529,8 +529,8 @@ export class PaginationComponent extends StylableComponent {
|
|
|
529
529
|
if (parts[0] === 'Variables' || parts[0] === 'Widgets') {
|
|
530
530
|
bindPagingOptions = `${parts[0]}.${parts[1]}.pagination`;
|
|
531
531
|
}
|
|
532
|
-
else if (parts[0] === 'App' && parts[1] === 'activePage' && parts[2]
|
|
533
|
-
bindPagingOptions = `App.activePage.${parts[
|
|
532
|
+
else if (parts[0] === 'App' && parts[1] === 'activePage' && parts[2] === 'Variables' && parts[3]) {
|
|
533
|
+
bindPagingOptions = `App.activePage.Variables.${parts[3]}.pagination`;
|
|
534
534
|
}
|
|
535
535
|
if (!binddatasource && dataset && !datasetBoundExpr) {
|
|
536
536
|
this.dataset = dataset;
|
|
@@ -856,4 +856,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
856
856
|
type: ViewChild,
|
|
857
857
|
args: [BsDropdownDirective]
|
|
858
858
|
}] } });
|
|
859
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUVSLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGNBQWMsRUFDZCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sZ0NBQWdDLEVBQ2hDLFNBQVMsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FB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QUFDLG1CQUFtQixDQUFDO1NBQzFDLHNFQU1VLG1CQUFtQix1RUN0RWxDLDJqVkFzTkEsMkNEM0pjLFlBQVksNEhBQUUsV0FBVyxneEJBQUUsZ0JBQWdCLDhiQUFFLGdCQUFnQjs7NEZBTzlELG1CQUFtQjtrQkFUL0IsU0FBUztpQ0FDSSxJQUFJLFdBQ0wsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFlBQzlELGdCQUFnQixhQUVmO3dCQUNQLGtCQUFrQixxQkFBcUI7cUJBQzFDOzswQkF1RjJCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsU0FBUzs7MEJBQWtCLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRO3lDQW5GcEcsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ21DLFVBQVU7c0JBQW5ELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICAkd2F0Y2gsXG4gICAgYWRqdXN0VmVydGljYWxQb3NpdGlvbixcbiAgICBBcHBDb25zdGFudHMsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBkZWJvdW5jZSxcbiAgICBpc0RlZmluZWQsXG4gICAgc3dpdGNoQ2xhc3MsXG4gICAgdHJpZ2dlckZuXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgREVCT1VOQ0VfVElNRVMsXG4gICAgZ2V0T3JkZXJCeUV4cHIsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyxcbiAgICBXaWRnZXRSZWZcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vcGFnaW5hdGlvbi5wcm9wcyc7XG5pbXBvcnQge2ZvckVhY2gsIGdldCwgaXNBcnJheSwgaXNFbXB0eSwgaXNOdWxsLCBpc1N0cmluZywgcmFuZ2V9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7UGFnaW5hdGlvbk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wYWdpbmF0aW9uJztcbmltcG9ydCB7QnNEcm9wZG93bkRpcmVjdGl2ZSwgQnNEcm9wZG93bk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kYXRhbmF2aWdhdG9yIGNsZWFyZml4JztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXBhZ2luYXRpb24nLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3Qgc2l6ZUNsYXNzZXMgPSB7XG4gICAgJ1BhZ2VyJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnZXItc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnZXItbGcnXG4gICAgfSxcbiAgICAnQmFzaWMnOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdpbmF0aW9uLXNtJyxcbiAgICAgICAgJ2xhcmdlJzogJ3BhZ2luYXRpb24tbGcnXG4gICAgfSxcbiAgICAnQ2xhc3NpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9XG59O1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFBhZ2luYXRpb25Nb2R1bGUsIEJzRHJvcGRvd25Nb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtUGFnaW5hdGlvbl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFBhZ2luYXRpb25Db21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG4gICAgQE91dHB1dCgpIHJlc3VsdEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBtYXhSZXN1bHRzRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBwcm90ZWN0ZWQgYnNEcm9wZG93bjtcbiAgICBwcml2YXRlIGRyb3Bkb3duU2Nyb2xsSGFuZGxlciE6ICgkZXZlbnQ6YW55KSA9PiB2b2lkO1xuICAgIGRhdGFzb3VyY2U7XG4gICAgbWF4UmVzdWx0cztcbiAgICBwYWdlU2l6ZU9wdGlvbnM7XG4gICAgcHJldlBhZ2VTaXplO1xuICAgIGFjdHVhbFBhZ2VTaXplO1xuICAgIGFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IFtdO1xuICAgIGZvY3VzZWRJbmRleCA9IDA7XG4gICAgcm93U3VtbWFyeTtcbiAgICBuYXZpZ2F0aW9uc2l6ZTtcbiAgICBzaG93cmVjb3JkY291bnQ7XG5cbiAgICBuYXZjb250cm9scztcbiAgICBuYXZpZ2F0aW9uO1xuXG4gICAgYm91bmRhcnlsaW5rcztcbiAgICBkaXJlY3Rpb25saW5rcztcblxuICAgIG5hdmlnYXRpb25DbGFzcztcbiAgICBkbiA9IHtcbiAgICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuXG4gICAgcGFnZUNvdW50ID0gMDtcbiAgICBpc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVQcmV2aW91cyA9IHRydWU7XG4gICAgaXNEaXNhYmxlRmlyc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUN1cnJlbnQ7XG4gICAgZGF0YVNpemU7XG4gICAgcHJldnNob3dyZWNvcmRjb3VudDtcbiAgICBpc0Rpc2FibGVDb3VudDtcbiAgICBmaXJzdFJvdztcbiAgICByZXN1bHQ7XG4gICAgX19mdWxsRGF0YTtcbiAgICBkYXRhc2V0O1xuICAgIG9wdGlvbnM7XG4gICAgc3RhdGVoYW5kbGVyO1xuICAgIGZpbHRlckZpZWxkcztcbiAgICBzb3J0T3B0aW9ucztcbiAgICBiaW5kZGF0YXNldDtcbiAgICBwYWdpbmF0aW9uO1xuICAgIGxvZ2ljYWxPcDtcblxuICAgIHByaXZhdGUgX2luaXRUaW1lb3V0SWQ6IGFueTsgLy8gU3RvcmUgdGltZW91dCBJRCBmb3IgY2xlYW51cFxuICAgIHByaXZhdGUgX2RlYm91bmNlZEFwcGx5RGF0YXNldCA9IGRlYm91bmNlKCgpID0+IHRoaXMud2lkZ2V0LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkUGFnZUNoYW5nZWQgPSBkZWJvdW5jZShldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZXZlbnQgJiYgZXZlbnQucGFnZTtcbiAgICAgICAgY29uc3QgbWF4UmVzdWx0cyA9IGV2ZW50ICYmIChldmVudC5wYWdlc2l6ZSB8fCBldmVudC5pdGVtc1BlclBhZ2UpIHx8IHRoaXMubWF4UmVzdWx0cztcblxuICAgICAgICAvLyBEbyBub3QgY2FsbCBnb1RvUGFnZSBpZiBwYWdlIGhhcyBub3QgY2hhbmdlZFxuICAgICAgICBpZiAoY3VycmVudFBhZ2UgIT09IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgdGhpcy5tYXhSZXN1bHRzICE9PSBtYXhSZXN1bHRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gKHRoaXMgYXMgYW55KS5wYXJlbnQgfHwgdGhpcztcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IG1heFJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICAgICAgICAgIGluc3QuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uID09PSAnQmFzaWMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcblxuICAgIHByaXZhdGUgX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKSB7XG4gICAgICAgIGZvckVhY2godGhpcy5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyksIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCk7Jyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGU/LmRhdGFzZXQuaXNhY2l0dmVwYWdlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoY2hpbGROb2RlPy5kYXRhc2V0LmlzZGlzYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBAU2tpcFNlbGYoKSBASW5qZWN0KFdpZGdldFJlZikgcHVibGljIHBhcmVudCwgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55KSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2luaXRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBjb21wb25lbnQgZGVzdHJ1Y3Rpb24gb3IgcGFyZW50IGJlaW5nIG51bGxcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkIHx8ICF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IHRoaXMucGFyZW50LmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgICAgICBpZih0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zID10aGlzLm5vcm1hbGl6ZVRvTnVtYmVyQXJyYXkodGhpcy5wYXJlbnQ/LnBhZ2VzaXplb3B0aW9ucyk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cbiAgICBub3JtYWxpemVUb051bWJlckFycmF5KGlucHV0KSB7IC8vIEhhbmRsZXMgYWxsIGZvcm1hdHMgaW4gb25lIHBsYWNlOiBcIjEwLDIwLDMwXCIsIFsxMCwyMCwzMF0sIFwiWzEwLDIwLDMwXVwiXG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBbXTtcblxuICAgICAgICBsZXQgYXJyO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgYXJyID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gaW5wdXQudHJpbSgpO1xuXG4gICAgICAgICAgICAvLyBoYW5kbGUgXCJbMSwyLDNdXCJcbiAgICAgICAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJbXCIpICYmIHRyaW1tZWQuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gSlNPTi5wYXJzZSh0cmltbWVkKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgXCIxLDIsM1wiXG4gICAgICAgICAgICAgICAgYXJyID0gdHJpbW1lZC5zcGxpdChcIixcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyXG4gICAgICAgICAgICAubWFwKHYgPT4gTnVtYmVyKHYpKVxuICAgICAgICAgICAgLmZpbHRlcih2ID0+ICFpc05hTih2KSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgfVxuXG4gICAgc2V0UmVzdWx0KHJlc3VsdCkge1xuICAgICAgICAvLyBUT0RPOiBFbWl0IGV2ZW50IG9ubHkgaWYgcmVzdWx0IGlzIGNoYW5nZWRcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMucmVzdWx0RW1pdHRlci5lbWl0KHRoaXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbmF2aWdhdGlvbkNsYXNzIGJhc2VkIG9uIG5hdmlnYXRpb24gYW5kIG5hdmlnYXRpb25TaXplIHByb3BzXG4gICAgcHJpdmF0ZSB1cGRhdGVOYXZTaXplKCkge1xuICAgICAgICBjb25zdCBzaXplQ2xzID0gc2l6ZUNsYXNzZXNbdGhpcy5uYXZjb250cm9sc107XG4gICAgICAgIGlmIChzaXplQ2xzICYmIHRoaXMubmF2aWdhdGlvbnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gc2l6ZUNsc1t0aGlzLm5hdmlnYXRpb25zaXplXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byByZXNldCB0aGUgcGFnaW5nIHZhbHVlcyB0byBkZWZhdWx0LlxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZGF0YVNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBwYWdpbmcgdmFsdWVzLiovXG4gICAgY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCkge1xuICAgICAgICB0aGlzLnBhZ2VDb3VudCA9ICh0aGlzLmRhdGFTaXplID4gdGhpcy5tYXhSZXN1bHRzKSA/IChNYXRoLmNlaWwodGhpcy5kYXRhU2l6ZSAvIHRoaXMubWF4UmVzdWx0cykpIDogKHRoaXMuZGF0YVNpemUgPCAwID8gMCA6IDEpO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycyovXG4gICAgc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpIHtcbiAgICAgICAgLypJZiBuZWl0aGVyICdkYXRhU2l6ZScgbm9yICdtYXhSZXN1bHRzJyBpcyBzZXQsIHRoZW4gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICBpZiAoIWRhdGFTaXplICYmICFtYXhSZXN1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IDE7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IGRhdGFTaXplO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGRhdGFTaXplO1xuICAgICAgICB9IGVsc2UgeyAvKkVsc2UsIHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlcyBhbmQgcmVjYWxjdWxhdGUgcGFnaW5nIHBhcmFtZXRlcnMuKi9cbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IG1heFJlc3VsdHMgfHwgdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGlzRGVmaW5lZChkYXRhU2l6ZSkgPyBkYXRhU2l6ZSA6IHRoaXMuZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgfHwgdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayB0aGUgZGF0YVNpemUgYW5kIG1hbmlwdWxhdGUgdGhlIG5hdmlnYXRvciBhY2NvcmRpbmdseS4qL1xuICAgIGNoZWNrRGF0YVNpemUoZGF0YVNpemUsIG51bWJlck9mRWxlbWVudHM/LCBzaXplPykge1xuICAgICAgICAvKklmIHRoZSBkYXRhU2l6ZSBpcyAtMSBvciBJbnRlZ2VyLk1BWF9WQUxVRSggd2hpY2ggaXMgMjE0NzQ4MzY0NyksIHRoZW4gdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIGlzIG5vdCBrbm93bi5cbiAgICAgICAgICogSGVuY2UsXG4gICAgICAgICAqIDEuIEhpZGUgdGhlICdUb3RhbCBSZWNvcmQgQ291bnQnLlxuICAgICAgICAgKiAyLiBEaXNhYmxlIHRoZSAnR29Ub0xhc3RQYWdlJyBsaW5rIGFzIHRoZSBwYWdlIG51bWJlciBvZiB0aGUgbGFzdCBwYWdlIGlzIG5vdCBrbm93bi4qL1xuICAgICAgICBpZiAoZGF0YVNpemUgPT09IC0xIHx8IGRhdGFTaXplID09PSBBcHBDb25zdGFudHMuSU5UX01BWF9WQUxVRSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50ID0gdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dyZWNvcmRjb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgbnVtYmVyIG9mIHJlY29yZHMgaW4gY3VycmVudCBwYWdlIGlzIGxlc3MgdGhhbiB0aGUgbWF4IHJlY29yZHMgc2l6ZSwgdGhpcyBpcyB0aGUgbGFzdCBwYWdlLiBTbyBkaXNhYmxlIG5leHQgYnV0dG9uLlxuICAgICAgICAgICAgaWYgKG51bWJlck9mRWxlbWVudHMgPCBzaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQ291bnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50IHx8IHRoaXMuc2hvd3JlY29yZGNvdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBkaXNhYmxlIG5hdmlnYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgYW5kIHRvdGFsIHBhZ2VzLiovXG4gICAgZGlzYWJsZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudFBhZ2VGaXJzdCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSAxKSxcbiAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VMYXN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlRmlyc3QgPSB0aGlzLmlzRGlzYWJsZVByZXZpb3VzID0gaXNDdXJyZW50UGFnZUZpcnN0O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdGhpcy5pc0Rpc2FibGVMYXN0ID0gaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXTVMtMTg4Njc6IEluIGNhc2Ugb2Ygc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgZm9yIHBhZ2VyIHR5cGUgcGFnaW5hdGlvbiBkZXBlbmQgb24gcHJldiBhbmQgbmV4dCBmbGFncyB3aGljaCBhcmUgc2V0IGJ5IGRldmVsb3BlclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSAhdGhpcy5wYWdpbmF0aW9uLnByZXY7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSAhdGhpcy5wYWdpbmF0aW9uLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVDdXJyZW50ID0gaXNDdXJyZW50UGFnZUZpcnN0ICYmIGlzQ3VycmVudFBhZ2VMYXN0O1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGNsaWVudCBzaWRlIHBhZ2luYXRpb24sIHdoZW4gbG9hZCBtb3JlIHJlYWNoZXMgbGFzdCBwYWdlIGhpZGUgdGhlIG9uLWRlbWFuZCBncmlkIGVsZVxuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuZGF0YXNldC5sZW5ndGggJiYgdGhpcy5pc0Rpc2FibGVOZXh0ICYmIHRoaXMucGFyZW50Lm9uRGVtYW5kTG9hZCAmJiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ2hpZGVMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5pc0Rpc2FibGVOZXh0LCB0aGlzLnBhcmVudC5pbmZTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgdmFyaWFibGUgYm91bmQgdG8gdGhlIGRhdGEtbmF2aWdhdG9yIGhhcyBwYWdpbmcuKi9cbiAgICBpc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXRQYWdpbmF0aW9uU3RhcnRJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5kYXRhc291cmNlPy5fcGFnaW5hdGlvbkNvbmZpZz8ucGFnaW5hdGlvblN0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBpc0RlZmluZWQoc3RhcnRJbmRleCkgJiYgdGhpcy5kYXRhc291cmNlPy5fcGFnaW5hdGlvbkNvbmZpZz8udHlwZSA9PT0gJ3BhZ2UnID8gTnVtYmVyKHN0YXJ0SW5kZXgpIDogMTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdoaWNoIGdpdmVzIHN1bW1hcnkgb2YgdGhlIGN1cnJlbnQgcGFnZSBkYXRhIChleDogSW4gVUkgaXQgaXMgc2hvd24gYXMgIDEgdG8gMTAgb3V0IG9mIDUwIHJlY29yZHMpXG4gICAgZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRvdGFsUmVjb3Jkcykge1xuICAgICAgICB0aGlzLnJvd1N1bW1hcnkgPSAgKGlzRGVmaW5lZChzdGFydEluZGV4KSAmJiBpc0RlZmluZWQoZW5kSW5kZXgpICYmIGlzRGVmaW5lZCh0b3RhbFJlY29yZHMpKSA/IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBlbmRJbmRleDogZW5kSW5kZXgsXG4gICAgICAgICAgICB0b3RhbFJlY29yZHM6IHRvdGFsUmVjb3Jkc1xuICAgICAgICB9OiB7fTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHJlc3VsdCBmb3IgY2xpZW50IHNpZGUgcGFnaW5hdGlvblxuICAgIHNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpIHtcbiAgICAgICAgbGV0IGRhdGFTaXplLFxuICAgICAgICAgICAgbWF4UmVzdWx0cyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc3RhcnRJbmRleDtcbiAgICAgICAgZGF0YVNpemUgPSBpc0FycmF5KG5ld1ZhbCkgPyBuZXdWYWwubGVuZ3RoIDogKGlzRW1wdHkobmV3VmFsKSA/IDAgOiAxKTtcbiAgICAgICAgbWF4UmVzdWx0cyA9ICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1heFJlc3VsdHMpIHx8IGRhdGFTaXplO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHsgLy8gd2hlbiBkZWZhdWx0IHBhZ2Ugc2l6ZSBpcyBub3QgZ2l2ZW4gdGhlbiB1c2UgbWF4UmVzdWx0cyBpbnN0ZWFkIG9mIG9wdGlvbnMubWF4UmVzdWx0c1xuICAgICAgICAgICAgbWF4UmVzdWx0cyA9IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3Igc3RhdGljIHZhcmlhYmxlLCBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuIEZvciBvdGhlciB2YXJpYWJsZXMgd2l0aG91dCBwYWdpbmF0aW9uIHJlc2V0IHRoZSBwYWdlIHRvIDFcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTIzMjYzXTogZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEgZmxhZyBpcyBmYWxzZSB3aGVuIGRhdGFzZXQgaXMgY2hhbmdlZCBmcm9tIHNjcmlwdCwgc28gc2V0dGluZyBjdXJyZW50IHBhZ2UgdG8gMVxuICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmICh0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpIHx8ICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmICh0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkgJiYgKGdldCh0aGlzLnBhcmVudCwgJ2dyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQnKSA9PT0gdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuQUNUSU9OUy5EQVRBU0VUX1VQREFURSB8fCAhZ2V0KHRoaXMucGFyZW50LCAnZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEnKSkpKSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcblxuICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSwgTWF0aC5taW4oc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cywgbmV3VmFsPy5sZW5ndGgpLCBuZXdWYWw/Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2V0UmVzdWx0KGlzQXJyYXkobmV3VmFsKSA/IG5ld1ZhbC5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzKSA6IG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlcyBuZWVkZWQgZm9yIHBhZ2luYXRpb24qL1xuICAgIHByaXZhdGUgc2V0UGFnaW5nVmFsdWVzKG5ld1ZhbCkge1xuICAgICAgICBsZXQgZGF0YVNpemUsXG4gICAgICAgICAgICBtYXhSZXN1bHRzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgZGF0YVNvdXJjZTtcbiAgICAgICAgbGV0IHZhcmlhYmxlT3B0aW9uczogYW55ID0ge307XG4gICAgICAgIC8vIFN0b3JlIHRoZSBkYXRhIGluIF9fZnVsbERhdGEuIFRoaXMgaXMgdXNlZCBmb3IgY2xpZW50IHNpZGUgc2VhcmNoaW5nIHdpdHZhaCBvdXQgbW9kaWZ5aW5nIHRoZSBhY3R1YWwgZGF0YXNldC5cbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbmV3VmFsO1xuICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YXNvdXJjZSB8fCB7fTtcbiAgICAgICAgICAgIHZhcmlhYmxlT3B0aW9ucyA9IGRhdGFTb3VyY2UuX29wdGlvbnMgfHwge307XG4gICAgICAgICAgICAvKkNoZWNrIGZvciBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGRhdGEgc2V0Ki9cbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUEFHSU5HX09QVElPTlMpIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBcImZpbHRlckZpZWxkc1wiIGFuZCBcInNvcnRPcHRpb25zXCIgaGF2ZSBiZWVuIHNldCwgdGhlbiBzZXQgdGhlbSBzbyB0aGF0IHRoZSBmaWx0ZXJzIGNhbiBiZSByZXRhaW5lZCB3aGlsZSBmZXRjaGluZyBkYXRhIHVwb24gcGFnZSBuYXZpZ2F0aW9uLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IHZhcmlhYmxlT3B0aW9ucy5maWx0ZXJGaWVsZHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9naWNhbE9wID0gdmFyaWFibGVPcHRpb25zLmxvZ2ljYWxPcCB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyA9IHZhcmlhYmxlT3B0aW9ucy5vcmRlckJ5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNBcnJheSh0aGlzLnBhZ2luYXRpb24uc29ydCkgPyBnZXRPcmRlckJ5RXhwcih0aGlzLnBhZ2luYXRpb24uc29ydCkgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTaXplID0gdGhpcy5wYWdpbmF0aW9uLnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgICAgIG1heFJlc3VsdHMgPSB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9IE51bWJlcih0aGlzLnBhZ2luYXRpb24uc2l6ZSkgPyB0aGlzLnBhZ2luYXRpb24uc2l6ZSA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cyA9IE51bWJlcih0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cykgPyB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cyA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5wYWdpbmF0aW9uLm51bWJlcikgJiYgdGhpcy5nZXRQYWdpbmF0aW9uU3RhcnRJbmRleCgpID09PSAxKSB7IC8vIG51bWJlciBpcyBwYWdlIG51bWJlciByZWNlaXZlZCBmcm9tIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uLm51bWJlciArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKiBTZW5kaW5nIHBhZ2VDb3VudCB1bmRlZmluZWQgdG8gY2FsY3VsYXRlIGl0IGFnYWluIGZvciBxdWVyeS4qL1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRGF0YVNpemUoZGF0YVNpemUsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAoY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSwgc3RhcnRJbmRleCArIE51bWJlcih0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cyksIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ0Jhc2ljJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChuZXdWYWwgJiYgIWlzU3RyaW5nKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBwYWdlKi9cbiAgICBpc0ZpcnN0UGFnZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSAxIHx8ICF0aGlzLmRuLmN1cnJlbnRQYWdlKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGxhc3QgcGFnZSovXG4gICAgaXNMYXN0UGFnZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2VDb3VudCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgbGFzdCBwYWdlKi9cbiAgICBnb1RvTGFzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMucGFnZUNvdW50O1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgZmlyc3QgcGFnZSovXG4gICAgZ29Ub0ZpcnN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMuaXNGaXJzdFBhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZyZXNoKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBjdXJyZW50IHBhZ2UqL1xuICAgIGdvVG9QYWdlKGV2ZW50PywgY2FsbGJhY2s/KSB7XG4gICAgICAgIHRoaXMuZmlyc3RSb3cgPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlciksXG4gICAgICAgICAgICBhbGxvd3BhZ2VzaXplY2hhbmdlID0gdGhpcy5wYXJlbnQuYWxsb3dwYWdlc2l6ZWNoYW5nZTtcbiAgICAgICAgaWYgKG1vZGUgJiYgbW9kZS50b0xvd2VyQ2FzZSgpICE9PSAnbm9uZScgJiYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgfHwgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLWxpc3QnKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZpcnN0UGFnZSgpICYmICFhbGxvd3BhZ2VzaXplY2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwgJ3BhZ2luYXRpb24nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy5wYXJlbnQubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlOiB7IHBhZ2luYXRpb246IG51bWJlcjsgcGFnZXNpemU/OiBudW1iZXIgfSA9IHsgcGFnaW5hdGlvbjogdGhpcy5kbi5jdXJyZW50UGFnZSB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFnZXNpemUgPSB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLWxpc3QnIHx8IHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLnBhcmVudC5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jdXJyZW50cGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5uYXRpdmVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2N1cnJlbnRwYWdlJywgdGhpcy5kbi5jdXJyZW50UGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsbCBnZXRQYWdlRGF0YSBhZnRlciBjaGVja2luZyBzdGF0ZSBjb25maWcgc28gdGhhdCBTdGF0aWMgVmFyaWFibGVzIGNhbiB1c2UgaXRcbiAgICAgICAgdGhpcy5nZXRQYWdlRGF0YShldmVudCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgZGF0YSBvZiB0aGUgcGFnZSBoYXMgYmVlbiBmZXRjaGVkLiovXG4gICAgb25QYWdlRGF0YVJlYWR5KGV2ZW50LCBkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuaW52b2tlU2V0UmVjb3JkKGV2ZW50LCBkYXRhKTtcbiAgICAgICAgdHJpZ2dlckZuKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGdldCBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlKi9cbiAgICBnZXRQYWdlRGF0YShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGRhdGEsXG4gICAgICAgICAgICBzdGFydEluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEluIHRhYmxlIGNvbXBvbmVudCwgaW4gY2FzZSBvZiBvbiBkZW1hbmQgYW5kIHNjcm9sbCBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgKiBXaGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIGRhdGEgaXRlbSB3aGljaCBpcyBub3QgaW4gY3VycmVudCBwYWdlXG4gICAgICAgICAgICAgKiBGZXRjaCB0aGUgaXRlbXMgb2YgdGhlIHBhZ2Ugd2hlcmUgdGhlIGNoYW5nZSBpcyBtYWRlXG4gICAgICAgICAgICAgKiAqL1xuICAgICAgICAgICAgbGV0IHBhZ2VJbmRleCA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkgJiYgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCAhPT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXggPSB0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgJ3BhZ2UnOiAocGFnZUluZGV4IC0gMSkgKyB0aGlzLmdldFBhZ2luYXRpb25TdGFydEluZGV4KCksXG4gICAgICAgICAgICAgICAgJ3NpemUnOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgJ2ZpbHRlckZpZWxkcyc6IHRoaXMuZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgICAgICdvcmRlckJ5JzogdGhpcy5zb3J0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAnbG9naWNhbE9wJzogdGhpcy5sb2dpY2FsT3AsXG4gICAgICAgICAgICAgICAgJ21hdGNoTW9kZSc6ICdhbnl3aGVyZWlnbm9yZWNhc2UnXG4gICAgICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZURhdGFSZWFkeShldmVudCwgcmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEgLCBzdGFydEluZGV4ICsgTnVtYmVyKHRoaXMucGFnaW5hdGlvbj8ubnVtYmVyT2ZFbGVtZW50cyksIHRoaXMucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIGVycm9yIGlzIHVuZGVmaW5lZCwgZG8gbm90IHNob3cgYW55IG1lc3NhZ2UgYXMgdGhpcyBtYXkgYmUgZGlzY2FyZGVkIHJlcXVlc3RcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIEVycm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHdtVG9hc3Rlci5zaG93KCdlcnJvcicsICdFUlJPUicsICdVbmFibGUgdG8gZ2V0IGRhdGEgb2YgcGFnZSAtJyArIHRoaXMuZG4uY3VycmVudFBhZ2UgKyAnOicgKyBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gaXNBcnJheSh0aGlzLl9fZnVsbERhdGEpID8gdGhpcy5fX2Z1bGxEYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMpIDogdGhpcy5fX2Z1bGxEYXRhO1xuICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSAsIE1hdGgubWluKHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMsIHRoaXMuX19mdWxsRGF0YT8ubGVuZ3RoKSwgdGhpcy5fX2Z1bGxEYXRhPy5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICBGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZWRpdCBhY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBwcmV2aW91cyBwYWdlIGRhdGEgb2YgdGhlIHRhYmxlXG4gICAgKi9cbiAgICBpc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkge1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiBwYWdlSW5kZXggPT09IHRoaXMucGFyZW50LmN1cnJlbnRQYWdlICYmXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlICYmIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgPCBwYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgaW52b2tlU2V0UmVjb3JkKGV2ZW50LCBkYXRhKSB7XG4gICAgICAgIC8vIFRyaWdnZXIgdGhlIGV2ZW50IGhhbmRsZXIgaWYgZXhpc3RzLlxuICAgICAgICBjb25zdCBwYWdlSW5mbyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmRuLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgdG90YWxFbGVtZW50czogdGhpcy5kYXRhU2l6ZSxcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IHRoaXMucGFnZUNvdW50XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NldHJlY29yZCcsIHskZXZlbnQ6IGV2ZW50LCAkZGF0YTogZGF0YSwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlLCBwYWdlSW5mbywgZGF0YX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgcGFnZSBpbnB1dC5cbiAgICAgSW4gY2FzZSBvZiBpbnZhbGlkIGlucHV0LCBuYXZpZ2F0ZSB0byB0aGUgYXBwcm9wcmlhdGUgcGFnZTsgYWxzbyByZXR1cm4gZmFsc2UuXG4gICAgIEluIGNhc2Ugb2YgdmFsaWQgaW5wdXQsIHJldHVybiB0cnVlLiovXG4gICAgdmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8qSWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IHBhZ2UgbnVtYmVyIG9yIGludmFsaWQgdmFsdWUsIHRoZW4gaGlnaGxpZ2h0aW5nIHRoZSBmaWVsZCBzaG93aW5nIGVycm9yLiovXG4gICAgICAgIGlmIChldmVudCAmJiAoaXNOYU4odGhpcy5kbi5jdXJyZW50UGFnZSkgfHwgdGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwIHx8ICh0aGlzLnBhZ2VDb3VudCAmJiAodGhpcy5kbi5jdXJyZW50UGFnZSA+IHRoaXMucGFnZUNvdW50IHx8IGlzTnVsbCh0aGlzLmRuLmN1cnJlbnRQYWdlKSkpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJ2EnKTtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdLZXlFJykge1xuICAgICAgICAgICAgdGFyZ2V0RWxlLmFkZENsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0RWxlLnJlbW92ZUNsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHBhZ2VDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICB0aGlzLl9kZWJvdW5jZWRQYWdlQ2hhbmdlZChldmVudCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgcmVzcGVjdGl2ZSBwYWdlcy4qL1xuICAgIG5hdmlnYXRlUGFnZShpbmRleCwgZXZlbnQsIGlzUmVmcmVzaD8sIGNhbGxiYWNrPykge1xuICAgICAgICAvLyB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2UgdHVybiBvbiB0aGUgaXNEYXRhTG9hZGluZyBmbGFnIHRvIHNob3cgdGhlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZykgJiYgIXRoaXMuaXNEaXNhYmxlTmV4dCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGluZmluaXRlIHNjcm9sbCBjYWxsaW5nIHRoZSBzaG93TG9hZGluZ0luZGljYXRvciBtZXRob2QgdG8gdXBkYXRlIHRoZSBsb2FkaW5nIG1lc3NhZ2UgaW1tZWRpYXRlbHkgd2hlbiBuYXZpZ2F0ZWQgdG8gbmV4dCBwYWdlXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQudmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FsbERhdGFHcmlkTWV0aG9kKCdzaG93TG9hZGluZ0luZGljYXRvcicsIHRoaXMucGFyZW50LmxvYWRpbmdkYXRhbXNnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNldCB0aGUgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwic2Nyb2xsXCIgYW5kIGlzRGF0YXNldFVwZGF0ZWQgdG8gZmFsc2VcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREVGQVVMVCk7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRJc0RhdGFzZXRVcGRhdGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIGN1cnJlbnQgcGFnZSB0byBhIHZhbGlkIHBhZ2UgbnVtYmVyLlxuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gK3RoaXMuZG4uY3VycmVudFBhZ2U7XG5cbiAgICAgICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICAgICAgY2FzZSAnZmlyc3QnOlxuICAgICAgICAgICAgICAgIGlmKHRoaXMucGFnaW5hdGlvbj8ubmV4dCAmJiB0aGlzLmRhdGFzb3VyY2U/LnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzUHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9GaXJzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJ3ByZXYnOlxuICAgICAgICAgICAgICAgIC8qUmV0dXJuIGlmIGFscmVhZHkgb24gdGhlIGZpcnN0IHBhZ2UuKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCAmJiAodGhpcy5pc0ZpcnN0UGFnZSgpIHx8ICF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7IC8vIFdNUy0xODg2NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIHNraXBwaW5nIHRoZSByZWd1bGFyIGZsb3cgYW5kIGVuYWJsaW5nIGlzTmV4dCBmbGFnIGluIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzUHJldiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qRGVjcmVtZW50IHRoZSBjdXJyZW50IHBhZ2UgYnkgMS4qL1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgLT0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgICAgICAgIC8qUmV0dXJuIGlmIGFscmVhZHkgb24gdGhlIGxhc3QgcGFnZS4qL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmICh0aGlzLmlzTGFzdFBhZ2UoKSB8fCAhdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5hdGlvbj8ubmV4dCkgeyAvLyBXTVMtMTg4Njc6IEZvciBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBza2lwcGluZyB0aGUgcmVndWxhciBmbG93IGFuZCBlbmFibGluZyBpc1ByZXYgZmxhZyBpbiBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzTmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzUHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKkluY3JlbWVudCB0aGUgY3VycmVudCBwYWdlIGJ5IDEuKi9cbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlICs9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qTmF2aWdhdGUgdG8gdGhlIGN1cnJlbnQgcGFnZS4qL1xuICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgc2V0QmluZERhdGFTZXQoYmluZGRhdGFzZXQsIHBhcmVudCwgZGF0YVNvdXJjZSwgZGF0YXNldD8sIGJpbmRkYXRhc291cmNlPywgZGF0YXNldEJvdW5kRXhwcj8sIHN0YXRlaGFuZGxlcj8pIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBiaW5kZGF0YXNldC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgYmluZFBhZ2luZ09wdGlvbnM7XG4gICAgICAgIHRoaXMuc3RhdGVoYW5kbGVyID0gc3RhdGVoYW5kbGVyO1xuICAgICAgICBpZiAocGFydHNbMF0gPT09ICdWYXJpYWJsZXMnIHx8IHBhcnRzWzBdID09PSAnV2lkZ2V0cycpIHtcbiAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zID0gYCR7cGFydHNbMF19LiR7cGFydHNbMV19LnBhZ2luYXRpb25gO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnRzWzBdID09PSAnQXBwJyAmJiBwYXJ0c1sxXSA9PT0gJ2FjdGl2ZVBhZ2UnICYmIHBhcnRzWzJdPy5pbmNsdWRlcygnVmFyaWFibGVzJykmJiBwYXJ0c1szXSkge1xuICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMgPSBgQXBwLmFjdGl2ZVBhZ2UuJHtwYXJ0c1syXX0uJHtwYXJ0c1szXX0ucGFnaW5hdGlvbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiaW5kZGF0YXNvdXJjZSAmJiBkYXRhc2V0ICYmICFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyB3YXRjaGluZyBmb3IgZGF0YXNldCBjaGFuZ2VzIGV2ZW4gd2hlbiBkYXRhc2V0IGlzIGJvdW5kIHRvIFwiaXRlbS5cIiAoaS5lLiBieSBjaGVja2luZyBmb3IgZGF0YXNldEJvdW5kRXhwcilcbiAgICAgICAgICAgIC8vIGl0ZW0gY29udGV4dCBpcyBwYXNzZWQgYXMgZGF0YVNvdXJjZSBoZXJlXG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBjaGVjayBpZiBzYW1lIGV4cHIgZm4gaXMgZ2VuZXJhdGVkIGJ5IHBhcmVudCB3aWRnZXQgKGxpc3QsIHRhYmxlKVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIgPyBkYXRhU291cmNlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIG52ID0+ICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMTkyODU6IFNldHRpbmcgZGF0YXNldCBvbiBwcm94eSBvbmx5IHRvIGhhbmRsZSBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGNhbGwgZm9yIHVuZGVmaW5lZCBjYXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGEgd2F0Y2ggb24gcGFnaW5nIG9wdGlvbnMuIENhbGwgZGF0YXNldCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBldmVuIGlmIHBhZ2luZyBvcHRpb25zIGNoYW5nZXMgdG8gcmVmbGVjdCBwYWdpbmF0aW9uIHN0YXRlXG4gICAgICAgICAgICBpZiAoIWJpbmRQYWdpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBlaXRoZXIgZ2VuZXJhdGUgd2F0Y2ggZXhwciBmbiBvciByZWdpc3RlciBhbiBldmVudCBmcm9tIHRoZSBkYXRhc291cmNlIGl0c2VsZlxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXBwbHkgZGF0YXNvdXJjZSBvbmx5IHdoZW4gZGF0YXNldCBpcyBub3QgYm91bmQgdG8gXCJpdGVtLkZJRUxEXCJcbiAgICAgICAgaWYgKCFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBkYXRhc291cmNlIG9mIHBhZ2luYXRpb24gZnJvbSB0aGUgcGFyZW50IHdpZGdldFxuICAgIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52LCBvdikge1xuICAgICAgICBsZXQgcGFnZVNpemUsIHByZXZQYWdlU2l6ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMucGFyZW50Lm9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gbnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwiZGF0YXNldF91cGRhdGVcIiB3aGVuZXZlciBkYXRhc2V0IGlzIGNoYW5nZWQgaW4gdGFibGUgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll90cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGgpIHsgLy8gY2FsY3VsYXRlIFBhZ2VzaXplIG9wdGlvbnMgYmFzZWQgb24gYWN0dWFsIHBhZ2Ugc2l6ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7IC8vIGZvciBMaXZlIHZhcmlhYmxlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZVNpemUgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24uc2l6ZScpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnNpemUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24udG90YWxFbGVtZW50cycpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSB3aWRnZXRTdGF0ZT8uYWN0dWFscGFnZXNpemUgfHwgY3VycmVudFBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gTnVtYmVyKHRoaXMuYWN0dWFsUGFnZVNpemUpID8gdGhpcy5hY3R1YWxQYWdlU2l6ZSA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5hY3R1YWxQYWdlU2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gWy4uLnRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSByYW5nZSh0aGlzLmFjdHVhbFBhZ2VTaXplLCAgTWF0aC5tYXgodGhpcy5hY3R1YWxQYWdlU2l6ZSArIDEsIHRoaXMuYWN0dWFsUGFnZVNpemUgKyB0b3RhbEVsZW1lbnRzKSwgdGhpcy5hY3R1YWxQYWdlU2l6ZSk7IC8vIGhlcmUgZGF0YSBoYXMgb25seSB0aGF0IHBhZ2UgZGF0YSBhbmQgcGFnZXNpemUgaGFzIHRvdGFsTm9vZiBFbGVtZW50c1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtICYmIHdpZGdldFN0YXRlLmFjdHVhbHBhZ2VzaXplICE9PSB3aWRnZXRTdGF0ZS5wYWdlc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgK3RoaXMucHJldlBhZ2VTaXplICE9PSArKHdpZGdldFN0YXRlLnBhZ2VzaXplIHx8IHRoaXMubWF4UmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhZ2VTaXplID0gKyh3aWRnZXRTdGF0ZS5wYWdlc2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZQYWdlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gd2lkZ2V0U3RhdGUuYWN0dWFscGFnZXNpemUgfHwgdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCBkYXRhPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCB0aGlzLnByZXZQYWdlU2l6ZSxuZXdQYWdlU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gbmV3UGFnZVNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9IHRoaXMucGFyZW50LmdldEFjdHVhbFBhZ2VTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gcmFuZ2UocGFnZVNpemUsIGRhdGEubGVuZ3RoICsgcGFnZVNpemUsIHBhZ2VTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIGRhdGFzZXQgaXMgbm90IGluIGN1cnJlbnQgcGFnZSwgYnV0IGluIHByZXZpb3VzIG9uZXMgZGlyZWN0bHkgc2V0IHRoZSByZXN1bHQgd2l0aG91dCBzZXR0aW5nIHBhZ2UgdmFsdWVzXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXMoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmNvbnRyb2xzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbnNpemUnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdlNpemUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uYWxpZ24nKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGB0ZXh0LSR7bnZ9YCwgYHRleHQtJHtvdn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdtYXhSZXN1bHRzJykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXModGhpcy5kYXRhc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuICAgLy8gY2hhbmdlIHRoZSBzZWxlY3RlZEl0ZW1zIHBhZ2UgbnVtYmVyIGFuZCBpbmRleCBpbiB0aGUgc3RhdGVwYXJhbXMgd2hlbiBwYWdlc2l6ZSBpcyBjaGFuZ2VkXG4gICAgaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZShcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10sXG4gICAgICAgIG9sZFBhZ2VTaXplOiBudW1iZXIsXG4gICAgICAgIG5ld1BhZ2VTaXplOiBudW1iZXJcbiAgICApOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10ge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtLm1hcCgoeyBwYWdlLCBpbmRleCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gKHBhZ2UgLSAxKSAqIG9sZFBhZ2VTaXplICsgaW5kZXg7XG4gICAgICAgICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5mbG9vcihhYnNvbHV0ZUluZGV4IC8gbmV3UGFnZVNpemUpICsgMTsgLy8gYmFjayB0byAxLWJhc2VkXG4gICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGFic29sdXRlSW5kZXggJSBuZXdQYWdlU2l6ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBuZXdQYWdlLFxuICAgICAgICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93bktleWRvd24oZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0ICRpdGVtcyA9ICQoJ3VsI2Ryb3Bkb3duLWJhc2ljIGEuZHJvcGRvd24taXRlbScpO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCBzZWxlY3RlZE9wdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBTaGlmdCtUYWIgYXMgQXJyb3dVcFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IFRhYiBvciBBcnJvd0Rvd24gYXMgQXJyb3dEb3duXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4ICsgMSkgPiBtYXhJbmRleCA/IDAgOiBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zW3RoaXMuZm9jdXNlZEluZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UoZXZlbnQsIHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBmb2N1cyBhZnRlciBpbmRleCBpcyB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJGl0ZW1zLmVxKHRoaXMuZm9jdXNlZEluZGV4KT8uZm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjbG9zZURyb3Bkb3duKCkge1xuICAgICAgICAvLyBDbG9zZSBkcm9wZG93blxuICAgICAgICB0aGlzLmJzRHJvcGRvd24uaGlkZSgpO1xuICAgICAgICBjb25zdCAkdG9nZ2xlQnV0dG9uID0gJCgnYnV0dG9uW2FyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiXScpO1xuICAgICAgICAkdG9nZ2xlQnV0dG9uLmZvY3VzKCk7IC8vIFJldHVybiBmb2N1cyB0byBidXR0b25cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiBkcm9wZG93biBvcGVuICYgY2xvc2VcbiAgICBvbk9wZW5DaGFuZ2UoaXNPcGVuKSB7XG4gICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gMDtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IGZvY3VzIHRoZSBkcm9wZG93biBhcyBkcm9wZG93biBoYXMgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgY29uc3QgJGl0ZW1zID0gJCgndWwjZHJvcGRvd24tYmFzaWMgYS5kcm9wZG93bi1pdGVtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgJGZpcnN0SXRlbSA9ICRpdGVtcy5lcSh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgJGZpcnN0SXRlbT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBuZXdQYWdlU2l6ZSkge1xuICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQpO1xuICAgICAgICBsZXQgdXBkYXRlZEl0ZW1zO1xuICAgICAgICBjb25zdCBvbGRQYWdlU2l6ZSA9IHdpZGdldFN0YXRlPy5wYWdlc2l6ZSB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBvbGRQYWdlU2l6ZSwgK25ld1BhZ2VTaXplKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gd2lkZ2V0U3RhdGU/LmFjdHVhbHBhZ2VzaXplIHx8IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgb2xkUGFnZVNpemU7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0cyA9ICtuZXdQYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5wcmV2UGFnZVNpemUgPSArbmV3UGFnZVNpemU7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSAmJiB0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgaWYodGhpcy5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3BvcG92ZXItY29udGFpbmVyLCAucG9wb3ZlcicpKXtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuYnNEcm9wZG93bi5oaWRlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJvcERvd25TaG93bigkZXZlbnQ6IGFueSkge1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9ICRldmVudD8uX2VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmKCFjb250YWluZXIpIHJldHVybjtcblxuICAgICAgICBhZGp1c3RWZXJ0aWNhbFBvc2l0aW9uKFxuICAgICAgICAgICAgJChjb250YWluZXIpLFxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcuaXRlbXMtcGVyLXBhZ2UgZGl2JyksXG4gICAgICAgICAgICB0aGlzLmJzRHJvcGRvd24uX2Ryb3Bkb3duLFxuICAgICAgICAgICAgJChjb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJ3VsW2lkPVwiZHJvcGRvd24tYmFzaWNcIl0nKSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Ecm9wZG93blNjcm9sbCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmRyb3Bkb3duU2Nyb2xsSGFuZGxlciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93blNjcm9sbCgpIHtcbiAgICAgICAgLy8gb24gc2Nyb2xsIGJvb3N0cmFwIGlzIGFwcGx5aW5nIDNkIHRyYW5zbGF0aW9uIHRvIHByZXZlbnQgZnJvbSB0aGF0IGFkZGVkIHRoaXMgZHVtbXkgZnVuY3Rpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbkRyb3Bkb3duSGlkZGVuKCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93blNjcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmRyb3Bkb3duU2Nyb2xsSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbEhhbmRsZXIgPSB1bmRlZmluZWQhO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkVsZW0gPSAgdGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwYWdpbmF0aW9uRWxlbS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25TY3JvbGxIYW5kbGVyKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5kcm9wZG93blNjcm9sbEhhbmRsZXIsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpZiBzdGlsbCBwZW5kaW5nXG4gICAgICAgIGlmICh0aGlzLl9pbml0VGltZW91dElkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faW5pdFRpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGltZW91dElkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ29tcGxldGUgRXZlbnRFbWl0dGVyc1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRFbWl0dGVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdEVtaXR0ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXhSZXN1bHRzRW1pdHRlcikge1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBOdWxsaWZ5IGRlYm91bmNlZCBmdW5jdGlvbiBjbG9zdXJlc1xuICAgICAgICB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9kZWJvdW5jZWRQYWdlQ2hhbmdlZCA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBkYXRhIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgICAgICB0aGlzLmRhdGFzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBwYWdlIHNpemUgb3B0aW9ucyBhcnJheVxuICAgICAgICBpZiAodGhpcy5wYWdlU2l6ZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGRhdGFzb3VyY2UgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBwYXJlbnQgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgICAgICAvLyBDYWxsIHBhcmVudCBuZ09uRGVzdHJveSAoc2V0cyBpc0Rlc3Ryb3llZCA9IHRydWUpXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQ2xhc3NpYycpIHtcbjx1bCBjbGFzcz1cInBhZ2luYXRpb24gYWR2YW5jZWQge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiPlxuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW1zLXBlci1wYWdlXCI+XG4gICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFfX0gOjwvbGFiZWw+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biAgY29udGFpbmVyPVwiYm9keVwiIChvblNob3duKT1cIm9uRHJvcERvd25TaG93bigkZXZlbnQpXCIgKG9uSGlkZGVuKT1cIm9uRHJvcGRvd25IaWRkZW4oKVwiIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG9wdGlvbilcIiAoa2V5ZG93bik9XCJvbkRyb3Bkb3duS2V5ZG93bigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS5zdGFydEluZGV4fX0gLSB7e3Jvd1N1bW1hcnkuZW5kSW5kZXh9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnRvdGFsUmVjb3Jkc319PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVGaXJzdH1cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9GSVJTVFwiIG5hbWU9XCJmaXJzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVGaXJzdFwiXG4gICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1maXJzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGZpcnN0IHBhZ2Uge3sgaXNEaXNhYmxlRmlyc3QgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlUHJldmlvdXN9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfUFJFVklPVVNcIiBuYW1lPVwicHJldlwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlUHJldmlvdXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIHByZXZpb3VzIHBhZ2Uge3sgaXNEaXNhYmxlUHJldmlvdXMgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBjbGFzcz1cInBhZ2Vjb3VudCBkaXNhYmxlZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIGFyaWEtbGFiZWw9XCJDaGFuZ2UgUGFnZSBOdW1iZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRuLmN1cnJlbnRQYWdlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU2hvd2luZyBQYWdlICcgKyBkbi5jdXJyZW50UGFnZSArICcgb2YgJyArIHBhZ2VDb3VudFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVDdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgKGNoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiLz5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgY2xhc3M9XCJkaXNhYmxlZFwiPlxuICAgICAgICA8YSBbaGlkZGVuXT1cImlzRGlzYWJsZUNvdW50XCI+IC8ge3twYWdlQ291bnR9fTwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfTkVYVFwiIG5hbWU9XCJuZXh0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZU5leHRcIlxuICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLXJpZ2h0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIG5leHQgcGFnZSB7eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZUxhc3R9XCI+XG4gICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0xBU1RcIiBuYW1lPVwibGFzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVMYXN0XCJcbiAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbGFzdCcsICRldmVudClcIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1sYXN0LXBhZ2VcIj48L2k+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBsYXN0IHBhZ2Uge3sgaXNEaXNhYmxlTGFzdCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoc2hvd3JlY29yZGNvdW50KSB7XG4gICAgICA8bGkgY2xhc3M9XCJ0b3RhbGNvdW50IGRpc2FibGVkXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+e3thcHBMb2NhbGUuTEFCRUxfVE9UQUxfUkVDT1JEU319OiB7e2RhdGFTaXplfX08L2E+XG4gICAgICA8L2xpPlxuICAgIH1cbjwvdWw+XG59XG5AaWYgKG5hdmNvbnRyb2xzID09PSAnUGFnZXInKSB7XG4gIDx1bCBjbGFzcz1cInBhZ2VyIHt7bmF2aWdhdGlvbkNsYXNzfX1cIj5cbiAgICAgICAgQGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlICYmICBwYWdlU2l6ZU9wdGlvbnM/LlswXTxyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRVwiIGNsYXNzPVwiYXBwLWxhYmVsXCI+e3thcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0V9fSA6PC9sYWJlbD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duIGNvbnRhaW5lcj1cImJvZHlcIiAob25TaG93bik9XCJvbkRyb3BEb3duU2hvd24oJGV2ZW50KVwiIChvbkhpZGRlbik9XCJvbkRyb3Bkb3duSGlkZGVuKClcIiAoaXNPcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbi1iYXNpY1wiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAge3ttYXhSZXN1bHRzfX0gPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyB0cmFjayBvcHRpb247IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudCwgb3B0aW9uKVwiIChrZXlkb3duKT1cIm9uRHJvcGRvd25LZXlkb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IGZvY3VzZWRJbmRleCA/IDAgOiAtMVwiPnt7b3B0aW9ufX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkuc3RhcnRJbmRleH19IC0ge3tyb3dTdW1tYXJ5LmVuZEluZGV4fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnRvdGFsUmVjb3Jkc319PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICB9XG5AaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwicHJldmlvdXNcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfUFJFVklPVVN9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgIHt7YXBwTG9jYWxlLkxBQkVMX05FWFR9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgfVxuICA8L3VsPlxufVxuXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQmFzaWMnKSB7XG4gICAgQGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlICYmICBwYWdlU2l6ZU9wdGlvbnM/LlswXTxyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICA8bGFiZWwgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRVwiIGNsYXNzPVwiYXBwLWxhYmVsXCI+e3thcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0UgfX0gOjwvbGFiZWw+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duIGNvbnRhaW5lcj1cImJvZHlcIiAgKG9uU2hvd24pPVwib25Ecm9wRG93blNob3duKCRldmVudClcIiAob25IaWRkZW4pPVwib25Ecm9wZG93bkhpZGRlbigpXCIgKGlzT3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbi1iYXNpY1wiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgIHt7bWF4UmVzdWx0c319IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJidXR0b24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyB0cmFjayBvcHRpb247IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG9wdGlvbilcIiAoa2V5ZG93bik9XCJvbkRyb3Bkb3duS2V5ZG93bigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpID09PSBmb2N1c2VkSW5kZXggPyAwIDogLTFcIj57e29wdGlvbn19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgICA8cGFnaW5hdGlvbiBjbGFzcz1cInBhZ2luYXRpb24gYmFzaWNcIiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uQ2xhc3NcIiByb2xlPVwibmF2aWdhdGlvblwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwibWF4UmVzdWx0c1wiIFt0b3RhbEl0ZW1zXT1cImRhdGFTaXplXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6dHJ1ZX1cIiBbbmdNb2RlbF09XCJkbi5jdXJyZW50UGFnZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnQgKyAnIHBhZ2VzJ1wiXG4gICAgICAgIFtib3VuZGFyeUxpbmtzXT1cImJvdW5kYXJ5bGlua3NcIiBbbWF4U2l6ZV09XCJtYXhzaXplXCJcbiAgICAgICAgW2RpcmVjdGlvbkxpbmtzXT1cImRpcmVjdGlvbmxpbmtzXCJcbiAgICAgICAgZmlyc3RUZXh0PVwiRmlydHN0XCIgbGFzdFRleHQ9XCJMYXN0XCJcbiAgICAgICAgW2N1c3RvbVByZXZpb3VzVGVtcGxhdGVdPVwicHJldlRlbXBsYXRlXCJcbiAgICAgICAgW2N1c3RvbU5leHRUZW1wbGF0ZV09XCJuZXh0VGVtcGxhdGVcIlxuICAgICAgICBbY3VzdG9tUGFnZVRlbXBsYXRlXT1cInBhZ2VUZW1wbGF0ZVwiPjwvcGFnaW5hdGlvbj5cbiAgICB9XG59XG5cbkBpZiAobmF2Y29udHJvbHMgPT09ICdCYXNpYycgJiYgc2hvd3JlY29yZGNvdW50KSB7XG4gIDx1bCBjbGFzcz1cInBhZ2luYXRpb25cIj5cbiAgICA8bGkgY2xhc3M9XCJ0b3RhbGNvdW50IGRpc2FibGVkIGJhc2ljY291bnRcIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+e3thcHBMb2NhbGUuTEFCRUxfVE9UQUxfUkVDT1JEU319OiB7e2RhdGFTaXplfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbn1cblxuPG5nLXRlbXBsYXRlICNwYWdlVGVtcGxhdGUgbGV0LXBhZ2U+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNhY2l0dmVwYWdlXT1cInBhZ2UuYWN0aXZlXCI+e3snUGFnZSAnfX08L3NwYW4+XG4gIHt7cGFnZS5udW1iZXJ9fVxuICBAaWYgKHBhZ2UuYWN0aXZlKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+IHt7JywgU2hvd2luZyBwYWdlICcgKyBwYWdlLm51bWJlciArICcgb2YgJyArIHBhZ2VDb3VudH19PC9zcGFuPlxuICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmV2VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gUHJldmlvdXMgcGFnZSB7e2Rpc2FibGVkID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25leHRUZW1wbGF0ZSBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5HbyB0byBOZXh0IHBhZ2Uge3tkaXNhYmxlZCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
859
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUVSLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGNBQWMsRUFDZCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sZ0NBQWdDLEVBQ2hDLFNBQVMsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FB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bEMsMmpWQXNOQSwyQ0QzSmMsWUFBWSw0SEFBRSxXQUFXLGd4QkFBRSxnQkFBZ0IsOGJBQUUsZ0JBQWdCOzs0RkFPOUQsbUJBQW1CO2tCQVQvQixTQUFTO2lDQUNJLElBQUksV0FDTCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsWUFDOUQsZ0JBQWdCLGFBRWY7d0JBQ1Asa0JBQWtCLHFCQUFxQjtxQkFDMUM7OzBCQXVGMkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxTQUFTOzswQkFBa0IsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUFHLFFBQVE7eUNBbkZwRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDbUMsVUFBVTtzQkFBbkQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICR3YXRjaCxcbiAgICBhZGp1c3RWZXJ0aWNhbFBvc2l0aW9uLFxuICAgIEFwcENvbnN0YW50cyxcbiAgICBEYXRhU291cmNlLFxuICAgIGRlYm91bmNlLFxuICAgIGlzRGVmaW5lZCxcbiAgICBzd2l0Y2hDbGFzcyxcbiAgICB0cmlnZ2VyRm5cbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBERUJPVU5DRV9USU1FUyxcbiAgICBnZXRPcmRlckJ5RXhwcixcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgU3R5bGFibGVDb21wb25lbnQsXG4gICAgc3R5bGVyLFxuICAgIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLFxuICAgIFdpZGdldFJlZlxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9wYWdpbmF0aW9uLnByb3BzJztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpc0FycmF5LCBpc0VtcHR5LCBpc051bGwsIGlzU3RyaW5nLCByYW5nZX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtQYWdpbmF0aW9uTW9kdWxlfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BhZ2luYXRpb24nO1xuaW1wb3J0IHtCc0Ryb3Bkb3duRGlyZWN0aXZlLCBCc0Ryb3Bkb3duTW9kdWxlfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGFuYXZpZ2F0b3IgY2xlYXJmaXgnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tcGFnaW5hdGlvbicsIGhvc3RDbGFzczogREVGQVVMVF9DTFN9O1xuXG5jb25zdCBzaXplQ2xhc3NlcyA9IHtcbiAgICAnUGFnZXInOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdlci1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdlci1sZydcbiAgICB9LFxuICAgICdCYXNpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9LFxuICAgICdDbGFzc2ljJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnaW5hdGlvbi1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdpbmF0aW9uLWxnJ1xuICAgIH1cbn07XG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQnNEcm9wZG93bk1vZHVsZV0sXG4gICAgc2VsZWN0b3I6ICdbd21QYWdpbmF0aW9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUGFnaW5hdGlvbkNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBAT3V0cHV0KCkgcmVzdWx0RW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG1heFJlc3VsdHNFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAVmlld0NoaWxkKEJzRHJvcGRvd25EaXJlY3RpdmUpIHByb3RlY3RlZCBic0Ryb3Bkb3duO1xuICAgIHByaXZhdGUgZHJvcGRvd25TY3JvbGxIYW5kbGVyITogKCRldmVudDphbnkpID0+IHZvaWQ7XG4gICAgZGF0YXNvdXJjZTtcbiAgICBtYXhSZXN1bHRzO1xuICAgIHBhZ2VTaXplT3B0aW9ucztcbiAgICBwcmV2UGFnZVNpemU7XG4gICAgYWN0dWFsUGFnZVNpemU7XG4gICAgYWxsb3dwYWdlc2l6ZWNoYW5nZTtcbiAgICBkZWZhdWx0UGFnZVNpemVPcHRpb25zID0gW107XG4gICAgZm9jdXNlZEluZGV4ID0gMDtcbiAgICByb3dTdW1tYXJ5O1xuICAgIG5hdmlnYXRpb25zaXplO1xuICAgIHNob3dyZWNvcmRjb3VudDtcblxuICAgIG5hdmNvbnRyb2xzO1xuICAgIG5hdmlnYXRpb247XG5cbiAgICBib3VuZGFyeWxpbmtzO1xuICAgIGRpcmVjdGlvbmxpbmtzO1xuXG4gICAgbmF2aWdhdGlvbkNsYXNzO1xuICAgIGRuID0ge1xuICAgICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG5cbiAgICBwYWdlQ291bnQgPSAwO1xuICAgIGlzRGlzYWJsZU5leHQgPSB0cnVlO1xuICAgIGlzRGlzYWJsZVByZXZpb3VzID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVGaXJzdCA9IHRydWU7XG4gICAgaXNEaXNhYmxlTGFzdCA9IHRydWU7XG4gICAgaXNEaXNhYmxlQ3VycmVudDtcbiAgICBkYXRhU2l6ZTtcbiAgICBwcmV2c2hvd3JlY29yZGNvdW50O1xuICAgIGlzRGlzYWJsZUNvdW50O1xuICAgIGZpcnN0Um93O1xuICAgIHJlc3VsdDtcbiAgICBfX2Z1bGxEYXRhO1xuICAgIGRhdGFzZXQ7XG4gICAgb3B0aW9ucztcbiAgICBzdGF0ZWhhbmRsZXI7XG4gICAgZmlsdGVyRmllbGRzO1xuICAgIHNvcnRPcHRpb25zO1xuICAgIGJpbmRkYXRhc2V0O1xuICAgIHBhZ2luYXRpb247XG4gICAgbG9naWNhbE9wO1xuXG4gICAgcHJpdmF0ZSBfaW5pdFRpbWVvdXRJZDogYW55OyAvLyBTdG9yZSB0aW1lb3V0IElEIGZvciBjbGVhbnVwXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkQXBwbHlEYXRhc2V0ID0gZGVib3VuY2UoKCkgPT4gdGhpcy53aWRnZXQuZGF0YXNldCA9IHRoaXMuZGF0YXNldCwgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcbiAgICBwcml2YXRlIF9kZWJvdW5jZWRQYWdlQ2hhbmdlZCA9IGRlYm91bmNlKGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSBldmVudCAmJiBldmVudC5wYWdlO1xuICAgICAgICBjb25zdCBtYXhSZXN1bHRzID0gZXZlbnQgJiYgKGV2ZW50LnBhZ2VzaXplIHx8IGV2ZW50Lml0ZW1zUGVyUGFnZSkgfHwgdGhpcy5tYXhSZXN1bHRzO1xuXG4gICAgICAgIC8vIERvIG5vdCBjYWxsIGdvVG9QYWdlIGlmIHBhZ2UgaGFzIG5vdCBjaGFuZ2VkXG4gICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCB0aGlzLm1heFJlc3VsdHMgIT09IG1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSAodGhpcyBhcyBhbnkpLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gbWF4UmVzdWx0cztcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICAgICAgaW5zdC5pbnZva2VFdmVudENhbGxiYWNrKCdwYWdpbmF0aW9uY2hhbmdlJywgeyRldmVudDogdW5kZWZpbmVkLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2V9KTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gPT09ICdCYXNpYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuXG4gICAgcHJpdmF0ZSBfc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpIHtcbiAgICAgICAgZm9yRWFjaCh0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKSwgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKTsnKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGl0ZW0ucXVlcnlTZWxlY3Rvcignc3BhbicpO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZT8uZGF0YXNldC5pc2FjaXR2ZXBhZ2UgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihjaGlsZE5vZGU/LmRhdGFzZXQuaXNkaXNhYmxlZCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBTa2lwU2VsZigpIEBJbmplY3QoV2lkZ2V0UmVmKSBwdWJsaWMgcGFyZW50LCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy5faW5pdFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCk9PiB7XG4gICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IGNvbXBvbmVudCBkZXN0cnVjdGlvbiBvciBwYXJlbnQgYmVpbmcgbnVsbFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQgfHwgIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gdGhpcy5wYXJlbnQuYWxsb3dwYWdlc2l6ZWNoYW5nZTtcbiAgICAgICAgICAgIGlmKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSlcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPXRoaXMubm9ybWFsaXplVG9OdW1iZXJBcnJheSh0aGlzLnBhcmVudD8ucGFnZXNpemVvcHRpb25zKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuICAgIG5vcm1hbGl6ZVRvTnVtYmVyQXJyYXkoaW5wdXQpIHsgLy8gSGFuZGxlcyBhbGwgZm9ybWF0cyBpbiBvbmUgcGxhY2U6IFwiMTAsMjAsMzBcIiwgWzEwLDIwLDMwXSwgXCJbMTAsMjAsMzBdXCJcbiAgICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGxldCBhcnI7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBhcnIgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSBpbnB1dC50cmltKCk7XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBcIlsxLDIsM11cIlxuICAgICAgICAgICAgaWYgKHRyaW1tZWQuc3RhcnRzV2l0aChcIltcIikgJiYgdHJpbW1lZC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhcnIgPSBKU09OLnBhcnNlKHRyaW1tZWQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICBhcnIgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBcIjEsMiwzXCJcbiAgICAgICAgICAgICAgICBhcnIgPSB0cmltbWVkLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJcbiAgICAgICAgICAgIC5tYXAodiA9PiBOdW1iZXIodikpXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gIWlzTmFOKHYpKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICB9XG5cbiAgICBzZXRSZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIC8vIFRPRE86IEVtaXQgZXZlbnQgb25seSBpZiByZXN1bHQgaXMgY2hhbmdlZFxuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXN1bHRFbWl0dGVyLmVtaXQodGhpcy5yZXN1bHQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBuYXZpZ2F0aW9uQ2xhc3MgYmFzZWQgb24gbmF2aWdhdGlvbiBhbmQgbmF2aWdhdGlvblNpemUgcHJvcHNcbiAgICBwcml2YXRlIHVwZGF0ZU5hdlNpemUoKSB7XG4gICAgICAgIGNvbnN0IHNpemVDbHMgPSBzaXplQ2xhc3Nlc1t0aGlzLm5hdmNvbnRyb2xzXTtcbiAgICAgICAgaWYgKHNpemVDbHMgJiYgdGhpcy5uYXZpZ2F0aW9uc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSBzaXplQ2xzW3RoaXMubmF2aWdhdGlvbnNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBwYWdpbmcgdmFsdWVzIHRvIGRlZmF1bHQuXG4gICAgcmVzZXRQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHBhZ2luZyB2YWx1ZXMuKi9cbiAgICBjYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gKHRoaXMuZGF0YVNpemUgPiB0aGlzLm1heFJlc3VsdHMpID8gKE1hdGguY2VpbCh0aGlzLmRhdGFTaXplIC8gdGhpcy5tYXhSZXN1bHRzKSkgOiAodGhpcy5kYXRhU2l6ZSA8IDAgPyAwIDogMSk7XG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzKi9cbiAgICBzZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSkge1xuICAgICAgICAvKklmIG5laXRoZXIgJ2RhdGFTaXplJyBub3IgJ21heFJlc3VsdHMnIGlzIHNldCwgdGhlbiBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzLiovXG4gICAgICAgIGlmICghZGF0YVNpemUgJiYgIW1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gMTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gZGF0YVNpemU7XG4gICAgICAgIH0gZWxzZSB7IC8qRWxzZSwgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVzIGFuZCByZWNhbGN1bGF0ZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gbWF4UmVzdWx0cyB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gaXNEZWZpbmVkKGRhdGFTaXplKSA/IGRhdGFTaXplIDogdGhpcy5kYXRhU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBkYXRhU2l6ZSBhbmQgbWFuaXB1bGF0ZSB0aGUgbmF2aWdhdG9yIGFjY29yZGluZ2x5LiovXG4gICAgY2hlY2tEYXRhU2l6ZShkYXRhU2l6ZSwgbnVtYmVyT2ZFbGVtZW50cz8sIHNpemU/KSB7XG4gICAgICAgIC8qSWYgdGhlIGRhdGFTaXplIGlzIC0xIG9yIEludGVnZXIuTUFYX1ZBTFVFKCB3aGljaCBpcyAyMTQ3NDgzNjQ3KSwgdGhlbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgaXMgbm90IGtub3duLlxuICAgICAgICAgKiBIZW5jZSxcbiAgICAgICAgICogMS4gSGlkZSB0aGUgJ1RvdGFsIFJlY29yZCBDb3VudCcuXG4gICAgICAgICAqIDIuIERpc2FibGUgdGhlICdHb1RvTGFzdFBhZ2UnIGxpbmsgYXMgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBsYXN0IHBhZ2UgaXMgbm90IGtub3duLiovXG4gICAgICAgIGlmIChkYXRhU2l6ZSA9PT0gLTEgfHwgZGF0YVNpemUgPT09IEFwcENvbnN0YW50cy5JTlRfTUFYX1ZBTFVFKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgPSB0aGlzLnNob3dyZWNvcmRjb3VudDtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTGFzdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUNvdW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBJZiBudW1iZXIgb2YgcmVjb3JkcyBpbiBjdXJyZW50IHBhZ2UgaXMgbGVzcyB0aGFuIHRoZSBtYXggcmVjb3JkcyBzaXplLCB0aGlzIGlzIHRoZSBsYXN0IHBhZ2UuIFNvIGRpc2FibGUgbmV4dCBidXR0b24uXG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZFbGVtZW50cyA8IHNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93cmVjb3JkY291bnQgPSB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgfHwgdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBhbmQgdG90YWwgcGFnZXMuKi9cbiAgICBkaXNhYmxlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgY29uc3QgaXNDdXJyZW50UGFnZUZpcnN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEpLFxuICAgICAgICAgICAgaXNDdXJyZW50UGFnZUxhc3QgPSAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCkge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSBpc0N1cnJlbnRQYWdlRmlyc3Q7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSBpc0N1cnJlbnRQYWdlTGFzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdNUy0xODg2NzogSW4gY2FzZSBvZiBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBmb3IgcGFnZXIgdHlwZSBwYWdpbmF0aW9uIGRlcGVuZCBvbiBwcmV2IGFuZCBuZXh0IGZsYWdzIHdoaWNoIGFyZSBzZXQgYnkgZGV2ZWxvcGVyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUZpcnN0ID0gdGhpcy5pc0Rpc2FibGVQcmV2aW91cyA9ICF0aGlzLnBhZ2luYXRpb24ucHJldjtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRoaXMuaXNEaXNhYmxlTGFzdCA9ICF0aGlzLnBhZ2luYXRpb24ubmV4dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRGlzYWJsZUN1cnJlbnQgPSBpc0N1cnJlbnRQYWdlRmlyc3QgJiYgaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgY2xpZW50IHNpZGUgcGFnaW5hdGlvbiwgd2hlbiBsb2FkIG1vcmUgcmVhY2hlcyBsYXN0IHBhZ2UgaGlkZSB0aGUgb24tZGVtYW5kIGdyaWQgZWxlXG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5kYXRhc2V0Lmxlbmd0aCAmJiB0aGlzLmlzRGlzYWJsZU5leHQgJiYgdGhpcy5wYXJlbnQub25EZW1hbmRMb2FkICYmIHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmNhbGxEYXRhR3JpZE1ldGhvZCgnaGlkZUxvYWRpbmdJbmRpY2F0b3InLCB0aGlzLmlzRGlzYWJsZU5leHQsIHRoaXMucGFyZW50LmluZlNjcm9sbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBib3VuZCB0byB0aGUgZGF0YS1uYXZpZ2F0b3IgaGFzIHBhZ2luZy4qL1xuICAgIGlzRGF0YVNvdXJjZUhhc1BhZ2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGdldFBhZ2luYXRpb25TdGFydEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmRhdGFzb3VyY2U/Ll9wYWdpbmF0aW9uQ29uZmlnPy5wYWdpbmF0aW9uU3RhcnRJbmRleDtcbiAgICAgICAgcmV0dXJuIGlzRGVmaW5lZChzdGFydEluZGV4KSAmJiB0aGlzLmRhdGFzb3VyY2U/Ll9wYWdpbmF0aW9uQ29uZmlnPy50eXBlID09PSAncGFnZScgPyBOdW1iZXIoc3RhcnRJbmRleCkgOiAxO1xuICAgIH1cblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggZ2l2ZXMgc3VtbWFyeSBvZiB0aGUgY3VycmVudCBwYWdlIGRhdGEgKGV4OiBJbiBVSSBpdCBpcyBzaG93biBhcyAgMSB0byAxMCBvdXQgb2YgNTAgcmVjb3JkcylcbiAgICBnZXRQYWdlRGV0YWlscyhzdGFydEluZGV4LCBlbmRJbmRleCwgdG90YWxSZWNvcmRzKSB7XG4gICAgICAgIHRoaXMucm93U3VtbWFyeSA9ICAoaXNEZWZpbmVkKHN0YXJ0SW5kZXgpICYmIGlzRGVmaW5lZChlbmRJbmRleCkgJiYgaXNEZWZpbmVkKHRvdGFsUmVjb3JkcykpID8ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZEluZGV4OiBlbmRJbmRleCxcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkczogdG90YWxSZWNvcmRzXG4gICAgICAgIH06IHt9O1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgcmVzdWx0IGZvciBjbGllbnQgc2lkZSBwYWdpbmF0aW9uXG4gICAgc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCkge1xuICAgICAgICBsZXQgZGF0YVNpemUsXG4gICAgICAgICAgICBtYXhSZXN1bHRzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzdGFydEluZGV4O1xuICAgICAgICBkYXRhU2l6ZSA9IGlzQXJyYXkobmV3VmFsKSA/IG5ld1ZhbC5sZW5ndGggOiAoaXNFbXB0eShuZXdWYWwpID8gMCA6IDEpO1xuICAgICAgICBtYXhSZXN1bHRzID0gKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubWF4UmVzdWx0cykgfHwgZGF0YVNpemU7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSkgeyAvLyB3aGVuIGRlZmF1bHQgcGFnZSBzaXplIGlzIG5vdCBnaXZlbiB0aGVuIHVzZSBtYXhSZXN1bHRzIGluc3RlYWQgb2Ygb3B0aW9ucy5tYXhSZXN1bHRzXG4gICAgICAgICAgICBtYXhSZXN1bHRzID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvciBzdGF0aWMgdmFyaWFibGUsIGtlZXAgdGhlIGN1cnJlbnQgcGFnZS4gRm9yIG90aGVyIHZhcmlhYmxlcyB3aXRob3V0IHBhZ2luYXRpb24gcmVzZXQgdGhlIHBhZ2UgdG8gMVxuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjMyNjNdOiBncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YSBmbGFnIGlzIGZhbHNlIHdoZW4gZGF0YXNldCBpcyBjaGFuZ2VkIGZyb20gc2NyaXB0LCBzbyBzZXR0aW5nIGN1cnJlbnQgcGFnZSB0byAxXG4gICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgKHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgfHwgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSAmJiAoZ2V0KHRoaXMucGFyZW50LCAnZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCcpID09PSB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFIHx8ICFnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YScpKSkpKSkge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuXG4gICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxLCBNYXRoLm1pbihzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzLCBuZXdWYWw/Lmxlbmd0aCksIG5ld1ZhbD8ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRSZXN1bHQoaXNBcnJheShuZXdWYWwpID8gbmV3VmFsLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMpIDogbmV3VmFsKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWVzIG5lZWRlZCBmb3IgcGFnaW5hdGlvbiovXG4gICAgcHJpdmF0ZSBzZXRQYWdpbmdWYWx1ZXMobmV3VmFsKSB7XG4gICAgICAgIGxldCBkYXRhU2l6ZSxcbiAgICAgICAgICAgIG1heFJlc3VsdHMsXG4gICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBkYXRhU291cmNlO1xuICAgICAgICBsZXQgdmFyaWFibGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGRhdGEgaW4gX19mdWxsRGF0YS4gVGhpcyBpcyB1c2VkIGZvciBjbGllbnQgc2lkZSBzZWFyY2hpbmcgd2l0dmFoIG91dCBtb2RpZnlpbmcgdGhlIGFjdHVhbCBkYXRhc2V0LlxuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBuZXdWYWw7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlIHx8IHt9O1xuICAgICAgICAgICAgdmFyaWFibGVPcHRpb25zID0gZGF0YVNvdXJjZS5fb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIC8qQ2hlY2sgZm9yIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzZXQqL1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUykgfHwge307XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIFwiZmlsdGVyRmllbGRzXCIgYW5kIFwic29ydE9wdGlvbnNcIiBoYXZlIGJlZW4gc2V0LCB0aGVuIHNldCB0aGVtIHNvIHRoYXQgdGhlIGZpbHRlcnMgY2FuIGJlIHJldGFpbmVkIHdoaWxlIGZldGNoaW5nIGRhdGEgdXBvbiBwYWdlIG5hdmlnYXRpb24uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdmFyaWFibGVPcHRpb25zLmZpbHRlckZpZWxkcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsT3AgPSB2YXJpYWJsZU9wdGlvbnMubG9naWNhbE9wIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zID0gdmFyaWFibGVPcHRpb25zLm9yZGVyQnkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FycmF5KHRoaXMucGFnaW5hdGlvbi5zb3J0KSA/IGdldE9yZGVyQnlFeHByKHRoaXMucGFnaW5hdGlvbi5zb3J0KSA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNpemUgPSB0aGlzLnBhZ2luYXRpb24udG90YWxFbGVtZW50cztcbiAgICAgICAgICAgICAgICAgICAgbWF4UmVzdWx0cyA9IHRoaXMucGFnaW5hdGlvbi5zaXplID0gTnVtYmVyKHRoaXMucGFnaW5hdGlvbi5zaXplKSA/IHRoaXMucGFnaW5hdGlvbi5zaXplIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzID0gTnVtYmVyKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzKSA/IHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cylcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhZ2luYXRpb24ubnVtYmVyKSAmJiB0aGlzLmdldFBhZ2luYXRpb25TdGFydEluZGV4KCkgPT09IDEpIHsgLy8gbnVtYmVyIGlzIHBhZ2UgbnVtYmVyIHJlY2VpdmVkIGZyb20gYmFja2VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb24ubnVtYmVyICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNlbmRpbmcgcGFnZUNvdW50IHVuZGVmaW5lZCB0byBjYWxjdWxhdGUgaXQgYWdhaW4gZm9yIHF1ZXJ5LiovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tEYXRhU2l6ZShkYXRhU2l6ZSwgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMsIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IChjdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxLCBzdGFydEluZGV4ICsgTnVtYmVyKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzKSwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uID09PSAnQmFzaWMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCAmJiAhaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGlzRmlyc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEgfHwgIXRoaXMuZG4uY3VycmVudFBhZ2UpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlKi9cbiAgICBpc0xhc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGdvVG9MYXN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZyZXNoKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlKi9cbiAgICBnb1RvRmlyc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ29Ub1BhZ2UoZXZlbnQ/LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgdGhpcy5maXJzdFJvdyA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKSxcbiAgICAgICAgICAgIGFsbG93cGFnZXNpemVjaGFuZ2UgPSB0aGlzLnBhcmVudC5hbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgICAgICBpZiAobW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCkgIT09ICdub25lJyAmJiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyB8fCB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlKCkgJiYgIWFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMucGFyZW50LCAncGFnaW5hdGlvbicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnBhcmVudC5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdGU6IHsgcGFnaW5hdGlvbjogbnVtYmVyOyBwYWdlc2l6ZT86IG51bWJlciB9ID0geyBwYWdpbmF0aW9uOiB0aGlzLmRuLmN1cnJlbnRQYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYWdlc2l6ZSA9IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcgfHwgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMucGFyZW50Lm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyZW50LmN1cnJlbnRwYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm5hdGl2ZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY3VycmVudHBhZ2UnLCB0aGlzLmRuLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIGdldFBhZ2VEYXRhIGFmdGVyIGNoZWNraW5nIHN0YXRlIGNvbmZpZyBzbyB0aGF0IFN0YXRpYyBWYXJpYWJsZXMgY2FuIHVzZSBpdFxuICAgICAgICB0aGlzLmdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBkYXRhIG9mIHRoZSBwYWdlIGhhcyBiZWVuIGZldGNoZWQuKi9cbiAgICBvblBhZ2VEYXRhUmVhZHkoZXZlbnQsIGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gZ2V0IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UqL1xuICAgIGdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgZGF0YSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW4gdGFibGUgY29tcG9uZW50LCBpbiBjYXNlIG9mIG9uIGRlbWFuZCBhbmQgc2Nyb2xsIHBhZ2luYXRpb25cbiAgICAgICAgICAgICAqIFdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gZGF0YSBpdGVtIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgICAqIEZldGNoIHRoZSBpdGVtcyBvZiB0aGUgcGFnZSB3aGVyZSB0aGUgY2hhbmdlIGlzIG1hZGVcbiAgICAgICAgICAgICAqICovXG4gICAgICAgICAgICBsZXQgcGFnZUluZGV4ID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkICE9PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgICAgIHBhZ2VJbmRleCA9IHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAncGFnZSc6IChwYWdlSW5kZXggLSAxKSArIHRoaXMuZ2V0UGFnaW5hdGlvblN0YXJ0SW5kZXgoKSxcbiAgICAgICAgICAgICAgICAnc2l6ZSc6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICAnZmlsdGVyRmllbGRzJzogdGhpcy5maWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICAgICAgJ29yZGVyQnknOiB0aGlzLnNvcnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICdsb2dpY2FsT3AnOiB0aGlzLmxvZ2ljYWxPcCxcbiAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogJ2FueXdoZXJlaWdub3JlY2FzZSdcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCByZXNwb25zZSAmJiByZXNwb25zZS5kYXRhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSAsIHN0YXJ0SW5kZXggKyBOdW1iZXIodGhpcy5wYWdpbmF0aW9uPy5udW1iZXJPZkVsZW1lbnRzKSwgdGhpcy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZXJyb3IgaXMgdW5kZWZpbmVkLCBkbyBub3Qgc2hvdyBhbnkgbWVzc2FnZSBhcyB0aGlzIG1heSBiZSBkaXNjYXJkZWQgcmVxdWVzdFxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gd21Ub2FzdGVyLnNob3coJ2Vycm9yJywgJ0VSUk9SJywgJ1VuYWJsZSB0byBnZXQgZGF0YSBvZiBwYWdlIC0nICsgdGhpcy5kbi5jdXJyZW50UGFnZSArICc6JyArIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBpc0FycmF5KHRoaXMuX19mdWxsRGF0YSkgPyB0aGlzLl9fZnVsbERhdGEuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiB0aGlzLl9fZnVsbERhdGE7XG4gICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxICwgTWF0aC5taW4oc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cywgdGhpcy5fX2Z1bGxEYXRhPy5sZW5ndGgpLCB0aGlzLl9fZnVsbERhdGE/Lmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCBkYXRhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIHByZXZpb3VzIHBhZ2UgZGF0YSBvZiB0aGUgdGFibGVcbiAgICAqL1xuICAgIGlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmIHBhZ2VJbmRleCA9PT0gdGhpcy5wYXJlbnQuY3VycmVudFBhZ2UgJiZcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgJiYgdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSA8IHBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBpbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXZlbnQgaGFuZGxlciBpZiBleGlzdHMuXG4gICAgICAgIGNvbnN0IHBhZ2VJbmZvID0ge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuZG4uY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiB0aGlzLmRhdGFTaXplLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdGhpcy5wYWdlQ291bnRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pbnZva2VFdmVudENhbGxiYWNrKCdzZXRyZWNvcmQnLCB7JGV2ZW50OiBldmVudCwgJGRhdGE6IGRhdGEsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZSwgcGFnZUluZm8sIGRhdGF9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYWdlIGlucHV0LlxuICAgICBJbiBjYXNlIG9mIGludmFsaWQgaW5wdXQsIG5hdmlnYXRlIHRvIHRoZSBhcHByb3ByaWF0ZSBwYWdlOyBhbHNvIHJldHVybiBmYWxzZS5cbiAgICAgSW4gY2FzZSBvZiB2YWxpZCBpbnB1dCwgcmV0dXJuIHRydWUuKi9cbiAgICB2YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgLypJZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxhc3QgcGFnZSBudW1iZXIgb3IgaW52YWxpZCB2YWx1ZSwgdGhlbiBoaWdobGlnaHRpbmcgdGhlIGZpZWxkIHNob3dpbmcgZXJyb3IuKi9cbiAgICAgICAgaWYgKGV2ZW50ICYmIChpc05hTih0aGlzLmRuLmN1cnJlbnRQYWdlKSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlIDw9IDAgfHwgKHRoaXMucGFnZUNvdW50ICYmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQgfHwgaXNOdWxsKHRoaXMuZG4uY3VycmVudFBhZ2UpKSkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGUgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnYScpO1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUUnKSB7XG4gICAgICAgICAgICB0YXJnZXRFbGUuYWRkQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGUucmVtb3ZlQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFnZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgIHRoaXMuX2RlYm91bmNlZFBhZ2VDaGFuZ2VkKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSByZXNwZWN0aXZlIHBhZ2VzLiovXG4gICAgbmF2aWdhdGVQYWdlKGluZGV4LCBldmVudCwgaXNSZWZyZXNoPywgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8vIHdoZW4gbmF2aWdhdGVkIHRvIG5leHQgcGFnZSB0dXJuIG9uIHRoZSBpc0RhdGFMb2FkaW5nIGZsYWcgdG8gc2hvdyB0aGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nKSAmJiAhdGhpcy5pc0Rpc2FibGVOZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaW5maW5pdGUgc2Nyb2xsIGNhbGxpbmcgdGhlIHNob3dMb2FkaW5nSW5kaWNhdG9yIG1ldGhvZCB0byB1cGRhdGUgdGhlIGxvYWRpbmcgbWVzc2FnZSBpbW1lZGlhdGVseSB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2VcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudC5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC52YXJpYWJsZUluZmxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ3Nob3dMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5wYXJlbnQubG9hZGluZ2RhdGFtc2csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc2V0IHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgdG8gXCJzY3JvbGxcIiBhbmQgaXNEYXRhc2V0VXBkYXRlZCB0byBmYWxzZVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuQUNUSU9OUy5ERUZBVUxUKTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldElzRGF0YXNldFVwZGF0ZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCBwYWdlIHRvIGEgdmFsaWQgcGFnZSBudW1iZXIuXG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSArdGhpcy5kbi5jdXJyZW50UGFnZTtcblxuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlICdmaXJzdCc6XG4gICAgICAgICAgICAgICAgaWYodGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmIHRoaXMuZGF0YXNvdXJjZT8ucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0ZpcnN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAncHJldic6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgZmlyc3QgcGFnZS4qL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmICh0aGlzLmlzRmlyc3RQYWdlKCkgfHwgIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2spKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHsgLy8gV01TLTE4ODY3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgc2tpcHBpbmcgdGhlIHJlZ3VsYXIgZmxvdyBhbmQgZW5hYmxpbmcgaXNOZXh0IGZsYWcgaW4gcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypEZWNyZW1lbnQgdGhlIGN1cnJlbnQgcGFnZSBieSAxLiovXG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSAtPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgbGFzdCBwYWdlLiovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQgJiYgKHRoaXMuaXNMYXN0UGFnZSgpIHx8ICF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7IC8vIFdNUy0xODg2NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIHNraXBwaW5nIHRoZSByZWd1bGFyIGZsb3cgYW5kIGVuYWJsaW5nIGlzUHJldiBmbGFnIGluIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qSW5jcmVtZW50IHRoZSBjdXJyZW50IHBhZ2UgYnkgMS4qL1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgKz0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xhc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLypOYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlLiovXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBzZXRCaW5kRGF0YVNldChiaW5kZGF0YXNldCwgcGFyZW50LCBkYXRhU291cmNlLCBkYXRhc2V0PywgYmluZGRhdGFzb3VyY2U/LCBkYXRhc2V0Qm91bmRFeHByPywgc3RhdGVoYW5kbGVyPykge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGJpbmRkYXRhc2V0LnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCBiaW5kUGFnaW5nT3B0aW9ucztcbiAgICAgICAgdGhpcy5zdGF0ZWhhbmRsZXIgPSBzdGF0ZWhhbmRsZXI7XG4gICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycgfHwgcGFydHNbMF0gPT09ICdXaWRnZXRzJykge1xuICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMgPSBgJHtwYXJ0c1swXX0uJHtwYXJ0c1sxXX0ucGFnaW5hdGlvbmA7XG4gICAgICAgIH0gZWxzZSBpZiAocGFydHNbMF0gPT09ICdBcHAnICYmIHBhcnRzWzFdID09PSAnYWN0aXZlUGFnZScgJiYgcGFydHNbMl0gPT09ICdWYXJpYWJsZXMnICYmIHBhcnRzWzNdKSB7XG4gICAgICAgICAgICBiaW5kUGFnaW5nT3B0aW9ucyA9IGBBcHAuYWN0aXZlUGFnZS5WYXJpYWJsZXMuJHtwYXJ0c1szXX0ucGFnaW5hdGlvbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiaW5kZGF0YXNvdXJjZSAmJiBkYXRhc2V0ICYmICFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyB3YXRjaGluZyBmb3IgZGF0YXNldCBjaGFuZ2VzIGV2ZW4gd2hlbiBkYXRhc2V0IGlzIGJvdW5kIHRvIFwiaXRlbS5cIiAoaS5lLiBieSBjaGVja2luZyBmb3IgZGF0YXNldEJvdW5kRXhwcilcbiAgICAgICAgICAgIC8vIGl0ZW0gY29udGV4dCBpcyBwYXNzZWQgYXMgZGF0YVNvdXJjZSBoZXJlXG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBjaGVjayBpZiBzYW1lIGV4cHIgZm4gaXMgZ2VuZXJhdGVkIGJ5IHBhcmVudCB3aWRnZXQgKGxpc3QsIHRhYmxlKVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIgPyBkYXRhU291cmNlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIG52ID0+ICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMTkyODU6IFNldHRpbmcgZGF0YXNldCBvbiBwcm94eSBvbmx5IHRvIGhhbmRsZSBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGNhbGwgZm9yIHVuZGVmaW5lZCBjYXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGEgd2F0Y2ggb24gcGFnaW5nIG9wdGlvbnMuIENhbGwgZGF0YXNldCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBldmVuIGlmIHBhZ2luZyBvcHRpb25zIGNoYW5nZXMgdG8gcmVmbGVjdCBwYWdpbmF0aW9uIHN0YXRlXG4gICAgICAgICAgICBpZiAoIWJpbmRQYWdpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBlaXRoZXIgZ2VuZXJhdGUgd2F0Y2ggZXhwciBmbiBvciByZWdpc3RlciBhbiBldmVudCBmcm9tIHRoZSBkYXRhc291cmNlIGl0c2VsZlxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXBwbHkgZGF0YXNvdXJjZSBvbmx5IHdoZW4gZGF0YXNldCBpcyBub3QgYm91bmQgdG8gXCJpdGVtLkZJRUxEXCJcbiAgICAgICAgaWYgKCFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBkYXRhc291cmNlIG9mIHBhZ2luYXRpb24gZnJvbSB0aGUgcGFyZW50IHdpZGdldFxuICAgIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52LCBvdikge1xuICAgICAgICBsZXQgcGFnZVNpemUsIHByZXZQYWdlU2l6ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMucGFyZW50Lm9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gbnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwiZGF0YXNldF91cGRhdGVcIiB3aGVuZXZlciBkYXRhc2V0IGlzIGNoYW5nZWQgaW4gdGFibGUgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll90cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGgpIHsgLy8gY2FsY3VsYXRlIFBhZ2VzaXplIG9wdGlvbnMgYmFzZWQgb24gYWN0dWFsIHBhZ2Ugc2l6ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7IC8vIGZvciBMaXZlIHZhcmlhYmxlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZVNpemUgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24uc2l6ZScpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnNpemUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24udG90YWxFbGVtZW50cycpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSB3aWRnZXRTdGF0ZT8uYWN0dWFscGFnZXNpemUgfHwgY3VycmVudFBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gTnVtYmVyKHRoaXMuYWN0dWFsUGFnZVNpemUpID8gdGhpcy5hY3R1YWxQYWdlU2l6ZSA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5hY3R1YWxQYWdlU2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gWy4uLnRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSByYW5nZSh0aGlzLmFjdHVhbFBhZ2VTaXplLCAgTWF0aC5tYXgodGhpcy5hY3R1YWxQYWdlU2l6ZSArIDEsIHRoaXMuYWN0dWFsUGFnZVNpemUgKyB0b3RhbEVsZW1lbnRzKSwgdGhpcy5hY3R1YWxQYWdlU2l6ZSk7IC8vIGhlcmUgZGF0YSBoYXMgb25seSB0aGF0IHBhZ2UgZGF0YSBhbmQgcGFnZXNpemUgaGFzIHRvdGFsTm9vZiBFbGVtZW50c1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtICYmIHdpZGdldFN0YXRlLmFjdHVhbHBhZ2VzaXplICE9PSB3aWRnZXRTdGF0ZS5wYWdlc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgK3RoaXMucHJldlBhZ2VTaXplICE9PSArKHdpZGdldFN0YXRlLnBhZ2VzaXplIHx8IHRoaXMubWF4UmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhZ2VTaXplID0gKyh3aWRnZXRTdGF0ZS5wYWdlc2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZQYWdlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gd2lkZ2V0U3RhdGUuYWN0dWFscGFnZXNpemUgfHwgdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCBkYXRhPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCB0aGlzLnByZXZQYWdlU2l6ZSxuZXdQYWdlU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gbmV3UGFnZVNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9IHRoaXMucGFyZW50LmdldEFjdHVhbFBhZ2VTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gcmFuZ2UocGFnZVNpemUsIGRhdGEubGVuZ3RoICsgcGFnZVNpemUsIHBhZ2VTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIGRhdGFzZXQgaXMgbm90IGluIGN1cnJlbnQgcGFnZSwgYnV0IGluIHByZXZpb3VzIG9uZXMgZGlyZWN0bHkgc2V0IHRoZSByZXN1bHQgd2l0aG91dCBzZXR0aW5nIHBhZ2UgdmFsdWVzXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXMoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmNvbnRyb2xzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbnNpemUnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdlNpemUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uYWxpZ24nKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGB0ZXh0LSR7bnZ9YCwgYHRleHQtJHtvdn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdtYXhSZXN1bHRzJykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXModGhpcy5kYXRhc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuICAgLy8gY2hhbmdlIHRoZSBzZWxlY3RlZEl0ZW1zIHBhZ2UgbnVtYmVyIGFuZCBpbmRleCBpbiB0aGUgc3RhdGVwYXJhbXMgd2hlbiBwYWdlc2l6ZSBpcyBjaGFuZ2VkXG4gICAgaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZShcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10sXG4gICAgICAgIG9sZFBhZ2VTaXplOiBudW1iZXIsXG4gICAgICAgIG5ld1BhZ2VTaXplOiBudW1iZXJcbiAgICApOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10ge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtLm1hcCgoeyBwYWdlLCBpbmRleCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gKHBhZ2UgLSAxKSAqIG9sZFBhZ2VTaXplICsgaW5kZXg7XG4gICAgICAgICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5mbG9vcihhYnNvbHV0ZUluZGV4IC8gbmV3UGFnZVNpemUpICsgMTsgLy8gYmFjayB0byAxLWJhc2VkXG4gICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGFic29sdXRlSW5kZXggJSBuZXdQYWdlU2l6ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBuZXdQYWdlLFxuICAgICAgICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93bktleWRvd24oZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0ICRpdGVtcyA9ICQoJ3VsI2Ryb3Bkb3duLWJhc2ljIGEuZHJvcGRvd24taXRlbScpO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCBzZWxlY3RlZE9wdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBTaGlmdCtUYWIgYXMgQXJyb3dVcFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IFRhYiBvciBBcnJvd0Rvd24gYXMgQXJyb3dEb3duXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4ICsgMSkgPiBtYXhJbmRleCA/IDAgOiBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zW3RoaXMuZm9jdXNlZEluZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UoZXZlbnQsIHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBmb2N1cyBhZnRlciBpbmRleCBpcyB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJGl0ZW1zLmVxKHRoaXMuZm9jdXNlZEluZGV4KT8uZm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjbG9zZURyb3Bkb3duKCkge1xuICAgICAgICAvLyBDbG9zZSBkcm9wZG93blxuICAgICAgICB0aGlzLmJzRHJvcGRvd24uaGlkZSgpO1xuICAgICAgICBjb25zdCAkdG9nZ2xlQnV0dG9uID0gJCgnYnV0dG9uW2FyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiXScpO1xuICAgICAgICAkdG9nZ2xlQnV0dG9uLmZvY3VzKCk7IC8vIFJldHVybiBmb2N1cyB0byBidXR0b25cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiBkcm9wZG93biBvcGVuICYgY2xvc2VcbiAgICBvbk9wZW5DaGFuZ2UoaXNPcGVuKSB7XG4gICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gMDtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IGZvY3VzIHRoZSBkcm9wZG93biBhcyBkcm9wZG93biBoYXMgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgY29uc3QgJGl0ZW1zID0gJCgndWwjZHJvcGRvd24tYmFzaWMgYS5kcm9wZG93bi1pdGVtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgJGZpcnN0SXRlbSA9ICRpdGVtcy5lcSh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgJGZpcnN0SXRlbT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBuZXdQYWdlU2l6ZSkge1xuICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQpO1xuICAgICAgICBsZXQgdXBkYXRlZEl0ZW1zO1xuICAgICAgICBjb25zdCBvbGRQYWdlU2l6ZSA9IHdpZGdldFN0YXRlPy5wYWdlc2l6ZSB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBvbGRQYWdlU2l6ZSwgK25ld1BhZ2VTaXplKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gd2lkZ2V0U3RhdGU/LmFjdHVhbHBhZ2VzaXplIHx8IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgb2xkUGFnZVNpemU7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0cyA9ICtuZXdQYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5wcmV2UGFnZVNpemUgPSArbmV3UGFnZVNpemU7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSAmJiB0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgaWYodGhpcy5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3BvcG92ZXItY29udGFpbmVyLCAucG9wb3ZlcicpKXtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuYnNEcm9wZG93bi5oaWRlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJvcERvd25TaG93bigkZXZlbnQ6IGFueSkge1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9ICRldmVudD8uX2VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmKCFjb250YWluZXIpIHJldHVybjtcblxuICAgICAgICBhZGp1c3RWZXJ0aWNhbFBvc2l0aW9uKFxuICAgICAgICAgICAgJChjb250YWluZXIpLFxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcuaXRlbXMtcGVyLXBhZ2UgZGl2JyksXG4gICAgICAgICAgICB0aGlzLmJzRHJvcGRvd24uX2Ryb3Bkb3duLFxuICAgICAgICAgICAgJChjb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJ3VsW2lkPVwiZHJvcGRvd24tYmFzaWNcIl0nKSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Ecm9wZG93blNjcm9sbCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmRyb3Bkb3duU2Nyb2xsSGFuZGxlciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93blNjcm9sbCgpIHtcbiAgICAgICAgLy8gb24gc2Nyb2xsIGJvb3N0cmFwIGlzIGFwcGx5aW5nIDNkIHRyYW5zbGF0aW9uIHRvIHByZXZlbnQgZnJvbSB0aGF0IGFkZGVkIHRoaXMgZHVtbXkgZnVuY3Rpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbkRyb3Bkb3duSGlkZGVuKCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93blNjcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmRyb3Bkb3duU2Nyb2xsSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbEhhbmRsZXIgPSB1bmRlZmluZWQhO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkVsZW0gPSAgdGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwYWdpbmF0aW9uRWxlbS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25TY3JvbGxIYW5kbGVyKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5kcm9wZG93blNjcm9sbEhhbmRsZXIsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpZiBzdGlsbCBwZW5kaW5nXG4gICAgICAgIGlmICh0aGlzLl9pbml0VGltZW91dElkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faW5pdFRpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0VGltZW91dElkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ29tcGxldGUgRXZlbnRFbWl0dGVyc1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRFbWl0dGVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdEVtaXR0ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXhSZXN1bHRzRW1pdHRlcikge1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBOdWxsaWZ5IGRlYm91bmNlZCBmdW5jdGlvbiBjbG9zdXJlc1xuICAgICAgICB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9kZWJvdW5jZWRQYWdlQ2hhbmdlZCA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBkYXRhIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgICAgICB0aGlzLmRhdGFzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBwYWdlIHNpemUgb3B0aW9ucyBhcnJheVxuICAgICAgICBpZiAodGhpcy5wYWdlU2l6ZU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIGRhdGFzb3VyY2UgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBwYXJlbnQgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblxuICAgICAgICAvLyBDYWxsIHBhcmVudCBuZ09uRGVzdHJveSAoc2V0cyBpc0Rlc3Ryb3llZCA9IHRydWUpXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQ2xhc3NpYycpIHtcbjx1bCBjbGFzcz1cInBhZ2luYXRpb24gYWR2YW5jZWQge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiPlxuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW1zLXBlci1wYWdlXCI+XG4gICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFfX0gOjwvbGFiZWw+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biAgY29udGFpbmVyPVwiYm9keVwiIChvblNob3duKT1cIm9uRHJvcERvd25TaG93bigkZXZlbnQpXCIgKG9uSGlkZGVuKT1cIm9uRHJvcGRvd25IaWRkZW4oKVwiIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG9wdGlvbilcIiAoa2V5ZG93bik9XCJvbkRyb3Bkb3duS2V5ZG93bigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS5zdGFydEluZGV4fX0gLSB7e3Jvd1N1bW1hcnkuZW5kSW5kZXh9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnRvdGFsUmVjb3Jkc319PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVGaXJzdH1cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9GSVJTVFwiIG5hbWU9XCJmaXJzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVGaXJzdFwiXG4gICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1maXJzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGZpcnN0IHBhZ2Uge3sgaXNEaXNhYmxlRmlyc3QgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlUHJldmlvdXN9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfUFJFVklPVVNcIiBuYW1lPVwicHJldlwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlUHJldmlvdXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIHByZXZpb3VzIHBhZ2Uge3sgaXNEaXNhYmxlUHJldmlvdXMgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBjbGFzcz1cInBhZ2Vjb3VudCBkaXNhYmxlZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIGFyaWEtbGFiZWw9XCJDaGFuZ2UgUGFnZSBOdW1iZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRuLmN1cnJlbnRQYWdlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU2hvd2luZyBQYWdlICcgKyBkbi5jdXJyZW50UGFnZSArICcgb2YgJyArIHBhZ2VDb3VudFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVDdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgKGNoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiLz5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgY2xhc3M9XCJkaXNhYmxlZFwiPlxuICAgICAgICA8YSBbaGlkZGVuXT1cImlzRGlzYWJsZUNvdW50XCI+IC8ge3twYWdlQ291bnR9fTwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfTkVYVFwiIG5hbWU9XCJuZXh0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZU5leHRcIlxuICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLXJpZ2h0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIG5leHQgcGFnZSB7eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZUxhc3R9XCI+XG4gICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0xBU1RcIiBuYW1lPVwibGFzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVMYXN0XCJcbiAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbGFzdCcsICRldmVudClcIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1sYXN0LXBhZ2VcIj48L2k+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBsYXN0IHBhZ2Uge3sgaXNEaXNhYmxlTGFzdCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoc2hvd3JlY29yZGNvdW50KSB7XG4gICAgICA8bGkgY2xhc3M9XCJ0b3RhbGNvdW50IGRpc2FibGVkXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+e3thcHBMb2NhbGUuTEFCRUxfVE9UQUxfUkVDT1JEU319OiB7e2RhdGFTaXplfX08L2E+XG4gICAgICA8L2xpPlxuICAgIH1cbjwvdWw+XG59XG5AaWYgKG5hdmNvbnRyb2xzID09PSAnUGFnZXInKSB7XG4gIDx1bCBjbGFzcz1cInBhZ2VyIHt7bmF2aWdhdGlvbkNsYXNzfX1cIj5cbiAgICAgICAgQGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlICYmICBwYWdlU2l6ZU9wdGlvbnM/LlswXTxyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRVwiIGNsYXNzPVwiYXBwLWxhYmVsXCI+e3thcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0V9fSA6PC9sYWJlbD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duIGNvbnRhaW5lcj1cImJvZHlcIiAob25TaG93bik9XCJvbkRyb3BEb3duU2hvd24oJGV2ZW50KVwiIChvbkhpZGRlbik9XCJvbkRyb3Bkb3duSGlkZGVuKClcIiAoaXNPcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbi1iYXNpY1wiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAge3ttYXhSZXN1bHRzfX0gPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyB0cmFjayBvcHRpb247IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudCwgb3B0aW9uKVwiIChrZXlkb3duKT1cIm9uRHJvcGRvd25LZXlkb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IGZvY3VzZWRJbmRleCA/IDAgOiAtMVwiPnt7b3B0aW9ufX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkuc3RhcnRJbmRleH19IC0ge3tyb3dTdW1tYXJ5LmVuZEluZGV4fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnRvdGFsUmVjb3Jkc319PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIH1cbiAgICB9XG5AaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwicHJldmlvdXNcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfUFJFVklPVVN9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgIHt7YXBwTG9jYWxlLkxBQkVMX05FWFR9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgfVxuICA8L3VsPlxufVxuXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQmFzaWMnKSB7XG4gICAgQGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlICYmICBwYWdlU2l6ZU9wdGlvbnM/LlswXTxyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICA8bGFiZWwgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRVwiIGNsYXNzPVwiYXBwLWxhYmVsXCI+e3thcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0UgfX0gOjwvbGFiZWw+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duIGNvbnRhaW5lcj1cImJvZHlcIiAgKG9uU2hvd24pPVwib25Ecm9wRG93blNob3duKCRldmVudClcIiAob25IaWRkZW4pPVwib25Ecm9wZG93bkhpZGRlbigpXCIgKGlzT3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbi1iYXNpY1wiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgIHt7bWF4UmVzdWx0c319IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJidXR0b24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyB0cmFjayBvcHRpb247IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG9wdGlvbilcIiAoa2V5ZG93bik9XCJvbkRyb3Bkb3duS2V5ZG93bigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpID09PSBmb2N1c2VkSW5kZXggPyAwIDogLTFcIj57e29wdGlvbn19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgICA8cGFnaW5hdGlvbiBjbGFzcz1cInBhZ2luYXRpb24gYmFzaWNcIiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uQ2xhc3NcIiByb2xlPVwibmF2aWdhdGlvblwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwibWF4UmVzdWx0c1wiIFt0b3RhbEl0ZW1zXT1cImRhdGFTaXplXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6dHJ1ZX1cIiBbbmdNb2RlbF09XCJkbi5jdXJyZW50UGFnZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnQgKyAnIHBhZ2VzJ1wiXG4gICAgICAgIFtib3VuZGFyeUxpbmtzXT1cImJvdW5kYXJ5bGlua3NcIiBbbWF4U2l6ZV09XCJtYXhzaXplXCJcbiAgICAgICAgW2RpcmVjdGlvbkxpbmtzXT1cImRpcmVjdGlvbmxpbmtzXCJcbiAgICAgICAgZmlyc3RUZXh0PVwiRmlydHN0XCIgbGFzdFRleHQ9XCJMYXN0XCJcbiAgICAgICAgW2N1c3RvbVByZXZpb3VzVGVtcGxhdGVdPVwicHJldlRlbXBsYXRlXCJcbiAgICAgICAgW2N1c3RvbU5leHRUZW1wbGF0ZV09XCJuZXh0VGVtcGxhdGVcIlxuICAgICAgICBbY3VzdG9tUGFnZVRlbXBsYXRlXT1cInBhZ2VUZW1wbGF0ZVwiPjwvcGFnaW5hdGlvbj5cbiAgICB9XG59XG5cbkBpZiAobmF2Y29udHJvbHMgPT09ICdCYXNpYycgJiYgc2hvd3JlY29yZGNvdW50KSB7XG4gIDx1bCBjbGFzcz1cInBhZ2luYXRpb25cIj5cbiAgICA8bGkgY2xhc3M9XCJ0b3RhbGNvdW50IGRpc2FibGVkIGJhc2ljY291bnRcIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+e3thcHBMb2NhbGUuTEFCRUxfVE9UQUxfUkVDT1JEU319OiB7e2RhdGFTaXplfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbn1cblxuPG5nLXRlbXBsYXRlICNwYWdlVGVtcGxhdGUgbGV0LXBhZ2U+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNhY2l0dmVwYWdlXT1cInBhZ2UuYWN0aXZlXCI+e3snUGFnZSAnfX08L3NwYW4+XG4gIHt7cGFnZS5udW1iZXJ9fVxuICBAaWYgKHBhZ2UuYWN0aXZlKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+IHt7JywgU2hvd2luZyBwYWdlICcgKyBwYWdlLm51bWJlciArICcgb2YgJyArIHBhZ2VDb3VudH19PC9zcGFuPlxuICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmV2VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gUHJldmlvdXMgcGFnZSB7e2Rpc2FibGVkID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25leHRUZW1wbGF0ZSBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5HbyB0byBOZXh0IHBhZ2Uge3tkaXNhYmxlZCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -551,8 +551,8 @@ class PaginationComponent extends StylableComponent {
|
|
|
551
551
|
if (parts[0] === 'Variables' || parts[0] === 'Widgets') {
|
|
552
552
|
bindPagingOptions = `${parts[0]}.${parts[1]}.pagination`;
|
|
553
553
|
}
|
|
554
|
-
else if (parts[0] === 'App' && parts[1] === 'activePage' && parts[2]
|
|
555
|
-
bindPagingOptions = `App.activePage.${parts[
|
|
554
|
+
else if (parts[0] === 'App' && parts[1] === 'activePage' && parts[2] === 'Variables' && parts[3]) {
|
|
555
|
+
bindPagingOptions = `App.activePage.Variables.${parts[3]}.pagination`;
|
|
556
556
|
}
|
|
557
557
|
if (!binddatasource && dataset && !datasetBoundExpr) {
|
|
558
558
|
this.dataset = dataset;
|