ngx-vflow 0.13.0-0 → 0.13.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.
- package/esm2022/lib/vflow/components/node/node.component.mjs +3 -3
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +13 -4
- package/esm2022/lib/vflow/directives/root-pointer.directive.mjs +1 -1
- package/esm2022/lib/vflow/directives/selectable.directive.mjs +5 -2
- package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +124 -180
- package/esm2022/lib/vflow/services/draggable.service.mjs +40 -19
- package/esm2022/lib/vflow/services/keyboard.service.mjs +45 -0
- package/esm2022/lib/vflow/services/node-changes.service.mjs +6 -7
- package/esm2022/lib/vflow/services/selection.service.mjs +12 -5
- package/esm2022/lib/vflow/types/keyboard-action.type.mjs +2 -0
- package/esm2022/lib/vflow/utils/get-os.mjs +24 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-vflow.mjs +257 -214
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/vflow/vflow.component.d.ts +4 -1
- package/lib/vflow/directives/root-pointer.directive.d.ts +10 -16
- package/lib/vflow/directives/space-point-context.directive.d.ts +1 -15
- package/lib/vflow/models/edge.model.d.ts +17 -1
- package/lib/vflow/public-components/resizable/resizable.component.d.ts +6 -11
- package/lib/vflow/services/draggable.service.d.ts +2 -0
- package/lib/vflow/services/keyboard.service.d.ts +11 -0
- package/lib/vflow/services/selection.service.d.ts +1 -0
- package/lib/vflow/types/keyboard-action.type.d.ts +2 -0
- package/lib/vflow/utils/get-os.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -92,7 +92,7 @@ export class NodeComponent {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
95
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeComponent, selector: "g[node]", inputs: { nodeModel: "nodeModel", nodeTemplate: "nodeTemplate", groupNodeTemplate: "groupNodeTemplate" }, providers: [HandleService, NodeAccessorService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], ngImport: i0, template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (
|
|
95
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeComponent, selector: "g[node]", inputs: { nodeModel: "nodeModel", nodeTemplate: "nodeTemplate", groupNodeTemplate: "groupNodeTemplate" }, providers: [HandleService, NodeAccessorService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], ngImport: i0, template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <div\n #htmlWrapper\n class=\"default-node\"\n [class.default-node_selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </div>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-node{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.default-node_selected{border-width:2px}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.HandleComponent, selector: "handle", inputs: ["position", "type", "id", "template"] }, { kind: "component", type: i3.ResizableComponent, selector: "[resizable]", inputs: ["resizable", "resizerColor", "gap"] }, { kind: "directive", type: i4.HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }, { kind: "directive", type: i5.PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
96
96
|
}
|
|
97
97
|
__decorate([
|
|
98
98
|
InjectionContext
|
|
@@ -102,7 +102,7 @@ __decorate([
|
|
|
102
102
|
], NodeComponent.prototype, "ngAfterViewInit", null);
|
|
103
103
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, decorators: [{
|
|
104
104
|
type: Component,
|
|
105
|
-
args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService, NodeAccessorService], template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (
|
|
105
|
+
args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService, NodeAccessorService], template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <div\n #htmlWrapper\n class=\"default-node\"\n [class.default-node_selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </div>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-node{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.default-node_selected{border-width:2px}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
|
|
106
106
|
}], propDecorators: { nodeModel: [{
|
|
107
107
|
type: Input
|
|
108
108
|
}], nodeTemplate: [{
|
|
@@ -116,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
116
116
|
type: ViewChild,
|
|
117
117
|
args: ['htmlWrapper']
|
|
118
118
|
}], ngOnInit: [], ngAfterViewInit: [] } });
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1TCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQVMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxxREFBcUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztB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QUFLO2dCQUlDLGNBQWM7c0JBRHBCLFNBQVM7dUJBQUMsYUFBYTtnQkFJakIsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhO2dCQVlqQixRQUFRLE1BNkJSLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IHJlc2l6YWJsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc2l6YWJsZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGlvbkNvbnRleHQsIFdpdGhJbmplY3RvciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvcnVuLWluLWluamVjdGlvbi1jb250ZXh0LmRlY29yYXRvcic7XG5pbXBvcnQgeyBOb2RlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nvbm5lY3Rpb24tY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTm9kZUFjY2Vzc29yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWNjZXNzb3Iuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEhhbmRsZVN0YXRlID0gJ3ZhbGlkJyB8ICdpbnZhbGlkJyB8ICdpZGxlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnW25vZGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtIYW5kbGVTZXJ2aWNlLCBOb2RlQWNjZXNzb3JTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIFdpdGhJbmplY3RvciB7XG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgcHJpdmF0ZSBoYW5kbGVTZXJ2aWNlID0gaW5qZWN0KEhhbmRsZVNlcnZpY2UpXG4gIHByaXZhdGUgZHJhZ2dhYmxlU2VydmljZSA9IGluamVjdChEcmFnZ2FibGVTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KE5vZGVSZW5kZXJpbmdTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSlcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpXG4gIHByaXZhdGUgaG9zdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPFNWR0VsZW1lbnQ+PihFbGVtZW50UmVmKVxuICBwcml2YXRlIGNvbm5lY3Rpb25Db250cm9sbGVyID0gaW5qZWN0KENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlKVxuICBwcml2YXRlIG5vZGVBY2Nlc3NvciA9IGluamVjdChOb2RlQWNjZXNzb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSlcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZU1vZGVsITogTm9kZU1vZGVsXG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vZGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ3JvdXBOb2RlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgQFZpZXdDaGlsZCgnbm9kZUNvbnRlbnQnKVxuICBwdWJsaWMgbm9kZUNvbnRlbnRSZWYhOiBFbGVtZW50UmVmPFNWR0dyYXBoaWNzRWxlbWVudD5cblxuICBAVmlld0NoaWxkKCdodG1sV3JhcHBlcicpXG4gIHB1YmxpYyBodG1sV3JhcHBlclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+XG5cbiAgcHJvdGVjdGVkIHNob3dNYWduZXQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0JyB8fFxuICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXZhbGlkYXRpb24nXG4gIClcblxuICBwcm90ZWN0ZWQgc3R5bGVXaWR0aCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMubm9kZU1vZGVsLnNpemUoKS53aWR0aH1weGApXG4gIHByb3RlY3RlZCBzdHlsZUhlaWdodCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMubm9kZU1vZGVsLnNpemUoKS5oZWlnaHR9cHhgKVxuXG4gIEBJbmplY3Rpb25Db250ZXh0XG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5vZGVBY2Nlc3Nvci5tb2RlbC5zZXQodGhpcy5ub2RlTW9kZWwpO1xuXG4gICAgdGhpcy5oYW5kbGVTZXJ2aWNlLm5vZGUuc2V0KHRoaXMubm9kZU1vZGVsKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5ub2RlTW9kZWwuZHJhZ2dhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmVuYWJsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5ub2RlTW9kZWwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRyYWdnYWJsZVNlcnZpY2UuZGlzYWJsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5ub2RlTW9kZWwuaGFuZGxlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGhhbmRsZXMpID0+XG4gICAgICAgICAgcmVzaXphYmxlKGhhbmRsZXMubWFwKGggPT4gaC5wYXJlbnRSZWZlcmVuY2UhKSwgdGhpcy56b25lKVxuICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IGhhbmRsZXMpKVxuICAgICAgICApLFxuICAgICAgICB0YXAoKGhhbmRsZXMpID0+IHtcbiAgICAgICAgICAvLyBUT0RPIChwZXJmb3JtYW5jZSkgaW5zcGVjdCBob3cgdG8gYXZvaWQgY2FsbHMgb2YgdGhpcyB3aGVuIGZsb3cgaW5pdGlhbGx5IHJlbmRlcmVkXG4gICAgICAgICAgaGFuZGxlcy5mb3JFYWNoKGggPT4gaC51cGRhdGVQYXJlbnQoKSlcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKClcbiAgfVxuXG4gIEBJbmplY3Rpb25Db250ZXh0XG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ub2RlTW9kZWwubGlua0RlZmF1bHROb2RlU2l6ZVdpdGhNb2RlbFNpemUoKVxuXG4gICAgaWYgKHRoaXMubm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnIHx8IHRoaXMubm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZSkge1xuICAgICAgcmVzaXphYmxlKFt0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnRdLCB0aGlzLnpvbmUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5ub2RlTW9kZWwuaGFuZGxlcygpLmZvckVhY2goaCA9PiBoLnVwZGF0ZVBhcmVudCgpKSksXG4gICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm5vZGVNb2RlbC5yZXNpemluZygpKSxcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcblxuICAgICAgICAgICAgdGhpcy5ub2RlTW9kZWwuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKS5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnYWJsZVNlcnZpY2UuZGVzdHJveSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydENvbm5lY3Rpb24oZXZlbnQ6IEV2ZW50LCBoYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgLy8gaWdub3JlIGRyYWcgYnkgc3RvcHBpbmcgcHJvcGFnYXRpb25cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci5zdGFydENvbm5lY3Rpb24oaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci52YWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKHRhcmdldEhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLnJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKHRhcmdldEhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmRDb25uZWN0aW9uKGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLmVuZENvbm5lY3Rpb24oaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIHB1bGxOb2RlKCkge1xuICAgIHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UucHVsbE5vZGUodGhpcy5ub2RlTW9kZWwpXG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0Tm9kZSgpIHtcbiAgICBpZiAodGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMubm9kZU1vZGVsKVxuICAgIH1cbiAgfVxufVxuIiwiPCEtLSBEZWZhdWx0IG5vZGUgLS0+XG48c3ZnOmZvcmVpZ25PYmplY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCdcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAjbm9kZUNvbnRlbnRcbiAgW2F0dHIud2lkdGhdPVwibm9kZU1vZGVsLnNpemUoKS53aWR0aFwiXG4gIFthdHRyLmhlaWdodF09XCJub2RlTW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gIChtb3VzZWRvd24pPVwicHVsbE5vZGUoKTsgc2VsZWN0Tm9kZSgpXCJcbj5cbiAgPGRpdlxuICAgICNodG1sV3JhcHBlclxuICAgIGNsYXNzPVwiZGVmYXVsdC1ub2RlXCJcbiAgICBbY2xhc3MuZGVmYXVsdC1ub2RlX3NlbGVjdGVkXT1cIm5vZGVNb2RlbC5zZWxlY3RlZCgpXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJzdHlsZUhlaWdodCgpXCJcbiAgPlxuICAgIDxkaXYgW291dGVySFRNTF09XCJub2RlTW9kZWwudGV4dCgpXCI+PC9kaXY+XG5cbiAgICA8aGFuZGxlIHR5cGU9XCJzb3VyY2VcIiBbcG9zaXRpb25dPVwibm9kZU1vZGVsLnNvdXJjZVBvc2l0aW9uKClcIiAvPlxuICAgIDxoYW5kbGUgdHlwZT1cInRhcmdldFwiIFtwb3NpdGlvbl09XCJub2RlTW9kZWwudGFyZ2V0UG9zaXRpb24oKVwiIC8+XG4gIDwvZGl2PlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPCEtLSBUZW1wbGF0ZSBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnICYmIG5vZGVUZW1wbGF0ZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAobW91c2Vkb3duKT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2XG4gICAgI2h0bWxXcmFwcGVyXG4gICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBub2RlOiBub2RlTW9kZWwubm9kZSwgc2VsZWN0ZWQ6IG5vZGVNb2RlbC5zZWxlY3RlZCB9IH1cIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48IS0tIENvbXBvbmVudCBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAobW91c2Vkb3duKT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2XG4gICAgI2h0bWxXcmFwcGVyXG4gICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0XT1cIiRhbnkobm9kZU1vZGVsLm5vZGUudHlwZSlcIlxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5wdXRzXT1cIm5vZGVNb2RlbC5jb21wb25lbnRUeXBlSW5wdXRzKClcIlxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPCEtLSBEZWZhdWx0IGdyb3VwIG5vZGUgLS0+XG48c3ZnOnJlY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCdcIlxuICBbcmVzaXphYmxlXT1cIm5vZGVNb2RlbC5yZXNpemFibGUoKVwiXG4gIFtnYXBdPVwiM1wiXG4gIFtyZXNpemVyQ29sb3JdPVwibm9kZU1vZGVsLmNvbG9yKClcIlxuICBjbGFzcz1cImRlZmF1bHQtZ3JvdXAtbm9kZVwiXG4gIHJ4PVwiNVwiXG4gIHJ5PVwiNVwiXG4gIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibm9kZU1vZGVsLnNlbGVjdGVkKClcIlxuICBbYXR0ci53aWR0aF09XCJub2RlTW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgW3N0eWxlLnN0cm9rZV09XCJub2RlTW9kZWwuY29sb3IoKVwiXG4gIFtzdHlsZS5maWxsXT1cIm5vZGVNb2RlbC5jb2xvcigpXCJcbiAgKG1vdXNlZG93bik9XCJwdWxsTm9kZSgpOyBzZWxlY3ROb2RlKClcIlxuLz5cblxuPCEtLSBUZW1wbGF0ZSBncm91cCBub2RlICAtLT5cbjxzdmc6Z1xuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCcgJiYgZ3JvdXBOb2RlVGVtcGxhdGVcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAobW91c2Vkb3duKT1cInB1bGxOb2RlKClcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBOb2RlVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBub2RlOiBub2RlTW9kZWwubm9kZSwgc2VsZWN0ZWQ6IG5vZGVNb2RlbC5zZWxlY3RlZCwgd2lkdGg6IG5vZGVNb2RlbC53aWR0aCwgaGVpZ2h0OiBub2RlTW9kZWwuaGVpZ2h0IH0gfVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gIC8+XG48L3N2ZzpnPlxuXG48IS0tIFJlc2l6ZXIgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwibm9kZU1vZGVsLnJlc2l6ZXJUZW1wbGF0ZSgpIGFzIHRlbXBsYXRlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlTW9kZWwucmVzaXphYmxlKClcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIiAvPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIEhhbmRsZXMgLS0+XG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoYW5kbGUgb2Ygbm9kZU1vZGVsLmhhbmRsZXMoKVwiPlxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwiIWhhbmRsZS50ZW1wbGF0ZVwiXG4gICAgY2xhc3M9XCJkZWZhdWx0LWhhbmRsZVwiXG4gICAgW2F0dHIuY3hdPVwiaGFuZGxlLm9mZnNldCgpLnhcIlxuICAgIFthdHRyLmN5XT1cImhhbmRsZS5vZmZzZXQoKS55XCJcbiAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiaGFuZGxlLnN0cm9rZVdpZHRoXCJcbiAgICByPVwiNVwiXG4gICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpXCJcbiAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAvPlxuXG4gIDxzdmc6Z1xuICAgICpuZ0lmPVwiaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBbaGFuZGxlU2l6ZUNvbnRyb2xsZXJdPVwiaGFuZGxlXCJcbiAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0Q29ubmVjdGlvbigkZXZlbnQsIGhhbmRsZSlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGFuZGxlLnRlbXBsYXRlOyBjb250ZXh0OiBoYW5kbGUudGVtcGxhdGVDb250ZXh0XCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwic2hvd01hZ25ldCgpXCJcbiAgICBjbGFzcz1cIm1hZ25ldFwiXG4gICAgW2F0dHIucl09XCJub2RlTW9kZWwubWFnbmV0UmFkaXVzXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKTsgcmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKVwiXG4gICAgKHBvaW50ZXJPdmVyKT1cInZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAocG9pbnRlck91dCk9XCJyZXNldFZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgLz5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1TCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQVMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxxREFBcUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztB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QUFLO2dCQUlDLGNBQWM7c0JBRHBCLFNBQVM7dUJBQUMsYUFBYTtnQkFJakIsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhO2dCQVlqQixRQUFRLE1BNkJSLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IHJlc2l6YWJsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc2l6YWJsZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGlvbkNvbnRleHQsIFdpdGhJbmplY3RvciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvcnVuLWluLWluamVjdGlvbi1jb250ZXh0LmRlY29yYXRvcic7XG5pbXBvcnQgeyBOb2RlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nvbm5lY3Rpb24tY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTm9kZUFjY2Vzc29yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWNjZXNzb3Iuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEhhbmRsZVN0YXRlID0gJ3ZhbGlkJyB8ICdpbnZhbGlkJyB8ICdpZGxlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnW25vZGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtIYW5kbGVTZXJ2aWNlLCBOb2RlQWNjZXNzb3JTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIFdpdGhJbmplY3RvciB7XG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgcHJpdmF0ZSBoYW5kbGVTZXJ2aWNlID0gaW5qZWN0KEhhbmRsZVNlcnZpY2UpXG4gIHByaXZhdGUgZHJhZ2dhYmxlU2VydmljZSA9IGluamVjdChEcmFnZ2FibGVTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KE5vZGVSZW5kZXJpbmdTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSlcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpXG4gIHByaXZhdGUgaG9zdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPFNWR0VsZW1lbnQ+PihFbGVtZW50UmVmKVxuICBwcml2YXRlIGNvbm5lY3Rpb25Db250cm9sbGVyID0gaW5qZWN0KENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlKVxuICBwcml2YXRlIG5vZGVBY2Nlc3NvciA9IGluamVjdChOb2RlQWNjZXNzb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSlcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZU1vZGVsITogTm9kZU1vZGVsXG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vZGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ3JvdXBOb2RlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgQFZpZXdDaGlsZCgnbm9kZUNvbnRlbnQnKVxuICBwdWJsaWMgbm9kZUNvbnRlbnRSZWYhOiBFbGVtZW50UmVmPFNWR0dyYXBoaWNzRWxlbWVudD5cblxuICBAVmlld0NoaWxkKCdodG1sV3JhcHBlcicpXG4gIHB1YmxpYyBodG1sV3JhcHBlclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+XG5cbiAgcHJvdGVjdGVkIHNob3dNYWduZXQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0JyB8fFxuICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXZhbGlkYXRpb24nXG4gIClcblxuICBwcm90ZWN0ZWQgc3R5bGVXaWR0aCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMubm9kZU1vZGVsLnNpemUoKS53aWR0aH1weGApXG4gIHByb3RlY3RlZCBzdHlsZUhlaWdodCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMubm9kZU1vZGVsLnNpemUoKS5oZWlnaHR9cHhgKVxuXG4gIEBJbmplY3Rpb25Db250ZXh0XG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5vZGVBY2Nlc3Nvci5tb2RlbC5zZXQodGhpcy5ub2RlTW9kZWwpO1xuXG4gICAgdGhpcy5oYW5kbGVTZXJ2aWNlLm5vZGUuc2V0KHRoaXMubm9kZU1vZGVsKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5ub2RlTW9kZWwuZHJhZ2dhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmVuYWJsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5ub2RlTW9kZWwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRyYWdnYWJsZVNlcnZpY2UuZGlzYWJsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5ub2RlTW9kZWwuaGFuZGxlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGhhbmRsZXMpID0+XG4gICAgICAgICAgcmVzaXphYmxlKGhhbmRsZXMubWFwKGggPT4gaC5wYXJlbnRSZWZlcmVuY2UhKSwgdGhpcy56b25lKVxuICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IGhhbmRsZXMpKVxuICAgICAgICApLFxuICAgICAgICB0YXAoKGhhbmRsZXMpID0+IHtcbiAgICAgICAgICAvLyBUT0RPIChwZXJmb3JtYW5jZSkgaW5zcGVjdCBob3cgdG8gYXZvaWQgY2FsbHMgb2YgdGhpcyB3aGVuIGZsb3cgaW5pdGlhbGx5IHJlbmRlcmVkXG4gICAgICAgICAgaGFuZGxlcy5mb3JFYWNoKGggPT4gaC51cGRhdGVQYXJlbnQoKSlcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKClcbiAgfVxuXG4gIEBJbmplY3Rpb25Db250ZXh0XG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ub2RlTW9kZWwubGlua0RlZmF1bHROb2RlU2l6ZVdpdGhNb2RlbFNpemUoKVxuXG4gICAgaWYgKHRoaXMubm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnIHx8IHRoaXMubm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZSkge1xuICAgICAgcmVzaXphYmxlKFt0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnRdLCB0aGlzLnpvbmUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5ub2RlTW9kZWwuaGFuZGxlcygpLmZvckVhY2goaCA9PiBoLnVwZGF0ZVBhcmVudCgpKSksXG4gICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm5vZGVNb2RlbC5yZXNpemluZygpKSxcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcblxuICAgICAgICAgICAgdGhpcy5ub2RlTW9kZWwuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKS5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnYWJsZVNlcnZpY2UuZGVzdHJveSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydENvbm5lY3Rpb24oZXZlbnQ6IEV2ZW50LCBoYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgLy8gaWdub3JlIGRyYWcgYnkgc3RvcHBpbmcgcHJvcGFnYXRpb25cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci5zdGFydENvbm5lY3Rpb24oaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci52YWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKHRhcmdldEhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLnJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKHRhcmdldEhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmRDb25uZWN0aW9uKGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLmVuZENvbm5lY3Rpb24oaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIHB1bGxOb2RlKCkge1xuICAgIHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UucHVsbE5vZGUodGhpcy5ub2RlTW9kZWwpXG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0Tm9kZSgpIHtcbiAgICBpZiAodGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMubm9kZU1vZGVsKVxuICAgIH1cbiAgfVxufVxuIiwiPCEtLSBEZWZhdWx0IG5vZGUgLS0+XG48c3ZnOmZvcmVpZ25PYmplY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCdcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAjbm9kZUNvbnRlbnRcbiAgW2F0dHIud2lkdGhdPVwibm9kZU1vZGVsLnNpemUoKS53aWR0aFwiXG4gIFthdHRyLmhlaWdodF09XCJub2RlTW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gIChwb2ludGVyU3RhcnQpPVwicHVsbE5vZGUoKTsgc2VsZWN0Tm9kZSgpXCJcbj5cbiAgPGRpdlxuICAgICNodG1sV3JhcHBlclxuICAgIGNsYXNzPVwiZGVmYXVsdC1ub2RlXCJcbiAgICBbY2xhc3MuZGVmYXVsdC1ub2RlX3NlbGVjdGVkXT1cIm5vZGVNb2RlbC5zZWxlY3RlZCgpXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJzdHlsZUhlaWdodCgpXCJcbiAgPlxuICAgIDxkaXYgW291dGVySFRNTF09XCJub2RlTW9kZWwudGV4dCgpXCI+PC9kaXY+XG5cbiAgICA8aGFuZGxlIHR5cGU9XCJzb3VyY2VcIiBbcG9zaXRpb25dPVwibm9kZU1vZGVsLnNvdXJjZVBvc2l0aW9uKClcIiAvPlxuICAgIDxoYW5kbGUgdHlwZT1cInRhcmdldFwiIFtwb3NpdGlvbl09XCJub2RlTW9kZWwudGFyZ2V0UG9zaXRpb24oKVwiIC8+XG4gIDwvZGl2PlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPCEtLSBUZW1wbGF0ZSBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnICYmIG5vZGVUZW1wbGF0ZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2XG4gICAgI2h0bWxXcmFwcGVyXG4gICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBub2RlOiBub2RlTW9kZWwubm9kZSwgc2VsZWN0ZWQ6IG5vZGVNb2RlbC5zZWxlY3RlZCB9IH1cIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48IS0tIENvbXBvbmVudCBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2XG4gICAgI2h0bWxXcmFwcGVyXG4gICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0XT1cIiRhbnkobm9kZU1vZGVsLm5vZGUudHlwZSlcIlxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5wdXRzXT1cIm5vZGVNb2RlbC5jb21wb25lbnRUeXBlSW5wdXRzKClcIlxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPCEtLSBEZWZhdWx0IGdyb3VwIG5vZGUgLS0+XG48c3ZnOnJlY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCdcIlxuICBbcmVzaXphYmxlXT1cIm5vZGVNb2RlbC5yZXNpemFibGUoKVwiXG4gIFtnYXBdPVwiM1wiXG4gIFtyZXNpemVyQ29sb3JdPVwibm9kZU1vZGVsLmNvbG9yKClcIlxuICBjbGFzcz1cImRlZmF1bHQtZ3JvdXAtbm9kZVwiXG4gIHJ4PVwiNVwiXG4gIHJ5PVwiNVwiXG4gIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibm9kZU1vZGVsLnNlbGVjdGVkKClcIlxuICBbYXR0ci53aWR0aF09XCJub2RlTW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgW3N0eWxlLnN0cm9rZV09XCJub2RlTW9kZWwuY29sb3IoKVwiXG4gIFtzdHlsZS5maWxsXT1cIm5vZGVNb2RlbC5jb2xvcigpXCJcbiAgKHBvaW50ZXJTdGFydCk9XCJwdWxsTm9kZSgpOyBzZWxlY3ROb2RlKClcIlxuLz5cblxuPCEtLSBUZW1wbGF0ZSBncm91cCBub2RlICAtLT5cbjxzdmc6Z1xuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCcgJiYgZ3JvdXBOb2RlVGVtcGxhdGVcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKClcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBOb2RlVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBub2RlOiBub2RlTW9kZWwubm9kZSwgc2VsZWN0ZWQ6IG5vZGVNb2RlbC5zZWxlY3RlZCwgd2lkdGg6IG5vZGVNb2RlbC53aWR0aCwgaGVpZ2h0OiBub2RlTW9kZWwuaGVpZ2h0IH0gfVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gIC8+XG48L3N2ZzpnPlxuXG48IS0tIFJlc2l6ZXIgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwibm9kZU1vZGVsLnJlc2l6ZXJUZW1wbGF0ZSgpIGFzIHRlbXBsYXRlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlTW9kZWwucmVzaXphYmxlKClcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIiAvPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIEhhbmRsZXMgLS0+XG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoYW5kbGUgb2Ygbm9kZU1vZGVsLmhhbmRsZXMoKVwiPlxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwiIWhhbmRsZS50ZW1wbGF0ZVwiXG4gICAgY2xhc3M9XCJkZWZhdWx0LWhhbmRsZVwiXG4gICAgW2F0dHIuY3hdPVwiaGFuZGxlLm9mZnNldCgpLnhcIlxuICAgIFthdHRyLmN5XT1cImhhbmRsZS5vZmZzZXQoKS55XCJcbiAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiaGFuZGxlLnN0cm9rZVdpZHRoXCJcbiAgICByPVwiNVwiXG4gICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpXCJcbiAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAvPlxuXG4gIDxzdmc6Z1xuICAgICpuZ0lmPVwiaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBbaGFuZGxlU2l6ZUNvbnRyb2xsZXJdPVwiaGFuZGxlXCJcbiAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0Q29ubmVjdGlvbigkZXZlbnQsIGhhbmRsZSlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGFuZGxlLnRlbXBsYXRlOyBjb250ZXh0OiBoYW5kbGUudGVtcGxhdGVDb250ZXh0XCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwic2hvd01hZ25ldCgpXCJcbiAgICBjbGFzcz1cIm1hZ25ldFwiXG4gICAgW2F0dHIucl09XCJub2RlTW9kZWwubWFnbmV0UmFkaXVzXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKTsgcmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKVwiXG4gICAgKHBvaW50ZXJPdmVyKT1cInZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAocG9pbnRlck91dCk9XCJyZXNldFZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgLz5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -19,6 +19,7 @@ import { SelectionService } from '../../services/selection.service';
|
|
|
19
19
|
import { FlowSettingsService } from '../../services/flow-settings.service';
|
|
20
20
|
import { ComponentEventBusService } from '../../services/component-event-bus.service';
|
|
21
21
|
import { SpacePointContextDirective } from '../../directives/space-point-context.directive';
|
|
22
|
+
import { KeyboardService } from '../../services/keyboard.service';
|
|
22
23
|
import * as i0 from "@angular/core";
|
|
23
24
|
import * as i1 from "../../directives/connection-controller.directive";
|
|
24
25
|
import * as i2 from "../../directives/changes-controller.directive";
|
|
@@ -82,6 +83,7 @@ export class VflowComponent {
|
|
|
82
83
|
this.nodeRenderingService = inject(NodeRenderingService);
|
|
83
84
|
this.flowSettingsService = inject(FlowSettingsService);
|
|
84
85
|
this.componentEventBusService = inject(ComponentEventBusService);
|
|
86
|
+
this.keyboardService = inject(KeyboardService);
|
|
85
87
|
this.injector = inject(Injector);
|
|
86
88
|
/**
|
|
87
89
|
* Background for flow
|
|
@@ -173,6 +175,9 @@ export class VflowComponent {
|
|
|
173
175
|
set entitiesSelectable(value) {
|
|
174
176
|
this.flowSettingsService.entitiesSelectable.set(value);
|
|
175
177
|
}
|
|
178
|
+
set keyboardShortcuts(value) {
|
|
179
|
+
this.keyboardService.setShortcuts(value);
|
|
180
|
+
}
|
|
176
181
|
/**
|
|
177
182
|
* Settings for connection (it renders when user tries to create edge between nodes)
|
|
178
183
|
*
|
|
@@ -271,7 +276,7 @@ export class VflowComponent {
|
|
|
271
276
|
}
|
|
272
277
|
}
|
|
273
278
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
274
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: VflowComponent, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", handlePositions: "handlePositions", background: "background", optimization: "optimization", entitiesSelectable: "entitiesSelectable", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], nodes: "nodes", edges: "edges" }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
|
|
279
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: VflowComponent, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", handlePositions: "handlePositions", background: "background", optimization: "optimization", entitiesSelectable: "entitiesSelectable", keyboardShortcuts: "keyboardShortcuts", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], nodes: "nodes", edges: "edges" }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
|
|
275
280
|
DraggableService,
|
|
276
281
|
ViewportService,
|
|
277
282
|
FlowStatusService,
|
|
@@ -281,7 +286,8 @@ export class VflowComponent {
|
|
|
281
286
|
NodeRenderingService,
|
|
282
287
|
SelectionService,
|
|
283
288
|
FlowSettingsService,
|
|
284
|
-
ComponentEventBusService
|
|
289
|
+
ComponentEventBusService,
|
|
290
|
+
KeyboardService
|
|
285
291
|
], queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateDirective, descendants: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true }, { propertyName: "spacePointContext", first: true, predicate: SpacePointContextDirective, descendants: true }], hostDirectives: [{ directive: i1.ConnectionControllerDirective, outputs: ["onConnect", "onConnect"] }, { directive: i2.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onNodesChange.position", "onNodesChange.position", "onNodesChange.position.single", "onNodesChange.position.single", "onNodesChange.position.many", "onNodesChange.position.many", "onNodesChange.size", "onNodesChange.size", "onNodesChange.size.single", "onNodesChange.size.single", "onNodesChange.size.many", "onNodesChange.size.many", "onNodesChange.add", "onNodesChange.add", "onNodesChange.add.single", "onNodesChange.add.single", "onNodesChange.add.many", "onNodesChange.add.many", "onNodesChange.remove", "onNodesChange.remove", "onNodesChange.remove.single", "onNodesChange.remove.single", "onNodesChange.remove.many", "onNodesChange.remove.many", "onNodesChange.select", "onNodesChange.select", "onNodesChange.select.single", "onNodesChange.select.single", "onNodesChange.select.many", "onNodesChange.select.many", "onEdgesChange", "onEdgesChange", "onEdgesChange.detached", "onEdgesChange.detached", "onEdgesChange.detached.single", "onEdgesChange.detached.single", "onEdgesChange.detached.many", "onEdgesChange.detached.many", "onEdgesChange.add", "onEdgesChange.add", "onEdgesChange.add.single", "onEdgesChange.add.single", "onEdgesChange.add.many", "onEdgesChange.add.many", "onEdgesChange.remove", "onEdgesChange.remove", "onEdgesChange.remove.single", "onEdgesChange.remove.single", "onEdgesChange.remove.many", "onEdgesChange.remove.many", "onEdgesChange.select", "onEdgesChange.select", "onEdgesChange.select.single", "onEdgesChange.select.single", "onEdgesChange.select.many", "onEdgesChange.select.many"] }], ngImport: i0, template: "<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n flowSizeController\n class=\"root-svg\"\n #flow\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <g [background]=\"background\"/>\n\n <svg:g\n mapContext\n spacePointContext\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.NodeComponent, selector: "g[node]", inputs: ["nodeModel", "nodeTemplate", "groupNodeTemplate"] }, { kind: "component", type: i5.EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "component", type: i6.ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: i7.DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "component", type: i8.BackgroundComponent, selector: "g[background]", inputs: ["background"] }, { kind: "directive", type: i9.SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "directive", type: i10.MapContextDirective, selector: "g[mapContext]" }, { kind: "directive", type: i11.RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: i12.RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: i13.RootPointerDirective, selector: "svg[rootPointer]" }, { kind: "directive", type: i14.FlowSizeControllerDirective, selector: "svg[flowSizeController]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
286
292
|
}
|
|
287
293
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, decorators: [{
|
|
@@ -296,7 +302,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
296
302
|
NodeRenderingService,
|
|
297
303
|
SelectionService,
|
|
298
304
|
FlowSettingsService,
|
|
299
|
-
ComponentEventBusService
|
|
305
|
+
ComponentEventBusService,
|
|
306
|
+
KeyboardService
|
|
300
307
|
], hostDirectives: [
|
|
301
308
|
connectionControllerHostDirective,
|
|
302
309
|
changesControllerHostDirective
|
|
@@ -315,6 +322,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
315
322
|
type: Input
|
|
316
323
|
}], entitiesSelectable: [{
|
|
317
324
|
type: Input
|
|
325
|
+
}], keyboardShortcuts: [{
|
|
326
|
+
type: Input
|
|
318
327
|
}], connection: [{
|
|
319
328
|
type: Input,
|
|
320
329
|
args: [{ transform: (settings) => new ConnectionModel(settings) }]
|
|
@@ -347,4 +356,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
347
356
|
type: ViewChild,
|
|
348
357
|
args: [SpacePointContextDirective]
|
|
349
358
|
}] } });
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQXlCLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhQLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWhNLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIs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Z0JBTUcscUJBQXFCO3NCQUQ5QixZQUFZO3VCQUFDLHlCQUF5QjtnQkFJN0IsMEJBQTBCO3NCQURuQyxZQUFZO3VCQUFDLDBCQUEwQjtnQkFJOUIscUJBQXFCO3NCQUQ5QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFJekIsc0JBQXNCO3NCQUQvQixZQUFZO3VCQUFDLDhCQUE4QjtnQkFJbEMsMkJBQTJCO3NCQURwQyxZQUFZO3VCQUFDLDJCQUEyQjtnQkFNL0IsVUFBVTtzQkFEbkIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSXBCLGlCQUFpQjtzQkFEMUIsU0FBUzt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaWduYWwsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNOb2RlLCBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlLCBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSGFuZGxlUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9oYW5kbGUtcG9zaXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBhZGROb2Rlc1RvRWRnZXMgfSBmcm9tICcuLi8uLi91dGlscy9hZGQtbm9kZXMtdG8tZWRnZXMnO1xuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBWaWV3cG9ydFN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy92aWV3cG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmxvd1N0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXN0YXR1cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25uZWN0aW9uLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LWVudGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25uZWN0aW9uLXNldHRpbmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZWZlcmVuY2VLZWVwZXIgfSBmcm9tICcuLi8uLi91dGlscy9yZWZlcmVuY2Uta2VlcGVyJztcbmltcG9ydCB7IE5vZGVzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkZ2UtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9ub2RlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jaGFuZ2VzLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9lZGdlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQtZXZlbnQtYnVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3R5cGVzL2JhY2tncm91bmQudHlwZSc7XG5pbXBvcnQgeyBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRml0Vmlld09wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZpdC12aWV3LW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9wdGltaXphdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb3B0aW1pemF0aW9uLmludGVyZmFjZSc7XG5cbmNvbnN0IGNvbm5lY3Rpb25Db250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogWydvbkNvbm5lY3QnXVxufVxuXG5jb25zdCBjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmUgPSB7XG4gIGRpcmVjdGl2ZTogQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIG91dHB1dHM6IFtcbiAgICAnb25Ob2Rlc0NoYW5nZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24nLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24ubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2l6ZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2l6ZS5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3Quc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3QubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZCcsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdCcsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknLFxuICBdXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZSxcbiAgICBOb2RlUmVuZGVyaW5nU2VydmljZSxcbiAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIEZsb3dTZXR0aW5nc1NlcnZpY2UsXG4gICAgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgY29ubmVjdGlvbkNvbnRyb2xsZXJIb3N0RGlyZWN0aXZlLFxuICAgIGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFZmbG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gI3JlZ2lvbiBESVxuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpXG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVzQ2hhbmdlU2VydmljZSA9IGluamVjdChOb2Rlc0NoYW5nZVNlcnZpY2UpXG4gIHByaXZhdGUgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSlcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpXG4gIHByaXZhdGUgY29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlID0gaW5qZWN0KENvbXBvbmVudEV2ZW50QnVzU2VydmljZSlcbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0VUVElOR1NcblxuICAvKipcbiAgICogU2l6ZSBmb3IgZmxvdyB2aWV3XG4gICAqXG4gICAqIGFjY2VwdHNcbiAgICogLSBhYnNvbHV0ZSBzaXplIGluIGZvcm1hdCBbd2lkdGgsIGhlaWdodF0gb3JcbiAgICogLSAnYXV0bycgdG8gY29tcHV0ZSBzaXplIGJhc2VkIG9uIHBhcmVudCBlbGVtZW50IHNpemVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmlldyh2aWV3OiBbbnVtYmVyLCBudW1iZXJdIHwgJ2F1dG8nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnZpZXcuc2V0KHZpZXcpXG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pblpvb20odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5taW5ab29tLnNldCh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4Wm9vbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1heFpvb20uc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIE9iamVjdCB0aGF0IGNvbnRyb2xzIGZsb3cgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYXJjaGlldmUgcmlnaHQgdG8gbGVmdCBkaXJlY3Rpb25cbiAgICogdGhlbiB5b3UgbmVlZCB0byBwYXNzIHRoZXNlIHBvc2l0aW9ucyB7IHNvdXJjZTogJ2xlZnQnLCB0YXJnZXQ6ICdyaWdodCcgfVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoYW5kbGVQb3NpdGlvbnMoaGFuZGxlUG9zaXRpb25zOiBIYW5kbGVQb3NpdGlvbnMpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuaGFuZGxlUG9zaXRpb25zLnNldChoYW5kbGVQb3NpdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmQ6IEJhY2tncm91bmQgfCBzdHJpbmcgPSAnI2ZmZidcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3B0aW1pemF0aW9uOiBPcHRpbWl6YXRpb24gPSB7XG4gICAgY29tcHV0ZUxheWVyc09uSW5pdDogdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBydWxlIGlmIHlvdSBjYW4gb3IgY2FuJ3Qgc2VsZWN0IGVudGl0aWVzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0aWVzU2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUuc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIGZvciBjb25uZWN0aW9uIChpdCByZW5kZXJzIHdoZW4gdXNlciB0cmllcyB0byBjcmVhdGUgZWRnZSBiZXR3ZWVuIG5vZGVzKVxuICAgKlxuICAgKiBZb3UgbmVlZCB0byBwYXNzIGBDb25uZWN0aW9uU2V0dGluZ3NgIGluIHRoaXMgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IChzZXR0aW5nczogQ29ubmVjdGlvblNldHRpbmdzKSA9PiBuZXcgQ29ubmVjdGlvbk1vZGVsKHNldHRpbmdzKSB9KVxuICBwdWJsaWMgc2V0IGNvbm5lY3Rpb24oY29ubmVjdGlvbjogQ29ubmVjdGlvbk1vZGVsKSB7IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uLnNldChjb25uZWN0aW9uKSB9XG5cbiAgcHVibGljIGdldCBjb25uZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKSB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE1BSU5fSU5QVVRTXG4gIC8qKlxuICAgKiBOb2RlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBzZXQgbm9kZXMobmV3Tm9kZXM6IE5vZGVbXSB8IER5bmFtaWNOb2RlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvcixcbiAgICAgICgpID0+IFJlZmVyZW5jZUtlZXBlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpXG4gICAgKVxuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobmV3TW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIG5vZGVNb2RlbHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vZGVzKCkpXG5cbiAgLyoqXG4gICAqIEVkZ2VzIHRvIHJlbmRlclxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlZGdlcyhuZXdFZGdlczogRWRnZVtdKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsXG4gICAgICAoKSA9PiBSZWZlcmVuY2VLZWVwZXIuZWRnZXMobmV3RWRnZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcygpKVxuICAgIClcblxuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKHRoaXMubm9kZU1vZGVscygpLCBuZXdNb2RlbHMpXG5cbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMuc2V0KG5ld01vZGVscylcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGdlTW9kZWxzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLnZhbGlkRWRnZXMoKSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUU1xuICAvKipcbiAgICogRXZlbnQgdGhhdCBhY2N1bXVsYXRlcyBhbGwgY3VzdG9tIG5vZGUgZXZlbnRzXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Db21wb25lbnROb2RlRXZlbnQgPSB0aGlzLmNvbXBvbmVudEV2ZW50QnVzU2VydmljZS5ldmVudCQgYXMgYW55IC8vIFRPRE86IHJlc2VhcmNoIGhvdyB0byByZW1vdmUgYXMgYW55XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFRFTVBMQVRFU1xuICBAQ29udGVudENoaWxkKE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBub2RlVGVtcGxhdGVEaXJlY3RpdmU/OiBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlPzogR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZT86IEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT86IEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPzogQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIERJUkVDVElWRVNcbiAgQFZpZXdDaGlsZChNYXBDb250ZXh0RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgbWFwQ29udGV4dCE6IE1hcENvbnRleHREaXJlY3RpdmVcblxuICBAVmlld0NoaWxkKFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgc3BhY2VQb2ludENvbnRleHQhOiBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTSUdOQUxfQVBJXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0LmFzUmVhZG9ubHkoKVxuXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UgPVxuICAgIHRvU2lnbmFsKHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7IGluaXRpYWxWYWx1ZTogW10gYXMgTm9kZUNoYW5nZVtdIH0pXG5cbiAgLyoqXG4gICAqIFNpZ25hbCB0byByZWFkaW5nIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIEVkZ2VDaGFuZ2VbXSB9KVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBSWF9BUElcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydENoYW5nZSQgPSB0b09ic2VydmFibGUodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydClcbiAgICAucGlwZShza2lwKDEpKSAvLyBza2lwIGRlZmF1bHQgdmFsdWUgdGhhdCBzZXQgYnkgc2lnbmFsXG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCBub2RlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub2Rlc0NoYW5nZSQgPSB0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggZWRnZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXNDaGFuZ2UkID0gdGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCBtYXJrZXJzID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm1hcmtlcnNcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJbml0aWFsTm9kZXNPcmRlcigpXG4gIH1cblxuICAvLyAjcmVnaW9uIE1FVEhPRFNfQVBJXG4gIC8qKlxuICAgKiBDaGFuZ2Ugdmlld3BvcnQgdG8gc3BlY2lmaWVkIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB2aWV3cG9ydCB2aWV3cG9ydCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHZpZXdwb3J0VG8odmlld3BvcnQ6IFZpZXdwb3J0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiB2aWV3cG9ydCwgZHVyYXRpb246IDAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHsgem9vbSB9LCBkdXJhdGlvbjogMCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdG8gc3BlY2lmaWVkIGNvb3JkaW5hdGVcbiAgICpcbiAgICogQHBhcmFtIHBvaW50IHBvaW50IHdoZXJlIHRvIG1vdmVcbiAgICovXG4gIHB1YmxpYyBwYW5Ubyhwb2ludDogUG9pbnQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiBwb2ludCwgZHVyYXRpb246IDAgfSlcbiAgfVxuXG4gIHB1YmxpYyBmaXRWaWV3KG9wdGlvbnM/OiBGaXRWaWV3T3B0aW9ucykge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLmZpdFZpZXcob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbm9kZSBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0gaWQgbm9kZSBpZFxuICAgKi9cbiAgcHVibGljIGdldE5vZGU8VCA9IHVua25vd24+KGlkOiBzdHJpbmcpOiBOb2RlPFQ+IHwgRHluYW1pY05vZGU8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0Tm9kZTxUPihpZCk/Lm5vZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIG1ldGhvZCB0byBnZXQgZGV0YWNoZWQgZWRnZXNcbiAgICovXG4gIHB1YmxpYyBnZXREZXRhY2hlZEVkZ2VzKCk6IEVkZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXREZXRhY2hlZEVkZ2VzKCkubWFwKGUgPT4gZS5lZGdlKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgcG9pbnQgcmVjZWl2ZWQgZnJvbSBkb2N1bWVudCB0byBwb2ludCBvbiB0aGUgZmxvd1xuICAgKi9cbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuc3BhY2VQb2ludENvbnRleHQuZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50KVxuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyBub2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBub2RlXG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tFZGdlcyhpZHg6IG51bWJlciwgeyBlZGdlIH06IEVkZ2VNb2RlbCkge1xuICAgIHJldHVybiBlZGdlXG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxOb2Rlc09yZGVyKCkge1xuICAgIGlmICh0aGlzLm9wdGltaXphdGlvbi5jb21wdXRlTGF5ZXJzT25Jbml0KSB7XG5cbiAgICAgIHRoaXMubm9kZU1vZGVscygpLmZvckVhY2gobW9kZWwgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1vZGVsLm5vZGUudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2RlZmF1bHQtZ3JvdXAnOlxuICAgICAgICAgIGNhc2UgJ3RlbXBsYXRlLWdyb3VwJzoge1xuICAgICAgICAgICAgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5wdWxsTm9kZShtb2RlbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbiIsIjxzdmc6c3ZnXG4gIHJvb3RTdmdSZWZcbiAgcm9vdFN2Z0NvbnRleHRcbiAgcm9vdFBvaW50ZXJcbiAgZmxvd1NpemVDb250cm9sbGVyXG4gIGNsYXNzPVwicm9vdC1zdmdcIlxuICAjZmxvd1xuPlxuICA8ZGVmcyBbbWFya2Vyc109XCJtYXJrZXJzKClcIiBmbG93RGVmcyAvPlxuXG4gIDxnIFtiYWNrZ3JvdW5kXT1cImJhY2tncm91bmRcIi8+XG5cbiAgPHN2ZzpnXG4gICAgbWFwQ29udGV4dFxuICAgIHNwYWNlUG9pbnRDb250ZXh0XG4gID5cbiAgICA8IS0tIENvbm5lY3Rpb24gLS0+XG4gICAgPHN2ZzpnXG4gICAgICBjb25uZWN0aW9uXG4gICAgICBbbW9kZWxdPVwiY29ubmVjdGlvblwiXG4gICAgICBbdGVtcGxhdGVdPVwiY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgLz5cblxuICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIGVkZ2VNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICBlZGdlXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIE5vZGVzIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGVNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICBub2RlXG4gICAgICBbbm9kZU1vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFtub2RlVGVtcGxhdGVdPVwibm9kZVRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG48L3N2Zzpzdmc+XG4iXX0=
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQXlCLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhQLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWhNLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIs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LGlCQUFpQjtzQkFEM0IsS0FBSztnQkFXSyxVQUFVO3NCQURwQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBVzFFLEtBQUs7c0JBRGYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBa0JkLEtBQUs7c0JBRGYsS0FBSztnQkFzQkMsb0JBQW9CO3NCQUQxQixNQUFNO2dCQU1HLHFCQUFxQjtzQkFEOUIsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBSTdCLDBCQUEwQjtzQkFEbkMsWUFBWTt1QkFBQywwQkFBMEI7Z0JBSTlCLHFCQUFxQjtzQkFEOUIsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBSXpCLHNCQUFzQjtzQkFEL0IsWUFBWTt1QkFBQyw4QkFBOEI7Z0JBSWxDLDJCQUEyQjtzQkFEcEMsWUFBWTt1QkFBQywyQkFBMkI7Z0JBTS9CLFVBQVU7c0JBRG5CLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUlwQixpQkFBaUI7c0JBRDFCLFNBQVM7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2lnbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljTm9kZSwgTm9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbm9kZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWFwQ29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbWFwLWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IERyYWdnYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmFnZ2FibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBFZGdlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lZGdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRnZS5tb2RlbCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUsIEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZVRlbXBsYXRlRGlyZWN0aXZlLCBHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSwgTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEhhbmRsZVBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaGFuZGxlLXBvc2l0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgYWRkTm9kZXNUb0VkZ2VzIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWRkLW5vZGVzLXRvLWVkZ2VzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmlld3BvcnRTdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29ubmVjdGlvbi1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29ubmVjdGlvbi1zZXR0aW5ncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlS2VlcGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVmZXJlbmNlLWtlZXBlcic7XG5pbXBvcnQgeyBOb2Rlc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvbm9kZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWRnZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBOb2RlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcG9uZW50LWV2ZW50LWJ1cy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhY2tncm91bmQgfSBmcm9tICcuLi8uLi90eXBlcy9iYWNrZ3JvdW5kLnR5cGUnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpdFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9maXQtdmlldy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPcHRpbWl6YXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL29wdGltaXphdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dHMgfSBmcm9tICcuLi8uLi90eXBlcy9rZXlib2FyZC1hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBLZXlib2FyZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9rZXlib2FyZC5zZXJ2aWNlJztcblxuY29uc3QgY29ubmVjdGlvbkNvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbJ29uQ29ubmVjdCddXG59XG5cbmNvbnN0IGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogW1xuICAgICdvbk5vZGVzQ2hhbmdlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbicsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24uc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2l6ZS5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3Quc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QubWFueScsXG4gIF1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmZsb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92Zmxvdy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRHJhZ2dhYmxlU2VydmljZSxcbiAgICBWaWV3cG9ydFNlcnZpY2UsXG4gICAgRmxvd1N0YXR1c1NlcnZpY2UsXG4gICAgRmxvd0VudGl0aWVzU2VydmljZSxcbiAgICBOb2Rlc0NoYW5nZVNlcnZpY2UsXG4gICAgRWRnZUNoYW5nZXNTZXJ2aWNlLFxuICAgIE5vZGVSZW5kZXJpbmdTZXJ2aWNlLFxuICAgIFNlbGVjdGlvblNlcnZpY2UsXG4gICAgRmxvd1NldHRpbmdzU2VydmljZSxcbiAgICBDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UsXG4gICAgS2V5Ym9hcmRTZXJ2aWNlXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgY29ubmVjdGlvbkNvbnRyb2xsZXJIb3N0RGlyZWN0aXZlLFxuICAgIGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFZmbG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gI3JlZ2lvbiBESVxuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpXG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVzQ2hhbmdlU2VydmljZSA9IGluamVjdChOb2Rlc0NoYW5nZVNlcnZpY2UpXG4gIHByaXZhdGUgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSlcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpXG4gIHByaXZhdGUgY29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlID0gaW5qZWN0KENvbXBvbmVudEV2ZW50QnVzU2VydmljZSlcbiAgcHJpdmF0ZSBrZXlib2FyZFNlcnZpY2UgPSBpbmplY3QoS2V5Ym9hcmRTZXJ2aWNlKVxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTRVRUSU5HU1xuXG4gIC8qKlxuICAgKiBTaXplIGZvciBmbG93IHZpZXdcbiAgICpcbiAgICogYWNjZXB0c1xuICAgKiAtIGFic29sdXRlIHNpemUgaW4gZm9ybWF0IFt3aWR0aCwgaGVpZ2h0XSBvclxuICAgKiAtICdhdXRvJyB0byBjb21wdXRlIHNpemUgYmFzZWQgb24gcGFyZW50IGVsZW1lbnQgc2l6ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2aWV3KHZpZXc6IFtudW1iZXIsIG51bWJlcl0gfCAnYXV0bycpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uudmlldy5zZXQodmlldylcbiAgfVxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluWm9vbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1pblpvb20uc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhab29tKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWF4Wm9vbS5zZXQodmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogT2JqZWN0IHRoYXQgY29udHJvbHMgZmxvdyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBhcmNoaWV2ZSByaWdodCB0byBsZWZ0IGRpcmVjdGlvblxuICAgKiB0aGVuIHlvdSBuZWVkIHRvIHBhc3MgdGhlc2UgcG9zaXRpb25zIHsgc291cmNlOiAnbGVmdCcsIHRhcmdldDogJ3JpZ2h0JyB9XG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGhhbmRsZVBvc2l0aW9ucyhoYW5kbGVQb3NpdGlvbnM6IEhhbmRsZVBvc2l0aW9ucykge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5oYW5kbGVQb3NpdGlvbnMuc2V0KGhhbmRsZVBvc2l0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBCYWNrZ3JvdW5kIGZvciBmbG93XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYmFja2dyb3VuZDogQmFja2dyb3VuZCB8IHN0cmluZyA9ICcjZmZmJ1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcHRpbWl6YXRpb246IE9wdGltaXphdGlvbiA9IHtcbiAgICBjb21wdXRlTGF5ZXJzT25Jbml0OiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogR2xvYmFsIHJ1bGUgaWYgeW91IGNhbiBvciBjYW4ndCBzZWxlY3QgZW50aXRpZXNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZW50aXRpZXNTZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZS5zZXQodmFsdWUpXG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGtleWJvYXJkU2hvcnRjdXRzKHZhbHVlOiBLZXlib2FyZFNob3J0Y3V0cykge1xuICAgIHRoaXMua2V5Ym9hcmRTZXJ2aWNlLnNldFNob3J0Y3V0cyh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiAoc2V0dGluZ3M6IENvbm5lY3Rpb25TZXR0aW5ncykgPT4gbmV3IENvbm5lY3Rpb25Nb2RlbChzZXR0aW5ncykgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkgeyB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbi5zZXQoY29ubmVjdGlvbikgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCkgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10gfCBEeW5hbWljTm9kZVtdKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsXG4gICAgICAoKSA9PiBSZWZlcmVuY2VLZWVwZXIubm9kZXMobmV3Tm9kZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2RlcygpKVxuICAgIClcblxuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKG5ld01vZGVscywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpXG5cbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMuc2V0KG5ld01vZGVscylcbiAgfVxuXG4gIHByb3RlY3RlZCBub2RlTW9kZWxzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ub2RlcygpKVxuXG4gIC8qKlxuICAgKiBFZGdlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRnZXMobmV3RWRnZXM6IEVkZ2VbXSkge1xuICAgIGNvbnN0IG5ld01vZGVscyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLFxuICAgICAgKCkgPT4gUmVmZXJlbmNlS2VlcGVyLmVkZ2VzKG5ld0VkZ2VzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcbiAgICApXG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLm5vZGVNb2RlbHMoKSwgbmV3TW9kZWxzKVxuXG4gICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzLnNldChuZXdNb2RlbHMpXG4gIH1cblxuICBwcm90ZWN0ZWQgZWRnZU1vZGVscyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS52YWxpZEVkZ2VzKCkpXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE9VVFBVVFNcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgYWNjdW11bGF0ZXMgYWxsIGN1c3RvbSBub2RlIGV2ZW50c1xuICAgKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uQ29tcG9uZW50Tm9kZUV2ZW50ID0gdGhpcy5jb21wb25lbnRFdmVudEJ1c1NlcnZpY2UuZXZlbnQkIGFzIGFueSAvLyBUT0RPOiByZXNlYXJjaCBob3cgdG8gcmVtb3ZlIGFzIGFueVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBURU1QTEFURVNcbiAgQENvbnRlbnRDaGlsZChOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgbm9kZVRlbXBsYXRlRGlyZWN0aXZlPzogTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZT86IEdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChFZGdlVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBlZGdlVGVtcGxhdGVEaXJlY3RpdmU/OiBFZGdlVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VMYWJlbEh0bWxEaXJlY3RpdmU/OiBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZT86IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBESVJFQ1RJVkVTXG4gIEBWaWV3Q2hpbGQoTWFwQ29udGV4dERpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIG1hcENvbnRleHQhOiBNYXBDb250ZXh0RGlyZWN0aXZlXG5cbiAgQFZpZXdDaGlsZChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIHNwYWNlUG9pbnRDb250ZXh0ITogU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmVcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0lHTkFMX0FQSVxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIHZpZXdwb3J0IGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydC5hc1JlYWRvbmx5KClcblxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSB9KVxuXG4gIC8qKlxuICAgKiBTaWduYWwgdG8gcmVhZGluZyBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9XG4gICAgdG9TaWduYWwodGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10gfSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpXG4gICAgLnBpcGUoc2tpcCgxKSkgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UkID0gdGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlJCA9IHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkXG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SW5pdGlhbE5vZGVzT3JkZXIoKVxuICB9XG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogdmlld3BvcnQsIGR1cmF0aW9uOiAwIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHpvb21cbiAgICpcbiAgICogQHBhcmFtIHpvb20gem9vbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHpvb21Ubyh6b29tOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiB7IHpvb20gfSwgZHVyYXRpb246IDAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHNwZWNpZmllZCBjb29yZGluYXRlXG4gICAqXG4gICAqIEBwYXJhbSBwb2ludCBwb2ludCB3aGVyZSB0byBtb3ZlXG4gICAqL1xuICBwdWJsaWMgcGFuVG8ocG9pbnQ6IFBvaW50KTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogcG9pbnQsIGR1cmF0aW9uOiAwIH0pXG4gIH1cblxuICBwdWJsaWMgZml0VmlldyhvcHRpb25zPzogRml0Vmlld09wdGlvbnMpIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS5maXRWaWV3KG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IER5bmFtaWNOb2RlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldE5vZGU8VD4oaWQpPy5ub2RlXG4gIH1cblxuICAvKipcbiAgICogU3luYyBtZXRob2QgdG8gZ2V0IGRldGFjaGVkIGVkZ2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGV0YWNoZWRFZGdlcygpOiBFZGdlW10ge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0RGV0YWNoZWRFZGdlcygpLm1hcChlID0+IGUuZWRnZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHBvaW50IHJlY2VpdmVkIGZyb20gZG9jdW1lbnQgdG8gcG9pbnQgb24gdGhlIGZsb3dcbiAgICovXG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50KTogUG9pbnQge1xuICAgIHJldHVybiB0aGlzLnNwYWNlUG9pbnRDb250ZXh0LmRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludClcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgcHJvdGVjdGVkIHRyYWNrTm9kZXMoaWR4OiBudW1iZXIsIHsgbm9kZSB9OiBOb2RlTW9kZWwpIHtcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrRWRnZXMoaWR4OiBudW1iZXIsIHsgZWRnZSB9OiBFZGdlTW9kZWwpIHtcbiAgICByZXR1cm4gZWRnZVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsTm9kZXNPcmRlcigpIHtcbiAgICBpZiAodGhpcy5vcHRpbWl6YXRpb24uY29tcHV0ZUxheWVyc09uSW5pdCkge1xuXG4gICAgICB0aGlzLm5vZGVNb2RlbHMoKS5mb3JFYWNoKG1vZGVsID0+IHtcbiAgICAgICAgc3dpdGNoIChtb2RlbC5ub2RlLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdkZWZhdWx0LWdyb3VwJzpcbiAgICAgICAgICBjYXNlICd0ZW1wbGF0ZS1ncm91cCc6IHtcbiAgICAgICAgICAgIHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UucHVsbE5vZGUobW9kZWwpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG4iLCI8c3ZnOnN2Z1xuICByb290U3ZnUmVmXG4gIHJvb3RTdmdDb250ZXh0XG4gIHJvb3RQb2ludGVyXG4gIGZsb3dTaXplQ29udHJvbGxlclxuICBjbGFzcz1cInJvb3Qtc3ZnXCJcbiAgI2Zsb3dcbj5cbiAgPGRlZnMgW21hcmtlcnNdPVwibWFya2VycygpXCIgZmxvd0RlZnMgLz5cblxuICA8ZyBbYmFja2dyb3VuZF09XCJiYWNrZ3JvdW5kXCIvPlxuXG4gIDxzdmc6Z1xuICAgIG1hcENvbnRleHRcbiAgICBzcGFjZVBvaW50Q29udGV4dFxuICA+XG4gICAgPCEtLSBDb25uZWN0aW9uIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgY29ubmVjdGlvblxuICAgICAgW21vZGVsXT1cImNvbm5lY3Rpb25cIlxuICAgICAgW3RlbXBsYXRlXT1cImNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIEVkZ2VzICAtLT5cbiAgICA8c3ZnOmdcbiAgICAgICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBlZGdlTW9kZWxzKCk7IHRyYWNrQnk6IHRyYWNrRWRnZXNcIlxuICAgICAgZWRnZVxuICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFtlZGdlVGVtcGxhdGVdPVwiZWRnZVRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAvPlxuXG4gICAgPCEtLSBOb2RlcyAtLT5cbiAgICA8c3ZnOmdcbiAgICAgICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBub2RlTW9kZWxzKCk7IHRyYWNrQnk6IHRyYWNrTm9kZXNcIlxuICAgICAgbm9kZVxuICAgICAgW25vZGVNb2RlbF09XCJtb2RlbFwiXG4gICAgICBbbm9kZVRlbXBsYXRlXT1cIm5vZGVUZW1wbGF0ZURpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgW2dyb3VwTm9kZVRlbXBsYXRlXT1cImdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuPC9zdmc6c3ZnPlxuIl19
|
|
@@ -56,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
56
56
|
type: Directive,
|
|
57
57
|
args: [{ selector: 'svg[rootPointer]' }]
|
|
58
58
|
}] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wb2ludGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBYyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBUSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBYXhILE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFVSxTQUFJLEdBQUcsTUFBTSxDQUE0QixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUE7UUFFbEUsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFBO1FBRXpDLG1CQUFjLEdBQXNCLElBQUksQ0FBQTtRQUVoRCxzQ0FBc0M7UUFDL0IsbUJBQWMsR0FBRyxTQUFTLENBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3hFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDaEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ2hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUF3QjtZQUN0QyxhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUMsRUFDSCxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFDbEMsS0FBSyxFQUFFLENBQ29CLENBQUM7UUFFdkIsbUJBQWMsR0FBRyxLQUFL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QUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUE7UUFDeEMsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ29CLENBQUE7UUFFdEIsd0JBQW1CLEdBQUcsS0FBSyxDQUNoQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUM5QixTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUNoQyxDQUFDLElBQUksQ0FDSixLQUFLLEVBQUUsQ0FDUixDQUFBO0tBVUY7SUFQQzs7O09BR0c7SUFDSSxlQUFlLENBQUMsS0FBaUI7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEMsQ0FBQzsrR0F2RlUsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIGZyb21FdmVudCwgbWFwLCBtZXJnZSwgb2JzZXJ2ZU9uLCBzaGFyZSwgc2tpcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBQb2ludGVyRXZlbnQge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIG1vdmVtZW50WDogbnVtYmVyXG4gIG1vdmVtZW50WTogbnVtYmVyXG4gIHRhcmdldDogRWxlbWVudCB8IG51bGxcbiAgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnRcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnc3ZnW3Jvb3RQb2ludGVyXScgfSlcbmV4cG9ydCBjbGFzcyBSb290UG9pbnRlckRpcmVjdGl2ZSB7XG4gIHByaXZhdGUgaG9zdCA9IGluamVjdDxFbGVtZW50UmVmPFNWR1NWR0VsZW1lbnQ+PihFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50XG5cbiAgcHJpdmF0ZSBpbml0aWFsVG91Y2gkID0gbmV3IFN1YmplY3Q8VG91Y2hFdmVudD4oKVxuXG4gIHByaXZhdGUgcHJldlRvdWNoRXZlbnQ6IFRvdWNoRXZlbnQgfCBudWxsID0gbnVsbFxuXG4gIC8vIFRPRE86IGRvIG5vdCBlbWl0IGlmIG1vdXNlIG5vdCBkb3duXG4gIHB1YmxpYyBtb3VzZU1vdmVtZW50JCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZW1vdmUnKS5waXBlKFxuICAgIG1hcChldmVudCA9PiAoe1xuICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgICBtb3ZlbWVudFg6IGV2ZW50Lm1vdmVtZW50WCxcbiAgICAgIG1vdmVtZW50WTogZXZlbnQubW92ZW1lbnRZLFxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRWxlbWVudCB8IG51bGwsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pKSxcbiAgICBvYnNlcnZlT24oYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpLFxuICAgIHNoYXJlKClcbiAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxQb2ludD47XG5cbiAgcHVibGljIHRvdWNoTW92ZW1lbnQkID0gbWVyZ2UoXG4gICAgdGhpcy5pbml0aWFsVG91Y2gkLFxuICAgIGZyb21FdmVudDxUb3VjaEV2ZW50Pih0aGlzLmhvc3QsICd0b3VjaG1vdmUnKVxuICApLnBpcGUoXG4gICAgdGFwKChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSksXG4gICAgbWFwKChvcmlnaW5hbEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB4ID0gb3JpZ2luYWxFdmVudC50b3VjaGVzWzBdPy5jbGllbnRYID8/IDBcbiAgICAgIGNvbnN0IHkgPSBvcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0/LmNsaWVudFkgPz8gMFxuICAgICAgY29uc3QgbW92ZW1lbnRYID0gdGhpcy5wcmV2VG91Y2hFdmVudFxuICAgICAgICA/IG9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWCAtIHRoaXMucHJldlRvdWNoRXZlbnQudG91Y2hlc1swXS5wYWdlWFxuICAgICAgICA6IDBcbiAgICAgIGNvbnN0IG1vdmVtZW50WSA9IHRoaXMucHJldlRvdWNoRXZlbnRcbiAgICAgICAgPyBvcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkgLSB0aGlzLnByZXZUb3VjaEV2ZW50LnRvdWNoZXNbMF0ucGFnZVlcbiAgICAgICAgOiAwXG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSlcblxuICAgICAgcmV0dXJuIHsgeCwgeSwgbW92ZW1lbnRYLCBtb3ZlbWVudFksIHRhcmdldCwgb3JpZ2luYWxFdmVudCB9XG4gICAgfSksXG4gICAgdGFwKChldmVudCkgPT4gdGhpcy5wcmV2VG91Y2hFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQpLFxuICAgIG9ic2VydmVPbihhbmltYXRpb25GcmFtZVNjaGVkdWxlciksXG4gICAgc2hhcmUoKVxuICApIHNhdGlzZmllcyBPYnNlcnZhYmxlPFBvaW50PjtcblxuICBwdWJsaWMgcG9pbnRlck1vdmVtZW50JDogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnQ+ID0gbWVyZ2UoXG4gICAgdGhpcy5tb3VzZU1vdmVtZW50JCxcbiAgICB0aGlzLnRvdWNoTW92ZW1lbnQkXG4gIClcblxuICBwdWJsaWMgdG91Y2hFbmQkID0gZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHRoaXMuaG9zdCwgJ3RvdWNoZW5kJykucGlwZShcbiAgICBtYXAoKG9yaWdpbmFsRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHggPSBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdPy5jbGllbnRYID8/IDBcbiAgICAgIGNvbnN0IHkgPSBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdPy5jbGllbnRZID8/IDBcbiAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSlcblxuICAgICAgcmV0dXJuIHsgeCwgeSwgdGFyZ2V0LCBvcmlnaW5hbEV2ZW50IH1cbiAgICB9KSxcbiAgICB0YXAoKCkgPT4gdGhpcy5wcmV2VG91Y2hFdmVudCA9IG51bGwpLFxuICAgIHNoYXJlKClcbiAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxQb2ludD5cblxuICBwdWJsaWMgbW91c2VVcCQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2V1cCcpLnBpcGUoXG4gICAgbWFwKChvcmlnaW5hbEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB4ID0gb3JpZ2luYWxFdmVudC5jbGllbnRYXG4gICAgICBjb25zdCB5ID0gb3JpZ2luYWxFdmVudC5jbGllbnRZXG4gICAgICBjb25zdCB0YXJnZXQgPSBvcmlnaW5hbEV2ZW50LnRhcmdldFxuXG4gICAgICByZXR1cm4geyB4LCB5LCB0YXJnZXQsIG9yaWdpbmFsRXZlbnQgfVxuICAgIH0pLFxuICAgIHNoYXJlKClcbiAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxQb2ludD5cblxuICBwdWJsaWMgZG9jdW1lbnRQb2ludGVyRW5kJCA9IG1lcmdlKFxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKSxcbiAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaGVuZCcpXG4gICkucGlwZShcbiAgICBzaGFyZSgpXG4gIClcblxuXG4gIC8qKlxuICAgKiBXZSBzaG91bGQga25vdyB3aGVuIHVzZXIgc3RhcnRlZCBhIHRvdWNoIGluIG9yZGVyIHRvIG5vdFxuICAgKiBzaG93IG9sZCB0b3VjaCBwb3NpdGlvbiB3aGVuIGNvbm5lY3Rpb24gY3JlYXRpb24gaXMgc3RhcnRlZFxuICAgKi9cbiAgcHVibGljIHNldEluaXRpYWxUb3VjaChldmVudDogVG91Y2hFdmVudCkge1xuICAgIHRoaXMuaW5pdGlhbFRvdWNoJC5uZXh0KGV2ZW50KVxuICB9XG59XG4iXX0=
|
|
@@ -27,7 +27,7 @@ export class SelectableDirective {
|
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
29
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
30
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectableDirective, selector: "[selectable]", host: { listeners: { "mousedown": "onMousedown()" } }, ngImport: i0 }); }
|
|
30
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectableDirective, selector: "[selectable]", host: { listeners: { "mousedown": "onMousedown()", "touchstart": "onMousedown()" } }, ngImport: i0 }); }
|
|
31
31
|
}
|
|
32
32
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectableDirective, decorators: [{
|
|
33
33
|
type: Directive,
|
|
@@ -35,5 +35,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
35
35
|
}], propDecorators: { onMousedown: [{
|
|
36
36
|
type: HostListener,
|
|
37
37
|
args: ['mousedown']
|
|
38
|
+
}, {
|
|
39
|
+
type: HostListener,
|
|
40
|
+
args: ['touchstart']
|
|
38
41
|
}] } });
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9zZWxlY3RhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHeEUsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQUVVLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBQ2pELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDdEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtLQW9CL0Q7SUFoQlcsV0FBVztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDNUIsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNyQztJQUNILENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUE7U0FDakM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQTtTQUM3QjtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQzsrR0F2QlUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFOzhCQVMzQixXQUFXO3NCQUZwQixZQUFZO3VCQUFDLFdBQVc7O3NCQUN4QixZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZS9lZGdlLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZsb3dFbnRpdHkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zsb3ctZW50aXR5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbc2VsZWN0YWJsZV0nIH0pXG5leHBvcnQgY2xhc3MgU2VsZWN0YWJsZURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKVxuICBwcml2YXRlIHNlbGVjdGlvblNlcnZpY2UgPSBpbmplY3QoU2VsZWN0aW9uU2VydmljZSlcbiAgcHJpdmF0ZSBwYXJlbnRFZGdlID0gaW5qZWN0KEVkZ2VDb21wb25lbnQsIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgcHJpdmF0ZSBwYXJlbnROb2RlID0gaW5qZWN0KE5vZGVDb21wb25lbnQsIHsgb3B0aW9uYWw6IHRydWUgfSlcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JylcbiAgcHJvdGVjdGVkIG9uTW91c2Vkb3duKCkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXR5KClcbiAgICBpZiAoZW50aXR5ICYmIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdChlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbnRpdHkoKTogRmxvd0VudGl0eSB8IG51bGwge1xuICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUubm9kZU1vZGVsXG4gICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudEVkZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudEVkZ2UubW9kZWxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iXX0=
|