@tetacom/svg-charts 1.4.14 → 1.4.16

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.
@@ -18,6 +18,8 @@ export declare class ZoomableDirective implements OnDestroy, AfterViewInit {
18
18
  private _element;
19
19
  private zoom;
20
20
  private alive;
21
+ mouseenter(): void;
22
+ mouseleave(): void;
21
23
  private currentTransform;
22
24
  constructor(elementRef: ElementRef, zoomService: ZoomService, chartService: ChartService, zone: NgZone);
23
25
  ngOnInit(): void;
@@ -1,5 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, } from '@angular/core';
2
- import { combineLatest, map, shareReplay, withLatestFrom, } from 'rxjs';
2
+ import { animationFrameScheduler, combineLatest, map, observeOn, shareReplay, withLatestFrom, } from 'rxjs';
3
3
  import { AxisOrientation } from '../model/enum/axis-orientation';
4
4
  import { BrushType } from '../model/enum/brush-type';
5
5
  import { ZoomType } from '../model/enum/zoom-type';
@@ -37,9 +37,7 @@ export class ChartContainerComponent {
37
37
  this.sumSize = (acc, curr) => acc + curr.selfSize;
38
38
  this.config = this._svc.config;
39
39
  this.size = this._svc.size;
40
- this.scales = this._scaleService.scales.pipe(
41
- // observeOn(animationFrameScheduler),
42
- tetaZoneFull(this._zone), shareReplay({
40
+ this.scales = this._scaleService.scales.pipe(observeOn(animationFrameScheduler), tetaZoneFull(this._zone), shareReplay({
43
41
  bufferSize: 1,
44
42
  refCount: true,
45
43
  }));
@@ -181,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
181
179
  type: Component,
182
180
  args: [{ selector: 'teta-chart-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"{\n size: size | async,\n config: config | async,\n scales: scales | async,\n visibleRect: visibleRect | async\n} as data\" xmlns:svg=\"http://www.w3.org/1999/html\">\n <teta-tooltip *ngIf=\"data.config?.tooltip?.enable\"\n [size]=\"data.size\"\n [config]=\"data.config\"></teta-tooltip>\n <ng-container *ngIf=\"data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length\">\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n <ng-container *ngFor=\"let item of data.scales.y | keyvalue; trackBy: identify\">\n <ng-container *ngIf=\"item.value.selfSize > 0\n && item.value.options.visible\n && data.scales.x.size > 0\n && data.scales.y.size > 0\">\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n </ng-container>\n\n </ng-container>\n </g>\n <g class=\"x-axis-container\">\n <ng-container *ngFor=\"let item of data.scales.x | keyvalue; trackBy: identify\">\n <ng-container *ngIf=\"item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0\">\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n </ng-container>\n </ng-container>\n </g>\n </svg>\n </ng-container>\n <ng-container\n *ngIf=\"data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length\">\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate('+ data.visibleRect.x +'px, '+ data.visibleRect.y +'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n\n <g class=\"gridlines\"\n teta-gridlines\n *ngIf=\"data.config.gridLines?.enable !== false\"\n [size]=\"data.size\"></g>\n\n <g class=\"x-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of data.config.xAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotBand of axis.plotBands\"\n [plotBand]=\"plotBand\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"data.scales.x.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"y-axis-plotband-container\">\n <ng-container *ngFor=\"let axis of data.config.yAxis; let i = index\">\n <g teta-plot-band *ngFor=\"let plotBand of axis.plotBands\"\n [plotBand]=\"plotBand\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"data.scales.y.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"x-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of data.config.xAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotLine of axis.plotLines\"\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"y-axis-plotline-container\">\n <ng-container *ngFor=\"let axis of data.config.yAxis; let i = index\">\n <g teta-plot-line *ngFor=\"let plotLine of axis.plotLines\"\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"></g>\n </ng-container>\n </g>\n <g class=\"series-container\">\n <ng-container *ngFor=\"let series of data.config.series;\">\n <g teta-series-host\n *ngIf=\"series.visible\"\n [config]=\"data.config\"\n [series]=\"series\"></g>\n </ng-container>\n </g>\n <g class=\"annotations\">\n <g teta-annotation\n *ngFor=\"let annotation of data.config.annotations\"\n [annotation]=\"annotation\"></g>\n </g>\n <g class=\"crosshair\" *ngIf=\"data.config.tooltip?.showCrosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n </svg>\n\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"] }]
183
181
  }], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }, { type: i0.NgZone }]; } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxHQUtWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFDTCxhQUFhLEVBQ2IsR0FBRyxFQUVILFdBQVcsRUFDWCxjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFHL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYXBELE1BQU0sT0FBTyx1QkFBdUI7SUF3QmxDLFlBQ1UsSUFBa0IsRUFDbEIsSUFBdUIsRUFDdkIsYUFBMkIsRUFDM0IsWUFBeUIsRUFDekIsV0FBdUIsRUFDdkIsS0FBYTtRQUxiLFNBQUksR0FBSixJQUFJLENBQWM7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQXhCdkIsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUdaLHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUNNO2FBQ3RDLEdBQUcsQ0FDRixJQUFJLEVBQ0osQ0FB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Q1QsS0FBaUIsRUFDakIsT0FBMEIsRUFDMUIsT0FBMEI7UUFFMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUM3QixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRTtnQkFDTixDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzNCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBdUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQzlDLENBQUM7O29IQXRQVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw0RENyQ3BDLDI0TUFzSkE7MkZEakhhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SUNoYXJ0Q29uZmlnfSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc2hhcmVSZXBsYXksXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXhpc30gZnJvbSAnLi4vY29yZS9heGlzL2F4aXMnO1xuaW1wb3J0IHtBeGlzT3JpZW50YXRpb259IGZyb20gJy4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvbic7XG5pbXBvcnQge1NjYWxlU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7QnJ1c2hUeXBlfSBmcm9tICcuLi9tb2RlbC9lbnVtL2JydXNoLXR5cGUnO1xuaW1wb3J0IHtab29tVHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHt0ZXRhWm9uZUZ1bGx9IGZyb20gJ0B0ZXRhY29tL25nLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtJU2NhbGVzTWFwfSBmcm9tICcuLi9tb2RlbC9pLXNjYWxlcy1tYXAnO1xuaW1wb3J0IHtTZXJpZXN9IGZyb20gXCIuLi9tb2RlbC9zZXJpZXNcIjtcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tIFwiLi4vbW9kZWwvYmFzZS1wb2ludFwiO1xuXG50eXBlIE9wcG9zaXRlID0gYm9vbGVhbjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1jaGFydC1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY29uZmlnOiBPYnNlcnZhYmxlPElDaGFydENvbmZpZz47XG4gIHNjYWxlczogT2JzZXJ2YWJsZTxJU2NhbGVzTWFwPjtcbiAgc2l6ZTogT2JzZXJ2YWJsZTxET01SZWN0PjtcbiAgdmlzaWJsZVJlY3Q6IE9ic2VydmFibGU8YW55PjtcbiAgYnJ1c2hTY2FsZTogT2JzZXJ2YWJsZTxhbnk+O1xuICB6b29tVHlwZSA9IFpvb21UeXBlO1xuXG4gIHByaXZhdGUgX29ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBmaWx0ZXJQb3NpdGlvbk1hcCA9IG5ldyBNYXA8T3Bwb3NpdGUsXG4gICAgKGF4aXM6IEF4aXMpID0+IChfOiBBeGlzKSA9PiBib29sZWFuPigpXG4gICAgLnNldChcbiAgICAgIHRydWUsXG4gICAgICAoYXhpcykgPT4gKF86IEF4aXMpID0+XG4gICAgICAgIF8ub3B0aW9ucy5vcHBvc2l0ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSAmJiBheGlzLmluZGV4IDw9IF8uaW5kZXhcbiAgICApXG4gICAgLnNldChcbiAgICAgIGZhbHNlLFxuICAgICAgKGF4aXMpID0+IChfOiBBeGlzKSA9PlxuICAgICAgICBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiZcbiAgICAgICAgXy5vcHRpb25zLnZpc2libGUgJiZcbiAgICAgICAgXy5pbmRleCA8PSBheGlzLmluZGV4XG4gICAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3NjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3pvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuX3N2Yy5jb25maWc7XG4gICAgdGhpcy5zaXplID0gdGhpcy5fc3ZjLnNpemU7XG5cbiAgICB0aGlzLnNjYWxlcyA9IHRoaXMuX3NjYWxlU2VydmljZS5zY2FsZXMucGlwZShcbiAgICAgIC8vIG9ic2VydmVPbihhbmltYXRpb25GcmFtZVNjaGVkdWxlciksXG4gICAgICB0ZXRhWm9uZUZ1bGwodGhpcy5fem9uZSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5icnVzaFNjYWxlID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb25maWcpLFxuICAgICAgbWFwKChkYXRhOiBbSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbe3gsIHl9LCBjb25maWddID0gZGF0YTtcblxuICAgICAgICByZXR1cm4gY29uZmlnLmJydXNoPy50eXBlID09PSBCcnVzaFR5cGUueCB8fCBjb25maWc/Lnpvb20/LnR5cGUgPT09IFpvb21UeXBlLnggPyB4LmdldCgwKT8uc2NhbGUgOiB5LmdldCgwKT8uc2NhbGU7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cblxuICAgIHRoaXMudmlzaWJsZVJlY3QgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnNpemUsIHRoaXMuc2NhbGVzLCB0aGlzLmNvbmZpZ10pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChcbiAgICAgICAgICAgIGRhdGE6IFtET01SZWN0LCBJU2NhbGVzTWFwLCBJQ2hhcnRDb25maWddXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbc2l6ZSwge3gsIHl9LCBjb25maWddID0gZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHlBeGVzQXJyYXkgPSBBcnJheS5mcm9tKHkudmFsdWVzKCkpO1xuICAgICAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0geUF4ZXNBcnJheVxuICAgICAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiYgXy5vcHRpb25zLnZpc2libGUpXG4gICAgICAgICAgICAgIC5yZWR1Y2UodGhpcy5zdW1TaXplLCAwKTtcblxuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSB5QXhlc0FycmF5XG4gICAgICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSB4QXhlc0FycmF5XG4gICAgICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgICAgICBjb25zdCB0b3AgPSB4QXhlc0FycmF5XG4gICAgICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeDogbGVmdCArIGNvbmZpZy5ib3VuZHM/LmxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcCArIGNvbmZpZy5ib3VuZHM/LnRvcCxcbiAgICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAtXG4gICAgICAgICAgICAgICAgbGVmdCAtXG4gICAgICAgICAgICAgICAgcmlnaHQgLVxuICAgICAgICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmxlZnQgLVxuICAgICAgICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LnJpZ2h0LFxuICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLVxuICAgICAgICAgICAgICAgIHRvcCAtXG4gICAgICAgICAgICAgICAgYm90dG9tIC1cbiAgICAgICAgICAgICAgICBjb25maWcuYm91bmRzPy50b3AgLVxuICAgICAgICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmJvdHRvbSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICB0ZXRhWm9uZUZ1bGwodGhpcy5fem9uZSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgICBidWZmZXJTaXplOiAxLFxuICAgICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbnRyaWVzKSB8fFxuICAgICAgICAgICFlbnRyaWVzLmxlbmd0aCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3Qud2lkdGggPD0gMCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3QuaGVpZ2h0IDw9IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRTaXplKGVudHJpZXNbMF0uY29udGVudFJlY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdW1TaXplID0gKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZTtcblxuICBnZXRUcmFuc2xhdGUoYXhpcz86IEF4aXMsIHNpemU/OiBET01SZWN0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zY2FsZXMucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY29uZmlnKSxcbiAgICAgIG1hcCgoZGF0YTogW0lTY2FsZXNNYXAsIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW3t4LCB5fSwgY29uZmlnXSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IHhBeGVzQXJyYXkgPSBBcnJheS5mcm9tKHgudmFsdWVzKCkpO1xuICAgICAgICBjb25zdCB5QXhlc0FycmF5ID0gQXJyYXkuZnJvbSh5LnZhbHVlcygpKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZUZpbHRlciA9IHRoaXMuZmlsdGVyUG9zaXRpb25NYXAuZ2V0KHRydWUpO1xuICAgICAgICBjb25zdCBub25PcHBvc2l0ZUZpbHRlciA9IHRoaXMuZmlsdGVyUG9zaXRpb25NYXAuZ2V0KGZhbHNlKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZU9mZnNldFkgPSB5QXhlc0FycmF5LmZpbHRlcihvcHBvc2l0ZUZpbHRlcihheGlzKSk7XG4gICAgICAgIGNvbnN0IG5vbk9wcG9zaXRlT2Zmc2V0WSA9IHlBeGVzQXJyYXkuZmlsdGVyKG5vbk9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZU9mZnNldFggPSB4QXhlc0FycmF5LmZpbHRlcihvcHBvc2l0ZUZpbHRlcihheGlzKSk7XG4gICAgICAgIGNvbnN0IG5vbk9wcG9zaXRlT2Zmc2V0WCA9IHhBeGVzQXJyYXkuZmlsdGVyKG5vbk9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZVRyYW5zbGF0ZVkgPSBvcHBvc2l0ZU9mZnNldFkucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsXG4gICAgICAgICAgY29uZmlnLmJvdW5kcz8ucmlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9uT3BwaXN0ZVRyYW5zbGF0ZVkgPSBub25PcHBvc2l0ZU9mZnNldFkucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsXG4gICAgICAgICAgY29uZmlnLmJvdW5kcz8ubGVmdFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlVHJhbnNsYXRlWCA9IG9wcG9zaXRlT2Zmc2V0WC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSxcbiAgICAgICAgICBjb25maWcuYm91bmRzPy50b3BcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBub25PcHBpc3RlVHJhbnNsYXRlWCA9IG5vbk9wcG9zaXRlT2Zmc2V0WC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSxcbiAgICAgICAgICBjb25maWcuYm91bmRzPy5ib3R0b21cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBsZWZ0ID0geUF4ZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy52aXNpYmxlICYmIF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsIGNvbmZpZy5ib3VuZHM/LmxlZnQpO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHhBeGVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMudmlzaWJsZSAmJiBfLm9wdGlvbnMub3Bwb3NpdGUgPT09IHRydWUpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLCBjb25maWcuYm91bmRzPy50b3ApO1xuXG4gICAgICAgIGlmIChheGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCkge1xuICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7bGVmdH0sICR7XG4gICAgICAgICAgICBheGlzLm9wdGlvbnMub3Bwb3NpdGVcbiAgICAgICAgICAgICAgPyBvcHBvc2l0ZVRyYW5zbGF0ZVhcbiAgICAgICAgICAgICAgOiBzaXplLmhlaWdodCAtIG5vbk9wcGlzdGVUcmFuc2xhdGVYXG4gICAgICAgICAgfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtcbiAgICAgICAgICAgIGF4aXMub3B0aW9ucy5vcHBvc2l0ZVxuICAgICAgICAgICAgICA/IHNpemUud2lkdGggLSBvcHBvc2l0ZVRyYW5zbGF0ZVlcbiAgICAgICAgICAgICAgOiBub25PcHBpc3RlVHJhbnNsYXRlWVxuICAgICAgICAgIH0sICR7dG9wfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwgMCknO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgaWRlbnRpZnkoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS52YWx1ZS5pbmRleDtcbiAgfVxuXG4gIGNsaWNrKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHhTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+LFxuICAgIHlTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+XG4gICkge1xuICAgIGNvbnN0IHggPSB4U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgY29uc3QgeSA9IHlTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICB0aGlzLl9zdmMuZW1pdENoYXJ0Q2xpY2soe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHg6IHguaW52ZXJ0KGV2ZW50Lm9mZnNldFgpLFxuICAgICAgICB5OiB5LmludmVydChldmVudC5vZmZzZXRZKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb250ZXh0TWVudShcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICB4U2NhbGVzOiBNYXA8bnVtYmVyLCBBeGlzPixcbiAgICB5U2NhbGVzOiBNYXA8bnVtYmVyLCBBeGlzPlxuICApIHtcbiAgICBjb25zdCB4ID0geFNjYWxlcy5nZXQoMCk/LnNjYWxlO1xuICAgIGNvbnN0IHkgPSB5U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgdGhpcy5fc3ZjLmVtaXRDaGFydENvbnRleHRNZW51KHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIHRhcmdldDoge1xuICAgICAgICB4OiB4LmludmVydChldmVudC5vZmZzZXRYKSxcbiAgICAgICAgeTogeS5pbnZlcnQoZXZlbnQub2Zmc2V0WSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fc3ZjLnNldFBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIG1vdXNlTGVhdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc2V0UG9pbnRlck1vdmUoZXZlbnQpO1xuICB9XG5cbiAgdHJhY2tTZXJpZShpbmRleCwgaXRlbTogU2VyaWVzPEJhc2VQb2ludD4pIHtcbiAgICByZXR1cm4gaXRlbS5uYW1lPy5sZW5ndGggPyBpdGVtLm5hbWUgOiBpbmRleFxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwie1xuICBzaXplOiBzaXplIHwgYXN5bmMsXG4gIGNvbmZpZzogY29uZmlnIHwgYXN5bmMsXG4gIHNjYWxlczogc2NhbGVzIHwgYXN5bmMsXG4gIHZpc2libGVSZWN0OiB2aXNpYmxlUmVjdCB8IGFzeW5jXG59IGFzIGRhdGFcIiB4bWxuczpzdmc9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L2h0bWxcIj5cbiAgPHRldGEtdG9vbHRpcCAqbmdJZj1cImRhdGEuY29uZmlnPy50b29sdGlwPy5lbmFibGVcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiPjwvdGV0YS10b29sdGlwPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5zaXplPy5oZWlnaHQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS5zaXplPy53aWR0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAmJiBkYXRhLnZpc2libGVSZWN0Py5oZWlnaHQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnguc2l6ZSA9PT0gZGF0YS5jb25maWcueEF4aXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoXCI+XG4gICAgPHN2ZyBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9XCIxMDAlXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiPlxuICAgICAgPGcgY2xhc3M9XCJ5LWF4aXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YS5zY2FsZXMueSB8IGtleXZhbHVlOyB0cmFja0J5OiBpZGVudGlmeVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnZhbHVlLnNlbGZTaXplID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkYXRhLnNjYWxlcy54LnNpemUgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDBcIj5cbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEteS1heGlzXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIj48L2c+XG4gICAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgICB0ZXRhWm9vbWFibGVcbiAgICAgICAgICAgICAgZmlsbC1vcGFjaXR5PVwiMFwiXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgIFthdHRyLnhdPVwiaXRlbS52YWx1ZS5vcHRpb25zLm9wcG9zaXRlID8gMCA6IC1pdGVtLnZhbHVlLnNlbGZTaXplXCJcbiAgICAgICAgICAgICAgW2F0dHIueV09XCIwXCJcbiAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImRhdGEudmlzaWJsZVJlY3QuaGVpZ2h0XCJcbiAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwiaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJnZXRUcmFuc2xhdGUoaXRlbS52YWx1ZSwgZGF0YS5zaXplKSB8IGFzeW5jXCI+PC9yZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJ4LWF4aXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YS5zY2FsZXMueCB8IGtleXZhbHVlOyB0cmFja0J5OiBpZGVudGlmeVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZSAmJiBkYXRhLnNjYWxlcy54LnNpemUgPiAwICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDBcIj5cbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEteC1heGlzXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIj48L2c+XG4gICAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgICB0ZXRhWm9vbWFibGVcbiAgICAgICAgICAgICAgZmlsbC1vcGFjaXR5PVwiMFwiXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgIFthdHRyLnhdPVwiMFwiXG4gICAgICAgICAgICAgIFthdHRyLnldPVwiaXRlbS52YWx1ZS5vcHRpb25zLm9wcG9zaXRlID8gLWl0ZW0udmFsdWUuc2VsZlNpemUgOiAwXCJcbiAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwiZGF0YS52aXNpYmxlUmVjdC53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJpdGVtLnZhbHVlLnNlbGZTaXplXCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIj48L3JlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiZGF0YS5zaXplPy5oZWlnaHQgPiAwXG4gICAgICAgICAgJiYgZGF0YS5zaXplPy53aWR0aCA+IDBcbiAgICAgICAgICAmJiBkYXRhLnZpc2libGVSZWN0Py5oZWlnaHQgPiAwXG4gICAgICAgICAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwXG4gICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnguc2l6ZSA9PT0gZGF0YS5jb25maWcueEF4aXMubGVuZ3RoXG4gICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoXCI+XG4gICAgPHN2Z1xuICAgICAgdGV0YVpvb21hYmxlXG4gICAgICB0ZXRhQnJ1c2hhYmxlXG4gICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICBbYXhpc109XCJkYXRhLmNvbmZpZz8uem9vbT8udHlwZSA9PT0gem9vbVR5cGUueCA/IGRhdGEuc2NhbGVzLnguZ2V0KDApIDogZGF0YS5zY2FsZXMueS5nZXQoMClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiZGF0YS52aXNpYmxlUmVjdC53aWR0aFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICAgICAgW2F0dHIudmlld0JveF09XCInMCAwICcgKyBkYXRhLnZpc2libGVSZWN0LndpZHRoICsgJyAnICsgZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcrIGRhdGEudmlzaWJsZVJlY3QueCArJ3B4LCAnKyBkYXRhLnZpc2libGVSZWN0LnkgKydweCknXCJcbiAgICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgICAgIChjbGljayk9XCJjbGljaygkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICAgICAobW91c2Vtb3ZlKT1cIm1vdXNlTW92ZSgkZXZlbnQpXCI+XG5cbiAgICAgIDxnIGNsYXNzPVwiZ3JpZGxpbmVzXCJcbiAgICAgICAgIHRldGEtZ3JpZGxpbmVzXG4gICAgICAgICAqbmdJZj1cImRhdGEuY29uZmlnLmdyaWRMaW5lcz8uZW5hYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICBbc2l6ZV09XCJkYXRhLnNpemVcIj48L2c+XG5cbiAgICAgIDxnIGNsYXNzPVwieC1heGlzLXBsb3RiYW5kLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBheGlzIG9mIGRhdGEuY29uZmlnLnhBeGlzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGcgdGV0YS1wbG90LWJhbmQgKm5nRm9yPVwibGV0IHBsb3RCYW5kIG9mIGF4aXMucGxvdEJhbmRzXCJcbiAgICAgICAgICAgICBbcGxvdEJhbmRdPVwicGxvdEJhbmRcIlxuICAgICAgICAgICAgIFtzY2FsZV09XCJkYXRhLnNjYWxlcy54LmdldChpKS5zY2FsZVwiXG4gICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgW2F4aXNdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSlcIj48L2c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJ5LWF4aXMtcGxvdGJhbmQtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF4aXMgb2YgZGF0YS5jb25maWcueUF4aXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZyB0ZXRhLXBsb3QtYmFuZCAqbmdGb3I9XCJsZXQgcGxvdEJhbmQgb2YgYXhpcy5wbG90QmFuZHNcIlxuICAgICAgICAgICAgIFtwbG90QmFuZF09XCJwbG90QmFuZFwiXG4gICAgICAgICAgICAgW3NjYWxlXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpLnNjYWxlXCJcbiAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICBbYXhpc109XCJkYXRhLnNjYWxlcy55LmdldChpKVwiPjwvZz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cIngtYXhpcy1wbG90bGluZS1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXhpcyBvZiBkYXRhLmNvbmZpZy54QXhpczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxnIHRldGEtcGxvdC1saW5lICpuZ0Zvcj1cImxldCBwbG90TGluZSBvZiBheGlzLnBsb3RMaW5lc1wiXG4gICAgICAgICAgICAgW3Bsb3RMaW5lXT1cInBsb3RMaW5lXCJcbiAgICAgICAgICAgICBbc2NhbGVdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSkuc2NhbGVcIlxuICAgICAgICAgICAgIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgW2F4aXNdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSlcIj48L2c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJ5LWF4aXMtcGxvdGxpbmUtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF4aXMgb2YgZGF0YS5jb25maWcueUF4aXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZyB0ZXRhLXBsb3QtbGluZSAqbmdGb3I9XCJsZXQgcGxvdExpbmUgb2YgYXhpcy5wbG90TGluZXNcIlxuICAgICAgICAgICAgIFtwbG90TGluZV09XCJwbG90TGluZVwiXG4gICAgICAgICAgICAgW3NjYWxlXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpLnNjYWxlXCJcbiAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnNpemVcIlxuICAgICAgICAgICAgIFtheGlzXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpXCI+PC9nPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZz5cbiAgICAgIDxnIGNsYXNzPVwic2VyaWVzLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZXJpZXMgb2YgZGF0YS5jb25maWcuc2VyaWVzO1wiPlxuICAgICAgICAgIDxnIHRldGEtc2VyaWVzLWhvc3RcbiAgICAgICAgICAgICAqbmdJZj1cInNlcmllcy52aXNpYmxlXCJcbiAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgICAgICAgICBbc2VyaWVzXT1cInNlcmllc1wiPjwvZz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cImFubm90YXRpb25zXCI+XG4gICAgICAgIDxnIHRldGEtYW5ub3RhdGlvblxuICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5ub3RhdGlvbiBvZiBkYXRhLmNvbmZpZy5hbm5vdGF0aW9uc1wiXG4gICAgICAgICAgIFthbm5vdGF0aW9uXT1cImFubm90YXRpb25cIj48L2c+XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cImNyb3NzaGFpclwiICpuZ0lmPVwiZGF0YS5jb25maWcudG9vbHRpcD8uc2hvd0Nyb3NzaGFpclwiPlxuICAgICAgICA8ZyB0ZXRhLWNyb3NzaGFpciBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCI+PC9nPlxuICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuXG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxHQUtWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsYUFBYSxFQUNiLEdBQUcsRUFDUyxTQUFTLEVBQ3JCLFdBQVcsRUFDWCxjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFHL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYXBELE1BQU0sT0FBTyx1QkFBdUI7SUF3QmxDLFlBQ1UsSUFBa0IsRUFDbEIsSUFBdUIsRUFDdkIsYUFBMkIsRUFDM0IsWUFBeUIsRUFDekIsV0FBdUIsRUFDdkIsS0FBYTtRQUxiLFNBQUksR0FBSixJQUFJLENBQWM7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQXhCdkIsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUdaLHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUNNO2FBQ3RD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QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQ1QsS0FBaUIsRUFDakIsT0FBMEIsRUFDMUIsT0FBMEI7UUFFMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUM3QixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRTtnQkFDTixDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzNCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBdUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQzlDLENBQUM7O29IQXRQVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw0REN0Q3BDLDI0TUFzSkE7MkZEaEhhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SUNoYXJ0Q29uZmlnfSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLFxuICBjb21iaW5lTGF0ZXN0LFxuICBtYXAsXG4gIE9ic2VydmFibGUsIG9ic2VydmVPbixcbiAgc2hhcmVSZXBsYXksXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXhpc30gZnJvbSAnLi4vY29yZS9heGlzL2F4aXMnO1xuaW1wb3J0IHtBeGlzT3JpZW50YXRpb259IGZyb20gJy4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvbic7XG5pbXBvcnQge1NjYWxlU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7QnJ1c2hUeXBlfSBmcm9tICcuLi9tb2RlbC9lbnVtL2JydXNoLXR5cGUnO1xuaW1wb3J0IHtab29tVHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHt0ZXRhWm9uZUZ1bGx9IGZyb20gJ0B0ZXRhY29tL25nLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtJU2NhbGVzTWFwfSBmcm9tICcuLi9tb2RlbC9pLXNjYWxlcy1tYXAnO1xuaW1wb3J0IHtTZXJpZXN9IGZyb20gXCIuLi9tb2RlbC9zZXJpZXNcIjtcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tIFwiLi4vbW9kZWwvYmFzZS1wb2ludFwiO1xuXG50eXBlIE9wcG9zaXRlID0gYm9vbGVhbjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1jaGFydC1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY29uZmlnOiBPYnNlcnZhYmxlPElDaGFydENvbmZpZz47XG4gIHNjYWxlczogT2JzZXJ2YWJsZTxJU2NhbGVzTWFwPjtcbiAgc2l6ZTogT2JzZXJ2YWJsZTxET01SZWN0PjtcbiAgdmlzaWJsZVJlY3Q6IE9ic2VydmFibGU8YW55PjtcbiAgYnJ1c2hTY2FsZTogT2JzZXJ2YWJsZTxhbnk+O1xuICB6b29tVHlwZSA9IFpvb21UeXBlO1xuXG4gIHByaXZhdGUgX29ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBmaWx0ZXJQb3NpdGlvbk1hcCA9IG5ldyBNYXA8T3Bwb3NpdGUsXG4gICAgKGF4aXM6IEF4aXMpID0+IChfOiBBeGlzKSA9PiBib29sZWFuPigpXG4gICAgLnNldChcbiAgICAgIHRydWUsXG4gICAgICAoYXhpcykgPT4gKF86IEF4aXMpID0+XG4gICAgICAgIF8ub3B0aW9ucy5vcHBvc2l0ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSAmJiBheGlzLmluZGV4IDw9IF8uaW5kZXhcbiAgICApXG4gICAgLnNldChcbiAgICAgIGZhbHNlLFxuICAgICAgKGF4aXMpID0+IChfOiBBeGlzKSA9PlxuICAgICAgICBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiZcbiAgICAgICAgXy5vcHRpb25zLnZpc2libGUgJiZcbiAgICAgICAgXy5pbmRleCA8PSBheGlzLmluZGV4XG4gICAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3NjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3pvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuX3N2Yy5jb25maWc7XG4gICAgdGhpcy5zaXplID0gdGhpcy5fc3ZjLnNpemU7XG5cbiAgICB0aGlzLnNjYWxlcyA9IHRoaXMuX3NjYWxlU2VydmljZS5zY2FsZXMucGlwZShcbiAgICAgIG9ic2VydmVPbihhbmltYXRpb25GcmFtZVNjaGVkdWxlciksXG4gICAgICB0ZXRhWm9uZUZ1bGwodGhpcy5fem9uZSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5icnVzaFNjYWxlID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb25maWcpLFxuICAgICAgbWFwKChkYXRhOiBbSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbe3gsIHl9LCBjb25maWddID0gZGF0YTtcblxuICAgICAgICByZXR1cm4gY29uZmlnLmJydXNoPy50eXBlID09PSBCcnVzaFR5cGUueCB8fCBjb25maWc/Lnpvb20/LnR5cGUgPT09IFpvb21UeXBlLnggPyB4LmdldCgwKT8uc2NhbGUgOiB5LmdldCgwKT8uc2NhbGU7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cblxuICAgIHRoaXMudmlzaWJsZVJlY3QgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnNpemUsIHRoaXMuc2NhbGVzLCB0aGlzLmNvbmZpZ10pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChcbiAgICAgICAgICAgIGRhdGE6IFtET01SZWN0LCBJU2NhbGVzTWFwLCBJQ2hhcnRDb25maWddXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbc2l6ZSwge3gsIHl9LCBjb25maWddID0gZGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHlBeGVzQXJyYXkgPSBBcnJheS5mcm9tKHkudmFsdWVzKCkpO1xuICAgICAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0geUF4ZXNBcnJheVxuICAgICAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiYgXy5vcHRpb25zLnZpc2libGUpXG4gICAgICAgICAgICAgIC5yZWR1Y2UodGhpcy5zdW1TaXplLCAwKTtcblxuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSB5QXhlc0FycmF5XG4gICAgICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSB4QXhlc0FycmF5XG4gICAgICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgICAgICBjb25zdCB0b3AgPSB4QXhlc0FycmF5XG4gICAgICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeDogbGVmdCArIGNvbmZpZy5ib3VuZHM/LmxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcCArIGNvbmZpZy5ib3VuZHM/LnRvcCxcbiAgICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgICAgc2l6ZS53aWR0aCAtXG4gICAgICAgICAgICAgICAgbGVmdCAtXG4gICAgICAgICAgICAgICAgcmlnaHQgLVxuICAgICAgICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmxlZnQgLVxuICAgICAgICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LnJpZ2h0LFxuICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgc2l6ZS5oZWlnaHQgLVxuICAgICAgICAgICAgICAgIHRvcCAtXG4gICAgICAgICAgICAgICAgYm90dG9tIC1cbiAgICAgICAgICAgICAgICBjb25maWcuYm91bmRzPy50b3AgLVxuICAgICAgICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmJvdHRvbSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICB0ZXRhWm9uZUZ1bGwodGhpcy5fem9uZSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgICBidWZmZXJTaXplOiAxLFxuICAgICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbnRyaWVzKSB8fFxuICAgICAgICAgICFlbnRyaWVzLmxlbmd0aCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3Qud2lkdGggPD0gMCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3QuaGVpZ2h0IDw9IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRTaXplKGVudHJpZXNbMF0uY29udGVudFJlY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdW1TaXplID0gKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZTtcblxuICBnZXRUcmFuc2xhdGUoYXhpcz86IEF4aXMsIHNpemU/OiBET01SZWN0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zY2FsZXMucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY29uZmlnKSxcbiAgICAgIG1hcCgoZGF0YTogW0lTY2FsZXNNYXAsIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW3t4LCB5fSwgY29uZmlnXSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IHhBeGVzQXJyYXkgPSBBcnJheS5mcm9tKHgudmFsdWVzKCkpO1xuICAgICAgICBjb25zdCB5QXhlc0FycmF5ID0gQXJyYXkuZnJvbSh5LnZhbHVlcygpKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZUZpbHRlciA9IHRoaXMuZmlsdGVyUG9zaXRpb25NYXAuZ2V0KHRydWUpO1xuICAgICAgICBjb25zdCBub25PcHBvc2l0ZUZpbHRlciA9IHRoaXMuZmlsdGVyUG9zaXRpb25NYXAuZ2V0KGZhbHNlKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZU9mZnNldFkgPSB5QXhlc0FycmF5LmZpbHRlcihvcHBvc2l0ZUZpbHRlcihheGlzKSk7XG4gICAgICAgIGNvbnN0IG5vbk9wcG9zaXRlT2Zmc2V0WSA9IHlBeGVzQXJyYXkuZmlsdGVyKG5vbk9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZU9mZnNldFggPSB4QXhlc0FycmF5LmZpbHRlcihvcHBvc2l0ZUZpbHRlcihheGlzKSk7XG4gICAgICAgIGNvbnN0IG5vbk9wcG9zaXRlT2Zmc2V0WCA9IHhBeGVzQXJyYXkuZmlsdGVyKG5vbk9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZVRyYW5zbGF0ZVkgPSBvcHBvc2l0ZU9mZnNldFkucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsXG4gICAgICAgICAgY29uZmlnLmJvdW5kcz8ucmlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9uT3BwaXN0ZVRyYW5zbGF0ZVkgPSBub25PcHBvc2l0ZU9mZnNldFkucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsXG4gICAgICAgICAgY29uZmlnLmJvdW5kcz8ubGVmdFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlVHJhbnNsYXRlWCA9IG9wcG9zaXRlT2Zmc2V0WC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSxcbiAgICAgICAgICBjb25maWcuYm91bmRzPy50b3BcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBub25PcHBpc3RlVHJhbnNsYXRlWCA9IG5vbk9wcG9zaXRlT2Zmc2V0WC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSxcbiAgICAgICAgICBjb25maWcuYm91bmRzPy5ib3R0b21cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBsZWZ0ID0geUF4ZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy52aXNpYmxlICYmIF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsIGNvbmZpZy5ib3VuZHM/LmxlZnQpO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHhBeGVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMudmlzaWJsZSAmJiBfLm9wdGlvbnMub3Bwb3NpdGUgPT09IHRydWUpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLCBjb25maWcuYm91bmRzPy50b3ApO1xuXG4gICAgICAgIGlmIChheGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCkge1xuICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7bGVmdH0sICR7XG4gICAgICAgICAgICBheGlzLm9wdGlvbnMub3Bwb3NpdGVcbiAgICAgICAgICAgICAgPyBvcHBvc2l0ZVRyYW5zbGF0ZVhcbiAgICAgICAgICAgICAgOiBzaXplLmhlaWdodCAtIG5vbk9wcGlzdGVUcmFuc2xhdGVYXG4gICAgICAgICAgfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtcbiAgICAgICAgICAgIGF4aXMub3B0aW9ucy5vcHBvc2l0ZVxuICAgICAgICAgICAgICA/IHNpemUud2lkdGggLSBvcHBvc2l0ZVRyYW5zbGF0ZVlcbiAgICAgICAgICAgICAgOiBub25PcHBpc3RlVHJhbnNsYXRlWVxuICAgICAgICAgIH0sICR7dG9wfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwgMCknO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgaWRlbnRpZnkoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS52YWx1ZS5pbmRleDtcbiAgfVxuXG4gIGNsaWNrKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHhTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+LFxuICAgIHlTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+XG4gICkge1xuICAgIGNvbnN0IHggPSB4U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgY29uc3QgeSA9IHlTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICB0aGlzLl9zdmMuZW1pdENoYXJ0Q2xpY2soe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHg6IHguaW52ZXJ0KGV2ZW50Lm9mZnNldFgpLFxuICAgICAgICB5OiB5LmludmVydChldmVudC5vZmZzZXRZKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb250ZXh0TWVudShcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICB4U2NhbGVzOiBNYXA8bnVtYmVyLCBBeGlzPixcbiAgICB5U2NhbGVzOiBNYXA8bnVtYmVyLCBBeGlzPlxuICApIHtcbiAgICBjb25zdCB4ID0geFNjYWxlcy5nZXQoMCk/LnNjYWxlO1xuICAgIGNvbnN0IHkgPSB5U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgdGhpcy5fc3ZjLmVtaXRDaGFydENvbnRleHRNZW51KHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIHRhcmdldDoge1xuICAgICAgICB4OiB4LmludmVydChldmVudC5vZmZzZXRYKSxcbiAgICAgICAgeTogeS5pbnZlcnQoZXZlbnQub2Zmc2V0WSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbW91c2VNb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fc3ZjLnNldFBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIG1vdXNlTGVhdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc2V0UG9pbnRlck1vdmUoZXZlbnQpO1xuICB9XG5cbiAgdHJhY2tTZXJpZShpbmRleCwgaXRlbTogU2VyaWVzPEJhc2VQb2ludD4pIHtcbiAgICByZXR1cm4gaXRlbS5uYW1lPy5sZW5ndGggPyBpdGVtLm5hbWUgOiBpbmRleFxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwie1xuICBzaXplOiBzaXplIHwgYXN5bmMsXG4gIGNvbmZpZzogY29uZmlnIHwgYXN5bmMsXG4gIHNjYWxlczogc2NhbGVzIHwgYXN5bmMsXG4gIHZpc2libGVSZWN0OiB2aXNpYmxlUmVjdCB8IGFzeW5jXG59IGFzIGRhdGFcIiB4bWxuczpzdmc9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L2h0bWxcIj5cbiAgPHRldGEtdG9vbHRpcCAqbmdJZj1cImRhdGEuY29uZmlnPy50b29sdGlwPy5lbmFibGVcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiPjwvdGV0YS10b29sdGlwPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5zaXplPy5oZWlnaHQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS5zaXplPy53aWR0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAmJiBkYXRhLnZpc2libGVSZWN0Py5oZWlnaHQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnguc2l6ZSA9PT0gZGF0YS5jb25maWcueEF4aXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoXCI+XG4gICAgPHN2ZyBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9XCIxMDAlXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiPlxuICAgICAgPGcgY2xhc3M9XCJ5LWF4aXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YS5zY2FsZXMueSB8IGtleXZhbHVlOyB0cmFja0J5OiBpZGVudGlmeVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnZhbHVlLnNlbGZTaXplID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkYXRhLnNjYWxlcy54LnNpemUgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDBcIj5cbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEteS1heGlzXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIj48L2c+XG4gICAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgICB0ZXRhWm9vbWFibGVcbiAgICAgICAgICAgICAgZmlsbC1vcGFjaXR5PVwiMFwiXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgIFthdHRyLnhdPVwiaXRlbS52YWx1ZS5vcHRpb25zLm9wcG9zaXRlID8gMCA6IC1pdGVtLnZhbHVlLnNlbGZTaXplXCJcbiAgICAgICAgICAgICAgW2F0dHIueV09XCIwXCJcbiAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImRhdGEudmlzaWJsZVJlY3QuaGVpZ2h0XCJcbiAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwiaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJnZXRUcmFuc2xhdGUoaXRlbS52YWx1ZSwgZGF0YS5zaXplKSB8IGFzeW5jXCI+PC9yZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJ4LWF4aXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YS5zY2FsZXMueCB8IGtleXZhbHVlOyB0cmFja0J5OiBpZGVudGlmeVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZSAmJiBkYXRhLnNjYWxlcy54LnNpemUgPiAwICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDBcIj5cbiAgICAgICAgICAgIDxnXG4gICAgICAgICAgICAgIHRldGEteC1heGlzXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIj48L2c+XG4gICAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgICB0ZXRhWm9vbWFibGVcbiAgICAgICAgICAgICAgZmlsbC1vcGFjaXR5PVwiMFwiXG4gICAgICAgICAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgIFthdHRyLnhdPVwiMFwiXG4gICAgICAgICAgICAgIFthdHRyLnldPVwiaXRlbS52YWx1ZS5vcHRpb25zLm9wcG9zaXRlID8gLWl0ZW0udmFsdWUuc2VsZlNpemUgOiAwXCJcbiAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwiZGF0YS52aXNpYmxlUmVjdC53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJpdGVtLnZhbHVlLnNlbGZTaXplXCJcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIj48L3JlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiZGF0YS5zaXplPy5oZWlnaHQgPiAwXG4gICAgICAgICAgJiYgZGF0YS5zaXplPy53aWR0aCA+IDBcbiAgICAgICAgICAmJiBkYXRhLnZpc2libGVSZWN0Py5oZWlnaHQgPiAwXG4gICAgICAgICAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwXG4gICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnguc2l6ZSA9PT0gZGF0YS5jb25maWcueEF4aXMubGVuZ3RoXG4gICAgICAgICAgJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoXCI+XG4gICAgPHN2Z1xuICAgICAgdGV0YVpvb21hYmxlXG4gICAgICB0ZXRhQnJ1c2hhYmxlXG4gICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICBbYXhpc109XCJkYXRhLmNvbmZpZz8uem9vbT8udHlwZSA9PT0gem9vbVR5cGUueCA/IGRhdGEuc2NhbGVzLnguZ2V0KDApIDogZGF0YS5zY2FsZXMueS5nZXQoMClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiZGF0YS52aXNpYmxlUmVjdC53aWR0aFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICAgICAgW2F0dHIudmlld0JveF09XCInMCAwICcgKyBkYXRhLnZpc2libGVSZWN0LndpZHRoICsgJyAnICsgZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcrIGRhdGEudmlzaWJsZVJlY3QueCArJ3B4LCAnKyBkYXRhLnZpc2libGVSZWN0LnkgKydweCknXCJcbiAgICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgICAgIChjbGljayk9XCJjbGljaygkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICAgICAobW91c2Vtb3ZlKT1cIm1vdXNlTW92ZSgkZXZlbnQpXCI+XG5cbiAgICAgIDxnIGNsYXNzPVwiZ3JpZGxpbmVzXCJcbiAgICAgICAgIHRldGEtZ3JpZGxpbmVzXG4gICAgICAgICAqbmdJZj1cImRhdGEuY29uZmlnLmdyaWRMaW5lcz8uZW5hYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICBbc2l6ZV09XCJkYXRhLnNpemVcIj48L2c+XG5cbiAgICAgIDxnIGNsYXNzPVwieC1heGlzLXBsb3RiYW5kLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBheGlzIG9mIGRhdGEuY29uZmlnLnhBeGlzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGcgdGV0YS1wbG90LWJhbmQgKm5nRm9yPVwibGV0IHBsb3RCYW5kIG9mIGF4aXMucGxvdEJhbmRzXCJcbiAgICAgICAgICAgICBbcGxvdEJhbmRdPVwicGxvdEJhbmRcIlxuICAgICAgICAgICAgIFtzY2FsZV09XCJkYXRhLnNjYWxlcy54LmdldChpKS5zY2FsZVwiXG4gICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgW2F4aXNdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSlcIj48L2c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJ5LWF4aXMtcGxvdGJhbmQtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF4aXMgb2YgZGF0YS5jb25maWcueUF4aXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZyB0ZXRhLXBsb3QtYmFuZCAqbmdGb3I9XCJsZXQgcGxvdEJhbmQgb2YgYXhpcy5wbG90QmFuZHNcIlxuICAgICAgICAgICAgIFtwbG90QmFuZF09XCJwbG90QmFuZFwiXG4gICAgICAgICAgICAgW3NjYWxlXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpLnNjYWxlXCJcbiAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICBbYXhpc109XCJkYXRhLnNjYWxlcy55LmdldChpKVwiPjwvZz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cIngtYXhpcy1wbG90bGluZS1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXhpcyBvZiBkYXRhLmNvbmZpZy54QXhpczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxnIHRldGEtcGxvdC1saW5lICpuZ0Zvcj1cImxldCBwbG90TGluZSBvZiBheGlzLnBsb3RMaW5lc1wiXG4gICAgICAgICAgICAgW3Bsb3RMaW5lXT1cInBsb3RMaW5lXCJcbiAgICAgICAgICAgICBbc2NhbGVdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSkuc2NhbGVcIlxuICAgICAgICAgICAgIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgW2F4aXNdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSlcIj48L2c+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJ5LWF4aXMtcGxvdGxpbmUtY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF4aXMgb2YgZGF0YS5jb25maWcueUF4aXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZyB0ZXRhLXBsb3QtbGluZSAqbmdGb3I9XCJsZXQgcGxvdExpbmUgb2YgYXhpcy5wbG90TGluZXNcIlxuICAgICAgICAgICAgIFtwbG90TGluZV09XCJwbG90TGluZVwiXG4gICAgICAgICAgICAgW3NjYWxlXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpLnNjYWxlXCJcbiAgICAgICAgICAgICBbc2l6ZV09XCJkYXRhLnNpemVcIlxuICAgICAgICAgICAgIFtheGlzXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpXCI+PC9nPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZz5cbiAgICAgIDxnIGNsYXNzPVwic2VyaWVzLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZXJpZXMgb2YgZGF0YS5jb25maWcuc2VyaWVzO1wiPlxuICAgICAgICAgIDxnIHRldGEtc2VyaWVzLWhvc3RcbiAgICAgICAgICAgICAqbmdJZj1cInNlcmllcy52aXNpYmxlXCJcbiAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgICAgICAgICBbc2VyaWVzXT1cInNlcmllc1wiPjwvZz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cImFubm90YXRpb25zXCI+XG4gICAgICAgIDxnIHRldGEtYW5ub3RhdGlvblxuICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5ub3RhdGlvbiBvZiBkYXRhLmNvbmZpZy5hbm5vdGF0aW9uc1wiXG4gICAgICAgICAgIFthbm5vdGF0aW9uXT1cImFubm90YXRpb25cIj48L2c+XG4gICAgICA8L2c+XG4gICAgICA8ZyBjbGFzcz1cImNyb3NzaGFpclwiICpuZ0lmPVwiZGF0YS5jb25maWcudG9vbHRpcD8uc2hvd0Nyb3NzaGFpclwiPlxuICAgICAgICA8ZyB0ZXRhLWNyb3NzaGFpciBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCI+PC9nPlxuICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuXG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Directive, HostBinding, Input, } from '@angular/core';
