@tetacom/svg-charts 1.1.10 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chart/base/series-base.component.d.ts +4 -6
- package/chart/chart/chart.component.d.ts +10 -3
- package/chart/chart-container/annotation/annotation.component.d.ts +22 -13
- package/chart/chart-container/chart-container.component.d.ts +3 -3
- package/chart/chart-container/gridlines/gridlines.component.d.ts +3 -1
- package/chart/chart-container/plotband/plot-band.component.d.ts +5 -2
- package/chart/chart-container/plotline/plotline.component.d.ts +4 -2
- package/chart/chart-container/series/area-series/area-series.component.d.ts +6 -14
- package/chart/chart-container/series/line/line-series.component.d.ts +3 -14
- package/chart/chart-container/series/linear-series-base.d.ts +30 -0
- package/chart/chart-container/series-host/series-host.component.d.ts +4 -8
- package/chart/chart-container/tooltip/tooltip.component.d.ts +1 -1
- package/chart/chart.module.d.ts +18 -17
- package/chart/directives/zoomable.directive.d.ts +9 -4
- package/chart/model/annotation.d.ts +8 -18
- package/chart/model/i-chart-config.d.ts +9 -1
- package/chart/service/brush.service.d.ts +3 -2
- package/chart/service/chart.service.d.ts +8 -0
- package/esm2020/chart/base/series-base.component.mjs +8 -6
- package/esm2020/chart/chart/chart.component.mjs +75 -19
- package/esm2020/chart/chart-container/annotation/annotation.component.mjs +66 -44
- package/esm2020/chart/chart-container/chart-container.component.mjs +11 -7
- package/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +5 -3
- package/esm2020/chart/chart-container/plotband/plot-band.component.mjs +12 -6
- package/esm2020/chart/chart-container/plotline/plotline.component.mjs +7 -3
- package/esm2020/chart/chart-container/series/area-series/area-series.component.mjs +13 -138
- package/esm2020/chart/chart-container/series/block-series/block-series.component.mjs +2 -2
- package/esm2020/chart/chart-container/series/line/line-series.component.mjs +3 -159
- package/esm2020/chart/chart-container/series/linear-series-base.mjs +188 -0
- package/esm2020/chart/chart-container/series-host/series-host.component.mjs +9 -24
- package/esm2020/chart/chart-container/tooltip/tooltip.component.mjs +5 -5
- package/esm2020/chart/chart.module.mjs +4 -1
- package/esm2020/chart/default/default-chart-config.mjs +4 -2
- package/esm2020/chart/directives/brushable.directive.mjs +3 -2
- package/esm2020/chart/directives/zoomable.directive.mjs +79 -54
- package/esm2020/chart/model/annotation.mjs +2 -13
- package/esm2020/chart/model/i-broadcast-message.mjs +1 -1
- package/esm2020/chart/model/i-chart-config.mjs +1 -1
- package/esm2020/chart/service/broadcast.service.mjs +9 -3
- package/esm2020/chart/service/brush.service.mjs +58 -19
- package/esm2020/chart/service/chart.service.mjs +17 -3
- package/esm2020/chart/service/scale.service.mjs +9 -3
- package/esm2020/chart/service/zoom.service.mjs +5 -2
- package/fesm2015/tetacom-svg-charts.mjs +416 -354
- package/fesm2015/tetacom-svg-charts.mjs.map +1 -1
- package/fesm2020/tetacom-svg-charts.mjs +399 -334
- package/fesm2020/tetacom-svg-charts.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, } from '@angular/core';
|
|
2
|
-
import { SeriesBaseComponent } from '../../../base/series-base.component';
|
|
3
|
-
import { combineLatest, map, tap, withLatestFrom } from 'rxjs';
|
|
4
|
-
import * as d3 from 'd3';
|
|
5
|
-
import { DragPointType } from '../../../model/enum/drag-point-type';
|
|
6
|
-
import { TooltipTracking } from '../../../model/enum/tooltip-tracking';
|
|
7
2
|
import { FillDirection, FillType } from '../../../model/enum/fill-type';
|
|
3
|
+
import { LinearSeriesBase } from '../linear-series-base';
|
|
4
|
+
import { combineLatest, map } from 'rxjs';
|
|
5
|
+
import * as d3 from 'd3';
|
|
8
6
|
import * as i0 from "@angular/core";
|
|
9
7
|
import * as i1 from "../../../service/chart.service";
|
|
10
8
|
import * as i2 from "../../../service/scale.service";
|
|
11
9
|
import * as i3 from "../../../service/zoom.service";
|
|
12
10
|
import * as i4 from "@angular/common";
|
|
13
|
-
export class AreaSeriesComponent extends
|
|
11
|
+
export class AreaSeriesComponent extends LinearSeriesBase {
|
|
14
12
|
constructor(svc, cdr, scaleService, zoomService, element) {
|
|
15
13
|
super(svc, cdr, scaleService, zoomService, element);
|
|
16
14
|
this.svc = svc;
|
|
@@ -23,15 +21,14 @@ export class AreaSeriesComponent extends SeriesBaseComponent {
|
|
|
23
21
|
this.id = (Date.now() + Math.random()).toString(36);
|
|
24
22
|
}
|
|
25
23
|
ngOnInit() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return this.getTransform(event, x, y);
|
|
29
|
-
}), tap(() => this.cdr.detectChanges()));
|
|
30
|
-
this.path = combineLatest([
|
|
24
|
+
super.ngOnInit();
|
|
25
|
+
this.areaPath = combineLatest([
|
|
31
26
|
this.scaleService.xScaleMap,
|
|
32
27
|
this.scaleService.yScaleMap,
|
|
33
|
-
]).pipe(
|
|
34
|
-
const [
|
|
28
|
+
]).pipe(map((data) => {
|
|
29
|
+
const [x, y] = data;
|
|
30
|
+
this.x = x.get(this.series.xAxisIndex);
|
|
31
|
+
this.y = y.get(this.series.yAxisIndex);
|
|
35
32
|
this.x = x.get(this.series.xAxisIndex);
|
|
36
33
|
this.y = y.get(this.series.yAxisIndex);
|
|
37
34
|
const area = d3
|
|
@@ -47,133 +44,11 @@ export class AreaSeriesComponent extends SeriesBaseComponent {
|
|
|
47
44
|
return area(this.series.data);
|
|
48
45
|
}));
|
|
49
46
|
}
|
|
50
|
-
ngAfterViewInit() {
|
|
51
|
-
const drag = (node, event, d) => {
|
|
52
|
-
if (d.marker?.dragType === DragPointType.x ||
|
|
53
|
-
d.marker?.dragType === DragPointType.xy) {
|
|
54
|
-
d.x = this.x.invert(event.x);
|
|
55
|
-
}
|
|
56
|
-
if (d.marker?.dragType === DragPointType.y ||
|
|
57
|
-
d.marker?.dragType === DragPointType.xy) {
|
|
58
|
-
d.y = this.y.invert(event.y);
|
|
59
|
-
}
|
|
60
|
-
this.svc.emitPoint({
|
|
61
|
-
target: {
|
|
62
|
-
series: this.series,
|
|
63
|
-
point: d,
|
|
64
|
-
},
|
|
65
|
-
event,
|
|
66
|
-
});
|
|
67
|
-
this.cdr.detectChanges();
|
|
68
|
-
};
|
|
69
|
-
const dragMarkers = d3
|
|
70
|
-
.drag()
|
|
71
|
-
.subject(function (event, d) {
|
|
72
|
-
const node = d3.select(this);
|
|
73
|
-
return { x: node.attr('cx'), y: node.attr('cy') };
|
|
74
|
-
})
|
|
75
|
-
.on('start drag end', function (event, d) {
|
|
76
|
-
const node = d3.select(this);
|
|
77
|
-
drag(node, event, d);
|
|
78
|
-
});
|
|
79
|
-
const draggableMarkers = this.series.data?.filter((_) => _?.marker && _?.marker?.draggable);
|
|
80
|
-
const element = d3
|
|
81
|
-
.select(this.element.nativeElement)
|
|
82
|
-
.selectAll('.draggable-marker')
|
|
83
|
-
.data(draggableMarkers);
|
|
84
|
-
element.call(dragMarkers);
|
|
85
|
-
this.svgElement = d3
|
|
86
|
-
.select(this.element.nativeElement)
|
|
87
|
-
.select('.line')
|
|
88
|
-
.node();
|
|
89
|
-
}
|
|
90
|
-
getMarkers() {
|
|
91
|
-
return this.series.data?.filter((_) => _?.marker);
|
|
92
|
-
}
|
|
93
|
-
getTransform(event, x, y) {
|
|
94
|
-
const mouse = [event?.offsetX, event?.offsetY];
|
|
95
|
-
const foundX = x.get(this.series.xAxisIndex);
|
|
96
|
-
const foundY = y.get(this.series.yAxisIndex);
|
|
97
|
-
const tooltipTracking = this.config?.tooltip?.tracking;
|
|
98
|
-
const lineIntersection = (p0_x, p0_y, p1_x, p1_y, p2_x, p2_y, p3_x, p3_y) => {
|
|
99
|
-
const rV = {};
|
|
100
|
-
let s1_x, s1_y, s2_x, s2_y;
|
|
101
|
-
s1_x = p1_x - p0_x;
|
|
102
|
-
s1_y = p1_y - p0_y;
|
|
103
|
-
s2_x = p3_x - p2_x;
|
|
104
|
-
s2_y = p3_y - p2_y;
|
|
105
|
-
let s, t;
|
|
106
|
-
s =
|
|
107
|
-
(-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) /
|
|
108
|
-
(-s2_x * s1_y + s1_x * s2_y);
|
|
109
|
-
t =
|
|
110
|
-
(s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) /
|
|
111
|
-
(-s2_x * s1_y + s1_x * s2_y);
|
|
112
|
-
if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {
|
|
113
|
-
// Collision detected
|
|
114
|
-
rV.x = p0_x + t * s1_x;
|
|
115
|
-
rV.y = p0_y + t * s1_y;
|
|
116
|
-
}
|
|
117
|
-
return rV;
|
|
118
|
-
};
|
|
119
|
-
if (tooltipTracking === TooltipTracking.x) {
|
|
120
|
-
const bisect = d3.bisector((_) => _.x).right;
|
|
121
|
-
const pointer = mouse[0];
|
|
122
|
-
const x0 = foundX.invert(pointer);
|
|
123
|
-
const filtered = this.series.data.filter((_) => _.y !== null && _.x !== null);
|
|
124
|
-
const rightId = bisect(filtered, x0);
|
|
125
|
-
const range = foundY.range();
|
|
126
|
-
const intersect = lineIntersection(pointer, range[0], pointer, range[1], foundX(filtered[rightId - 1]?.x), foundY(filtered[rightId - 1]?.y), foundX(filtered[rightId]?.x), foundY(filtered[rightId]?.y));
|
|
127
|
-
const x = foundX.invert(intersect.x);
|
|
128
|
-
const y = foundY.invert(intersect.y);
|
|
129
|
-
if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {
|
|
130
|
-
this.svc.setTooltip({
|
|
131
|
-
point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },
|
|
132
|
-
series: this.series,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
this.svc.setTooltip({
|
|
137
|
-
point: null,
|
|
138
|
-
series: this.series,
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
return {
|
|
142
|
-
x: intersect.x,
|
|
143
|
-
y: intersect.y,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
if (tooltipTracking === TooltipTracking.y) {
|
|
147
|
-
const bisect = d3.bisector((_) => _.y).right;
|
|
148
|
-
const y0 = foundY.invert(mouse[1]);
|
|
149
|
-
const rightId = bisect(this.series.data, y0);
|
|
150
|
-
const range = foundX.range();
|
|
151
|
-
const intersect = lineIntersection(range[0], mouse[1], range[1], mouse[1], foundX(this.series.data[rightId - 1]?.x), foundY(this.series.data[rightId - 1]?.y), foundX(this.series.data[rightId]?.x), foundY(this.series.data[rightId]?.y));
|
|
152
|
-
const x = foundX.invert(intersect.x);
|
|
153
|
-
const y = foundY.invert(intersect.y);
|
|
154
|
-
if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {
|
|
155
|
-
this.svc.setTooltip({
|
|
156
|
-
point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },
|
|
157
|
-
series: this.series,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
this.svc.setTooltip({
|
|
162
|
-
point: null,
|
|
163
|
-
series: this.series,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
return {
|
|
167
|
-
x: intersect.x,
|
|
168
|
-
y: intersect.y,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
47
|
}
|
|
173
48
|
AreaSeriesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: AreaSeriesComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
-
AreaSeriesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: AreaSeriesComponent, selector: "svg:svg[teta-area-series]", usesInheritance: true, ngImport: i0, template: "<svg:defs *ngIf=\"series?.fillType === fillType.gradient\">\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.
|
|
49
|
+
AreaSeriesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: AreaSeriesComponent, selector: "svg:svg[teta-area-series]", usesInheritance: true, ngImport: i0, template: "<svg:defs *ngIf=\"series?.fillType === fillType.gradient\">\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.8\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n<svg:path\n class=\"area\"\n *ngIf=\"series?.fillType === fillType.gradient\"\n [attr.d]=\"areaPath | async\"\n [attr.stroke-width]=\"0\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : series.style.fill ?? series.color\">\n</svg:path>\n<svg:path\n class=\"area\"\n fill=\"none\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\">\n</svg:path>\n<ng-container *ngIf=\"transform | async as t\">\n <svg:circle\n *ngIf=\"t.x !== undefined && t.y!== undefined\"\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"\n >\n </svg:circle>\n</ng-container>\n<ng-container *ngIf=\"getMarkers() as markers\">\n <svg:circle\n class=\"marker\"\n *ngFor=\"let point of markers\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"x(point.x)\"\n [attr.cy]=\"y(point.y)\"\n >\n </svg:circle>\n</ng-container>\n\n\n\n", styles: [""], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
175
50
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: AreaSeriesComponent, decorators: [{
|
|
176
51
|
type: Component,
|
|
177
|
-
args: [{ selector: 'svg:svg[teta-area-series]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg:defs *ngIf=\"series?.fillType === fillType.gradient\">\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.
|
|
52
|
+
args: [{ selector: 'svg:svg[teta-area-series]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg:defs *ngIf=\"series?.fillType === fillType.gradient\">\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted || series?.fillDirection === fillDirection.y ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.8\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n<svg:path\n class=\"area\"\n *ngIf=\"series?.fillType === fillType.gradient\"\n [attr.d]=\"areaPath | async\"\n [attr.stroke-width]=\"0\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : series.style.fill ?? series.color\">\n</svg:path>\n<svg:path\n class=\"area\"\n fill=\"none\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\">\n</svg:path>\n<ng-container *ngIf=\"transform | async as t\">\n <svg:circle\n *ngIf=\"t.x !== undefined && t.y!== undefined\"\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"\n >\n </svg:circle>\n</ng-container>\n<ng-container *ngIf=\"getMarkers() as markers\">\n <svg:circle\n class=\"marker\"\n *ngFor=\"let point of markers\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"x(point.x)\"\n [attr.cy]=\"y(point.y)\"\n >\n </svg:circle>\n</ng-container>\n\n\n\n", styles: [""] }]
|
|
178
53
|
}], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }]; } });
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJlYS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYXJlYS1zZXJpZXMvYXJlYS1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYXJlYS1zZXJpZXMvYXJlYS1zZXJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFLeEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLGNBQWMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxhQUFhLEVBQUUsUUFBUSxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7OztBQVN0RSxNQUFNLE9BQU8sbUJBQ1gsU0FBUSxtQkFBc0I7SUFhOUIsWUFDcUIsR0FBaUIsRUFDakIsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsT0FBbUI7UUFFdEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQU5qQyxRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FB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QyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7b0JBQ2xCLEtBQUssRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUM7b0JBQ3JFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtpQkFDcEIsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7b0JBQ2xCLEtBQUssRUFBRSxJQUFJO29CQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtpQkFDcEIsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxPQUFPO2dCQUNMLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDZCxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDZixDQUFDO1NBQ0g7SUFDSCxDQUFDOztnSEEvUVUsbUJBQW1CO29HQUFuQixtQkFBbUIsd0ZDekJoQyxpckVBa0RBOzJGRHpCYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Nlcmllc0Jhc2VDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7Q2hhcnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtTY2FsZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQge1pvb21TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3pvb20uc2VydmljZSc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgdGFwLCB3aXRoTGF0ZXN0RnJvbX0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge0RyYWdQb2ludFR5cGV9IGZyb20gJy4uLy4uLy4uL21vZGVsL2VudW0vZHJhZy1wb2ludC10eXBlJztcbmltcG9ydCB7VG9vbHRpcFRyYWNraW5nfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL3Rvb2x0aXAtdHJhY2tpbmcnO1xuaW1wb3J0IHtGaWxsRGlyZWN0aW9uLCBGaWxsVHlwZX0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvZW51bS9maWxsLXR5cGUnO1xuaW1wb3J0IHtBeGlzfSBmcm9tICcuLi8uLi8uLi9jb3JlL2F4aXMvYXhpcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpzdmdbdGV0YS1hcmVhLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vYXJlYS1zZXJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcmVhLXNlcmllcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXJlYVNlcmllc0NvbXBvbmVudDxUIGV4dGVuZHMgQmFzZVBvaW50PlxuICBleHRlbmRzIFNlcmllc0Jhc2VDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQge1xuICB0cmFuc2Zvcm06IE9ic2VydmFibGU8UGljazxCYXNlUG9pbnQsICd4JyB8ICd5Jz4+O1xuICBkaXNwbGF5OiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIHBhdGg6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgc3ZnRWxlbWVudDogU1ZHR2VvbWV0cnlFbGVtZW50O1xuICB4OiBhbnk7XG4gIHk6IGFueTtcbiAgaWQ6IHN0cmluZztcblxuICBmaWxsRGlyZWN0aW9uID0gRmlsbERpcmVjdGlvbjtcbiAgZmlsbFR5cGUgPSBGaWxsVHlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3ZjOiBDaGFydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB6b29tU2VydmljZTogWm9vbVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoc3ZjLCBjZHIsIHNjYWxlU2VydmljZSwgem9vbVNlcnZpY2UsIGVsZW1lbnQpO1xuXG4gICAgdGhpcy5pZCA9IChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0aGlzLnN2Yy5wb2ludGVyTW92ZS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zY2FsZVNlcnZpY2UueFNjYWxlTWFwLCB0aGlzLnNjYWxlU2VydmljZS55U2NhbGVNYXApLFxuICAgICAgbWFwKChkYXRhOiBbUG9pbnRlckV2ZW50LCBNYXA8bnVtYmVyLCBhbnk+LCBNYXA8bnVtYmVyLCBhbnk+XSkgPT4ge1xuICAgICAgICBjb25zdCBbZXZlbnQsIHgsIHldID0gZGF0YTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2Zvcm0oZXZlbnQsIHgsIHkpO1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKVxuICAgICk7XG5cbiAgICB0aGlzLnBhdGggPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc2NhbGVTZXJ2aWNlLnhTY2FsZU1hcCxcbiAgICAgIHRoaXMuc2NhbGVTZXJ2aWNlLnlTY2FsZU1hcCxcbiAgICBdKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zY2FsZVNlcnZpY2UueEF4aXNNYXAsIHRoaXMuc2NhbGVTZXJ2aWNlLnlBeGlzTWFwKSxcbiAgICAgIG1hcChcbiAgICAgICAgKFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIFtNYXA8bnVtYmVyLCBhbnk+LCBNYXA8bnVtYmVyLCBhbnk+XSxcbiAgICAgICAgICAgIE1hcDxudW1iZXIsIEF4aXM+LFxuICAgICAgICAgICAgTWFwPG51bWJlciwgQXhpcz5cbiAgICAgICAgICBdXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IFtbeCwgeV0sIHhBeGlzTWFwLCB5QXhpc01hcF0gPSBkYXRhO1xuXG4gICAgICAgICAgdGhpcy54ID0geC5nZXQodGhpcy5zZXJpZXMueEF4aXNJbmRleCk7XG4gICAgICAgICAgdGhpcy55ID0geS5nZXQodGhpcy5zZXJpZXMueUF4aXNJbmRleCk7XG5cbiAgICAgICAgICBjb25zdCBhcmVhID0gZDNcbiAgICAgICAgICAgIC5hcmVhPEJhc2VQb2ludD4oKVxuICAgICAgICAgICAgLmRlZmluZWQoXG4gICAgICAgICAgICAgIChwb2ludCkgPT5cbiAgICAgICAgICAgICAgICBwb2ludC54ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgcG9pbnQueSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICFpc05hTihwb2ludC54KSAmJlxuICAgICAgICAgICAgICAgICFpc05hTihwb2ludC55KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGFyZWFcbiAgICAgICAgICAgIC54MSgoXykgPT5cbiAgICAgICAgICAgICAgXy54MSAhPT0gbnVsbCAmJiBfLngxICE9PSB1bmRlZmluZWQgPyB0aGlzLngoXy54MSkgOiB0aGlzLngoMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC54MCgoXykgPT4gdGhpcy54KF8ueCkpXG5cbiAgICAgICAgICAgIC55KChfKSA9PlxuICAgICAgICAgICAgICB0aGlzLnkoXy55KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gYXJlYSh0aGlzLnNlcmllcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgZHJhZyA9IChub2RlLCBldmVudDogZDMuRDNEcmFnRXZlbnQ8YW55LCBhbnksIGFueT4sIGQ6IEJhc2VQb2ludCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBkLm1hcmtlcj8uZHJhZ1R5cGUgPT09IERyYWdQb2ludFR5cGUueCB8fFxuICAgICAgICBkLm1hcmtlcj8uZHJhZ1R5cGUgPT09IERyYWdQb2ludFR5cGUueHlcbiAgICAgICkge1xuICAgICAgICBkLnggPSB0aGlzLnguaW52ZXJ0KGV2ZW50LngpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGQubWFya2VyPy5kcmFnVHlwZSA9PT0gRHJhZ1BvaW50VHlwZS55IHx8XG4gICAgICAgIGQubWFya2VyPy5kcmFnVHlwZSA9PT0gRHJhZ1BvaW50VHlwZS54eVxuICAgICAgKSB7XG4gICAgICAgIGQueSA9IHRoaXMueS5pbnZlcnQoZXZlbnQueSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3ZjLmVtaXRQb2ludCh7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgICAgcG9pbnQ6IGQsXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZHJhZ01hcmtlcnMgPSBkM1xuICAgICAgLmRyYWcoKVxuICAgICAgLnN1YmplY3QoZnVuY3Rpb24gKGV2ZW50LCBkOiBCYXNlUG9pbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHt4OiBub2RlLmF0dHIoJ2N4JyksIHk6IG5vZGUuYXR0cignY3knKX07XG4gICAgICB9KVxuICAgICAgLm9uKFxuICAgICAgICAnc3RhcnQgZHJhZyBlbmQnLFxuICAgICAgICBmdW5jdGlvbiAoZXZlbnQ6IGQzLkQzRHJhZ0V2ZW50PGFueSwgYW55LCBhbnk+LCBkOiBCYXNlUG9pbnQpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gZDMuc2VsZWN0KHRoaXMpO1xuXG4gICAgICAgICAgZHJhZyhub2RlLCBldmVudCwgZCk7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICBjb25zdCBkcmFnZ2FibGVNYXJrZXJzID0gdGhpcy5zZXJpZXMuZGF0YT8uZmlsdGVyKFxuICAgICAgKF8pID0+IF8/Lm1hcmtlciAmJiBfPy5tYXJrZXI/LmRyYWdnYWJsZVxuICAgICk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZDNcbiAgICAgIC5zZWxlY3QodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAuc2VsZWN0QWxsKCcuZHJhZ2dhYmxlLW1hcmtlcicpXG4gICAgICAuZGF0YShkcmFnZ2FibGVNYXJrZXJzKTtcblxuICAgIGVsZW1lbnQuY2FsbChkcmFnTWFya2VycyBhcyBhbnkpO1xuXG4gICAgdGhpcy5zdmdFbGVtZW50ID0gZDNcbiAgICAgIC5zZWxlY3QodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAuc2VsZWN0KCcubGluZScpXG4gICAgICAubm9kZSgpIGFzIFNWR0dlb21ldHJ5RWxlbWVudDtcbiAgfVxuXG4gIGdldE1hcmtlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWVzLmRhdGE/LmZpbHRlcigoXykgPT4gXz8ubWFya2VyKTtcbiAgfVxuXG4gIGdldFRyYW5zZm9ybShcbiAgICBldmVudDogYW55LFxuICAgIHg6IE1hcDxudW1iZXIsIGFueT4sXG4gICAgeTogTWFwPG51bWJlciwgYW55PlxuICApOiBQaWNrPEJhc2VQb2ludCwgJ3gnIHwgJ3knPiB7XG4gICAgY29uc3QgbW91c2UgPSBbZXZlbnQ/Lm9mZnNldFgsIGV2ZW50Py5vZmZzZXRZXTtcblxuICAgIGNvbnN0IGZvdW5kWCA9IHguZ2V0KHRoaXMuc2VyaWVzLnhBeGlzSW5kZXgpO1xuICAgIGNvbnN0IGZvdW5kWSA9IHkuZ2V0KHRoaXMuc2VyaWVzLnlBeGlzSW5kZXgpO1xuXG4gICAgY29uc3QgdG9vbHRpcFRyYWNraW5nID0gdGhpcy5jb25maWc/LnRvb2x0aXA/LnRyYWNraW5nO1xuXG4gICAgY29uc3QgbGluZUludGVyc2VjdGlvbiA9IChcbiAgICAgIHAwX3gsXG4gICAgICBwMF95LFxuICAgICAgcDFfeCxcbiAgICAgIHAxX3ksXG4gICAgICBwMl94LFxuICAgICAgcDJfeSxcbiAgICAgIHAzX3gsXG4gICAgICBwM195XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCByViA9IHt9IGFzIGFueTtcbiAgICAgIGxldCBzMV94LCBzMV95LCBzMl94LCBzMl95O1xuICAgICAgczFfeCA9IHAxX3ggLSBwMF94O1xuICAgICAgczFfeSA9IHAxX3kgLSBwMF95O1xuICAgICAgczJfeCA9IHAzX3ggLSBwMl94O1xuICAgICAgczJfeSA9IHAzX3kgLSBwMl95O1xuXG4gICAgICBsZXQgcywgdDtcbiAgICAgIHMgPVxuICAgICAgICAoLXMxX3kgKiAocDBfeCAtIHAyX3gpICsgczFfeCAqIChwMF95IC0gcDJfeSkpIC9cbiAgICAgICAgKC1zMl94ICogczFfeSArIHMxX3ggKiBzMl95KTtcbiAgICAgIHQgPVxuICAgICAgICAoczJfeCAqIChwMF95IC0gcDJfeSkgLSBzMl95ICogKHAwX3ggLSBwMl94KSkgL1xuICAgICAgICAoLXMyX3ggKiBzMV95ICsgczFfeCAqIHMyX3kpO1xuXG4gICAgICBpZiAocyA+PSAwICYmIHMgPD0gMSAmJiB0ID49IDAgJiYgdCA8PSAxKSB7XG4gICAgICAgIC8vIENvbGxpc2lvbiBkZXRlY3RlZFxuICAgICAgICByVi54ID0gcDBfeCArIHQgKiBzMV94O1xuICAgICAgICByVi55ID0gcDBfeSArIHQgKiBzMV95O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gclY7XG4gICAgfTtcblxuICAgIGlmICh0b29sdGlwVHJhY2tpbmcgPT09IFRvb2x0aXBUcmFja2luZy54KSB7XG4gICAgICBjb25zdCBiaXNlY3QgPSBkMy5iaXNlY3RvcigoXzogQmFzZVBvaW50KSA9PiBfLngpLnJpZ2h0O1xuICAgICAgY29uc3QgcG9pbnRlciA9IG1vdXNlWzBdO1xuXG4gICAgICBjb25zdCB4MCA9IGZvdW5kWC5pbnZlcnQocG9pbnRlcik7XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5zZXJpZXMuZGF0YS5maWx0ZXIoXG4gICAgICAgIChfKSA9PiBfLnkgIT09IG51bGwgJiYgXy54ICE9PSBudWxsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByaWdodElkID0gYmlzZWN0KGZpbHRlcmVkLCB4MCk7XG5cbiAgICAgIGNvbnN0IHJhbmdlID0gZm91bmRZLnJhbmdlKCk7XG5cbiAgICAgIGNvbnN0IGludGVyc2VjdCA9IGxpbmVJbnRlcnNlY3Rpb24oXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIHJhbmdlWzBdLFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICByYW5nZVsxXSxcbiAgICAgICAgZm91bmRYKGZpbHRlcmVkW3JpZ2h0SWQgLSAxXT8ueCksXG4gICAgICAgIGZvdW5kWShmaWx0ZXJlZFtyaWdodElkIC0gMV0/LnkpLFxuICAgICAgICBmb3VuZFgoZmlsdGVyZWRbcmlnaHRJZF0/LngpLFxuICAgICAgICBmb3VuZFkoZmlsdGVyZWRbcmlnaHRJZF0/LnkpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB4ID0gZm91bmRYLmludmVydChpbnRlcnNlY3QueCk7XG4gICAgICBjb25zdCB5ID0gZm91bmRZLmludmVydChpbnRlcnNlY3QueSk7XG4gICAgICBpZiAoeCAhPT0gbnVsbCAmJiB4ICE9PSB1bmRlZmluZWQgJiYgIWlzTmFOKHgpICYmIHkgIT09IG51bGwgJiYgeSAhPT0gdW5kZWZpbmVkICYmICFpc05hTih5KSkge1xuICAgICAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgICAgICBwb2ludDoge3g6IGZvdW5kWC5pbnZlcnQoaW50ZXJzZWN0LngpLCB5OiBmb3VuZFkuaW52ZXJ0KGludGVyc2VjdC55KX0sXG4gICAgICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgICAgICBwb2ludDogbnVsbCxcbiAgICAgICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogaW50ZXJzZWN0LngsXG4gICAgICAgIHk6IGludGVyc2VjdC55LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodG9vbHRpcFRyYWNraW5nID09PSBUb29sdGlwVHJhY2tpbmcueSkge1xuICAgICAgY29uc3QgYmlzZWN0ID0gZDMuYmlzZWN0b3IoKF86IEJhc2VQb2ludCkgPT4gXy55KS5yaWdodDtcblxuICAgICAgY29uc3QgeTAgPSBmb3VuZFkuaW52ZXJ0KG1vdXNlWzFdKTtcblxuICAgICAgY29uc3QgcmlnaHRJZCA9IGJpc2VjdCh0aGlzLnNlcmllcy5kYXRhLCB5MCk7XG4gICAgICBjb25zdCByYW5nZSA9IGZvdW5kWC5yYW5nZSgpO1xuXG4gICAgICBjb25zdCBpbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0aW9uKFxuICAgICAgICByYW5nZVswXSxcbiAgICAgICAgbW91c2VbMV0sXG4gICAgICAgIHJhbmdlWzFdLFxuICAgICAgICBtb3VzZVsxXSxcbiAgICAgICAgZm91bmRYKHRoaXMuc2VyaWVzLmRhdGFbcmlnaHRJZCAtIDFdPy54KSxcbiAgICAgICAgZm91bmRZKHRoaXMuc2VyaWVzLmRhdGFbcmlnaHRJZCAtIDFdPy55KSxcbiAgICAgICAgZm91bmRYKHRoaXMuc2VyaWVzLmRhdGFbcmlnaHRJZF0/LngpLFxuICAgICAgICBmb3VuZFkodGhpcy5zZXJpZXMuZGF0YVtyaWdodElkXT8ueSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHggPSBmb3VuZFguaW52ZXJ0KGludGVyc2VjdC54KTtcbiAgICAgIGNvbnN0IHkgPSBmb3VuZFkuaW52ZXJ0KGludGVyc2VjdC55KTtcbiAgICAgIGlmICh4ICE9PSBudWxsICYmIHggIT09IHVuZGVmaW5lZCAmJiAhaXNOYU4oeCkgJiYgeSAhPT0gbnVsbCAmJiB5ICE9PSB1bmRlZmluZWQgJiYgIWlzTmFOKHkpKSB7XG4gICAgICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgICAgIHBvaW50OiB7eDogZm91bmRYLmludmVydChpbnRlcnNlY3QueCksIHk6IGZvdW5kWS5pbnZlcnQoaW50ZXJzZWN0LnkpfSxcbiAgICAgICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgICAgIHBvaW50OiBudWxsLFxuICAgICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogaW50ZXJzZWN0LngsXG4gICAgICAgIHk6IGludGVyc2VjdC55LFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsIjxzdmc6ZGVmcyAqbmdJZj1cInNlcmllcz8uZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50XCI+XG4gIDxzdmc6bGluZWFyR3JhZGllbnQgW2lkXT1cIidncmFkaWVudC1maWxsLScgKyBpZFwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgeDE9XCIwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIueTFdPVwiY29uZmlnPy5pbnZlcnRlZCB8fCBzZXJpZXM/LmZpbGxEaXJlY3Rpb24gPT09IGZpbGxEaXJlY3Rpb24ueSA/ICcwJScgOiAnMTAwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLngyXT1cImNvbmZpZz8uaW52ZXJ0ZWQgfHwgc2VyaWVzPy5maWxsRGlyZWN0aW9uID09PSBmaWxsRGlyZWN0aW9uLnkgPyAnMTAwJScgOiAnMCUnXCJcbiAgICAgICAgICAgICAgICAgICAgICB5Mj1cIjAlXCI+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwXCI+PC9zdmc6c3RvcD5cbiAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNSVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMVwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC4yXCI+PC9zdmc6c3RvcD5cbiAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjVcIj48L3N2ZzpzdG9wPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIxMDAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjlcIj48L3N2ZzpzdG9wPlxuICA8L3N2ZzpsaW5lYXJHcmFkaWVudD5cbjwvc3ZnOmRlZnM+XG48c3ZnOnBhdGhcbiAgY2xhc3M9XCJhcmVhXCJcbiAgW2F0dHIuZF09XCJwYXRoIHwgYXN5bmNcIlxuICBbYXR0ci5zdHJva2VdPVwic2VyaWVzLmNvbG9yXCJcbiAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJzZXJpZXMuc3R5bGU/LnN0cm9rZURhc2hhcnJheVwiXG4gIFthdHRyLnN0cm9rZS13aWR0aF09XCJzZXJpZXMuc3R5bGU/LnN0cm9rZVdpZHRoXCJcbiAgW2F0dHIuZmlsbC1vcGFjaXR5XT1cInNlcmllcy5zdHlsZT8uZmlsbE9wYWNpdHlcIlxuICBbYXR0ci5maWxsXT1cInNlcmllcy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnQgPyAndXJsKCNncmFkaWVudC1maWxsLScraWQrJyknIDogc2VyaWVzLnN0eWxlLmZpbGwgPz8gc2VyaWVzLmNvbG9yXCI+XG48L3N2ZzpwYXRoPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYW5zZm9ybSB8IGFzeW5jIGFzIHRcIj5cbiAgPHN2ZzpjaXJjbGVcbiAgICAqbmdJZj1cInQueCAhPT0gdW5kZWZpbmVkICYmIHQueSE9PSB1bmRlZmluZWRcIlxuICAgIHI9XCIzXCJcbiAgICBbYXR0ci5maWxsXT1cInNlcmllcy5jb2xvclwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJysgdC54ICsnLCAnKyB0LnkgKycpJ1wiXG4gID5cbiAgPC9zdmc6Y2lyY2xlPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNYXJrZXJzKCkgYXMgbWFya2Vyc1wiPlxuICA8c3ZnOmNpcmNsZVxuICAgIGNsYXNzPVwibWFya2VyXCJcbiAgICAqbmdGb3I9XCJsZXQgcG9pbnQgb2YgbWFya2Vyc1wiXG4gICAgW2NsYXNzLmRyYWdnYWJsZS1tYXJrZXJdPVwicG9pbnQ/Lm1hcmtlcj8uZHJhZ2dhYmxlXCJcbiAgICBbYXR0ci5yXT1cInBvaW50Lm1hcmtlci5zdHlsZT8ucmFkaXVzID8/IDVcIlxuICAgIFthdHRyLmZpbGxdPVwicG9pbnQubWFya2VyLnN0eWxlPy5maWxsID8/ICd0cmFuc3BhcmVudCdcIlxuICAgIFthdHRyLnN0cm9rZV09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnN0cm9rZSA/PyAnbm9uZSdcIlxuICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnN0cm9rZVdpZHRoXCJcbiAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInBvaW50Lm1hcmtlci5zdHlsZT8uc3Ryb2tlRGFzaGFycmF5XCJcbiAgICBbYXR0ci5jeF09XCJ4KHBvaW50LngpXCJcbiAgICBbYXR0ci5jeV09XCJ5KHBvaW50LnkpXCJcbiAgPlxuICA8L3N2ZzpjaXJjbGU+XG48L25nLWNvbnRhaW5lcj5cblxuXG5cbiJdfQ==
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJlYS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYXJlYS1zZXJpZXMvYXJlYS1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYXJlYS1zZXJpZXMvYXJlYS1zZXJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsYUFBYSxFQUFFLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQzs7Ozs7O0FBUXpCLE1BQU0sT0FBTyxtQkFDWCxTQUFRLGdCQUFtQjtJQVEzQixZQUNxQixHQUFpQixFQUNqQixHQUFzQixFQUN0QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixPQUFtQjtRQUV0QyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTmpDLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQVR4QyxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QixhQUFRLEdBQUcsUUFBUSxDQUFDO1FBV2xCLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQ0QsQ0FDRSxJQUEwQyxFQUMxQyxFQUFFO1lBQ0YsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFdkMsTUFBTSxJQUFJLEdBQUcsRUFBRTtpQkFDWixJQUFJLEVBQWE7aUJBQ2pCLE9BQU8sQ0FDTixDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJO2dCQUNoQixLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUk7Z0JBQ2hCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNsQixDQUFDO1lBRUosSUFBSTtpQkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNSLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0Q7aUJBQ0EsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFFdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDWixDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7Z0hBM0RVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHdGQ3ZCaEMsNjFFQXdEQTsyRkRqQ2EsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Jhc2VQb2ludH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvYmFzZS1wb2ludCc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7U2NhbGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtab29tU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHtGaWxsRGlyZWN0aW9uLCBGaWxsVHlwZX0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvZW51bS9maWxsLXR5cGUnO1xuaW1wb3J0IHtMaW5lYXJTZXJpZXNCYXNlfSBmcm9tICcuLi9saW5lYXItc2VyaWVzLWJhc2UnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdmc6c3ZnW3RldGEtYXJlYS1zZXJpZXNdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FyZWEtc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXJlYS1zZXJpZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFyZWFTZXJpZXNDb21wb25lbnQ8VCBleHRlbmRzIEJhc2VQb2ludD5cbiAgZXh0ZW5kcyBMaW5lYXJTZXJpZXNCYXNlPFQ+XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBhcmVhUGF0aDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIGZpbGxEaXJlY3Rpb24gPSBGaWxsRGlyZWN0aW9uO1xuICBmaWxsVHlwZSA9IEZpbGxUeXBlO1xuICBpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2NhbGVTZXJ2aWNlOiBTY2FsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHtcbiAgICBzdXBlcihzdmMsIGNkciwgc2NhbGVTZXJ2aWNlLCB6b29tU2VydmljZSwgZWxlbWVudCk7XG4gICAgdGhpcy5pZCA9IChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmFyZWFQYXRoID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnNjYWxlU2VydmljZS54U2NhbGVNYXAsXG4gICAgICB0aGlzLnNjYWxlU2VydmljZS55U2NhbGVNYXAsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFxuICAgICAgICAgIGRhdGE6IFtNYXA8bnVtYmVyLCBhbnk+LCBNYXA8bnVtYmVyLCBhbnk+XVxuICAgICAgICApID0+IHtcbiAgICAgICAgICBjb25zdCBbeCwgeV0gPSBkYXRhO1xuICAgICAgICAgIHRoaXMueCA9IHguZ2V0KHRoaXMuc2VyaWVzLnhBeGlzSW5kZXgpO1xuICAgICAgICAgIHRoaXMueSA9IHkuZ2V0KHRoaXMuc2VyaWVzLnlBeGlzSW5kZXgpO1xuICAgICAgICAgIHRoaXMueCA9IHguZ2V0KHRoaXMuc2VyaWVzLnhBeGlzSW5kZXgpO1xuICAgICAgICAgIHRoaXMueSA9IHkuZ2V0KHRoaXMuc2VyaWVzLnlBeGlzSW5kZXgpO1xuXG4gICAgICAgICAgY29uc3QgYXJlYSA9IGQzXG4gICAgICAgICAgICAuYXJlYTxCYXNlUG9pbnQ+KClcbiAgICAgICAgICAgIC5kZWZpbmVkKFxuICAgICAgICAgICAgICAocG9pbnQpID0+XG4gICAgICAgICAgICAgICAgcG9pbnQueCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHBvaW50LnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAhaXNOYU4ocG9pbnQueCkgJiZcbiAgICAgICAgICAgICAgICAhaXNOYU4ocG9pbnQueSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBhcmVhXG4gICAgICAgICAgICAueDEoKF8pID0+XG4gICAgICAgICAgICAgIF8ueDEgIT09IG51bGwgJiYgXy54MSAhPT0gdW5kZWZpbmVkID8gdGhpcy54KF8ueDEpIDogdGhpcy54KDApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAueDAoKF8pID0+IHRoaXMueChfLngpKVxuXG4gICAgICAgICAgICAueSgoXykgPT5cbiAgICAgICAgICAgICAgdGhpcy55KF8ueSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGFyZWEodGhpcy5zZXJpZXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG59XG4iLCI8c3ZnOmRlZnMgKm5nSWY9XCJzZXJpZXM/LmZpbGxUeXBlID09PSBmaWxsVHlwZS5ncmFkaWVudFwiPlxuICA8c3ZnOmxpbmVhckdyYWRpZW50IFtpZF09XCInZ3JhZGllbnQtZmlsbC0nICsgaWRcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIHgxPVwiMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnkxXT1cImNvbmZpZz8uaW52ZXJ0ZWQgfHwgc2VyaWVzPy5maWxsRGlyZWN0aW9uID09PSBmaWxsRGlyZWN0aW9uLnkgPyAnMCUnIDogJzEwMCUnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci54Ml09XCJjb25maWc/LmludmVydGVkIHx8IHNlcmllcz8uZmlsbERpcmVjdGlvbiA9PT0gZmlsbERpcmVjdGlvbi55ID8gJzEwMCUnIDogJzAlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgeTI9XCIwJVwiPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMFwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjUlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjFcIj48L3N2ZzpzdG9wPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIyMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMlwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjYwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC41XCI+PC9zdmc6c3RvcD5cbiAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiMTAwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC44XCI+PC9zdmc6c3RvcD5cbiAgPC9zdmc6bGluZWFyR3JhZGllbnQ+XG48L3N2ZzpkZWZzPlxuPHN2ZzpwYXRoXG4gIGNsYXNzPVwiYXJlYVwiXG4gICpuZ0lmPVwic2VyaWVzPy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnRcIlxuICBbYXR0ci5kXT1cImFyZWFQYXRoIHwgYXN5bmNcIlxuICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiMFwiXG4gIFthdHRyLmZpbGwtb3BhY2l0eV09XCJzZXJpZXMuc3R5bGU/LmZpbGxPcGFjaXR5XCJcbiAgW2F0dHIuZmlsbF09XCJzZXJpZXMuZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50ID8gJ3VybCgjZ3JhZGllbnQtZmlsbC0nK2lkKycpJyA6IHNlcmllcy5zdHlsZS5maWxsID8/IHNlcmllcy5jb2xvclwiPlxuPC9zdmc6cGF0aD5cbjxzdmc6cGF0aFxuICBjbGFzcz1cImFyZWFcIlxuICBmaWxsPVwibm9uZVwiXG4gIFthdHRyLmRdPVwicGF0aCB8IGFzeW5jXCJcbiAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5jb2xvclwiXG4gIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwic2VyaWVzLnN0eWxlPy5zdHJva2VEYXNoYXJyYXlcIlxuICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic2VyaWVzLnN0eWxlPy5zdHJva2VXaWR0aFwiPlxuPC9zdmc6cGF0aD5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFuc2Zvcm0gfCBhc3luYyBhcyB0XCI+XG4gIDxzdmc6Y2lyY2xlXG4gICAgKm5nSWY9XCJ0LnggIT09IHVuZGVmaW5lZCAmJiB0LnkhPT0gdW5kZWZpbmVkXCJcbiAgICByPVwiM1wiXG4gICAgW2F0dHIuZmlsbF09XCJzZXJpZXMuY29sb3JcIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcrIHQueCArJywgJysgdC55ICsnKSdcIlxuICA+XG4gIDwvc3ZnOmNpcmNsZT5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE1hcmtlcnMoKSBhcyBtYXJrZXJzXCI+XG4gIDxzdmc6Y2lyY2xlXG4gICAgY2xhc3M9XCJtYXJrZXJcIlxuICAgICpuZ0Zvcj1cImxldCBwb2ludCBvZiBtYXJrZXJzXCJcbiAgICBbY2xhc3MuZHJhZ2dhYmxlLW1hcmtlcl09XCJwb2ludD8ubWFya2VyPy5kcmFnZ2FibGVcIlxuICAgIFthdHRyLnJdPVwicG9pbnQubWFya2VyLnN0eWxlPy5yYWRpdXMgPz8gNVwiXG4gICAgW2F0dHIuZmlsbF09XCJwb2ludC5tYXJrZXIuc3R5bGU/LmZpbGwgPz8gJ3RyYW5zcGFyZW50J1wiXG4gICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lm1hcmtlci5zdHlsZT8uc3Ryb2tlID8/ICdub25lJ1wiXG4gICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInBvaW50Lm1hcmtlci5zdHlsZT8uc3Ryb2tlV2lkdGhcIlxuICAgIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwicG9pbnQubWFya2VyLnN0eWxlPy5zdHJva2VEYXNoYXJyYXlcIlxuICAgIFthdHRyLmN4XT1cIngocG9pbnQueClcIlxuICAgIFthdHRyLmN5XT1cInkocG9pbnQueSlcIlxuICA+XG4gIDwvc3ZnOmNpcmNsZT5cbjwvbmctY29udGFpbmVyPlxuXG5cblxuIl19
|
|
@@ -19,7 +19,7 @@ export class BlockSeriesComponent extends SeriesBaseComponent {
|
|
|
19
19
|
this.id = (Date.now() + Math.random()).toString(36);
|
|
20
20
|
}
|
|
21
21
|
ngOnInit() {
|
|
22
|
-
const defaultVisiblePixels =
|
|
22
|
+
const defaultVisiblePixels = 0;
|
|
23
23
|
this.x = this.scaleService.xScaleMap.pipe(map((_) => _.get(this.series.xAxisIndex)));
|
|
24
24
|
this.y = this.scaleService.yScaleMap.pipe(map((_) => _.get(this.series.yAxisIndex)));
|
|
25
25
|
this.displayPoints = this.y.pipe(map((y) => {
|
|
@@ -60,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
60
60
|
type: Component,
|
|
61
61
|
args: [{ selector: 'svg:svg[teta-block-series]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"{\n y: y | async,\n x: x | async,\n points: displayPoints | async\n} as data\">\n <svg:defs *ngIf=\"series?.fillType === fillType.gradient\">\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n <ng-container *ngFor=\"let point of data.points\">\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"data.y(point.y1) - data.y(point.y)\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n width=\"100%\">\n </svg:rect>\n <svg:text *ngIf=\"point.text && data.y(point.y1) - data.y(point.y) > 8\"\n x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y)\" [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.color\"></svg:line>\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y1)\" [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.color\"></svg:line>\n </svg:g>\n </ng-container>\n\n\n</ng-container>\n", styles: [""] }]
|
|
62
62
|
}], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }]; } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stc2VyaWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvc2VyaWVzL2Jsb2NrLXNlcmllcy9ibG9jay1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stc2VyaWVzL2Jsb2NrLXNlcmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsR0FBRyxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBSXJDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7O0FBUXZELE1BQU0sT0FBTyxvQkFDWCxTQUFRLG1CQUFzQjtJQVE5QixZQUNxQixHQUFpQixFQUNqQixHQUFzQixFQUN0QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixPQUFtQjtRQUV0QyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTmpDLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQVJ4QyxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBV2xCLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXRELENBQUM7SUFFUSxRQUFRO1FBQ2YsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzFDLENBQUM7UUFDRixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDMUMsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFFOUIsTUFBTSxnQkFBZ0IsR0FDcEIsTUFBTSxHQUFHLG9CQUFvQjtvQkFDN0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUc7d0JBQ2IsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHO3dCQUNmLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUc7d0JBQ3hCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQztvQkFDNUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUc7d0JBQ2IsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHO3dCQUNmLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUc7d0JBQ3hCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUUvQixPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0I7UUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDbEIsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFnQjtRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNsQixLQUFLLEVBQUUsSUFBSTtZQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsZUFBZTtJQUNmLENBQUM7O2lIQXBFVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix5RkN0QmpDLG96RUE0Q0E7MkZEdEJhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7U2VyaWVzQmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vYmFzZS9zZXJpZXMtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHttYXAsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge1NjYWxlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7RmlsbFR5cGV9IGZyb20gJy4uLy4uLy4uL21vZGVsL2VudW0vZmlsbC10eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnOnN2Z1t0ZXRhLWJsb2NrLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBCbG9ja1Nlcmllc0NvbXBvbmVudDxUIGV4dGVuZHMgQmFzZVBvaW50PlxuICBleHRlbmRzIFNlcmllc0Jhc2VDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICB4OiBPYnNlcnZhYmxlPGFueT47XG4gIHk6IE9ic2VydmFibGU8YW55PjtcbiAgZGlzcGxheVBvaW50czogT2JzZXJ2YWJsZTxCYXNlUG9pbnRbXT47XG4gIGZpbGxUeXBlID0gRmlsbFR5cGU7XG4gIGlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzY2FsZVNlcnZpY2U6IFNjYWxlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKHN2YywgY2RyLCBzY2FsZVNlcnZpY2UsIHpvb21TZXJ2aWNlLCBlbGVtZW50KTtcbiAgICB0aGlzLmlkID0gKERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNik7XG5cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRWaXNpYmxlUGl4ZWxzID0gMTtcblxuICAgIHRoaXMueCA9IHRoaXMuc2NhbGVTZXJ2aWNlLnhTY2FsZU1hcC5waXBlKFxuICAgICAgbWFwKChfKSA9PiBfLmdldCh0aGlzLnNlcmllcy54QXhpc0luZGV4KSlcbiAgICApO1xuICAgIHRoaXMueSA9IHRoaXMuc2NhbGVTZXJ2aWNlLnlTY2FsZU1hcC5waXBlKFxuICAgICAgbWFwKChfKSA9PiBfLmdldCh0aGlzLnNlcmllcy55QXhpc0luZGV4KSlcbiAgICApO1xuXG4gICAgdGhpcy5kaXNwbGF5UG9pbnRzID0gdGhpcy55LnBpcGUoXG4gICAgICBtYXAoKHkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWVzLmRhdGEuZmlsdGVyKChwb2ludCwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguYWJzKHkocG9pbnQueTEpIC0geShwb2ludC55KSk7XG4gICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHkuZG9tYWluKCk7XG5cbiAgICAgICAgICBjb25zdCB2aXNpYmxlQ29uZGl0aW9uID1cbiAgICAgICAgICAgIGhlaWdodCA+IGRlZmF1bHRWaXNpYmxlUGl4ZWxzICYmXG4gICAgICAgICAgICAocG9pbnQueSA+PSBtaW4gfHxcbiAgICAgICAgICAgICAgcG9pbnQueTEgPj0gbWluIHx8XG4gICAgICAgICAgICAgIGFycltpbmRleCArIDFdPy55ID49IG1pbiB8fFxuICAgICAgICAgICAgICBhcnJbaW5kZXggKyAxXT8ueTEgPj0gbWluKSAmJlxuICAgICAgICAgICAgKHBvaW50LnkgPD0gbWF4IHx8XG4gICAgICAgICAgICAgIHBvaW50LnkxIDw9IG1heCB8fFxuICAgICAgICAgICAgICBhcnJbaW5kZXggLSAxXT8ueSA8PSBtYXggfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4IC0gMV0/LnkxIDw9IG1heCk7XG5cbiAgICAgICAgICByZXR1cm4gdmlzaWJsZUNvbmRpdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBtb3VzZWVudGVyKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBudWxsLFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ7XG4gIHk6IHkgfCBhc3luYyxcbiAgeDogeCB8IGFzeW5jLFxuICBwb2ludHM6IGRpc3BsYXlQb2ludHMgfCBhc3luY1xufSBhcyBkYXRhXCI+XG4gIDxzdmc6ZGVmcyAqbmdJZj1cInNlcmllcz8uZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50XCI+XG4gICAgPHN2ZzpsaW5lYXJHcmFkaWVudCBbaWRdPVwiJ2dyYWRpZW50LWZpbGwtJyArIGlkXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxPVwiMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueTFdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcwJScgOiAnMTAwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueDJdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcxMDAlJyA6ICcwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgeTI9XCIwJVwiPlxuICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwXCI+PC9zdmc6c3RvcD5cbiAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCI1JVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC4xXCI+PC9zdmc6c3RvcD5cbiAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIyMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMlwiPjwvc3ZnOnN0b3A+XG4gICAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjVcIj48L3N2ZzpzdG9wPlxuICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjEwMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuOVwiPjwvc3ZnOnN0b3A+XG4gICAgPC9zdmc6bGluZWFyR3JhZGllbnQ+XG4gIDwvc3ZnOmRlZnM+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBvaW50IG9mIGRhdGEucG9pbnRzXCI+XG4gICAgPHN2ZzpnIChtb3VzZWVudGVyKT1cIm1vdXNlZW50ZXIocG9pbnQpXCJcbiAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZShwb2ludClcIj5cbiAgICAgIDxzdmc6cmVjdFxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZGF0YS55KHBvaW50LnkpXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImRhdGEueShwb2ludC55MSkgLSBkYXRhLnkocG9pbnQueSlcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInNlcmllcy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnQgPyAndXJsKCNncmFkaWVudC1maWxsLScraWQrJyknIDogcG9pbnQuaWNvbklkID8gJ3VybCgjcGF0dGVybicrcG9pbnQuaWNvbklkKycpJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5jb2xvclwiXG4gICAgICAgIFthdHRyLmZpbGwtb3BhY2l0eV09XCJzZXJpZXMuc3R5bGU/LmZpbGxPcGFjaXR5XCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCI+XG4gICAgICA8L3N2ZzpyZWN0PlxuICAgICAgPHN2Zzp0ZXh0ICpuZ0lmPVwicG9pbnQudGV4dCAmJiBkYXRhLnkocG9pbnQueTEpIC0gZGF0YS55KHBvaW50LnkpID4gOFwiXG4gICAgICAgICAgICAgICAgeD1cIjUwJVwiXG4gICAgICAgICAgICAgICAgW2F0dHIueV09XCIoZGF0YS55KHBvaW50LnkxKSArIGRhdGEueShwb2ludC55KSkgLyAyXCJcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICAgICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCI+e3sgcG9pbnQudGV4dCB9fVxuICAgICAgPC9zdmc6dGV4dD5cbiAgICAgIDxzdmc6bGluZSB4MT1cIjBcIiB4Mj1cIjEwMCVcIiBbYXR0ci55MV09XCJkYXRhLnkocG9pbnQueSlcIiBbYXR0ci55Ml09XCJkYXRhLnkocG9pbnQueSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJwb2ludC5pY29uSWQgPyAndmFyKC0tY29sb3ItdGV4dC0xMCknIDogcG9pbnQuY29sb3IgPz8gc2VyaWVzLmNvbG9yXCI+PC9zdmc6bGluZT5cbiAgICAgIDxzdmc6bGluZSB4MT1cIjBcIiB4Mj1cIjEwMCVcIiBbYXR0ci55MV09XCJkYXRhLnkocG9pbnQueTEpXCIgW2F0dHIueTJdPVwiZGF0YS55KHBvaW50LnkxKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICd2YXIoLS1jb2xvci10ZXh0LTEwKScgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuY29sb3JcIj48L3N2ZzpsaW5lPlxuICAgIDwvc3ZnOmc+XG4gIDwvbmctY29udGFpbmVyPlxuXG5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stc2VyaWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvc2VyaWVzL2Jsb2NrLXNlcmllcy9ibG9jay1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stc2VyaWVzL2Jsb2NrLXNlcmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsR0FBRyxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBSXJDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7O0FBUXZELE1BQU0sT0FBTyxvQkFDWCxTQUFRLG1CQUFzQjtJQVE5QixZQUNxQixHQUFpQixFQUNqQixHQUFzQixFQUN0QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixPQUFtQjtRQUV0QyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTmpDLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQVJ4QyxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBV2xCLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXRELENBQUM7SUFFUSxRQUFRO1FBQ2YsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzFDLENBQUM7UUFDRixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDMUMsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFFOUIsTUFBTSxnQkFBZ0IsR0FDcEIsTUFBTSxHQUFHLG9CQUFvQjtvQkFDN0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUc7d0JBQ2IsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHO3dCQUNmLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUc7d0JBQ3hCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQztvQkFDNUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUc7d0JBQ2IsS0FBSyxDQUFDLEVBQUUsSUFBSSxHQUFHO3dCQUNmLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUc7d0JBQ3hCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUUvQixPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0I7UUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDbEIsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFnQjtRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNsQixLQUFLLEVBQUUsSUFBSTtZQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsZUFBZTtJQUNmLENBQUM7O2lIQXBFVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix5RkN0QmpDLG96RUE0Q0E7MkZEdEJhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7U2VyaWVzQmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vYmFzZS9zZXJpZXMtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHttYXAsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge1NjYWxlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7RmlsbFR5cGV9IGZyb20gJy4uLy4uLy4uL21vZGVsL2VudW0vZmlsbC10eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnOnN2Z1t0ZXRhLWJsb2NrLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBCbG9ja1Nlcmllc0NvbXBvbmVudDxUIGV4dGVuZHMgQmFzZVBvaW50PlxuICBleHRlbmRzIFNlcmllc0Jhc2VDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICB4OiBPYnNlcnZhYmxlPGFueT47XG4gIHk6IE9ic2VydmFibGU8YW55PjtcbiAgZGlzcGxheVBvaW50czogT2JzZXJ2YWJsZTxCYXNlUG9pbnRbXT47XG4gIGZpbGxUeXBlID0gRmlsbFR5cGU7XG4gIGlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzY2FsZVNlcnZpY2U6IFNjYWxlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKHN2YywgY2RyLCBzY2FsZVNlcnZpY2UsIHpvb21TZXJ2aWNlLCBlbGVtZW50KTtcbiAgICB0aGlzLmlkID0gKERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNik7XG5cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRWaXNpYmxlUGl4ZWxzID0gMDtcblxuICAgIHRoaXMueCA9IHRoaXMuc2NhbGVTZXJ2aWNlLnhTY2FsZU1hcC5waXBlKFxuICAgICAgbWFwKChfKSA9PiBfLmdldCh0aGlzLnNlcmllcy54QXhpc0luZGV4KSlcbiAgICApO1xuICAgIHRoaXMueSA9IHRoaXMuc2NhbGVTZXJ2aWNlLnlTY2FsZU1hcC5waXBlKFxuICAgICAgbWFwKChfKSA9PiBfLmdldCh0aGlzLnNlcmllcy55QXhpc0luZGV4KSlcbiAgICApO1xuXG4gICAgdGhpcy5kaXNwbGF5UG9pbnRzID0gdGhpcy55LnBpcGUoXG4gICAgICBtYXAoKHkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWVzLmRhdGEuZmlsdGVyKChwb2ludCwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguYWJzKHkocG9pbnQueTEpIC0geShwb2ludC55KSk7XG4gICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHkuZG9tYWluKCk7XG5cbiAgICAgICAgICBjb25zdCB2aXNpYmxlQ29uZGl0aW9uID1cbiAgICAgICAgICAgIGhlaWdodCA+IGRlZmF1bHRWaXNpYmxlUGl4ZWxzICYmXG4gICAgICAgICAgICAocG9pbnQueSA+PSBtaW4gfHxcbiAgICAgICAgICAgICAgcG9pbnQueTEgPj0gbWluIHx8XG4gICAgICAgICAgICAgIGFycltpbmRleCArIDFdPy55ID49IG1pbiB8fFxuICAgICAgICAgICAgICBhcnJbaW5kZXggKyAxXT8ueTEgPj0gbWluKSAmJlxuICAgICAgICAgICAgKHBvaW50LnkgPD0gbWF4IHx8XG4gICAgICAgICAgICAgIHBvaW50LnkxIDw9IG1heCB8fFxuICAgICAgICAgICAgICBhcnJbaW5kZXggLSAxXT8ueSA8PSBtYXggfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4IC0gMV0/LnkxIDw9IG1heCk7XG5cbiAgICAgICAgICByZXR1cm4gdmlzaWJsZUNvbmRpdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBtb3VzZWVudGVyKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBudWxsLFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ7XG4gIHk6IHkgfCBhc3luYyxcbiAgeDogeCB8IGFzeW5jLFxuICBwb2ludHM6IGRpc3BsYXlQb2ludHMgfCBhc3luY1xufSBhcyBkYXRhXCI+XG4gIDxzdmc6ZGVmcyAqbmdJZj1cInNlcmllcz8uZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50XCI+XG4gICAgPHN2ZzpsaW5lYXJHcmFkaWVudCBbaWRdPVwiJ2dyYWRpZW50LWZpbGwtJyArIGlkXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxPVwiMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueTFdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcwJScgOiAnMTAwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueDJdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcxMDAlJyA6ICcwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgeTI9XCIwJVwiPlxuICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwXCI+PC9zdmc6c3RvcD5cbiAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCI1JVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC4xXCI+PC9zdmc6c3RvcD5cbiAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIyMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMlwiPjwvc3ZnOnN0b3A+XG4gICAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjVcIj48L3N2ZzpzdG9wPlxuICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjEwMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuOVwiPjwvc3ZnOnN0b3A+XG4gICAgPC9zdmc6bGluZWFyR3JhZGllbnQ+XG4gIDwvc3ZnOmRlZnM+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBvaW50IG9mIGRhdGEucG9pbnRzXCI+XG4gICAgPHN2ZzpnIChtb3VzZWVudGVyKT1cIm1vdXNlZW50ZXIocG9pbnQpXCJcbiAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZShwb2ludClcIj5cbiAgICAgIDxzdmc6cmVjdFxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZGF0YS55KHBvaW50LnkpXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImRhdGEueShwb2ludC55MSkgLSBkYXRhLnkocG9pbnQueSlcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInNlcmllcy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnQgPyAndXJsKCNncmFkaWVudC1maWxsLScraWQrJyknIDogcG9pbnQuaWNvbklkID8gJ3VybCgjcGF0dGVybicrcG9pbnQuaWNvbklkKycpJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5jb2xvclwiXG4gICAgICAgIFthdHRyLmZpbGwtb3BhY2l0eV09XCJzZXJpZXMuc3R5bGU/LmZpbGxPcGFjaXR5XCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCI+XG4gICAgICA8L3N2ZzpyZWN0PlxuICAgICAgPHN2Zzp0ZXh0ICpuZ0lmPVwicG9pbnQudGV4dCAmJiBkYXRhLnkocG9pbnQueTEpIC0gZGF0YS55KHBvaW50LnkpID4gOFwiXG4gICAgICAgICAgICAgICAgeD1cIjUwJVwiXG4gICAgICAgICAgICAgICAgW2F0dHIueV09XCIoZGF0YS55KHBvaW50LnkxKSArIGRhdGEueShwb2ludC55KSkgLyAyXCJcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICAgICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCI+e3sgcG9pbnQudGV4dCB9fVxuICAgICAgPC9zdmc6dGV4dD5cbiAgICAgIDxzdmc6bGluZSB4MT1cIjBcIiB4Mj1cIjEwMCVcIiBbYXR0ci55MV09XCJkYXRhLnkocG9pbnQueSlcIiBbYXR0ci55Ml09XCJkYXRhLnkocG9pbnQueSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJwb2ludC5pY29uSWQgPyAndmFyKC0tY29sb3ItdGV4dC0xMCknIDogcG9pbnQuY29sb3IgPz8gc2VyaWVzLmNvbG9yXCI+PC9zdmc6bGluZT5cbiAgICAgIDxzdmc6bGluZSB4MT1cIjBcIiB4Mj1cIjEwMCVcIiBbYXR0ci55MV09XCJkYXRhLnkocG9pbnQueTEpXCIgW2F0dHIueTJdPVwiZGF0YS55KHBvaW50LnkxKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICd2YXIoLS1jb2xvci10ZXh0LTEwKScgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuY29sb3JcIj48L3N2ZzpsaW5lPlxuICAgIDwvc3ZnOmc+XG4gIDwvbmctY29udGFpbmVyPlxuXG5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, } from '@angular/core';
|
|
2
|
-
import
|
|
3
|
-
import { SeriesBaseComponent } from '../../../base/series-base.component';
|
|
4
|
-
import { combineLatest, map, tap, withLatestFrom } from 'rxjs';
|
|
5
|
-
import { TooltipTracking } from '../../../model/enum/tooltip-tracking';
|
|
6
|
-
import { DragPointType } from '../../../model/enum/drag-point-type';
|
|
2
|
+
import { LinearSeriesBase } from '../linear-series-base';
|
|
7
3
|
import * as i0 from "@angular/core";
|
|
8
4
|
import * as i1 from "../../../service/chart.service";
|
|
9
5
|
import * as i2 from "../../../service/scale.service";
|
|
10
6
|
import * as i3 from "../../../service/zoom.service";
|
|
11
7
|
import * as i4 from "@angular/common";
|
|
12
|
-
export class LineSeriesComponent extends
|
|
8
|
+
export class LineSeriesComponent extends LinearSeriesBase {
|
|
13
9
|
constructor(svc, cdr, scaleService, zoomService, element) {
|
|
14
10
|
super(svc, cdr, scaleService, zoomService, element);
|
|
15
11
|
this.svc = svc;
|
|
@@ -18,158 +14,6 @@ export class LineSeriesComponent extends SeriesBaseComponent {
|
|
|
18
14
|
this.zoomService = zoomService;
|
|
19
15
|
this.element = element;
|
|
20
16
|
}
|
|
21
|
-
ngOnInit() {
|
|
22
|
-
this.transform = this.svc.pointerMove.pipe(withLatestFrom(this.scaleService.xScaleMap, this.scaleService.yScaleMap), map((data) => {
|
|
23
|
-
const [event, x, y] = data;
|
|
24
|
-
return this.getTransform(event, x, y);
|
|
25
|
-
}), tap(() => this.cdr.detectChanges()));
|
|
26
|
-
this.path = combineLatest([
|
|
27
|
-
this.scaleService.xScaleMap,
|
|
28
|
-
this.scaleService.yScaleMap,
|
|
29
|
-
]).pipe(map((data) => {
|
|
30
|
-
const [x, y] = data;
|
|
31
|
-
this.x = x.get(this.series.xAxisIndex);
|
|
32
|
-
this.y = y.get(this.series.yAxisIndex);
|
|
33
|
-
const line = d3
|
|
34
|
-
.line()
|
|
35
|
-
.defined((point) => point.x !== null &&
|
|
36
|
-
point.y !== null &&
|
|
37
|
-
point.x !== undefined &&
|
|
38
|
-
point.y !== undefined &&
|
|
39
|
-
!isNaN(point.x) &&
|
|
40
|
-
!isNaN(point.y))
|
|
41
|
-
.x((point) => this.x(point.x))
|
|
42
|
-
.y((point) => this.y(point.y));
|
|
43
|
-
return line(this.series.data);
|
|
44
|
-
}));
|
|
45
|
-
}
|
|
46
|
-
ngAfterViewInit() {
|
|
47
|
-
const drag = (node, event, d) => {
|
|
48
|
-
if (d.marker?.dragType === DragPointType.x ||
|
|
49
|
-
d.marker?.dragType === DragPointType.xy) {
|
|
50
|
-
d.x = this.x.invert(event.x);
|
|
51
|
-
}
|
|
52
|
-
if (d.marker?.dragType === DragPointType.y ||
|
|
53
|
-
d.marker?.dragType === DragPointType.xy) {
|
|
54
|
-
d.y = this.y.invert(event.y);
|
|
55
|
-
}
|
|
56
|
-
this.svc.emitPoint({
|
|
57
|
-
target: {
|
|
58
|
-
series: this.series,
|
|
59
|
-
point: d,
|
|
60
|
-
},
|
|
61
|
-
event,
|
|
62
|
-
});
|
|
63
|
-
this.cdr.detectChanges();
|
|
64
|
-
};
|
|
65
|
-
const dragMarkers = d3
|
|
66
|
-
.drag()
|
|
67
|
-
.subject(function (event, d) {
|
|
68
|
-
const node = d3.select(this);
|
|
69
|
-
return { x: node.attr('cx'), y: node.attr('cy') };
|
|
70
|
-
})
|
|
71
|
-
.on('start drag end', function (event, d) {
|
|
72
|
-
const node = d3.select(this);
|
|
73
|
-
drag(node, event, d);
|
|
74
|
-
});
|
|
75
|
-
const draggableMarkers = this.series.data?.filter((_) => _?.marker && _?.marker?.draggable);
|
|
76
|
-
const element = d3
|
|
77
|
-
.select(this.element.nativeElement)
|
|
78
|
-
.selectAll('.draggable-marker')
|
|
79
|
-
.data(draggableMarkers);
|
|
80
|
-
element.call(dragMarkers);
|
|
81
|
-
this.svgElement = d3
|
|
82
|
-
.select(this.element.nativeElement)
|
|
83
|
-
.select('.line')
|
|
84
|
-
.node();
|
|
85
|
-
}
|
|
86
|
-
getMarkers() {
|
|
87
|
-
return this.series.data?.filter((_) => _?.marker);
|
|
88
|
-
}
|
|
89
|
-
getTransform(event, scaleX, scaleY) {
|
|
90
|
-
const mouse = [event?.offsetX, event?.offsetY];
|
|
91
|
-
const foundX = scaleX.get(this.series.xAxisIndex);
|
|
92
|
-
const foundY = scaleY.get(this.series.yAxisIndex);
|
|
93
|
-
const tooltipTracking = this.config?.tooltip?.tracking;
|
|
94
|
-
const lineIntersection = (p0_x, p0_y, p1_x, p1_y, p2_x, p2_y, p3_x, p3_y) => {
|
|
95
|
-
const rV = {};
|
|
96
|
-
let s1_x, s1_y, s2_x, s2_y;
|
|
97
|
-
s1_x = p1_x - p0_x;
|
|
98
|
-
s1_y = p1_y - p0_y;
|
|
99
|
-
s2_x = p3_x - p2_x;
|
|
100
|
-
s2_y = p3_y - p2_y;
|
|
101
|
-
let s, t;
|
|
102
|
-
s =
|
|
103
|
-
(-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) /
|
|
104
|
-
(-s2_x * s1_y + s1_x * s2_y);
|
|
105
|
-
t =
|
|
106
|
-
(s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) /
|
|
107
|
-
(-s2_x * s1_y + s1_x * s2_y);
|
|
108
|
-
if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {
|
|
109
|
-
// Collision detected
|
|
110
|
-
rV.x = p0_x + t * s1_x;
|
|
111
|
-
rV.y = p0_y + t * s1_y;
|
|
112
|
-
}
|
|
113
|
-
return rV;
|
|
114
|
-
};
|
|
115
|
-
if (tooltipTracking === TooltipTracking.x) {
|
|
116
|
-
const bisect = d3.bisector((_) => _.x).right;
|
|
117
|
-
const pointer = mouse[0];
|
|
118
|
-
let x0 = foundX.invert(pointer);
|
|
119
|
-
if (x0 instanceof Date) {
|
|
120
|
-
x0 = x0.getTime();
|
|
121
|
-
}
|
|
122
|
-
const rightId = bisect(this.series.data, x0);
|
|
123
|
-
const range = foundY.range();
|
|
124
|
-
const intersect = lineIntersection(pointer, range[0], pointer, range[1], foundX(this.series.data[rightId - 1]?.x), foundY(this.series.data[rightId - 1]?.y), foundX(this.series.data[rightId]?.x), foundY(this.series.data[rightId]?.y));
|
|
125
|
-
const x = foundX.invert(intersect.x);
|
|
126
|
-
const y = foundY.invert(intersect.y);
|
|
127
|
-
if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {
|
|
128
|
-
this.svc.setTooltip({
|
|
129
|
-
point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },
|
|
130
|
-
series: this.series,
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
this.svc.setTooltip({
|
|
135
|
-
point: null,
|
|
136
|
-
series: this.series,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
x: intersect.x,
|
|
141
|
-
y: intersect.y,
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
if (tooltipTracking === TooltipTracking.y) {
|
|
145
|
-
const bisect = d3.bisector((_) => _.y).right;
|
|
146
|
-
let y0 = foundY.invert(mouse[1]);
|
|
147
|
-
if (y0 instanceof Date) {
|
|
148
|
-
y0 = y0.getTime();
|
|
149
|
-
}
|
|
150
|
-
const rightId = bisect(this.series.data, y0);
|
|
151
|
-
const range = foundX.range();
|
|
152
|
-
const intersect = lineIntersection(range[0], mouse[1], range[1], mouse[1], foundX(this.series.data[rightId - 1]?.x), foundY(this.series.data[rightId - 1]?.y), foundX(this.series.data[rightId]?.x), foundY(this.series.data[rightId]?.y));
|
|
153
|
-
const x = foundX.invert(intersect.x);
|
|
154
|
-
const y = foundY.invert(intersect.y);
|
|
155
|
-
if (x !== null && x !== undefined && !isNaN(x) && y !== null && y !== undefined && !isNaN(y)) {
|
|
156
|
-
this.svc.setTooltip({
|
|
157
|
-
point: { x: foundX.invert(intersect.x), y: foundY.invert(intersect.y) },
|
|
158
|
-
series: this.series,
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
this.svc.setTooltip({
|
|
163
|
-
point: null,
|
|
164
|
-
series: this.series,
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
x: intersect.x,
|
|
169
|
-
y: intersect.y,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
17
|
}
|
|
174
18
|
LineSeriesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: LineSeriesComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
175
19
|
LineSeriesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: LineSeriesComponent, selector: "svg:svg[teta-line-series]", usesInheritance: true, ngImport: i0, template: "<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n<ng-container *ngIf=\"transform | async as t\">\n <svg:circle\n *ngIf=\"t.x !== undefined && t.y!== undefined\"\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"\n >\n </svg:circle>\n</ng-container>\n\n<ng-container *ngIf=\"getMarkers() as markers\">\n <svg:circle\n class=\"marker\"\n *ngFor=\"let point of markers\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"x(point.x)\"\n [attr.cy]=\"y(point.y)\"\n >\n </svg:circle>\n</ng-container>\n\n\n\n", styles: [".draggable-marker{cursor:move}.active{stroke-opacity:.5}.marker-grab{opacity:0}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -177,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
177
21
|
type: Component,
|
|
178
22
|
args: [{ selector: 'svg:svg[teta-line-series]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n<ng-container *ngIf=\"transform | async as t\">\n <svg:circle\n *ngIf=\"t.x !== undefined && t.y!== undefined\"\n r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\"\n >\n </svg:circle>\n</ng-container>\n\n<ng-container *ngIf=\"getMarkers() as markers\">\n <svg:circle\n class=\"marker\"\n *ngFor=\"let point of markers\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"x(point.x)\"\n [attr.cy]=\"y(point.y)\"\n >\n </svg:circle>\n</ng-container>\n\n\n\n", styles: [".draggable-marker{cursor:move}.active{stroke-opacity:.5}.marker-grab{opacity:0}\n"] }]
|
|
179
23
|
}], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }]; } });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvbGluZS9saW5lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Nlcmllcy9saW5lL2xpbmUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBSXhFLE9BQU8sRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFjLEdBQUcsRUFBRSxjQUFjLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHekUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7O0FBUWxFLE1BQU0sT0FBTyxtQkFDWCxTQUFRLG1CQUFzQjtJQVM5QixZQUNxQixHQUFpQixFQUNqQixHQUFzQixFQUN0QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixPQUFtQjtRQUV0QyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTmpDLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtJQUd4QyxDQUFDO0lBRVEsUUFBUTtRQUNmLElBQUksQ0FB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QUFNO2dCQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO29CQUNsQixLQUFLLEVBQUUsSUFBSTtvQkFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3BCLENBQUMsQ0FBQzthQUNKO1lBRUQsT0FBTztnQkFDTCxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ2YsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7Z0hBelBVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHdGQ3pCaEMsdWtDQW9DQTsyRkRYYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge1Nlcmllc0Jhc2VDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7Q2hhcnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtCYXNlUG9pbnR9IGZyb20gJy4uLy4uLy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHtTY2FsZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgdGFwLCB3aXRoTGF0ZXN0RnJvbX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7VG9vbHRpcFRyYWNraW5nfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL3Rvb2x0aXAtdHJhY2tpbmcnO1xuaW1wb3J0IHtEcmFnUG9pbnRUeXBlfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2RyYWctcG9pbnQtdHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpzdmdbdGV0YS1saW5lLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluZS1zZXJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saW5lLXNlcmllcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGluZVNlcmllc0NvbXBvbmVudDxUIGV4dGVuZHMgQmFzZVBvaW50PlxuICBleHRlbmRzIFNlcmllc0Jhc2VDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICB0cmFuc2Zvcm06IE9ic2VydmFibGU8UGljazxCYXNlUG9pbnQsICd4JyB8ICd5Jz4+O1xuICBkaXNwbGF5OiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIHBhdGg6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgc3ZnRWxlbWVudDogU1ZHR2VvbWV0cnlFbGVtZW50O1xuICB4OiBhbnk7XG4gIHk6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3ZjOiBDaGFydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB6b29tU2VydmljZTogWm9vbVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoc3ZjLCBjZHIsIHNjYWxlU2VydmljZSwgem9vbVNlcnZpY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0aGlzLnN2Yy5wb2ludGVyTW92ZS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zY2FsZVNlcnZpY2UueFNjYWxlTWFwLCB0aGlzLnNjYWxlU2VydmljZS55U2NhbGVNYXApLFxuICAgICAgbWFwKChkYXRhOiBbUG9pbnRlckV2ZW50LCBNYXA8bnVtYmVyLCBhbnk+LCBNYXA8bnVtYmVyLCBhbnk+XSkgPT4ge1xuICAgICAgICBjb25zdCBbZXZlbnQsIHgsIHldID0gZGF0YTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2Zvcm0oZXZlbnQsIHgsIHkpO1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKVxuICAgICk7XG5cbiAgICB0aGlzLnBhdGggPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc2NhbGVTZXJ2aWNlLnhTY2FsZU1hcCxcbiAgICAgIHRoaXMuc2NhbGVTZXJ2aWNlLnlTY2FsZU1hcCxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbTWFwPG51bWJlciwgYW55PiwgTWFwPG51bWJlciwgYW55Pl0pID0+IHtcbiAgICAgICAgY29uc3QgW3gsIHldID0gZGF0YTtcbiAgICAgICAgdGhpcy54ID0geC5nZXQodGhpcy5zZXJpZXMueEF4aXNJbmRleCk7XG4gICAgICAgIHRoaXMueSA9IHkuZ2V0KHRoaXMuc2VyaWVzLnlBeGlzSW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IGxpbmUgPSBkM1xuICAgICAgICAgIC5saW5lPEJhc2VQb2ludD4oKVxuICAgICAgICAgIC5kZWZpbmVkKFxuICAgICAgICAgICAgKHBvaW50KSA9PlxuICAgICAgICAgICAgICBwb2ludC54ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIHBvaW50LnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgcG9pbnQueCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgIHBvaW50LnkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAhaXNOYU4ocG9pbnQueCkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKHBvaW50LnkpXG4gICAgICAgICAgKVxuICAgICAgICAgIC54KChwb2ludCkgPT4gdGhpcy54KHBvaW50LngpKVxuICAgICAgICAgIC55KChwb2ludCkgPT4gdGhpcy55KHBvaW50LnkpKTtcbiAgICAgICAgcmV0dXJuIGxpbmUodGhpcy5zZXJpZXMuZGF0YSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgZHJhZyA9IChub2RlLCBldmVudDogZDMuRDNEcmFnRXZlbnQ8YW55LCBhbnksIGFueT4sIGQ6IEJhc2VQb2ludCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBkLm1hcmtlcj8uZHJhZ1R5cGUgPT09IERyYWdQb2ludFR5cGUueCB8fFxuICAgICAgICBkLm1hcmtlcj8uZHJhZ1R5cGUgPT09IERyYWdQb2ludFR5cGUueHlcbiAgICAgICkge1xuICAgICAgICBkLnggPSB0aGlzLnguaW52ZXJ0KGV2ZW50LngpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGQubWFya2VyPy5kcmFnVHlwZSA9PT0gRHJhZ1BvaW50VHlwZS55IHx8XG4gICAgICAgIGQubWFya2VyPy5kcmFnVHlwZSA9PT0gRHJhZ1BvaW50VHlwZS54eVxuICAgICAgKSB7XG4gICAgICAgIGQueSA9IHRoaXMueS5pbnZlcnQoZXZlbnQueSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3ZjLmVtaXRQb2ludCh7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgICAgcG9pbnQ6IGQsXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZHJhZ01hcmtlcnMgPSBkM1xuICAgICAgLmRyYWcoKVxuICAgICAgLnN1YmplY3QoZnVuY3Rpb24gKGV2ZW50LCBkOiBCYXNlUG9pbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHt4OiBub2RlLmF0dHIoJ2N4JyksIHk6IG5vZGUuYXR0cignY3knKX07XG4gICAgICB9KVxuICAgICAgLm9uKFxuICAgICAgICAnc3RhcnQgZHJhZyBlbmQnLFxuICAgICAgICBmdW5jdGlvbiAoZXZlbnQ6IGQzLkQzRHJhZ0V2ZW50PGFueSwgYW55LCBhbnk+LCBkOiBCYXNlUG9pbnQpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gZDMuc2VsZWN0KHRoaXMpO1xuXG4gICAgICAgICAgZHJhZyhub2RlLCBldmVudCwgZCk7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICBjb25zdCBkcmFnZ2FibGVNYXJrZXJzID0gdGhpcy5zZXJpZXMuZGF0YT8uZmlsdGVyKFxuICAgICAgKF8pID0+IF8/Lm1hcmtlciAmJiBfPy5tYXJrZXI/LmRyYWdnYWJsZVxuICAgICk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZDNcbiAgICAgIC5zZWxlY3QodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAuc2VsZWN0QWxsKCcuZHJhZ2dhYmxlLW1hcmtlcicpXG4gICAgICAuZGF0YShkcmFnZ2FibGVNYXJrZXJzKTtcblxuICAgIGVsZW1lbnQuY2FsbChkcmFnTWFya2VycyBhcyBhbnkpO1xuXG4gICAgdGhpcy5zdmdFbGVtZW50ID0gZDNcbiAgICAgIC5zZWxlY3QodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAuc2VsZWN0KCcubGluZScpXG4gICAgICAubm9kZSgpIGFzIFNWR0dlb21ldHJ5RWxlbWVudDtcbiAgfVxuXG4gIGdldE1hcmtlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWVzLmRhdGE/LmZpbHRlcigoXykgPT4gXz8ubWFya2VyKTtcbiAgfVxuXG4gIGdldFRyYW5zZm9ybShcbiAgICBldmVudDogYW55LFxuICAgIHNjYWxlWDogTWFwPG51bWJlciwgYW55PixcbiAgICBzY2FsZVk6IE1hcDxudW1iZXIsIGFueT5cbiAgKTogUGljazxCYXNlUG9pbnQsICd4JyB8ICd5Jz4ge1xuICAgIGNvbnN0IG1vdXNlID0gW2V2ZW50Py5vZmZzZXRYLCBldmVudD8ub2Zmc2V0WV07XG5cbiAgICBjb25zdCBmb3VuZFggPSBzY2FsZVguZ2V0KHRoaXMuc2VyaWVzLnhBeGlzSW5kZXgpO1xuICAgIGNvbnN0IGZvdW5kWSA9IHNjYWxlWS5nZXQodGhpcy5zZXJpZXMueUF4aXNJbmRleCk7XG5cbiAgICBjb25zdCB0b29sdGlwVHJhY2tpbmcgPSB0aGlzLmNvbmZpZz8udG9vbHRpcD8udHJhY2tpbmc7XG5cbiAgICBjb25zdCBsaW5lSW50ZXJzZWN0aW9uID0gKFxuICAgICAgcDBfeCxcbiAgICAgIHAwX3ksXG4gICAgICBwMV94LFxuICAgICAgcDFfeSxcbiAgICAgIHAyX3gsXG4gICAgICBwMl95LFxuICAgICAgcDNfeCxcbiAgICAgIHAzX3lcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHJWID0ge30gYXMgYW55O1xuICAgICAgbGV0IHMxX3gsIHMxX3ksIHMyX3gsIHMyX3k7XG4gICAgICBzMV94ID0gcDFfeCAtIHAwX3g7XG4gICAgICBzMV95ID0gcDFfeSAtIHAwX3k7XG4gICAgICBzMl94ID0gcDNfeCAtIHAyX3g7XG4gICAgICBzMl95ID0gcDNfeSAtIHAyX3k7XG5cbiAgICAgIGxldCBzLCB0O1xuICAgICAgcyA9XG4gICAgICAgICgtczFfeSAqIChwMF94IC0gcDJfeCkgKyBzMV94ICogKHAwX3kgLSBwMl95KSkgL1xuICAgICAgICAoLXMyX3ggKiBzMV95ICsgczFfeCAqIHMyX3kpO1xuICAgICAgdCA9XG4gICAgICAgIChzMl94ICogKHAwX3kgLSBwMl95KSAtIHMyX3kgKiAocDBfeCAtIHAyX3gpKSAvXG4gICAgICAgICgtczJfeCAqIHMxX3kgKyBzMV94ICogczJfeSk7XG5cbiAgICAgIGlmIChzID49IDAgJiYgcyA8PSAxICYmIHQgPj0gMCAmJiB0IDw9IDEpIHtcbiAgICAgICAgLy8gQ29sbGlzaW9uIGRldGVjdGVkXG4gICAgICAgIHJWLnggPSBwMF94ICsgdCAqIHMxX3g7XG4gICAgICAgIHJWLnkgPSBwMF95ICsgdCAqIHMxX3k7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByVjtcbiAgICB9O1xuXG4gICAgaWYgKHRvb2x0aXBUcmFja2luZyA9PT0gVG9vbHRpcFRyYWNraW5nLngpIHtcbiAgICAgIGNvbnN0IGJpc2VjdCA9IGQzLmJpc2VjdG9yKChfOiBCYXNlUG9pbnQpID0+IF8ueCkucmlnaHQ7XG4gICAgICBjb25zdCBwb2ludGVyID0gbW91c2VbMF07XG5cbiAgICAgIGxldCB4MCA9IGZvdW5kWC5pbnZlcnQocG9pbnRlcik7XG4gICAgICBpZiAoeDAgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHgwID0geDAuZ2V0VGltZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmlnaHRJZCA9IGJpc2VjdCh0aGlzLnNlcmllcy5kYXRhLCB4MCk7XG4gICAgICBjb25zdCByYW5nZSA9IGZvdW5kWS5yYW5nZSgpO1xuXG4gICAgICBjb25zdCBpbnRlcnNlY3QgPSBsaW5lSW50ZXJzZWN0aW9uKFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICByYW5nZVswXSxcbiAgICAgICAgcG9pbnRlcixcbiAgICAgICAgcmFuZ2VbMV0sXG4gICAgICAgIGZvdW5kWCh0aGlzLnNlcmllcy5kYXRhW3JpZ2h0SWQgLSAxXT8ueCksXG4gICAgICAgIGZvdW5kWSh0aGlzLnNlcmllcy5kYXRhW3JpZ2h0SWQgLSAxXT8ueSksXG4gICAgICAgIGZvdW5kWCh0aGlzLnNlcmllcy5kYXRhW3JpZ2h0SWRdPy54KSxcbiAgICAgICAgZm91bmRZKHRoaXMuc2VyaWVzLmRhdGFbcmlnaHRJZF0/LnkpXG4gICAgICApO1xuICAgICAgY29uc3QgeCA9IGZvdW5kWC5pbnZlcnQoaW50ZXJzZWN0LngpO1xuICAgICAgY29uc3QgeSA9IGZvdW5kWS5pbnZlcnQoaW50ZXJzZWN0LnkpO1xuICAgICAgaWYgKHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkICYmICFpc05hTih4KSAmJiB5ICE9PSBudWxsICYmIHkgIT09IHVuZGVmaW5lZCAmJiAhaXNOYU4oeSkpIHtcbiAgICAgICAgdGhpcy5zdmMuc2V0VG9vbHRpcCh7XG4gICAgICAgICAgcG9pbnQ6IHt4OiBmb3VuZFguaW52ZXJ0KGludGVyc2VjdC54KSwgeTogZm91bmRZLmludmVydChpbnRlcnNlY3QueSl9LFxuICAgICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdmMuc2V0VG9vbHRpcCh7XG4gICAgICAgICAgcG9pbnQ6IG51bGwsXG4gICAgICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGludGVyc2VjdC54LFxuICAgICAgICB5OiBpbnRlcnNlY3QueSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRvb2x0aXBUcmFja2luZyA9PT0gVG9vbHRpcFRyYWNraW5nLnkpIHtcbiAgICAgIGNvbnN0IGJpc2VjdCA9IGQzLmJpc2VjdG9yKChfOiBCYXNlUG9pbnQpID0+IF8ueSkucmlnaHQ7XG5cbiAgICAgIGxldCB5MCA9IGZvdW5kWS5pbnZlcnQobW91c2VbMV0pO1xuICAgICAgaWYgKHkwIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICB5MCA9IHkwLmdldFRpbWUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJpZ2h0SWQgPSBiaXNlY3QodGhpcy5zZXJpZXMuZGF0YSwgeTApO1xuICAgICAgY29uc3QgcmFuZ2UgPSBmb3VuZFgucmFuZ2UoKTtcblxuICAgICAgY29uc3QgaW50ZXJzZWN0ID0gbGluZUludGVyc2VjdGlvbihcbiAgICAgICAgcmFuZ2VbMF0sXG4gICAgICAgIG1vdXNlWzFdLFxuICAgICAgICByYW5nZVsxXSxcbiAgICAgICAgbW91c2VbMV0sXG4gICAgICAgIGZvdW5kWCh0aGlzLnNlcmllcy5kYXRhW3JpZ2h0SWQgLSAxXT8ueCksXG4gICAgICAgIGZvdW5kWSh0aGlzLnNlcmllcy5kYXRhW3JpZ2h0SWQgLSAxXT8ueSksXG4gICAgICAgIGZvdW5kWCh0aGlzLnNlcmllcy5kYXRhW3JpZ2h0SWRdPy54KSxcbiAgICAgICAgZm91bmRZKHRoaXMuc2VyaWVzLmRhdGFbcmlnaHRJZF0/LnkpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB4ID0gZm91bmRYLmludmVydChpbnRlcnNlY3QueCk7XG4gICAgICBjb25zdCB5ID0gZm91bmRZLmludmVydChpbnRlcnNlY3QueSk7XG5cbiAgICAgIGlmICh4ICE9PSBudWxsICYmIHggIT09IHVuZGVmaW5lZCAmJiAhaXNOYU4oeCkgJiYgeSAhPT0gbnVsbCAmJiB5ICE9PSB1bmRlZmluZWQgJiYgIWlzTmFOKHkpKSB7XG4gICAgICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgICAgIHBvaW50OiB7eDogZm91bmRYLmludmVydChpbnRlcnNlY3QueCksIHk6IGZvdW5kWS5pbnZlcnQoaW50ZXJzZWN0LnkpfSxcbiAgICAgICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgICAgIHBvaW50OiBudWxsLFxuICAgICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBpbnRlcnNlY3QueCxcbiAgICAgICAgeTogaW50ZXJzZWN0LnksXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiPHN2ZzpwYXRoXG4gIGNsYXNzPVwibGluZVwiXG4gIFthdHRyLmRdPVwicGF0aCB8IGFzeW5jXCJcbiAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5jb2xvclwiXG4gIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwic2VyaWVzLnN0eWxlPy5zdHJva2VEYXNoYXJyYXlcIlxuICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic2VyaWVzLnN0eWxlPy5zdHJva2VXaWR0aFwiXG4gIGZpbGw9XCJub25lXCI+XG48L3N2ZzpwYXRoPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYW5zZm9ybSB8IGFzeW5jIGFzIHRcIj5cbiAgPHN2ZzpjaXJjbGVcbiAgICAqbmdJZj1cInQueCAhPT0gdW5kZWZpbmVkICYmIHQueSE9PSB1bmRlZmluZWRcIlxuICAgIHI9XCIzXCJcbiAgICBbYXR0ci5maWxsXT1cInNlcmllcy5jb2xvclwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJysgdC54ICsnLCAnKyB0LnkgKycpJ1wiXG4gID5cbiAgPC9zdmc6Y2lyY2xlPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNYXJrZXJzKCkgYXMgbWFya2Vyc1wiPlxuICA8c3ZnOmNpcmNsZVxuICAgIGNsYXNzPVwibWFya2VyXCJcbiAgICAqbmdGb3I9XCJsZXQgcG9pbnQgb2YgbWFya2Vyc1wiXG4gICAgW2NsYXNzLmRyYWdnYWJsZS1tYXJrZXJdPVwicG9pbnQ/Lm1hcmtlcj8uZHJhZ2dhYmxlXCJcbiAgICBbYXR0ci5yXT1cInBvaW50Lm1hcmtlci5zdHlsZT8ucmFkaXVzID8/IDVcIlxuICAgIFthdHRyLmZpbGxdPVwicG9pbnQubWFya2VyLnN0eWxlPy5maWxsID8/ICd0cmFuc3BhcmVudCdcIlxuICAgIFthdHRyLnN0cm9rZV09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnN0cm9rZSA/PyAnbm9uZSdcIlxuICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnN0cm9rZVdpZHRoXCJcbiAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInBvaW50Lm1hcmtlci5zdHlsZT8uc3Ryb2tlRGFzaGFycmF5XCJcbiAgICBbYXR0ci5jeF09XCJ4KHBvaW50LngpXCJcbiAgICBbYXR0ci5jeV09XCJ5KHBvaW50LnkpXCJcbiAgPlxuICA8L3N2ZzpjaXJjbGU+XG48L25nLWNvbnRhaW5lcj5cblxuXG5cbiJdfQ==
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvbGluZS9saW5lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Nlcmllcy9saW5lL2xpbmUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFRdkQsTUFBTSxPQUFPLG1CQUNYLFNBQVEsZ0JBQW1CO0lBRzNCLFlBQ3FCLEdBQWlCLEVBQ2pCLEdBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE9BQW1CO1FBRXRDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFOakMsUUFBRyxHQUFILEdBQUcsQ0FBYztRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixZQUFPLEdBQVAsT0FBTyxDQUFZO0lBR3hDLENBQUM7O2dIQVpVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHdGQ3BCaEMsdWtDQW9DQTsyRkRoQmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7U2NhbGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtab29tU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHtMaW5lYXJTZXJpZXNCYXNlfSBmcm9tICcuLi9saW5lYXItc2VyaWVzLWJhc2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdmc6c3ZnW3RldGEtbGluZS1zZXJpZXNdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmUtc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGluZS1zZXJpZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExpbmVTZXJpZXNDb21wb25lbnQ8VCBleHRlbmRzIEJhc2VQb2ludD5cbiAgZXh0ZW5kcyBMaW5lYXJTZXJpZXNCYXNlPFQ+XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2NhbGVTZXJ2aWNlOiBTY2FsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHtcbiAgICBzdXBlcihzdmMsIGNkciwgc2NhbGVTZXJ2aWNlLCB6b29tU2VydmljZSwgZWxlbWVudCk7XG4gIH1cbn1cbiIsIjxzdmc6cGF0aFxuICBjbGFzcz1cImxpbmVcIlxuICBbYXR0ci5kXT1cInBhdGggfCBhc3luY1wiXG4gIFthdHRyLnN0cm9rZV09XCJzZXJpZXMuY29sb3JcIlxuICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlcmllcy5zdHlsZT8uc3Ryb2tlRGFzaGFycmF5XCJcbiAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInNlcmllcy5zdHlsZT8uc3Ryb2tlV2lkdGhcIlxuICBmaWxsPVwibm9uZVwiPlxuPC9zdmc6cGF0aD5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFuc2Zvcm0gfCBhc3luYyBhcyB0XCI+XG4gIDxzdmc6Y2lyY2xlXG4gICAgKm5nSWY9XCJ0LnggIT09IHVuZGVmaW5lZCAmJiB0LnkhPT0gdW5kZWZpbmVkXCJcbiAgICByPVwiM1wiXG4gICAgW2F0dHIuZmlsbF09XCJzZXJpZXMuY29sb3JcIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcrIHQueCArJywgJysgdC55ICsnKSdcIlxuICA+XG4gIDwvc3ZnOmNpcmNsZT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TWFya2VycygpIGFzIG1hcmtlcnNcIj5cbiAgPHN2ZzpjaXJjbGVcbiAgICBjbGFzcz1cIm1hcmtlclwiXG4gICAgKm5nRm9yPVwibGV0IHBvaW50IG9mIG1hcmtlcnNcIlxuICAgIFtjbGFzcy5kcmFnZ2FibGUtbWFya2VyXT1cInBvaW50Py5tYXJrZXI/LmRyYWdnYWJsZVwiXG4gICAgW2F0dHIucl09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnJhZGl1cyA/PyA1XCJcbiAgICBbYXR0ci5maWxsXT1cInBvaW50Lm1hcmtlci5zdHlsZT8uZmlsbCA/PyAndHJhbnNwYXJlbnQnXCJcbiAgICBbYXR0ci5zdHJva2VdPVwicG9pbnQubWFya2VyLnN0eWxlPy5zdHJva2UgPz8gJ25vbmUnXCJcbiAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwicG9pbnQubWFya2VyLnN0eWxlPy5zdHJva2VXaWR0aFwiXG4gICAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnN0cm9rZURhc2hhcnJheVwiXG4gICAgW2F0dHIuY3hdPVwieChwb2ludC54KVwiXG4gICAgW2F0dHIuY3ldPVwieShwb2ludC55KVwiXG4gID5cbiAgPC9zdmc6Y2lyY2xlPlxuPC9uZy1jb250YWluZXI+XG5cblxuXG4iXX0=
|