@mintplayer/ng-bootstrap 20.1.0 → 20.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-bootstrap-dock.mjs","sources":["../tmp-esm2022/dock/src/dock-panel/dock-panel.component.js","../tmp-esm2022/dock/src/panes/dock-pane.js","../tmp-esm2022/dock/src/panes/tab-group-pane.js","../tmp-esm2022/dock/src/panes/document-host-pane.js","../tmp-esm2022/dock/src/panes/content-pane.js","../tmp-esm2022/dock/src/panes/floating-pane.js","../tmp-esm2022/dock/src/panes/split-pane.js","../tmp-esm2022/dock/src/enums/pane-type.enum.js","../tmp-esm2022/dock/src/dock-pane-renderer/dock-pane-renderer.component.js","../tmp-esm2022/dock/src/dock/dock.component.js","../tmp-esm2022/dock/src/services/dock/dock.service.js","../tmp-esm2022/dock/src/dock-panel-header/dock-panel-header.component.js","../tmp-esm2022/dock/src/dock.module.js","../tmp-esm2022/dock/mintplayer-ng-bootstrap-dock.js"],"sourcesContent":["import { DomPortal } from '@angular/cdk/portal';\nimport { Component, Input, ViewChild } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BsDockPanelComponent {\n constructor() {\n this.panelId = '';\n }\n ngAfterViewInit() {\n this.headerPortal = new DomPortal(this.headerElement.nativeElement);\n this.contentPortal = new DomPortal(this.contentElement.nativeElement);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.7\", type: BsDockPanelComponent, isStandalone: false, selector: \"bs-dock-panel\", inputs: { panelId: \"panelId\" }, viewQueries: [{ propertyName: \"headerElement\", first: true, predicate: [\"headerElement\"], descendants: true }, { propertyName: \"contentElement\", first: true, predicate: [\"contentElement\"], descendants: true }], ngImport: i0, template: \"<!-- <bs-split-panel> -->\\n<div #headerElement class=\\\"dock-header\\\">\\n <ng-content select=\\\"bs-dock-panel-header\\\"></ng-content>\\n</div>\\n<div #contentElement>\\n <ng-content></ng-content>\\n</div>\\n<!-- </bs-split-panel> -->\", styles: [\".dock-header{padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);margin:calc(-1 * var(--bs-nav-link-padding-y)) calc(-1 * var(--bs-nav-link-padding-x))}\\n\"] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPanelComponent, decorators: [{\n type: Component,\n args: [{ selector: 'bs-dock-panel', standalone: false, template: \"<!-- <bs-split-panel> -->\\n<div #headerElement class=\\\"dock-header\\\">\\n <ng-content select=\\\"bs-dock-panel-header\\\"></ng-content>\\n</div>\\n<div #contentElement>\\n <ng-content></ng-content>\\n</div>\\n<!-- </bs-split-panel> -->\", styles: [\".dock-header{padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);margin:calc(-1 * var(--bs-nav-link-padding-y)) calc(-1 * var(--bs-nav-link-padding-x))}\\n\"] }]\n }], propDecorators: { headerElement: [{\n type: ViewChild,\n args: ['headerElement']\n }], contentElement: [{\n type: ViewChild,\n args: ['contentElement']\n }], panelId: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2stcGFuZWwvZG9jay1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2stcGFuZWwvZG9jay1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQWlCLFNBQVMsRUFBZ0MsTUFBTSxlQUFlLENBQUM7O0FBU3JILE1BQU0sT0FBTyxvQkFBb0I7SUFOakM7UUFZVyxZQUFPLEdBQUcsRUFBRSxDQUFDO0tBTXZCO0lBSkMsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEUsQ0FBQzs4R0FYVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw2VENWakMsd09BTzBCOzsyRkRHYixvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsZUFBZSxjQUdiLEtBQUs7OEJBSVcsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNHLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUdsQixPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21Qb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5qZWN0LCBPcHRpb25hbCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNUYWJDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnQG1pbnRwbGF5ZXIvbmctYm9vdHN0cmFwL3RhYi1jb250cm9sJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtZG9jay1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2NrLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9jay1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgQnNEb2NrUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICBAVmlld0NoaWxkKCdoZWFkZXJFbGVtZW50JykgaGVhZGVyRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjb250ZW50RWxlbWVudCcpIGNvbnRlbnRFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlclBvcnRhbD86IERvbVBvcnRhbDtcbiAgY29udGVudFBvcnRhbD86IERvbVBvcnRhbDtcbiAgQElucHV0KCkgcGFuZWxJZCA9ICcnO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmhlYWRlclBvcnRhbCA9IG5ldyBEb21Qb3J0YWwodGhpcy5oZWFkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuY29udGVudFBvcnRhbCA9IG5ldyBEb21Qb3J0YWwodGhpcy5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgfVxufVxuIiwiPCEtLSA8YnMtc3BsaXQtcGFuZWw+IC0tPlxuPGRpdiAjaGVhZGVyRWxlbWVudCBjbGFzcz1cImRvY2staGVhZGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYnMtZG9jay1wYW5lbC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjxkaXYgI2NvbnRlbnRFbGVtZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuPCEtLSA8L2JzLXNwbGl0LXBhbmVsPiAtLT4iXX0=","export class BsDockPane {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1wYW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9kb2NrL3NyYy9wYW5lcy9kb2NrLXBhbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFnQixVQUFVO0NBRS9CIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJzRG9ja1BhbmUge1xuICAgIGFic3RyYWN0IGdldCBpc0VtcHR5KCk6IGJvb2xlYW47XG59Il19","import { BsDockPane } from \"./dock-pane\";\nexport class BsTabGroupPane extends BsDockPane {\n constructor(data) {\n super();\n this.panes = [];\n Object.assign(this, data);\n }\n get isEmpty() {\n return this.panes.length === 0;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLXBhbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL3BhbmVzL3RhYi1ncm91cC1wYW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFekMsTUFBTSxPQUFPLGNBQWUsU0FBUSxVQUFVO0lBQzFDLFlBQVksSUFBOEI7UUFDdEMsS0FBSyxFQUFFLENBQUM7UUFJWixVQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUh4QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBSUQsSUFBYSxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJzQ29udGVudFBhbmUgfSBmcm9tIFwiLi9jb250ZW50LXBhbmVcIjtcbmltcG9ydCB7IEJzRG9ja1BhbmUgfSBmcm9tIFwiLi9kb2NrLXBhbmVcIjtcblxuZXhwb3J0IGNsYXNzIEJzVGFiR3JvdXBQYW5lIGV4dGVuZHMgQnNEb2NrUGFuZSB7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8QnNUYWJHcm91cFBhbmU+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZGF0YSk7XG4gICAgfVxuXG4gICAgcGFuZXM6IEJzQ29udGVudFBhbmVbXSA9IFtdO1xuICAgIFxuICAgIG92ZXJyaWRlIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lcy5sZW5ndGggPT09IDA7XG4gICAgfVxufSJdfQ==","import { BsDockPane } from \"./dock-pane\";\nexport class BsDocumentHost extends BsDockPane {\n constructor(data) {\n super();\n Object.assign(this, data);\n }\n get isEmpty() {\n return this.rootPane?.isEmpty ?? true;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtaG9zdC1wYW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9kb2NrL3NyYy9wYW5lcy9kb2N1bWVudC1ob3N0LXBhbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd6QyxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFDMUMsWUFBWSxJQUE4QjtRQUN0QyxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFJRCxJQUFhLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDMUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnNEb2NrUGFuZSB9IGZyb20gXCIuL2RvY2stcGFuZVwiO1xuaW1wb3J0IHsgQnNUYWJHcm91cFBhbmUgfSBmcm9tIFwiLi90YWItZ3JvdXAtcGFuZVwiO1xuXG5leHBvcnQgY2xhc3MgQnNEb2N1bWVudEhvc3QgZXh0ZW5kcyBCc0RvY2tQYW5lIHtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxCc0RvY3VtZW50SG9zdD4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBkYXRhKTtcbiAgICB9XG5cbiAgICByb290UGFuZT86IEJzVGFiR3JvdXBQYW5lXG5cbiAgICBvdmVycmlkZSBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdFBhbmU/LmlzRW1wdHkgPz8gdHJ1ZTtcbiAgICB9XG59Il19","import { BsDockPane } from \"./dock-pane\";\nexport class BsContentPane extends BsDockPane {\n constructor(data) {\n super();\n Object.assign(this, data);\n }\n get isEmpty() {\n return false;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1wYW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9kb2NrL3NyYy9wYW5lcy9jb250ZW50LXBhbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV6QyxNQUFNLE9BQU8sYUFBYyxTQUFRLFVBQVU7SUFDekMsWUFBWSxJQUE2QjtRQUNyQyxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFLRCxJQUFhLE9BQU87UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnNEb2NrUGFuZWxDb21wb25lbnQgfSBmcm9tIFwiLi4vZG9jay1wYW5lbC9kb2NrLXBhbmVsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQnNEb2NrUGFuZSB9IGZyb20gXCIuL2RvY2stcGFuZVwiO1xuXG5leHBvcnQgY2xhc3MgQnNDb250ZW50UGFuZSBleHRlbmRzIEJzRG9ja1BhbmUge1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPEJzQ29udGVudFBhbmU+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZGF0YSk7XG4gICAgfVxuXG4gICAgZG9ja1BhbmVsITogQnNEb2NrUGFuZWxDb21wb25lbnQ7XG4gICAgaXNQaW5uZWQ/OiBib29sZWFuO1xuXG4gICAgb3ZlcnJpZGUgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59Il19","import { BsDockPane } from \"./dock-pane\";\nexport class BsFloatingPane extends BsDockPane {\n constructor(data) {\n super();\n Object.assign(this, data);\n }\n get isEmpty() {\n return this.pane?.isEmpty ?? true;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmctcGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9zcmMvcGFuZXMvZmxvYXRpbmctcGFuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXpDLE1BQU0sT0FBTyxjQUFlLFNBQVEsVUFBVTtJQUMxQyxZQUFZLElBQThCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQU1ELElBQWEsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQztJQUN0QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCc0RvY2tQYW5lIH0gZnJvbSBcIi4vZG9jay1wYW5lXCI7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3BvaW50XCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvc2l6ZVwiO1xuXG5leHBvcnQgY2xhc3MgQnNGbG9hdGluZ1BhbmUgZXh0ZW5kcyBCc0RvY2tQYW5lIHtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxCc0Zsb2F0aW5nUGFuZT4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBkYXRhKTtcbiAgICB9XG4gICAgXG4gICAgcGFuZT86IEJzRG9ja1BhbmU7XG4gICAgc2l6ZT86IFNpemU7XG4gICAgbG9jYXRpb24/OiBQb2ludDtcblxuICAgIG92ZXJyaWRlIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lPy5pc0VtcHR5ID8/IHRydWU7XG4gICAgfVxufSJdfQ==","import { BsDockPane } from \"./dock-pane\";\nexport class BsSplitPane extends BsDockPane {\n constructor(data) {\n super();\n this.orientation = 'horizontal';\n this.panes = [];\n Object.assign(this, data);\n }\n get isEmpty() {\n return this.panes.length === 0;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtcGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9zcmMvcGFuZXMvc3BsaXQtcGFuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpDLE1BQU0sT0FBTyxXQUFZLFNBQVEsVUFBVTtJQUN2QyxZQUFZLElBQTJCO1FBQ25DLEtBQUssRUFBRSxDQUFDO1FBSVosZ0JBQVcsR0FBeUIsWUFBWSxDQUFDO1FBQ2pELFVBQUssR0FBaUIsRUFBRSxDQUFDO1FBSnJCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFLRCxJQUFhLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3BsaXRQYW5lT3JpZW50YXRpb24gfSBmcm9tIFwiLi4vdHlwZXMvc3BsaXQtcGFuZS1vcmllbnRhdGlvbi50eXBlXCI7XG5pbXBvcnQgeyBCc0RvY2tQYW5lIH0gZnJvbSBcIi4vZG9jay1wYW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBCc1NwbGl0UGFuZSBleHRlbmRzIEJzRG9ja1BhbmUge1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPEJzU3BsaXRQYW5lPikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xuICAgIH1cblxuICAgIG9yaWVudGF0aW9uOiBTcGxpdFBhbmVPcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJztcbiAgICBwYW5lczogQnNEb2NrUGFuZVtdID0gW107XG5cbiAgICBvdmVycmlkZSBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZXMubGVuZ3RoID09PSAwO1xuICAgIH1cbn0iXX0=","export var EPaneType;\n(function (EPaneType) {\n EPaneType[EPaneType[\"documentHost\"] = 1] = \"documentHost\";\n EPaneType[EPaneType[\"splitPane\"] = 2] = \"splitPane\";\n EPaneType[EPaneType[\"contentPane\"] = 3] = \"contentPane\";\n EPaneType[EPaneType[\"tabGroupPane\"] = 4] = \"tabGroupPane\";\n})(EPaneType || (EPaneType = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZS10eXBlLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2VudW1zL3BhbmUtdHlwZS5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDakIseURBQWdCLENBQUE7SUFDaEIsbURBQWEsQ0FBQTtJQUNiLHVEQUFlLENBQUE7SUFDZix5REFBZ0IsQ0FBQTtBQUNwQixDQUFDLEVBTFcsU0FBUyxLQUFULFNBQVMsUUFLcEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBFUGFuZVR5cGUge1xuICAgIGRvY3VtZW50SG9zdCA9IDEsXG4gICAgc3BsaXRQYW5lID0gMixcbiAgICBjb250ZW50UGFuZSA9IDMsXG4gICAgdGFiR3JvdXBQYW5lID0gNCxcbn0iXX0=","import { Component, Input } from '@angular/core';\nimport { DomPortal } from '@angular/cdk/portal';\nimport { BehaviorSubject } from 'rxjs';\nimport { EPaneType } from '../enums/pane-type.enum';\nimport { BsSplitPane } from '../panes/split-pane';\nimport { BsContentPane } from '../panes/content-pane';\nimport { BsDocumentHost } from '../panes/document-host-pane';\nimport { BsTabGroupPane } from '../panes/tab-group-pane';\nimport { BsFloatingPane } from '../panes/floating-pane';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/cdk/overlay\";\nimport * as i2 from \"@angular/cdk/portal\";\nimport * as i3 from \"@mintplayer/ng-bootstrap/instance-of\";\nimport * as i4 from \"@mintplayer/ng-bootstrap/splitter\";\nimport * as i5 from \"@mintplayer/ng-bootstrap/tab-control\";\nimport * as i6 from \"@mintplayer/ng-bootstrap/resizable\";\nimport * as i7 from \"@angular/common\";\nexport class BsDockPaneRendererComponent {\n constructor(overlay, element) {\n this.overlay = overlay;\n this.paneTypes = EPaneType;\n this.BsDocumentHostType = BsDocumentHost;\n this.BsTabGroupType = BsTabGroupPane;\n this.BsSplitterType = BsSplitPane;\n this.BsContentPaneType = BsContentPane;\n this.BsFloatingPaneType = BsFloatingPane;\n //#region Layout\n this.layout$ = new BehaviorSubject(null);\n this.portal = new DomPortal(element);\n }\n get layout() {\n return this.layout$.value;\n }\n set layout(value) {\n this.layout$.next(value);\n }\n moveToOverlay() {\n if (!this.overlayRef && !this.portal.isAttached) {\n this.overlayRef = this.overlay.create({});\n this.portal.attach(this.overlayRef);\n }\n }\n disposeOverlay() {\n if (this.overlayRef) {\n this.portal.detach();\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPaneRendererComponent, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: BsDockPaneRendererComponent, isStandalone: false, selector: \"bs-dock-pane-renderer\", inputs: { layout: \"layout\" }, ngImport: i0, template: \"<!-- <ng-content></ng-content> -->\\n<ng-container [bsInstanceof]=\\\"layout$ | async\\\">\\n <div *bsInstanceofCase=\\\"BsDocumentHostType; let documentHost\\\" data-hello>\\n <bs-dock-pane-renderer [layout]=\\\"documentHost\\\"></bs-dock-pane-renderer>\\n </div>\\n <bs-tab-control *bsInstanceofCase=\\\"BsTabGroupType; let tabGroup\\\" [allowDragDrop]=\\\"false\\\" class=\\\"d-flex flex-column h-100 dock-tabs\\\">\\n @for (tab of tabGroup.panes; track tab) {\\n <bs-tab-page>\\n <ng-container *bsTabPageHeader>\\n <ng-template [cdkPortalOutlet]=\\\"tab.dockPanel.headerPortal\\\"></ng-template>\\n </ng-container>\\n <bs-dock-pane-renderer [layout]=\\\"tab\\\"></bs-dock-pane-renderer>\\n </bs-tab-page>\\n }\\n </bs-tab-control>\\n <bs-splitter *bsInstanceofCase=\\\"BsSplitterType; let splitter\\\" [orientation]=\\\"splitter.orientation\\\">\\n @for (panel of splitter.panes; track panel) {\\n <bs-split-panel>\\n <bs-dock-pane-renderer [layout]=\\\"panel\\\"></bs-dock-pane-renderer>\\n </bs-split-panel>\\n }\\n </bs-splitter>\\n <ng-container *bsInstanceofCase=\\\"BsContentPaneType; let content\\\">\\n <ng-template [cdkPortalOutlet]=\\\"content.dockPanel.contentPortal\\\"></ng-template>\\n </ng-container>\\n <ng-container *bsInstanceofCase=\\\"BsFloatingPaneType; let floating\\\">\\n @if (floating.pane) {\\n <bs-resizable [positioning]=\\\"'absolute'\\\" [presetPosition]=\\\"{ left: floating.location?.x ?? 0, top: floating.location?.y ?? 0, width: floating.size?.width ?? 200, height: floating.size?.height ?? 100 }\\\">\\n <bs-dock-pane-renderer [layout]=\\\"floating.pane\\\"></bs-dock-pane-renderer>\\n </bs-resizable>\\n }\\n </ng-container>\\n <div *bsInstanceofDefault>\\n No match\\n </div>\\n</ng-container>\", styles: [\".dock-tabs{background:#f3f3f3}:host ::ng-deep .tab-page-content{background:#fff;min-height:100%}\\n\"], dependencies: [{ kind: \"directive\", type: i2.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }, { kind: \"directive\", type: i3.BsInstanceOfDirective, selector: \"[bsInstanceof]\", inputs: [\"bsInstanceof\"] }, { kind: \"directive\", type: i3.BsInstanceofCaseDirective, selector: \"[bsInstanceofCase]\", inputs: [\"bsInstanceofCase\"] }, { kind: \"directive\", type: i3.BsInstanceOfDefaultDirective, selector: \"[bsInstanceofDefault]\" }, { kind: \"component\", type: i4.BsSplitterComponent, selector: \"bs-splitter\", inputs: [\"orientation\"] }, { kind: \"component\", type: i4.BsSplitPanelComponent, selector: \"bs-split-panel\" }, { kind: \"component\", type: i5.BsTabControlComponent, selector: \"bs-tab-control\", inputs: [\"border\", \"restrictDragging\", \"selectFirstTab\", \"tabsPosition\", \"allowDragDrop\"] }, { kind: \"component\", type: i5.BsTabPageComponent, selector: \"bs-tab-page\", inputs: [\"disabled\"] }, { kind: \"directive\", type: i5.BsTabPageHeaderDirective, selector: \"[bsTabPageHeader]\" }, { kind: \"component\", type: i6.BsResizableComponent, selector: \"bs-resizable\", inputs: [\"positioning\", \"presetPosition\"] }, { kind: \"component\", type: BsDockPaneRendererComponent, selector: \"bs-dock-pane-renderer\", inputs: [\"layout\"] }, { kind: \"pipe\", type: i7.AsyncPipe, name: \"async\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPaneRendererComponent, decorators: [{\n type: Component,\n args: [{ selector: 'bs-dock-pane-renderer', standalone: false, template: \"<!-- <ng-content></ng-content> -->\\n<ng-container [bsInstanceof]=\\\"layout$ | async\\\">\\n <div *bsInstanceofCase=\\\"BsDocumentHostType; let documentHost\\\" data-hello>\\n <bs-dock-pane-renderer [layout]=\\\"documentHost\\\"></bs-dock-pane-renderer>\\n </div>\\n <bs-tab-control *bsInstanceofCase=\\\"BsTabGroupType; let tabGroup\\\" [allowDragDrop]=\\\"false\\\" class=\\\"d-flex flex-column h-100 dock-tabs\\\">\\n @for (tab of tabGroup.panes; track tab) {\\n <bs-tab-page>\\n <ng-container *bsTabPageHeader>\\n <ng-template [cdkPortalOutlet]=\\\"tab.dockPanel.headerPortal\\\"></ng-template>\\n </ng-container>\\n <bs-dock-pane-renderer [layout]=\\\"tab\\\"></bs-dock-pane-renderer>\\n </bs-tab-page>\\n }\\n </bs-tab-control>\\n <bs-splitter *bsInstanceofCase=\\\"BsSplitterType; let splitter\\\" [orientation]=\\\"splitter.orientation\\\">\\n @for (panel of splitter.panes; track panel) {\\n <bs-split-panel>\\n <bs-dock-pane-renderer [layout]=\\\"panel\\\"></bs-dock-pane-renderer>\\n </bs-split-panel>\\n }\\n </bs-splitter>\\n <ng-container *bsInstanceofCase=\\\"BsContentPaneType; let content\\\">\\n <ng-template [cdkPortalOutlet]=\\\"content.dockPanel.contentPortal\\\"></ng-template>\\n </ng-container>\\n <ng-container *bsInstanceofCase=\\\"BsFloatingPaneType; let floating\\\">\\n @if (floating.pane) {\\n <bs-resizable [positioning]=\\\"'absolute'\\\" [presetPosition]=\\\"{ left: floating.location?.x ?? 0, top: floating.location?.y ?? 0, width: floating.size?.width ?? 200, height: floating.size?.height ?? 100 }\\\">\\n <bs-dock-pane-renderer [layout]=\\\"floating.pane\\\"></bs-dock-pane-renderer>\\n </bs-resizable>\\n }\\n </ng-container>\\n <div *bsInstanceofDefault>\\n No match\\n </div>\\n</ng-container>\", styles: [\".dock-tabs{background:#f3f3f3}:host ::ng-deep .tab-page-content{background:#fff;min-height:100%}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ElementRef }], propDecorators: { layout: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1wYW5lLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9zcmMvZG9jay1wYW5lLXJlbmRlcmVyL2RvY2stcGFuZS1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2stcGFuZS1yZW5kZXJlci9kb2NrLXBhbmUtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBMkIsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFtQixNQUFNLE1BQU0sQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7O0FBU3hELE1BQU0sT0FBTywyQkFBMkI7SUFFdEMsWUFBb0IsT0FBZ0IsRUFBRSxPQUFtQjtRQUFyQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBTXBDLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFDYix1QkFBa0IsR0FBRyxjQUFjLENBQUM7UUFDcEMsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFDaEMsbUJBQWMsR0FBRyxXQUFXLENBQUM7UUFDN0Isc0JBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLHVCQUFrQixHQUFHLGNBQWMsQ0FBQztRQUU3QyxnQkFBZ0I7UUFDaEIsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFvQixJQUFJLENBQUMsQ0FBQztRQWJyRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFhRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFvQixNQUFNLENBQUMsS0FBd0I7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUlNLGFBQWE7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7OEdBdkNVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLGdIQ2xCeEMsbzJEQW1DZSxxeUNEakJGLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsS0FBSztxR0FzQkcsTUFBTTtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21Qb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc0RvY2tQYW5lIH0gZnJvbSAnLi4vcGFuZXMvZG9jay1wYW5lJztcbmltcG9ydCB7IEVQYW5lVHlwZSB9IGZyb20gJy4uL2VudW1zL3BhbmUtdHlwZS5lbnVtJztcbmltcG9ydCB7IEJzU3BsaXRQYW5lIH0gZnJvbSAnLi4vcGFuZXMvc3BsaXQtcGFuZSc7XG5pbXBvcnQgeyBCc0NvbnRlbnRQYW5lIH0gZnJvbSAnLi4vcGFuZXMvY29udGVudC1wYW5lJztcbmltcG9ydCB7IEJzRG9jdW1lbnRIb3N0IH0gZnJvbSAnLi4vcGFuZXMvZG9jdW1lbnQtaG9zdC1wYW5lJztcbmltcG9ydCB7IEJzVGFiR3JvdXBQYW5lIH0gZnJvbSAnLi4vcGFuZXMvdGFiLWdyb3VwLXBhbmUnO1xuaW1wb3J0IHsgQnNGbG9hdGluZ1BhbmUgfSBmcm9tICcuLi9wYW5lcy9mbG9hdGluZy1wYW5lJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLWRvY2stcGFuZS1yZW5kZXJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2NrLXBhbmUtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2NrLXBhbmUtcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEJzRG9ja1BhbmVSZW5kZXJlckNvbXBvbmVudCB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LCBlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5wb3J0YWwgPSBuZXcgRG9tUG9ydGFsKGVsZW1lbnQpO1xuICB9XG5cbiAgcG9ydGFsOiBEb21Qb3J0YWw7XG5cbiAgcGFuZVR5cGVzID0gRVBhbmVUeXBlO1xuICByZWFkb25seSBCc0RvY3VtZW50SG9zdFR5cGUgPSBCc0RvY3VtZW50SG9zdDtcbiAgcmVhZG9ubHkgQnNUYWJHcm91cFR5cGUgPSBCc1RhYkdyb3VwUGFuZTtcbiAgcmVhZG9ubHkgQnNTcGxpdHRlclR5cGUgPSBCc1NwbGl0UGFuZTtcbiAgcmVhZG9ubHkgQnNDb250ZW50UGFuZVR5cGUgPSBCc0NvbnRlbnRQYW5lO1xuICByZWFkb25seSBCc0Zsb2F0aW5nUGFuZVR5cGUgPSBCc0Zsb2F0aW5nUGFuZTtcblxuICAvLyNyZWdpb24gTGF5b3V0XG4gIGxheW91dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJzRG9ja1BhbmUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIGdldCBsYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0JC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGxheW91dCh2YWx1ZTogQnNEb2NrUGFuZSB8IG51bGwpIHtcbiAgICB0aGlzLmxheW91dCQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgcHJpdmF0ZSBvdmVybGF5UmVmPzogT3ZlcmxheVJlZjtcbiAgcHVibGljIG1vdmVUb092ZXJsYXkoKSB7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYgJiYgIXRoaXMucG9ydGFsLmlzQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe30pO1xuICAgICAgdGhpcy5wb3J0YWwuYXR0YWNoKHRoaXMub3ZlcmxheVJlZik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3Bvc2VPdmVybGF5KCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMucG9ydGFsLmRldGFjaCgpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PiAtLT5cbjxuZy1jb250YWluZXIgW2JzSW5zdGFuY2VvZl09XCJsYXlvdXQkIHwgYXN5bmNcIj5cbiAgICA8ZGl2ICpic0luc3RhbmNlb2ZDYXNlPVwiQnNEb2N1bWVudEhvc3RUeXBlOyBsZXQgZG9jdW1lbnRIb3N0XCIgZGF0YS1oZWxsbz5cbiAgICAgICAgPGJzLWRvY2stcGFuZS1yZW5kZXJlciBbbGF5b3V0XT1cImRvY3VtZW50SG9zdFwiPjwvYnMtZG9jay1wYW5lLXJlbmRlcmVyPlxuICAgIDwvZGl2PlxuICAgIDxicy10YWItY29udHJvbCAqYnNJbnN0YW5jZW9mQ2FzZT1cIkJzVGFiR3JvdXBUeXBlOyBsZXQgdGFiR3JvdXBcIiBbYWxsb3dEcmFnRHJvcF09XCJmYWxzZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGgtMTAwIGRvY2stdGFic1wiPlxuICAgICAgICBAZm9yICh0YWIgb2YgdGFiR3JvdXAucGFuZXM7IHRyYWNrIHRhYikge1xuICAgICAgICAgICAgPGJzLXRhYi1wYWdlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmJzVGFiUGFnZUhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwidGFiLmRvY2tQYW5lbC5oZWFkZXJQb3J0YWxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxicy1kb2NrLXBhbmUtcmVuZGVyZXIgW2xheW91dF09XCJ0YWJcIj48L2JzLWRvY2stcGFuZS1yZW5kZXJlcj5cbiAgICAgICAgICAgIDwvYnMtdGFiLXBhZ2U+XG4gICAgICAgIH1cbiAgICA8L2JzLXRhYi1jb250cm9sPlxuICAgIDxicy1zcGxpdHRlciAqYnNJbnN0YW5jZW9mQ2FzZT1cIkJzU3BsaXR0ZXJUeXBlOyBsZXQgc3BsaXR0ZXJcIiBbb3JpZW50YXRpb25dPVwic3BsaXR0ZXIub3JpZW50YXRpb25cIj5cbiAgICAgICAgQGZvciAocGFuZWwgb2Ygc3BsaXR0ZXIucGFuZXM7IHRyYWNrIHBhbmVsKSB7XG4gICAgICAgICAgICA8YnMtc3BsaXQtcGFuZWw+XG4gICAgICAgICAgICAgICAgPGJzLWRvY2stcGFuZS1yZW5kZXJlciBbbGF5b3V0XT1cInBhbmVsXCI+PC9icy1kb2NrLXBhbmUtcmVuZGVyZXI+XG4gICAgICAgICAgICA8L2JzLXNwbGl0LXBhbmVsPlxuICAgICAgICB9XG4gICAgPC9icy1zcGxpdHRlcj5cbiAgICA8bmctY29udGFpbmVyICpic0luc3RhbmNlb2ZDYXNlPVwiQnNDb250ZW50UGFuZVR5cGU7IGxldCBjb250ZW50XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbY2RrUG9ydGFsT3V0bGV0XT1cImNvbnRlbnQuZG9ja1BhbmVsLmNvbnRlbnRQb3J0YWxcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKmJzSW5zdGFuY2VvZkNhc2U9XCJCc0Zsb2F0aW5nUGFuZVR5cGU7IGxldCBmbG9hdGluZ1wiPlxuICAgICAgICBAaWYgKGZsb2F0aW5nLnBhbmUpIHtcbiAgICAgICAgICAgIDxicy1yZXNpemFibGUgW3Bvc2l0aW9uaW5nXT1cIidhYnNvbHV0ZSdcIiBbcHJlc2V0UG9zaXRpb25dPVwieyBsZWZ0OiBmbG9hdGluZy5sb2NhdGlvbj8ueCA/PyAwLCB0b3A6IGZsb2F0aW5nLmxvY2F0aW9uPy55ID8/IDAsIHdpZHRoOiBmbG9hdGluZy5zaXplPy53aWR0aCA/PyAyMDAsIGhlaWdodDogZmxvYXRpbmcuc2l6ZT8uaGVpZ2h0ID8/IDEwMCB9XCI+XG4gICAgICAgICAgICAgICAgPGJzLWRvY2stcGFuZS1yZW5kZXJlciBbbGF5b3V0XT1cImZsb2F0aW5nLnBhbmVcIj48L2JzLWRvY2stcGFuZS1yZW5kZXJlcj5cbiAgICAgICAgICAgIDwvYnMtcmVzaXphYmxlPlxuICAgICAgICB9XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAqYnNJbnN0YW5jZW9mRGVmYXVsdD5cbiAgICAgICAgTm8gbWF0Y2hcbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPiJdfQ==","import { Component, ContentChildren, ViewChildren, Input, HostBinding } from '@angular/core';\nimport { BehaviorSubject, map } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { deepClone } from '@mintplayer/parentify';\nimport { BsDockPanelComponent } from '../dock-panel/dock-panel.component';\nimport { BsTabGroupPane } from '../panes/tab-group-pane';\nimport { BsDocumentHost } from '../panes/document-host-pane';\nimport { BsContentPane } from '../panes/content-pane';\nimport { BsFloatingPane } from '../panes/floating-pane';\nimport { BsSplitPane } from '../panes/split-pane';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../dock-pane-renderer/dock-pane-renderer.component\";\nimport * as i2 from \"@angular/common\";\nexport class BsDockComponent {\n constructor() {\n //#region Panels\n this.panels$ = new BehaviorSubject([]);\n //#endregion\n this.floating$ = new BehaviorSubject([]);\n this.positionAbsolute = true;\n this.positionPx = 0;\n const tabs = new BsTabGroupPane();\n const docHost = new BsDocumentHost();\n docHost.rootPane = tabs;\n this.layout$ = new BehaviorSubject({\n rootPane: docHost,\n floatingPanes: []\n });\n this.floating$.pipe(takeUntilDestroyed())\n .subscribe((floating) => {\n floating.forEach((panel) => panel.moveToOverlay());\n });\n this.parentifiedLayout$ = this.layout$.pipe(map(layout => {\n const clone = deepClone(layout, true, \n // []\n [BsContentPane, BsDocumentHost, BsFloatingPane, BsSplitPane, BsTabGroupPane], true, this.paneCache);\n // this.paneCache = clone.cache;\n console.log('parentify', { layout, result: clone.result });\n return clone.result;\n }));\n this.parentifiedLayout$.pipe(takeUntilDestroyed()).subscribe(console.log);\n }\n set panels(value) {\n this.panels$.next(value.toArray());\n }\n get layout() {\n return this.layout$.value;\n }\n set layout(value) {\n this.layout$.next(value);\n }\n set floatingPanes(value) {\n this.floating$.next(value.toArray());\n }\n ngOnDestroy() {\n this.floating$.value.forEach(panel => panel.disposeOverlay());\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: BsDockComponent, isStandalone: false, selector: \"bs-dock\", inputs: { layout: \"layout\" }, host: { properties: { \"class.position-absolute\": \"this.positionAbsolute\", \"style.top\": \"this.positionPx\", \"style.left\": \"this.positionPx\", \"style.bottom\": \"this.positionPx\", \"style.right\": \"this.positionPx\" } }, queries: [{ propertyName: \"panels\", predicate: BsDockPanelComponent }], viewQueries: [{ propertyName: \"floatingPanes\", predicate: [\"floating\"], descendants: true }], ngImport: i0, template: \"<ng-content></ng-content>\\n@if (layout$ | async; as layout) {\\n <bs-dock-pane-renderer [layout]=\\\"layout.rootPane\\\"></bs-dock-pane-renderer>\\n @for (pane of layout.floatingPanes; track pane) {\\n @if (pane.pane) {\\n <bs-dock-pane-renderer #floating [layout]=\\\"pane\\\"></bs-dock-pane-renderer>\\n }\\n }\\n}\", styles: [\":host ::ng-deep .tab-content{max-height:calc(100% - 41px);overflow:auto}:host ::ng-deep bs-dock-pane-renderer{min-width:100%;min-height:100%}:host ::ng-deep>bs-dock-panel>*{display:none}\\n\"], dependencies: [{ kind: \"component\", type: i1.BsDockPaneRendererComponent, selector: \"bs-dock-pane-renderer\", inputs: [\"layout\"] }, { kind: \"pipe\", type: i2.AsyncPipe, name: \"async\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockComponent, decorators: [{\n type: Component,\n args: [{ selector: 'bs-dock', standalone: false, template: \"<ng-content></ng-content>\\n@if (layout$ | async; as layout) {\\n <bs-dock-pane-renderer [layout]=\\\"layout.rootPane\\\"></bs-dock-pane-renderer>\\n @for (pane of layout.floatingPanes; track pane) {\\n @if (pane.pane) {\\n <bs-dock-pane-renderer #floating [layout]=\\\"pane\\\"></bs-dock-pane-renderer>\\n }\\n }\\n}\", styles: [\":host ::ng-deep .tab-content{max-height:calc(100% - 41px);overflow:auto}:host ::ng-deep bs-dock-pane-renderer{min-width:100%;min-height:100%}:host ::ng-deep>bs-dock-panel>*{display:none}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { panels: [{\n type: ContentChildren,\n args: [BsDockPanelComponent]\n }], layout: [{\n type: Input\n }], floatingPanes: [{\n type: ViewChildren,\n args: ['floating']\n }], positionAbsolute: [{\n type: HostBinding,\n args: ['class.position-absolute']\n }], positionPx: [{\n type: HostBinding,\n args: ['style.top']\n }, {\n type: HostBinding,\n args: ['style.left']\n }, {\n type: HostBinding,\n args: ['style.bottom']\n }, {\n type: HostBinding,\n args: ['style.right']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2svZG9jay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2svZG9jay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUF3QixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFTbEQsTUFBTSxPQUFPLGVBQWU7SUFDMUI7UUFtQ0EsZ0JBQWdCO1FBQ2hCLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFhMUQsWUFBWTtRQUVaLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFNbkUscUJBQWdC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Q29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIFZpZXdDaGlsZHJlbiwgSW5wdXQsIE9uRGVzdHJveSwgUXVlcnlMaXN0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFBhcmVudGlmaWVkLCBkZWVwQ2xvbmUgfSBmcm9tICdAbWludHBsYXllci9wYXJlbnRpZnknO1xuaW1wb3J0IHsgQnNEb2NrUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9kb2NrLXBhbmVsL2RvY2stcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEJzRG9ja0xheW91dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZG9jay1sYXlvdXQnO1xuaW1wb3J0IHsgQnNUYWJHcm91cFBhbmUgfSBmcm9tICcuLi9wYW5lcy90YWItZ3JvdXAtcGFuZSc7XG5pbXBvcnQgeyBCc0RvY3VtZW50SG9zdCB9IGZyb20gJy4uL3BhbmVzL2RvY3VtZW50LWhvc3QtcGFuZSc7XG5pbXBvcnQgeyBCc0NvbnRlbnRQYW5lIH0gZnJvbSAnLi4vcGFuZXMvY29udGVudC1wYW5lJztcbmltcG9ydCB7IEJzRmxvYXRpbmdQYW5lIH0gZnJvbSAnLi4vcGFuZXMvZmxvYXRpbmctcGFuZSc7XG5pbXBvcnQgeyBCc1NwbGl0UGFuZSB9IGZyb20gJy4uL3BhbmVzL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHsgQnNEb2NrUGFuZVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9jay1wYW5lLXJlbmRlcmVyL2RvY2stcGFuZS1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicy1kb2NrJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY2suY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2NrLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBCc0RvY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0YWJzID0gbmV3IEJzVGFiR3JvdXBQYW5lKCk7XG4gICAgY29uc3QgZG9jSG9zdCA9IG5ldyBCc0RvY3VtZW50SG9zdCgpO1xuICAgIGRvY0hvc3Qucm9vdFBhbmUgPSB0YWJzO1xuXG4gICAgdGhpcy5sYXlvdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCc0RvY2tMYXlvdXQ+KHtcbiAgICAgIHJvb3RQYW5lOiBkb2NIb3N0LFxuICAgICAgZmxvYXRpbmdQYW5lczogW11cbiAgICB9KTtcblxuICAgIHRoaXMuZmxvYXRpbmckLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChmbG9hdGluZykgPT4ge1xuICAgICAgICBmbG9hdGluZy5mb3JFYWNoKChwYW5lbCkgPT4gcGFuZWwubW92ZVRvT3ZlcmxheSgpKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgdGhpcy5wYXJlbnRpZmllZExheW91dCQgPSB0aGlzLmxheW91dCQucGlwZShtYXAobGF5b3V0ID0+IHtcbiAgICAgIGNvbnN0IGNsb25lID0gZGVlcENsb25lKFxuICAgICAgICBsYXlvdXQsIHRydWUsXG4gICAgICAgIC8vIFtdXG4gICAgICAgIFtCc0NvbnRlbnRQYW5lLCBCc0RvY3VtZW50SG9zdCwgQnNGbG9hdGluZ1BhbmUsIEJzU3BsaXRQYW5lLCBCc1RhYkdyb3VwUGFuZV0sXG4gICAgICAgIHRydWUsXG4gICAgICAgIHRoaXMucGFuZUNhY2hlKTtcblxuICAgICAgLy8gdGhpcy5wYW5lQ2FjaGUgPSBjbG9uZS5jYWNoZTtcblxuICAgICAgY29uc29sZS5sb2coJ3BhcmVudGlmeScsIHsgbGF5b3V0LCByZXN1bHQ6IGNsb25lLnJlc3VsdCB9KTtcblxuICAgICAgcmV0dXJuIGNsb25lLnJlc3VsdDtcbiAgICB9KSk7XG5cbiAgICB0aGlzLnBhcmVudGlmaWVkTGF5b3V0JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoY29uc29sZS5sb2cpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYW5lQ2FjaGU/OiBNYXA8YW55LCBhbnk+O1xuXG4gIC8vI3JlZ2lvbiBQYW5lbHNcbiAgcGFuZWxzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnNEb2NrUGFuZWxDb21wb25lbnRbXT4oW10pO1xuICBAQ29udGVudENoaWxkcmVuKEJzRG9ja1BhbmVsQ29tcG9uZW50KSBzZXQgcGFuZWxzKHZhbHVlOiBRdWVyeUxpc3Q8QnNEb2NrUGFuZWxDb21wb25lbnQ+KSB7XG4gICAgdGhpcy5wYW5lbHMkLm5leHQodmFsdWUudG9BcnJheSgpKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgLy8jcmVnaW9uIExheW91dFxuICBsYXlvdXQkOiBCZWhhdmlvclN1YmplY3Q8QnNEb2NrTGF5b3V0PjtcbiAgcHVibGljIGdldCBsYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0JC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGxheW91dCh2YWx1ZTogQnNEb2NrTGF5b3V0KSB7XG4gICAgdGhpcy5sYXlvdXQkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGZsb2F0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnNEb2NrUGFuZVJlbmRlcmVyQ29tcG9uZW50W10+KFtdKTtcbiAgQFZpZXdDaGlsZHJlbignZmxvYXRpbmcnKSBzZXQgZmxvYXRpbmdQYW5lcyh2YWx1ZTogUXVlcnlMaXN0PEJzRG9ja1BhbmVSZW5kZXJlckNvbXBvbmVudD4pIHtcbiAgICB0aGlzLmZsb2F0aW5nJC5uZXh0KHZhbHVlLnRvQXJyYXkoKSk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBvc2l0aW9uLWFic29sdXRlJylcbiAgcG9zaXRpb25BYnNvbHV0ZSA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS50b3AnKVxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmxlZnQnKVxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJvdHRvbScpXG4gIEBIb3N0QmluZGluZygnc3R5bGUucmlnaHQnKVxuICBwb3NpdGlvblB4ID0gMDtcblxuICBwYXJlbnRpZmllZExheW91dCQ6IE9ic2VydmFibGU8UGFyZW50aWZpZWQ8QnNEb2NrTGF5b3V0Pj47XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mbG9hdGluZyQudmFsdWUuZm9yRWFjaChwYW5lbCA9PiBwYW5lbC5kaXNwb3NlT3ZlcmxheSgpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuQGlmIChsYXlvdXQkIHwgYXN5bmM7IGFzIGxheW91dCkge1xuICAgIDxicy1kb2NrLXBhbmUtcmVuZGVyZXIgW2xheW91dF09XCJsYXlvdXQucm9vdFBhbmVcIj48L2JzLWRvY2stcGFuZS1yZW5kZXJlcj5cbiAgICBAZm9yIChwYW5lIG9mIGxheW91dC5mbG9hdGluZ1BhbmVzOyB0cmFjayBwYW5lKSB7XG4gICAgICAgIEBpZiAocGFuZS5wYW5lKSB7XG4gICAgICAgICAgICA8YnMtZG9jay1wYW5lLXJlbmRlcmVyICNmbG9hdGluZyBbbGF5b3V0XT1cInBhbmVcIj48L2JzLWRvY2stcGFuZS1yZW5kZXJlcj5cbiAgICAgICAgfVxuICAgIH1cbn0iXX0=","import { Injectable } from '@angular/core';\nimport { BsSplitPane } from '../../panes/split-pane';\nimport { BsContentPane } from '../../panes/content-pane';\nimport { BsTabGroupPane } from '../../panes/tab-group-pane';\nimport { BsFloatingPane } from '../../panes/floating-pane';\nimport { BsDocumentHost } from '../../panes/document-host-pane';\nimport * as i0 from \"@angular/core\";\nexport class BsDockService {\n buildTraces(layout) {\n const result = [layout.rootPane, ...layout.floatingPanes].map(pane => this.buildTracesPrivate([pane]));\n // const result = this.buildTracesPrivate([layout.rootPane]);\n return result.flatMap(traceGroup => traceGroup);\n }\n buildTracesPrivate(currentSequence) {\n const children = this.getChildPanes(currentSequence[currentSequence.length - 1]);\n if (children.length === 0) {\n return [{\n finished: true,\n trace: currentSequence\n }];\n }\n else {\n const result = children.map(child => this.buildTracesPrivate([...currentSequence, child]));\n return result.flatMap(r => r);\n }\n }\n getChildPanes(pane) {\n if (pane instanceof BsContentPane) {\n return [];\n }\n else if (pane instanceof BsTabGroupPane) {\n return pane.panes;\n }\n else if (pane instanceof BsSplitPane) {\n return pane.panes;\n }\n else if (pane instanceof BsFloatingPane) {\n return pane.pane ? [pane.pane] : [];\n }\n else if (pane instanceof BsDocumentHost) {\n return pane.rootPane ? [pane.rootPane] : [];\n }\n else {\n return [];\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9kb2NrL3NyYy9zZXJ2aWNlcy9kb2NrL2RvY2suc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBTWhFLE1BQU0sT0FBTyxhQUFhO0lBQ2pCLFdBQVcsQ0FBQyxNQUFvQjtRQUNyQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLDZEQUE2RDtRQUM3RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsZUFBNkI7UUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUM7b0JBQ04sUUFBUSxFQUFFLElBQUk7b0JBQ2QsS0FBSyxFQUFFLGVBQWU7aUJBQ3ZCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFnQjtRQUNwQyxJQUFJLElBQUksWUFBWSxhQUFhLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7YUFBTSxJQUFJLElBQUksWUFBWSxjQUFjLEVBQUUsQ0FBQztZQUMxQyxPQUFzQixJQUFJLENBQUMsS0FBTSxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLElBQUksWUFBWSxXQUFXLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQzthQUFNLElBQUksSUFBSSxZQUFZLGNBQWMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxJQUFJLFlBQVksY0FBYyxFQUFFLENBQUM7WUFDMUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQzs4R0FsQ1UsYUFBYTtrSEFBYixhQUFhLGNBRlosTUFBTTs7MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc0RvY2tQYW5lIH0gZnJvbSAnLi4vLi4vcGFuZXMvZG9jay1wYW5lJztcbmltcG9ydCB7IEJzU3BsaXRQYW5lIH0gZnJvbSAnLi4vLi4vcGFuZXMvc3BsaXQtcGFuZSc7XG5pbXBvcnQgeyBCc0NvbnRlbnRQYW5lIH0gZnJvbSAnLi4vLi4vcGFuZXMvY29udGVudC1wYW5lJztcbmltcG9ydCB7IEJzVGFiR3JvdXBQYW5lIH0gZnJvbSAnLi4vLi4vcGFuZXMvdGFiLWdyb3VwLXBhbmUnO1xuaW1wb3J0IHsgQnNGbG9hdGluZ1BhbmUgfSBmcm9tICcuLi8uLi9wYW5lcy9mbG9hdGluZy1wYW5lJztcbmltcG9ydCB7IEJzRG9jdW1lbnRIb3N0IH0gZnJvbSAnLi4vLi4vcGFuZXMvZG9jdW1lbnQtaG9zdC1wYW5lJztcbmltcG9ydCB7IEJzRG9ja0xheW91dCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZG9jay1sYXlvdXQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCc0RvY2tTZXJ2aWNlIHtcbiAgcHVibGljIGJ1aWxkVHJhY2VzKGxheW91dDogQnNEb2NrTGF5b3V0KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW2xheW91dC5yb290UGFuZSwgLi4ubGF5b3V0LmZsb2F0aW5nUGFuZXNdLm1hcChwYW5lID0+IHRoaXMuYnVpbGRUcmFjZXNQcml2YXRlKFtwYW5lXSkpO1xuICAgIC8vIGNvbnN0IHJlc3VsdCA9IHRoaXMuYnVpbGRUcmFjZXNQcml2YXRlKFtsYXlvdXQucm9vdFBhbmVdKTtcbiAgICByZXR1cm4gcmVzdWx0LmZsYXRNYXAodHJhY2VHcm91cCA9PiB0cmFjZUdyb3VwKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUcmFjZXNQcml2YXRlKGN1cnJlbnRTZXF1ZW5jZTogQnNEb2NrUGFuZVtdKTogUGFuZVRyYWNlUmVzdWx0W10ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZFBhbmVzKGN1cnJlbnRTZXF1ZW5jZVtjdXJyZW50U2VxdWVuY2UubGVuZ3RoIC0gMV0pO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBmaW5pc2hlZDogdHJ1ZSxcbiAgICAgICAgdHJhY2U6IGN1cnJlbnRTZXF1ZW5jZVxuICAgICAgfV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNoaWxkcmVuLm1hcChjaGlsZCA9PiB0aGlzLmJ1aWxkVHJhY2VzUHJpdmF0ZShbLi4uY3VycmVudFNlcXVlbmNlLCBjaGlsZF0pKTtcbiAgICAgIHJldHVybiByZXN1bHQuZmxhdE1hcChyID0+IHIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hpbGRQYW5lcyhwYW5lOiBCc0RvY2tQYW5lKTogQnNEb2NrUGFuZVtdIHtcbiAgICBpZiAocGFuZSBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2UgaWYgKHBhbmUgaW5zdGFuY2VvZiBCc1RhYkdyb3VwUGFuZSkge1xuICAgICAgcmV0dXJuICg8QnNEb2NrUGFuZVtdPnBhbmUucGFuZXMpO1xuICAgIH0gZWxzZSBpZiAocGFuZSBpbnN0YW5jZW9mIEJzU3BsaXRQYW5lKSB7XG4gICAgICByZXR1cm4gcGFuZS5wYW5lcztcbiAgICB9IGVsc2UgaWYgKHBhbmUgaW5zdGFuY2VvZiBCc0Zsb2F0aW5nUGFuZSkge1xuICAgICAgcmV0dXJuIHBhbmUucGFuZSA/IFtwYW5lLnBhbmVdIDogW107XG4gICAgfSBlbHNlIGlmIChwYW5lIGluc3RhbmNlb2YgQnNEb2N1bWVudEhvc3QpIHtcbiAgICAgIHJldHVybiBwYW5lLnJvb3RQYW5lID8gW3BhbmUucm9vdFBhbmVdIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYW5lVHJhY2VSZXN1bHQge1xuICB0cmFjZTogQnNEb2NrUGFuZVtdO1xuICBmaW5pc2hlZDogYm9vbGVhbjtcbn0iXX0=","import { Component, HostBinding, HostListener } from '@angular/core';\nimport { take } from 'rxjs';\nimport { BsSplitPane } from '../panes/split-pane';\nimport { BsContentPane } from '../panes/content-pane';\nimport { BsFloatingPane } from '../panes/floating-pane';\nimport { BsTabGroupPane } from '../panes/tab-group-pane';\nimport { BsDocumentHost } from '../panes/document-host-pane';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../dock-panel/dock-panel.component\";\nimport * as i2 from \"../dock/dock.component\";\nimport * as i3 from \"../services/dock/dock.service\";\nexport class BsDockPanelHeaderComponent {\n constructor(dockPanel, dock, dockService, element, destroy) {\n this.dockPanel = dockPanel;\n this.dock = dock;\n this.dockService = dockService;\n this.element = element;\n this.destroy = destroy;\n this.isMouseDown = false;\n this.isDragging = false;\n this.dBlock = true;\n }\n onMouseDown(ev) {\n ev.preventDefault();\n this.isMouseDown = true;\n }\n onMouseMove(ev) {\n if (this.isMouseDown) {\n if (!this.isDragging) {\n this.isDragging = true;\n this.dock.parentifiedLayout$.pipe(take(1), takeUntilDestroyed(this.destroy)).subscribe((parentifiedLayout) => {\n // this.dock.layout$.pipe(take(1)).subscribe((layout) => {\n const traces = this.dockService.buildTraces(parentifiedLayout);\n console.log('traces', { parentifiedLayout, traces });\n const matching = traces.filter(t => {\n const lastPane = t.trace[t.trace.length - 1];\n // return (lastPane instanceof BsContentPane) && (lastPane.dockPanel === this.dockPanel);\n return (lastPane instanceof BsContentPane) && (lastPane.dockPanel === this.dockPanel);\n });\n console.log('matching', matching);\n if (matching.length !== 1) {\n return;\n }\n // const tabs = matching[0].trace.filter(pane => pane instanceof BsTabGroupPane);\n // const lastTabGroup = tabs[tabs.length - 1];\n // // console.log('last tabgroup', lastTabGroup);\n let tabControlEl = this.element.nativeElement;\n do {\n if (tabControlEl.parentElement) {\n tabControlEl = tabControlEl.parentElement;\n }\n else {\n throw 'No more parents';\n }\n } while (tabControlEl.tagName.toUpperCase() !== 'BS-TAB-CONTROL');\n const coords = {\n width: tabControlEl.clientWidth,\n height: tabControlEl.clientHeight,\n left: ev.clientX - ev.offsetX,\n top: ev.clientY - ev.offsetY,\n };\n // this.dockPanel.headerPortal?.isAttached && this.dockPanel.headerPortal?.detach();\n // this.dockPanel.contentPortal?.isAttached && this.dockPanel.contentPortal?.detach();\n this.removeFromPane(parentifiedLayout.$original.rootPane, this.dockPanel);\n const trace = [...matching[0].trace];\n this.dockPanel.headerPortal?.isAttached && this.dockPanel.headerPortal?.detach();\n this.dockPanel.contentPortal?.isAttached && this.dockPanel.contentPortal?.detach();\n for (let index = trace.length - 1; index >= 0; index--) {\n if (index > 0) {\n this.removeFromPaneBis(trace[index - 1], trace[index]);\n if (!trace[index - 1].isEmpty)\n break;\n }\n else {\n const floatingIndex = parentifiedLayout.floatingPanes.indexOf(trace[0]);\n if (trace[0].isEmpty && (floatingIndex > -1)) {\n parentifiedLayout.$original.floatingPanes.splice(floatingIndex, 1);\n }\n }\n }\n // this.removeFromPane((<any>matching[0].trace[0])['$original'], this.dockPanel);\n const floatingPane = new BsFloatingPane({\n pane: new BsTabGroupPane({\n panes: [\n new BsContentPane({\n dockPanel: this.dockPanel\n })\n ]\n }),\n size: {\n width: coords.width,\n height: coords.height,\n },\n location: {\n x: coords.left,\n y: coords.top,\n }\n });\n this.dragOperation = {\n offsetX: ev.offsetX,\n offsetY: ev.offsetY,\n floatingPane\n };\n parentifiedLayout.$original.floatingPanes.push(floatingPane);\n // debugger;\n setTimeout(() => this.dock.layout$.next(parentifiedLayout.$original), 5);\n // console.log('traces', { traces, matching, dockPanel: this.dockPanel, equals: traces[2].trace[3] });\n // let element: HTMLElement | null = this.element.nativeElement;\n // let tree: HTMLElement[] = [];\n // do {\n // tree.push(element!);\n // element = element!.parentElement;\n // } while (element);\n // const tabControls = tree.filter(el => el.tagName.toUpperCase() === 'BS-TAB-CONTROL');\n // if (tabControls.length > 0) {\n // const coords = {\n // width: tabControls[0].clientWidth,\n // height: tabControls[0].clientHeight,\n // left: ev.clientX - ev.offsetX,\n // top: ev.clientY - ev.offsetY,\n // };\n // this.dockPanel.headerPortal?.isAttached && this.dockPanel.headerPortal?.detach();\n // this.dockPanel.contentPortal?.isAttached && this.dockPanel.contentPortal?.detach();\n // this.removeFromPane(layout.rootPane, this.dockPanel);\n // const floatingPane = new BsFloatingPane({\n // pane: new BsTabGroupPane({\n // panes: [\n // new BsContentPane({\n // dockPanel: this.dockPanel\n // })\n // ]\n // }),\n // size: {\n // width: coords.width,\n // height: coords.height,\n // },\n // location: {\n // x: coords.left,\n // y: coords.top,\n // }\n // });\n // this.dragOperation = {\n // offsetX: ev.offsetX,\n // offsetY: ev.offsetY,\n // floatingPane\n // };\n // layout.floatingPanes.push(floatingPane);\n // this.dock.layout$.next(layout);\n // }\n });\n }\n else {\n if (this.dragOperation) {\n if (this.dragOperation.floatingPane.location) {\n this.dragOperation.floatingPane.location.x = ev.clientX - this.dragOperation.offsetX;\n this.dragOperation.floatingPane.location.y = ev.clientY - this.dragOperation.offsetY;\n }\n // } else {\n // const traces = this.dockService.buildTraces(this.dock.layout);\n // const matchingTrace = traces.filter(trace => {\n // const pane = trace.trace[trace.trace.length - 1];\n // return (pane instanceof BsContentPane) && (pane.dockPanel === this.dockPanel);\n // });\n // console.log('matching', { traces, matchingTrace });\n // // this.dragOperation = {\n // // }\n }\n }\n }\n }\n removeFromPaneBis(host, pane) {\n if (host instanceof BsContentPane) {\n }\n else if (host instanceof BsDocumentHost) {\n // Actually documentHost should never be removed\n }\n else if (host instanceof BsTabGroupPane) {\n if (pane instanceof BsContentPane) {\n const index = host.panes.indexOf(pane);\n host.panes.splice(index, 1);\n }\n }\n else if (host instanceof BsSplitPane) {\n const index = host.panes.indexOf(pane);\n host.panes.splice(index, 1);\n }\n else if (host instanceof BsFloatingPane) {\n }\n else {\n throw 'Unknown pane type';\n }\n }\n removeFromPane(host, panel /*, parents: BsDockPane[] */) {\n if (host instanceof BsContentPane) {\n return { paneRemoved: false, hostIsEmpty: false };\n }\n else if (host instanceof BsDocumentHost) {\n // Actually documentHost should never be removed\n if (!host.rootPane) {\n return { paneRemoved: false, hostIsEmpty: true };\n }\n const result = this.removeFromPane(host.rootPane, panel);\n return { paneRemoved: result.paneRemoved, hostIsEmpty: result.hostIsEmpty };\n }\n else if (host instanceof BsTabGroupPane) {\n const matching = host.panes.filter(p => p.dockPanel === panel);\n if (matching.length > 0) {\n host.panes.splice(host.panes.findIndex(p => p.dockPanel === panel), 1);\n return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };\n }\n else {\n // ATM. all panes are ContentPanes anyway.\n // So unless you'd want to have splitters inside the tabs,\n // This code will not be hit.\n // const result = host.panes\n // .map(parentPane => this.removeFromPane(parentPane, panel))\n // .filter(r => r.paneRemoved);\n //\n // if (result.length > 0) {\n // return { paneRemoved: true, hostIsEmpty: }\n // }\n return { paneRemoved: false, hostIsEmpty: host.panes.length === 0 };\n }\n }\n else if (host instanceof BsSplitPane) {\n const matching = host.panes\n .filter(p => p instanceof BsContentPane)\n .map(p => p)\n .filter(p => p.dockPanel === panel);\n if (matching.length > 0) {\n host.panes.splice(host.panes.findIndex(p => (p instanceof BsContentPane) && matching.includes(p)), 1);\n // TODO: Remove splitter if only 1 pane left?\n return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };\n }\n else {\n for (let splitPane of host.panes) {\n const result = this.removeFromPane(splitPane, panel);\n if (result.paneRemoved && result.hostIsEmpty) {\n // splitPane is empty now, so we can remove it from this splitter\n host.panes.splice(host.panes.indexOf(splitPane), 1);\n return { paneRemoved: true, hostIsEmpty: host.panes.length === 0 };\n }\n }\n }\n return { paneRemoved: false, hostIsEmpty: host.panes.length === 0 };\n }\n else {\n throw 'unknown host type';\n }\n }\n onMouseUp(ev) {\n this.isMouseDown = false;\n this.isDragging = false;\n this.dragOperation = undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPanelHeaderComponent, deps: [{ token: i1.BsDockPanelComponent }, { token: i2.BsDockComponent }, { token: i3.BsDockService }, { token: i0.ElementRef }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.7\", type: BsDockPanelHeaderComponent, isStandalone: false, selector: \"bs-dock-panel-header\", host: { listeners: { \"mousedown\": \"onMouseDown($event)\", \"document:mousemove\": \"onMouseMove($event)\", \"document:mouseup\": \"onMouseUp($event)\" }, properties: { \"class.d-block\": \"this.dBlock\" } }, ngImport: i0, template: \"<ng-content></ng-content>\", styles: [\":host{padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);margin:calc(-1 * var(--bs-nav-link-padding-y)) calc(-1 * var(--bs-nav-link-padding-x))}\\n\"] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPanelHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'bs-dock-panel-header', standalone: false, template: \"<ng-content></ng-content>\", styles: [\":host{padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);margin:calc(-1 * var(--bs-nav-link-padding-y)) calc(-1 * var(--bs-nav-link-padding-x))}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.BsDockPanelComponent }, { type: i2.BsDockComponent }, { type: i3.BsDockService }, { type: i0.ElementRef }, { type: i0.DestroyRef }], propDecorators: { onMouseDown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], onMouseMove: [{\n type: HostListener,\n args: ['document:mousemove', ['$event']]\n }], onMouseUp: [{\n type: HostListener,\n args: ['document:mouseup', ['$event']]\n }], dBlock: [{\n type: HostBinding,\n args: ['class.d-block']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1wYW5lbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9kb2NrL3NyYy9kb2NrLXBhbmVsLWhlYWRlci9kb2NrLXBhbmVsLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2stcGFuZWwtaGVhZGVyL2RvY2stcGFuZWwtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTBCLFdBQVcsRUFBRSxZQUFZLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUk3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFRaEUsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFvQixTQUErQixFQUFVLElBQXFCLEVBQVUsV0FBMEIsRUFBVSxPQUFnQyxFQUFVLE9BQW1CO1FBQXpLLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQVUsWUFBTyxHQUFQLE9B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QzVCLENBQUM7SUFDSCxDQUFDO0lBRTZDLFNBQVMsQ0FBQyxFQUFTO1FBQy9ELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7OEdBeFFVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLG9SQ3ZCdkMsMkJBQXlCOzsyRkR1QlosMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHNCQUFzQixjQUdwQixLQUFLO3FNQVFzQixXQUFXO3NCQUFqRCxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFLVyxXQUFXO3NCQUExRCxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXlQQSxTQUFTO3NCQUF0RCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1kLE1BQU07c0JBQW5DLFdBQVc7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPcHRpb25hbCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQnNUYWJDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnQG1pbnRwbGF5ZXIvbmctYm9vdHN0cmFwL3RhYi1jb250cm9sJztcbmltcG9ydCB7IFBhcmVudGlmaWVkIH0gZnJvbSAnQG1pbnRwbGF5ZXIvcGFyZW50aWZ5JztcbmltcG9ydCB7IEJzRG9ja1BhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9jay1wYW5lbC9kb2NrLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc0RvY2tDb21wb25lbnQgfSBmcm9tICcuLi9kb2NrL2RvY2suY29tcG9uZW50JztcbmltcG9ydCB7IEJzRG9ja1BhbmUgfSBmcm9tICcuLi9wYW5lcy9kb2NrLXBhbmUnO1xuaW1wb3J0IHsgQnNTcGxpdFBhbmUgfSBmcm9tICcuLi9wYW5lcy9zcGxpdC1wYW5lJztcbmltcG9ydCB7IEJzQ29udGVudFBhbmUgfSBmcm9tICcuLi9wYW5lcy9jb250ZW50LXBhbmUnO1xuaW1wb3J0IHsgQnNGbG9hdGluZ1BhbmUgfSBmcm9tICcuLi9wYW5lcy9mbG9hdGluZy1wYW5lJztcbmltcG9ydCB7IEJzVGFiR3JvdXBQYW5lIH0gZnJvbSAnLi4vcGFuZXMvdGFiLWdyb3VwLXBhbmUnO1xuaW1wb3J0IHsgQnNEb2N1bWVudEhvc3QgfSBmcm9tICcuLi9wYW5lcy9kb2N1bWVudC1ob3N0LXBhbmUnO1xuaW1wb3J0IHsgUmVtb3ZlRnJvbVBhbmVSZXN1bHQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlbW92ZS1mcm9tLXBhbmUtcmVzdWx0JztcbmltcG9ydCB7IERyYWdPcGVyYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RyYWctb3BlcmF0aW9uJztcbmltcG9ydCB7IEJzRG9ja1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kb2NrL2RvY2suc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLWRvY2stcGFuZWwtaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY2stcGFuZWwtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9jay1wYW5lbC1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEJzRG9ja1BhbmVsSGVhZGVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NrUGFuZWw6IEJzRG9ja1BhbmVsQ29tcG9uZW50LCBwcml2YXRlIGRvY2s6IEJzRG9ja0NvbXBvbmVudCwgcHJpdmF0ZSBkb2NrU2VydmljZTogQnNEb2NrU2VydmljZSwgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSBkZXN0cm95OiBEZXN0cm95UmVmKSB7fVxuXG4gIGlzTW91c2VEb3duID0gZmFsc2U7XG4gIGRyYWdPcGVyYXRpb24/OiBEcmFnT3BlcmF0aW9uO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pIG9uTW91c2VEb3duKGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzTW91c2VEb3duID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pIG9uTW91c2VNb3ZlKGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNNb3VzZURvd24pIHtcbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgXG4gICAgICAgIHRoaXMuZG9jay5wYXJlbnRpZmllZExheW91dCQucGlwZSh0YWtlKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSkuc3Vic2NyaWJlKChwYXJlbnRpZmllZExheW91dCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmRvY2subGF5b3V0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgobGF5b3V0KSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJhY2VzID0gdGhpcy5kb2NrU2VydmljZS5idWlsZFRyYWNlcyhwYXJlbnRpZmllZExheW91dCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3RyYWNlcycsIHtwYXJlbnRpZmllZExheW91dCwgdHJhY2VzfSk7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmcgPSB0cmFjZXMuZmlsdGVyKHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFzdFBhbmUgPSB0LnRyYWNlW3QudHJhY2UubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAvLyByZXR1cm4gKGxhc3RQYW5lIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkgJiYgKGxhc3RQYW5lLmRvY2tQYW5lbCA9PT0gdGhpcy5kb2NrUGFuZWwpO1xuICAgICAgICAgICAgcmV0dXJuIChsYXN0UGFuZSBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpICYmIChsYXN0UGFuZS5kb2NrUGFuZWwgPT09IHRoaXMuZG9ja1BhbmVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnbWF0Y2hpbmcnLCBtYXRjaGluZyk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbnN0IHRhYnMgPSBtYXRjaGluZ1swXS50cmFjZS5maWx0ZXIocGFuZSA9PiBwYW5lIGluc3RhbmNlb2YgQnNUYWJHcm91cFBhbmUpO1xuICAgICAgICAgIC8vIGNvbnN0IGxhc3RUYWJHcm91cCA9IHRhYnNbdGFicy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAvLyAvLyBjb25zb2xlLmxvZygnbGFzdCB0YWJncm91cCcsIGxhc3RUYWJHcm91cCk7XG5cbiAgICAgICAgICBsZXQgdGFiQ29udHJvbEVsID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRhYkNvbnRyb2xFbC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgIHRhYkNvbnRyb2xFbCA9IHRhYkNvbnRyb2xFbCEucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93ICdObyBtb3JlIHBhcmVudHMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gd2hpbGUgKHRhYkNvbnRyb2xFbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCUy1UQUItQ09OVFJPTCcpO1xuXG4gICAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRhYkNvbnRyb2xFbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGFiQ29udHJvbEVsLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGV2LmNsaWVudFggLSBldi5vZmZzZXRYLFxuICAgICAgICAgICAgdG9wOiBldi5jbGllbnRZIC0gZXYub2Zmc2V0WSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gdGhpcy5kb2NrUGFuZWwuaGVhZGVyUG9ydGFsPy5pc0F0dGFjaGVkICYmIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgLy8gdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5jb250ZW50UG9ydGFsPy5kZXRhY2goKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21QYW5lKHBhcmVudGlmaWVkTGF5b3V0LiRvcmlnaW5hbC5yb290UGFuZSwgdGhpcy5kb2NrUGFuZWwpO1xuXG4gICAgICAgICAgY29uc3QgdHJhY2UgPSBbLi4ubWF0Y2hpbmdbMF0udHJhY2VdO1xuXG4gICAgICAgICAgdGhpcy5kb2NrUGFuZWwuaGVhZGVyUG9ydGFsPy5pc0F0dGFjaGVkICYmIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5jb250ZW50UG9ydGFsPy5kZXRhY2goKTtcbiAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHRyYWNlLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tUGFuZUJpcyh0cmFjZVtpbmRleCAtIDFdLCB0cmFjZVtpbmRleF0pO1xuICAgICAgICAgICAgICBpZiAoIXRyYWNlW2luZGV4IC0gMV0uaXNFbXB0eSkgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBmbG9hdGluZ0luZGV4ID0gcGFyZW50aWZpZWRMYXlvdXQuZmxvYXRpbmdQYW5lcy5pbmRleE9mKHRyYWNlWzBdKTtcbiAgICAgICAgICAgICAgaWYgKHRyYWNlWzBdLmlzRW1wdHkgJiYgKGZsb2F0aW5nSW5kZXggPiAtMSkpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRpZmllZExheW91dC4kb3JpZ2luYWwuZmxvYXRpbmdQYW5lcy5zcGxpY2UoZmxvYXRpbmdJbmRleCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgLy8gdGhpcy5yZW1vdmVGcm9tUGFuZSgoPGFueT5tYXRjaGluZ1swXS50cmFjZVswXSlbJyRvcmlnaW5hbCddLCB0aGlzLmRvY2tQYW5lbCk7XG5cbiAgICAgICAgICBjb25zdCBmbG9hdGluZ1BhbmUgPSBuZXcgQnNGbG9hdGluZ1BhbmUoe1xuICAgICAgICAgICAgcGFuZTogbmV3IEJzVGFiR3JvdXBQYW5lKHtcbiAgICAgICAgICAgICAgcGFuZXM6IFtcbiAgICAgICAgICAgICAgICBuZXcgQnNDb250ZW50UGFuZSh7XG4gICAgICAgICAgICAgICAgICBkb2NrUGFuZWw6IHRoaXMuZG9ja1BhbmVsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICAgIHdpZHRoOiBjb29yZHMud2lkdGgsXG4gICAgICAgICAgICAgIGhlaWdodDogY29vcmRzLmhlaWdodCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgICAgICB4OiBjb29yZHMubGVmdCxcbiAgICAgICAgICAgICAgeTogY29vcmRzLnRvcCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmRyYWdPcGVyYXRpb24gPSB7XG4gICAgICAgICAgICBvZmZzZXRYOiBldi5vZmZzZXRYLFxuICAgICAgICAgICAgb2Zmc2V0WTogZXYub2Zmc2V0WSxcbiAgICAgICAgICAgIGZsb2F0aW5nUGFuZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcGFyZW50aWZpZWRMYXlvdXQuJG9yaWdpbmFsLmZsb2F0aW5nUGFuZXMucHVzaChmbG9hdGluZ1BhbmUpO1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kb2NrLmxheW91dCQubmV4dChwYXJlbnRpZmllZExheW91dC4kb3JpZ2luYWwpLCA1KTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygndHJhY2VzJywgeyB0cmFjZXMsIG1hdGNoaW5nLCBkb2NrUGFuZWw6IHRoaXMuZG9ja1BhbmVsLCBlcXVhbHM6IHRyYWNlc1syXS50cmFjZVszXSB9KTtcblxuICAgICAgICAgIC8vICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgLy8gICAgIGxldCB0cmVlOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgICAgICAgLy8gICAgIGRvIHtcbiAgICAgICAgICAvLyAgICAgICB0cmVlLnB1c2goZWxlbWVudCEpO1xuICAgICAgICAgIC8vICAgICAgIGVsZW1lbnQgPSBlbGVtZW50IS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIC8vICAgICB9IHdoaWxlIChlbGVtZW50KTtcblxuICAgICAgICAgIC8vICAgICBjb25zdCB0YWJDb250cm9scyA9IHRyZWUuZmlsdGVyKGVsID0+IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JTLVRBQi1DT05UUk9MJyk7XG4gICAgICAgICAgLy8gICAgIGlmICh0YWJDb250cm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIC8vICAgICAgICAgd2lkdGg6IHRhYkNvbnRyb2xzWzBdLmNsaWVudFdpZHRoLFxuICAgICAgICAgIC8vICAgICAgICAgaGVpZ2h0OiB0YWJDb250cm9sc1swXS5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgLy8gICAgICAgICBsZWZ0OiBldi5jbGllbnRYIC0gZXYub2Zmc2V0WCxcbiAgICAgICAgICAvLyAgICAgICAgIHRvcDogZXYuY2xpZW50WSAtIGV2Lm9mZnNldFksXG4gICAgICAgICAgLy8gICAgICAgfTtcblxuICAgICAgICAgIC8vICAgICAgIHRoaXMuZG9ja1BhbmVsLmhlYWRlclBvcnRhbD8uaXNBdHRhY2hlZCAmJiB0aGlzLmRvY2tQYW5lbC5oZWFkZXJQb3J0YWw/LmRldGFjaCgpO1xuICAgICAgICAgIC8vICAgICAgIHRoaXMuZG9ja1BhbmVsLmNvbnRlbnRQb3J0YWw/LmlzQXR0YWNoZWQgJiYgdGhpcy5kb2NrUGFuZWwuY29udGVudFBvcnRhbD8uZGV0YWNoKCk7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy5yZW1vdmVGcm9tUGFuZShsYXlvdXQucm9vdFBhbmUsIHRoaXMuZG9ja1BhbmVsKTtcblxuICAgICAgICAgIC8vICAgICAgIGNvbnN0IGZsb2F0aW5nUGFuZSA9IG5ldyBCc0Zsb2F0aW5nUGFuZSh7XG4gICAgICAgICAgLy8gICAgICAgICBwYW5lOiBuZXcgQnNUYWJHcm91cFBhbmUoe1xuICAgICAgICAgIC8vICAgICAgICAgICBwYW5lczogW1xuICAgICAgICAgIC8vICAgICAgICAgICAgIG5ldyBCc0NvbnRlbnRQYW5lKHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIGRvY2tQYW5lbDogdGhpcy5kb2NrUGFuZWxcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9KVxuICAgICAgICAgIC8vICAgICAgICAgICBdXG4gICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAvLyAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgd2lkdGg6IGNvb3Jkcy53aWR0aCxcbiAgICAgICAgICAvLyAgICAgICAgICAgaGVpZ2h0OiBjb29yZHMuaGVpZ2h0LFxuICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAvLyAgICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgLy8gICAgICAgICAgIHg6IGNvb3Jkcy5sZWZ0LFxuICAgICAgICAgIC8vICAgICAgICAgICB5OiBjb29yZHMudG9wLFxuICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgIC8vICAgICAgIHRoaXMuZHJhZ09wZXJhdGlvbiA9IHtcbiAgICAgICAgICAvLyAgICAgICAgIG9mZnNldFg6IGV2Lm9mZnNldFgsXG4gICAgICAgICAgLy8gICAgICAgICBvZmZzZXRZOiBldi5vZmZzZXRZLFxuICAgICAgICAgIC8vICAgICAgICAgZmxvYXRpbmdQYW5lXG4gICAgICAgICAgLy8gICAgICAgfTtcblxuICAgICAgICAgIC8vICAgICAgIGxheW91dC5mbG9hdGluZ1BhbmVzLnB1c2goZmxvYXRpbmdQYW5lKTtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLmRvY2subGF5b3V0JC5uZXh0KGxheW91dCk7XG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kcmFnT3BlcmF0aW9uKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ09wZXJhdGlvbi5mbG9hdGluZ1BhbmUubG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ09wZXJhdGlvbi5mbG9hdGluZ1BhbmUubG9jYXRpb24ueCA9IGV2LmNsaWVudFggLSB0aGlzLmRyYWdPcGVyYXRpb24ub2Zmc2V0WDtcbiAgICAgICAgICAgIHRoaXMuZHJhZ09wZXJhdGlvbi5mbG9hdGluZ1BhbmUubG9jYXRpb24ueSA9IGV2LmNsaWVudFkgLSB0aGlzLmRyYWdPcGVyYXRpb24ub2Zmc2V0WTtcbiAgICAgICAgICB9XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgY29uc3QgdHJhY2VzID0gdGhpcy5kb2NrU2VydmljZS5idWlsZFRyYWNlcyh0aGlzLmRvY2subGF5b3V0KTtcbiAgICAgIC8vICAgICBjb25zdCBtYXRjaGluZ1RyYWNlID0gdHJhY2VzLmZpbHRlcih0cmFjZSA9PiB7XG4gICAgICAvLyAgICAgICBjb25zdCBwYW5lID0gdHJhY2UudHJhY2VbdHJhY2UudHJhY2UubGVuZ3RoIC0gMV07XG4gICAgICAvLyAgICAgICByZXR1cm4gKHBhbmUgaW5zdGFuY2VvZiBCc0NvbnRlbnRQYW5lKSAmJiAocGFuZS5kb2NrUGFuZWwgPT09IHRoaXMuZG9ja1BhbmVsKTtcbiAgICAgIC8vICAgICB9KTtcblxuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCdtYXRjaGluZycsIHsgdHJhY2VzLCBtYXRjaGluZ1RyYWNlIH0pO1xuICAgICAgLy8gICAgIC8vIHRoaXMuZHJhZ09wZXJhdGlvbiA9IHtcbiAgICAgICAgICAgIFxuICAgICAgLy8gICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZyb21QYW5lQmlzKGhvc3Q6IEJzRG9ja1BhbmUsIHBhbmU6IEJzRG9ja1BhbmUpIHtcbiAgICBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzQ29udGVudFBhbmUpIHtcbiAgICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc0RvY3VtZW50SG9zdCkge1xuICAgICAgLy8gQWN0dWFsbHkgZG9jdW1lbnRIb3N0IHNob3VsZCBuZXZlciBiZSByZW1vdmVkXG4gICAgfSBlbHNlIGlmIChob3N0IGluc3RhbmNlb2YgQnNUYWJHcm91cFBhbmUpIHtcbiAgICAgIGlmIChwYW5lIGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGhvc3QucGFuZXMuaW5kZXhPZihwYW5lKTtcbiAgICAgICAgaG9zdC5wYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzU3BsaXRQYW5lKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGhvc3QucGFuZXMuaW5kZXhPZihwYW5lKTtcbiAgICAgIGhvc3QucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc0Zsb2F0aW5nUGFuZSkge1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyAnVW5rbm93biBwYW5lIHR5cGUnO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZyb21QYW5lKGhvc3Q6IEJzRG9ja1BhbmUsIHBhbmVsOiBCc0RvY2tQYW5lbENvbXBvbmVudCAvKiwgcGFyZW50czogQnNEb2NrUGFuZVtdICovKTogUmVtb3ZlRnJvbVBhbmVSZXN1bHQge1xuICAgIGlmIChob3N0IGluc3RhbmNlb2YgQnNDb250ZW50UGFuZSkge1xuICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IGZhbHNlLCBob3N0SXNFbXB0eTogZmFsc2UgfTtcbiAgICB9IGVsc2UgaWYgKGhvc3QgaW5zdGFuY2VvZiBCc0RvY3VtZW50SG9zdCkge1xuICAgICAgLy8gQWN0dWFsbHkgZG9jdW1lbnRIb3N0IHNob3VsZCBuZXZlciBiZSByZW1vdmVkXG5cbiAgICAgIGlmICghaG9zdC5yb290UGFuZSkge1xuICAgICAgICByZXR1cm4geyBwYW5lUmVtb3ZlZDogZmFsc2UsIGhvc3RJc0VtcHR5OiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVtb3ZlRnJvbVBhbmUoaG9zdC5yb290UGFuZSwgcGFuZWwpO1xuICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHJlc3VsdC5wYW5lUmVtb3ZlZCwgaG9zdElzRW1wdHk6IHJlc3VsdC5ob3N0SXNFbXB0eSB9O1xuXG4gICAgfSBlbHNlIGlmIChob3N0IGluc3RhbmNlb2YgQnNUYWJHcm91cFBhbmUpIHtcblxuXG5cbiAgICAgIGNvbnN0IG1hdGNoaW5nID0gaG9zdC5wYW5lcy5maWx0ZXIocCA9PiBwLmRvY2tQYW5lbCA9PT0gcGFuZWwpO1xuICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaG9zdC5wYW5lcy5zcGxpY2UoaG9zdC5wYW5lcy5maW5kSW5kZXgocCA9PiBwLmRvY2tQYW5lbCA9PT0gcGFuZWwpLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHRydWUsIGhvc3RJc0VtcHR5OiBob3N0LnBhbmVzLmxlbmd0aCA9PT0gMCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQVRNLiBhbGwgcGFuZXMgYXJlIENvbnRlbnRQYW5lcyBhbnl3YXkuXG4gICAgICAgIC8vIFNvIHVubGVzcyB5b3UnZCB3YW50IHRvIGhhdmUgc3BsaXR0ZXJzIGluc2lkZSB0aGUgdGFicyxcbiAgICAgICAgLy8gVGhpcyBjb2RlIHdpbGwgbm90IGJlIGhpdC5cblxuICAgICAgICAvLyBjb25zdCByZXN1bHQgPSBob3N0LnBhbmVzXG4gICAgICAgIC8vICAgLm1hcChwYXJlbnRQYW5lID0+IHRoaXMucmVtb3ZlRnJvbVBhbmUocGFyZW50UGFuZSwgcGFuZWwpKVxuICAgICAgICAvLyAgIC5maWx0ZXIociA9PiByLnBhbmVSZW1vdmVkKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHRydWUsIGhvc3RJc0VtcHR5OiB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IGZhbHNlLCBob3N0SXNFbXB0eTogaG9zdC5wYW5lcy5sZW5ndGggPT09IDAgfTtcbiAgICAgIH1cblxuXG5cblxuICAgIH0gZWxzZSBpZiAoaG9zdCBpbnN0YW5jZW9mIEJzU3BsaXRQYW5lKSB7XG4gICAgICBjb25zdCBtYXRjaGluZyA9IGhvc3QucGFuZXNcbiAgICAgICAgLmZpbHRlcihwID0+IHAgaW5zdGFuY2VvZiBCc0NvbnRlbnRQYW5lKVxuICAgICAgICAubWFwKHAgPT4gPEJzQ29udGVudFBhbmU+cClcbiAgICAgICAgLmZpbHRlcihwID0+IHAuZG9ja1BhbmVsID09PSBwYW5lbCk7XG4gICAgICBcbiAgICAgIGlmIChtYXRjaGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGhvc3QucGFuZXMuc3BsaWNlKGhvc3QucGFuZXMuZmluZEluZGV4KHAgPT4gKHAgaW5zdGFuY2VvZiBCc0NvbnRlbnRQYW5lKSAmJiBtYXRjaGluZy5pbmNsdWRlcyhwKSksIDEpO1xuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBzcGxpdHRlciBpZiBvbmx5IDEgcGFuZSBsZWZ0P1xuICAgICAgICByZXR1cm4geyBwYW5lUmVtb3ZlZDogdHJ1ZSwgaG9zdElzRW1wdHk6IGhvc3QucGFuZXMubGVuZ3RoID09PSAwIH07XG4gICAgICB9IGVsc2Uge1xuXG5cbiAgICAgICAgZm9yIChsZXQgc3BsaXRQYW5lIG9mIGhvc3QucGFuZXMpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlbW92ZUZyb21QYW5lKHNwbGl0UGFuZSwgcGFuZWwpO1xuICAgICAgICAgIGlmIChyZXN1bHQucGFuZVJlbW92ZWQgJiYgcmVzdWx0Lmhvc3RJc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBzcGxpdFBhbmUgaXMgZW1wdHkgbm93LCBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhpcyBzcGxpdHRlclxuICAgICAgICAgICAgaG9zdC5wYW5lcy5zcGxpY2UoaG9zdC5wYW5lcy5pbmRleE9mKHNwbGl0UGFuZSksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHsgcGFuZVJlbW92ZWQ6IHRydWUsIGhvc3RJc0VtcHR5OiBob3N0LnBhbmVzLmxlbmd0aCA9PT0gMCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBwYW5lUmVtb3ZlZDogZmFsc2UsIGhvc3RJc0VtcHR5OiBob3N0LnBhbmVzLmxlbmd0aCA9PT0gMCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyAndW5rbm93biBob3N0IHR5cGUnO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNldXAnLCBbJyRldmVudCddKSBvbk1vdXNlVXAoZXY6IEV2ZW50KSB7XG4gICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZHJhZ09wZXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZC1ibG9jaycpIGRCbG9jayA9IHRydWU7XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+Il19","import { NgModule } from '@angular/core';\nimport { AsyncPipe } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { BsCardModule } from '@mintplayer/ng-bootstrap/card';\nimport { BsSplitterModule } from '@mintplayer/ng-bootstrap/splitter';\nimport { BsResizableModule } from '@mintplayer/ng-bootstrap/resizable';\nimport { BsTabControlModule } from '@mintplayer/ng-bootstrap/tab-control';\nimport { BsInstanceOfModule } from '@mintplayer/ng-bootstrap/instance-of';\nimport { BsDockComponent } from './dock/dock.component';\nimport { BsDockPanelComponent } from './dock-panel/dock-panel.component';\nimport { BsDockPanelHeaderComponent } from './dock-panel-header/dock-panel-header.component';\nimport { BsDockPaneRendererComponent } from './dock-pane-renderer/dock-pane-renderer.component';\nimport * as i0 from \"@angular/core\";\nexport class BsDockModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, declarations: [BsDockComponent,\n BsDockPanelComponent,\n BsDockPanelHeaderComponent,\n BsDockPaneRendererComponent], imports: [AsyncPipe,\n PortalModule,\n BsCardModule,\n BsInstanceOfModule,\n BsSplitterModule,\n BsTabControlModule,\n BsResizableModule], exports: [BsDockComponent,\n BsDockPanelComponent,\n BsDockPanelHeaderComponent,\n BsDockPaneRendererComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, imports: [PortalModule,\n BsCardModule,\n BsInstanceOfModule,\n BsSplitterModule,\n BsTabControlModule,\n BsResizableModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n BsDockComponent,\n BsDockPanelComponent,\n BsDockPanelHeaderComponent,\n BsDockPaneRendererComponent\n ],\n imports: [\n AsyncPipe,\n PortalModule,\n BsCardModule,\n BsInstanceOfModule,\n BsSplitterModule,\n BsTabControlModule,\n BsResizableModule\n ],\n exports: [\n BsDockComponent,\n BsDockPanelComponent,\n BsDockPanelHeaderComponent,\n BsDockPaneRendererComponent\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2RvY2subW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQXlCaEcsTUFBTSxPQUFPLFlBQVk7OEdBQVosWUFBWTsrR0FBWixZQUFZLGlCQXJCckIsZUFBZTtZQUNmLG9CQUFvQjtZQUNwQiwwQkFBMEI7WUFDMUIsMkJBQTJCLGFBRzNCLFNBQVM7WUFDVCxZQUFZO1lBQ1osWUFBWTtZQUNaLGtCQUFrQjtZQUNsQixnQkFBZ0I7WUFDaEIsa0JBQWtCO1lBQ2xCLGlCQUFpQixhQUdqQixlQUFlO1lBQ2Ysb0JBQW9CO1lBQ3BCLDBCQUEwQjtZQUMxQiwyQkFBMkI7K0dBR2xCLFlBQVksWUFkckIsWUFBWTtZQUNaLFlBQVk7WUFDWixrQkFBa0I7WUFDbEIsZ0JBQWdCO1lBQ2hCLGtCQUFrQjtZQUNsQixpQkFBaUI7OzJGQVNSLFlBQVk7a0JBdkJ4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQiwyQkFBMkI7cUJBQzVCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixpQkFBaUI7cUJBQ2xCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQiwyQkFBMkI7cUJBQzVCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEJzQ2FyZE1vZHVsZSB9IGZyb20gJ0BtaW50cGxheWVyL25nLWJvb3RzdHJhcC9jYXJkJztcbmltcG9ydCB7IEJzU3BsaXR0ZXJNb2R1bGUgfSBmcm9tICdAbWludHBsYXllci9uZy1ib290c3RyYXAvc3BsaXR0ZXInO1xuaW1wb3J0IHsgQnNSZXNpemFibGVNb2R1bGUgfSBmcm9tICdAbWludHBsYXllci9uZy1ib290c3RyYXAvcmVzaXphYmxlJztcbmltcG9ydCB7IEJzVGFiQ29udHJvbE1vZHVsZSB9IGZyb20gJ0BtaW50cGxheWVyL25nLWJvb3RzdHJhcC90YWItY29udHJvbCc7XG5pbXBvcnQgeyBCc0luc3RhbmNlT2ZNb2R1bGUgfSBmcm9tICdAbWludHBsYXllci9uZy1ib290c3RyYXAvaW5zdGFuY2Utb2YnO1xuaW1wb3J0IHsgQnNEb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9kb2NrL2RvY2suY29tcG9uZW50JztcbmltcG9ydCB7IEJzRG9ja1BhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi9kb2NrLXBhbmVsL2RvY2stcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEJzRG9ja1BhbmVsSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9kb2NrLXBhbmVsLWhlYWRlci9kb2NrLXBhbmVsLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNEb2NrUGFuZVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9kb2NrLXBhbmUtcmVuZGVyZXIvZG9jay1wYW5lLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEJzRG9ja0NvbXBvbmVudCxcbiAgICBCc0RvY2tQYW5lbENvbXBvbmVudCxcbiAgICBCc0RvY2tQYW5lbEhlYWRlckNvbXBvbmVudCxcbiAgICBCc0RvY2tQYW5lUmVuZGVyZXJDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBQb3J0YWxNb2R1bGUsXG4gICAgQnNDYXJkTW9kdWxlLFxuICAgIEJzSW5zdGFuY2VPZk1vZHVsZSxcbiAgICBCc1NwbGl0dGVyTW9kdWxlLFxuICAgIEJzVGFiQ29udHJvbE1vZHVsZSxcbiAgICBCc1Jlc2l6YWJsZU1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQnNEb2NrQ29tcG9uZW50LFxuICAgIEJzRG9ja1BhbmVsQ29tcG9uZW50LFxuICAgIEJzRG9ja1BhbmVsSGVhZGVyQ29tcG9uZW50LFxuICAgIEJzRG9ja1BhbmVSZW5kZXJlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJzRG9ja01vZHVsZSB7IH1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWludHBsYXllci1uZy1ib290c3RyYXAtZG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9taW50cGxheWVyLW5nLWJvb3RzdHJhcC1kb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.BsDockPaneRendererComponent","i2","i1.BsDockPanelComponent","i2.BsDockComponent","i3.BsDockService"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE;AACzB;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAC3E,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;AAC7E;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACtL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,wOAAwO,EAAE,MAAM,EAAE,CAAC,0KAA0K,CAAC,EAAE,CAAC,CAAC;AACr1B;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,wOAAwO,EAAE,MAAM,EAAE,CAAC,0KAA0K,CAAC,EAAE;AAC7e,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,CAAC;AAC9C,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,gBAAgB;AACvC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACzBZ,MAAM,UAAU,CAAC;AACxB;;ACAO,MAAM,cAAc,SAAS,UAAU,CAAC;AAC/C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,EAAE;AACf,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AACtC;AACA;;ACTO,MAAM,cAAc,SAAS,UAAU,CAAC;AAC/C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,EAAE;AACf,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI;AAC7C;AACA;;ACRO,MAAM,aAAa,SAAS,UAAU,CAAC;AAC9C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,EAAE;AACf,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,KAAK;AACpB;AACA;;ACRO,MAAM,cAAc,SAAS,UAAU,CAAC;AAC/C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,EAAE;AACf,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI;AACzC;AACA;;ACRO,MAAM,WAAW,SAAS,UAAU,CAAC;AAC5C,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,KAAK,EAAE;AACf,QAAQ,IAAI,CAAC,WAAW,GAAG,YAAY;AACvC,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE;AACvB,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC;AACA,IAAI,IAAI,OAAO,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AACtC;AACA;;ACXU,IAAC;AACX,CAAC,UAAU,SAAS,EAAE;AACtB,IAAI,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc;AAC7D,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW;AACvD,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa;AAC3D,IAAI,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc;AAC7D,CAAC,EAAE,SAAS,KAAK,SAAS,GAAG,EAAE,CAAC,CAAC;;ACW1B,MAAM,2BAA2B,CAAC;AACzC,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE;AAClC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;AAClC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,cAAc;AAChD,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc;AAC5C,QAAQ,IAAI,CAAC,cAAc,GAAG,WAAW;AACzC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,aAAa;AAC9C,QAAQ,IAAI,CAAC,kBAAkB,GAAG,cAAc;AAChD;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC;AAChD,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC;AAC5C;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;AACjC;AACA,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACzD,YAAY,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACrD,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAChC,YAAY,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACrC,YAAY,IAAI,CAAC,UAAU,GAAG,SAAS;AACvC;AACA;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC5O,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,o2DAAo2D,EAAE,MAAM,EAAE,CAAC,oGAAoG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,yBAAyB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,4BAA4B,EAAE,QAAQ,EAAE,uBAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACpgH;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,UAAU,EAAE,CAAC;AACrI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,o2DAAo2D,EAAE,MAAM,EAAE,CAAC,oGAAoG,CAAC,EAAE;AAC3iE,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC;AAC9G,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;AC5CZ,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;AAC9C;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI;AACpC,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC;AAC3B,QAAQ,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE;AACzC,QAAQ,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;AAC5C,QAAQ,OAAO,CAAC,QAAQ,GAAG,IAAI;AAC/B,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC;AAC3C,YAAY,QAAQ,EAAE,OAAO;AAC7B,YAAY,aAAa,EAAE;AAC3B,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAChD,aAAa,SAAS,CAAC,CAAC,QAAQ,KAAK;AACrC,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;AAC9D,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI;AAClE,YAAY,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI;AAChD;AACA,YAAY,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAC/G;AACA,YAAY,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACtE,YAAY,OAAO,KAAK,CAAC,MAAM;AAC/B,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AACjF;AACA,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC1C;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;AACjC;AACA,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC;AACA,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE;AAC7B,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC5C;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AACrE;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACjL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,iVAAiV,EAAE,MAAM,EAAE,CAAC,8LAA8L,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,2BAA8B,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAEC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACryC;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AACzH,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,iVAAiV,EAAE,MAAM,EAAE,CAAC,8LAA8L,CAAC,EAAE;AACpmB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC;AACjE,gBAAgB,IAAI,EAAE,eAAe;AACrC,gBAAgB,IAAI,EAAE,CAAC,oBAAoB;AAC3C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,UAAU;AACjC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,WAAW;AAClC,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,YAAY;AACnC,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,cAAc;AACrC,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,aAAa;AACpC,aAAa,CAAC,EAAE,EAAE,CAAC;;AC/EZ,MAAM,aAAa,CAAC;AAC3B,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB,QAAQ,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9G;AACA,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC;AACvD;AACA,IAAI,kBAAkB,CAAC,eAAe,EAAE;AACxC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxF,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAY,OAAO,CAAC;AACpB,oBAAoB,QAAQ,EAAE,IAAI;AAClC,oBAAoB,KAAK,EAAE;AAC3B,iBAAiB,CAAC;AAClB;AACA,aAAa;AACb,YAAY,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;AACtG,YAAY,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AACzC;AACA;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,IAAI,YAAY,aAAa,EAAE;AAC3C,YAAY,OAAO,EAAE;AACrB;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD,YAAY,OAAO,IAAI,CAAC,KAAK;AAC7B;AACA,aAAa,IAAI,IAAI,YAAY,WAAW,EAAE;AAC9C,YAAY,OAAO,IAAI,CAAC,KAAK;AAC7B;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD,YAAY,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAC/C;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD,YAAY,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACvD;AACA,aAAa;AACb,YAAY,OAAO,EAAE;AACrB;AACA;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAChL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACvJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvH,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC1CN,MAAM,0BAA0B,CAAC;AACxC,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;AAChE,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;AAClC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;AAChC,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B;AACA,IAAI,WAAW,CAAC,EAAE,EAAE;AACpB,QAAQ,EAAE,CAAC,cAAc,EAAE;AAC3B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B;AACA,IAAI,WAAW,CAAC,EAAE,EAAE;AACpB,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClC,gBAAgB,IAAI,CAAC,UAAU,GAAG,IAAI;AACtC,gBAAgB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,iBAAiB,KAAK;AAC9H;AACA,oBAAoB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC;AAClF,oBAAoB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC;AACxE,oBAAoB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI;AACxD,wBAAwB,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE;AACA,wBAAwB,OAAO,CAAC,QAAQ,YAAY,aAAa,MAAM,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;AAC7G,qBAAqB,CAAC;AACtB,oBAAoB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;AACrD,oBAAoB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,wBAAwB;AACxB;AACA;AACA;AACA;AACA,oBAAoB,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AACjE,oBAAoB,GAAG;AACvB,wBAAwB,IAAI,YAAY,CAAC,aAAa,EAAE;AACxD,4BAA4B,YAAY,GAAG,YAAY,CAAC,aAAa;AACrE;AACA,6BAA6B;AAC7B,4BAA4B,MAAM,iBAAiB;AACnD;AACA,qBAAqB,QAAQ,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,gBAAgB;AACpF,oBAAoB,MAAM,MAAM,GAAG;AACnC,wBAAwB,KAAK,EAAE,YAAY,CAAC,WAAW;AACvD,wBAAwB,MAAM,EAAE,YAAY,CAAC,YAAY;AACzD,wBAAwB,IAAI,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO;AACrD,wBAAwB,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO;AACpD,qBAAqB;AACrB;AACA;AACA,oBAAoB,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAC7F,oBAAoB,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACxD,oBAAoB,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE;AACpG,oBAAoB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE;AACtG,oBAAoB,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AAC5E,wBAAwB,IAAI,KAAK,GAAG,CAAC,EAAE;AACvC,4BAA4B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAClF,4BAA4B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO;AACzD,gCAAgC;AAChC;AACA,6BAA6B;AAC7B,4BAA4B,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnG,4BAA4B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE;AAC1E,gCAAgC,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AAClG;AACA;AACA;AACA;AACA,oBAAoB,MAAM,YAAY,GAAG,IAAI,cAAc,CAAC;AAC5D,wBAAwB,IAAI,EAAE,IAAI,cAAc,CAAC;AACjD,4BAA4B,KAAK,EAAE;AACnC,gCAAgC,IAAI,aAAa,CAAC;AAClD,oCAAoC,SAAS,EAAE,IAAI,CAAC;AACpD,iCAAiC;AACjC;AACA,yBAAyB,CAAC;AAC1B,wBAAwB,IAAI,EAAE;AAC9B,4BAA4B,KAAK,EAAE,MAAM,CAAC,KAAK;AAC/C,4BAA4B,MAAM,EAAE,MAAM,CAAC,MAAM;AACjD,yBAAyB;AACzB,wBAAwB,QAAQ,EAAE;AAClC,4BAA4B,CAAC,EAAE,MAAM,CAAC,IAAI;AAC1C,4BAA4B,CAAC,EAAE,MAAM,CAAC,GAAG;AACzC;AACA,qBAAqB,CAAC;AACtB,oBAAoB,IAAI,CAAC,aAAa,GAAG;AACzC,wBAAwB,OAAO,EAAE,EAAE,CAAC,OAAO;AAC3C,wBAAwB,OAAO,EAAE,EAAE,CAAC,OAAO;AAC3C,wBAAwB;AACxB,qBAAqB;AACrB,oBAAoB,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AAChF;AACA,oBAAoB,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,CAAC;AAClB;AACA,iBAAiB;AACjB,gBAAgB,IAAI,IAAI,CAAC,aAAa,EAAE;AACxC,oBAAoB,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE;AAClE,wBAAwB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO;AAC5G,wBAAwB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;AAClC,QAAQ,IAAI,IAAI,YAAY,aAAa,EAAE;AAC3C;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD;AACA;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD,YAAY,IAAI,IAAI,YAAY,aAAa,EAAE;AAC/C,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACtD,gBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3C;AACA;AACA,aAAa,IAAI,IAAI,YAAY,WAAW,EAAE;AAC9C,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACvC;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD;AACA,aAAa;AACb,YAAY,MAAM,mBAAmB;AACrC;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,+BAA+B;AAC7D,QAAQ,IAAI,IAAI,YAAY,aAAa,EAAE;AAC3C,YAAY,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;AAC7D;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD;AACA,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChC,gBAAgB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;AAChE;AACA,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpE,YAAY,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;AACvF;AACA,aAAa,IAAI,IAAI,YAAY,cAAc,EAAE;AACjD,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;AAC1E,YAAY,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;AACtF,gBAAgB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAClF;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACnF;AACA;AACA,aAAa,IAAI,IAAI,YAAY,WAAW,EAAE;AAC9C,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC;AAClC,iBAAiB,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,aAAa;AACvD,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;AAC3B,iBAAiB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;AACnD,YAAY,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,aAAa,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrH;AACA,gBAAgB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAClF;AACA,iBAAiB;AACjB,gBAAgB,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;AAClD,oBAAoB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC;AACxE,oBAAoB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE;AAClE;AACA,wBAAwB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3E,wBAAwB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1F;AACA;AACA;AACA,YAAY,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/E;AACA,aAAa;AACb,YAAY,MAAM,mBAAmB;AACrC;AACA;AACA,IAAI,SAAS,CAAC,EAAE,EAAE;AAClB,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;AAChC,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B,QAAQ,IAAI,CAAC,aAAa,GAAG,SAAS;AACtC;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAEC,oBAAuB,EAAE,EAAE,EAAE,KAAK,EAAEC,eAAkB,EAAE,EAAE,EAAE,KAAK,EAAEC,aAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9U,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,EAAE,UAAU,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,EAAE,CAAC,mKAAmK,CAAC,EAAE,CAAC,CAAC;AAC9lB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC;AACpI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,EAAE,CAAC,mKAAmK,CAAC,EAAE;AAChS,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAEF,oBAAuB,EAAE,EAAE,EAAE,IAAI,EAAEC,eAAkB,EAAE,EAAE,EAAE,IAAI,EAAEC,aAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC;AACnN,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;AAC9C,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;AACvD,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;AACrD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,eAAe;AACtC,aAAa,CAAC,EAAE,EAAE,CAAC;;ACrQZ,MAAM,YAAY,CAAC;AAC1B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7K,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,eAAe;AAC3J,YAAY,oBAAoB;AAChC,YAAY,0BAA0B;AACtC,YAAY,2BAA2B,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS;AAC7D,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,kBAAkB;AAC9B,YAAY,gBAAgB;AAC5B,YAAY,kBAAkB;AAC9B,YAAY,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe;AACzD,YAAY,oBAAoB;AAChC,YAAY,0BAA0B;AACtC,YAAY,2BAA2B,CAAC,EAAE,CAAC,CAAC;AAC5C,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY;AACnJ,YAAY,YAAY;AACxB,YAAY,kBAAkB;AAC9B,YAAY,gBAAgB;AAC5B,YAAY,kBAAkB;AAC9B,YAAY,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAClC;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACtH,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,YAAY,EAAE;AAClC,wBAAwB,eAAe;AACvC,wBAAwB,oBAAoB;AAC5C,wBAAwB,0BAA0B;AAClD,wBAAwB;AACxB,qBAAqB;AACrB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,SAAS;AACjC,wBAAwB,YAAY;AACpC,wBAAwB,YAAY;AACpC,wBAAwB,kBAAkB;AAC1C,wBAAwB,gBAAgB;AACxC,wBAAwB,kBAAkB;AAC1C,wBAAwB;AACxB,qBAAqB;AACrB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,eAAe;AACvC,wBAAwB,oBAAoB;AAC5C,wBAAwB,0BAA0B;AAClD,wBAAwB;AACxB;AACA,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC5Db;AACA;AACA;;;;"}
1
+ {"version":3,"file":"mintplayer-ng-bootstrap-dock.mjs","sources":["../tmp-esm2022/dock/src/lib/components/dock-pane.component.js","../tmp-esm2022/dock/src/lib/web-components/mint-dock-manager.element.js","../tmp-esm2022/dock/src/lib/components/dock-manager.component.js","../tmp-esm2022/dock/src/lib/dock.module.js","../tmp-esm2022/dock/mintplayer-ng-bootstrap-dock.js"],"sourcesContent":["import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BsDockPaneComponent {\n ngAfterContentInit() {\n if (!this.name) {\n throw new Error('bs-dock-pane requires a unique \"name\" input.');\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPaneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.7\", type: BsDockPaneComponent, isStandalone: false, selector: \"bs-dock-pane\", inputs: { name: \"name\", title: \"title\" }, viewQueries: [{ propertyName: \"template\", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: `<ng-template><ng-content></ng-content></ng-template>`, isInline: true }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockPaneComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'bs-dock-pane',\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n standalone: false,\n }]\n }], propDecorators: { name: [{\n type: Input\n }], title: [{\n type: Input\n }], template: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1wYW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9zcmMvbGliL2NvbXBvbmVudHMvZG9jay1wYW5lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPM0YsTUFBTSxPQUFPLG1CQUFtQjtJQU05QixrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQzs4R0FWVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw2SkFJbkIsV0FBVyw4REFQWixzREFBc0Q7OzJGQUdyRCxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxzREFBc0Q7b0JBQ2hFLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs4QkFFVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVvQyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLWRvY2stcGFuZScsXG4gIHRlbXBsYXRlOiBgPG5nLXRlbXBsYXRlPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPmAsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBCc0RvY2tQYW5lQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBJbnB1dCgpIG5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pIHRlbXBsYXRlITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JzLWRvY2stcGFuZSByZXF1aXJlcyBhIHVuaXF1ZSBcIm5hbWVcIiBpbnB1dC4nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","const templateHtml = `\n <style>\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n contain: layout paint size style;\n box-sizing: border-box;\n font-family: inherit;\n color: inherit;\n }\n\n .dock-root,\n .dock-docked,\n .dock-split,\n .dock-split__child,\n .dock-stack,\n .dock-stack__content,\n .dock-stack__pane {\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n }\n\n .dock-root {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .dock-docked {\n position: absolute;\n inset: 0;\n display: flex;\n z-index: 0;\n }\n\n .dock-floating-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n }\n\n .dock-floating {\n position: absolute;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n border: 1px solid rgba(0, 0, 0, 0.3);\n border-radius: 0.5rem;\n background: rgba(255, 255, 255, 0.92);\n box-shadow: 0 16px 32px rgba(15, 23, 42, 0.25);\n overflow: hidden;\n min-width: 12rem;\n min-height: 8rem;\n }\n\n .dock-floating__chrome {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.35rem 0.75rem;\n cursor: move;\n background: linear-gradient(\n to bottom,\n rgba(148, 163, 184, 0.6),\n rgba(148, 163, 184, 0.25)\n );\n border-bottom: 1px solid rgba(148, 163, 184, 0.5);\n user-select: none;\n -webkit-user-select: none;\n }\n\n .dock-floating__title {\n flex: 1 1 auto;\n font-size: 0.875rem;\n font-weight: 500;\n color: rgba(30, 41, 59, 0.95);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .dock-floating > .dock-stack {\n flex: 1 1 auto;\n min-width: 12rem;\n min-height: 8rem;\n }\n\n .dock-floating__resizer {\n position: absolute;\n pointer-events: auto;\n z-index: 2;\n background: rgba(148, 163, 184, 0.25);\n transition: background 120ms ease;\n }\n\n .dock-floating__resizer:hover {\n background: rgba(148, 163, 184, 0.4);\n }\n\n .dock-floating__resizer--top,\n .dock-floating__resizer--bottom {\n left: 0.75rem;\n right: 0.75rem;\n height: 0.5rem;\n }\n\n .dock-floating__resizer--top {\n top: 0;\n cursor: n-resize;\n }\n\n .dock-floating__resizer--bottom {\n bottom: 0;\n cursor: s-resize;\n }\n\n .dock-floating__resizer--left,\n .dock-floating__resizer--right {\n top: 1.75rem;\n bottom: 0.75rem;\n width: 0.5rem;\n }\n\n .dock-floating__resizer--left {\n left: 0;\n cursor: w-resize;\n }\n\n .dock-floating__resizer--right {\n right: 0;\n cursor: e-resize;\n }\n\n .dock-floating__resizer--top-left,\n .dock-floating__resizer--top-right,\n .dock-floating__resizer--bottom-left,\n .dock-floating__resizer--bottom-right {\n width: 0.75rem;\n height: 0.75rem;\n }\n\n .dock-floating__resizer--top-left {\n top: 0;\n left: 0;\n cursor: nw-resize;\n }\n\n .dock-floating__resizer--top-right {\n top: 0;\n right: 0;\n cursor: ne-resize;\n }\n\n .dock-floating__resizer--bottom-left {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n }\n\n .dock-floating__resizer--bottom-right {\n right: 0;\n bottom: 0;\n cursor: se-resize;\n }\n\n .dock-split {\n display: flex;\n flex: 1 1 0;\n gap: 0.25rem;\n position: relative;\n }\n\n .dock-split[data-direction=\"vertical\"] {\n flex-direction: column;\n }\n\n .dock-split[data-direction=\"horizontal\"] {\n flex-direction: row;\n }\n\n .dock-split__child {\n display: flex;\n flex: 1 1 0;\n position: relative;\n }\n\n .dock-split__divider {\n position: relative;\n flex: 0 0 auto;\n background: rgba(0, 0, 0, 0.08);\n transition: background 120ms ease;\n }\n\n .dock-split[data-direction=\"horizontal\"] > .dock-split__divider {\n width: 0.5rem;\n cursor: col-resize;\n }\n\n .dock-split[data-direction=\"vertical\"] > .dock-split__divider {\n height: 0.5rem;\n cursor: row-resize;\n }\n\n .dock-split__divider::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 999px;\n background: rgba(0, 0, 0, 0.25);\n }\n\n .dock-split[data-direction=\"horizontal\"] > .dock-split__divider::after {\n width: 0.125rem;\n height: 60%;\n }\n\n .dock-split[data-direction=\"vertical\"] > .dock-split__divider::after {\n width: 60%;\n height: 0.125rem;\n }\n\n .dock-split__divider:hover,\n .dock-split__divider:focus-visible,\n .dock-split__divider[data-resizing='true'] {\n background: rgba(59, 130, 246, 0.35);\n }\n\n .dock-stack {\n display: flex;\n flex-direction: column;\n flex: 1 1 0;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.25rem;\n background: rgba(255, 255, 255, 0.75);\n backdrop-filter: blur(4px);\n }\n\n .dock-stack__header {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n padding: 0.25rem;\n background: rgba(0, 0, 0, 0.05);\n border-bottom: 1px solid rgba(0, 0, 0, 0.15);\n }\n\n .dock-tab {\n appearance: none;\n border: none;\n padding: 0.25rem 0.5rem;\n border-radius: 0.25rem;\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: grab;\n transition: background 160ms ease;\n }\n\n .dock-tab:active {\n cursor: grabbing;\n }\n\n .dock-tab:hover {\n background: rgba(0, 0, 0, 0.05);\n }\n\n .dock-tab:focus-visible {\n outline: 2px solid rgba(59, 130, 246, 0.8);\n outline-offset: 1px;\n }\n\n .dock-tab--active {\n background: rgba(59, 130, 246, 0.15);\n }\n\n .dock-stack__content {\n position: relative;\n flex: 1 1 auto;\n display: flex;\n overflow: hidden;\n }\n\n .dock-stack__pane {\n position: relative;\n flex: 1 1 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .dock-stack__pane[hidden] {\n display: none !important;\n }\n\n .dock-drop-indicator {\n position: absolute;\n pointer-events: none;\n border: 2px solid rgba(59, 130, 246, 0.9);\n background: rgba(59, 130, 246, 0.2);\n border-radius: 0.25rem;\n opacity: 0;\n transition: opacity 120ms ease;\n z-index: 100;\n }\n\n .dock-drop-indicator[data-visible='true'] {\n opacity: 1;\n }\n\n .dock-drop-joystick {\n position: absolute;\n display: grid;\n grid-template-columns: repeat(3, min-content);\n grid-template-rows: repeat(3, min-content);\n gap: 0.125rem;\n padding: 0.125rem;\n border-radius: 999px;\n background: rgba(15, 23, 42, 0.15);\n box-shadow: 0 4px 12px rgba(15, 23, 42, 0.25);\n pointer-events: none;\n transform: translate(-50%, -50%);\n z-index: 110;\n }\n\n .dock-drop-joystick__spacer {\n width: 1.75rem;\n height: 1.75rem;\n pointer-events: none;\n }\n\n .dock-drop-joystick__button {\n width: 1.75rem;\n height: 1.75rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n border: 1px solid rgba(59, 130, 246, 0.4);\n background: rgba(255, 255, 255, 0.9);\n color: rgba(30, 64, 175, 0.9);\n font-size: 0.75rem;\n line-height: 1;\n font-weight: 600;\n pointer-events: auto;\n cursor: pointer;\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\n }\n\n .dock-drop-joystick__button[data-active='true'],\n .dock-drop-joystick__button:hover,\n .dock-drop-joystick__button:focus-visible {\n background: rgba(59, 130, 246, 0.25);\n border-color: rgba(59, 130, 246, 0.8);\n color: rgba(30, 64, 175, 1);\n }\n\n .dock-drop-joystick__button:focus-visible {\n outline: 2px solid rgba(59, 130, 246, 0.9);\n outline-offset: 1px;\n }\n\n .dock-drop-joystick__button[data-zone='center'] {\n border-radius: 0.5rem;\n }\n\n ::slotted(*) {\n flex: 1 1 auto;\n display: block;\n min-width: 0;\n min-height: 0;\n }\n </style>\n <div class=\"dock-root\">\n <div class=\"dock-docked\"></div>\n <div class=\"dock-floating-layer\"></div>\n </div>\n <div class=\"dock-drop-indicator\"></div>\n <div class=\"dock-drop-joystick\" data-visible=\"false\">\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"top\"\n aria-label=\"Dock to top\"\n >\n ↑\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"left\"\n aria-label=\"Dock to left\"\n >\n ←\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"center\"\n aria-label=\"Dock to center\"\n >\n •\n </button>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"right\"\n aria-label=\"Dock to right\"\n >\n →\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n <button\n class=\"dock-drop-joystick__button\"\n type=\"button\"\n data-zone=\"bottom\"\n aria-label=\"Dock to bottom\"\n >\n ↓\n </button>\n <div class=\"dock-drop-joystick__spacer\"></div>\n </div>\n`;\nlet cachedTemplate = null;\nlet cachedTemplateDocument = null;\nfunction ensureTemplate(documentRef) {\n if (!cachedTemplate || cachedTemplateDocument !== documentRef) {\n cachedTemplate = documentRef.createElement('template');\n cachedTemplate.innerHTML = templateHtml;\n cachedTemplateDocument = documentRef;\n }\n return cachedTemplate;\n}\nexport class MintDockManagerElement extends HTMLElement {\n static { this.documentRef = typeof document !== 'undefined' ? document : null; }\n static configureDocument(documentRef) {\n if (documentRef) {\n MintDockManagerElement.documentRef = documentRef;\n }\n }\n static get observedAttributes() {\n return ['layout'];\n }\n static { this.instanceCounter = 0; }\n constructor() {\n super();\n this.dropJoystickTarget = null;\n this.rootLayout = null;\n this.floatingLayouts = [];\n this.pendingTabDragMetrics = null;\n this.resizeState = null;\n this.dragState = null;\n this.floatingDragState = null;\n this.floatingResizeState = null;\n this.pointerTrackingActive = false;\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.pendingDragEndTimeout = null;\n const documentRef = this.resolveDocument();\n this.documentRef = documentRef;\n this.windowRef = this.resolveWindow(documentRef);\n const shadowRoot = this.attachShadow({ mode: 'open' });\n const template = ensureTemplate(documentRef);\n shadowRoot.appendChild(template.content.cloneNode(true));\n const root = shadowRoot.querySelector('.dock-root');\n if (!root) {\n throw new Error('mint-dock-manager template is missing the root element.');\n }\n const docked = shadowRoot.querySelector('.dock-docked');\n if (!docked) {\n throw new Error('mint-dock-manager template is missing the docked surface element.');\n }\n const floatingLayer = shadowRoot.querySelector('.dock-floating-layer');\n if (!floatingLayer) {\n throw new Error('mint-dock-manager template is missing the floating layer element.');\n }\n const indicator = shadowRoot.querySelector('.dock-drop-indicator');\n if (!indicator) {\n throw new Error('mint-dock-manager template is missing the drop indicator element.');\n }\n const joystick = shadowRoot.querySelector('.dock-drop-joystick');\n if (!joystick) {\n throw new Error('mint-dock-manager template is missing the drop joystick element.');\n }\n const joystickButtons = Array.from(joystick.querySelectorAll('.dock-drop-joystick__button[data-zone]'));\n if (joystickButtons.length === 0) {\n throw new Error('mint-dock-manager template is missing drop joystick buttons.');\n }\n this.rootEl = root;\n this.dockedEl = docked;\n this.floatingLayerEl = floatingLayer;\n this.dropIndicator = indicator;\n this.dropJoystick = joystick;\n this.dropJoystickButtons = joystickButtons;\n this.instanceId = `mint-dock-${++MintDockManagerElement.instanceCounter}`;\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onDragOver = this.onDragOver.bind(this);\n this.onGlobalDragOver = this.onGlobalDragOver.bind(this);\n this.onGlobalDragEnd = this.onGlobalDragEnd.bind(this);\n this.onDrop = this.onDrop.bind(this);\n this.onDragLeave = this.onDragLeave.bind(this);\n this.onDrag = this.onDrag.bind(this);\n this.onDragMouseMove = this.onDragMouseMove.bind(this);\n this.onDragTouchMove = this.onDragTouchMove.bind(this);\n this.onDragMouseUp = this.onDragMouseUp.bind(this);\n this.onDragTouchEnd = this.onDragTouchEnd.bind(this);\n }\n connectedCallback() {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\n }\n this.render();\n this.rootEl.addEventListener('dragover', this.onDragOver);\n this.rootEl.addEventListener('drop', this.onDrop);\n this.rootEl.addEventListener('dragleave', this.onDragLeave);\n this.dropJoystick.addEventListener('dragover', this.onDragOver);\n this.dropJoystick.addEventListener('drop', this.onDrop);\n this.dropJoystick.addEventListener('dragleave', this.onDragLeave);\n const win = this.windowRef;\n win?.addEventListener('dragover', this.onGlobalDragOver);\n win?.addEventListener('drag', this.onDrag);\n win?.addEventListener('dragend', this.onGlobalDragEnd, true);\n }\n disconnectedCallback() {\n this.rootEl.removeEventListener('dragover', this.onDragOver);\n this.rootEl.removeEventListener('drop', this.onDrop);\n this.rootEl.removeEventListener('dragleave', this.onDragLeave);\n this.dropJoystick.removeEventListener('dragover', this.onDragOver);\n this.dropJoystick.removeEventListener('drop', this.onDrop);\n this.dropJoystick.removeEventListener('dragleave', this.onDragLeave);\n const win = this.windowRef;\n win?.removeEventListener('dragover', this.onGlobalDragOver);\n win?.removeEventListener('drag', this.onDrag);\n win?.removeEventListener('dragend', this.onGlobalDragEnd, true);\n this.stopDragPointerTracking();\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n }\n attributeChangedCallback(name, _oldValue, newValue) {\n if (name === 'layout') {\n this.layout = newValue ? this.parseLayout(newValue) : null;\n }\n }\n get layout() {\n return {\n root: this.cloneLayoutNode(this.rootLayout),\n floating: this.cloneFloatingArray(this.floatingLayouts),\n };\n }\n set layout(value) {\n const snapshot = this.ensureSnapshot(value);\n this.rootLayout = this.cloneLayoutNode(snapshot.root);\n this.floatingLayouts = this.cloneFloatingArray(snapshot.floating);\n this.render();\n }\n get snapshot() {\n return this.layout;\n }\n toJSON() {\n return this.snapshot;\n }\n resolveDocument() {\n const staticDocument = MintDockManagerElement.documentRef;\n const ownerDocument = this.ownerDocument ?? null;\n const globalDocument = typeof document !== 'undefined' ? document : null;\n const resolvedDocument = staticDocument ?? ownerDocument ?? globalDocument;\n if (!resolvedDocument) {\n throw new Error('mint-dock-manager requires a Document to initialize.');\n }\n if (!MintDockManagerElement.documentRef) {\n MintDockManagerElement.documentRef = resolvedDocument;\n }\n return resolvedDocument;\n }\n resolveWindow(documentRef) {\n if (typeof window !== 'undefined') {\n return window;\n }\n return documentRef.defaultView ?? null;\n }\n parseLayout(value) {\n try {\n const parsed = JSON.parse(value);\n return this.ensureSnapshot(parsed);\n }\n catch (err) {\n console.warn('mint-dock-manager: failed to parse layout attribute', err);\n return null;\n }\n }\n ensureSnapshot(value) {\n if (!value) {\n return { root: null, floating: [] };\n }\n if (value.kind) {\n return { root: value, floating: [] };\n }\n const layout = value;\n return {\n root: layout.root ?? null,\n floating: Array.isArray(layout.floating)\n ? layout.floating.map((floating) => this.normalizeFloatingLayout(floating))\n : [],\n };\n }\n render() {\n this.dockedEl.innerHTML = '';\n this.floatingLayerEl.innerHTML = '';\n this.hideDropIndicator();\n if (this.rootLayout) {\n const fragment = this.renderNode(this.rootLayout, []);\n this.dockedEl.appendChild(fragment);\n }\n this.renderFloatingPanes();\n }\n renderNode(node, path, floatingIndex) {\n if (node.kind === 'split') {\n return this.renderSplit(node, path, floatingIndex);\n }\n return this.renderStack(node, path, floatingIndex);\n }\n renderFloatingPanes() {\n this.floatingLayerEl.innerHTML = '';\n this.floatingLayouts.forEach((floating, index) => {\n const wrapper = this.documentRef.createElement('div');\n wrapper.classList.add('dock-floating');\n wrapper.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n const { left, top, width, height } = floating.bounds;\n wrapper.style.left = `${left}px`;\n wrapper.style.top = `${top}px`;\n wrapper.style.width = `${width}px`;\n wrapper.style.height = `${height}px`;\n const zIndex = this.getFloatingPaneZIndex(index);\n wrapper.style.zIndex = String(zIndex);\n const chrome = this.documentRef.createElement('div');\n chrome.classList.add('dock-floating__chrome');\n chrome.addEventListener('pointerdown', (event) => this.beginFloatingDrag(event, index, wrapper, chrome));\n const title = this.documentRef.createElement('div');\n title.classList.add('dock-floating__title');\n title.textContent = this.getFloatingWindowTitle(floating);\n chrome.appendChild(title);\n wrapper.appendChild(chrome);\n if (floating.root) {\n const content = this.renderNode(floating.root, [], index);\n content.classList.add('dock-floating__stack');\n wrapper.appendChild(content);\n }\n else {\n const placeholder = this.documentRef.createElement('div');\n placeholder.classList.add('dock-stack');\n placeholder.dataset['path'] = this.formatPath({\n type: 'floating',\n index,\n segments: [],\n });\n const empty = this.documentRef.createElement('div');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n placeholder.appendChild(empty);\n wrapper.appendChild(placeholder);\n }\n const resizerConfigs = [\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-left'],\n edges: { horizontal: 'left', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top'],\n edges: { horizontal: 'none', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--top-right'],\n edges: { horizontal: 'right', vertical: 'top' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--right'],\n edges: { horizontal: 'right', vertical: 'none' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-right'],\n edges: { horizontal: 'right', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom'],\n edges: { horizontal: 'none', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--bottom-left'],\n edges: { horizontal: 'left', vertical: 'bottom' },\n },\n {\n classes: ['dock-floating__resizer', 'dock-floating__resizer--left'],\n edges: { horizontal: 'left', vertical: 'none' },\n },\n ];\n resizerConfigs.forEach(({ classes, edges }) => {\n const resizer = this.documentRef.createElement('div');\n resizer.classList.add(...classes);\n resizer.addEventListener('pointerdown', (event) => this.beginFloatingResize(event, index, wrapper, resizer, edges));\n wrapper.appendChild(resizer);\n });\n this.floatingLayerEl.appendChild(wrapper);\n });\n }\n beginFloatingDrag(event, index, wrapper, handle) {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const { left, top } = floating.bounds;\n try {\n handle.setPointerCapture(event.pointerId);\n }\n catch (err) {\n /* no-op: pointer capture may not be supported in all environments */\n }\n this.promoteFloatingPane(index, wrapper);\n this.floatingDragState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startLeft: left,\n startTop: top,\n wrapper,\n handle,\n };\n this.startPointerTracking();\n }\n beginFloatingResize(event, index, wrapper, handle, edges) {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n try {\n handle.setPointerCapture(event.pointerId);\n }\n catch (err) {\n /* pointer capture may not be supported */\n }\n this.promoteFloatingPane(index, wrapper);\n this.floatingResizeState = {\n index,\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startWidth: floating.bounds.width,\n startHeight: floating.bounds.height,\n startLeft: floating.bounds.left,\n startTop: floating.bounds.top,\n wrapper,\n handle,\n edges,\n };\n this.startPointerTracking();\n }\n handleFloatingDragMove(event) {\n const state = this.floatingDragState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const newLeft = state.startLeft + deltaX;\n const newTop = state.startTop + deltaY;\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n this.updateFloatingDragDropTarget(event);\n }\n endFloatingDrag(pointerId) {\n const state = this.floatingDragState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n try {\n state.handle.releasePointerCapture(state.pointerId);\n }\n catch (err) {\n /* no-op */\n }\n const dropHandled = state.dropTarget\n ? this.handleFloatingStackDrop(state.index, state.dropTarget.path, state.dropTarget.zone)\n : false;\n this.floatingDragState = null;\n this.hideDropIndicator();\n if (!dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n updateFloatingDragDropTarget(event) {\n const state = this.floatingDragState;\n if (!state) {\n return;\n }\n const stack = this.findStackAtPoint(event.clientX, event.clientY);\n if (!stack) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n const path = this.parsePath(stack.dataset['path']);\n if (!path || (path.type === 'floating' && path.index === state.index)) {\n if (state.dropTarget) {\n delete state.dropTarget;\n this.hideDropIndicator();\n }\n return;\n }\n const zone = this.computeDropZone(stack, event, this.extractDropZoneFromEvent(event));\n if (zone) {\n state.dropTarget = { path, zone };\n }\n else if (state.dropTarget) {\n delete state.dropTarget;\n }\n this.showDropIndicator(stack, zone);\n }\n handleFloatingResizeMove(event) {\n const state = this.floatingResizeState;\n if (!state || event.pointerId !== state.pointerId) {\n return;\n }\n const deltaX = event.clientX - state.startX;\n const deltaY = event.clientY - state.startY;\n const minWidth = 192;\n const minHeight = 128;\n let newWidth = state.startWidth;\n let newHeight = state.startHeight;\n let newLeft = state.startLeft;\n let newTop = state.startTop;\n if (state.edges.horizontal === 'right') {\n newWidth = Math.max(minWidth, state.startWidth + deltaX);\n }\n else if (state.edges.horizontal === 'left') {\n newWidth = Math.max(minWidth, state.startWidth - deltaX);\n newLeft = state.startLeft + (state.startWidth - newWidth);\n }\n if (state.edges.vertical === 'bottom') {\n newHeight = Math.max(minHeight, state.startHeight + deltaY);\n }\n else if (state.edges.vertical === 'top') {\n newHeight = Math.max(minHeight, state.startHeight - deltaY);\n newTop = state.startTop + (state.startHeight - newHeight);\n }\n state.wrapper.style.width = `${newWidth}px`;\n state.wrapper.style.height = `${newHeight}px`;\n state.wrapper.style.left = `${newLeft}px`;\n state.wrapper.style.top = `${newTop}px`;\n const floating = this.floatingLayouts[state.index];\n if (floating) {\n floating.bounds.width = newWidth;\n floating.bounds.height = newHeight;\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n }\n }\n endFloatingResize(pointerId) {\n const state = this.floatingResizeState;\n if (!state || pointerId !== state.pointerId) {\n return;\n }\n try {\n state.handle.releasePointerCapture(state.pointerId);\n }\n catch (err) {\n /* no-op */\n }\n this.floatingResizeState = null;\n this.dispatchLayoutChanged();\n }\n getFloatingPaneZIndex(index) {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return 10 + index;\n }\n const base = typeof floating.zIndex === 'number' && Number.isFinite(floating.zIndex)\n ? floating.zIndex\n : 10 + index;\n return base;\n }\n promoteFloatingPane(index, wrapper) {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n const maxExisting = this.floatingLayouts.reduce((max, layout, idx) => {\n if (!layout) {\n return max;\n }\n const z = idx === index ? Number.NEGATIVE_INFINITY : this.getFloatingPaneZIndex(idx);\n return Math.max(max, z);\n }, 0);\n const nextZ = Math.max(maxExisting + 2, 12);\n floating.zIndex = nextZ;\n wrapper.style.zIndex = String(nextZ);\n }\n getFloatingWrapper(index) {\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n return this.floatingLayerEl.querySelector(selector);\n }\n startPointerTracking() {\n if (this.pointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.addEventListener('pointermove', this.onPointerMove);\n win?.addEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = true;\n }\n stopPointerTrackingIfIdle() {\n if (this.pointerTrackingActive &&\n !this.resizeState &&\n !this.floatingDragState &&\n !this.floatingResizeState) {\n const win = this.windowRef;\n win?.removeEventListener('pointermove', this.onPointerMove);\n win?.removeEventListener('pointerup', this.onPointerUp);\n this.pointerTrackingActive = false;\n }\n }\n getFloatingWindowTitle(floating) {\n const fallback = 'Floating Pane';\n if (!floating || !floating.root) {\n return fallback;\n }\n const preferred = floating.activePane ?? this.findFirstPaneName(floating.root);\n if (!preferred) {\n return fallback;\n }\n const owningStack = this.findStackContainingPane(floating.root, preferred);\n if (!owningStack) {\n return preferred ?? fallback;\n }\n return owningStack.titles?.[preferred] ?? preferred ?? fallback;\n }\n updateFloatingWindowTitle(index) {\n const floating = this.floatingLayouts[index];\n if (!floating) {\n return;\n }\n const selector = `.dock-floating[data-path=\"${this.formatPath({\n type: 'floating',\n index,\n segments: [],\n })}\"]`;\n const wrapper = this.floatingLayerEl.querySelector(selector);\n if (!wrapper) {\n return;\n }\n const titleEl = wrapper.querySelector('.dock-floating__title');\n if (!titleEl) {\n return;\n }\n titleEl.textContent = this.getFloatingWindowTitle(floating);\n }\n renderSplit(node, path, floatingIndex) {\n const container = this.documentRef.createElement('div');\n container.classList.add('dock-split');\n container.dataset['direction'] = node.direction;\n container.dataset['path'] = path.join('/');\n const sizes = Array.isArray(node.sizes) ? node.sizes : [];\n node.children.forEach((child, index) => {\n const childWrapper = this.documentRef.createElement('div');\n childWrapper.classList.add('dock-split__child');\n childWrapper.dataset['index'] = String(index);\n const size = sizes[index];\n if (typeof size === 'number' && Number.isFinite(size)) {\n childWrapper.style.flex = `${Math.max(size, 0)} 1 0`;\n }\n else {\n childWrapper.style.flex = '1 1 0';\n }\n childWrapper.appendChild(this.renderNode(child, [...path, index], floatingIndex));\n container.appendChild(childWrapper);\n if (index < node.children.length - 1) {\n const divider = this.documentRef.createElement('div');\n divider.classList.add('dock-split__divider');\n divider.setAttribute('role', 'separator');\n divider.tabIndex = 0;\n divider.addEventListener('pointerdown', (event) => this.beginResize(event, container, floatingIndex !== undefined\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] }, index));\n container.appendChild(divider);\n }\n });\n return container;\n }\n renderStack(node, path, floatingIndex) {\n const stack = this.documentRef.createElement('div');\n stack.classList.add('dock-stack');\n const location = typeof floatingIndex === 'number'\n ? { type: 'floating', index: floatingIndex, segments: [...path] }\n : { type: 'docked', segments: [...path] };\n stack.dataset['path'] = this.formatPath(location);\n const header = this.documentRef.createElement('div');\n header.classList.add('dock-stack__header');\n header.setAttribute('role', 'tablist');\n const content = this.documentRef.createElement('div');\n content.classList.add('dock-stack__content');\n const panes = Array.from(new Set(node.panes));\n if (panes.length === 0) {\n const empty = this.documentRef.createElement('div');\n empty.classList.add('dock-stack__pane');\n empty.textContent = 'No panes configured';\n content.appendChild(empty);\n stack.append(header, content);\n return stack;\n }\n const activePane = panes.includes(node.activePane ?? '')\n ? node.activePane\n : panes[0];\n const baseSlug = path.length ? path.join('-') : 'root';\n const pathSlug = typeof floatingIndex === 'number' ? `f${floatingIndex}-${baseSlug}` : baseSlug;\n panes.forEach((paneName) => {\n const paneSlugRaw = paneName.replace(/[^a-zA-Z0-9_-]/g, '-');\n const paneSlug = paneSlugRaw.length > 0 ? paneSlugRaw : 'pane';\n const tabId = `${this.instanceId}-tab-${pathSlug}-${paneSlug}`;\n const panelId = `${this.instanceId}-panel-${pathSlug}-${paneSlug}`;\n const button = this.documentRef.createElement('button');\n button.type = 'button';\n button.classList.add('dock-tab');\n button.dataset['pane'] = paneName;\n button.id = tabId;\n button.textContent = node.titles?.[paneName] ?? paneName;\n button.setAttribute('role', 'tab');\n button.setAttribute('aria-controls', panelId);\n if (paneName === activePane) {\n button.classList.add('dock-tab--active');\n }\n button.setAttribute('aria-selected', String(paneName === activePane));\n button.draggable = true;\n button.addEventListener('pointerdown', (event) => {\n const stackEl = button.closest('.dock-stack');\n this.captureTabDragMetrics(event, stackEl ?? null);\n event.stopPropagation();\n });\n button.addEventListener('pointerup', () => this.clearPendingTabDragMetrics());\n button.addEventListener('pointercancel', () => this.clearPendingTabDragMetrics());\n button.addEventListener('dragstart', (event) => {\n const stackEl = button.closest('.dock-stack');\n this.beginPaneDrag(event, this.clonePath(location), paneName, stackEl ?? null);\n });\n button.addEventListener('dragend', () => {\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n });\n button.addEventListener('click', () => {\n this.activatePane(stack, paneName, this.clonePath(location));\n this.dispatchEvent(new CustomEvent('dock-pane-activated', {\n detail: { pane: paneName },\n bubbles: true,\n composed: true,\n }));\n });\n header.appendChild(button);\n const paneHost = this.documentRef.createElement('div');\n paneHost.classList.add('dock-stack__pane');\n paneHost.dataset['pane'] = paneName;\n paneHost.id = panelId;\n paneHost.setAttribute('role', 'tabpanel');\n paneHost.setAttribute('aria-labelledby', tabId);\n if (paneName !== activePane) {\n paneHost.setAttribute('hidden', '');\n }\n const slotEl = this.documentRef.createElement('slot');\n slotEl.name = paneName;\n paneHost.appendChild(slotEl);\n content.appendChild(paneHost);\n });\n stack.dataset['activePane'] = activePane;\n stack.append(header, content);\n return stack;\n }\n beginResize(event, container, path, index) {\n event.preventDefault();\n const divider = event.currentTarget;\n if (!divider) {\n return;\n }\n const orientation = container.dataset['direction'] ?? 'horizontal';\n const children = Array.from(container.querySelectorAll(':scope > .dock-split__child'));\n const initialSizes = children.map((child) => {\n const rect = child.getBoundingClientRect();\n return orientation === 'horizontal' ? rect.width : rect.height;\n });\n const beforeSize = initialSizes[index];\n const afterSize = initialSizes[index + 1];\n const startPos = orientation === 'horizontal' ? event.clientX : event.clientY;\n divider.setPointerCapture(event.pointerId);\n divider.dataset['resizing'] = 'true';\n this.resizeState = {\n path: this.clonePath(path),\n index,\n pointerId: event.pointerId,\n orientation,\n container,\n divider,\n startPos,\n initialSizes,\n beforeSize,\n afterSize,\n };\n this.startPointerTracking();\n }\n onPointerMove(event) {\n if (this.resizeState && event.pointerId === this.resizeState.pointerId) {\n const state = this.resizeState;\n const splitNode = this.resolveSplitNode(state.path);\n if (!splitNode) {\n return;\n }\n const currentPos = state.orientation === 'horizontal' ? event.clientX : event.clientY;\n const delta = currentPos - state.startPos;\n const minSize = 48;\n const pairTotal = state.beforeSize + state.afterSize;\n let newBefore = Math.min(Math.max(state.beforeSize + delta, minSize), pairTotal - minSize);\n let newAfter = pairTotal - newBefore;\n if (!Number.isFinite(newBefore) || !Number.isFinite(newAfter)) {\n return;\n }\n if (newAfter < minSize) {\n newAfter = minSize;\n newBefore = pairTotal - minSize;\n }\n const newSizesPixels = [...state.initialSizes];\n newSizesPixels[state.index] = newBefore;\n newSizesPixels[state.index + 1] = newAfter;\n const total = newSizesPixels.reduce((acc, size) => acc + size, 0);\n const normalized = total > 0 ? newSizesPixels.map((size) => size / total) : [];\n splitNode.sizes = normalized;\n const children = Array.from(state.container.querySelectorAll(':scope > .dock-split__child'));\n normalized.forEach((size, idx) => {\n if (children[idx]) {\n children[idx].style.flex = `${Math.max(size, 0)} 1 0`;\n }\n });\n this.dispatchLayoutChanged();\n }\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.handleFloatingResizeMove(event);\n }\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n console.warn('state', this.floatingDragState);\n this.handleFloatingDragMove(event);\n }\n }\n onPointerUp(event) {\n if (this.resizeState && event.pointerId === this.resizeState.pointerId) {\n const divider = this.resizeState.divider;\n divider.dataset['resizing'] = 'false';\n divider.releasePointerCapture(this.resizeState.pointerId);\n this.resizeState = null;\n }\n if (this.floatingDragState && event.pointerId === this.floatingDragState.pointerId) {\n this.endFloatingDrag(event.pointerId);\n }\n if (this.floatingResizeState && event.pointerId === this.floatingResizeState.pointerId) {\n this.endFloatingResize(event.pointerId);\n }\n this.stopPointerTrackingIfIdle();\n }\n captureTabDragMetrics(event, stackEl) {\n if (!stackEl) {\n this.pendingTabDragMetrics = null;\n return;\n }\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) {\n this.pendingTabDragMetrics = null;\n return;\n }\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl.getBoundingClientRect();\n const pointerOffsetX = event.clientX - stackRect.left;\n const pointerOffsetY = event.clientY - stackRect.top;\n const left = stackRect.left - hostRect.left;\n const top = stackRect.top - hostRect.top;\n const width = Number.isFinite(stackRect.width) ? stackRect.width : 0;\n const height = Number.isFinite(stackRect.height) ? stackRect.height : 0;\n this.pendingTabDragMetrics = {\n pointerOffsetX,\n pointerOffsetY,\n left,\n top,\n width,\n height,\n };\n }\n clearPendingTabDragMetrics() {\n this.pendingTabDragMetrics = null;\n }\n beginPaneDrag(event, path, pane, stackEl) {\n if (!event.dataTransfer) {\n return;\n }\n // Create a ghost element for the drag image. This prevents the browser from cancelling\n // the drag operation when the original element is removed from the DOM during re-render.\n const ghost = event.currentTarget.cloneNode(true);\n ghost.style.position = 'absolute';\n ghost.style.left = '-9999px';\n ghost.style.top = '-9999px';\n ghost.style.width = `${event.currentTarget.offsetWidth}px`;\n ghost.style.height = `${event.currentTarget.offsetHeight}px`;\n this.shadowRoot?.appendChild(ghost);\n // Use the ghost element as the drag image.\n // The offset is set to where the user's cursor is on the original element.\n event.dataTransfer.setDragImage(ghost, event.offsetX, event.offsetY);\n // The ghost element is no longer needed after the drag image is set.\n // We defer its removal to ensure the browser has captured it.\n setTimeout(() => ghost.remove(), 0);\n const { path: sourcePath, floatingIndex, pointerOffsetX, pointerOffsetY, } = this.preparePaneDragSource(path, pane, stackEl, event);\n this.dragState = {\n pane,\n sourcePath: this.clonePath(sourcePath),\n floatingIndex,\n pointerOffsetX,\n pointerOffsetY,\n dropHandled: false,\n };\n this.updateDraggedFloatingPosition(event);\n this.startDragPointerTracking();\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', pane);\n }\n preparePaneDragSource(path, pane, stackEl, event) {\n const location = this.resolveStackLocation(path);\n if (!location || !location.node.panes.includes(pane)) {\n this.clearPendingTabDragMetrics();\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n const metrics = this.pendingTabDragMetrics;\n this.pendingTabDragMetrics = null;\n const domHasSibling = !!stackEl &&\n Array.from(stackEl.querySelectorAll('.dock-tab')).some((button) => button.dataset['pane'] && button.dataset['pane'] !== pane);\n const hasSiblingInStack = location.node.panes.some((existing) => existing !== pane);\n const floating = location.context === 'floating' ? this.floatingLayouts[location.index] : null;\n const floatingPaneCount = floating && floating.root ? this.countPanesInTree(floating.root) : hasSiblingInStack ? 2 : 1;\n const shouldReuseExistingWindow = location.context === 'floating' &&\n !!floating &&\n !hasSiblingInStack &&\n !domHasSibling &&\n floatingPaneCount <= 1;\n if (shouldReuseExistingWindow) {\n if (floating) {\n floating.activePane = pane;\n this.updateFloatingWindowTitle(location.index);\n const wrapper = this.getFloatingWrapper(location.index);\n if (wrapper) {\n this.promoteFloatingPane(location.index, wrapper);\n }\n const hostRect = this.getBoundingClientRect();\n const pointerOffsetX = metrics &&\n Number.isFinite(metrics.pointerOffsetX) &&\n Number.isFinite(metrics.left) &&\n Number.isFinite(floating.bounds.left)\n ? metrics.pointerOffsetX + (metrics.left - floating.bounds.left)\n : Number.isFinite(event.clientX) && Number.isFinite(floating.bounds.left)\n ? event.clientX - hostRect.left - floating.bounds.left\n : floating.bounds.width / 2;\n const pointerOffsetY = metrics &&\n Number.isFinite(metrics.pointerOffsetY) &&\n Number.isFinite(metrics.top) &&\n Number.isFinite(floating.bounds.top)\n ? metrics.pointerOffsetY + (metrics.top - floating.bounds.top)\n : Number.isFinite(event.clientY) && Number.isFinite(floating.bounds.top)\n ? event.clientY - hostRect.top - floating.bounds.top\n : floating.bounds.height / 2;\n return {\n path,\n floatingIndex: location.index,\n pointerOffsetX,\n pointerOffsetY,\n };\n }\n return {\n path,\n floatingIndex: null,\n pointerOffsetX: 0,\n pointerOffsetY: 0,\n };\n }\n const hostRect = this.getBoundingClientRect();\n const stackRect = stackEl?.getBoundingClientRect() ?? null;\n const fallbackWidth = 320;\n const fallbackHeight = 240;\n const width = metrics && Number.isFinite(metrics.width) && metrics.width > 0\n ? metrics.width\n : stackRect && Number.isFinite(stackRect.width)\n ? stackRect.width\n : fallbackWidth;\n const height = metrics && Number.isFinite(metrics.height) && metrics.height > 0\n ? metrics.height\n : stackRect && Number.isFinite(stackRect.height)\n ? stackRect.height\n : fallbackHeight;\n const pointerOffsetX = metrics && Number.isFinite(metrics.pointerOffsetX)\n ? metrics.pointerOffsetX\n : stackRect && Number.isFinite(event.clientX)\n ? event.clientX - stackRect.left\n : width / 2;\n const pointerOffsetY = metrics && Number.isFinite(metrics.pointerOffsetY)\n ? metrics.pointerOffsetY\n : stackRect && Number.isFinite(event.clientY)\n ? event.clientY - stackRect.top\n : height / 2;\n const pointerLeft = metrics && Number.isFinite(metrics.left)\n ? metrics.left\n : Number.isFinite(event.clientX)\n ? event.clientX - hostRect.left - pointerOffsetX\n : null;\n const pointerTop = metrics && Number.isFinite(metrics.top)\n ? metrics.top\n : Number.isFinite(event.clientY)\n ? event.clientY - hostRect.top - pointerOffsetY\n : null;\n const left = pointerLeft !== null\n ? pointerLeft\n : stackRect\n ? stackRect.left - hostRect.left\n : (hostRect.width - width) / 2;\n const top = pointerTop !== null\n ? pointerTop\n : stackRect\n ? stackRect.top - hostRect.top\n : (hostRect.height - height) / 2;\n // Defer the DOM modification to prevent the browser from cancelling the drag operation.\n setTimeout(() => {\n const paneTitle = location.node.titles?.[pane];\n this.removePaneFromLocation(location, pane);\n const floatingStack = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n if (paneTitle) {\n floatingStack.titles = { [pane]: paneTitle };\n }\n const floatingLayout = {\n bounds: {\n left,\n top,\n width,\n height,\n },\n root: floatingStack,\n activePane: pane,\n };\n if (paneTitle) {\n floatingLayout.titles = { [pane]: paneTitle };\n }\n this.floatingLayouts.push(floatingLayout);\n const floatingIndex = this.floatingLayouts.length - 1;\n // Defer rendering to avoid interrupting the drag-and-drop initialization in the browser.\n // Synchronously re-rendering can cause the browser to lose track of the drag operation.\n this.render();\n const wrapper = this.getFloatingWrapper(floatingIndex);\n if (wrapper) {\n this.promoteFloatingPane(floatingIndex, wrapper);\n }\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.sourcePath = { type: 'floating', index: floatingIndex, segments: [] };\n this.dragState.floatingIndex = floatingIndex;\n }\n }, 0);\n return {\n path: { type: 'floating', index: -1, segments: [] }, // Placeholder path\n floatingIndex: -1,\n pointerOffsetX,\n pointerOffsetY,\n };\n }\n endPaneDrag() {\n this.clearPendingDragEndTimeout();\n const state = this.dragState;\n this.dragState = null;\n this.hideDropIndicator();\n this.stopDragPointerTracking();\n this.lastDragPointerPosition = null;\n if (state && state.floatingIndex !== null && !state.dropHandled) {\n this.dispatchLayoutChanged();\n }\n }\n onDragOver(event) {\n if (!this.dragState) {\n return;\n }\n event.preventDefault();\n this.updateDraggedFloatingPosition(event);\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n const stack = this.findStackElement(event);\n if (!stack) {\n this.hideDropIndicator();\n return;\n }\n const path = this.parsePath(stack.dataset['path']);\n const zone = this.computeDropZone(stack, event, this.extractDropZoneFromEvent(event));\n this.showDropIndicator(stack, zone);\n }\n updateDraggedFloatingPosition(event) {\n if (!this.dragState) {\n return;\n }\n const { clientX, clientY, screenX, screenY } = event;\n const hasValidCoordinates = Number.isFinite(clientX) &&\n Number.isFinite(clientY) &&\n !(clientX === 0 && clientY === 0 && screenX === 0 && screenY === 0);\n if (hasValidCoordinates) {\n this.lastDragPointerPosition = { x: clientX, y: clientY };\n this.updateDraggedFloatingPositionFromPoint(clientX, clientY);\n return;\n }\n if (this.lastDragPointerPosition) {\n const { x, y } = this.lastDragPointerPosition;\n this.updateDraggedFloatingPositionFromPoint(x, y);\n }\n }\n onGlobalDragOver(event) {\n if (!this.dragState) {\n return;\n }\n this.updateDraggedFloatingPosition(event);\n }\n onDrag(event) {\n if (!this.dragState) {\n return;\n }\n this.updateDraggedFloatingPosition(event);\n }\n onGlobalDragEnd() {\n this.hideDropIndicator();\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n }\n updateDraggedFloatingPositionFromPoint(clientX, clientY) {\n if (!this.dragState) {\n return;\n }\n if (!Number.isFinite(clientX) || !Number.isFinite(clientY)) {\n return;\n }\n this.updatePaneDragDropTargetFromPoint(clientX, clientY);\n const { floatingIndex, pointerOffsetX, pointerOffsetY } = this.dragState;\n if (floatingIndex === null || floatingIndex < 0) {\n return;\n }\n const floating = this.floatingLayouts[floatingIndex];\n if (!floating) {\n return;\n }\n const hostRect = this.getBoundingClientRect();\n const newLeft = clientX - hostRect.left - pointerOffsetX;\n const newTop = clientY - hostRect.top - pointerOffsetY;\n floating.bounds.left = newLeft;\n floating.bounds.top = newTop;\n const wrapper = this.getFloatingWrapper(floatingIndex);\n if (wrapper) {\n wrapper.style.left = `${newLeft}px`;\n wrapper.style.top = `${newTop}px`;\n }\n }\n updatePaneDragDropTargetFromPoint(clientX, clientY) {\n if (!this.dragState) {\n return;\n }\n const stack = this.findStackAtPoint(clientX, clientY);\n if (!stack) {\n this.hideDropIndicator();\n return;\n }\n const path = this.parsePath(stack.dataset['path']);\n if (!path) {\n this.hideDropIndicator();\n return;\n }\n const zoneHint = this.findDropZoneByPoint(clientX, clientY);\n const zone = this.computeDropZone(stack, { clientX, clientY }, zoneHint);\n this.showDropIndicator(stack, zone);\n }\n startDragPointerTracking() {\n if (this.dragPointerTrackingActive) {\n return;\n }\n this.lastDragPointerPosition = null;\n const win = this.windowRef;\n win?.addEventListener('mousemove', this.onDragMouseMove, true);\n win?.addEventListener('touchmove', this.onDragTouchMove, { passive: false });\n win?.addEventListener('mouseup', this.onDragMouseUp, true);\n win?.addEventListener('touchend', this.onDragTouchEnd, true);\n win?.addEventListener('touchcancel', this.onDragTouchEnd, true);\n this.dragPointerTrackingActive = true;\n }\n stopDragPointerTracking() {\n if (!this.dragPointerTrackingActive) {\n return;\n }\n const win = this.windowRef;\n win?.removeEventListener('mousemove', this.onDragMouseMove, true);\n win?.removeEventListener('touchmove', this.onDragTouchMove);\n win?.removeEventListener('mouseup', this.onDragMouseUp, true);\n win?.removeEventListener('touchend', this.onDragTouchEnd, true);\n win?.removeEventListener('touchcancel', this.onDragTouchEnd, true);\n this.dragPointerTrackingActive = false;\n this.lastDragPointerPosition = null;\n this.clearPendingDragEndTimeout();\n }\n onDragMouseMove(event) {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n if (event.buttons === 0) {\n this.scheduleDeferredDragEnd();\n return;\n }\n this.lastDragPointerPosition = { x: event.clientX, y: event.clientY };\n this.updateDraggedFloatingPositionFromPoint(event.clientX, event.clientY);\n }\n onDragTouchMove(event) {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n const touch = event.touches[0];\n if (!touch) {\n this.scheduleDeferredDragEnd();\n return;\n }\n event.preventDefault();\n this.lastDragPointerPosition = { x: touch.clientX, y: touch.clientY };\n this.updateDraggedFloatingPositionFromPoint(touch.clientX, touch.clientY);\n }\n onDragMouseUp() {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.scheduleDeferredDragEnd();\n }\n onDragTouchEnd() {\n if (!this.dragState) {\n this.stopDragPointerTracking();\n return;\n }\n this.scheduleDeferredDragEnd();\n }\n clearPendingDragEndTimeout() {\n if (this.pendingDragEndTimeout !== null) {\n const win = this.windowRef;\n if (win && typeof this.pendingDragEndTimeout === 'number') {\n win.clearTimeout(this.pendingDragEndTimeout);\n }\n else {\n globalThis.clearTimeout(this.pendingDragEndTimeout);\n }\n this.pendingDragEndTimeout = null;\n }\n }\n scheduleDeferredDragEnd() {\n if (this.pendingDragEndTimeout !== null) {\n return;\n }\n const completeDrag = () => {\n this.pendingDragEndTimeout = null;\n this.hideDropIndicator();\n if (!this.dragState) {\n this.clearPendingTabDragMetrics();\n return;\n }\n this.endPaneDrag();\n this.clearPendingTabDragMetrics();\n };\n const win = this.windowRef;\n this.pendingDragEndTimeout = win\n ? win.setTimeout(completeDrag, 0)\n : setTimeout(completeDrag, 0);\n }\n onDrop(event) {\n if (!this.dragState) {\n return;\n }\n event.preventDefault();\n const pointFromEvent = Number.isFinite(event.clientX) && Number.isFinite(event.clientY)\n ? { clientX: event.clientX, clientY: event.clientY }\n : null;\n const point = pointFromEvent ??\n (this.lastDragPointerPosition\n ? {\n clientX: this.lastDragPointerPosition.x,\n clientY: this.lastDragPointerPosition.y,\n }\n : null);\n const stack = this.findStackElement(event) ??\n (point ? this.findStackAtPoint(point.clientX, point.clientY) : null);\n if (!stack) {\n this.hideDropIndicator();\n this.endPaneDrag();\n return;\n }\n const path = this.parsePath(stack.dataset['path']);\n const eventZoneHint = this.extractDropZoneFromEvent(event);\n const pointZoneHint = point ? this.findDropZoneByPoint(point.clientX, point.clientY) : null;\n const zone = this.computeDropZone(stack, point ?? event, pointZoneHint ?? eventZoneHint);\n if (!zone) {\n this.hideDropIndicator();\n this.endPaneDrag();\n return;\n }\n this.handleDrop(path, zone);\n this.endPaneDrag();\n }\n onDragLeave(event) {\n const related = event.relatedTarget;\n if (!related) {\n this.hideDropIndicator();\n return;\n }\n const rootContains = this.rootEl.contains(related);\n const joystickContains = this.dropJoystick.contains(related);\n if (!rootContains && !joystickContains) {\n this.hideDropIndicator();\n }\n }\n handleDrop(targetPath, zone) {\n if (!this.dragState || !targetPath) {\n return;\n }\n const { pane, sourcePath } = this.dragState;\n const source = this.resolveStackLocation(sourcePath);\n const target = this.resolveStackLocation(targetPath);\n if (!source || !target) {\n return;\n }\n if (zone === 'center' && this.pathsEqual(sourcePath, targetPath)) {\n if (!source.node.panes.includes(pane)) {\n return;\n }\n this.reorderPaneInLocation(source, pane);\n this.render();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n const paneTitle = source.node.titles?.[pane];\n const stackEmptied = this.removePaneFromLocation(source, pane, true);\n if (zone === 'center') {\n this.addPaneToLocation(target, pane);\n this.setActivePaneForLocation(target, pane);\n if (paneTitle) {\n target.node.titles = target.node.titles ? { ...target.node.titles } : {};\n target.node.titles[pane] = paneTitle;\n }\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.render();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n return;\n }\n const newStack = {\n kind: 'stack',\n panes: [pane],\n activePane: pane,\n };\n if (paneTitle) {\n newStack.titles = { [pane]: paneTitle };\n }\n if (target.context === 'docked') {\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, newStack, zone);\n }\n else {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.render();\n this.dispatchLayoutChanged();\n return;\n }\n floating.root = this.dockNodeBeside(floating.root, target.node, newStack, zone);\n floating.activePane = pane;\n }\n if (stackEmptied) {\n this.cleanupLocation(source);\n }\n this.render();\n this.dispatchLayoutChanged();\n if (this.dragState) {\n this.dragState.dropHandled = true;\n }\n }\n handleFloatingStackDrop(sourceIndex, targetPath, zone) {\n const source = this.floatingLayouts[sourceIndex];\n if (!source || !source.root) {\n return false;\n }\n const target = this.resolveStackLocation(targetPath);\n if (!target) {\n return false;\n }\n if (target.context === 'floating' && target.index === sourceIndex) {\n return false;\n }\n if (zone === 'center') {\n const { panes, titles } = this.collectFloatingPaneMetadata(source.root);\n if (panes.length === 0) {\n return false;\n }\n panes.forEach((pane) => {\n this.addPaneToLocation(target, pane);\n const title = titles[pane];\n if (title) {\n target.node.titles = target.node.titles ? { ...target.node.titles } : {};\n target.node.titles[pane] = title;\n }\n });\n const activePane = source.activePane && panes.includes(source.activePane)\n ? source.activePane\n : this.findFirstPaneName(source.root) ?? panes[0];\n if (activePane) {\n this.setActivePaneForLocation(target, activePane);\n }\n this.removeFloatingAt(sourceIndex);\n this.render();\n this.dispatchLayoutChanged();\n return true;\n }\n if (target.context === 'floating') {\n const floating = this.floatingLayouts[target.index];\n if (!floating) {\n return false;\n }\n floating.root = this.dockNodeBeside(floating.root, target.node, source.root, zone);\n floating.activePane = source.activePane ?? this.findFirstPaneName(source.root) ?? undefined;\n this.removeFloatingAt(sourceIndex);\n this.render();\n this.dispatchLayoutChanged();\n return true;\n }\n this.rootLayout = this.dockNodeBeside(this.rootLayout, target.node, source.root, zone);\n this.removeFloatingAt(sourceIndex);\n this.render();\n this.dispatchLayoutChanged();\n return true;\n }\n insertWeight(sizes, index, totalChildren) {\n const existingCount = totalChildren - 1;\n const normalized = this.normalizeSizesArray(sizes, existingCount);\n const newWeight = 1 / totalChildren;\n const remaining = 1 - newWeight;\n const result = [];\n for (let i = 0; i < totalChildren; i += 1) {\n if (i === index) {\n result.push(newWeight);\n }\n else {\n const sourceIndex = i < index ? i : i - 1;\n result.push(normalized[sourceIndex] * remaining);\n }\n }\n return result;\n }\n removePaneFromStack(stack, pane, skipCleanup = false) {\n stack.panes = stack.panes.filter((p) => p !== pane);\n if (!stack.panes.includes(stack.activePane ?? '')) {\n if (stack.panes.length > 0) {\n stack.activePane = stack.panes[0];\n }\n else {\n delete stack.activePane;\n }\n }\n if (stack.panes.length > 0) {\n return false;\n }\n if (skipCleanup) {\n return true;\n }\n this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, stack);\n return true;\n }\n findParentSplit(node, child) {\n if (!node || node === child) {\n return null;\n }\n if (node.kind !== 'split') {\n return null;\n }\n const index = node.children.indexOf(child);\n if (index !== -1) {\n return { parent: node, index };\n }\n for (let i = 0; i < node.children.length; i += 1) {\n const result = this.findParentSplit(node.children[i], child);\n if (result) {\n return result;\n }\n }\n return null;\n }\n computeDropZone(stack, point, zoneHint) {\n const hintedZone = this.isDropZone(zoneHint) ? zoneHint : null;\n if (hintedZone) {\n this.updateDropJoystickActiveZone(hintedZone);\n return hintedZone;\n }\n const pointZone = point &&\n Number.isFinite(point.clientX) &&\n Number.isFinite(point.clientY)\n ? this.findDropZoneByPoint(point.clientX, point.clientY)\n : null;\n if (pointZone) {\n this.updateDropJoystickActiveZone(pointZone);\n return pointZone;\n }\n if (this.dropJoystickTarget === stack) {\n this.updateDropJoystickActiveZone(null);\n }\n return null;\n }\n extractDropZoneFromEvent(event) {\n if (!event) {\n return null;\n }\n if (typeof event.composedPath === 'function') {\n const path = event.composedPath();\n for (const target of path) {\n if (target instanceof HTMLElement &&\n target.classList.contains('dock-drop-joystick__button')) {\n const zone = target.dataset?.['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n }\n if ('clientX' in event && 'clientY' in event) {\n const pointEvent = event;\n const zoneFromPoint = this.findDropZoneByPoint(pointEvent.clientX, pointEvent.clientY);\n if (zoneFromPoint) {\n return zoneFromPoint;\n }\n }\n return null;\n }\n findDropZoneByPoint(clientX, clientY) {\n if (!this.dropJoystickButtons ||\n this.dropJoystick.dataset['visible'] !== 'true' ||\n !this.dropJoystickTarget) {\n return null;\n }\n for (const button of this.dropJoystickButtons) {\n const rect = button.getBoundingClientRect();\n if (clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom) {\n const zone = button.dataset['zone'];\n if (this.isDropZone(zone)) {\n return zone;\n }\n }\n }\n return null;\n }\n updateDropJoystickActiveZone(zone) {\n this.dropJoystickButtons.forEach((button) => {\n const isActive = zone !== null && button.dataset['zone'] === zone;\n if (isActive) {\n button.dataset['active'] = 'true';\n }\n else {\n delete button.dataset['active'];\n }\n });\n if (zone) {\n this.dropJoystick.dataset['zone'] = zone;\n }\n else {\n delete this.dropJoystick.dataset['zone'];\n }\n }\n isDropZone(value) {\n return value === 'left' || value === 'right' || value === 'top' || value === 'bottom' || value === 'center';\n }\n showDropIndicator(stack, zone) {\n const targetPath = this.parsePath(stack.dataset['path']);\n const sourcePath = this.dragState?.sourcePath ?? null;\n if (targetPath && sourcePath && this.isOrIsAncestorOf(targetPath, sourcePath)) {\n // Don't show any drop indicators on the pane being dragged.\n return;\n }\n const rect = stack.getBoundingClientRect();\n const hostRect = this.getBoundingClientRect();\n const indicator = this.dropIndicator;\n const joystick = this.dropJoystick;\n joystick.hidden = false;\n const path = this.parsePath(stack.dataset['path']);\n let overlayZ = 100;\n if (path && path.type === 'floating') {\n overlayZ = this.getFloatingPaneZIndex(path.index) + 100;\n }\n indicator.style.zIndex = String(overlayZ);\n joystick.style.zIndex = String(overlayZ + 1);\n let left = rect.left - hostRect.left;\n let top = rect.top - hostRect.top;\n let width = rect.width;\n let height = rect.height;\n const portion = 0.5;\n if (zone) {\n switch (zone) {\n case 'left':\n width = rect.width * portion;\n break;\n case 'right':\n width = rect.width * portion;\n left += rect.width * (1 - portion);\n break;\n case 'top':\n height = rect.height * portion;\n break;\n case 'bottom':\n height = rect.height * portion;\n top += rect.height * (1 - portion);\n break;\n default:\n break;\n }\n indicator.style.left = `${left}px`;\n indicator.style.top = `${top}px`;\n indicator.style.width = `${width}px`;\n indicator.style.height = `${height}px`;\n indicator.dataset['visible'] = 'true';\n }\n else {\n indicator.dataset['visible'] = 'false';\n }\n joystick.style.left = `${rect.left - hostRect.left + rect.width / 2}px`;\n joystick.style.top = `${rect.top - hostRect.top + rect.height / 2}px`;\n joystick.dataset['visible'] = 'true';\n this.dropJoystick.style.display = 'grid';\n joystick.dataset['path'] = stack.dataset['path'] ?? '';\n this.dropJoystickTarget = stack;\n this.updateDropJoystickActiveZone(zone);\n }\n hideDropIndicator() {\n this.dropIndicator.dataset['visible'] = 'false';\n this.dropJoystick.dataset['visible'] = 'false';\n this.dropJoystick.style.display = 'none';\n delete this.dropJoystick.dataset['path'];\n this.dropJoystickTarget = null;\n this.updateDropJoystickActiveZone(null);\n }\n findStackAtPoint(clientX, clientY) {\n const shadow = this.shadowRoot;\n if (!shadow) {\n return null;\n }\n const elements = shadow.elementsFromPoint(clientX, clientY);\n for (const element of elements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element.classList.contains('dock-stack')) {\n return element;\n }\n if (this.dropJoystickTarget &&\n (element.classList.contains('dock-drop-joystick') ||\n element.classList.contains('dock-drop-joystick__button') ||\n element.classList.contains('dock-drop-joystick__spacer'))) {\n return this.dropJoystickTarget;\n }\n }\n return null;\n }\n findStackElement(event) {\n const path = event.composedPath();\n for (const target of path) {\n if (!(target instanceof HTMLElement)) {\n continue;\n }\n if (target.classList.contains('dock-stack')) {\n return target;\n }\n if (this.dropJoystickTarget &&\n (target.classList.contains('dock-drop-joystick') ||\n target.classList.contains('dock-drop-joystick__button') ||\n target.classList.contains('dock-drop-joystick__spacer'))) {\n return this.dropJoystickTarget;\n }\n }\n return null;\n }\n activatePane(stack, paneName, path) {\n stack.dataset['activePane'] = paneName;\n const headerButtons = stack.querySelectorAll('.dock-tab');\n headerButtons.forEach((button) => {\n const isSelected = button.dataset['pane'] === paneName;\n button.classList.toggle('dock-tab--active', isSelected);\n button.setAttribute('aria-selected', String(isSelected));\n });\n const panes = stack.querySelectorAll('.dock-stack__pane');\n panes.forEach((pane) => {\n if (pane.dataset['pane'] === paneName) {\n pane.removeAttribute('hidden');\n }\n else {\n pane.setAttribute('hidden', '');\n }\n });\n const location = this.resolveStackLocation(path);\n if (!location) {\n return;\n }\n location.node.activePane = paneName;\n if (path.type === 'floating') {\n const floating = this.floatingLayouts[path.index];\n if (floating) {\n floating.activePane = paneName;\n }\n this.updateFloatingWindowTitle(path.index);\n }\n this.dispatchLayoutChanged();\n }\n getNodeAtPath(root, path) {\n if (!root) {\n return null;\n }\n let current = root;\n if (path.length === 0) {\n return current;\n }\n for (const segment of path) {\n if (!current || current.kind !== 'split') {\n return null;\n }\n current = current.children[segment] ?? null;\n }\n return current;\n }\n resolveSplitNode(path) {\n if (path.type === 'docked') {\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n const floating = this.floatingLayouts[path.index];\n if (!floating || !floating.root) {\n return null;\n }\n const node = this.getNodeAtPath(floating.root, path.segments);\n return node && node.kind === 'split' ? node : null;\n }\n replaceNodeInTree(root, target, replacement) {\n if (!root) {\n return replacement;\n }\n if (root === target) {\n return replacement;\n }\n const parentInfo = this.findParentSplit(root, target);\n if (!parentInfo) {\n return root;\n }\n parentInfo.parent.children[parentInfo.index] = replacement;\n this.normalizeSplitNode(parentInfo.parent);\n return root;\n }\n cleanupEmptyStackInTree(root, stack) {\n if (!root || stack.panes.length > 0) {\n return root;\n }\n const parentInfo = this.findParentSplit(root, stack);\n if (!parentInfo) {\n return root === stack ? null : root;\n }\n const parent = parentInfo.parent;\n const index = parent.children.indexOf(stack);\n if (index === -1) {\n return root;\n }\n parent.children.splice(index, 1);\n if (Array.isArray(parent.sizes)) {\n parent.sizes.splice(index, 1);\n }\n this.normalizeSplitNode(parent);\n return this.cleanupSplitIfNecessary(root, parent);\n }\n cleanupSplitIfNecessary(root, split) {\n if (split.children.length === 1) {\n return this.replaceNodeInTree(root, split, split.children[0]);\n }\n if (split.children.length === 0) {\n const parentInfo = this.findParentSplit(root, split);\n if (!parentInfo) {\n return null;\n }\n const parent = parentInfo.parent;\n const index = parent.children.indexOf(split);\n if (index !== -1) {\n parent.children.splice(index, 1);\n if (Array.isArray(parent.sizes)) {\n parent.sizes.splice(index, 1);\n }\n this.normalizeSplitNode(parent);\n return this.cleanupSplitIfNecessary(root, parent);\n }\n }\n return root;\n }\n dockNodeBeside(root, targetNode, newNode, zone) {\n const orientation = zone === 'left' || zone === 'right' ? 'horizontal' : 'vertical';\n const placeBefore = zone === 'left' || zone === 'top';\n const parentInfo = this.findParentSplit(root, targetNode);\n if (parentInfo && parentInfo.parent.direction === orientation) {\n const insertIndex = placeBefore ? parentInfo.index : parentInfo.index + 1;\n parentInfo.parent.children.splice(insertIndex, 0, newNode);\n parentInfo.parent.sizes = this.insertWeight(parentInfo.parent.sizes, insertIndex, parentInfo.parent.children.length);\n return root ?? newNode;\n }\n const split = {\n kind: 'split',\n direction: orientation,\n children: placeBefore ? [newNode, targetNode] : [targetNode, newNode],\n sizes: [0.5, 0.5],\n };\n return this.replaceNodeInTree(root, targetNode, split);\n }\n forEachStack(node, visitor, path = []) {\n if (!node) {\n return;\n }\n if (node.kind === 'stack') {\n visitor(node, path);\n return;\n }\n node.children.forEach((child, index) => this.forEachStack(child, visitor, [...path, index]));\n }\n findStackContainingPane(node, pane) {\n let result = null;\n this.forEachStack(node, (stack) => {\n if (!result && stack.panes.includes(pane)) {\n result = stack;\n }\n });\n return result;\n }\n findFirstPaneName(node) {\n let found = null;\n this.forEachStack(node, (stack) => {\n if (found || stack.panes.length === 0) {\n return;\n }\n if (stack.activePane && stack.panes.includes(stack.activePane)) {\n found = stack.activePane;\n }\n else {\n found = stack.panes[0];\n }\n });\n return found;\n }\n collectFloatingPaneMetadata(node) {\n const panes = [];\n const titles = {};\n this.forEachStack(node, (stack) => {\n stack.panes.forEach((pane) => {\n panes.push(pane);\n const title = stack.titles?.[pane];\n if (title) {\n titles[pane] = title;\n }\n });\n });\n return { panes, titles };\n }\n normalizeFloatingLayout(layout) {\n const bounds = layout.bounds ?? { left: 0, top: 0, width: 320, height: 200 };\n const normalizedBounds = {\n left: Number.isFinite(bounds.left) ? bounds.left : 0,\n top: Number.isFinite(bounds.top) ? bounds.top : 0,\n width: Number.isFinite(bounds.width) ? Math.max(bounds.width, 160) : 320,\n height: Number.isFinite(bounds.height) ? Math.max(bounds.height, 120) : 200,\n };\n let root = layout.root ? this.cloneLayoutNode(layout.root) : null;\n if (!root) {\n const panes = Array.isArray(layout.panes) ? [...layout.panes] : [];\n if (panes.length > 0) {\n const active = layout.activePane && panes.includes(layout.activePane)\n ? layout.activePane\n : panes[0];\n root = {\n kind: 'stack',\n panes,\n titles: layout.titles ? { ...layout.titles } : undefined,\n activePane: active,\n };\n }\n }\n return {\n id: layout.id,\n bounds: normalizedBounds,\n zIndex: layout.zIndex,\n root,\n activePane: layout.activePane,\n };\n }\n formatPath(path) {\n if (path.type === 'floating') {\n const suffix = path.segments.length > 0\n ? `/${path.segments.map((segment) => segment.toString()).join('/')}`\n : '';\n return `f:${path.index}${suffix}`;\n }\n const suffix = path.segments.join('/');\n return suffix.length > 0 ? `d:${suffix}` : 'd:';\n }\n clonePath(path) {\n if (path.type === 'floating') {\n return { type: 'floating', index: path.index, segments: [...path.segments] };\n }\n return { type: 'docked', segments: [...path.segments] };\n }\n parsePath(path) {\n if (!path) {\n return null;\n }\n if (path.startsWith('f:')) {\n const remainder = path.slice(2);\n const [indexPart, ...segmentParts] = remainder.split('/');\n const index = Number.parseInt(indexPart, 10);\n if (!Number.isFinite(index)) {\n return null;\n }\n const segments = segmentParts\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n return { type: 'floating', index, segments };\n }\n const normalized = path.startsWith('d:') ? path.slice(2) : path;\n if (normalized.length === 0) {\n return { type: 'docked', segments: [] };\n }\n const segments = normalized\n .split('/')\n .filter((segment) => segment.length > 0)\n .map((segment) => Number.parseInt(segment, 10))\n .filter((value) => Number.isFinite(value));\n return { type: 'docked', segments };\n }\n pathsEqual(a, b) {\n if (a.type !== b.type) {\n return false;\n }\n if (a.type === 'floating') {\n const other = b;\n if (a.index !== other.index) {\n return false;\n }\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n const other = b;\n if (a.segments.length !== other.segments.length) {\n return false;\n }\n return a.segments.every((value, index) => value === other.segments[index]);\n }\n isOrIsAncestorOf(ancestor, descendant) {\n if (ancestor.type !== descendant.type) {\n return false;\n }\n if (ancestor.type === 'floating') {\n if (descendant.index !== ancestor.index) {\n return false;\n }\n }\n if (ancestor.segments.length > descendant.segments.length) {\n return false;\n }\n return ancestor.segments.every((segment, i) => segment === descendant.segments[i]);\n }\n countPanesInTree(node) {\n if (!node) {\n return 0;\n }\n if (node.kind === 'stack') {\n return node.panes.length;\n }\n return node.children.reduce((total, child) => total + this.countPanesInTree(child), 0);\n }\n resolveStackLocation(path) {\n if (path.type === 'floating') {\n const layout = this.floatingLayouts[path.index];\n if (!layout || !layout.root) {\n return null;\n }\n const node = this.getNodeAtPath(layout.root, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n return { context: 'floating', index: path.index, path: [...path.segments], node };\n }\n const node = this.getNodeAtPath(this.rootLayout, path.segments);\n if (!node || node.kind !== 'stack') {\n return null;\n }\n return { context: 'docked', path: [...path.segments], node };\n }\n removePaneFromLocation(location, pane, skipCleanup = false) {\n if (location.context === 'docked') {\n return this.removePaneFromStack(location.node, pane, skipCleanup);\n }\n return this.removePaneFromFloating(location.index, location.path, pane, skipCleanup);\n }\n addPaneToLocation(location, pane) {\n const panes = location.node.panes;\n const existingIndex = panes.indexOf(pane);\n if (existingIndex !== -1) {\n panes.splice(existingIndex, 1);\n }\n panes.push(pane);\n }\n setActivePaneForLocation(location, pane) {\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n cleanupLocation(location) {\n if (location.context === 'docked') {\n this.rootLayout = this.cleanupEmptyStackInTree(this.rootLayout, location.node);\n }\n else {\n const floating = this.floatingLayouts[location.index];\n if (!floating) {\n return;\n }\n floating.root = this.cleanupEmptyStackInTree(floating.root, location.node);\n if (!floating.root) {\n this.removeFloatingAt(location.index);\n }\n }\n }\n reorderPaneInLocation(location, pane) {\n const panes = location.node.panes;\n const index = panes.indexOf(pane);\n if (index === -1) {\n return;\n }\n panes.splice(index, 1);\n panes.push(pane);\n location.node.activePane = pane;\n if (location.context === 'floating') {\n const floating = this.floatingLayouts[location.index];\n if (floating) {\n floating.activePane = pane;\n }\n }\n }\n removeFloatingAt(index) {\n if (index < 0 || index >= this.floatingLayouts.length) {\n return;\n }\n this.floatingLayouts.splice(index, 1);\n }\n removePaneFromFloating(index, path, pane, skipCleanup = false) {\n const floating = this.floatingLayouts[index];\n if (!floating || !floating.root) {\n return false;\n }\n const node = this.getNodeAtPath(floating.root, path);\n if (!node || node.kind !== 'stack') {\n return false;\n }\n node.panes = node.panes.filter((p) => p !== pane);\n if (!node.panes.includes(node.activePane ?? '')) {\n if (node.panes.length > 0) {\n node.activePane = node.panes[0];\n }\n else {\n delete node.activePane;\n }\n }\n if (floating.activePane === pane) {\n const fallback = this.findFirstPaneName(floating.root);\n if (fallback) {\n floating.activePane = fallback;\n }\n else {\n delete floating.activePane;\n }\n }\n if (node.panes.length > 0) {\n return false;\n }\n if (skipCleanup) {\n return true;\n }\n floating.root = this.cleanupEmptyStackInTree(floating.root, node);\n if (!floating.root) {\n this.removeFloatingAt(index);\n }\n return true;\n }\n normalizeSizesArray(sizes, count) {\n if (count <= 0) {\n return [];\n }\n if (!Array.isArray(sizes) || sizes.length !== count) {\n return Array.from({ length: count }, () => 1 / count);\n }\n const normalized = sizes.map((value) => (Number.isFinite(value) ? Math.max(value, 0) : 0));\n const total = normalized.reduce((acc, value) => acc + value, 0);\n if (total <= 0) {\n return Array.from({ length: count }, () => 1 / count);\n }\n return normalized.map((value) => value / total);\n }\n normalizeSplitNode(split) {\n split.sizes = this.normalizeSizesArray(split.sizes, split.children.length);\n }\n dispatchLayoutChanged() {\n this.dispatchEvent(new CustomEvent('dock-layout-changed', {\n detail: this.snapshot,\n bubbles: true,\n composed: true,\n }));\n }\n cloneLayoutNode(layout) {\n if (!layout) {\n return null;\n }\n return JSON.parse(JSON.stringify(layout));\n }\n cloneFloatingArray(layouts) {\n return JSON.parse(JSON.stringify(layouts));\n }\n}\nconst tagName = 'mint-dock-manager';\nif (typeof customElements !== 'undefined' && !customElements.get(tagName)) {\n customElements.define(tagName, MintDockManagerElement);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWludC1kb2NrLW1hbmFnZXIuZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9zcmMvbGliL3dlYi1jb21wb25lbnRzL21pbnQtZG9jay1tYW5hZ2VyLmVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBLE1BQU0sWUFBWSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2YXBCLENBQUM7QUFFRixJQUFJLGNBQWMsR0FBK0IsSUFBSSxDQUFDO0FBQ3RELElBQUksc0JBQXNCLEdBQW9CLElBQUksQ0FBQztBQUVuRCxTQUFTLGNBQWMsQ0FBQyxXQUFxQjtJQUMzQyxJQUFJLENBQUMsY0FBYyxJQUFJLHNCQUFzQixLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzlELGNBQWMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELGNBQWMsQ0FBQyxTQUFTLEdBQUcsWUFB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S0FBSyxXQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDMUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1xuICBEb2NrRmxvYXRpbmdTdGFja0xheW91dCxcbiAgRG9ja0xheW91dCxcbiAgRG9ja0xheW91dE5vZGUsXG4gIERvY2tMYXlvdXRTbmFwc2hvdCxcbiAgRG9ja1NwbGl0Tm9kZSxcbiAgRG9ja1N0YWNrTm9kZSxcbn0gZnJvbSAnLi4vdHlwZXMvZG9jay1sYXlvdXQnO1xuXG50eXBlIERvY2tQYXRoID1cbiAgfCB7IHR5cGU6ICdkb2NrZWQnOyBzZWdtZW50czogbnVtYmVyW10gfVxuICB8IHsgdHlwZTogJ2Zsb2F0aW5nJzsgaW5kZXg6IG51bWJlcjsgc2VnbWVudHM6IG51bWJlcltdIH07XG5cbnR5cGUgRG9ja2VkTG9jYXRpb24gPSB7IGNvbnRleHQ6ICdkb2NrZWQnOyBwYXRoOiBudW1iZXJbXTsgbm9kZTogRG9ja1N0YWNrTm9kZSB9O1xudHlwZSBGbG9hdGluZ0xvY2F0aW9uID0ge1xuICBjb250ZXh0OiAnZmxvYXRpbmcnO1xuICBpbmRleDogbnVtYmVyO1xuICBwYXRoOiBudW1iZXJbXTtcbiAgbm9kZTogRG9ja1N0YWNrTm9kZTtcbn07XG5cbnR5cGUgUmVzb2x2ZWRMb2NhdGlvbiA9IERvY2tlZExvY2F0aW9uIHwgRmxvYXRpbmdMb2NhdGlvbjtcblxudHlwZSBEcm9wWm9uZSA9ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XG5cbnR5cGUgRmxvYXRpbmdSZXNpemVFZGdlcyA9IHtcbiAgaG9yaXpvbnRhbDogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdub25lJztcbiAgdmVydGljYWw6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbm9uZSc7XG59O1xuXG5jb25zdCB0ZW1wbGF0ZUh0bWwgPSBgXG4gIDxzdHlsZT5cbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgY29udGFpbjogbGF5b3V0IHBhaW50IHNpemUgc3R5bGU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB9XG5cbiAgICAuZG9jay1yb290LFxuICAgIC5kb2NrLWRvY2tlZCxcbiAgICAuZG9jay1zcGxpdCxcbiAgICAuZG9jay1zcGxpdF9fY2hpbGQsXG4gICAgLmRvY2stc3RhY2ssXG4gICAgLmRvY2stc3RhY2tfX2NvbnRlbnQsXG4gICAgLmRvY2stc3RhY2tfX3BhbmUge1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgfVxuXG4gICAgLmRvY2stcm9vdCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICAuZG9jay1kb2NrZWQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgei1pbmRleDogMDtcbiAgICB9XG5cbiAgICAuZG9jay1mbG9hdGluZy1sYXllciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBpbnNldDogMDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgei1pbmRleDogNTtcbiAgICB9XG5cbiAgICAuZG9jay1mbG9hdGluZyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAzMnB4IHJnYmEoMTUsIDIzLCA0MiwgMC4yNSk7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgbWluLXdpZHRoOiAxMnJlbTtcbiAgICAgIG1pbi1oZWlnaHQ6IDhyZW07XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmdfX2Nocm9tZSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMC41cmVtO1xuICAgICAgcGFkZGluZzogMC4zNXJlbSAwLjc1cmVtO1xuICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxuICAgICAgICB0byBib3R0b20sXG4gICAgICAgIHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC42KSxcbiAgICAgICAgcmdiYSgxNDgsIDE2MywgMTg0LCAwLjI1KVxuICAgICAgKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE0OCwgMTYzLCAxODQsIDAuNSk7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmdfX3RpdGxlIHtcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogcmdiYSgzMCwgNDEsIDU5LCAwLjk1KTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmcgPiAuZG9jay1zdGFjayB7XG4gICAgICBmbGV4OiAxIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMTJyZW07XG4gICAgICBtaW4taGVpZ2h0OiA4cmVtO1xuICAgIH1cblxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4yNSk7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmdfX3Jlc2l6ZXI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjQpO1xuICAgIH1cblxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyLS10b3AsXG4gICAgLmRvY2stZmxvYXRpbmdfX3Jlc2l6ZXItLWJvdHRvbSB7XG4gICAgICBsZWZ0OiAwLjc1cmVtO1xuICAgICAgcmlnaHQ6IDAuNzVyZW07XG4gICAgICBoZWlnaHQ6IDAuNXJlbTtcbiAgICB9XG5cbiAgICAuZG9jay1mbG9hdGluZ19fcmVzaXplci0tdG9wIHtcbiAgICAgIHRvcDogMDtcbiAgICAgIGN1cnNvcjogbi1yZXNpemU7XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmdfX3Jlc2l6ZXItLWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgICBjdXJzb3I6IHMtcmVzaXplO1xuICAgIH1cblxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyLS1sZWZ0LFxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyLS1yaWdodCB7XG4gICAgICB0b3A6IDEuNzVyZW07XG4gICAgICBib3R0b206IDAuNzVyZW07XG4gICAgICB3aWR0aDogMC41cmVtO1xuICAgIH1cblxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyLS1sZWZ0IHtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBjdXJzb3I6IHctcmVzaXplO1xuICAgIH1cblxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyLS1yaWdodCB7XG4gICAgICByaWdodDogMDtcbiAgICAgIGN1cnNvcjogZS1yZXNpemU7XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmdfX3Jlc2l6ZXItLXRvcC1sZWZ0LFxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyLS10b3AtcmlnaHQsXG4gICAgLmRvY2stZmxvYXRpbmdfX3Jlc2l6ZXItLWJvdHRvbS1sZWZ0LFxuICAgIC5kb2NrLWZsb2F0aW5nX19yZXNpemVyLS1ib3R0b20tcmlnaHQge1xuICAgICAgd2lkdGg6IDAuNzVyZW07XG4gICAgICBoZWlnaHQ6IDAuNzVyZW07XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmdfX3Jlc2l6ZXItLXRvcC1sZWZ0IHtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBjdXJzb3I6IG53LXJlc2l6ZTtcbiAgICB9XG5cbiAgICAuZG9jay1mbG9hdGluZ19fcmVzaXplci0tdG9wLXJpZ2h0IHtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgY3Vyc29yOiBuZS1yZXNpemU7XG4gICAgfVxuXG4gICAgLmRvY2stZmxvYXRpbmdfX3Jlc2l6ZXItLWJvdHRvbS1sZWZ0IHtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBjdXJzb3I6IHN3LXJlc2l6ZTtcbiAgICB9XG5cbiAgICAuZG9jay1mbG9hdGluZ19fcmVzaXplci0tYm90dG9tLXJpZ2h0IHtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgY3Vyc29yOiBzZS1yZXNpemU7XG4gICAgfVxuXG4gICAgLmRvY2stc3BsaXQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDEgMSAwO1xuICAgICAgZ2FwOiAwLjI1cmVtO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC5kb2NrLXNwbGl0W2RhdGEtZGlyZWN0aW9uPVwidmVydGljYWxcIl0ge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG5cbiAgICAuZG9jay1zcGxpdFtkYXRhLWRpcmVjdGlvbj1cImhvcml6b250YWxcIl0ge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICB9XG5cbiAgICAuZG9jay1zcGxpdF9fY2hpbGQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDEgMSAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC5kb2NrLXNwbGl0X19kaXZpZGVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTIwbXMgZWFzZTtcbiAgICB9XG5cbiAgICAuZG9jay1zcGxpdFtkYXRhLWRpcmVjdGlvbj1cImhvcml6b250YWxcIl0gPiAuZG9jay1zcGxpdF9fZGl2aWRlciB7XG4gICAgICB3aWR0aDogMC41cmVtO1xuICAgICAgY3Vyc29yOiBjb2wtcmVzaXplO1xuICAgIH1cblxuICAgIC5kb2NrLXNwbGl0W2RhdGEtZGlyZWN0aW9uPVwidmVydGljYWxcIl0gPiAuZG9jay1zcGxpdF9fZGl2aWRlciB7XG4gICAgICBoZWlnaHQ6IDAuNXJlbTtcbiAgICAgIGN1cnNvcjogcm93LXJlc2l6ZTtcbiAgICB9XG5cbiAgICAuZG9jay1zcGxpdF9fZGl2aWRlcjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIH1cblxuICAgIC5kb2NrLXNwbGl0W2RhdGEtZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXSA+IC5kb2NrLXNwbGl0X19kaXZpZGVyOjphZnRlciB7XG4gICAgICB3aWR0aDogMC4xMjVyZW07XG4gICAgICBoZWlnaHQ6IDYwJTtcbiAgICB9XG5cbiAgICAuZG9jay1zcGxpdFtkYXRhLWRpcmVjdGlvbj1cInZlcnRpY2FsXCJdID4gLmRvY2stc3BsaXRfX2RpdmlkZXI6OmFmdGVyIHtcbiAgICAgIHdpZHRoOiA2MCU7XG4gICAgICBoZWlnaHQ6IDAuMTI1cmVtO1xuICAgIH1cblxuICAgIC5kb2NrLXNwbGl0X19kaXZpZGVyOmhvdmVyLFxuICAgIC5kb2NrLXNwbGl0X19kaXZpZGVyOmZvY3VzLXZpc2libGUsXG4gICAgLmRvY2stc3BsaXRfX2RpdmlkZXJbZGF0YS1yZXNpemluZz0ndHJ1ZSddIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjM1KTtcbiAgICB9XG5cbiAgICAuZG9jay1zdGFjayB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDEgMSAwO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTtcbiAgICB9XG5cbiAgICAuZG9jay1zdGFja19faGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBnYXA6IDAuMjVyZW07XG4gICAgICBwYWRkaW5nOiAwLjI1cmVtO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgIH1cblxuICAgIC5kb2NrLXRhYiB7XG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICBjdXJzb3I6IGdyYWI7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE2MG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmRvY2stdGFiOmFjdGl2ZSB7XG4gICAgICBjdXJzb3I6IGdyYWJiaW5nO1xuICAgIH1cblxuICAgIC5kb2NrLXRhYjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIH1cblxuICAgIC5kb2NrLXRhYjpmb2N1cy12aXNpYmxlIHtcbiAgICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC44KTtcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAxcHg7XG4gICAgfVxuXG4gICAgLmRvY2stdGFiLS1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMTUpO1xuICAgIH1cblxuICAgIC5kb2NrLXN0YWNrX19jb250ZW50IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLmRvY2stc3RhY2tfX3BhbmUge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZmxleDogMSAxIDEwMCU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLmRvY2stc3RhY2tfX3BhbmVbaGlkZGVuXSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmRvY2stZHJvcC1pbmRpY2F0b3Ige1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC45KTtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgfVxuXG4gICAgLmRvY2stZHJvcC1pbmRpY2F0b3JbZGF0YS12aXNpYmxlPSd0cnVlJ10ge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAuZG9jay1kcm9wLWpveXN0aWNrIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW4tY29udGVudCk7XG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgzLCBtaW4tY29udGVudCk7XG4gICAgICBnYXA6IDAuMTI1cmVtO1xuICAgICAgcGFkZGluZzogMC4xMjVyZW07XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC4xNSk7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMTUsIDIzLCA0MiwgMC4yNSk7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgei1pbmRleDogMTEwO1xuICAgIH1cblxuICAgIC5kb2NrLWRyb3Atam95c3RpY2tfX3NwYWNlciB7XG4gICAgICB3aWR0aDogMS43NXJlbTtcbiAgICAgIGhlaWdodDogMS43NXJlbTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cblxuICAgIC5kb2NrLWRyb3Atam95c3RpY2tfX2J1dHRvbiB7XG4gICAgICB3aWR0aDogMS43NXJlbTtcbiAgICAgIGhlaWdodDogMS43NXJlbTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYm9yZGVyLXJhZGl1czogMC4zNzVyZW07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC40KTtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgIGNvbG9yOiByZ2JhKDMwLCA2NCwgMTc1LCAwLjkpO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5kb2NrLWRyb3Atam95c3RpY2tfX2J1dHRvbltkYXRhLWFjdGl2ZT0ndHJ1ZSddLFxuICAgIC5kb2NrLWRyb3Atam95c3RpY2tfX2J1dHRvbjpob3ZlcixcbiAgICAuZG9jay1kcm9wLWpveXN0aWNrX19idXR0b246Zm9jdXMtdmlzaWJsZSB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4yNSk7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjgpO1xuICAgICAgY29sb3I6IHJnYmEoMzAsIDY0LCAxNzUsIDEpO1xuICAgIH1cblxuICAgIC5kb2NrLWRyb3Atam95c3RpY2tfX2J1dHRvbjpmb2N1cy12aXNpYmxlIHtcbiAgICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC45KTtcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAxcHg7XG4gICAgfVxuXG4gICAgLmRvY2stZHJvcC1qb3lzdGlja19fYnV0dG9uW2RhdGEtem9uZT0nY2VudGVyJ10ge1xuICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgIH1cblxuICAgIDo6c2xvdHRlZCgqKSB7XG4gICAgICBmbGV4OiAxIDEgYXV0bztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICB9XG4gIDwvc3R5bGU+XG4gIDxkaXYgY2xhc3M9XCJkb2NrLXJvb3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jay1kb2NrZWRcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jay1mbG9hdGluZy1sYXllclwiPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRvY2stZHJvcC1pbmRpY2F0b3JcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRvY2stZHJvcC1qb3lzdGlja1wiIGRhdGEtdmlzaWJsZT1cImZhbHNlXCI+XG4gICAgPGRpdiBjbGFzcz1cImRvY2stZHJvcC1qb3lzdGlja19fc3BhY2VyXCI+PC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJkb2NrLWRyb3Atam95c3RpY2tfX2J1dHRvblwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGRhdGEtem9uZT1cInRvcFwiXG4gICAgICBhcmlhLWxhYmVsPVwiRG9jayB0byB0b3BcIlxuICAgID5cbiAgICAgIOKGkVxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJkb2NrLWRyb3Atam95c3RpY2tfX3NwYWNlclwiPjwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZG9jay1kcm9wLWpveXN0aWNrX19idXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkYXRhLXpvbmU9XCJsZWZ0XCJcbiAgICAgIGFyaWEtbGFiZWw9XCJEb2NrIHRvIGxlZnRcIlxuICAgID5cbiAgICAgIOKGkFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZG9jay1kcm9wLWpveXN0aWNrX19idXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkYXRhLXpvbmU9XCJjZW50ZXJcIlxuICAgICAgYXJpYS1sYWJlbD1cIkRvY2sgdG8gY2VudGVyXCJcbiAgICA+XG4gICAgICDigKJcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImRvY2stZHJvcC1qb3lzdGlja19fYnV0dG9uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGF0YS16b25lPVwicmlnaHRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkRvY2sgdG8gcmlnaHRcIlxuICAgID5cbiAgICAgIOKGklxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJkb2NrLWRyb3Atam95c3RpY2tfX3NwYWNlclwiPjwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZG9jay1kcm9wLWpveXN0aWNrX19idXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkYXRhLXpvbmU9XCJib3R0b21cIlxuICAgICAgYXJpYS1sYWJlbD1cIkRvY2sgdG8gYm90dG9tXCJcbiAgICA+XG4gICAgICDihpNcbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jay1kcm9wLWpveXN0aWNrX19zcGFjZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG5gO1xuXG5sZXQgY2FjaGVkVGVtcGxhdGU6IEhUTUxUZW1wbGF0ZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBjYWNoZWRUZW1wbGF0ZURvY3VtZW50OiBEb2N1bWVudCB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBlbnN1cmVUZW1wbGF0ZShkb2N1bWVudFJlZjogRG9jdW1lbnQpOiBIVE1MVGVtcGxhdGVFbGVtZW50IHtcbiAgaWYgKCFjYWNoZWRUZW1wbGF0ZSB8fCBjYWNoZWRUZW1wbGF0ZURvY3VtZW50ICE9PSBkb2N1bWVudFJlZikge1xuICAgIGNhY2hlZFRlbXBsYXRlID0gZG9jdW1lbnRSZWYuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICBjYWNoZWRUZW1wbGF0ZS5pbm5lckhUTUwgPSB0ZW1wbGF0ZUh0bWw7XG4gICAgY2FjaGVkVGVtcGxhdGVEb2N1bWVudCA9IGRvY3VtZW50UmVmO1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZFRlbXBsYXRlO1xufVxuXG5leHBvcnQgY2xhc3MgTWludERvY2tNYW5hZ2VyRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgcHJpdmF0ZSBzdGF0aWMgZG9jdW1lbnRSZWY6IERvY3VtZW50IHwgbnVsbCA9XG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogbnVsbDtcblxuICBzdGF0aWMgY29uZmlndXJlRG9jdW1lbnQoZG9jdW1lbnRSZWY6IERvY3VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmIChkb2N1bWVudFJlZikge1xuICAgICAgTWludERvY2tNYW5hZ2VyRWxlbWVudC5kb2N1bWVudFJlZiA9IGRvY3VtZW50UmVmO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydsYXlvdXQnXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlQ291bnRlciA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFJlZjogRG9jdW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2luZG93UmVmOiAoV2luZG93ICYgdHlwZW9mIGdsb2JhbFRoaXMpIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSByb290RWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY2tlZEVsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBmbG9hdGluZ0xheWVyRWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRyb3BJbmRpY2F0b3I6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRyb3BKb3lzdGljazogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZHJvcEpveXN0aWNrQnV0dG9uczogSFRNTEJ1dHRvbkVsZW1lbnRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgZHJvcEpveXN0aWNrVGFyZ2V0OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJvb3RMYXlvdXQ6IERvY2tMYXlvdXROb2RlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmxvYXRpbmdMYXlvdXRzOiBEb2NrRmxvYXRpbmdTdGFja0xheW91dFtdID0gW107XG4gIHByaXZhdGUgcGVuZGluZ1RhYkRyYWdNZXRyaWNzOlxuICAgIHwge1xuICAgICAgICBwb2ludGVyT2Zmc2V0WDogbnVtYmVyO1xuICAgICAgICBwb2ludGVyT2Zmc2V0WTogbnVtYmVyO1xuICAgICAgICBsZWZ0OiBudW1iZXI7XG4gICAgICAgIHRvcDogbnVtYmVyO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICAgIH1cbiAgICB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlc2l6ZVN0YXRlOlxuICAgIHwge1xuICAgICAgICBwYXRoOiBEb2NrUGF0aDtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgcG9pbnRlcklkOiBudW1iZXI7XG4gICAgICAgIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuICAgICAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgICAgICBkaXZpZGVyOiBIVE1MRWxlbWVudDtcbiAgICAgICAgc3RhcnRQb3M6IG51bWJlcjtcbiAgICAgICAgaW5pdGlhbFNpemVzOiBudW1iZXJbXTtcbiAgICAgICAgYmVmb3JlU2l6ZTogbnVtYmVyO1xuICAgICAgICBhZnRlclNpemU6IG51bWJlcjtcbiAgICAgIH1cbiAgICB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRyYWdTdGF0ZToge1xuICAgIHBhbmU6IHN0cmluZztcbiAgICBzb3VyY2VQYXRoOiBEb2NrUGF0aDtcbiAgICBmbG9hdGluZ0luZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIHBvaW50ZXJPZmZzZXRYOiBudW1iZXI7XG4gICAgcG9pbnRlck9mZnNldFk6IG51bWJlcjtcbiAgICBkcm9wSGFuZGxlZDogYm9vbGVhbjtcbiAgfSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGZsb2F0aW5nRHJhZ1N0YXRlOlxuICAgIHwge1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBwb2ludGVySWQ6IG51bWJlcjtcbiAgICAgICAgc3RhcnRYOiBudW1iZXI7XG4gICAgICAgIHN0YXJ0WTogbnVtYmVyO1xuICAgICAgICBzdGFydExlZnQ6IG51bWJlcjtcbiAgICAgICAgc3RhcnRUb3A6IG51bWJlcjtcbiAgICAgICAgd3JhcHBlcjogSFRNTEVsZW1lbnQ7XG4gICAgICAgIGhhbmRsZTogSFRNTEVsZW1lbnQ7XG4gICAgICAgIGRyb3BUYXJnZXQ/OiB7IHBhdGg6IERvY2tQYXRoOyB6b25lOiBEcm9wWm9uZSB9O1xuICAgICAgfVxuICAgIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmxvYXRpbmdSZXNpemVTdGF0ZTpcbiAgICB8IHtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgcG9pbnRlcklkOiBudW1iZXI7XG4gICAgICAgIHN0YXJ0WDogbnVtYmVyO1xuICAgICAgICBzdGFydFk6IG51bWJlcjtcbiAgICAgICAgc3RhcnRXaWR0aDogbnVtYmVyO1xuICAgICAgICBzdGFydEhlaWdodDogbnVtYmVyO1xuICAgICAgICBzdGFydExlZnQ6IG51bWJlcjtcbiAgICAgICAgc3RhcnRUb3A6IG51bWJlcjtcbiAgICAgICAgd3JhcHBlcjogSFRNTEVsZW1lbnQ7XG4gICAgICAgIGhhbmRsZTogSFRNTEVsZW1lbnQ7XG4gICAgICAgIGVkZ2VzOiBGbG9hdGluZ1Jlc2l6ZUVkZ2VzO1xuICAgICAgfVxuICAgIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcG9pbnRlclRyYWNraW5nQWN0aXZlID0gZmFsc2U7XG4gIHByaXZhdGUgZHJhZ1BvaW50ZXJUcmFja2luZ0FjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3REcmFnUG9pbnRlclBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nRHJhZ0VuZFRpbWVvdXQ6IG51bWJlciB8IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCBkb2N1bWVudFJlZiA9IHRoaXMucmVzb2x2ZURvY3VtZW50KCk7XG4gICAgdGhpcy5kb2N1bWVudFJlZiA9IGRvY3VtZW50UmVmO1xuICAgIHRoaXMud2luZG93UmVmID0gdGhpcy5yZXNvbHZlV2luZG93KGRvY3VtZW50UmVmKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBlbnN1cmVUZW1wbGF0ZShkb2N1bWVudFJlZik7XG4gICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgY29uc3Qgcm9vdCA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5kb2NrLXJvb3QnKTtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWludC1kb2NrLW1hbmFnZXIgdGVtcGxhdGUgaXMgbWlzc2luZyB0aGUgcm9vdCBlbGVtZW50LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGRvY2tlZCA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5kb2NrLWRvY2tlZCcpO1xuICAgIGlmICghZG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbnQtZG9jay1tYW5hZ2VyIHRlbXBsYXRlIGlzIG1pc3NpbmcgdGhlIGRvY2tlZCBzdXJmYWNlIGVsZW1lbnQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmxvYXRpbmdMYXllciA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG4gICAgICAnLmRvY2stZmxvYXRpbmctbGF5ZXInLFxuICAgICk7XG4gICAgaWYgKCFmbG9hdGluZ0xheWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbnQtZG9jay1tYW5hZ2VyIHRlbXBsYXRlIGlzIG1pc3NpbmcgdGhlIGZsb2F0aW5nIGxheWVyIGVsZW1lbnQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kaWNhdG9yID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLmRvY2stZHJvcC1pbmRpY2F0b3InKTtcbiAgICBpZiAoIWluZGljYXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaW50LWRvY2stbWFuYWdlciB0ZW1wbGF0ZSBpcyBtaXNzaW5nIHRoZSBkcm9wIGluZGljYXRvciBlbGVtZW50LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGpveXN0aWNrID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLmRvY2stZHJvcC1qb3lzdGljaycpO1xuICAgIGlmICgham95c3RpY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWludC1kb2NrLW1hbmFnZXIgdGVtcGxhdGUgaXMgbWlzc2luZyB0aGUgZHJvcCBqb3lzdGljayBlbGVtZW50LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGpveXN0aWNrQnV0dG9ucyA9IEFycmF5LmZyb20oXG4gICAgICBqb3lzdGljay5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PignLmRvY2stZHJvcC1qb3lzdGlja19fYnV0dG9uW2RhdGEtem9uZV0nKSxcbiAgICApO1xuICAgIGlmIChqb3lzdGlja0J1dHRvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbnQtZG9jay1tYW5hZ2VyIHRlbXBsYXRlIGlzIG1pc3NpbmcgZHJvcCBqb3lzdGljayBidXR0b25zLicpO1xuICAgIH1cblxuICAgIHRoaXMucm9vdEVsID0gcm9vdDtcbiAgICB0aGlzLmRvY2tlZEVsID0gZG9ja2VkO1xuICAgIHRoaXMuZmxvYXRpbmdMYXllckVsID0gZmxvYXRpbmdMYXllcjtcbiAgICB0aGlzLmRyb3BJbmRpY2F0b3IgPSBpbmRpY2F0b3I7XG4gICAgdGhpcy5kcm9wSm95c3RpY2sgPSBqb3lzdGljaztcbiAgICB0aGlzLmRyb3BKb3lzdGlja0J1dHRvbnMgPSBqb3lzdGlja0J1dHRvbnM7XG4gICAgdGhpcy5pbnN0YW5jZUlkID0gYG1pbnQtZG9jay0keysrTWludERvY2tNYW5hZ2VyRWxlbWVudC5pbnN0YW5jZUNvdW50ZXJ9YDtcbiAgICB0aGlzLm9uUG9pbnRlck1vdmUgPSB0aGlzLm9uUG9pbnRlck1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uUG9pbnRlclVwID0gdGhpcy5vblBvaW50ZXJVcC5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25EcmFnT3ZlciA9IHRoaXMub25EcmFnT3Zlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25HbG9iYWxEcmFnT3ZlciA9IHRoaXMub25HbG9iYWxEcmFnT3Zlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25HbG9iYWxEcmFnRW5kID0gdGhpcy5vbkdsb2JhbERyYWdFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uRHJvcCA9IHRoaXMub25Ecm9wLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkRyYWdMZWF2ZSA9IHRoaXMub25EcmFnTGVhdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uRHJhZyA9IHRoaXMub25EcmFnLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vbkRyYWdNb3VzZU1vdmUgPSB0aGlzLm9uRHJhZ01vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25EcmFnVG91Y2hNb3ZlID0gdGhpcy5vbkRyYWdUb3VjaE1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uRHJhZ01vdXNlVXAgPSB0aGlzLm9uRHJhZ01vdXNlVXAuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9uRHJhZ1RvdWNoRW5kID0gdGhpcy5vbkRyYWdUb3VjaEVuZC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZSgncm9sZScpKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdhcHBsaWNhdGlvbicpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMucm9vdEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5vbkRyYWdPdmVyKTtcbiAgICB0aGlzLnJvb3RFbC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRyb3ApO1xuICAgIHRoaXMucm9vdEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIHRoaXMub25EcmFnTGVhdmUpO1xuICAgIHRoaXMuZHJvcEpveXN0aWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5vbkRyYWdPdmVyKTtcbiAgICB0aGlzLmRyb3BKb3lzdGljay5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRyb3ApO1xuICAgIHRoaXMuZHJvcEpveXN0aWNrLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIHRoaXMub25EcmFnTGVhdmUpO1xuICAgIGNvbnN0IHdpbiA9IHRoaXMud2luZG93UmVmO1xuICAgIHdpbj8uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLm9uR2xvYmFsRHJhZ092ZXIpO1xuICAgIHdpbj8uYWRkRXZlbnRMaXN0ZW5lcignZHJhZycsIHRoaXMub25EcmFnKTtcbiAgICB3aW4/LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLm9uR2xvYmFsRHJhZ0VuZCwgdHJ1ZSk7XG4gIH1cblxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMub25EcmFnT3Zlcik7XG4gICAgdGhpcy5yb290RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Ecm9wKTtcbiAgICB0aGlzLnJvb3RFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCB0aGlzLm9uRHJhZ0xlYXZlKTtcbiAgICB0aGlzLmRyb3BKb3lzdGljay5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMub25EcmFnT3Zlcik7XG4gICAgdGhpcy5kcm9wSm95c3RpY2sucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Ecm9wKTtcbiAgICB0aGlzLmRyb3BKb3lzdGljay5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCB0aGlzLm9uRHJhZ0xlYXZlKTtcbiAgICBjb25zdCB3aW4gPSB0aGlzLndpbmRvd1JlZjtcbiAgICB3aW4/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5vbkdsb2JhbERyYWdPdmVyKTtcbiAgICB3aW4/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWcnLCB0aGlzLm9uRHJhZyk7XG4gICAgd2luPy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5vbkdsb2JhbERyYWdFbmQsIHRydWUpO1xuICAgIHRoaXMuc3RvcERyYWdQb2ludGVyVHJhY2tpbmcoKTtcbiAgICB3aW4/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlKTtcbiAgICB3aW4/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25Qb2ludGVyVXApO1xuICAgIHRoaXMucG9pbnRlclRyYWNraW5nQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZTogc3RyaW5nLCBfb2xkVmFsdWU6IHN0cmluZyB8IG51bGwsIG5ld1ZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKG5hbWUgPT09ICdsYXlvdXQnKSB7XG4gICAgICB0aGlzLmxheW91dCA9IG5ld1ZhbHVlID8gdGhpcy5wYXJzZUxheW91dChuZXdWYWx1ZSkgOiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXlvdXQoKTogRG9ja0xheW91dFNuYXBzaG90IHtcbiAgICByZXR1cm4ge1xuICAgICAgcm9vdDogdGhpcy5jbG9uZUxheW91dE5vZGUodGhpcy5yb290TGF5b3V0KSxcbiAgICAgIGZsb2F0aW5nOiB0aGlzLmNsb25lRmxvYXRpbmdBcnJheSh0aGlzLmZsb2F0aW5nTGF5b3V0cyksXG4gICAgfTtcbiAgfVxuXG4gIHNldCBsYXlvdXQodmFsdWU6IERvY2tMYXlvdXRTbmFwc2hvdCB8IERvY2tMYXlvdXQgfCBEb2NrTGF5b3V0Tm9kZSB8IG51bGwpIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuZW5zdXJlU25hcHNob3QodmFsdWUpO1xuICAgIHRoaXMucm9vdExheW91dCA9IHRoaXMuY2xvbmVMYXlvdXROb2RlKHNuYXBzaG90LnJvb3QpO1xuICAgIHRoaXMuZmxvYXRpbmdMYXlvdXRzID0gdGhpcy5jbG9uZUZsb2F0aW5nQXJyYXkoc25hcHNob3QuZmxvYXRpbmcpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBnZXQgc25hcHNob3QoKTogRG9ja0xheW91dFNuYXBzaG90IHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXQ7XG4gIH1cblxuICB0b0pTT04oKTogRG9ja0xheW91dFNuYXBzaG90IHtcbiAgICByZXR1cm4gdGhpcy5zbmFwc2hvdDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURvY3VtZW50KCk6IERvY3VtZW50IHtcbiAgICBjb25zdCBzdGF0aWNEb2N1bWVudCA9IE1pbnREb2NrTWFuYWdlckVsZW1lbnQuZG9jdW1lbnRSZWY7XG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCA/PyBudWxsO1xuICAgIGNvbnN0IGdsb2JhbERvY3VtZW50ID1cbiAgICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IG51bGw7XG4gICAgY29uc3QgcmVzb2x2ZWREb2N1bWVudCA9IHN0YXRpY0RvY3VtZW50ID8/IG93bmVyRG9jdW1lbnQgPz8gZ2xvYmFsRG9jdW1lbnQ7XG5cbiAgICBpZiAoIXJlc29sdmVkRG9jdW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWludC1kb2NrLW1hbmFnZXIgcmVxdWlyZXMgYSBEb2N1bWVudCB0byBpbml0aWFsaXplLicpO1xuICAgIH1cblxuICAgIGlmICghTWludERvY2tNYW5hZ2VyRWxlbWVudC5kb2N1bWVudFJlZikge1xuICAgICAgTWludERvY2tNYW5hZ2VyRWxlbWVudC5kb2N1bWVudFJlZiA9IHJlc29sdmVkRG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkRG9jdW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVXaW5kb3coXG4gICAgZG9jdW1lbnRSZWY6IERvY3VtZW50LFxuICApOiAoV2luZG93ICYgdHlwZW9mIGdsb2JhbFRoaXMpIHwgbnVsbCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cblxuICAgIHJldHVybiAoZG9jdW1lbnRSZWYuZGVmYXVsdFZpZXcgYXMgKFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzKSB8IG51bGwpID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGF5b3V0KHZhbHVlOiBzdHJpbmcpOiBEb2NrTGF5b3V0U25hcHNob3QgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh2YWx1ZSkgYXNcbiAgICAgICAgfCBEb2NrTGF5b3V0U25hcHNob3RcbiAgICAgICAgfCBEb2NrTGF5b3V0XG4gICAgICAgIHwgRG9ja0xheW91dE5vZGVcbiAgICAgICAgfCBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlU25hcHNob3QocGFyc2VkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignbWludC1kb2NrLW1hbmFnZXI6IGZhaWxlZCB0byBwYXJzZSBsYXlvdXQgYXR0cmlidXRlJywgZXJyKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlU25hcHNob3QoXG4gICAgdmFsdWU6IERvY2tMYXlvdXRTbmFwc2hvdCB8IERvY2tMYXlvdXQgfCBEb2NrTGF5b3V0Tm9kZSB8IG51bGwsXG4gICk6IERvY2tMYXlvdXRTbmFwc2hvdCB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHsgcm9vdDogbnVsbCwgZmxvYXRpbmc6IFtdIH07XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSBhcyBEb2NrTGF5b3V0Tm9kZSkua2luZCkge1xuICAgICAgcmV0dXJuIHsgcm9vdDogdmFsdWUgYXMgRG9ja0xheW91dE5vZGUsIGZsb2F0aW5nOiBbXSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxheW91dCA9IHZhbHVlIGFzIERvY2tMYXlvdXQgfCBEb2NrTGF5b3V0U25hcHNob3Q7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvb3Q6IGxheW91dC5yb290ID8/IG51bGwsXG4gICAgICBmbG9hdGluZzogQXJyYXkuaXNBcnJheShsYXlvdXQuZmxvYXRpbmcpXG4gICAgICAgID8gbGF5b3V0LmZsb2F0aW5nLm1hcCgoZmxvYXRpbmcpID0+IHRoaXMubm9ybWFsaXplRmxvYXRpbmdMYXlvdXQoZmxvYXRpbmcpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmRvY2tlZEVsLmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuZmxvYXRpbmdMYXllckVsLmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuaGlkZURyb3BJbmRpY2F0b3IoKTtcblxuICAgIGlmICh0aGlzLnJvb3RMYXlvdXQpIHtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy5yZW5kZXJOb2RlKHRoaXMucm9vdExheW91dCwgW10pO1xuICAgICAgdGhpcy5kb2NrZWRFbC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJGbG9hdGluZ1BhbmVzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlck5vZGUoXG4gICAgbm9kZTogRG9ja0xheW91dE5vZGUsXG4gICAgcGF0aDogbnVtYmVyW10sXG4gICAgZmxvYXRpbmdJbmRleD86IG51bWJlcixcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGlmIChub2RlLmtpbmQgPT09ICdzcGxpdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlclNwbGl0KG5vZGUsIHBhdGgsIGZsb2F0aW5nSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlbmRlclN0YWNrKG5vZGUsIHBhdGgsIGZsb2F0aW5nSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJGbG9hdGluZ1BhbmVzKCk6IHZvaWQge1xuICAgIHRoaXMuZmxvYXRpbmdMYXllckVsLmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuZmxvYXRpbmdMYXlvdXRzLmZvckVhY2goKGZsb2F0aW5nLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZG9jdW1lbnRSZWYuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2RvY2stZmxvYXRpbmcnKTtcbiAgICAgIHdyYXBwZXIuZGF0YXNldFsncGF0aCddID0gdGhpcy5mb3JtYXRQYXRoKHtcbiAgICAgICAgdHlwZTogJ2Zsb2F0aW5nJyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHNlZ21lbnRzOiBbXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9ID0gZmxvYXRpbmcuYm91bmRzO1xuICAgICAgd3JhcHBlci5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICB3cmFwcGVyLnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgICB3cmFwcGVyLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgd3JhcHBlci5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuXG4gICAgICBjb25zdCB6SW5kZXggPSB0aGlzLmdldEZsb2F0aW5nUGFuZVpJbmRleChpbmRleCk7XG4gICAgICB3cmFwcGVyLnN0eWxlLnpJbmRleCA9IFN0cmluZyh6SW5kZXgpO1xuXG4gICAgICBjb25zdCBjaHJvbWUgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgY2hyb21lLmNsYXNzTGlzdC5hZGQoJ2RvY2stZmxvYXRpbmdfX2Nocm9tZScpO1xuICAgICAgY2hyb21lLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PlxuICAgICAgICB0aGlzLmJlZ2luRmxvYXRpbmdEcmFnKGV2ZW50LCBpbmRleCwgd3JhcHBlciwgY2hyb21lKSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5kb2N1bWVudFJlZi5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRpdGxlLmNsYXNzTGlzdC5hZGQoJ2RvY2stZmxvYXRpbmdfX3RpdGxlJyk7XG4gICAgICB0aXRsZS50ZXh0Q29udGVudCA9IHRoaXMuZ2V0RmxvYXRpbmdXaW5kb3dUaXRsZShmbG9hdGluZyk7XG4gICAgICBjaHJvbWUuYXBwZW5kQ2hpbGQodGl0bGUpO1xuXG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGNocm9tZSk7XG5cbiAgICAgIGlmIChmbG9hdGluZy5yb290KSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlck5vZGUoZmxvYXRpbmcucm9vdCwgW10sIGluZGV4KTtcbiAgICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdkb2NrLWZsb2F0aW5nX19zdGFjaycpO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwbGFjZWhvbGRlci5jbGFzc0xpc3QuYWRkKCdkb2NrLXN0YWNrJyk7XG4gICAgICAgIHBsYWNlaG9sZGVyLmRhdGFzZXRbJ3BhdGgnXSA9IHRoaXMuZm9ybWF0UGF0aCh7XG4gICAgICAgICAgdHlwZTogJ2Zsb2F0aW5nJyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBzZWdtZW50czogW10sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbXB0eSA9IHRoaXMuZG9jdW1lbnRSZWYuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVtcHR5LmNsYXNzTGlzdC5hZGQoJ2RvY2stc3RhY2tfX3BhbmUnKTtcbiAgICAgICAgZW1wdHkudGV4dENvbnRlbnQgPSAnTm8gcGFuZXMgY29uZmlndXJlZCc7XG4gICAgICAgIHBsYWNlaG9sZGVyLmFwcGVuZENoaWxkKGVtcHR5KTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChwbGFjZWhvbGRlcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc2l6ZXJDb25maWdzOiB7IGNsYXNzZXM6IHN0cmluZ1tdOyBlZGdlczogRmxvYXRpbmdSZXNpemVFZGdlcyB9W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiBbJ2RvY2stZmxvYXRpbmdfX3Jlc2l6ZXInLCAnZG9jay1mbG9hdGluZ19fcmVzaXplci0tdG9wLWxlZnQnXSxcbiAgICAgICAgICBlZGdlczogeyBob3Jpem9udGFsOiAnbGVmdCcsIHZlcnRpY2FsOiAndG9wJyB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NlczogWydkb2NrLWZsb2F0aW5nX19yZXNpemVyJywgJ2RvY2stZmxvYXRpbmdfX3Jlc2l6ZXItLXRvcCddLFxuICAgICAgICAgIGVkZ2VzOiB7IGhvcml6b250YWw6ICdub25lJywgdmVydGljYWw6ICd0b3AnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiBbJ2RvY2stZmxvYXRpbmdfX3Jlc2l6ZXInLCAnZG9jay1mbG9hdGluZ19fcmVzaXplci0tdG9wLXJpZ2h0J10sXG4gICAgICAgICAgZWRnZXM6IHsgaG9yaXpvbnRhbDogJ3JpZ2h0JywgdmVydGljYWw6ICd0b3AnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiBbJ2RvY2stZmxvYXRpbmdfX3Jlc2l6ZXInLCAnZG9jay1mbG9hdGluZ19fcmVzaXplci0tcmlnaHQnXSxcbiAgICAgICAgICBlZGdlczogeyBob3Jpem9udGFsOiAncmlnaHQnLCB2ZXJ0aWNhbDogJ25vbmUnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiBbJ2RvY2stZmxvYXRpbmdfX3Jlc2l6ZXInLCAnZG9jay1mbG9hdGluZ19fcmVzaXplci0tYm90dG9tLXJpZ2h0J10sXG4gICAgICAgICAgZWRnZXM6IHsgaG9yaXpvbnRhbDogJ3JpZ2h0JywgdmVydGljYWw6ICdib3R0b20nIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiBbJ2RvY2stZmxvYXRpbmdfX3Jlc2l6ZXInLCAnZG9jay1mbG9hdGluZ19fcmVzaXplci0tYm90dG9tJ10sXG4gICAgICAgICAgZWRnZXM6IHsgaG9yaXpvbnRhbDogJ25vbmUnLCB2ZXJ0aWNhbDogJ2JvdHRvbScgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6IFsnZG9jay1mbG9hdGluZ19fcmVzaXplcicsICdkb2NrLWZsb2F0aW5nX19yZXNpemVyLS1ib3R0b20tbGVmdCddLFxuICAgICAgICAgIGVkZ2VzOiB7IGhvcml6b250YWw6ICdsZWZ0JywgdmVydGljYWw6ICdib3R0b20nIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiBbJ2RvY2stZmxvYXRpbmdfX3Jlc2l6ZXInLCAnZG9jay1mbG9hdGluZ19fcmVzaXplci0tbGVmdCddLFxuICAgICAgICAgIGVkZ2VzOiB7IGhvcml6b250YWw6ICdsZWZ0JywgdmVydGljYWw6ICdub25lJyB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgcmVzaXplckNvbmZpZ3MuZm9yRWFjaCgoeyBjbGFzc2VzLCBlZGdlcyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc2l6ZXIgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICByZXNpemVyLmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XG4gICAgICAgIHJlc2l6ZXIuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoZXZlbnQpID0+XG4gICAgICAgICAgdGhpcy5iZWdpbkZsb2F0aW5nUmVzaXplKGV2ZW50LCBpbmRleCwgd3JhcHBlciwgcmVzaXplciwgZWRnZXMpLFxuICAgICAgICApO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHJlc2l6ZXIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZsb2F0aW5nTGF5ZXJFbC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYmVnaW5GbG9hdGluZ0RyYWcoXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHdyYXBwZXI6IEhUTUxFbGVtZW50LFxuICAgIGhhbmRsZTogSFRNTEVsZW1lbnQsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbaW5kZXhdO1xuICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IGZsb2F0aW5nLmJvdW5kcztcblxuICAgIHRyeSB7XG4gICAgICBoYW5kbGUuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIG5vLW9wOiBwb2ludGVyIGNhcHR1cmUgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgaW4gYWxsIGVudmlyb25tZW50cyAqL1xuICAgIH1cblxuICAgIHRoaXMucHJvbW90ZUZsb2F0aW5nUGFuZShpbmRleCwgd3JhcHBlcik7XG5cbiAgICB0aGlzLmZsb2F0aW5nRHJhZ1N0YXRlID0ge1xuICAgICAgaW5kZXgsXG4gICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgIHN0YXJ0WDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHN0YXJ0WTogZXZlbnQuY2xpZW50WSxcbiAgICAgIHN0YXJ0TGVmdDogbGVmdCxcbiAgICAgIHN0YXJ0VG9wOiB0b3AsXG4gICAgICB3cmFwcGVyLFxuICAgICAgaGFuZGxlLFxuICAgIH07XG5cbiAgICB0aGlzLnN0YXJ0UG9pbnRlclRyYWNraW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGJlZ2luRmxvYXRpbmdSZXNpemUoXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHdyYXBwZXI6IEhUTUxFbGVtZW50LFxuICAgIGhhbmRsZTogSFRNTEVsZW1lbnQsXG4gICAgZWRnZXM6IEZsb2F0aW5nUmVzaXplRWRnZXMsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbaW5kZXhdO1xuICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGhhbmRsZS5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLyogcG9pbnRlciBjYXB0dXJlIG1heSBub3QgYmUgc3VwcG9ydGVkICovXG4gICAgfVxuXG4gICAgdGhpcy5wcm9tb3RlRmxvYXRpbmdQYW5lKGluZGV4LCB3cmFwcGVyKTtcblxuICAgIHRoaXMuZmxvYXRpbmdSZXNpemVTdGF0ZSA9IHtcbiAgICAgIGluZGV4LFxuICAgICAgcG9pbnRlcklkOiBldmVudC5wb2ludGVySWQsXG4gICAgICBzdGFydFg6IGV2ZW50LmNsaWVudFgsXG4gICAgICBzdGFydFk6IGV2ZW50LmNsaWVudFksXG4gICAgICBzdGFydFdpZHRoOiBmbG9hdGluZy5ib3VuZHMud2lkdGgsXG4gICAgICBzdGFydEhlaWdodDogZmxvYXRpbmcuYm91bmRzLmhlaWdodCxcbiAgICAgIHN0YXJ0TGVmdDogZmxvYXRpbmcuYm91bmRzLmxlZnQsXG4gICAgICBzdGFydFRvcDogZmxvYXRpbmcuYm91bmRzLnRvcCxcbiAgICAgIHdyYXBwZXIsXG4gICAgICBoYW5kbGUsXG4gICAgICBlZGdlcyxcbiAgICB9O1xuXG4gICAgdGhpcy5zdGFydFBvaW50ZXJUcmFja2luZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGbG9hdGluZ0RyYWdNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZmxvYXRpbmdEcmFnU3RhdGU7XG4gICAgaWYgKCFzdGF0ZSB8fCBldmVudC5wb2ludGVySWQgIT09IHN0YXRlLnBvaW50ZXJJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmNsaWVudFggLSBzdGF0ZS5zdGFydFg7XG4gICAgY29uc3QgZGVsdGFZID0gZXZlbnQuY2xpZW50WSAtIHN0YXRlLnN0YXJ0WTtcbiAgICBjb25zdCBuZXdMZWZ0ID0gc3RhdGUuc3RhcnRMZWZ0ICsgZGVsdGFYO1xuICAgIGNvbnN0IG5ld1RvcCA9IHN0YXRlLnN0YXJ0VG9wICsgZGVsdGFZO1xuXG4gICAgc3RhdGUud3JhcHBlci5zdHlsZS5sZWZ0ID0gYCR7bmV3TGVmdH1weGA7XG4gICAgc3RhdGUud3JhcHBlci5zdHlsZS50b3AgPSBgJHtuZXdUb3B9cHhgO1xuXG4gICAgY29uc3QgZmxvYXRpbmcgPSB0aGlzLmZsb2F0aW5nTGF5b3V0c1tzdGF0ZS5pbmRleF07XG4gICAgaWYgKGZsb2F0aW5nKSB7XG4gICAgICBmbG9hdGluZy5ib3VuZHMubGVmdCA9IG5ld0xlZnQ7XG4gICAgICBmbG9hdGluZy5ib3VuZHMudG9wID0gbmV3VG9wO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRmxvYXRpbmdEcmFnRHJvcFRhcmdldChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGVuZEZsb2F0aW5nRHJhZyhwb2ludGVySWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5mbG9hdGluZ0RyYWdTdGF0ZTtcbiAgICBpZiAoIXN0YXRlIHx8IHBvaW50ZXJJZCAhPT0gc3RhdGUucG9pbnRlcklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHN0YXRlLmhhbmRsZS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoc3RhdGUucG9pbnRlcklkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8qIG5vLW9wICovXG4gICAgfVxuXG4gICAgY29uc3QgZHJvcEhhbmRsZWQgPSBzdGF0ZS5kcm9wVGFyZ2V0XG4gICAgICA/IHRoaXMuaGFuZGxlRmxvYXRpbmdTdGFja0Ryb3Aoc3RhdGUuaW5kZXgsIHN0YXRlLmRyb3BUYXJnZXQucGF0aCwgc3RhdGUuZHJvcFRhcmdldC56b25lKVxuICAgICAgOiBmYWxzZTtcblxuICAgIHRoaXMuZmxvYXRpbmdEcmFnU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuaGlkZURyb3BJbmRpY2F0b3IoKTtcbiAgICBpZiAoIWRyb3BIYW5kbGVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoTGF5b3V0Q2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmxvYXRpbmdEcmFnRHJvcFRhcmdldChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmZsb2F0aW5nRHJhZ1N0YXRlO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFjayA9IHRoaXMuZmluZFN0YWNrQXRQb2ludChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICBpZiAoIXN0YWNrKSB7XG4gICAgICBpZiAoc3RhdGUuZHJvcFRhcmdldCkge1xuICAgICAgICBkZWxldGUgc3RhdGUuZHJvcFRhcmdldDtcbiAgICAgICAgdGhpcy5oaWRlRHJvcEluZGljYXRvcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSB0aGlzLnBhcnNlUGF0aChzdGFjay5kYXRhc2V0WydwYXRoJ10pO1xuICAgIGlmICghcGF0aCB8fCAocGF0aC50eXBlID09PSAnZmxvYXRpbmcnICYmIHBhdGguaW5kZXggPT09IHN0YXRlLmluZGV4KSkge1xuICAgICAgaWYgKHN0YXRlLmRyb3BUYXJnZXQpIHtcbiAgICAgICAgZGVsZXRlIHN0YXRlLmRyb3BUYXJnZXQ7XG4gICAgICAgIHRoaXMuaGlkZURyb3BJbmRpY2F0b3IoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB6b25lID0gdGhpcy5jb21wdXRlRHJvcFpvbmUoc3RhY2ssIGV2ZW50LCB0aGlzLmV4dHJhY3REcm9wWm9uZUZyb21FdmVudChldmVudCkpO1xuXG4gICAgaWYgKHpvbmUpIHtcbiAgICAgIHN0YXRlLmRyb3BUYXJnZXQgPSB7IHBhdGgsIHpvbmUgfTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmRyb3BUYXJnZXQpIHtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5kcm9wVGFyZ2V0O1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Ryb3BJbmRpY2F0b3Ioc3RhY2ssIHpvbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGbG9hdGluZ1Jlc2l6ZU1vdmUoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5mbG9hdGluZ1Jlc2l6ZVN0YXRlO1xuICAgIGlmICghc3RhdGUgfHwgZXZlbnQucG9pbnRlcklkICE9PSBzdGF0ZS5wb2ludGVySWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5jbGllbnRYIC0gc3RhdGUuc3RhcnRYO1xuICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LmNsaWVudFkgLSBzdGF0ZS5zdGFydFk7XG4gICAgY29uc3QgbWluV2lkdGggPSAxOTI7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gMTI4O1xuICAgIGxldCBuZXdXaWR0aCA9IHN0YXRlLnN0YXJ0V2lkdGg7XG4gICAgbGV0IG5ld0hlaWdodCA9IHN0YXRlLnN0YXJ0SGVpZ2h0O1xuICAgIGxldCBuZXdMZWZ0ID0gc3RhdGUuc3RhcnRMZWZ0O1xuICAgIGxldCBuZXdUb3AgPSBzdGF0ZS5zdGFydFRvcDtcblxuICAgIGlmIChzdGF0ZS5lZGdlcy5ob3Jpem9udGFsID09PSAncmlnaHQnKSB7XG4gICAgICBuZXdXaWR0aCA9IE1hdGgubWF4KG1pbldpZHRoLCBzdGF0ZS5zdGFydFdpZHRoICsgZGVsdGFYKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVkZ2VzLmhvcml6b250YWwgPT09ICdsZWZ0Jykge1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgc3RhdGUuc3RhcnRXaWR0aCAtIGRlbHRhWCk7XG4gICAgICBuZXdMZWZ0ID0gc3RhdGUuc3RhcnRMZWZ0ICsgKHN0YXRlLnN0YXJ0V2lkdGggLSBuZXdXaWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmVkZ2VzLnZlcnRpY2FsID09PSAnYm90dG9tJykge1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5tYXgobWluSGVpZ2h0LCBzdGF0ZS5zdGFydEhlaWdodCArIGRlbHRhWSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5lZGdlcy52ZXJ0aWNhbCA9PT0gJ3RvcCcpIHtcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgc3RhdGUuc3RhcnRIZWlnaHQgLSBkZWx0YVkpO1xuICAgICAgbmV3VG9wID0gc3RhdGUuc3RhcnRUb3AgKyAoc3RhdGUuc3RhcnRIZWlnaHQgLSBuZXdIZWlnaHQpO1xuICAgIH1cblxuICAgIHN0YXRlLndyYXBwZXIuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgc3RhdGUud3JhcHBlci5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xuICAgIHN0YXRlLndyYXBwZXIuc3R5bGUubGVmdCA9IGAke25ld0xlZnR9cHhgO1xuICAgIHN0YXRlLndyYXBwZXIuc3R5bGUudG9wID0gYCR7bmV3VG9wfXB4YDtcblxuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbc3RhdGUuaW5kZXhdO1xuICAgIGlmIChmbG9hdGluZykge1xuICAgICAgZmxvYXRpbmcuYm91bmRzLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICBmbG9hdGluZy5ib3VuZHMuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuICAgICAgZmxvYXRpbmcuYm91bmRzLmxlZnQgPSBuZXdMZWZ0O1xuICAgICAgZmxvYXRpbmcuYm91bmRzLnRvcCA9IG5ld1RvcDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuZEZsb2F0aW5nUmVzaXplKHBvaW50ZXJJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmZsb2F0aW5nUmVzaXplU3RhdGU7XG4gICAgaWYgKCFzdGF0ZSB8fCBwb2ludGVySWQgIT09IHN0YXRlLnBvaW50ZXJJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzdGF0ZS5oYW5kbGUucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHN0YXRlLnBvaW50ZXJJZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvKiBuby1vcCAqL1xuICAgIH1cblxuICAgIHRoaXMuZmxvYXRpbmdSZXNpemVTdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5kaXNwYXRjaExheW91dENoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmxvYXRpbmdQYW5lWkluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbaW5kZXhdO1xuICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybiAxMCArIGluZGV4O1xuICAgIH1cbiAgICBjb25zdCBiYXNlID1cbiAgICAgIHR5cGVvZiBmbG9hdGluZy56SW5kZXggPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShmbG9hdGluZy56SW5kZXgpXG4gICAgICAgID8gZmxvYXRpbmcuekluZGV4XG4gICAgICAgIDogMTAgKyBpbmRleDtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvbW90ZUZsb2F0aW5nUGFuZShpbmRleDogbnVtYmVyLCB3cmFwcGVyOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbaW5kZXhdO1xuICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhFeGlzdGluZyA9IHRoaXMuZmxvYXRpbmdMYXlvdXRzLnJlZHVjZSgobWF4LCBsYXlvdXQsIGlkeCkgPT4ge1xuICAgICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHogPSBpZHggPT09IGluZGV4ID8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIDogdGhpcy5nZXRGbG9hdGluZ1BhbmVaSW5kZXgoaWR4KTtcbiAgICAgIHJldHVybiBNYXRoLm1heChtYXgsIHopO1xuICAgIH0sIDApO1xuXG4gICAgY29uc3QgbmV4dFogPSBNYXRoLm1heChtYXhFeGlzdGluZyArIDIsIDEyKTtcbiAgICBmbG9hdGluZy56SW5kZXggPSBuZXh0WjtcbiAgICB3cmFwcGVyLnN0eWxlLnpJbmRleCA9IFN0cmluZyhuZXh0Wik7XG4gIH1cblxuICBwcml2YXRlIGdldEZsb2F0aW5nV3JhcHBlcihpbmRleDogbnVtYmVyKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGAuZG9jay1mbG9hdGluZ1tkYXRhLXBhdGg9XCIke3RoaXMuZm9ybWF0UGF0aCh7XG4gICAgICB0eXBlOiAnZmxvYXRpbmcnLFxuICAgICAgaW5kZXgsXG4gICAgICBzZWdtZW50czogW10sXG4gICAgfSl9XCJdYDtcbiAgICByZXR1cm4gdGhpcy5mbG9hdGluZ0xheWVyRWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oc2VsZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBvaW50ZXJUcmFja2luZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wb2ludGVyVHJhY2tpbmdBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgd2luID0gdGhpcy53aW5kb3dSZWY7XG4gICAgd2luPy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMub25Qb2ludGVyTW92ZSk7XG4gICAgd2luPy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLm9uUG9pbnRlclVwKTtcbiAgICB0aGlzLnBvaW50ZXJUcmFja2luZ0FjdGl2ZSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHN0b3BQb2ludGVyVHJhY2tpbmdJZklkbGUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wb2ludGVyVHJhY2tpbmdBY3RpdmUgJiZcbiAgICAgICF0aGlzLnJlc2l6ZVN0YXRlICYmXG4gICAgICAhdGhpcy5mbG9hdGluZ0RyYWdTdGF0ZSAmJlxuICAgICAgIXRoaXMuZmxvYXRpbmdSZXNpemVTdGF0ZVxuICAgICkge1xuICAgICAgY29uc3Qgd2luID0gdGhpcy53aW5kb3dSZWY7XG4gICAgICB3aW4/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlKTtcbiAgICAgIHdpbj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5vblBvaW50ZXJVcCk7XG4gICAgICB0aGlzLnBvaW50ZXJUcmFja2luZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmxvYXRpbmdXaW5kb3dUaXRsZShmbG9hdGluZzogRG9ja0Zsb2F0aW5nU3RhY2tMYXlvdXQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZhbGxiYWNrID0gJ0Zsb2F0aW5nIFBhbmUnO1xuICAgIGlmICghZmxvYXRpbmcgfHwgIWZsb2F0aW5nLnJvb3QpIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmZXJyZWQgPSBmbG9hdGluZy5hY3RpdmVQYW5lID8/IHRoaXMuZmluZEZpcnN0UGFuZU5hbWUoZmxvYXRpbmcucm9vdCk7XG4gICAgaWYgKCFwcmVmZXJyZWQpIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG5cbiAgICBjb25zdCBvd25pbmdTdGFjayA9IHRoaXMuZmluZFN0YWNrQ29udGFpbmluZ1BhbmUoZmxvYXRpbmcucm9vdCwgcHJlZmVycmVkKTtcbiAgICBpZiAoIW93bmluZ1N0YWNrKSB7XG4gICAgICByZXR1cm4gcHJlZmVycmVkID8/IGZhbGxiYWNrO1xuICAgIH1cblxuICAgIHJldHVybiBvd25pbmdTdGFjay50aXRsZXM/LltwcmVmZXJyZWRdID8/IHByZWZlcnJlZCA/PyBmYWxsYmFjaztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmxvYXRpbmdXaW5kb3dUaXRsZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZmxvYXRpbmcgPSB0aGlzLmZsb2F0aW5nTGF5b3V0c1tpbmRleF07XG4gICAgaWYgKCFmbG9hdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC5kb2NrLWZsb2F0aW5nW2RhdGEtcGF0aD1cIiR7dGhpcy5mb3JtYXRQYXRoKHtcbiAgICAgIHR5cGU6ICdmbG9hdGluZycsXG4gICAgICBpbmRleCxcbiAgICAgIHNlZ21lbnRzOiBbXSxcbiAgICB9KX1cIl1gO1xuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmZsb2F0aW5nTGF5ZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihzZWxlY3Rvcik7XG4gICAgaWYgKCF3cmFwcGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGl0bGVFbCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5kb2NrLWZsb2F0aW5nX190aXRsZScpO1xuICAgIGlmICghdGl0bGVFbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpdGxlRWwudGV4dENvbnRlbnQgPSB0aGlzLmdldEZsb2F0aW5nV2luZG93VGl0bGUoZmxvYXRpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTcGxpdChcbiAgICBub2RlOiBEb2NrU3BsaXROb2RlLFxuICAgIHBhdGg6IG51bWJlcltdLFxuICAgIGZsb2F0aW5nSW5kZXg/OiBudW1iZXIsXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdkb2NrLXNwbGl0Jyk7XG4gICAgY29udGFpbmVyLmRhdGFzZXRbJ2RpcmVjdGlvbiddID0gbm9kZS5kaXJlY3Rpb247XG4gICAgY29udGFpbmVyLmRhdGFzZXRbJ3BhdGgnXSA9IHBhdGguam9pbignLycpO1xuXG4gICAgY29uc3Qgc2l6ZXMgPSBBcnJheS5pc0FycmF5KG5vZGUuc2l6ZXMpID8gbm9kZS5zaXplcyA6IFtdO1xuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjaGlsZFdyYXBwZXIgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgY2hpbGRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2RvY2stc3BsaXRfX2NoaWxkJyk7XG4gICAgICBjaGlsZFdyYXBwZXIuZGF0YXNldFsnaW5kZXgnXSA9IFN0cmluZyhpbmRleCk7XG5cbiAgICAgIGNvbnN0IHNpemUgPSBzaXplc1tpbmRleF07XG4gICAgICBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShzaXplKSkge1xuICAgICAgICBjaGlsZFdyYXBwZXIuc3R5bGUuZmxleCA9IGAke01hdGgubWF4KHNpemUsIDApfSAxIDBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRXcmFwcGVyLnN0eWxlLmZsZXggPSAnMSAxIDAnO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJOb2RlKGNoaWxkLCBbLi4ucGF0aCwgaW5kZXhdLCBmbG9hdGluZ0luZGV4KSk7XG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY2hpbGRXcmFwcGVyKTtcblxuICAgICAgaWYgKGluZGV4IDwgbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnN0IGRpdmlkZXIgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXZpZGVyLmNsYXNzTGlzdC5hZGQoJ2RvY2stc3BsaXRfX2RpdmlkZXInKTtcbiAgICAgICAgZGl2aWRlci5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnc2VwYXJhdG9yJyk7XG4gICAgICAgIGRpdmlkZXIudGFiSW5kZXggPSAwO1xuICAgICAgICBkaXZpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PlxuICAgICAgICAgIHRoaXMuYmVnaW5SZXNpemUoXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGZsb2F0aW5nSW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHsgdHlwZTogJ2Zsb2F0aW5nJywgaW5kZXg6IGZsb2F0aW5nSW5kZXgsIHNlZ21lbnRzOiBbLi4ucGF0aF0gfVxuICAgICAgICAgICAgICA6IHsgdHlwZTogJ2RvY2tlZCcsIHNlZ21lbnRzOiBbLi4ucGF0aF0gfSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkaXZpZGVyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclN0YWNrKFxuICAgIG5vZGU6IERvY2tTdGFja05vZGUsXG4gICAgcGF0aDogbnVtYmVyW10sXG4gICAgZmxvYXRpbmdJbmRleD86IG51bWJlcixcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5kb2N1bWVudFJlZi5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzdGFjay5jbGFzc0xpc3QuYWRkKCdkb2NrLXN0YWNrJyk7XG4gICAgY29uc3QgbG9jYXRpb246IERvY2tQYXRoID1cbiAgICAgIHR5cGVvZiBmbG9hdGluZ0luZGV4ID09PSAnbnVtYmVyJ1xuICAgICAgICA/IHsgdHlwZTogJ2Zsb2F0aW5nJywgaW5kZXg6IGZsb2F0aW5nSW5kZXgsIHNlZ21lbnRzOiBbLi4ucGF0aF0gfVxuICAgICAgICA6IHsgdHlwZTogJ2RvY2tlZCcsIHNlZ21lbnRzOiBbLi4ucGF0aF0gfTtcbiAgICBzdGFjay5kYXRhc2V0WydwYXRoJ10gPSB0aGlzLmZvcm1hdFBhdGgobG9jYXRpb24pO1xuXG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5kb2N1bWVudFJlZi5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBoZWFkZXIuY2xhc3NMaXN0LmFkZCgnZG9jay1zdGFja19faGVhZGVyJyk7XG4gICAgaGVhZGVyLnNldEF0dHJpYnV0ZSgncm9sZScsICd0YWJsaXN0Jyk7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZG9jdW1lbnRSZWYuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCdkb2NrLXN0YWNrX19jb250ZW50Jyk7XG5cbiAgICBjb25zdCBwYW5lcyA9IEFycmF5LmZyb20obmV3IFNldChub2RlLnBhbmVzKSk7XG4gICAgaWYgKHBhbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZW1wdHkgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZW1wdHkuY2xhc3NMaXN0LmFkZCgnZG9jay1zdGFja19fcGFuZScpO1xuICAgICAgZW1wdHkudGV4dENvbnRlbnQgPSAnTm8gcGFuZXMgY29uZmlndXJlZCc7XG4gICAgICBjb250ZW50LmFwcGVuZENoaWxkKGVtcHR5KTtcbiAgICAgIHN0YWNrLmFwcGVuZChoZWFkZXIsIGNvbnRlbnQpO1xuICAgICAgcmV0dXJuIHN0YWNrO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZVBhbmUgPSBwYW5lcy5pbmNsdWRlcyhub2RlLmFjdGl2ZVBhbmUgPz8gJycpXG4gICAgICA/IG5vZGUuYWN0aXZlUGFuZSFcbiAgICAgIDogcGFuZXNbMF07XG5cbiAgICBjb25zdCBiYXNlU2x1ZyA9IHBhdGgubGVuZ3RoID8gcGF0aC5qb2luKCctJykgOiAncm9vdCc7XG4gICAgY29uc3QgcGF0aFNsdWcgPVxuICAgICAgdHlwZW9mIGZsb2F0aW5nSW5kZXggPT09ICdudW1iZXInID8gYGYke2Zsb2F0aW5nSW5kZXh9LSR7YmFzZVNsdWd9YCA6IGJhc2VTbHVnO1xuICAgIHBhbmVzLmZvckVhY2goKHBhbmVOYW1lKSA9PiB7XG4gICAgICBjb25zdCBwYW5lU2x1Z1JhdyA9IHBhbmVOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csICctJyk7XG4gICAgICBjb25zdCBwYW5lU2x1ZyA9IHBhbmVTbHVnUmF3Lmxlbmd0aCA+IDAgPyBwYW5lU2x1Z1JhdyA6ICdwYW5lJztcbiAgICAgIGNvbnN0IHRhYklkID0gYCR7dGhpcy5pbnN0YW5jZUlkfS10YWItJHtwYXRoU2x1Z30tJHtwYW5lU2x1Z31gO1xuICAgICAgY29uc3QgcGFuZWxJZCA9IGAke3RoaXMuaW5zdGFuY2VJZH0tcGFuZWwtJHtwYXRoU2x1Z30tJHtwYW5lU2x1Z31gO1xuXG4gICAgICBjb25zdCBidXR0b24gPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgYnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkb2NrLXRhYicpO1xuICAgICAgYnV0dG9uLmRhdGFzZXRbJ3BhbmUnXSA9IHBhbmVOYW1lO1xuICAgICAgYnV0dG9uLmlkID0gdGFiSWQ7XG4gICAgICBidXR0b24udGV4dENvbnRlbnQgPSBub2RlLnRpdGxlcz8uW3BhbmVOYW1lXSA/PyBwYW5lTmFtZTtcbiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAndGFiJyk7XG4gICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgcGFuZWxJZCk7XG4gICAgICBpZiAocGFuZU5hbWUgPT09IGFjdGl2ZVBhbmUpIHtcbiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2RvY2stdGFiLS1hY3RpdmUnKTtcbiAgICAgIH1cbiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBTdHJpbmcocGFuZU5hbWUgPT09IGFjdGl2ZVBhbmUpKTtcbiAgICAgIGJ1dHRvbi5kcmFnZ2FibGUgPSB0cnVlO1xuICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrRWwgPSBidXR0b24uY2xvc2VzdDxIVE1MRWxlbWVudD4oJy5kb2NrLXN0YWNrJyk7XG4gICAgICAgIHRoaXMuY2FwdHVyZVRhYkRyYWdNZXRyaWNzKGV2ZW50LCBzdGFja0VsID8/IG51bGwpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0pO1xuICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsICgpID0+IHRoaXMuY2xlYXJQZW5kaW5nVGFiRHJhZ01ldHJpY3MoKSk7XG4gICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsICgpID0+IHRoaXMuY2xlYXJQZW5kaW5nVGFiRHJhZ01ldHJpY3MoKSk7XG4gICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrRWwgPSBidXR0b24uY2xvc2VzdDxIVE1MRWxlbWVudD4oJy5kb2NrLXN0YWNrJyk7XG4gICAgICAgIHRoaXMuYmVnaW5QYW5lRHJhZyhldmVudCwgdGhpcy5jbG9uZVBhdGgobG9jYXRpb24pLCBwYW5lTmFtZSwgc3RhY2tFbCA/PyBudWxsKTtcbiAgICAgIH0pO1xuICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuZW5kUGFuZURyYWcoKTtcbiAgICAgICAgdGhpcy5jbGVhclBlbmRpbmdUYWJEcmFnTWV0cmljcygpO1xuICAgICAgfSk7XG4gICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQYW5lKHN0YWNrLCBwYW5lTmFtZSwgdGhpcy5jbG9uZVBhdGgobG9jYXRpb24pKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnZG9jay1wYW5lLWFjdGl2YXRlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBwYW5lOiBwYW5lTmFtZSB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgY29uc3QgcGFuZUhvc3QgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcGFuZUhvc3QuY2xhc3NMaXN0LmFkZCgnZG9jay1zdGFja19fcGFuZScpO1xuICAgICAgcGFuZUhvc3QuZGF0YXNldFsncGFuZSddID0gcGFuZU5hbWU7XG4gICAgICBwYW5lSG9zdC5pZCA9IHBhbmVsSWQ7XG4gICAgICBwYW5lSG9zdC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAndGFicGFuZWwnKTtcbiAgICAgIHBhbmVIb3N0LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgdGFiSWQpO1xuICAgICAgaWYgKHBhbmVOYW1lICE9PSBhY3RpdmVQYW5lKSB7XG4gICAgICAgIHBhbmVIb3N0LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzbG90RWwgPSB0aGlzLmRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ3Nsb3QnKTtcbiAgICAgIHNsb3RFbC5uYW1lID0gcGFuZU5hbWU7XG4gICAgICBwYW5lSG9zdC5hcHBlbmRDaGlsZChzbG90RWwpO1xuICAgICAgY29udGVudC5hcHBlbmRDaGlsZChwYW5lSG9zdCk7XG4gICAgfSk7XG5cbiAgICBzdGFjay5kYXRhc2V0WydhY3RpdmVQYW5lJ10gPSBhY3RpdmVQYW5lO1xuICAgIHN0YWNrLmFwcGVuZChoZWFkZXIsIGNvbnRlbnQpO1xuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIHByaXZhdGUgYmVnaW5SZXNpemUoXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIHBhdGg6IERvY2tQYXRoLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGl2aWRlciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghZGl2aWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gKGNvbnRhaW5lci5kYXRhc2V0WydkaXJlY3Rpb24nXSBhcyAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKSA/PyAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignOnNjb3BlID4gLmRvY2stc3BsaXRfX2NoaWxkJykpO1xuICAgIGNvbnN0IGluaXRpYWxTaXplcyA9IGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBjaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiBvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gcmVjdC53aWR0aCA6IHJlY3QuaGVpZ2h0O1xuICAgIH0pO1xuXG4gICAgY29uc3QgYmVmb3JlU2l6ZSA9IGluaXRpYWxTaXplc1tpbmRleF07XG4gICAgY29uc3QgYWZ0ZXJTaXplID0gaW5pdGlhbFNpemVzW2luZGV4ICsgMV07XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gZXZlbnQuY2xpZW50WCA6IGV2ZW50LmNsaWVudFk7XG5cbiAgICBkaXZpZGVyLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgZGl2aWRlci5kYXRhc2V0WydyZXNpemluZyddID0gJ3RydWUnO1xuICAgIHRoaXMucmVzaXplU3RhdGUgPSB7XG4gICAgICBwYXRoOiB0aGlzLmNsb25lUGF0aChwYXRoKSxcbiAgICAgIGluZGV4LFxuICAgICAgcG9pbnRlcklkOiBldmVudC5wb2ludGVySWQsXG4gICAgICBvcmllbnRhdGlvbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRpdmlkZXIsXG4gICAgICBzdGFydFBvcyxcbiAgICAgIGluaXRpYWxTaXplcyxcbiAgICAgIGJlZm9yZVNpemUsXG4gICAgICBhZnRlclNpemUsXG4gICAgfTtcblxuICAgIHRoaXMuc3RhcnRQb2ludGVyVHJhY2tpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Qb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzaXplU3RhdGUgJiYgZXZlbnQucG9pbnRlcklkID09PSB0aGlzLnJlc2l6ZVN0YXRlLnBvaW50ZXJJZCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnJlc2l6ZVN0YXRlO1xuICAgICAgY29uc3Qgc3BsaXROb2RlID0gdGhpcy5yZXNvbHZlU3BsaXROb2RlKHN0YXRlLnBhdGgpO1xuICAgICAgaWYgKCFzcGxpdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50UG9zID0gc3RhdGUub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/IGV2ZW50LmNsaWVudFggOiBldmVudC5jbGllbnRZO1xuICAgICAgY29uc3QgZGVsdGEgPSBjdXJyZW50UG9zIC0gc3RhdGUuc3RhcnRQb3M7XG4gICAgICBjb25zdCBtaW5TaXplID0gNDg7XG4gICAgICBjb25zdCBwYWlyVG90YWwgPSBzdGF0ZS5iZWZvcmVTaXplICsgc3RhdGUuYWZ0ZXJTaXplO1xuXG4gICAgICBsZXQgbmV3QmVmb3JlID0gTWF0aC5taW4oXG4gICAgICAgIE1hdGgubWF4KHN0YXRlLmJlZm9yZVNpemUgKyBkZWx0YSwgbWluU2l6ZSksXG4gICAgICAgIHBhaXJUb3RhbCAtIG1pblNpemUsXG4gICAgICApO1xuICAgICAgbGV0IG5ld0FmdGVyID0gcGFpclRvdGFsIC0gbmV3QmVmb3JlO1xuXG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXdCZWZvcmUpIHx8ICFOdW1iZXIuaXNGaW5pdGUobmV3QWZ0ZXIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0FmdGVyIDwgbWluU2l6ZSkge1xuICAgICAgICBuZXdBZnRlciA9IG1pblNpemU7XG4gICAgICAgIG5ld0JlZm9yZSA9IHBhaXJUb3RhbCAtIG1pblNpemU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1NpemVzUGl4ZWxzID0gWy4uLnN0YXRlLmluaXRpYWxTaXplc107XG4gICAgICBuZXdTaXplc1BpeGVsc1tzdGF0ZS5pbmRleF0gPSBuZXdCZWZvcmU7XG4gICAgICBuZXdTaXplc1BpeGVsc1tzdGF0ZS5pbmRleCArIDFdID0gbmV3QWZ0ZXI7XG5cbiAgICAgIGNvbnN0IHRvdGFsID0gbmV3U2l6ZXNQaXhlbHMucmVkdWNlKChhY2MsIHNpemUpID0+IGFjYyArIHNpemUsIDApO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHRvdGFsID4gMCA/IG5ld1NpemVzUGl4ZWxzLm1hcCgoc2l6ZSkgPT4gc2l6ZSAvIHRvdGFsKSA6IFtdO1xuXG4gICAgICBzcGxpdE5vZGUuc2l6ZXMgPSBub3JtYWxpemVkO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHN0YXRlLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignOnNjb3BlID4gLmRvY2stc3BsaXRfX2NoaWxkJykpO1xuICAgICAgbm9ybWFsaXplZC5mb3JFYWNoKChzaXplLCBpZHgpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2lkeF0pIHtcbiAgICAgICAgICBjaGlsZHJlbltpZHhdLnN0eWxlLmZsZXggPSBgJHtNYXRoLm1heChzaXplLCAwKX0gMSAwYDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpc3BhdGNoTGF5b3V0Q2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZsb2F0aW5nUmVzaXplU3RhdGUgJiYgZXZlbnQucG9pbnRlcklkID09PSB0aGlzLmZsb2F0aW5nUmVzaXplU3RhdGUucG9pbnRlcklkKSB7XG4gICAgICB0aGlzLmhhbmRsZUZsb2F0aW5nUmVzaXplTW92ZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmxvYXRpbmdEcmFnU3RhdGUgJiYgZXZlbnQucG9pbnRlcklkID09PSB0aGlzLmZsb2F0aW5nRHJhZ1N0YXRlLnBvaW50ZXJJZCkge1xuICAgICAgY29uc29sZS53YXJuKCdzdGF0ZScsIHRoaXMuZmxvYXRpbmdEcmFnU3RhdGUpO1xuICAgICAgdGhpcy5oYW5kbGVGbG9hdGluZ0RyYWdNb3ZlKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uUG9pbnRlclVwKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNpemVTdGF0ZSAmJiBldmVudC5wb2ludGVySWQgPT09IHRoaXMucmVzaXplU3RhdGUucG9pbnRlcklkKSB7XG4gICAgICBjb25zdCBkaXZpZGVyID0gdGhpcy5yZXNpemVTdGF0ZS5kaXZpZGVyO1xuICAgICAgZGl2aWRlci5kYXRhc2V0WydyZXNpemluZyddID0gJ2ZhbHNlJztcbiAgICAgIGRpdmlkZXIucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHRoaXMucmVzaXplU3RhdGUucG9pbnRlcklkKTtcbiAgICAgIHRoaXMucmVzaXplU3RhdGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZsb2F0aW5nRHJhZ1N0YXRlICYmIGV2ZW50LnBvaW50ZXJJZCA9PT0gdGhpcy5mbG9hdGluZ0RyYWdTdGF0ZS5wb2ludGVySWQpIHtcbiAgICAgIHRoaXMuZW5kRmxvYXRpbmdEcmFnKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmxvYXRpbmdSZXNpemVTdGF0ZSAmJiBldmVudC5wb2ludGVySWQgPT09IHRoaXMuZmxvYXRpbmdSZXNpemVTdGF0ZS5wb2ludGVySWQpIHtcbiAgICAgIHRoaXMuZW5kRmxvYXRpbmdSZXNpemUoZXZlbnQucG9pbnRlcklkKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3BQb2ludGVyVHJhY2tpbmdJZklkbGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FwdHVyZVRhYkRyYWdNZXRyaWNzKGV2ZW50OiBQb2ludGVyRXZlbnQsIHN0YWNrRWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghc3RhY2tFbCkge1xuICAgICAgdGhpcy5wZW5kaW5nVGFiRHJhZ01ldHJpY3MgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGV2ZW50LmNsaWVudFgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoZXZlbnQuY2xpZW50WSkpIHtcbiAgICAgIHRoaXMucGVuZGluZ1RhYkRyYWdNZXRyaWNzID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBob3N0UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc3RhY2tSZWN0ID0gc3RhY2tFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIHN0YWNrUmVjdC5sZWZ0O1xuICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIHN0YWNrUmVjdC50b3A7XG4gICAgY29uc3QgbGVmdCA9IHN0YWNrUmVjdC5sZWZ0IC0gaG9zdFJlY3QubGVmdDtcbiAgICBjb25zdCB0b3AgPSBzdGFja1JlY3QudG9wIC0gaG9zdFJlY3QudG9wO1xuICAgIGNvbnN0IHdpZHRoID0gTnVtYmVyLmlzRmluaXRlKHN0YWNrUmVjdC53aWR0aCkgPyBzdGFja1JlY3Qud2lkdGggOiAwO1xuICAgIGNvbnN0IGhlaWdodCA9IE51bWJlci5pc0Zpbml0ZShzdGFja1JlY3QuaGVpZ2h0KSA/IHN0YWNrUmVjdC5oZWlnaHQgOiAwO1xuXG4gICAgdGhpcy5wZW5kaW5nVGFiRHJhZ01ldHJpY3MgPSB7XG4gICAgICBwb2ludGVyT2Zmc2V0WCxcbiAgICAgIHBvaW50ZXJPZmZzZXRZLFxuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUGVuZGluZ1RhYkRyYWdNZXRyaWNzKCk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1RhYkRyYWdNZXRyaWNzID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYmVnaW5QYW5lRHJhZyhcbiAgICBldmVudDogRHJhZ0V2ZW50LFxuICAgIHBhdGg6IERvY2tQYXRoLFxuICAgIHBhbmU6IHN0cmluZyxcbiAgICBzdGFja0VsOiBIVE1MRWxlbWVudCB8IG51bGwsXG4gICk6IHZvaWQge1xuICAgIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgZ2hvc3QgZWxlbWVudCBmb3IgdGhlIGRyYWcgaW1hZ2UuIFRoaXMgcHJldmVudHMgdGhlIGJyb3dzZXIgZnJvbSBjYW5jZWxsaW5nXG4gICAgLy8gdGhlIGRyYWcgb3BlcmF0aW9uIHdoZW4gdGhlIG9yaWdpbmFsIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gZHVyaW5nIHJlLXJlbmRlci5cbiAgICBjb25zdCBnaG9zdCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZ2hvc3Quc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGdob3N0LnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgZ2hvc3Quc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICAgIGdob3N0LnN0eWxlLndpZHRoID0gYCR7KGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRofXB4YDtcbiAgICBnaG9zdC5zdHlsZS5oZWlnaHQgPSBgJHsoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFwcGVuZENoaWxkKGdob3N0KTtcblxuICAgIC8vIFVzZSB0aGUgZ2hvc3QgZWxlbWVudCBhcyB0aGUgZHJhZyBpbWFnZS5cbiAgICAvLyBUaGUgb2Zmc2V0IGlzIHNldCB0byB3aGVyZSB0aGUgdXNlcidzIGN1cnNvciBpcyBvbiB0aGUgb3JpZ2luYWwgZWxlbWVudC5cbiAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGdob3N0LCBldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZKTtcblxuICAgIC8vIFRoZSBnaG9zdCBlbGVtZW50IGlzIG5vIGxvbmdlciBuZWVkZWQgYWZ0ZXIgdGhlIGRyYWcgaW1hZ2UgaXMgc2V0LlxuICAgIC8vIFdlIGRlZmVyIGl0cyByZW1vdmFsIHRvIGVuc3VyZSB0aGUgYnJvd3NlciBoYXMgY2FwdHVyZWQgaXQuXG4gICAgc2V0VGltZW91dCgoKSA9PiBnaG9zdC5yZW1vdmUoKSwgMCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgZmxvYXRpbmdJbmRleCxcbiAgICAgIHBvaW50ZXJPZmZzZXRYLFxuICAgICAgcG9pbnRlck9mZnNldFksXG4gICAgfSA9IHRoaXMucHJlcGFyZVBhbmVEcmFnU291cmNlKHBhdGgsIHBhbmUsIHN0YWNrRWwsIGV2ZW50KTtcblxuICAgIHRoaXMuZHJhZ1N0YXRlID0ge1xuICAgICAgcGFuZSxcbiAgICAgIHNvdXJjZVBhdGg6IHRoaXMuY2xvbmVQYXRoKHNvdXJjZVBhdGgpLFxuICAgICAgZmxvYXRpbmdJbmRleCxcbiAgICAgIHBvaW50ZXJPZmZzZXRYLFxuICAgICAgcG9pbnRlck9mZnNldFksXG4gICAgICBkcm9wSGFuZGxlZDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZURyYWdnZWRGbG9hdGluZ1Bvc2l0aW9uKGV2ZW50KTtcbiAgICB0aGlzLnN0YXJ0RHJhZ1BvaW50ZXJUcmFja2luZygpO1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgcGFuZSk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVQYW5lRHJhZ1NvdXJjZShcbiAgICBwYXRoOiBEb2NrUGF0aCxcbiAgICBwYW5lOiBzdHJpbmcsXG4gICAgc3RhY2tFbDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgIGV2ZW50OiBEcmFnRXZlbnQsXG4gICk6IHsgcGF0aDogRG9ja1BhdGg7IGZsb2F0aW5nSW5kZXg6IG51bWJlciB8IG51bGw7IHBvaW50ZXJPZmZzZXRYOiBudW1iZXI7IHBvaW50ZXJPZmZzZXRZOiBudW1iZXIgfSB7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLnJlc29sdmVTdGFja0xvY2F0aW9uKHBhdGgpO1xuICAgIGlmICghbG9jYXRpb24gfHwgIWxvY2F0aW9uLm5vZGUucGFuZXMuaW5jbHVkZXMocGFuZSkpIHtcbiAgICAgIHRoaXMuY2xlYXJQZW5kaW5nVGFiRHJhZ01ldHJpY3MoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIGZsb2F0aW5nSW5kZXg6IG51bGwsXG4gICAgICAgIHBvaW50ZXJPZmZzZXRYOiAwLFxuICAgICAgICBwb2ludGVyT2Zmc2V0WTogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljcyA9IHRoaXMucGVuZGluZ1RhYkRyYWdNZXRyaWNzO1xuICAgIHRoaXMucGVuZGluZ1RhYkRyYWdNZXRyaWNzID0gbnVsbDtcblxuICAgIGNvbnN0IGRvbUhhc1NpYmxpbmcgPVxuICAgICAgISFzdGFja0VsICYmXG4gICAgICBBcnJheS5mcm9tKHN0YWNrRWwucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5kb2NrLXRhYicpKS5zb21lKFxuICAgICAgICAoYnV0dG9uKSA9PiBidXR0b24uZGF0YXNldFsncGFuZSddICYmIGJ1dHRvbi5kYXRhc2V0WydwYW5lJ10gIT09IHBhbmUsXG4gICAgICApO1xuXG4gICAgY29uc3QgaGFzU2libGluZ0luU3RhY2sgPSBsb2NhdGlvbi5ub2RlLnBhbmVzLnNvbWUoKGV4aXN0aW5nKSA9PiBleGlzdGluZyAhPT0gcGFuZSk7XG4gICAgY29uc3QgZmxvYXRpbmcgPSBsb2NhdGlvbi5jb250ZXh0ID09PSAnZmxvYXRpbmcnID8gdGhpcy5mbG9hdGluZ0xheW91dHNbbG9jYXRpb24uaW5kZXhdIDogbnVsbDtcbiAgICBjb25zdCBmbG9hdGluZ1BhbmVDb3VudCA9XG4gICAgICBmbG9hdGluZyAmJiBmbG9hdGluZy5yb290ID8gdGhpcy5jb3VudFBhbmVzSW5UcmVlKGZsb2F0aW5nLnJvb3QpIDogaGFzU2libGluZ0luU3RhY2sgPyAyIDogMTtcbiAgICBjb25zdCBzaG91bGRSZXVzZUV4aXN0aW5nV2luZG93ID1cbiAgICAgIGxvY2F0aW9uLmNvbnRleHQgPT09ICdmbG9hdGluZycgJiZcbiAgICAgICEhZmxvYXRpbmcgJiZcbiAgICAgICFoYXNTaWJsaW5nSW5TdGFjayAmJlxuICAgICAgIWRvbUhhc1NpYmxpbmcgJiZcbiAgICAgIGZsb2F0aW5nUGFuZUNvdW50IDw9IDE7XG5cbiAgICBpZiAoc2hvdWxkUmV1c2VFeGlzdGluZ1dpbmRvdykge1xuICAgICAgaWYgKGZsb2F0aW5nKSB7XG4gICAgICAgIGZsb2F0aW5nLmFjdGl2ZVBhbmUgPSBwYW5lO1xuICAgICAgICB0aGlzLnVwZGF0ZUZsb2F0aW5nV2luZG93VGl0bGUobG9jYXRpb24uaW5kZXgpO1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRGbG9hdGluZ1dyYXBwZXIobG9jYXRpb24uaW5kZXgpO1xuICAgICAgICBpZiAod3JhcHBlcikge1xuICAgICAgICAgIHRoaXMucHJvbW90ZUZsb2F0aW5nUGFuZShsb2NhdGlvbi5pbmRleCwgd3JhcHBlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9zdFJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9XG4gICAgICAgICAgbWV0cmljcyAmJlxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShtZXRyaWNzLnBvaW50ZXJPZmZzZXRYKSAmJlxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShtZXRyaWNzLmxlZnQpICYmXG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGZsb2F0aW5nLmJvdW5kcy5sZWZ0KVxuICAgICAgICAgICAgPyBtZXRyaWNzLnBvaW50ZXJPZmZzZXRYICsgKG1ldHJpY3MubGVmdCAtIGZsb2F0aW5nLmJvdW5kcy5sZWZ0KVxuICAgICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoZXZlbnQuY2xpZW50WCkgJiYgTnVtYmVyLmlzRmluaXRlKGZsb2F0aW5nLmJvdW5kcy5sZWZ0KVxuICAgICAgICAgICAgPyBldmVudC5jbGllbnRYIC0gaG9zdFJlY3QubGVmdCAtIGZsb2F0aW5nLmJvdW5kcy5sZWZ0XG4gICAgICAgICAgICA6IGZsb2F0aW5nLmJvdW5kcy53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID1cbiAgICAgICAgICBtZXRyaWNzICYmXG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKG1ldHJpY3MucG9pbnRlck9mZnNldFkpICYmXG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKG1ldHJpY3MudG9wKSAmJlxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShmbG9hdGluZy5ib3VuZHMudG9wKVxuICAgICAgICAgICAgPyBtZXRyaWNzLnBvaW50ZXJPZmZzZXRZICsgKG1ldHJpY3MudG9wIC0gZmxvYXRpbmcuYm91bmRzLnRvcClcbiAgICAgICAgICAgIDogTnVtYmVyLmlzRmluaXRlKGV2ZW50LmNsaWVudFkpICYmIE51bWJlci5pc0Zpbml0ZShmbG9hdGluZy5ib3VuZHMudG9wKVxuICAgICAgICAgICAgPyBldmVudC5jbGllbnRZIC0gaG9zdFJlY3QudG9wIC0gZmxvYXRpbmcuYm91bmRzLnRvcFxuICAgICAgICAgICAgOiBmbG9hdGluZy5ib3VuZHMuaGVpZ2h0IC8gMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIGZsb2F0aW5nSW5kZXg6IGxvY2F0aW9uLmluZGV4LFxuICAgICAgICAgIHBvaW50ZXJPZmZzZXRYLFxuICAgICAgICAgIHBvaW50ZXJPZmZzZXRZLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZmxvYXRpbmdJbmRleDogbnVsbCxcbiAgICAgICAgcG9pbnRlck9mZnNldFg6IDAsXG4gICAgICAgIHBvaW50ZXJPZmZzZXRZOiAwLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBob3N0UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc3RhY2tSZWN0ID0gc3RhY2tFbD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbDtcbiAgICBjb25zdCBmYWxsYmFja1dpZHRoID0gMzIwO1xuICAgIGNvbnN0IGZhbGxiYWNrSGVpZ2h0ID0gMjQwO1xuICAgIGNvbnN0IHdpZHRoID1cbiAgICAgIG1ldHJpY3MgJiYgTnVtYmVyLmlzRmluaXRlKG1ldHJpY3Mud2lkdGgpICYmIG1ldHJpY3Mud2lkdGggPiAwXG4gICAgICAgID8gbWV0cmljcy53aWR0aFxuICAgICAgICA6IHN0YWNrUmVjdCAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhY2tSZWN0LndpZHRoKVxuICAgICAgICA/IHN0YWNrUmVjdC53aWR0aFxuICAgICAgICA6IGZhbGxiYWNrV2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgIG1ldHJpY3MgJiYgTnVtYmVyLmlzRmluaXRlKG1ldHJpY3MuaGVpZ2h0KSAmJiBtZXRyaWNzLmhlaWdodCA+IDBcbiAgICAgICAgPyBtZXRyaWNzLmhlaWdodFxuICAgICAgICA6IHN0YWNrUmVjdCAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhY2tSZWN0LmhlaWdodClcbiAgICAgICAgPyBzdGFja1JlY3QuaGVpZ2h0XG4gICAgICAgIDogZmFsbGJhY2tIZWlnaHQ7XG5cbiAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9XG4gICAgICBtZXRyaWNzICYmIE51bWJlci5pc0Zpbml0ZShtZXRyaWNzLnBvaW50ZXJPZmZzZXRYKVxuICAgICAgICA/IG1ldHJpY3MucG9pbnRlck9mZnNldFhcbiAgICAgICAgOiBzdGFja1JlY3QgJiYgTnVtYmVyLmlzRmluaXRlKGV2ZW50LmNsaWVudFgpXG4gICAgICAgID8gZXZlbnQuY2xpZW50WCAtIHN0YWNrUmVjdC5sZWZ0XG4gICAgICAgIDogd2lkdGggLyAyO1xuICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID1cbiAgICAgIG1ldHJpY3MgJiYgTnVtYmVyLmlzRmluaXRlKG1ldHJpY3MucG9pbnRlck9mZnNldFkpXG4gICAgICAgID8gbWV0cmljcy5wb2ludGVyT2Zmc2V0WVxuICAgICAgICA6IHN0YWNrUmVjdCAmJiBOdW1iZXIuaXNGaW5pdGUoZXZlbnQuY2xpZW50WSlcbiAgICAgICAgPyBldmVudC5jbGllbnRZIC0gc3RhY2tSZWN0LnRvcFxuICAgICAgICA6IGhlaWdodCAvIDI7XG5cbiAgICBjb25zdCBwb2ludGVyTGVmdCA9XG4gICAgICBtZXRyaWNzICYmIE51bWJlci5pc0Zpbml0ZShtZXRyaWNzLmxlZnQpXG4gICAgICAgID8gbWV0cmljcy5sZWZ0XG4gICAgICAgIDogTnVtYmVyLmlzRmluaXRlKGV2ZW50LmNsaWVudFgpXG4gICAgICAgID8gZXZlbnQuY2xpZW50WCAtIGhvc3RSZWN0LmxlZnQgLSBwb2ludGVyT2Zmc2V0WFxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgcG9pbnRlclRvcCA9XG4gICAgICBtZXRyaWNzICYmIE51bWJlci5pc0Zpbml0ZShtZXRyaWNzLnRvcClcbiAgICAgICAgPyBtZXRyaWNzLnRvcFxuICAgICAgICA6IE51bWJlci5pc0Zpbml0ZShldmVudC5jbGllbnRZKVxuICAgICAgICA/IGV2ZW50LmNsaWVudFkgLSBob3N0UmVjdC50b3AgLSBwb2ludGVyT2Zmc2V0WVxuICAgICAgICA6IG51bGw7XG5cbiAgICBjb25zdCBsZWZ0ID1cbiAgICAgIHBvaW50ZXJMZWZ0ICE9PSBudWxsXG4gICAgICAgID8gcG9pbnRlckxlZnRcbiAgICAgICAgOiBzdGFja1JlY3RcbiAgICAgICAgPyBzdGFja1JlY3QubGVmdCAtIGhvc3RSZWN0LmxlZnRcbiAgICAgICAgOiAoaG9zdFJlY3Qud2lkdGggLSB3aWR0aCkgLyAyO1xuICAgIGNvbnN0IHRvcCA9XG4gICAgICBwb2ludGVyVG9wICE9PSBudWxsXG4gICAgICAgID8gcG9pbnRlclRvcFxuICAgICAgICA6IHN0YWNrUmVjdFxuICAgICAgICA/IHN0YWNrUmVjdC50b3AgLSBob3N0UmVjdC50b3BcbiAgICAgICAgOiAoaG9zdFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG5cbiAgICAgICAgXG4gICAgLy8gRGVmZXIgdGhlIERPTSBtb2RpZmljYXRpb24gdG8gcHJldmVudCB0aGUgYnJvd3NlciBmcm9tIGNhbmNlbGxpbmcgdGhlIGRyYWcgb3BlcmF0aW9uLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgcGFuZVRpdGxlID0gbG9jYXRpb24ubm9kZS50aXRsZXM/LltwYW5lXTtcblxuICAgICAgdGhpcy5yZW1vdmVQYW5lRnJvbUxvY2F0aW9uKGxvY2F0aW9uLCBwYW5lKTtcblxuICAgICAgY29uc3QgZmxvYXRpbmdTdGFjazogRG9ja1N0YWNrTm9kZSA9IHtcbiAgICAgICAga2luZDogJ3N0YWNrJyxcbiAgICAgICAgcGFuZXM6IFtwYW5lXSxcbiAgICAgICAgYWN0aXZlUGFuZTogcGFuZSxcbiAgICAgIH07XG4gICAgICBpZiAocGFuZVRpdGxlKSB7XG4gICAgICAgIGZsb2F0aW5nU3RhY2sudGl0bGVzID0geyBbcGFuZV06IHBhbmVUaXRsZSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmbG9hdGluZ0xheW91dDogRG9ja0Zsb2F0aW5nU3RhY2tMYXlvdXQgPSB7XG4gICAgICAgIGJvdW5kczoge1xuICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgdG9wLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgfSxcbiAgICAgICAgcm9vdDogZmxvYXRpbmdTdGFjayxcbiAgICAgICAgYWN0aXZlUGFuZTogcGFuZSxcbiAgICAgIH07XG4gICAgICBpZiAocGFuZVRpdGxlKSB7XG4gICAgICAgIGZsb2F0aW5nTGF5b3V0LnRpdGxlcyA9IHsgW3BhbmVdOiBwYW5lVGl0bGUgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mbG9hdGluZ0xheW91dHMucHVzaChmbG9hdGluZ0xheW91dCk7XG4gICAgICBjb25zdCBmbG9hdGluZ0luZGV4ID0gdGhpcy5mbG9hdGluZ0xheW91dHMubGVuZ3RoIC0gMTtcblxuICAgICAgLy8gRGVmZXIgcmVuZGVyaW5nIHRvIGF2b2lkIGludGVycnVwdGluZyB0aGUgZHJhZy1hbmQtZHJvcCBpbml0aWFsaXphdGlvbiBpbiB0aGUgYnJvd3Nlci5cbiAgICAgIC8vIFN5bmNocm9ub3VzbHkgcmUtcmVuZGVyaW5nIGNhbiBjYXVzZSB0aGUgYnJvd3NlciB0byBsb3NlIHRyYWNrIG9mIHRoZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRGbG9hdGluZ1dyYXBwZXIoZmxvYXRpbmdJbmRleCk7XG4gICAgICBpZiAod3JhcHBlcikge1xuICAgICAgICB0aGlzLnByb21vdGVGbG9hdGluZ1BhbmUoZmxvYXRpbmdJbmRleCwgd3JhcHBlcik7XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BhdGNoTGF5b3V0Q2hhbmdlZCgpO1xuXG4gICAgICBpZiAodGhpcy5kcmFnU3RhdGUpIHtcbiAgICAgICAgdGhpcy5kcmFnU3RhdGUuc291cmNlUGF0aCA9IHsgdHlwZTogJ2Zsb2F0aW5nJywgaW5kZXg6IGZsb2F0aW5nSW5kZXgsIHNlZ21lbnRzOiBbXSB9O1xuICAgICAgICB0aGlzLmRyYWdTdGF0ZS5mbG9hdGluZ0luZGV4ID0gZmxvYXRpbmdJbmRleDtcbiAgICAgIH1cbiAgICB9LCAwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiB7IHR5cGU6ICdmbG9hdGluZycsIGluZGV4OiAtMSwgc2VnbWVudHM6IFtdIH0sIC8vIFBsYWNlaG9sZGVyIHBhdGhcbiAgICAgIGZsb2F0aW5nSW5kZXg6IC0xLFxuICAgICAgcG9pbnRlck9mZnNldFgsXG4gICAgICBwb2ludGVyT2Zmc2V0WSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBlbmRQYW5lRHJhZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyUGVuZGluZ0RyYWdFbmRUaW1lb3V0KCk7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRyYWdTdGF0ZTtcbiAgICB0aGlzLmRyYWdTdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5oaWRlRHJvcEluZGljYXRvcigpO1xuICAgIHRoaXMuc3RvcERyYWdQb2ludGVyVHJhY2tpbmcoKTtcbiAgICB0aGlzLmxhc3REcmFnUG9pbnRlclBvc2l0aW9uID0gbnVsbDtcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUuZmxvYXRpbmdJbmRleCAhPT0gbnVsbCAmJiAhc3RhdGUuZHJvcEhhbmRsZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hMYXlvdXRDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZHJhZ1N0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy51cGRhdGVEcmFnZ2VkRmxvYXRpbmdQb3NpdGlvbihldmVudCk7XG4gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmZpbmRTdGFja0VsZW1lbnQoZXZlbnQpO1xuICAgIGlmICghc3RhY2spIHtcbiAgICAgIHRoaXMuaGlkZURyb3BJbmRpY2F0b3IoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5wYXJzZVBhdGgoc3RhY2suZGF0YXNldFsncGF0aCddKTtcbiAgICBjb25zdCB6b25lID0gdGhpcy5jb21wdXRlRHJvcFpvbmUoc3RhY2ssIGV2ZW50LCB0aGlzLmV4dHJhY3REcm9wWm9uZUZyb21FdmVudChldmVudCkpO1xuICAgIHRoaXMuc2hvd0Ryb3BJbmRpY2F0b3Ioc3RhY2ssIHpvbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnZ2VkRmxvYXRpbmdQb3NpdGlvbihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSwgc2NyZWVuWCwgc2NyZWVuWSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgaGFzVmFsaWRDb29yZGluYXRlcyA9XG4gICAgICBOdW1iZXIuaXNGaW5pdGUoY2xpZW50WCkgJiZcbiAgICAgIE51bWJlci5pc0Zpbml0ZShjbGllbnRZKSAmJlxuICAgICAgIShjbGllbnRYID09PSAwICYmIGNsaWVudFkgPT09IDAgJiYgc2NyZWVuWCA9PT0gMCAmJiBzY3JlZW5ZID09PSAwKTtcblxuICAgIGlmIChoYXNWYWxpZENvb3JkaW5hdGVzKSB7XG4gICAgICB0aGlzLmxhc3REcmFnUG9pbnRlclBvc2l0aW9uID0geyB4OiBjbGllbnRYLCB5OiBjbGllbnRZIH07XG4gICAgICB0aGlzLnVwZGF0ZURyYWdnZWRGbG9hdGluZ1Bvc2l0aW9uRnJvbVBvaW50KGNsaWVudFgsIGNsaWVudFkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxhc3REcmFnUG9pbnRlclBvc2l0aW9uKSB7XG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMubGFzdERyYWdQb2ludGVyUG9zaXRpb247XG4gICAgICB0aGlzLnVwZGF0ZURyYWdnZWRGbG9hdGluZ1Bvc2l0aW9uRnJvbVBvaW50KHgsIHkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25HbG9iYWxEcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZURyYWdnZWRGbG9hdGluZ1Bvc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgb25EcmFnKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZHJhZ1N0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRHJhZ2dlZEZsb2F0aW5nUG9zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkdsb2JhbERyYWdFbmQoKTogdm9pZCB7XG4gICAgdGhpcy5oaWRlRHJvcEluZGljYXRvcigpO1xuICAgIGlmICghdGhpcy5kcmFnU3RhdGUpIHtcbiAgICAgIHRoaXMuY2xlYXJQZW5kaW5nVGFiRHJhZ01ldHJpY3MoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbmRQYW5lRHJhZygpO1xuICAgIHRoaXMuY2xlYXJQZW5kaW5nVGFiRHJhZ01ldHJpY3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRHJhZ2dlZEZsb2F0aW5nUG9zaXRpb25Gcm9tUG9pbnQoXG4gICAgY2xpZW50WDogbnVtYmVyLFxuICAgIGNsaWVudFk6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGNsaWVudFgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoY2xpZW50WSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVBhbmVEcmFnRHJvcFRhcmdldEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcblxuICAgIGNvbnN0IHsgZmxvYXRpbmdJbmRleCwgcG9pbnRlck9mZnNldFgsIHBvaW50ZXJPZmZzZXRZIH0gPSB0aGlzLmRyYWdTdGF0ZTtcbiAgICBpZiAoZmxvYXRpbmdJbmRleCA9PT0gbnVsbCB8fCBmbG9hdGluZ0luZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbZmxvYXRpbmdJbmRleF07XG4gICAgaWYgKCFmbG9hdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhvc3RSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBuZXdMZWZ0ID0gY2xpZW50WCAtIGhvc3RSZWN0LmxlZnQgLSBwb2ludGVyT2Zmc2V0WDtcbiAgICBjb25zdCBuZXdUb3AgPSBjbGllbnRZIC0gaG9zdFJlY3QudG9wIC0gcG9pbnRlck9mZnNldFk7XG5cbiAgICBmbG9hdGluZy5ib3VuZHMubGVmdCA9IG5ld0xlZnQ7XG4gICAgZmxvYXRpbmcuYm91bmRzLnRvcCA9IG5ld1RvcDtcblxuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldEZsb2F0aW5nV3JhcHBlcihmbG9hdGluZ0luZGV4KTtcbiAgICBpZiAod3JhcHBlcikge1xuICAgICAgd3JhcHBlci5zdHlsZS5sZWZ0ID0gYCR7bmV3TGVmdH1weGA7XG4gICAgICB3cmFwcGVyLnN0eWxlLnRvcCA9IGAke25ld1RvcH1weGA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYW5lRHJhZ0Ryb3BUYXJnZXRGcm9tUG9pbnQoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZHJhZ1N0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmZpbmRTdGFja0F0UG9pbnQoY2xpZW50WCwgY2xpZW50WSk7XG4gICAgaWYgKCFzdGFjaykge1xuICAgICAgdGhpcy5oaWRlRHJvcEluZGljYXRvcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSB0aGlzLnBhcnNlUGF0aChzdGFjay5kYXRhc2V0WydwYXRoJ10pO1xuICAgIGlmICghcGF0aCkge1xuICAgICAgdGhpcy5oaWRlRHJvcEluZGljYXRvcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHpvbmVIaW50ID0gdGhpcy5maW5kRHJvcFpvbmVCeVBvaW50KGNsaWVudFgsIGNsaWVudFkpO1xuICAgIGNvbnN0IHpvbmUgPSB0aGlzLmNvbXB1dGVEcm9wWm9uZShzdGFjaywgeyBjbGllbnRYLCBjbGllbnRZIH0sIHpvbmVIaW50KTtcbiAgICB0aGlzLnNob3dEcm9wSW5kaWNhdG9yKHN0YWNrLCB6b25lKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnREcmFnUG9pbnRlclRyYWNraW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRyYWdQb2ludGVyVHJhY2tpbmdBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYXN0RHJhZ1BvaW50ZXJQb3NpdGlvbiA9IG51bGw7XG4gICAgY29uc3Qgd2luID0gdGhpcy53aW5kb3dSZWY7XG4gICAgd2luPy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uRHJhZ01vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgd2luPy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uRHJhZ1RvdWNoTW92ZSwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICB3aW4/LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRHJhZ01vdXNlVXAsIHRydWUpO1xuICAgIHdpbj8uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uRHJhZ1RvdWNoRW5kLCB0cnVlKTtcbiAgICB3aW4/LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy5vbkRyYWdUb3VjaEVuZCwgdHJ1ZSk7XG4gICAgdGhpcy5kcmFnUG9pbnRlclRyYWNraW5nQWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcERyYWdQb2ludGVyVHJhY2tpbmcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdQb2ludGVyVHJhY2tpbmdBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgd2luID0gdGhpcy53aW5kb3dSZWY7XG4gICAgd2luPy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uRHJhZ01vdXNlTW92ZSwgdHJ1ZSk7XG4gICAgd2luPy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uRHJhZ1RvdWNoTW92ZSk7XG4gICAgd2luPy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkRyYWdNb3VzZVVwLCB0cnVlKTtcbiAgICB3aW4/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vbkRyYWdUb3VjaEVuZCwgdHJ1ZSk7XG4gICAgd2luPy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMub25EcmFnVG91Y2hFbmQsIHRydWUpO1xuICAgIHRoaXMuZHJhZ1BvaW50ZXJUcmFja2luZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMubGFzdERyYWdQb2ludGVyUG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMuY2xlYXJQZW5kaW5nRHJhZ0VuZFRpbWVvdXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EcmFnTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdTdGF0ZSkge1xuICAgICAgdGhpcy5zdG9wRHJhZ1BvaW50ZXJUcmFja2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5idXR0b25zID09PSAwKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRGVmZXJyZWREcmFnRW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0RHJhZ1BvaW50ZXJQb3NpdGlvbiA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9O1xuICAgIHRoaXMudXBkYXRlRHJhZ2dlZEZsb2F0aW5nUG9zaXRpb25Gcm9tUG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ1RvdWNoTW92ZShldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcmFnU3RhdGUpIHtcbiAgICAgIHRoaXMuc3RvcERyYWdQb2ludGVyVHJhY2tpbmcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbMF07XG4gICAgaWYgKCF0b3VjaCkge1xuICAgICAgdGhpcy5zY2hlZHVsZURlZmVycmVkRHJhZ0VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5sYXN0RHJhZ1BvaW50ZXJQb3NpdGlvbiA9IHsgeDogdG91Y2guY2xpZW50WCwgeTogdG91Y2guY2xpZW50WSB9O1xuICAgIHRoaXMudXBkYXRlRHJhZ2dlZEZsb2F0aW5nUG9zaXRpb25Gcm9tUG9pbnQodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ01vdXNlVXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdTdGF0ZSkge1xuICAgICAgdGhpcy5zdG9wRHJhZ1BvaW50ZXJUcmFja2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2NoZWR1bGVEZWZlcnJlZERyYWdFbmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EcmFnVG91Y2hFbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdTdGF0ZSkge1xuICAgICAgdGhpcy5zdG9wRHJhZ1BvaW50ZXJUcmFja2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2NoZWR1bGVEZWZlcnJlZERyYWdFbmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJQZW5kaW5nRHJhZ0VuZFRpbWVvdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0RyYWdFbmRUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB3aW4gPSB0aGlzLndpbmRvd1JlZjtcbiAgICAgIGlmICh3aW4gJiYgdHlwZW9mIHRoaXMucGVuZGluZ0RyYWdFbmRUaW1lb3V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICB3aW4uY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ0RyYWdFbmRUaW1lb3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdsb2JhbFRoaXMuY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ0RyYWdFbmRUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGVuZGluZ0RyYWdFbmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlRGVmZXJyZWREcmFnRW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBlbmRpbmdEcmFnRW5kVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlRHJhZyA9ICgpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ0RyYWdFbmRUaW1lb3V0ID0gbnVsbDtcbiAgICAgIHRoaXMuaGlkZURyb3BJbmRpY2F0b3IoKTtcbiAgICAgIGlmICghdGhpcy5kcmFnU3RhdGUpIHtcbiAgICAgICAgdGhpcy5jbGVhclBlbmRpbmdUYWJEcmFnTWV0cmljcygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmVuZFBhbmVEcmFnKCk7XG4gICAgICB0aGlzLmNsZWFyUGVuZGluZ1RhYkRyYWdNZXRyaWNzKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHdpbiA9IHRoaXMud2luZG93UmVmO1xuICAgIHRoaXMucGVuZGluZ0RyYWdFbmRUaW1lb3V0ID0gd2luXG4gICAgICA/IHdpbi5zZXRUaW1lb3V0KGNvbXBsZXRlRHJhZywgMClcbiAgICAgIDogc2V0VGltZW91dChjb21wbGV0ZURyYWcsIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcmFnU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHBvaW50RnJvbUV2ZW50ID1cbiAgICAgIE51bWJlci5pc0Zpbml0ZShldmVudC5jbGllbnRYKSAmJiBOdW1iZXIuaXNGaW5pdGUoZXZlbnQuY2xpZW50WSlcbiAgICAgICAgPyB7IGNsaWVudFg6IGV2ZW50LmNsaWVudFgsIGNsaWVudFk6IGV2ZW50LmNsaWVudFkgfVxuICAgICAgICA6IG51bGw7XG5cbiAgICBjb25zdCBwb2ludCA9XG4gICAgICBwb2ludEZyb21FdmVudCA/P1xuICAgICAgKHRoaXMubGFzdERyYWdQb2ludGVyUG9zaXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBjbGllbnRYOiB0aGlzLmxhc3REcmFnUG9pbnRlclBvc2l0aW9uLngsXG4gICAgICAgICAgICBjbGllbnRZOiB0aGlzLmxhc3REcmFnUG9pbnRlclBvc2l0aW9uLnksXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwpO1xuXG4gICAgY29uc3Qgc3RhY2sgPVxuICAgICAgdGhpcy5maW5kU3RhY2tFbGVtZW50KGV2ZW50KSA/P1xuICAgICAgKHBvaW50ID8gdGhpcy5maW5kU3RhY2tBdFBvaW50KHBvaW50LmNsaWVudFgsIHBvaW50LmNsaWVudFkpIDogbnVsbCk7XG5cbiAgICBpZiAoIXN0YWNrKSB7XG4gICAgICB0aGlzLmhpZGVEcm9wSW5kaWNhdG9yKCk7XG4gICAgICB0aGlzLmVuZFBhbmVEcmFnKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMucGFyc2VQYXRoKHN0YWNrLmRhdGFzZXRbJ3BhdGgnXSk7XG4gICAgY29uc3QgZXZlbnRab25lSGludCA9IHRoaXMuZXh0cmFjdERyb3Bab25lRnJvbUV2ZW50KGV2ZW50KTtcbiAgICBjb25zdCBwb2ludFpvbmVIaW50ID0gcG9pbnQgPyB0aGlzLmZpbmREcm9wWm9uZUJ5UG9pbnQocG9pbnQuY2xpZW50WCwgcG9pbnQuY2xpZW50WSkgOiBudWxsO1xuICAgIGNvbnN0IHpvbmUgPSB0aGlzLmNvbXB1dGVEcm9wWm9uZShzdGFjaywgcG9pbnQgPz8gZXZlbnQsIHBvaW50Wm9uZUhpbnQgPz8gZXZlbnRab25lSGludCk7XG4gICAgaWYgKCF6b25lKSB7XG4gICAgICB0aGlzLmhpZGVEcm9wSW5kaWNhdG9yKCk7XG4gICAgICB0aGlzLmVuZFBhbmVEcmFnKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRHJvcChwYXRoLCB6b25lKTtcbiAgICB0aGlzLmVuZFBhbmVEcmFnKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICBpZiAoIXJlbGF0ZWQpIHtcbiAgICAgIHRoaXMuaGlkZURyb3BJbmRpY2F0b3IoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb290Q29udGFpbnMgPSB0aGlzLnJvb3RFbC5jb250YWlucyhyZWxhdGVkKTtcbiAgICBjb25zdCBqb3lzdGlja0NvbnRhaW5zID0gdGhpcy5kcm9wSm95c3RpY2suY29udGFpbnMocmVsYXRlZCk7XG4gICAgaWYgKCFyb290Q29udGFpbnMgJiYgIWpveXN0aWNrQ29udGFpbnMpIHtcbiAgICAgIHRoaXMuaGlkZURyb3BJbmRpY2F0b3IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AodGFyZ2V0UGF0aDogRG9ja1BhdGggfCBudWxsLCB6b25lOiBEcm9wWm9uZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcmFnU3RhdGUgfHwgIXRhcmdldFBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhbmUsIHNvdXJjZVBhdGggfSA9IHRoaXMuZHJhZ1N0YXRlO1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVzb2x2ZVN0YWNrTG9jYXRpb24oc291cmNlUGF0aCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlU3RhY2tMb2NhdGlvbih0YXJnZXRQYXRoKTtcblxuICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoem9uZSA9PT0gJ2NlbnRlcicgJiYgdGhpcy5wYXRoc0VxdWFsKHNvdXJjZVBhdGgsIHRhcmdldFBhdGgpKSB7XG4gICAgICBpZiAoIXNvdXJjZS5ub2RlLnBhbmVzLmluY2x1ZGVzKHBhbmUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVvcmRlclBhbmVJbkxvY2F0aW9uKHNvdXJjZSwgcGFuZSk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5kaXNwYXRjaExheW91dENoYW5nZWQoKTtcbiAgICAgIGlmICh0aGlzLmRyYWdTdGF0ZSkge1xuICAgICAgICB0aGlzLmRyYWdTdGF0ZS5kcm9wSGFuZGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFuZVRpdGxlID0gc291cmNlLm5vZGUudGl0bGVzPy5bcGFuZV07XG4gICAgY29uc3Qgc3RhY2tFbXB0aWVkID0gdGhpcy5yZW1vdmVQYW5lRnJvbUxvY2F0aW9uKHNvdXJjZSwgcGFuZSwgdHJ1ZSk7XG5cbiAgICBpZiAoem9uZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIHRoaXMuYWRkUGFuZVRvTG9jYXRpb24odGFyZ2V0LCBwYW5lKTtcbiAgICAgIHRoaXMuc2V0QWN0aXZlUGFuZUZvckxvY2F0aW9uKHRhcmdldCwgcGFuZSk7XG4gICAgICBpZiAocGFuZVRpdGxlKSB7XG4gICAgICAgIHRhcmdldC5ub2RlLnRpdGxlcyA9IHRhcmdldC5ub2RlLnRpdGxlcyA/IHsgLi4udGFyZ2V0Lm5vZGUudGl0bGVzIH0gOiB7fTtcbiAgICAgICAgdGFyZ2V0Lm5vZGUudGl0bGVzW3BhbmVdID0gcGFuZVRpdGxlO1xuICAgICAgfVxuICAgICAgaWYgKHN0YWNrRW1wdGllZCkge1xuICAgICAgICB0aGlzLmNsZWFudXBMb2NhdGlvbihzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hMYXlvdXRDaGFuZ2VkKCk7XG4gICAgICBpZiAodGhpcy5kcmFnU3RhdGUpIHtcbiAgICAgICAgdGhpcy5kcmFnU3RhdGUuZHJvcEhhbmRsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1N0YWNrOiBEb2NrU3RhY2tOb2RlID0ge1xuICAgICAga2luZDogJ3N0YWNrJyxcbiAgICAgIHBhbmVzOiBbcGFuZV0sXG4gICAgICBhY3RpdmVQYW5lOiBwYW5lLFxuICAgIH07XG5cbiAgICBpZiAocGFuZVRpdGxlKSB7XG4gICAgICBuZXdTdGFjay50aXRsZXMgPSB7IFtwYW5lXTogcGFuZVRpdGxlIH07XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldC5jb250ZXh0ID09PSAnZG9ja2VkJykge1xuICAgICAgdGhpcy5yb290TGF5b3V0ID0gdGhpcy5kb2NrTm9kZUJlc2lkZSh0aGlzLnJvb3RMYXlvdXQsIHRhcmdldC5ub2RlLCBuZXdTdGFjaywgem9uZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbdGFyZ2V0LmluZGV4XTtcbiAgICAgIGlmICghZmxvYXRpbmcpIHtcbiAgICAgICAgaWYgKHN0YWNrRW1wdGllZCkge1xuICAgICAgICAgIHRoaXMuY2xlYW51cExvY2F0aW9uKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaExheW91dENoYW5nZWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmbG9hdGluZy5yb290ID0gdGhpcy5kb2NrTm9kZUJlc2lkZShmbG9hdGluZy5yb290LCB0YXJnZXQubm9kZSwgbmV3U3RhY2ssIHpvbmUpO1xuICAgICAgZmxvYXRpbmcuYWN0aXZlUGFuZSA9IHBhbmU7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrRW1wdGllZCkge1xuICAgICAgdGhpcy5jbGVhbnVwTG9jYXRpb24oc291cmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMuZGlzcGF0Y2hMYXlvdXRDaGFuZ2VkKCk7XG4gICAgaWYgKHRoaXMuZHJhZ1N0YXRlKSB7XG4gICAgICB0aGlzLmRyYWdTdGF0ZS5kcm9wSGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGbG9hdGluZ1N0YWNrRHJvcChzb3VyY2VJbmRleDogbnVtYmVyLCB0YXJnZXRQYXRoOiBEb2NrUGF0aCwgem9uZTogRHJvcFpvbmUpOiBib29sZWFuIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmZsb2F0aW5nTGF5b3V0c1tzb3VyY2VJbmRleF07XG4gICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS5yb290KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlU3RhY2tMb2NhdGlvbih0YXJnZXRQYXRoKTtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXQuY29udGV4dCA9PT0gJ2Zsb2F0aW5nJyAmJiB0YXJnZXQuaW5kZXggPT09IHNvdXJjZUluZGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHpvbmUgPT09ICdjZW50ZXInKSB7XG4gICAgICBjb25zdCB7IHBhbmVzLCB0aXRsZXMgfSA9IHRoaXMuY29sbGVjdEZsb2F0aW5nUGFuZU1ldGFkYXRhKHNvdXJjZS5yb290KTtcbiAgICAgIGlmIChwYW5lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBwYW5lcy5mb3JFYWNoKChwYW5lKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkUGFuZVRvTG9jYXRpb24odGFyZ2V0LCBwYW5lKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aXRsZXNbcGFuZV07XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgIHRhcmdldC5ub2RlLnRpdGxlcyA9IHRhcmdldC5ub2RlLnRpdGxlcyA/IHsgLi4udGFyZ2V0Lm5vZGUudGl0bGVzIH0gOiB7fTtcbiAgICAgICAgICB0YXJnZXQubm9kZS50aXRsZXNbcGFuZV0gPSB0aXRsZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFjdGl2ZVBhbmUgPVxuICAgICAgICBzb3VyY2UuYWN0aXZlUGFuZSAmJiBwYW5lcy5pbmNsdWRlcyhzb3VyY2UuYWN0aXZlUGFuZSlcbiAgICAgICAgICA/IHNvdXJjZS5hY3RpdmVQYW5lXG4gICAgICAgICAgOiB0aGlzLmZpbmRGaXJzdFBhbmVOYW1lKHNvdXJjZS5yb290KSA/PyBwYW5lc1swXTtcblxuICAgICAgaWYgKGFjdGl2ZVBhbmUpIHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVQYW5lRm9yTG9jYXRpb24odGFyZ2V0LCBhY3RpdmVQYW5lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVGbG9hdGluZ0F0KHNvdXJjZUluZGV4KTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLmRpc3BhdGNoTGF5b3V0Q2hhbmdlZCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldC5jb250ZXh0ID09PSAnZmxvYXRpbmcnKSB7XG4gICAgICBjb25zdCBmbG9hdGluZyA9IHRoaXMuZmxvYXRpbmdMYXlvdXRzW3RhcmdldC5pbmRleF07XG4gICAgICBpZiAoIWZsb2F0aW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZmxvYXRpbmcucm9vdCA9IHRoaXMuZG9ja05vZGVCZXNpZGUoZmxvYXRpbmcucm9vdCwgdGFyZ2V0Lm5vZGUsIHNvdXJjZS5yb290LCB6b25lKTtcbiAgICAgIGZsb2F0aW5nLmFjdGl2ZVBhbmUgPSBzb3VyY2UuYWN0aXZlUGFuZSA/PyB0aGlzLmZpbmRGaXJzdFBhbmVOYW1lKHNvdXJjZS5yb290KSA/PyB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnJlbW92ZUZsb2F0aW5nQXQoc291cmNlSW5kZXgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hMYXlvdXRDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3RMYXlvdXQgPSB0aGlzLmRvY2tOb2RlQmVzaWRlKHRoaXMucm9vdExheW91dCwgdGFyZ2V0Lm5vZGUsIHNvdXJjZS5yb290LCB6b25lKTtcbiAgICB0aGlzLnJlbW92ZUZsb2F0aW5nQXQoc291cmNlSW5kZXgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5kaXNwYXRjaExheW91dENoYW5nZWQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0V2VpZ2h0KHNpemVzOiBudW1iZXJbXSB8IHVuZGVmaW5lZCwgaW5kZXg6IG51bWJlciwgdG90YWxDaGlsZHJlbjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGV4aXN0aW5nQ291bnQgPSB0b3RhbENoaWxkcmVuIC0gMTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVTaXplc0FycmF5KHNpemVzLCBleGlzdGluZ0NvdW50KTtcbiAgICBjb25zdCBuZXdXZWlnaHQgPSAxIC8gdG90YWxDaGlsZHJlbjtcbiAgICBjb25zdCByZW1haW5pbmcgPSAxIC0gbmV3V2VpZ2h0O1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQ2hpbGRyZW47IGkgKz0gMSkge1xuICAgICAgaWYgKGkgPT09IGluZGV4KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5ld1dlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzb3VyY2VJbmRleCA9IGkgPCBpbmRleCA/IGkgOiBpIC0gMTtcbiAgICAgICAgcmVzdWx0LnB1c2gobm9ybWFsaXplZFtzb3VyY2VJbmRleF0gKiByZW1haW5pbmcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQYW5lRnJvbVN0YWNrKHN0YWNrOiBEb2NrU3RhY2tOb2RlLCBwYW5lOiBzdHJpbmcsIHNraXBDbGVhbnVwID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBzdGFjay5wYW5lcyA9IHN0YWNrLnBhbmVzLmZpbHRlcigocCkgPT4gcCAhPT0gcGFuZSk7XG4gICAgaWYgKCFzdGFjay5wYW5lcy5pbmNsdWRlcyhzdGFjay5hY3RpdmVQYW5lID8/ICcnKSkge1xuICAgICAgaWYgKHN0YWNrLnBhbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhY2suYWN0aXZlUGFuZSA9IHN0YWNrLnBhbmVzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHN0YWNrLmFjdGl2ZVBhbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLnBhbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc2tpcENsZWFudXApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMucm9vdExheW91dCA9IHRoaXMuY2xlYW51cEVtcHR5U3RhY2tJblRyZWUodGhpcy5yb290TGF5b3V0LCBzdGFjayk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnRTcGxpdChcbiAgICBub2RlOiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwsXG4gICAgY2hpbGQ6IERvY2tMYXlvdXROb2RlLFxuICApOiB7IHBhcmVudDogRG9ja1NwbGl0Tm9kZTsgaW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgaWYgKCFub2RlIHx8IG5vZGUgPT09IGNoaWxkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5raW5kICE9PSAnc3BsaXQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IG5vZGUuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgcmV0dXJuIHsgcGFyZW50OiBub2RlLCBpbmRleCB9O1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUGFyZW50U3BsaXQobm9kZS5jaGlsZHJlbltpXSwgY2hpbGQpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRHJvcFpvbmUoXG4gICAgc3RhY2s6IEhUTUxFbGVtZW50LFxuICAgIHBvaW50OiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0gfCBudWxsLFxuICAgIHpvbmVIaW50PzogRHJvcFpvbmUgfCBudWxsLFxuICApOiBEcm9wWm9uZSB8IG51bGwge1xuICAgIGNvbnN0IGhpbnRlZFpvbmUgPSB0aGlzLmlzRHJvcFpvbmUoem9uZUhpbnQpID8gem9uZUhpbnQgOiBudWxsO1xuICAgIGlmIChoaW50ZWRab25lKSB7XG4gICAgICB0aGlzLnVwZGF0ZURyb3BKb3lzdGlja0FjdGl2ZVpvbmUoaGludGVkWm9uZSk7XG4gICAgICByZXR1cm4gaGludGVkWm9uZTtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludFpvbmUgPVxuICAgICAgcG9pbnQgJiZcbiAgICAgIE51bWJlci5pc0Zpbml0ZShwb2ludC5jbGllbnRYKSAmJlxuICAgICAgTnVtYmVyLmlzRmluaXRlKHBvaW50LmNsaWVudFkpXG4gICAgICAgID8gdGhpcy5maW5kRHJvcFpvbmVCeVBvaW50KHBvaW50LmNsaWVudFgsIHBvaW50LmNsaWVudFkpXG4gICAgICAgIDogbnVsbDtcblxuICAgIGlmIChwb2ludFpvbmUpIHtcbiAgICAgIHRoaXMudXBkYXRlRHJvcEpveXN0aWNrQWN0aXZlWm9uZShwb2ludFpvbmUpO1xuICAgICAgcmV0dXJuIHBvaW50Wm9uZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcm9wSm95c3RpY2tUYXJnZXQgPT09IHN0YWNrKSB7XG4gICAgICB0aGlzLnVwZGF0ZURyb3BKb3lzdGlja0FjdGl2ZVpvbmUobnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REcm9wWm9uZUZyb21FdmVudChldmVudDogRXZlbnQpOiBEcm9wWm9uZSB8IG51bGwge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgKGV2ZW50IGFzIERyYWdFdmVudCkuY29tcG9zZWRQYXRoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBwYXRoID0gKGV2ZW50IGFzIERyYWdFdmVudCkuY29tcG9zZWRQYXRoKCk7XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBwYXRoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgICAgIHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2RvY2stZHJvcC1qb3lzdGlja19fYnV0dG9uJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgem9uZSA9IHRhcmdldC5kYXRhc2V0Py5bJ3pvbmUnXTtcbiAgICAgICAgICBpZiAodGhpcy5pc0Ryb3Bab25lKHpvbmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gem9uZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ2NsaWVudFgnIGluIGV2ZW50ICYmICdjbGllbnRZJyBpbiBldmVudCkge1xuICAgICAgY29uc3QgcG9pbnRFdmVudCA9IGV2ZW50IGFzIE1vdXNlRXZlbnQ7XG4gICAgICBjb25zdCB6b25lRnJvbVBvaW50ID0gdGhpcy5maW5kRHJvcFpvbmVCeVBvaW50KHBvaW50RXZlbnQuY2xpZW50WCwgcG9pbnRFdmVudC5jbGllbnRZKTtcbiAgICAgIGlmICh6b25lRnJvbVBvaW50KSB7XG4gICAgICAgIHJldHVybiB6b25lRnJvbVBvaW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRHJvcFpvbmVCeVBvaW50KGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogRHJvcFpvbmUgfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5kcm9wSm95c3RpY2tCdXR0b25zIHx8XG4gICAgICB0aGlzLmRyb3BKb3lzdGljay5kYXRhc2V0Wyd2aXNpYmxlJ10gIT09ICd0cnVlJyB8fFxuICAgICAgIXRoaXMuZHJvcEpveXN0aWNrVGFyZ2V0XG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB0aGlzLmRyb3BKb3lzdGlja0J1dHRvbnMpIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBidXR0b24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAoXG4gICAgICAgIGNsaWVudFggPj0gcmVjdC5sZWZ0ICYmXG4gICAgICAgIGNsaWVudFggPD0gcmVjdC5yaWdodCAmJlxuICAgICAgICBjbGllbnRZID49IHJlY3QudG9wICYmXG4gICAgICAgIGNsaWVudFkgPD0gcmVjdC5ib3R0b21cbiAgICAgICkge1xuICAgICAgICBjb25zdCB6b25lID0gYnV0dG9uLmRhdGFzZXRbJ3pvbmUnXTtcbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wWm9uZSh6b25lKSkge1xuICAgICAgICAgIHJldHVybiB6b25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURyb3BKb3lzdGlja0FjdGl2ZVpvbmUoem9uZTogRHJvcFpvbmUgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wSm95c3RpY2tCdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSB6b25lICE9PSBudWxsICYmIGJ1dHRvbi5kYXRhc2V0Wyd6b25lJ10gPT09IHpvbmU7XG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgYnV0dG9uLmRhdGFzZXRbJ2FjdGl2ZSddID0gJ3RydWUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGJ1dHRvbi5kYXRhc2V0WydhY3RpdmUnXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoem9uZSkge1xuICAgICAgdGhpcy5kcm9wSm95c3RpY2suZGF0YXNldFsnem9uZSddID0gem9uZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuZHJvcEpveXN0aWNrLmRhdGFzZXRbJ3pvbmUnXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRHJvcFpvbmUodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2YWx1ZSBpcyBEcm9wWm9uZSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnbGVmdCcgfHwgdmFsdWUgPT09ICdyaWdodCcgfHwgdmFsdWUgPT09ICd0b3AnIHx8IHZhbHVlID09PSAnYm90dG9tJyB8fCB2YWx1ZSA9PT0gJ2NlbnRlcic7XG4gIH1cblxuICBwcml2YXRlIHNob3dEcm9wSW5kaWNhdG9yKHN0YWNrOiBIVE1MRWxlbWVudCwgem9uZTogRHJvcFpvbmUgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9IHRoaXMucGFyc2VQYXRoKHN0YWNrLmRhdGFzZXRbJ3BhdGgnXSk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHRoaXMuZHJhZ1N0YXRlPy5zb3VyY2VQYXRoID8/IG51bGw7XG4gICAgaWYgKHRhcmdldFBhdGggJiYgc291cmNlUGF0aCAmJiB0aGlzLmlzT3JJc0FuY2VzdG9yT2YodGFyZ2V0UGF0aCwgc291cmNlUGF0aCkpIHtcbiAgICAgIC8vIERvbid0IHNob3cgYW55IGRyb3AgaW5kaWNhdG9ycyBvbiB0aGUgcGFuZSBiZWluZyBkcmFnZ2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY3QgPSBzdGFjay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBob3N0UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5kcm9wSW5kaWNhdG9yO1xuICAgIGNvbnN0IGpveXN0aWNrID0gdGhpcy5kcm9wSm95c3RpY2s7XG5cbiAgICBqb3lzdGljay5oaWRkZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhdGggPSB0aGlzLnBhcnNlUGF0aChzdGFjay5kYXRhc2V0WydwYXRoJ10pO1xuICAgIGxldCBvdmVybGF5WiA9IDEwMDtcbiAgICBpZiAocGF0aCAmJiBwYXRoLnR5cGUgPT09ICdmbG9hdGluZycpIHtcbiAgICAgIG92ZXJsYXlaID0gdGhpcy5nZXRGbG9hdGluZ1BhbmVaSW5kZXgocGF0aC5pbmRleCkgKyAxMDA7XG4gICAgfVxuICAgIGluZGljYXRvci5zdHlsZS56SW5kZXggPSBTdHJpbmcob3ZlcmxheVopO1xuICAgIGpveXN0aWNrLnN0eWxlLnpJbmRleCA9IFN0cmluZyhvdmVybGF5WiArIDEpO1xuXG4gICAgbGV0IGxlZnQgPSByZWN0LmxlZnQgLSBob3N0UmVjdC5sZWZ0O1xuICAgIGxldCB0b3AgPSByZWN0LnRvcCAtIGhvc3RSZWN0LnRvcDtcbiAgICBsZXQgd2lkdGggPSByZWN0LndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSByZWN0LmhlaWdodDtcblxuICAgIGNvbnN0IHBvcnRpb24gPSAwLjU7XG5cbiAgICBpZiAoem9uZSkge1xuICAgICAgc3dpdGNoICh6b25lKSB7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIHdpZHRoID0gcmVjdC53aWR0aCAqIHBvcnRpb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICB3aWR0aCA9IHJlY3Qud2lkdGggKiBwb3J0aW9uO1xuICAgICAgICAgIGxlZnQgKz0gcmVjdC53aWR0aCAqICgxIC0gcG9ydGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwb3J0aW9uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcG9ydGlvbjtcbiAgICAgICAgICB0b3AgKz0gcmVjdC5oZWlnaHQgKiAoMSAtIHBvcnRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgaW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgICBpbmRpY2F0b3Iuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICBpbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgIGluZGljYXRvci5kYXRhc2V0Wyd2aXNpYmxlJ10gPSAndHJ1ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGljYXRvci5kYXRhc2V0Wyd2aXNpYmxlJ10gPSAnZmFsc2UnO1xuICAgIH1cblxuICAgIGpveXN0aWNrLnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgLSBob3N0UmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDJ9cHhgO1xuICAgIGpveXN0aWNrLnN0eWxlLnRvcCA9IGAke3JlY3QudG9wIC0gaG9zdFJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyfXB4YDtcbiAgICBqb3lzdGljay5kYXRhc2V0Wyd2aXNpYmxlJ10gPSAndHJ1ZSc7XG4gICAgdGhpcy5kcm9wSm95c3RpY2suc3R5bGUuZGlzcGxheSA9ICdncmlkJztcbiAgICBqb3lzdGljay5kYXRhc2V0WydwYXRoJ10gPSBzdGFjay5kYXRhc2V0WydwYXRoJ10gPz8gJyc7XG4gICAgdGhpcy5kcm9wSm95c3RpY2tUYXJnZXQgPSBzdGFjaztcbiAgICB0aGlzLnVwZGF0ZURyb3BKb3lzdGlja0FjdGl2ZVpvbmUoem9uZSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVEcm9wSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgIHRoaXMuZHJvcEluZGljYXRvci5kYXRhc2V0Wyd2aXNpYmxlJ10gPSAnZmFsc2UnO1xuICAgIHRoaXMuZHJvcEpveXN0aWNrLmRhdGFzZXRbJ3Zpc2libGUnXSA9ICdmYWxzZSc7XG4gICAgdGhpcy5kcm9wSm95c3RpY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBkZWxldGUgdGhpcy5kcm9wSm95c3RpY2suZGF0YXNldFsncGF0aCddO1xuICAgIHRoaXMuZHJvcEpveXN0aWNrVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZURyb3BKb3lzdGlja0FjdGl2ZVpvbmUobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRTdGFja0F0UG9pbnQoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IHNoYWRvdyA9IHRoaXMuc2hhZG93Um9vdDtcbiAgICBpZiAoIXNoYWRvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBzaGFkb3cuZWxlbWVudHNGcm9tUG9pbnQoY2xpZW50WCwgY2xpZW50WSk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkb2NrLXN0YWNrJykpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZHJvcEpveXN0aWNrVGFyZ2V0ICYmXG4gICAgICAgIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZG9jay1kcm9wLWpveXN0aWNrJykgfHxcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZG9jay1kcm9wLWpveXN0aWNrX19idXR0b24nKSB8fFxuICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkb2NrLWRyb3Atam95c3RpY2tfX3NwYWNlcicpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3BKb3lzdGlja1RhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFN0YWNrRWxlbWVudChldmVudDogRHJhZ0V2ZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgcGF0aCkge1xuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2RvY2stc3RhY2snKSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRyb3BKb3lzdGlja1RhcmdldCAmJlxuICAgICAgICAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZG9jay1kcm9wLWpveXN0aWNrJykgfHxcbiAgICAgICAgICB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkb2NrLWRyb3Atam95c3RpY2tfX2J1dHRvbicpIHx8XG4gICAgICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZG9jay1kcm9wLWpveXN0aWNrX19zcGFjZXInKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wSm95c3RpY2tUYXJnZXQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZVBhbmUoc3RhY2s6IEhUTUxFbGVtZW50LCBwYW5lTmFtZTogc3RyaW5nLCBwYXRoOiBEb2NrUGF0aCk6IHZvaWQge1xuICAgIHN0YWNrLmRhdGFzZXRbJ2FjdGl2ZVBhbmUnXSA9IHBhbmVOYW1lO1xuXG4gICAgY29uc3QgaGVhZGVyQnV0dG9ucyA9IHN0YWNrLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEJ1dHRvbkVsZW1lbnQ+KCcuZG9jay10YWInKTtcbiAgICBoZWFkZXJCdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1dHRvbi5kYXRhc2V0WydwYW5lJ10gPT09IHBhbmVOYW1lO1xuICAgICAgYnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoJ2RvY2stdGFiLS1hY3RpdmUnLCBpc1NlbGVjdGVkKTtcbiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBTdHJpbmcoaXNTZWxlY3RlZCkpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGFuZXMgPSBzdGFjay5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmRvY2stc3RhY2tfX3BhbmUnKTtcbiAgICBwYW5lcy5mb3JFYWNoKChwYW5lKSA9PiB7XG4gICAgICBpZiAocGFuZS5kYXRhc2V0WydwYW5lJ10gPT09IHBhbmVOYW1lKSB7XG4gICAgICAgIHBhbmUucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhbmUuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMucmVzb2x2ZVN0YWNrTG9jYXRpb24ocGF0aCk7XG4gICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvY2F0aW9uLm5vZGUuYWN0aXZlUGFuZSA9IHBhbmVOYW1lO1xuICAgIGlmIChwYXRoLnR5cGUgPT09ICdmbG9hdGluZycpIHtcbiAgICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbcGF0aC5pbmRleF07XG4gICAgICBpZiAoZmxvYXRpbmcpIHtcbiAgICAgICAgZmxvYXRpbmcuYWN0aXZlUGFuZSA9IHBhbmVOYW1lO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVGbG9hdGluZ1dpbmRvd1RpdGxlKHBhdGguaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoTGF5b3V0Q2hhbmdlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb2RlQXRQYXRoKHJvb3Q6IERvY2tMYXlvdXROb2RlIHwgbnVsbCwgcGF0aDogbnVtYmVyW10pOiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwge1xuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnQ6IERvY2tMYXlvdXROb2RlIHwgbnVsbCA9IHJvb3Q7XG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgcGF0aCkge1xuICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQua2luZCAhPT0gJ3NwbGl0Jykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNoaWxkcmVuW3NlZ21lbnRdID8/IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTcGxpdE5vZGUocGF0aDogRG9ja1BhdGgpOiBEb2NrU3BsaXROb2RlIHwgbnVsbCB7XG4gICAgaWYgKHBhdGgudHlwZSA9PT0gJ2RvY2tlZCcpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVBdFBhdGgodGhpcy5yb290TGF5b3V0LCBwYXRoLnNlZ21lbnRzKTtcbiAgICAgIHJldHVybiBub2RlICYmIG5vZGUua2luZCA9PT0gJ3NwbGl0JyA/IG5vZGUgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbcGF0aC5pbmRleF07XG4gICAgaWYgKCFmbG9hdGluZyB8fCAhZmxvYXRpbmcucm9vdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChmbG9hdGluZy5yb290LCBwYXRoLnNlZ21lbnRzKTtcbiAgICByZXR1cm4gbm9kZSAmJiBub2RlLmtpbmQgPT09ICdzcGxpdCcgPyBub2RlIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZU5vZGVJblRyZWUoXG4gICAgcm9vdDogRG9ja0xheW91dE5vZGUgfCBudWxsLFxuICAgIHRhcmdldDogRG9ja0xheW91dE5vZGUsXG4gICAgcmVwbGFjZW1lbnQ6IERvY2tMYXlvdXROb2RlLFxuICApOiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwge1xuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgIH1cblxuICAgIGlmIChyb290ID09PSB0YXJnZXQpIHtcbiAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRJbmZvID0gdGhpcy5maW5kUGFyZW50U3BsaXQocm9vdCwgdGFyZ2V0KTtcbiAgICBpZiAoIXBhcmVudEluZm8pIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIHBhcmVudEluZm8ucGFyZW50LmNoaWxkcmVuW3BhcmVudEluZm8uaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgdGhpcy5ub3JtYWxpemVTcGxpdE5vZGUocGFyZW50SW5mby5wYXJlbnQpO1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwRW1wdHlTdGFja0luVHJlZShcbiAgICByb290OiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwsXG4gICAgc3RhY2s6IERvY2tTdGFja05vZGUsXG4gICk6IERvY2tMYXlvdXROb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFyb290IHx8IHN0YWNrLnBhbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEluZm8gPSB0aGlzLmZpbmRQYXJlbnRTcGxpdChyb290LCBzdGFjayk7XG4gICAgaWYgKCFwYXJlbnRJbmZvKSB7XG4gICAgICByZXR1cm4gcm9vdCA9PT0gc3RhY2sgPyBudWxsIDogcm9vdDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRJbmZvLnBhcmVudDtcbiAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHN0YWNrKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG5cbiAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJlbnQuc2l6ZXMpKSB7XG4gICAgICBwYXJlbnQuc2l6ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5ub3JtYWxpemVTcGxpdE5vZGUocGFyZW50KTtcblxuICAgIHJldHVybiB0aGlzLmNsZWFudXBTcGxpdElmTmVjZXNzYXJ5KHJvb3QsIHBhcmVudCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBTcGxpdElmTmVjZXNzYXJ5KFxuICAgIHJvb3Q6IERvY2tMYXlvdXROb2RlIHwgbnVsbCxcbiAgICBzcGxpdDogRG9ja1NwbGl0Tm9kZSxcbiAgKTogRG9ja0xheW91dE5vZGUgfCBudWxsIHtcbiAgICBpZiAoc3BsaXQuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsYWNlTm9kZUluVHJlZShyb290LCBzcGxpdCwgc3BsaXQuY2hpbGRyZW5bMF0pO1xuICAgIH1cblxuICAgIGlmIChzcGxpdC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHBhcmVudEluZm8gPSB0aGlzLmZpbmRQYXJlbnRTcGxpdChyb290LCBzcGxpdCk7XG4gICAgICBpZiAoIXBhcmVudEluZm8pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudEluZm8ucGFyZW50O1xuICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihzcGxpdCk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJlbnQuc2l6ZXMpKSB7XG4gICAgICAgICAgcGFyZW50LnNpemVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3JtYWxpemVTcGxpdE5vZGUocGFyZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW51cFNwbGl0SWZOZWNlc3Nhcnkocm9vdCwgcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIHByaXZhdGUgZG9ja05vZGVCZXNpZGUoXG4gICAgcm9vdDogRG9ja0xheW91dE5vZGUgfCBudWxsLFxuICAgIHRhcmdldE5vZGU6IERvY2tTdGFja05vZGUsXG4gICAgbmV3Tm9kZTogRG9ja0xheW91dE5vZGUsXG4gICAgem9uZTogRHJvcFpvbmUsXG4gICk6IERvY2tMYXlvdXROb2RlIHwgbnVsbCB7XG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSB6b25lID09PSAnbGVmdCcgfHwgem9uZSA9PT0gJ3JpZ2h0JyA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgY29uc3QgcGxhY2VCZWZvcmUgPSB6b25lID09PSAnbGVmdCcgfHwgem9uZSA9PT0gJ3RvcCc7XG4gICAgY29uc3QgcGFyZW50SW5mbyA9IHRoaXMuZmluZFBhcmVudFNwbGl0KHJvb3QsIHRhcmdldE5vZGUpO1xuXG4gICAgaWYgKHBhcmVudEluZm8gJiYgcGFyZW50SW5mby5wYXJlbnQuZGlyZWN0aW9uID09PSBvcmllbnRhdGlvbikge1xuICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBwbGFjZUJlZm9yZSA/IHBhcmVudEluZm8uaW5kZXggOiBwYXJlbnRJbmZvLmluZGV4ICsgMTtcbiAgICAgIHBhcmVudEluZm8ucGFyZW50LmNoaWxkcmVuLnNwbGljZShpbnNlcnRJbmRleCwgMCwgbmV3Tm9kZSk7XG4gICAgICBwYXJlbnRJbmZvLnBhcmVudC5zaXplcyA9IHRoaXMuaW5zZXJ0V2VpZ2h0KFxuICAgICAgICBwYXJlbnRJbmZvLnBhcmVudC5zaXplcyxcbiAgICAgICAgaW5zZXJ0SW5kZXgsXG4gICAgICAgIHBhcmVudEluZm8ucGFyZW50LmNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gcm9vdCA/PyBuZXdOb2RlO1xuICAgIH1cblxuICAgIGNvbnN0IHNwbGl0OiBEb2NrU3BsaXROb2RlID0ge1xuICAgICAga2luZDogJ3NwbGl0JyxcbiAgICAgIGRpcmVjdGlvbjogb3JpZW50YXRpb24sXG4gICAgICBjaGlsZHJlbjogcGxhY2VCZWZvcmUgPyBbbmV3Tm9kZSwgdGFyZ2V0Tm9kZV0gOiBbdGFyZ2V0Tm9kZSwgbmV3Tm9kZV0sXG4gICAgICBzaXplczogWzAuNSwgMC41XSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZU5vZGVJblRyZWUocm9vdCwgdGFyZ2V0Tm9kZSwgc3BsaXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JFYWNoU3RhY2soXG4gICAgbm9kZTogRG9ja0xheW91dE5vZGUgfCBudWxsLFxuICAgIHZpc2l0b3I6IChzdGFjazogRG9ja1N0YWNrTm9kZSwgcGF0aDogbnVtYmVyW10pID0+IHZvaWQsXG4gICAgcGF0aDogbnVtYmVyW10gPSBbXSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUua2luZCA9PT0gJ3N0YWNrJykge1xuICAgICAgdmlzaXRvcihub2RlLCBwYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgIHRoaXMuZm9yRWFjaFN0YWNrKGNoaWxkLCB2aXNpdG9yLCBbLi4ucGF0aCwgaW5kZXhdKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU3RhY2tDb250YWluaW5nUGFuZShcbiAgICBub2RlOiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwsXG4gICAgcGFuZTogc3RyaW5nLFxuICApOiBEb2NrU3RhY2tOb2RlIHwgbnVsbCB7XG4gICAgbGV0IHJlc3VsdDogRG9ja1N0YWNrTm9kZSB8IG51bGwgPSBudWxsO1xuICAgIHRoaXMuZm9yRWFjaFN0YWNrKG5vZGUsIChzdGFjaykgPT4ge1xuICAgICAgaWYgKCFyZXN1bHQgJiYgc3RhY2sucGFuZXMuaW5jbHVkZXMocGFuZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gc3RhY2s7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEZpcnN0UGFuZU5hbWUobm9kZTogRG9ja0xheW91dE5vZGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGZvdW5kOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICB0aGlzLmZvckVhY2hTdGFjayhub2RlLCAoc3RhY2spID0+IHtcbiAgICAgIGlmIChmb3VuZCB8fCBzdGFjay5wYW5lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YWNrLmFjdGl2ZVBhbmUgJiYgc3RhY2sucGFuZXMuaW5jbHVkZXMoc3RhY2suYWN0aXZlUGFuZSkpIHtcbiAgICAgICAgZm91bmQgPSBzdGFjay5hY3RpdmVQYW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm91bmQgPSBzdGFjay5wYW5lc1swXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RGbG9hdGluZ1BhbmVNZXRhZGF0YShcbiAgICBub2RlOiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwsXG4gICk6IHsgcGFuZXM6IHN0cmluZ1tdOyB0aXRsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSB7XG4gICAgY29uc3QgcGFuZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgdGl0bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdGhpcy5mb3JFYWNoU3RhY2sobm9kZSwgKHN0YWNrKSA9PiB7XG4gICAgICBzdGFjay5wYW5lcy5mb3JFYWNoKChwYW5lKSA9PiB7XG4gICAgICAgIHBhbmVzLnB1c2gocGFuZSk7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gc3RhY2sudGl0bGVzPy5bcGFuZV07XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgIHRpdGxlc1twYW5lXSA9IHRpdGxlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBwYW5lcywgdGl0bGVzIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUZsb2F0aW5nTGF5b3V0KFxuICAgIGxheW91dDogRG9ja0Zsb2F0aW5nU3RhY2tMYXlvdXQsXG4gICk6IERvY2tGbG9hdGluZ1N0YWNrTGF5b3V0IHtcbiAgICBjb25zdCBib3VuZHMgPSBsYXlvdXQuYm91bmRzID8/IHsgbGVmdDogMCwgdG9wOiAwLCB3aWR0aDogMzIwLCBoZWlnaHQ6IDIwMCB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRCb3VuZHMgPSB7XG4gICAgICBsZWZ0OiBOdW1iZXIuaXNGaW5pdGUoYm91bmRzLmxlZnQpID8gYm91bmRzLmxlZnQgOiAwLFxuICAgICAgdG9wOiBOdW1iZXIuaXNGaW5pdGUoYm91bmRzLnRvcCkgPyBib3VuZHMudG9wIDogMCxcbiAgICAgIHdpZHRoOiBOdW1iZXIuaXNGaW5pdGUoYm91bmRzLndpZHRoKSA/IE1hdGgubWF4KGJvdW5kcy53aWR0aCwgMTYwKSA6IDMyMCxcbiAgICAgIGhlaWdodDogTnVtYmVyLmlzRmluaXRlKGJvdW5kcy5oZWlnaHQpID8gTWF0aC5tYXgoYm91bmRzLmhlaWdodCwgMTIwKSA6IDIwMCxcbiAgICB9O1xuXG4gICAgbGV0IHJvb3QgPSBsYXlvdXQucm9vdCA/IHRoaXMuY2xvbmVMYXlvdXROb2RlKGxheW91dC5yb290KSA6IG51bGw7XG5cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIGNvbnN0IHBhbmVzID0gQXJyYXkuaXNBcnJheShsYXlvdXQucGFuZXMpID8gWy4uLmxheW91dC5wYW5lc10gOiBbXTtcbiAgICAgIGlmIChwYW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9XG4gICAgICAgICAgbGF5b3V0LmFjdGl2ZVBhbmUgJiYgcGFuZXMuaW5jbHVkZXMobGF5b3V0LmFjdGl2ZVBhbmUpXG4gICAgICAgICAgICA/IGxheW91dC5hY3RpdmVQYW5lXG4gICAgICAgICAgICA6IHBhbmVzWzBdO1xuICAgICAgICByb290ID0ge1xuICAgICAgICAgIGtpbmQ6ICdzdGFjaycsXG4gICAgICAgICAgcGFuZXMsXG4gICAgICAgICAgdGl0bGVzOiBsYXlvdXQudGl0bGVzID8geyAuLi5sYXlvdXQudGl0bGVzIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWN0aXZlUGFuZTogYWN0aXZlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogbGF5b3V0LmlkLFxuICAgICAgYm91bmRzOiBub3JtYWxpemVkQm91bmRzLFxuICAgICAgekluZGV4OiBsYXlvdXQuekluZGV4LFxuICAgICAgcm9vdCxcbiAgICAgIGFjdGl2ZVBhbmU6IGxheW91dC5hY3RpdmVQYW5lLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFBhdGgocGF0aDogRG9ja1BhdGgpOiBzdHJpbmcge1xuICAgIGlmIChwYXRoLnR5cGUgPT09ICdmbG9hdGluZycpIHtcbiAgICAgIGNvbnN0IHN1ZmZpeCA9XG4gICAgICAgIHBhdGguc2VnbWVudHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gYC8ke3BhdGguc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnRvU3RyaW5nKCkpLmpvaW4oJy8nKX1gXG4gICAgICAgICAgOiAnJztcbiAgICAgIHJldHVybiBgZjoke3BhdGguaW5kZXh9JHtzdWZmaXh9YDtcbiAgICB9XG4gICAgY29uc3Qgc3VmZml4ID0gcGF0aC5zZWdtZW50cy5qb2luKCcvJyk7XG4gICAgcmV0dXJuIHN1ZmZpeC5sZW5ndGggPiAwID8gYGQ6JHtzdWZmaXh9YCA6ICdkOic7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGF0aChwYXRoOiBEb2NrUGF0aCk6IERvY2tQYXRoIHtcbiAgICBpZiAocGF0aC50eXBlID09PSAnZmxvYXRpbmcnKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnZmxvYXRpbmcnLCBpbmRleDogcGF0aC5pbmRleCwgc2VnbWVudHM6IFsuLi5wYXRoLnNlZ21lbnRzXSB9O1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiAnZG9ja2VkJywgc2VnbWVudHM6IFsuLi5wYXRoLnNlZ21lbnRzXSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVBhdGgocGF0aDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERvY2tQYXRoIHwgbnVsbCB7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCdmOicpKSB7XG4gICAgICBjb25zdCByZW1haW5kZXIgPSBwYXRoLnNsaWNlKDIpO1xuICAgICAgY29uc3QgW2luZGV4UGFydCwgLi4uc2VnbWVudFBhcnRzXSA9IHJlbWFpbmRlci5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIucGFyc2VJbnQoaW5kZXhQYXJ0LCAxMCk7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWdtZW50cyA9IHNlZ21lbnRQYXJ0c1xuICAgICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApXG4gICAgICAgIC5tYXAoKHNlZ21lbnQpID0+IE51bWJlci5wYXJzZUludChzZWdtZW50LCAxMCkpXG4gICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmbG9hdGluZycsIGluZGV4LCBzZWdtZW50cyB9O1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXRoLnN0YXJ0c1dpdGgoJ2Q6JykgPyBwYXRoLnNsaWNlKDIpIDogcGF0aDtcbiAgICBpZiAobm9ybWFsaXplZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdkb2NrZWQnLCBzZWdtZW50czogW10gfTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50cyA9IG5vcm1hbGl6ZWRcbiAgICAgIC5zcGxpdCgnLycpXG4gICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApXG4gICAgICAubWFwKChzZWdtZW50KSA9PiBOdW1iZXIucGFyc2VJbnQoc2VnbWVudCwgMTApKVxuICAgICAgLmZpbHRlcigodmFsdWUpID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIHsgdHlwZTogJ2RvY2tlZCcsIHNlZ21lbnRzIH07XG4gIH1cblxuICBwcml2YXRlIHBhdGhzRXF1YWwoYTogRG9ja1BhdGgsIGI6IERvY2tQYXRoKTogYm9vbGVhbiB7XG4gICAgaWYgKGEudHlwZSAhPT0gYi50eXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGEudHlwZSA9PT0gJ2Zsb2F0aW5nJykge1xuICAgICAgY29uc3Qgb3RoZXIgPSBiIGFzIEV4dHJhY3Q8RG9ja1BhdGgsIHsgdHlwZTogJ2Zsb2F0aW5nJyB9PjtcbiAgICAgIGlmIChhLmluZGV4ICE9PSBvdGhlci5pbmRleCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoYS5zZWdtZW50cy5sZW5ndGggIT09IG90aGVyLnNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gYS5zZWdtZW50cy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gb3RoZXIuc2VnbWVudHNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdGhlciA9IGIgYXMgRXh0cmFjdDxEb2NrUGF0aCwgeyB0eXBlOiAnZG9ja2VkJyB9PjtcbiAgICBpZiAoYS5zZWdtZW50cy5sZW5ndGggIT09IG90aGVyLnNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBhLnNlZ21lbnRzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBvdGhlci5zZWdtZW50c1tpbmRleF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09ySXNBbmNlc3Rvck9mKGFuY2VzdG9yOiBEb2NrUGF0aCwgZGVzY2VuZGFudDogRG9ja1BhdGgpOiBib29sZWFuIHtcbiAgICBpZiAoYW5jZXN0b3IudHlwZSAhPT0gZGVzY2VuZGFudC50eXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGFuY2VzdG9yLnR5cGUgPT09ICdmbG9hdGluZycpIHtcbiAgICAgIGlmICgoZGVzY2VuZGFudCBhcyBhbnkpLmluZGV4ICE9PSBhbmNlc3Rvci5pbmRleCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFuY2VzdG9yLnNlZ21lbnRzLmxlbmd0aCA+IGRlc2NlbmRhbnQuc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yLnNlZ21lbnRzLmV2ZXJ5KChzZWdtZW50LCBpKSA9PiBzZWdtZW50ID09PSBkZXNjZW5kYW50LnNlZ21lbnRzW2ldKTtcbiAgfVxuXG4gIHByaXZhdGUgY291bnRQYW5lc0luVHJlZShub2RlOiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwpOiBudW1iZXIge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChub2RlLmtpbmQgPT09ICdzdGFjaycpIHtcbiAgICAgIHJldHVybiBub2RlLnBhbmVzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ucmVkdWNlKCh0b3RhbCwgY2hpbGQpID0+IHRvdGFsICsgdGhpcy5jb3VudFBhbmVzSW5UcmVlKGNoaWxkKSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdGFja0xvY2F0aW9uKHBhdGg6IERvY2tQYXRoKTogUmVzb2x2ZWRMb2NhdGlvbiB8IG51bGwge1xuICAgIGlmIChwYXRoLnR5cGUgPT09ICdmbG9hdGluZycpIHtcbiAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMuZmxvYXRpbmdMYXlvdXRzW3BhdGguaW5kZXhdO1xuICAgICAgaWYgKCFsYXlvdXQgfHwgIWxheW91dC5yb290KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUF0UGF0aChsYXlvdXQucm9vdCwgcGF0aC5zZWdtZW50cyk7XG4gICAgICBpZiAoIW5vZGUgfHwgbm9kZS5raW5kICE9PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29udGV4dDogJ2Zsb2F0aW5nJywgaW5kZXg6IHBhdGguaW5kZXgsIHBhdGg6IFsuLi5wYXRoLnNlZ21lbnRzXSwgbm9kZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVBdFBhdGgodGhpcy5yb290TGF5b3V0LCBwYXRoLnNlZ21lbnRzKTtcbiAgICBpZiAoIW5vZGUgfHwgbm9kZS5raW5kICE9PSAnc3RhY2snKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb250ZXh0OiAnZG9ja2VkJywgcGF0aDogWy4uLnBhdGguc2VnbWVudHNdLCBub2RlIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVBhbmVGcm9tTG9jYXRpb24oXG4gICAgbG9jYXRpb246IFJlc29sdmVkTG9jYXRpb24sXG4gICAgcGFuZTogc3RyaW5nLFxuICAgIHNraXBDbGVhbnVwID0gZmFsc2UsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChsb2NhdGlvbi5jb250ZXh0ID09PSAnZG9ja2VkJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlUGFuZUZyb21TdGFjayhsb2NhdGlvbi5ub2RlLCBwYW5lLCBza2lwQ2xlYW51cCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlUGFuZUZyb21GbG9hdGluZyhsb2NhdGlvbi5pbmRleCwgbG9jYXRpb24ucGF0aCwgcGFuZSwgc2tpcENsZWFudXApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQYW5lVG9Mb2NhdGlvbihsb2NhdGlvbjogUmVzb2x2ZWRMb2NhdGlvbiwgcGFuZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGFuZXMgPSBsb2NhdGlvbi5ub2RlLnBhbmVzO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBwYW5lcy5pbmRleE9mKHBhbmUpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgcGFuZXMuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEpO1xuICAgIH1cbiAgICBwYW5lcy5wdXNoKHBhbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY3RpdmVQYW5lRm9yTG9jYXRpb24obG9jYXRpb246IFJlc29sdmVkTG9jYXRpb24sIHBhbmU6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvY2F0aW9uLm5vZGUuYWN0aXZlUGFuZSA9IHBhbmU7XG4gICAgaWYgKGxvY2F0aW9uLmNvbnRleHQgPT09ICdmbG9hdGluZycpIHtcbiAgICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbbG9jYXRpb24uaW5kZXhdO1xuICAgICAgaWYgKGZsb2F0aW5nKSB7XG4gICAgICAgIGZsb2F0aW5nLmFjdGl2ZVBhbmUgPSBwYW5lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cExvY2F0aW9uKGxvY2F0aW9uOiBSZXNvbHZlZExvY2F0aW9uKTogdm9pZCB7XG4gICAgaWYgKGxvY2F0aW9uLmNvbnRleHQgPT09ICdkb2NrZWQnKSB7XG4gICAgICB0aGlzLnJvb3RMYXlvdXQgPSB0aGlzLmNsZWFudXBFbXB0eVN0YWNrSW5UcmVlKHRoaXMucm9vdExheW91dCwgbG9jYXRpb24ubm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbbG9jYXRpb24uaW5kZXhdO1xuICAgICAgaWYgKCFmbG9hdGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZsb2F0aW5nLnJvb3QgPSB0aGlzLmNsZWFudXBFbXB0eVN0YWNrSW5UcmVlKGZsb2F0aW5nLnJvb3QsIGxvY2F0aW9uLm5vZGUpO1xuICAgICAgaWYgKCFmbG9hdGluZy5yb290KSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmxvYXRpbmdBdChsb2NhdGlvbi5pbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW9yZGVyUGFuZUluTG9jYXRpb24obG9jYXRpb246IFJlc29sdmVkTG9jYXRpb24sIHBhbmU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhbmVzID0gbG9jYXRpb24ubm9kZS5wYW5lcztcbiAgICBjb25zdCBpbmRleCA9IHBhbmVzLmluZGV4T2YocGFuZSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHBhbmVzLnB1c2gocGFuZSk7XG4gICAgbG9jYXRpb24ubm9kZS5hY3RpdmVQYW5lID0gcGFuZTtcbiAgICBpZiAobG9jYXRpb24uY29udGV4dCA9PT0gJ2Zsb2F0aW5nJykge1xuICAgICAgY29uc3QgZmxvYXRpbmcgPSB0aGlzLmZsb2F0aW5nTGF5b3V0c1tsb2NhdGlvbi5pbmRleF07XG4gICAgICBpZiAoZmxvYXRpbmcpIHtcbiAgICAgICAgZmxvYXRpbmcuYWN0aXZlUGFuZSA9IHBhbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGbG9hdGluZ0F0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZmxvYXRpbmdMYXlvdXRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZsb2F0aW5nTGF5b3V0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQYW5lRnJvbUZsb2F0aW5nKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGF0aDogbnVtYmVyW10sXG4gICAgcGFuZTogc3RyaW5nLFxuICAgIHNraXBDbGVhbnVwID0gZmFsc2UsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZsb2F0aW5nID0gdGhpcy5mbG9hdGluZ0xheW91dHNbaW5kZXhdO1xuICAgIGlmICghZmxvYXRpbmcgfHwgIWZsb2F0aW5nLnJvb3QpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQXRQYXRoKGZsb2F0aW5nLnJvb3QsIHBhdGgpO1xuICAgIGlmICghbm9kZSB8fCBub2RlLmtpbmQgIT09ICdzdGFjaycpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBub2RlLnBhbmVzID0gbm9kZS5wYW5lcy5maWx0ZXIoKHApID0+IHAgIT09IHBhbmUpO1xuICAgIGlmICghbm9kZS5wYW5lcy5pbmNsdWRlcyhub2RlLmFjdGl2ZVBhbmUgPz8gJycpKSB7XG4gICAgICBpZiAobm9kZS5wYW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5vZGUuYWN0aXZlUGFuZSA9IG5vZGUucGFuZXNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgbm9kZS5hY3RpdmVQYW5lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmbG9hdGluZy5hY3RpdmVQYW5lID09PSBwYW5lKSB7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuZmluZEZpcnN0UGFuZU5hbWUoZmxvYXRpbmcucm9vdCk7XG4gICAgICBpZiAoZmFsbGJhY2spIHtcbiAgICAgICAgZmxvYXRpbmcuYWN0aXZlUGFuZSA9IGZhbGxiYWNrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGZsb2F0aW5nLmFjdGl2ZVBhbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUucGFuZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChza2lwQ2xlYW51cCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZmxvYXRpbmcucm9vdCA9IHRoaXMuY2xlYW51cEVtcHR5U3RhY2tJblRyZWUoZmxvYXRpbmcucm9vdCwgbm9kZSk7XG4gICAgaWYgKCFmbG9hdGluZy5yb290KSB7XG4gICAgICB0aGlzLnJlbW92ZUZsb2F0aW5nQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVTaXplc0FycmF5KHNpemVzOiBudW1iZXJbXSB8IHVuZGVmaW5lZCwgY291bnQ6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzaXplcykgfHwgc2l6ZXMubGVuZ3RoICE9PSBjb3VudCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sICgpID0+IDEgLyBjb3VudCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHNpemVzLm1hcCgodmFsdWUpID0+IChOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gTWF0aC5tYXgodmFsdWUsIDApIDogMCkpO1xuICAgIGNvbnN0IHRvdGFsID0gbm9ybWFsaXplZC5yZWR1Y2UoKGFjYywgdmFsdWUpID0+IGFjYyArIHZhbHVlLCAwKTtcbiAgICBpZiAodG90YWwgPD0gMCkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sICgpID0+IDEgLyBjb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQubWFwKCh2YWx1ZSkgPT4gdmFsdWUgLyB0b3RhbCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVNwbGl0Tm9kZShzcGxpdDogRG9ja1NwbGl0Tm9kZSk6IHZvaWQge1xuICAgIHNwbGl0LnNpemVzID0gdGhpcy5ub3JtYWxpemVTaXplc0FycmF5KHNwbGl0LnNpemVzLCBzcGxpdC5jaGlsZHJlbi5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaExheW91dENoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdkb2NrLWxheW91dC1jaGFuZ2VkJywge1xuICAgICAgICBkZXRhaWw6IHRoaXMuc25hcHNob3QsXG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVMYXlvdXROb2RlKGxheW91dDogRG9ja0xheW91dE5vZGUpOiBEb2NrTGF5b3V0Tm9kZTtcbiAgcHJpdmF0ZSBjbG9uZUxheW91dE5vZGUobGF5b3V0OiBEb2NrTGF5b3V0Tm9kZSB8IG51bGwpOiBEb2NrTGF5b3V0Tm9kZSB8IG51bGw7XG4gIHByaXZhdGUgY2xvbmVMYXlvdXROb2RlKGxheW91dDogRG9ja0xheW91dE5vZGUgfCBudWxsKTogRG9ja0xheW91dE5vZGUgfCBudWxsIHtcbiAgICBpZiAoIWxheW91dCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGF5b3V0KSkgYXMgRG9ja0xheW91dE5vZGU7XG4gIH1cblxuICBwcml2YXRlIGNsb25lRmxvYXRpbmdBcnJheShcbiAgICBsYXlvdXRzOiBEb2NrRmxvYXRpbmdTdGFja0xheW91dFtdLFxuICApOiBEb2NrRmxvYXRpbmdTdGFja0xheW91dFtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsYXlvdXRzKSkgYXMgRG9ja0Zsb2F0aW5nU3RhY2tMYXlvdXRbXTtcbiAgfVxufVxuXG5jb25zdCB0YWdOYW1lID0gJ21pbnQtZG9jay1tYW5hZ2VyJztcblxuaWYgKHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSkge1xuICBjdXN0b21FbGVtZW50cy5kZWZpbmUodGFnTmFtZSwgTWludERvY2tNYW5hZ2VyRWxlbWVudCk7XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgJ21pbnQtZG9jay1tYW5hZ2VyJzogTWludERvY2tNYW5hZ2VyRWxlbWVudDtcbiAgfVxufVxuIl19","import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Inject, Input, Output, QueryList, ViewChild, } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { BsDockPaneComponent } from './dock-pane.component';\nimport { MintDockManagerElement } from '../web-components/mint-dock-manager.element';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nexport class BsDockManagerComponent {\n set layout(value) {\n const snapshot = this.cloneLayout(this.ensureSnapshot(value));\n this._layout = snapshot;\n this.layoutString = this.stringifyLayout(snapshot);\n this.applyLayout();\n }\n get layout() {\n if (!this._layout.root && this._layout.floating.length === 0) {\n return null;\n }\n return this.cloneLayout(this._layout);\n }\n constructor(changeDetector, documentRef) {\n this.changeDetector = changeDetector;\n this.layoutChange = new EventEmitter();\n this.layoutSnapshotChange = new EventEmitter();\n this.layoutString = null;\n this.panes = new QueryList();\n this.trackByPane = (_, pane) => pane.name;\n this._layout = { root: null, floating: [] };\n if (documentRef) {\n MintDockManagerElement.configureDocument(documentRef);\n }\n }\n ngAfterViewInit() {\n this.applyLayout();\n }\n captureLayout() {\n const element = this.managerRef?.nativeElement;\n return element?.snapshot ?? { root: null, floating: [] };\n }\n onLayoutChanged(event) {\n const snapshot = event.detail ?? {\n root: null,\n floating: [],\n };\n this._layout = this.cloneLayout(snapshot);\n this.layoutString = this.stringifyLayout(this._layout);\n this.layoutChange.emit(this.layout);\n this.layoutSnapshotChange.emit(this.cloneLayout(snapshot));\n this.changeDetector.markForCheck();\n }\n applyLayout() {\n if (!this.managerRef) {\n return;\n }\n const element = this.managerRef.nativeElement;\n const layout = this.layout;\n element.layout = layout ?? null;\n }\n ensureSnapshot(value) {\n if (!value) {\n return { root: null, floating: [] };\n }\n if ('kind' in value) {\n return { root: value, floating: [] };\n }\n return {\n root: value.root ?? null,\n floating: Array.isArray(value.floating) ? [...value.floating] : [],\n };\n }\n stringifyLayout(layout) {\n if (!layout.root && layout.floating.length === 0) {\n return null;\n }\n return JSON.stringify(layout);\n }\n cloneLayout(layout) {\n return JSON.parse(JSON.stringify(layout));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockManagerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.7\", type: BsDockManagerComponent, isStandalone: false, selector: \"bs-dock-manager\", inputs: { layout: \"layout\" }, outputs: { layoutChange: \"layoutChange\", layoutSnapshotChange: \"layoutSnapshotChange\" }, queries: [{ propertyName: \"panes\", predicate: BsDockPaneComponent }], viewQueries: [{ propertyName: \"managerRef\", first: true, predicate: [\"manager\"], descendants: true, static: true }], ngImport: i0, template: \"<mint-dock-manager\\n #manager\\n class=\\\"bs-dock-manager\\\"\\n [attr.layout]=\\\"layoutString\\\"\\n (dock-layout-changed)=\\\"onLayoutChanged($event)\\\"\\n>\\n <ng-container *ngFor=\\\"let pane of panes; trackBy: trackByPane\\\">\\n <div class=\\\"bs-dock-pane\\\" [attr.slot]=\\\"pane.name\\\">\\n <ng-container *ngTemplateOutlet=\\\"pane.template\\\"></ng-container>\\n </div>\\n </ng-container>\\n</mint-dock-manager>\\n\", styles: [\":host{display:block;width:100%;height:100%}.bs-dock-manager{display:block;width:100%;height:100%}.bs-dock-pane{display:contents}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockManagerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'bs-dock-manager', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mint-dock-manager\\n #manager\\n class=\\\"bs-dock-manager\\\"\\n [attr.layout]=\\\"layoutString\\\"\\n (dock-layout-changed)=\\\"onLayoutChanged($event)\\\"\\n>\\n <ng-container *ngFor=\\\"let pane of panes; trackBy: trackByPane\\\">\\n <div class=\\\"bs-dock-pane\\\" [attr.slot]=\\\"pane.name\\\">\\n <ng-container *ngTemplateOutlet=\\\"pane.template\\\"></ng-container>\\n </div>\\n </ng-container>\\n</mint-dock-manager>\\n\", styles: [\":host{display:block;width:100%;height:100%}.bs-dock-manager{display:block;width:100%;height:100%}.bs-dock-pane{display:contents}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }], propDecorators: { layout: [{\n type: Input\n }], layoutChange: [{\n type: Output\n }], layoutSnapshotChange: [{\n type: Output\n }], panes: [{\n type: ContentChildren,\n args: [BsDockPaneComponent]\n }], managerRef: [{\n type: ViewChild,\n args: ['manager', { static: true }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9zcmMvbGliL2NvbXBvbmVudHMvZG9jay1tYW5hZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9zcmMvbGliL2NvbXBvbmVudHMvZG9jay1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQVNyRixNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLElBQ0ksTUFBTSxDQUFDLEtBQXlDO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJ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LEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUEwQjtRQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUEwQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBdUIsQ0FBQztJQUNsRSxDQUFDOzhHQTlGVSxzQkFBc0IsbURBNkJ2QixRQUFRO2tHQTdCUCxzQkFBc0IseU5Bb0JoQixtQkFBbUIsa0pDbER0Qyx3WkFZQTs7MkZEa0JhLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxpQkFBaUIsY0FHZixLQUFLLG1CQUNBLHVCQUF1QixDQUFDLE1BQU07OzBCQStCNUMsTUFBTTsyQkFBQyxRQUFRO3lDQTNCZCxNQUFNO3NCQURULEtBQUs7Z0JBY0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSStCLEtBQUs7c0JBQTFDLGVBQWU7dUJBQUMsbUJBQW1CO2dCQUNJLFVBQVU7c0JBQWpELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBEb2NrTGF5b3V0LFxuICBEb2NrTGF5b3V0Tm9kZSxcbiAgRG9ja0xheW91dFNuYXBzaG90LFxufSBmcm9tICcuLi90eXBlcy9kb2NrLWxheW91dCc7XG5pbXBvcnQgeyBCc0RvY2tQYW5lQ29tcG9uZW50IH0gZnJvbSAnLi9kb2NrLXBhbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE1pbnREb2NrTWFuYWdlckVsZW1lbnQgfSBmcm9tICcuLi93ZWItY29tcG9uZW50cy9taW50LWRvY2stbWFuYWdlci5lbGVtZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtZG9jay1tYW5hZ2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY2stbWFuYWdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RvY2stbWFuYWdlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJzRG9ja01hbmFnZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KClcbiAgc2V0IGxheW91dCh2YWx1ZTogRG9ja0xheW91dE5vZGUgfCBEb2NrTGF5b3V0IHwgbnVsbCkge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5jbG9uZUxheW91dCh0aGlzLmVuc3VyZVNuYXBzaG90KHZhbHVlKSk7XG4gICAgdGhpcy5fbGF5b3V0ID0gc25hcHNob3Q7XG4gICAgdGhpcy5sYXlvdXRTdHJpbmcgPSB0aGlzLnN0cmluZ2lmeUxheW91dChzbmFwc2hvdCk7XG4gICAgdGhpcy5hcHBseUxheW91dCgpO1xuICB9XG4gIGdldCBsYXlvdXQoKTogRG9ja0xheW91dFNuYXBzaG90IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9sYXlvdXQucm9vdCAmJiB0aGlzLl9sYXlvdXQuZmxvYXRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmVMYXlvdXQodGhpcy5fbGF5b3V0KTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBsYXlvdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERvY2tMYXlvdXRTbmFwc2hvdCB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBsYXlvdXRTbmFwc2hvdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RG9ja0xheW91dFNuYXBzaG90PigpO1xuXG4gIGxheW91dFN0cmluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihCc0RvY2tQYW5lQ29tcG9uZW50KSBwYW5lczogUXVlcnlMaXN0PEJzRG9ja1BhbmVDb21wb25lbnQ+ID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICBAVmlld0NoaWxkKCdtYW5hZ2VyJywgeyBzdGF0aWM6IHRydWUgfSkgbWFuYWdlclJlZiE6IEVsZW1lbnRSZWY8TWludERvY2tNYW5hZ2VyRWxlbWVudD47XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYWNrQnlQYW5lID0gKF86IG51bWJlciwgcGFuZTogQnNEb2NrUGFuZUNvbXBvbmVudCkgPT4gcGFuZS5uYW1lO1xuXG4gIHByaXZhdGUgX2xheW91dDogRG9ja0xheW91dFNuYXBzaG90ID0geyByb290OiBudWxsLCBmbG9hdGluZzogW10gfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudFJlZjogRG9jdW1lbnQsXG4gICkge1xuICAgIGlmIChkb2N1bWVudFJlZikge1xuICAgICAgTWludERvY2tNYW5hZ2VyRWxlbWVudC5jb25maWd1cmVEb2N1bWVudChkb2N1bWVudFJlZik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwbHlMYXlvdXQoKTtcbiAgfVxuXG4gIGNhcHR1cmVMYXlvdXQoKTogRG9ja0xheW91dFNuYXBzaG90IHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5tYW5hZ2VyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbGVtZW50Py5zbmFwc2hvdCA/PyB7IHJvb3Q6IG51bGwsIGZsb2F0aW5nOiBbXSB9O1xuICB9XG5cbiAgb25MYXlvdXRDaGFuZ2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNuYXBzaG90ID1cbiAgICAgIChldmVudCBhcyBDdXN0b21FdmVudDxEb2NrTGF5b3V0U25hcHNob3Q+KS5kZXRhaWwgPz8ge1xuICAgICAgICByb290OiBudWxsLFxuICAgICAgICBmbG9hdGluZzogW10sXG4gICAgICB9O1xuICAgIHRoaXMuX2xheW91dCA9IHRoaXMuY2xvbmVMYXlvdXQoc25hcHNob3QpO1xuICAgIHRoaXMubGF5b3V0U3RyaW5nID0gdGhpcy5zdHJpbmdpZnlMYXlvdXQodGhpcy5fbGF5b3V0KTtcbiAgICB0aGlzLmxheW91dENoYW5nZS5lbWl0KHRoaXMubGF5b3V0KTtcbiAgICB0aGlzLmxheW91dFNuYXBzaG90Q2hhbmdlLmVtaXQodGhpcy5jbG9uZUxheW91dChzbmFwc2hvdCkpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGF5b3V0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tYW5hZ2VyUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubWFuYWdlclJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGxheW91dCA9IHRoaXMubGF5b3V0O1xuICAgIGVsZW1lbnQubGF5b3V0ID0gbGF5b3V0ID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVNuYXBzaG90KFxuICAgIHZhbHVlOiBEb2NrTGF5b3V0Tm9kZSB8IERvY2tMYXlvdXQgfCBudWxsLFxuICApOiBEb2NrTGF5b3V0U25hcHNob3Qge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiB7IHJvb3Q6IG51bGwsIGZsb2F0aW5nOiBbXSB9O1xuICAgIH1cblxuICAgIGlmICgna2luZCcgaW4gdmFsdWUpIHtcbiAgICAgIHJldHVybiB7IHJvb3Q6IHZhbHVlLCBmbG9hdGluZzogW10gfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm9vdDogdmFsdWUucm9vdCA/PyBudWxsLFxuICAgICAgZmxvYXRpbmc6IEFycmF5LmlzQXJyYXkodmFsdWUuZmxvYXRpbmcpID8gWy4uLnZhbHVlLmZsb2F0aW5nXSA6IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeUxheW91dChsYXlvdXQ6IERvY2tMYXlvdXRTbmFwc2hvdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghbGF5b3V0LnJvb3QgJiYgbGF5b3V0LmZsb2F0aW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShsYXlvdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZUxheW91dChsYXlvdXQ6IERvY2tMYXlvdXRTbmFwc2hvdCk6IERvY2tMYXlvdXRTbmFwc2hvdCB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGF5b3V0KSkgYXMgRG9ja0xheW91dFNuYXBzaG90O1xuICB9XG59XG4iLCI8bWludC1kb2NrLW1hbmFnZXJcbiAgI21hbmFnZXJcbiAgY2xhc3M9XCJicy1kb2NrLW1hbmFnZXJcIlxuICBbYXR0ci5sYXlvdXRdPVwibGF5b3V0U3RyaW5nXCJcbiAgKGRvY2stbGF5b3V0LWNoYW5nZWQpPVwib25MYXlvdXRDaGFuZ2VkKCRldmVudClcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYW5lIG9mIHBhbmVzOyB0cmFja0J5OiB0cmFja0J5UGFuZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJicy1kb2NrLXBhbmVcIiBbYXR0ci5zbG90XT1cInBhbmUubmFtZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhbmUudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L21pbnQtZG9jay1tYW5hZ2VyPlxuIl19","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BsDockManagerComponent } from './components/dock-manager.component';\nimport { BsDockPaneComponent } from './components/dock-pane.component';\nimport * as i0 from \"@angular/core\";\nexport class BsDockModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, declarations: [BsDockManagerComponent, BsDockPaneComponent], imports: [CommonModule], exports: [BsDockManagerComponent, BsDockPaneComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, imports: [CommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsDockModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [BsDockManagerComponent, BsDockPaneComponent],\n imports: [CommonModule],\n exports: [BsDockManagerComponent, BsDockPaneComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2RvY2svc3JjL2xpYi9kb2NrLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFRdkUsTUFBTSxPQUFPLFlBQVk7OEdBQVosWUFBWTsrR0FBWixZQUFZLGlCQUxSLHNCQUFzQixFQUFFLG1CQUFtQixhQUNoRCxZQUFZLGFBQ1osc0JBQXNCLEVBQUUsbUJBQW1COytHQUcxQyxZQUFZLFlBSmIsWUFBWTs7MkZBSVgsWUFBWTtrQkFOeEIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQztvQkFDM0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQztvQkFDdEQsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCc0RvY2tNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RvY2stbWFuYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNEb2NrUGFuZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kb2NrLXBhbmUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbQnNEb2NrTWFuYWdlckNvbXBvbmVudCwgQnNEb2NrUGFuZUNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQnNEb2NrTWFuYWdlckNvbXBvbmVudCwgQnNEb2NrUGFuZUNvbXBvbmVudF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgQnNEb2NrTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWludHBsYXllci1uZy1ib290c3RyYXAtZG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvZG9jay9taW50cGxheWVyLW5nLWJvb3RzdHJhcC1kb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":";;;;;AAEO,MAAM,mBAAmB,CAAC;AACjC,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACxB,YAAY,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;AAC3E;AACA;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACrL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,oDAAoD,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACra;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,cAAc;AAC5C,oBAAoB,QAAQ,EAAE,CAAC,oDAAoD,CAAC;AACpF,oBAAoB,UAAU,EAAE,KAAK;AACrC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACpD,aAAa,CAAC,EAAE,EAAE,CAAC;;ACzBnB,MAAM,YAAY,GAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,IAAI,cAAc,GAAG,IAAI;AACzB,IAAI,sBAAsB,GAAG,IAAI;AACjC,SAAS,cAAc,CAAC,WAAW,EAAE;AACrC,IAAI,IAAI,CAAC,cAAc,IAAI,sBAAsB,KAAK,WAAW,EAAE;AACnE,QAAQ,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9D,QAAQ,cAAc,CAAC,SAAS,GAAG,YAAY;AAC/C,QAAQ,sBAAsB,GAAG,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"}