1
+ import { Directive, HostBinding, HostListener, Input, } from '@angular/core';
2
2
  import * as d3 from 'd3';
3
3
  import { zoomIdentity } from 'd3';
4
4
  import { ZoomType } from '../model/enum/zoom-type';
@@ -21,7 +21,7 @@ export class ZoomableDirective {
21
21
  this.alive = true;
22
22
  this.currentTransform = zoomIdentity;
23
23
  this.zoomed = (event) => {
24
- if (event.sourceEvent) {
24
+ if (event.sourceEvent && (this.elementRef.nativeElement === event.sourceEvent.target || this.elementRef.nativeElement.contains(event.sourceEvent.target))) {
25
25
  if (Object.keys(event.sourceEvent).length !== 0) {
26
26
  const origin = this.axis.scale.copy().domain(this.axis.originDomain);
27
27
  if (this.axis.options.scaleType.type === ScaleType.band) {
@@ -52,6 +52,18 @@ export class ZoomableDirective {
52
52
  }
53
53
  };
54
54
  }
55
+ mouseenter() {
56
+ this.zoom?.on('start zoom end', this.zoomed);
57
+ this._element?.call(this.zoom).on('dblclick.zoom', null);
58
+ // Run wheel event listener
59
+ if (this.config?.zoom?.zoomBehavior === ZoomBehaviorType.wheel) {
60
+ this.runWheelTranslate();
61
+ }
62
+ }
63
+ mouseleave() {
64
+ this.zoom?.on('start zoom end', null);
65
+ this._element?.on('wheel', null);
66
+ }
55
67
  ngOnInit() {
56
68
  if (this.axis?.options?.zoom || this.config?.zoom?.enable) {
57
69
  this.zoomable = this.config?.zoom?.zoomBehavior === ZoomBehaviorType.move && !this.config?.tooltip?.showCrosshair;
@@ -63,7 +75,7 @@ export class ZoomableDirective {
63
75
  this.initZoomSync();
64
76
  }
65
77
  ngOnDestroy() {
66
- this.zoom?.on('zoom end', null);
78
+ this.zoom?.on('start zoom end', null);
67
79
  this._element?.on('wheel', null);
68
80
  this.alive = false;
69
81
  }
@@ -135,8 +147,8 @@ export class ZoomableDirective {
135
147
  : Infinity;
136
148
  this.zoom.scaleExtent([maxZoom, minZoom]);
137
149
  }
138
- this.zoom.on('start zoom end', this.zoomed);
139
- this._element.call(this.zoom).on('dblclick.zoom', null);
150
+ // this.zoom.on('start zoom end', this.zoomed);
151
+ // this._element.call(this.zoom).on('dblclick.zoom', null);
140
152
  if (this.config?.zoom?.zoomBehavior === ZoomBehaviorType.wheel) {
141
153
  this.runWheelTranslate();
142
154
  }
@@ -213,7 +225,7 @@ export class ZoomableDirective {
213
225
  }
214
226
  }
215
227
  ZoomableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ZoomableDirective, deps: [{ token: i0.ElementRef }, { token: i1.ZoomService }, { token: i2.ChartService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
216
- ZoomableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: { config: "config", axis: "axis", size: "size" }, host: { properties: { "class.zoomable": "this.zoomable", "class.crosshair": "this.crosshair" } }, ngImport: i0 });
228
+ ZoomableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: { config: "config", axis: "axis", size: "size" }, host: { listeners: { "mouseenter": "mouseenter()", "mouseleave": "mouseleave()" }, properties: { "class.zoomable": "this.zoomable", "class.crosshair": "this.crosshair" } }, ngImport: i0 });
217
229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ZoomableDirective, decorators: [{
218
230
  type: Directive,
219
231
  args: [{
@@ -231,5 +243,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
231
243
  }], crosshair: [{
232
244
  type: HostBinding,
233
245
  args: ['class.crosshair']
246
+ }], mouseenter: [{
247
+ type: HostListener,
248
+ args: ['mouseenter']
249
+ }], mouseleave: [{
250
+ type: HostListener,
251
+ args: ['mouseleave']
234
252
  }] } });
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbWFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2RpcmVjdGl2ZXMvem9vbWFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFjLFdBQVcsRUFBRSxLQUFLLEdBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSTNHLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBNEIsWUFBWSxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQzNELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFDLFdBQVcsR0FBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBS25ELE1BQU0sT0FBTyxpQkFBaUI7SUFjNUIsWUFDVSxVQUFzQixFQUN0QixXQUF3QixFQUN4QixZQUEwQixFQUMxQixJQUFZO1FBSFosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBYmlCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDaEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUlsRCxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWIscUJBQWdCLEdBQUcsWUFBWSxDQUFDO1FBb0h4QyxXQUFNLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7WUFDeEMsSUFBSSxLQUFLLENBQUMsV0FB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QUFLLENBQUMsQ0FBQztvQkFDbkIsSUFBSSxHQUFHLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzhHQWhRVSxpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUg3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCOzJLQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVpQyxRQUFRO3NCQUE5QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDVyxTQUFTO3NCQUFoRCxXQUFXO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1pvb21TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3pvb20uc2VydmljZSc7XG5pbXBvcnQge0lDaGFydENvbmZpZ30gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9jb3JlL2F4aXMvYXhpcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge0QzWm9vbUV2ZW50LCBab29tQmVoYXZpb3IsIHpvb21JZGVudGl0eX0gZnJvbSAnZDMnO1xuaW1wb3J0IHtab29tVHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHtBeGlzT3JpZW50YXRpb259IGZyb20gJy4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvbic7XG5pbXBvcnQge1pvb21NZXNzYWdlLH0gZnJvbSAnLi4vbW9kZWwvaS1icm9hZGNhc3QtbWVzc2FnZSc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7Wm9vbUJlaGF2aW9yVHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLWJlaGF2aW9yLXR5cGUnO1xuaW1wb3J0IHtTY2FsZVR5cGV9IGZyb20gXCIuLi9tb2RlbC9lbnVtL3NjYWxlLXR5cGVcIjtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RldGFab29tYWJsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBab29tYWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogSUNoYXJ0Q29uZmlnO1xuICBASW5wdXQoKSBheGlzOiBBeGlzO1xuICBASW5wdXQoKSBzaXplOiBET01SZWN0O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muem9vbWFibGUnKSBwcml2YXRlIHpvb21hYmxlID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuY3Jvc3NoYWlyJykgcHJpdmF0ZSBjcm9zc2hhaXIgPSBmYWxzZTtcblxuICBwcml2YXRlIF9lbGVtZW50OiBkMy5TZWxlY3Rpb248U1ZHRWxlbWVudCwgYW55LCBhbnksIGFueT47XG4gIHByaXZhdGUgem9vbTogWm9vbUJlaGF2aW9yPGFueSwgYW55PjtcbiAgcHJpdmF0ZSBhbGl2ZSA9IHRydWU7XG5cbiAgcHJpdmF0ZSBjdXJyZW50VHJhbnNmb3JtID0gem9vbUlkZW50aXR5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYXhpcz8ub3B0aW9ucz8uem9vbSB8fCB0aGlzLmNvbmZpZz8uem9vbT8uZW5hYmxlKSB7XG4gICAgICB0aGlzLnpvb21hYmxlID0gdGhpcy5jb25maWc/Lnpvb20/Lnpvb21CZWhhdmlvciA9PT0gWm9vbUJlaGF2aW9yVHlwZS5tb3ZlICYmICF0aGlzLmNvbmZpZz8udG9vbHRpcD8uc2hvd0Nyb3NzaGFpcjtcbiAgICAgIHRoaXMuY3Jvc3NoYWlyID0gdGhpcy5jb25maWc/LnRvb2x0aXA/LnNob3dDcm9zc2hhaXI7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdFpvb21MaXN0ZW5lcnMoKTtcbiAgICB0aGlzLmluaXRab29tU3luYygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy56b29tPy5vbignem9vbSBlbmQnLCBudWxsKTtcbiAgICB0aGlzLl9lbGVtZW50Py5vbignd2hlZWwnLCBudWxsKTtcbiAgICB0aGlzLmFsaXZlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRab29tU3luYygpIHtcbiAgICB0aGlzLnpvb21TZXJ2aWNlLnpvb21lZC5waXBlKFxuICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpXG4gICAgKS5zdWJzY3JpYmUoKHpvb21lZDogWm9vbU1lc3NhZ2UpID0+IHtcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuZWxlbWVudFJlZiAhPT0gem9vbWVkPy5lbGVtZW50XG4gICAgICAgICYmIHpvb21lZD8uYXhpcz8uaW5kZXggPT09IHRoaXMuYXhpcy5pbmRleFxuICAgICAgICAmJiB6b29tZWQ/LmF4aXM/Lm9yaWVudGF0aW9uID09PSB0aGlzLmF4aXMub3JpZW50YXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLmF4aXMuc2NhbGUuY29weSgpLmRvbWFpbih0aGlzLmF4aXMub3JpZ2luRG9tYWluKTtcbiAgICAgICAgbGV0IHRyYW5zZm9ybTtcbiAgICAgICAgaWYgKHpvb21lZC5kb21haW4gPT09IG51bGwpIHtcbiAgICAgICAgICB0cmFuc2Zvcm0gPSB6b29tSWRlbnRpdHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNmb3JtID1cbiAgICAgICAgICAgIHRoaXMuem9vbVNlcnZpY2UuZ2V0RDNUcmFuc2Zvcm0oem9vbWVkLmRvbWFpbiwgdGhpcy5heGlzLm9yaWdpbkRvbWFpbiwgc2NhbGUsIHRoaXMuYXhpcy5vcmllbnRhdGlvbiwgdGhpcy5heGlzLm9wdGlvbnMuaW52ZXJ0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuY2FsbCh0aGlzLnpvb20udHJhbnNmb3JtLCB0cmFuc2Zvcm0pO1xuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRab29tTGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IGVuYWJsZSA9XG4gICAgICAodGhpcy5heGlzPy5vcHRpb25zPy56b29tICYmIHRoaXMuYXhpcz8ub3B0aW9ucy52aXNpYmxlICE9PSBmYWxzZSkgfHxcbiAgICAgIHRoaXMuY29uZmlnPy56b29tPy5lbmFibGU7XG4gICAgaWYgKCFlbmFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudCA9IGQzLnNlbGVjdCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy56b29tID0gZDMuem9vbSgpLmV4dGVudChbXG4gICAgICBbMCwgMF0sXG4gICAgICBbdGhpcy5zaXplLndpZHRoLCB0aGlzLnNpemUuaGVpZ2h0XSxcbiAgICBdKTtcblxuICAgIGNvbnN0IG1pbiA9IHRoaXMuY29uZmlnPy56b29tPy5taW5UcmFuc2xhdGUgIT0gbnVsbFxuICAgICAgPyB0aGlzLmF4aXMuc2NhbGUodGhpcy5jb25maWc/Lnpvb20/Lm1pblRyYW5zbGF0ZSlcbiAgICAgIDogLUluZmluaXR5O1xuICAgIGNvbnN0IG1heCA9ICh0aGlzLmNvbmZpZz8uem9vbT8ubWF4VHJhbnNsYXRlICE9IG51bGxcbiAgICAgID8gdGhpcy5heGlzLnNjYWxlKHRoaXMuY29uZmlnPy56b29tPy5tYXhUcmFuc2xhdGUpXG4gICAgICA6IEluZmluaXR5KTtcbiAgICBpZiAodGhpcy5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCAmJiB0aGlzLmNvbmZpZy56b29tLnR5cGUgPT09IFpvb21UeXBlLngpIHtcbiAgICAgIHRoaXMuem9vbS50cmFuc2xhdGVFeHRlbnQoW1xuICAgICAgICBbTWF0aC5taW4obWluLCBtYXgpLCAtSW5maW5pdHldLFxuICAgICAgICBbTWF0aC5tYXgobWluLCBtYXgpLCBJbmZpbml0eV0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueSAmJiB0aGlzLmNvbmZpZy56b29tLnR5cGUgPT09IFpvb21UeXBlLnkpIHtcbiAgICAgIHRoaXMuem9vbS50cmFuc2xhdGVFeHRlbnQoW1xuICAgICAgICBbLUluZmluaXR5LCBNYXRoLm1pbihtaW4sIG1heCldLFxuICAgICAgICBbSW5maW5pdHksIE1hdGgubWF4KG1pbiwgbWF4KV0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuem9vbT8ud2hlZWxEZWx0YSkge1xuICAgICAgdGhpcy56b29tLndoZWVsRGVsdGEodGhpcy5jb25maWcuem9vbT8ud2hlZWxEZWx0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy56b29tPy53aGVlbEZpbHRlcikge1xuICAgICAgdGhpcy56b29tLmZpbHRlcih0aGlzLmNvbmZpZz8uem9vbT8ud2hlZWxGaWx0ZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlICE9PSBTY2FsZVR5cGUuYmFuZCkge1xuICAgICAgY29uc3QgZXh0cmVtZXMgPSB0aGlzLmF4aXMuZXh0cmVtZXMgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBtYXhab29tID0gdGhpcy5jb25maWcuem9vbT8ubWF4XG4gICAgICAgID8gKGV4dHJlbWVzWzFdIC0gZXh0cmVtZXNbMF0pIC9cbiAgICAgICAgdGhpcy5jb25maWcuem9vbT8ubWF4XG4gICAgICAgIDogdGhpcy5jb25maWcuem9vbT8ubGltaXRab29tQnlEYXRhXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwO1xuXG4gICAgICBjb25zdCBtaW5ab29tID0gdGhpcy5jb25maWcuem9vbT8ubWluXG4gICAgICAgID8gKGV4dHJlbWVzWzFdIC0gZXh0cmVtZXNbMF0pIC9cbiAgICAgICAgdGhpcy5jb25maWcuem9vbT8ubWluXG4gICAgICAgIDogSW5maW5pdHk7XG5cbiAgICAgIHRoaXMuem9vbS5zY2FsZUV4dGVudChbbWF4Wm9vbSwgbWluWm9vbV0pO1xuICAgIH1cblxuXG4gICAgdGhpcy56b29tLm9uKCdzdGFydCB6b29tIGVuZCcsIHRoaXMuem9vbWVkKTtcbiAgICB0aGlzLl9lbGVtZW50LmNhbGwodGhpcy56b29tKS5vbignZGJsY2xpY2suem9vbScsIG51bGwpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnPy56b29tPy56b29tQmVoYXZpb3IgPT09IFpvb21CZWhhdmlvclR5cGUud2hlZWwpIHtcbiAgICAgIHRoaXMucnVuV2hlZWxUcmFuc2xhdGUoKTtcbiAgICB9XG4gIH1cblxuICB6b29tZWQgPSAoZXZlbnQ6IEQzWm9vbUV2ZW50PGFueSwgYW55PikgPT4ge1xuICAgIGlmIChldmVudC5zb3VyY2VFdmVudCkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGV2ZW50LnNvdXJjZUV2ZW50KS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5heGlzLnNjYWxlLmNvcHkoKS5kb21haW4odGhpcy5heGlzLm9yaWdpbkRvbWFpbik7XG4gICAgICAgIGlmICh0aGlzLmF4aXMub3B0aW9ucy5zY2FsZVR5cGUudHlwZSA9PT0gU2NhbGVUeXBlLmJhbmQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvbWFpbiA9XG4gICAgICAgICAgdGhpcy5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueVxuICAgICAgICAgICAgPyBldmVudC50cmFuc2Zvcm0ucmVzY2FsZVkob3JpZ2luKS5kb21haW4oKVxuICAgICAgICAgICAgOiBldmVudC50cmFuc2Zvcm0ucmVzY2FsZVgob3JpZ2luKS5kb21haW4oKTtcbiAgICAgICAgaWYgKGRvbWFpblswXSA9PT0gbnVsbCB8fCBkb21haW5bMF0gPT09IHVuZGVmaW5lZFxuICAgICAgICAgIHx8IGRvbWFpblsxXSA9PT0gbnVsbCB8fCBkb21haW5bMV0gPT09IHVuZGVmaW5lZFxuICAgICAgICAgIHx8IE1hdGguYWJzKGRvbWFpblswXSAtIGRvbWFpblsxXSkgPCAwLjAwMDAwMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IFpvb21NZXNzYWdlKHtcbiAgICAgICAgICBldmVudFR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgYXhpczoge1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuYXhpcy5pbmRleCxcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLmF4aXMub3JpZW50YXRpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgZG9tYWluLFxuICAgICAgICAgIGNoYXJ0SWQ6IHRoaXMuY29uZmlnLmlkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnpvb21TZXJ2aWNlLmZpcmVab29tKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnpvb21TZXJ2aWNlLmJyb2FkY2FzdFpvb20obWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0gPSBldmVudC50cmFuc2Zvcm07XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcnVuV2hlZWxUcmFuc2xhdGUoKSB7XG4gICAgbGV0IHR5cGU6ICdzdGFydCcgfCAnem9vbScgfCAnZW5kJyA9ICdzdGFydCc7XG4gICAgbGV0IHdoZWVsaW5nO1xuXG4gICAgdGhpcy56b29tXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQudHlwZSA9PT0gJ3doZWVsJykgfHxcbiAgICAgICAgICAgIEJvb2xlYW4od2luZG93LlRvdWNoRXZlbnQgJiYgZXZlbnQudHlwZSAhPT0gJ3doZWVsJyk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC53aGVlbERlbHRhKChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkZWx0YSA9XG4gICAgICAgICAgdGhpcy5jb25maWc/Lnpvb20udHlwZSA9PT0gWm9vbVR5cGUueFxuICAgICAgICAgICAgPyAtZXZlbnQuZGVsdGFYXG4gICAgICAgICAgICA6IC1ldmVudC5kZWx0YVk7XG4gICAgICAgIHJldHVybiBkZWx0YSAqIDAuMDAyO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBlbWl0ID0gKHR5cGU6IHN0cmluZywgZXZlbnQ6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuYXhpcy5zY2FsZS5jb3B5KCkuZG9tYWluKHRoaXMuYXhpcy5vcmlnaW5Eb21haW4pO1xuICAgICAgbGV0IHRyYW5zZm9ybSA9IHpvb21JZGVudGl0eTtcbiAgICAgIGNvbnN0IGRlbHRhID1cbiAgICAgICAgdHlwZSA9PT0gJ2VuZCdcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IHRoaXMuYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnlcbiAgICAgICAgICAgID8gZXZlbnQuZGVsdGFZXG4gICAgICAgICAgICA6IGV2ZW50LmRlbHRhWDtcblxuICAgICAgaWYgKHRoaXMuYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcbiAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZShcbiAgICAgICAgICAwLFxuICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zZm9ybS55IC0gZGVsdGEgLyAyXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54KSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoXG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtLnggLSBkZWx0YSAvIDIsXG4gICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0uc2NhbGUodGhpcy5jdXJyZW50VHJhbnNmb3JtLmspO1xuXG4gICAgICBsZXQgZG9tYWluID1cbiAgICAgICAgdGhpcy5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueVxuICAgICAgICAgID8gdHJhbnNmb3JtLnJlc2NhbGVZKG9yaWdpbikuZG9tYWluKClcbiAgICAgICAgICA6IHRyYW5zZm9ybS5yZXNjYWxlWChvcmlnaW4pLmRvbWFpbigpO1xuXG4gICAgICBjb25zdCBleHRlbnQgPSB0aGlzLmF4aXMub3B0aW9ucz8uaW52ZXJ0ZWQgPyBkb21haW4gOiBbLi4uZG9tYWluXS5yZXZlcnNlKCk7XG5cbiAgICAgIGlmIChleHRlbnRbMF0gPD0gdGhpcy5jb25maWcuem9vbT8ubWluVHJhbnNsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVudFsxXSA+PSB0aGlzLmNvbmZpZy56b29tPy5tYXhUcmFuc2xhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlID0gbmV3IFpvb21NZXNzYWdlKHtcbiAgICAgICAgZXZlbnRUeXBlOiB0eXBlLFxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgIGF4aXM6IHtcbiAgICAgICAgICBpbmRleDogdGhpcy5heGlzLmluZGV4LFxuICAgICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLmF4aXMub3JpZW50YXRpb25cbiAgICAgICAgfSxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBjaGFydElkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9lbGVtZW50Py5jYWxsKHRoaXMuem9vbS50cmFuc2Zvcm0sIHRyYW5zZm9ybSk7XG4gICAgICB0aGlzLnpvb21TZXJ2aWNlLmZpcmVab29tKG1lc3NhZ2UpO1xuICAgICAgdGhpcy56b29tU2VydmljZS5icm9hZGNhc3Rab29tKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH07XG5cbiAgICB0aGlzLl9lbGVtZW50Lm9uKCd3aGVlbCcsIChldmVudDogV2hlZWxFdmVudCkgPT4ge1xuXG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQod2hlZWxpbmcpO1xuICAgICAgICBlbWl0KHR5cGUsIGV2ZW50KTtcbiAgICAgICAgdHlwZSA9ICd6b29tJztcbiAgICAgICAgd2hlZWxpbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBlbWl0KCdlbmQnLCBldmVudCk7XG4gICAgICAgICAgdHlwZSA9ICdzdGFydCc7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbWFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2RpcmVjdGl2ZXMvem9vbWFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUE0QixZQUFZLEVBQUMsTUFBTSxJQUFJLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxHQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFLbkQsTUFBTSxPQUFPLGlCQUFpQjtJQThCNUIsWUFDVSxVQUFzQixFQUN0QixXQUF3QixFQUN4QixZQUEwQixFQUMxQixJQUFZO1FBSFosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBN0JpQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFJbEQsVUFBSyxHQUFHLElBQUksQ0FBQztRQWtCYixxQkFBZ0IsR0FBRyxZQUFZLENBQUM7UUFvSHhDLFdBQU0sR0FBRyxDQUFDLEtBQTRCLEVBQUUsRUFBRTtZQUN4QyxJQUFJLEtB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtab29tU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtY29uZmlnJztcbmltcG9ydCB7QXhpc30gZnJvbSAnLi4vY29yZS9heGlzL2F4aXMnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHtEM1pvb21FdmVudCwgWm9vbUJlaGF2aW9yLCB6b29tSWRlbnRpdHl9IGZyb20gJ2QzJztcbmltcG9ydCB7Wm9vbVR5cGV9IGZyb20gJy4uL21vZGVsL2VudW0vem9vbS10eXBlJztcbmltcG9ydCB7QXhpc09yaWVudGF0aW9ufSBmcm9tICcuLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHtab29tTWVzc2FnZSx9IGZyb20gJy4uL21vZGVsL2ktYnJvYWRjYXN0LW1lc3NhZ2UnO1xuaW1wb3J0IHt0YWtlV2hpbGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge1pvb21CZWhhdmlvclR5cGV9IGZyb20gJy4uL21vZGVsL2VudW0vem9vbS1iZWhhdmlvci10eXBlJztcbmltcG9ydCB7U2NhbGVUeXBlfSBmcm9tIFwiLi4vbW9kZWwvZW51bS9zY2FsZS10eXBlXCI7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZXRhWm9vbWFibGVdJyxcbn0pXG5leHBvcnQgY2xhc3MgWm9vbWFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjb25maWc6IElDaGFydENvbmZpZztcbiAgQElucHV0KCkgYXhpczogQXhpcztcbiAgQElucHV0KCkgc2l6ZTogRE9NUmVjdDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnpvb21hYmxlJykgcHJpdmF0ZSB6b29tYWJsZSA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNyb3NzaGFpcicpIHByaXZhdGUgY3Jvc3NoYWlyID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfZWxlbWVudDogZDMuU2VsZWN0aW9uPFNWR0VsZW1lbnQsIGFueSwgYW55LCBhbnk+O1xuICBwcml2YXRlIHpvb206IFpvb21CZWhhdmlvcjxhbnksIGFueT47XG4gIHByaXZhdGUgYWxpdmUgPSB0cnVlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKSBtb3VzZWVudGVyKCkge1xuXG5cbiAgICB0aGlzLnpvb20/Lm9uKCdzdGFydCB6b29tIGVuZCcsIHRoaXMuem9vbWVkKTtcbiAgICB0aGlzLl9lbGVtZW50Py5jYWxsKHRoaXMuem9vbSkub24oJ2RibGNsaWNrLnpvb20nLCBudWxsKTtcbiAgICAvLyBSdW4gd2hlZWwgZXZlbnQgbGlzdGVuZXJcbiAgICBpZiAodGhpcy5jb25maWc/Lnpvb20/Lnpvb21CZWhhdmlvciA9PT0gWm9vbUJlaGF2aW9yVHlwZS53aGVlbCkge1xuICAgICAgdGhpcy5ydW5XaGVlbFRyYW5zbGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKSBtb3VzZWxlYXZlKCkge1xuICAgIHRoaXMuem9vbT8ub24oJ3N0YXJ0IHpvb20gZW5kJywgbnVsbCk7XG4gICAgdGhpcy5fZWxlbWVudD8ub24oJ3doZWVsJywgbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnRUcmFuc2Zvcm0gPSB6b29tSWRlbnRpdHk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5heGlzPy5vcHRpb25zPy56b29tIHx8IHRoaXMuY29uZmlnPy56b29tPy5lbmFibGUpIHtcbiAgICAgIHRoaXMuem9vbWFibGUgPSB0aGlzLmNvbmZpZz8uem9vbT8uem9vbUJlaGF2aW9yID09PSBab29tQmVoYXZpb3JUeXBlLm1vdmUgJiYgIXRoaXMuY29uZmlnPy50b29sdGlwPy5zaG93Q3Jvc3NoYWlyO1xuICAgICAgdGhpcy5jcm9zc2hhaXIgPSB0aGlzLmNvbmZpZz8udG9vbHRpcD8uc2hvd0Nyb3NzaGFpcjtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0Wm9vbUxpc3RlbmVycygpO1xuICAgIHRoaXMuaW5pdFpvb21TeW5jKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnpvb20/Lm9uKCdzdGFydCB6b29tIGVuZCcsIG51bGwpO1xuICAgIHRoaXMuX2VsZW1lbnQ/Lm9uKCd3aGVlbCcsIG51bGwpO1xuICAgIHRoaXMuYWxpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFpvb21TeW5jKCkge1xuICAgIHRoaXMuem9vbVNlcnZpY2Uuem9vbWVkLnBpcGUoXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSlcbiAgICApLnN1YnNjcmliZSgoem9vbWVkOiBab29tTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5lbGVtZW50UmVmICE9PSB6b29tZWQ/LmVsZW1lbnRcbiAgICAgICAgJiYgem9vbWVkPy5heGlzPy5pbmRleCA9PT0gdGhpcy5heGlzLmluZGV4XG4gICAgICAgICYmIHpvb21lZD8uYXhpcz8ub3JpZW50YXRpb24gPT09IHRoaXMuYXhpcy5vcmllbnRhdGlvbikge1xuICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMuYXhpcy5zY2FsZS5jb3B5KCkuZG9tYWluKHRoaXMuYXhpcy5vcmlnaW5Eb21haW4pO1xuICAgICAgICBsZXQgdHJhbnNmb3JtO1xuICAgICAgICBpZiAoem9vbWVkLmRvbWFpbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHRyYW5zZm9ybSA9IHpvb21JZGVudGl0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmFuc2Zvcm0gPVxuICAgICAgICAgICAgdGhpcy56b29tU2VydmljZS5nZXREM1RyYW5zZm9ybSh6b29tZWQuZG9tYWluLCB0aGlzLmF4aXMub3JpZ2luRG9tYWluLCBzY2FsZSwgdGhpcy5heGlzLm9yaWVudGF0aW9uLCB0aGlzLmF4aXMub3B0aW9ucy5pbnZlcnRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWxlbWVudC5jYWxsKHRoaXMuem9vbS50cmFuc2Zvcm0sIHRyYW5zZm9ybSk7XG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFpvb21MaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgZW5hYmxlID1cbiAgICAgICh0aGlzLmF4aXM/Lm9wdGlvbnM/Lnpvb20gJiYgdGhpcy5heGlzPy5vcHRpb25zLnZpc2libGUgIT09IGZhbHNlKSB8fFxuICAgICAgdGhpcy5jb25maWc/Lnpvb20/LmVuYWJsZTtcbiAgICBpZiAoIWVuYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnpvb20gPSBkMy56b29tKCkuZXh0ZW50KFtcbiAgICAgIFswLCAwXSxcbiAgICAgIFt0aGlzLnNpemUud2lkdGgsIHRoaXMuc2l6ZS5oZWlnaHRdLFxuICAgIF0pO1xuXG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWc/Lnpvb20/Lm1pblRyYW5zbGF0ZSAhPSBudWxsXG4gICAgICA/IHRoaXMuYXhpcy5zY2FsZSh0aGlzLmNvbmZpZz8uem9vbT8ubWluVHJhbnNsYXRlKVxuICAgICAgOiAtSW5maW5pdHk7XG4gICAgY29uc3QgbWF4ID0gKHRoaXMuY29uZmlnPy56b29tPy5tYXhUcmFuc2xhdGUgIT0gbnVsbFxuICAgICAgPyB0aGlzLmF4aXMuc2NhbGUodGhpcy5jb25maWc/Lnpvb20/Lm1heFRyYW5zbGF0ZSlcbiAgICAgIDogSW5maW5pdHkpO1xuICAgIGlmICh0aGlzLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54ICYmIHRoaXMuY29uZmlnLnpvb20udHlwZSA9PT0gWm9vbVR5cGUueCkge1xuICAgICAgdGhpcy56b29tLnRyYW5zbGF0ZUV4dGVudChbXG4gICAgICAgIFtNYXRoLm1pbihtaW4sIG1heCksIC1JbmZpbml0eV0sXG4gICAgICAgIFtNYXRoLm1heChtaW4sIG1heCksIEluZmluaXR5XSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55ICYmIHRoaXMuY29uZmlnLnpvb20udHlwZSA9PT0gWm9vbVR5cGUueSkge1xuICAgICAgdGhpcy56b29tLnRyYW5zbGF0ZUV4dGVudChbXG4gICAgICAgIFstSW5maW5pdHksIE1hdGgubWluKG1pbiwgbWF4KV0sXG4gICAgICAgIFtJbmZpbml0eSwgTWF0aC5tYXgobWluLCBtYXgpXSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy56b29tPy53aGVlbERlbHRhKSB7XG4gICAgICB0aGlzLnpvb20ud2hlZWxEZWx0YSh0aGlzLmNvbmZpZy56b29tPy53aGVlbERlbHRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWc/Lnpvb20/LndoZWVsRmlsdGVyKSB7XG4gICAgICB0aGlzLnpvb20uZmlsdGVyKHRoaXMuY29uZmlnPy56b29tPy53aGVlbEZpbHRlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5heGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgIT09IFNjYWxlVHlwZS5iYW5kKSB7XG4gICAgICBjb25zdCBleHRyZW1lcyA9IHRoaXMuYXhpcy5leHRyZW1lcyBhcyBudW1iZXJbXTtcbiAgICAgIGNvbnN0IG1heFpvb20gPSB0aGlzLmNvbmZpZy56b29tPy5tYXhcbiAgICAgICAgPyAoZXh0cmVtZXNbMV0gLSBleHRyZW1lc1swXSkgL1xuICAgICAgICB0aGlzLmNvbmZpZy56b29tPy5tYXhcbiAgICAgICAgOiB0aGlzLmNvbmZpZy56b29tPy5saW1pdFpvb21CeURhdGFcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDA7XG5cbiAgICAgIGNvbnN0IG1pblpvb20gPSB0aGlzLmNvbmZpZy56b29tPy5taW5cbiAgICAgICAgPyAoZXh0cmVtZXNbMV0gLSBleHRyZW1lc1swXSkgL1xuICAgICAgICB0aGlzLmNvbmZpZy56b29tPy5taW5cbiAgICAgICAgOiBJbmZpbml0eTtcblxuICAgICAgdGhpcy56b29tLnNjYWxlRXh0ZW50KFttYXhab29tLCBtaW5ab29tXSk7XG4gICAgfVxuXG5cbiAgICAvLyB0aGlzLnpvb20ub24oJ3N0YXJ0IHpvb20gZW5kJywgdGhpcy56b29tZWQpO1xuICAgIC8vIHRoaXMuX2VsZW1lbnQuY2FsbCh0aGlzLnpvb20pLm9uKCdkYmxjbGljay56b29tJywgbnVsbCk7XG5cbiAgICBpZiAodGhpcy5jb25maWc/Lnpvb20/Lnpvb21CZWhhdmlvciA9PT0gWm9vbUJlaGF2aW9yVHlwZS53aGVlbCkge1xuICAgICAgdGhpcy5ydW5XaGVlbFRyYW5zbGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHpvb21lZCA9IChldmVudDogRDNab29tRXZlbnQ8YW55LCBhbnk+KSA9PiB7XG4gICAgaWYgKGV2ZW50LnNvdXJjZUV2ZW50ICYmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCA9PT0gZXZlbnQuc291cmNlRXZlbnQudGFyZ2V0IHx8IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnNvdXJjZUV2ZW50LnRhcmdldCkpKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZXZlbnQuc291cmNlRXZlbnQpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmF4aXMuc2NhbGUuY29weSgpLmRvbWFpbih0aGlzLmF4aXMub3JpZ2luRG9tYWluKTtcbiAgICAgICAgaWYgKHRoaXMuYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUuYmFuZCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9tYWluID1cbiAgICAgICAgICB0aGlzLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55XG4gICAgICAgICAgICA/IGV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWShvcmlnaW4pLmRvbWFpbigpXG4gICAgICAgICAgICA6IGV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWChvcmlnaW4pLmRvbWFpbigpO1xuICAgICAgICBpZiAoZG9tYWluWzBdID09PSBudWxsIHx8IGRvbWFpblswXSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgfHwgZG9tYWluWzFdID09PSBudWxsIHx8IGRvbWFpblsxXSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgfHwgTWF0aC5hYnMoZG9tYWluWzBdIC0gZG9tYWluWzFdKSA8IDAuMDAwMDAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgWm9vbU1lc3NhZ2Uoe1xuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICBpbmRleDogdGhpcy5heGlzLmluZGV4LFxuICAgICAgICAgICAgb3JpZW50YXRpb246IHRoaXMuYXhpcy5vcmllbnRhdGlvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudFJlZixcbiAgICAgICAgICBkb21haW4sXG4gICAgICAgICAgY2hhcnRJZDogdGhpcy5jb25maWcuaWRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuem9vbVNlcnZpY2UuZmlyZVpvb20obWVzc2FnZSk7XG4gICAgICAgIHRoaXMuem9vbVNlcnZpY2UuYnJvYWRjYXN0Wm9vbShtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudFRyYW5zZm9ybSA9IGV2ZW50LnRyYW5zZm9ybTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBydW5XaGVlbFRyYW5zbGF0ZSgpIHtcbiAgICBsZXQgdHlwZTogJ3N0YXJ0JyB8ICd6b29tJyB8ICdlbmQnID0gJ3N0YXJ0JztcbiAgICBsZXQgd2hlZWxpbmc7XG5cbiAgICB0aGlzLnpvb21cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiAoZXZlbnQuY3RybEtleSAmJiBldmVudC50eXBlID09PSAnd2hlZWwnKSB8fFxuICAgICAgICAgICAgQm9vbGVhbih3aW5kb3cuVG91Y2hFdmVudCAmJiBldmVudC50eXBlICE9PSAnd2hlZWwnKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLndoZWVsRGVsdGEoKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbHRhID1cbiAgICAgICAgICB0aGlzLmNvbmZpZz8uem9vbS50eXBlID09PSBab29tVHlwZS54XG4gICAgICAgICAgICA/IC1ldmVudC5kZWx0YVhcbiAgICAgICAgICAgIDogLWV2ZW50LmRlbHRhWTtcbiAgICAgICAgcmV0dXJuIGRlbHRhICogMC4wMDI7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGVtaXQgPSAodHlwZTogc3RyaW5nLCBldmVudDogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5heGlzLnNjYWxlLmNvcHkoKS5kb21haW4odGhpcy5heGlzLm9yaWdpbkRvbWFpbik7XG4gICAgICBsZXQgdHJhbnNmb3JtID0gem9vbUlkZW50aXR5O1xuICAgICAgY29uc3QgZGVsdGEgPVxuICAgICAgICB0eXBlID09PSAnZW5kJ1xuICAgICAgICAgID8gMFxuICAgICAgICAgIDogdGhpcy5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueVxuICAgICAgICAgICAgPyBldmVudC5kZWx0YVlcbiAgICAgICAgICAgIDogZXZlbnQuZGVsdGFYO1xuXG4gICAgICBpZiAodGhpcy5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueSkge1xuICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtLnkgLSBkZWx0YSAvIDJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHtcbiAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZShcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0ueCAtIGRlbHRhIC8gMixcbiAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5zY2FsZSh0aGlzLmN1cnJlbnRUcmFuc2Zvcm0uayk7XG5cbiAgICAgIGxldCBkb21haW4gPVxuICAgICAgICB0aGlzLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55XG4gICAgICAgICAgPyB0cmFuc2Zvcm0ucmVzY2FsZVkob3JpZ2luKS5kb21haW4oKVxuICAgICAgICAgIDogdHJhbnNmb3JtLnJlc2NhbGVYKG9yaWdpbikuZG9tYWluKCk7XG5cbiAgICAgIGNvbnN0IGV4dGVudCA9IHRoaXMuYXhpcy5vcHRpb25zPy5pbnZlcnRlZCA/IGRvbWFpbiA6IFsuLi5kb21haW5dLnJldmVyc2UoKTtcblxuICAgICAgaWYgKGV4dGVudFswXSA8PSB0aGlzLmNvbmZpZy56b29tPy5taW5UcmFuc2xhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXh0ZW50WzFdID49IHRoaXMuY29uZmlnLnpvb20/Lm1heFRyYW5zbGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cblxuXG4gICAgICBjb25zdCBtZXNzYWdlID0gbmV3IFpvb21NZXNzYWdlKHtcbiAgICAgICAgZXZlbnRUeXBlOiB0eXBlLFxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgIGF4aXM6IHtcbiAgICAgICAgICBpbmRleDogdGhpcy5heGlzLmluZGV4LFxuICAgICAgICAgIG9yaWVudGF0aW9uOiB0aGlzLmF4aXMub3JpZW50YXRpb25cbiAgICAgICAgfSxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBjaGFydElkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9lbGVtZW50Py5jYWxsKHRoaXMuem9vbS50cmFuc2Zvcm0sIHRyYW5zZm9ybSk7XG4gICAgICB0aGlzLnpvb21TZXJ2aWNlLmZpcmVab29tKG1lc3NhZ2UpO1xuICAgICAgdGhpcy56b29tU2VydmljZS5icm9hZGNhc3Rab29tKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH07XG5cbiAgICB0aGlzLl9lbGVtZW50Lm9uKCd3aGVlbCcsIChldmVudDogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHdoZWVsaW5nKTtcbiAgICAgICAgZW1pdCh0eXBlLCBldmVudCk7XG4gICAgICAgIHR5cGUgPSAnem9vbSc7XG4gICAgICAgIHdoZWVsaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZW1pdCgnZW5kJywgZXZlbnQpO1xuICAgICAgICAgIHR5cGUgPSAnc3RhcnQnO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { BehaviorSubject, combineLatest, filter, shareReplay, } from 'rxjs';
1
+ import { BehaviorSubject, combineLatest, filter, shareReplay } from 'rxjs';
2
2
  import { AxisOrientation } from '../model/enum/axis-orientation';
3
3
  import { Injectable } from '@angular/core';
4
4
  import { zoomIdentity } from 'd3';
@@ -77,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
77
77
  providedIn: 'root',
78
78
  }]
79
79
  }], ctorParameters: function () { return [{ type: i1.BroadcastService }, { type: i2.ChartService }]; } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L3NlcnZpY2Uvem9vbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxXQUFXLEdBQXNCLE1BQU0sTUFBTSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxJQUFJLENBQUM7QUFJaEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxXQUFXO0lBT3RCLFlBQW9CLFVBQTRCLEVBQzVCLE1BQW9CO1FBRHBCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFMaEMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxDQUFDO1FBTXZELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3pELFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBaUI7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFpQjtRQUM3QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUU7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7Z0JBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dC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QyxDQUFDLENBQUMsQ0FBQzthQUN2RTtpQkFBTTtnQkFDTCxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RTtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7O3dHQTdFVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YnNjcmlwdGlvbiwgdGFrZSx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBeGlzT3JpZW50YXRpb259IGZyb20gJy4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvbic7XG5pbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0lCcm9hZGNhc3RNZXNzYWdlLCBab29tTWVzc2FnZX0gZnJvbSAnLi4vbW9kZWwvaS1icm9hZGNhc3QtbWVzc2FnZSc7XG5pbXBvcnQge3pvb21JZGVudGl0eX0gZnJvbSAnZDMnO1xuaW1wb3J0IHtCcm9hZGNhc3RTZXJ2aWNlfSBmcm9tICcuL2Jyb2FkY2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhcnRTZXJ2aWNlfSBmcm9tICcuL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gXCIuLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZ1wiO1xuaW1wb3J0IHtab29tVHlwZX0gZnJvbSBcIi4uL21vZGVsL2VudW0vem9vbS10eXBlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBab29tU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHpvb21lZDogT2JzZXJ2YWJsZTxab29tTWVzc2FnZT47XG5cbiAgcHJpdmF0ZSB6b29tZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxab29tTWVzc2FnZT4obnVsbCk7XG4gIHByaXZhdGUgYnJvYWRjYXN0Q2hhbm5lbDogc3RyaW5nO1xuICBwcml2YXRlIGJyb2FkY2FzdFN1YjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Jyb2FkY2FzdDogQnJvYWRjYXN0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY2hhcnQ6IENoYXJ0U2VydmljZSkge1xuICAgIHRoaXMuem9vbWVkID0gdGhpcy56b29tZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoe1xuICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgIHJlZkNvdW50OiB0cnVlXG4gICAgfSkpO1xuICB9XG5cbiAgZmlyZVpvb20oem9vbTogWm9vbU1lc3NhZ2UpIHtcbiAgICB0aGlzLnpvb21lZCQubmV4dCh6b29tKTtcbiAgfVxuXG4gIGJyb2FkY2FzdFpvb20oem9vbTogWm9vbU1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5icm9hZGNhc3RDaGFubmVsPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2Jyb2FkY2FzdC5icm9hZGNhc3Rab29tKHtcbiAgICAgICAgY2hhbm5lbDogdGhpcy5icm9hZGNhc3RDaGFubmVsLFxuICAgICAgICBtZXNzYWdlOiB6b29tXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWw6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmJyb2FkY2FzdFN1Yikge1xuICAgICAgdGhpcy5icm9hZGNhc3RTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IGNoYW5uZWw7XG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0Q2hhbm5lbD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmJyb2FkY2FzdFN1YiA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICAgIFt0aGlzLl9icm9hZGNhc3Quc3Vic2NyaWJlVG9ab29tKHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCksIHRoaXMuX2NoYXJ0LmNvbmZpZ11cbiAgICAgIClcbiAgICAgICAgLnBpcGUoZmlsdGVyKChbem9vbSwgY29uZmlnXTogW0lCcm9hZGNhc3RNZXNzYWdlPFpvb21NZXNzYWdlPiwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICAgIHJldHVybiB6b29tLm1lc3NhZ2U/LmNoYXJ0SWQgIT09IGNvbmZpZy5pZCAmJiAoXG4gICAgICAgICAgICBjb25maWcuem9vbS5zeW5jVHlwZSA9PT0gWm9vbVR5cGUueHkgfHxcbiAgICAgICAgICAgICh6b29tLm1lc3NhZ2UuYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkgJiYgY29uZmlnLnpvb20uc3luY1R5cGUgPT09IFpvb21UeXBlLnkpIHx8XG4gICAgICAgICAgICAoem9vbS5tZXNzYWdlLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54ICYmIGNvbmZpZy56b29tLnN5bmNUeXBlID09PSBab29tVHlwZS54KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKVxuICAgICAgICAuc3Vic2NyaWJlKChbem9vbSwgY29uZmlnXSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmlyZVpvb20oem9vbS5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RDNUcmFuc2Zvcm0odGFyZ2V0RG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICBvcmlnaW5hbERvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uOiBBeGlzT3JpZW50YXRpb24sXG4gICAgICAgICAgICAgICAgIGludmVydGVkOiBib29sZWFuKSB7XG4gICAgY29uc3Qgem9vbVNjYWxlID0gTWF0aC5hYnMoc2NhbGUob3JpZ2luYWxEb21haW5bMV0pIC0gc2NhbGUob3JpZ2luYWxEb21haW5bMF0pKSAvIE1hdGguYWJzKHNjYWxlKHRhcmdldERvbWFpblsxXSkgLSBzY2FsZSh0YXJnZXREb21haW5bMF0pKTtcbiAgICBsZXQgdHJhbnNmb3JtID0gem9vbUlkZW50aXR5LnNjYWxlKHpvb21TY2FsZSk7XG4gICAgaWYgKG9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCkge1xuICAgICAgaWYgKCEhaW52ZXJ0ZWQpIHtcbiAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgtc2NhbGUoTWF0aC5tYXgoLi4udGFyZ2V0RG9tYWluKSksIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgtc2NhbGUoTWF0aC5taW4oLi4udGFyZ2V0RG9tYWluKSksIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcbiAgICAgIGlmICghIWludmVydGVkKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLXNjYWxlKE1hdGgubWluKC4uLnRhcmdldERvbWFpbikpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLXNjYWxlKE1hdGgubWF4KC4uLnRhcmdldERvbWFpbikpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zZm9ybTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYnJvYWRjYXN0U3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L3NlcnZpY2Uvem9vbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxXQUFXLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDbkcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLElBQUksQ0FBQztBQUloQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFLakQsTUFBTSxPQUFPLFdBQVc7SUFPdEIsWUFBb0IsVUFBNEIsRUFDNUIsTUFBb0I7UUFEcEIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUxoQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFNdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDekQsVUFBVSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFpQjtRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWlCO1FBQzdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQzlCLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBZTtRQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUMvQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQzdFO2lCQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQWlELEVBQUUsRUFBRTtnQkFDOUUsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxFQUFFO29CQUNwQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQzVGLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLGVBQWUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUM3RixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7aUJBQ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsWUFBOEIsRUFDOUIsY0FBZ0MsRUFDaEMsS0FBSyxFQUNMLFdBQTRCLEVBQzVCLFFBQWlCO1FBQzlCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVJLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxXQUFXLEtBQUssZUFBZSxDQUFDLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2QsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkU7aUJBQU07Z0JBQ0wsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkU7U0FDRjtRQUVELElBQUksV0FBVyxLQUFLLGVBQWUsQ0FBQyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNkLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNO2dCQUNMLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7d0dBN0VVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXhpc09yaWVudGF0aW9ufSBmcm9tICcuLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJQnJvYWRjYXN0TWVzc2FnZSwgWm9vbU1lc3NhZ2V9IGZyb20gJy4uL21vZGVsL2ktYnJvYWRjYXN0LW1lc3NhZ2UnO1xuaW1wb3J0IHt6b29tSWRlbnRpdHl9IGZyb20gJ2QzJztcbmltcG9ydCB7QnJvYWRjYXN0U2VydmljZX0gZnJvbSAnLi9icm9hZGNhc3Quc2VydmljZSc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7SUNoYXJ0Q29uZmlnfSBmcm9tIFwiLi4vbW9kZWwvaS1jaGFydC1jb25maWdcIjtcbmltcG9ydCB7Wm9vbVR5cGV9IGZyb20gXCIuLi9tb2RlbC9lbnVtL3pvb20tdHlwZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgWm9vbVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICB6b29tZWQ6IE9ic2VydmFibGU8Wm9vbU1lc3NhZ2U+O1xuXG4gIHByaXZhdGUgem9vbWVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Wm9vbU1lc3NhZ2U+KG51bGwpO1xuICBwcml2YXRlIGJyb2FkY2FzdENoYW5uZWw6IHN0cmluZztcbiAgcHJpdmF0ZSBicm9hZGNhc3RTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9icm9hZGNhc3Q6IEJyb2FkY2FzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYXJ0OiBDaGFydFNlcnZpY2UpIHtcbiAgICB0aGlzLnpvb21lZCA9IHRoaXMuem9vbWVkJC5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KHtcbiAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICByZWZDb3VudDogdHJ1ZVxuICAgIH0pKTtcbiAgfVxuXG4gIGZpcmVab29tKHpvb206IFpvb21NZXNzYWdlKSB7XG4gICAgdGhpcy56b29tZWQkLm5leHQoem9vbSk7XG4gIH1cblxuICBicm9hZGNhc3Rab29tKHpvb206IFpvb21NZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0Q2hhbm5lbD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9icm9hZGNhc3QuYnJvYWRjYXN0Wm9vbSh7XG4gICAgICAgIGNoYW5uZWw6IHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCxcbiAgICAgICAgbWVzc2FnZTogem9vbVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5icm9hZGNhc3RTdWIpIHtcbiAgICAgIHRoaXMuYnJvYWRjYXN0U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBjaGFubmVsO1xuICAgIGlmICh0aGlzLmJyb2FkY2FzdENoYW5uZWw/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5icm9hZGNhc3RTdWIgPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgICBbdGhpcy5fYnJvYWRjYXN0LnN1YnNjcmliZVRvWm9vbSh0aGlzLmJyb2FkY2FzdENoYW5uZWwpLCB0aGlzLl9jaGFydC5jb25maWddXG4gICAgICApXG4gICAgICAgIC5waXBlKGZpbHRlcigoW3pvb20sIGNvbmZpZ106IFtJQnJvYWRjYXN0TWVzc2FnZTxab29tTWVzc2FnZT4sIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgICByZXR1cm4gem9vbS5tZXNzYWdlPy5jaGFydElkICE9PSBjb25maWcuaWQgJiYgKFxuICAgICAgICAgICAgY29uZmlnLnpvb20uc3luY1R5cGUgPT09IFpvb21UeXBlLnh5IHx8XG4gICAgICAgICAgICAoem9vbS5tZXNzYWdlLmF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55ICYmIGNvbmZpZy56b29tLnN5bmNUeXBlID09PSBab29tVHlwZS55KSB8fFxuICAgICAgICAgICAgKHpvb20ubWVzc2FnZS5heGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCAmJiBjb25maWcuem9vbS5zeW5jVHlwZSA9PT0gWm9vbVR5cGUueClcbiAgICAgICAgICApO1xuICAgICAgICB9KSlcbiAgICAgICAgLnN1YnNjcmliZSgoW3pvb20sIGNvbmZpZ10pID0+IHtcbiAgICAgICAgICB0aGlzLmZpcmVab29tKHpvb20ubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEQzVHJhbnNmb3JtKHRhcmdldERvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgb3JpZ2luYWxEb21haW46IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbjogQXhpc09yaWVudGF0aW9uLFxuICAgICAgICAgICAgICAgICBpbnZlcnRlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IHpvb21TY2FsZSA9IE1hdGguYWJzKHNjYWxlKG9yaWdpbmFsRG9tYWluWzFdKSAtIHNjYWxlKG9yaWdpbmFsRG9tYWluWzBdKSkgLyBNYXRoLmFicyhzY2FsZSh0YXJnZXREb21haW5bMV0pIC0gc2NhbGUodGFyZ2V0RG9tYWluWzBdKSk7XG4gICAgbGV0IHRyYW5zZm9ybSA9IHpvb21JZGVudGl0eS5zY2FsZSh6b29tU2NhbGUpO1xuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHtcbiAgICAgIGlmICghIWludmVydGVkKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjYWxlKE1hdGgubWF4KC4uLnRhcmdldERvbWFpbikpLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjYWxlKE1hdGgubWluKC4uLnRhcmdldERvbWFpbikpLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICBpZiAoISFpbnZlcnRlZCkge1xuICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKDAsIC1zY2FsZShNYXRoLm1pbiguLi50YXJnZXREb21haW4pKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKDAsIC1zY2FsZShNYXRoLm1heCguLi50YXJnZXREb21haW4pKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2Zvcm07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJyb2FkY2FzdFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
@@ -3,7 +3,7 @@ import { Injectable, Component, Input, EventEmitter, Directive, Output, HostList
3
3
  import * as i4 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { __awaiter } from 'tslib';
6
- import { BehaviorSubject, Subject, of, withLatestFrom, map, shareReplay, filter, lastValueFrom, take, ReplaySubject, combineLatest, tap, takeWhile } from 'rxjs';
6
+ import { BehaviorSubject, Subject, of, withLatestFrom, map, shareReplay, filter, lastValueFrom, take, ReplaySubject, combineLatest, tap, takeWhile, observeOn, animationFrameScheduler } from 'rxjs';
7
7
  import * as d3 from 'd3';
8
8
  import { zoomIdentity } from 'd3';
9
9
  import { maxIndex } from 'd3-array';
@@ -2087,7 +2087,7 @@ class ZoomableDirective {
2087
2087
  this.alive = true;
2088
2088
  this.currentTransform = zoomIdentity;
2089
2089
  this.zoomed = (event) => {
2090
- if (event.sourceEvent) {
2090
+ if (event.sourceEvent && (this.elementRef.nativeElement === event.sourceEvent.target || this.elementRef.nativeElement.contains(event.sourceEvent.target))) {
2091
2091
  if (Object.keys(event.sourceEvent).length !== 0) {
2092
2092
  const origin = this.axis.scale.copy().domain(this.axis.originDomain);
2093
2093
  if (this.axis.options.scaleType.type === ScaleType.band) {
@@ -2118,6 +2118,20 @@ class ZoomableDirective {
2118
2118
  }
2119
2119
  };
2120
2120
  }
2121
+ mouseenter() {
2122
+ var _a, _b, _c, _d;
2123
+ (_a = this.zoom) === null || _a === void 0 ? void 0 : _a.on('start zoom end', this.zoomed);
2124
+ (_b = this._element) === null || _b === void 0 ? void 0 : _b.call(this.zoom).on('dblclick.zoom', null);
2125
+ // Run wheel event listener
2126
+ if (((_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.zoom) === null || _d === void 0 ? void 0 : _d.zoomBehavior) === ZoomBehaviorType.wheel) {
2127
+ this.runWheelTranslate();
2128
+ }
2129
+ }
2130
+ mouseleave() {
2131
+ var _a, _b;
2132
+ (_a = this.zoom) === null || _a === void 0 ? void 0 : _a.on('start zoom end', null);
2133
+ (_b = this._element) === null || _b === void 0 ? void 0 : _b.on('wheel', null);
2134
+ }
2121
2135
  ngOnInit() {
2122
2136
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2123
2137
  if (((_b = (_a = this.axis) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.zoom) || ((_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.zoom) === null || _d === void 0 ? void 0 : _d.enable)) {
@@ -2131,7 +2145,7 @@ class ZoomableDirective {
2131
2145
  }
2132
2146
  ngOnDestroy() {
2133
2147
  var _a, _b;
2134
- (_a = this.zoom) === null || _a === void 0 ? void 0 : _a.on('zoom end', null);
2148
+ (_a = this.zoom) === null || _a === void 0 ? void 0 : _a.on('start zoom end', null);
2135
2149
  (_b = this._element) === null || _b === void 0 ? void 0 : _b.on('wheel', null);
2136
2150
  this.alive = false;
2137
2151
  }
@@ -2205,8 +2219,8 @@ class ZoomableDirective {
2205
2219
  : Infinity;
2206
2220
  this.zoom.scaleExtent([maxZoom, minZoom]);
2207
2221
  }
2208
- this.zoom.on('start zoom end', this.zoomed);
2209
- this._element.call(this.zoom).on('dblclick.zoom', null);
2222
+ // this.zoom.on('start zoom end', this.zoomed);
2223
+ // this._element.call(this.zoom).on('dblclick.zoom', null);
2210
2224
  if (((_1 = (_0 = this.config) === null || _0 === void 0 ? void 0 : _0.zoom) === null || _1 === void 0 ? void 0 : _1.zoomBehavior) === ZoomBehaviorType.wheel) {
2211
2225
  this.runWheelTranslate();
2212
2226
  }
@@ -2285,7 +2299,7 @@ class ZoomableDirective {
2285
2299
  }
2286
2300
  }
2287
2301
  ZoomableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ZoomableDirective, deps: [{ token: i0.ElementRef }, { token: ZoomService }, { token: ChartService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
2288
- ZoomableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: { config: "config", axis: "axis", size: "size" }, host: { properties: { "class.zoomable": "this.zoomable", "class.crosshair": "this.crosshair" } }, ngImport: i0 });
2302
+ ZoomableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: { config: "config", axis: "axis", size: "size" }, host: { listeners: { "mouseenter": "mouseenter()", "mouseleave": "mouseleave()" }, properties: { "class.zoomable": "this.zoomable", "class.crosshair": "this.crosshair" } }, ngImport: i0 });
2289
2303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ZoomableDirective, decorators: [{
2290
2304
  type: Directive,
2291
2305
  args: [{
@@ -2303,6 +2317,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
2303
2317
  }], crosshair: [{
2304
2318
  type: HostBinding,
2305
2319
  args: ['class.crosshair']
2320
+ }], mouseenter: [{
2321
+ type: HostListener,
2322
+ args: ['mouseenter']
2323
+ }], mouseleave: [{
2324
+ type: HostListener,
2325
+ args: ['mouseleave']
2306
2326
  }] } });
2307
2327
 
2308
2328
  class BrushableDirective {
@@ -2571,9 +2591,7 @@ class ChartContainerComponent {
2571
2591
  this.sumSize = (acc, curr) => acc + curr.selfSize;
2572
2592
  this.config = this._svc.config;
2573
2593
  this.size = this._svc.size;
2574
- this.scales = this._scaleService.scales.pipe(
2575
- // observeOn(animationFrameScheduler),
2576
- tetaZoneFull(this._zone), shareReplay({
2594
+ this.scales = this._scaleService.scales.pipe(observeOn(animationFrameScheduler), tetaZoneFull(this._zone), shareReplay({
2577
2595
  bufferSize: 1,
2578
2596
  refCount: true,
2579
2597
  }));