@tetacom/svg-charts 1.2.3 → 1.2.4
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/chart/chart.component.d.ts +2 -1
- package/chart/chart-container/chart-container.component.d.ts +3 -5
- package/chart/chart-container/series/linear-series-base.d.ts +1 -1
- package/chart/chart-container/series/scatter-series/scatter-series.component.d.ts +0 -1
- package/chart/chart-container/x-axis/x-axis.component.d.ts +2 -4
- package/chart/core/axis/axis.d.ts +3 -0
- package/chart/service/chart.service.d.ts +4 -0
- package/chart/service/scale.service.d.ts +2 -0
- package/esm2020/chart/chart/chart.component.mjs +10 -2
- package/esm2020/chart/chart-container/annotation/annotation.component.mjs +3 -3
- package/esm2020/chart/chart-container/chart-container.component.mjs +10 -12
- package/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +7 -7
- package/esm2020/chart/chart-container/series/area-series/area-series.component.mjs +5 -5
- package/esm2020/chart/chart-container/series/bar/bar-series.component.mjs +5 -5
- package/esm2020/chart/chart-container/series/block-area-series/block-area-series.component.mjs +3 -3
- package/esm2020/chart/chart-container/series/block-series/block-series.component.mjs +3 -3
- package/esm2020/chart/chart-container/series/linear-series-base.mjs +19 -21
- package/esm2020/chart/chart-container/series/scatter-series/scatter-series.component.mjs +3 -3
- package/esm2020/chart/chart-container/x-axis/x-axis.component.mjs +3 -27
- package/esm2020/chart/chart-container/y-axis/y-axis.component.mjs +3 -3
- package/esm2020/chart/core/axis/axis.mjs +7 -1
- package/esm2020/chart/default/default-axis-config.mjs +2 -2
- package/esm2020/chart/directives/zoomable.directive.mjs +4 -3
- package/esm2020/chart/service/brush.service.mjs +16 -13
- package/esm2020/chart/service/chart.service.mjs +6 -1
- package/esm2020/chart/service/scale.service.mjs +134 -1
- package/esm2020/chart/service/zoom.service.mjs +2 -2
- package/fesm2015/tetacom-svg-charts.mjs +233 -99
- package/fesm2015/tetacom-svg-charts.mjs.map +1 -1
- package/fesm2020/tetacom-svg-charts.mjs +225 -98
- package/fesm2020/tetacom-svg-charts.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -105,6 +105,139 @@ export class ScaleService {
|
|
|
105
105
|
bufferSize: 1,
|
|
106
106
|
refCount: true,
|
|
107
107
|
}));
|
|
108
|
+
this.xMap = combineLatest([
|
|
109
|
+
this.chartService.size,
|
|
110
|
+
this.chartService.config,
|
|
111
|
+
this.zoomService.zoomed,
|
|
112
|
+
]).pipe(map((data) => {
|
|
113
|
+
const [size, config, zoom] = data;
|
|
114
|
+
const xAxisMap = new Map();
|
|
115
|
+
const yAxisMap = new Map();
|
|
116
|
+
config.yAxis.map((_, index) => {
|
|
117
|
+
yAxisMap.set(index, Axis.createAxis(AxisOrientation.y, config, index));
|
|
118
|
+
});
|
|
119
|
+
config.xAxis.map((_, index) => {
|
|
120
|
+
xAxisMap.set(index, Axis.createAxis(AxisOrientation.x, config, index));
|
|
121
|
+
});
|
|
122
|
+
const left = Array.from(yAxisMap.values())
|
|
123
|
+
.filter((_) => _.options?.visible && _.options?.opposite)
|
|
124
|
+
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
125
|
+
const right = Array.from(yAxisMap.values())
|
|
126
|
+
.filter((_) => _.options?.visible && _.options?.opposite !== true)
|
|
127
|
+
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
128
|
+
const finalWidth = (size.width || 0) - left - right;
|
|
129
|
+
xAxisMap.forEach((axis) => {
|
|
130
|
+
let domain = axis.extremes;
|
|
131
|
+
if (axis?.options.inverted) {
|
|
132
|
+
domain = [...axis.extremes].reverse();
|
|
133
|
+
}
|
|
134
|
+
let scale = this.scaleMapping
|
|
135
|
+
.get(axis.options.scaleType.type)()
|
|
136
|
+
.domain(domain)
|
|
137
|
+
.range([0, finalWidth - config.bounds.right]);
|
|
138
|
+
if (axis.options.niceTicks) {
|
|
139
|
+
scale.nice();
|
|
140
|
+
}
|
|
141
|
+
if (axis.options.scaleType.type === ScaleType.log) {
|
|
142
|
+
scale.base(axis.options.scaleType.base);
|
|
143
|
+
}
|
|
144
|
+
axis.setScale(scale);
|
|
145
|
+
axis.setOriginDomain(scale.domain());
|
|
146
|
+
const hasCache = this.transformCacheX.has(axis.index);
|
|
147
|
+
const shouldRestore = zoom?.target?.orientation !== AxisOrientation.x ||
|
|
148
|
+
zoom.target?.index !== axis.index;
|
|
149
|
+
if (hasCache && shouldRestore) {
|
|
150
|
+
const restoredTransform = this.transformCacheX.get(axis.index);
|
|
151
|
+
axis.setScale(restoredTransform.rescaleX(scale));
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
if (zoom) {
|
|
155
|
+
const event = zoom.event;
|
|
156
|
+
if (zoom.target?.orientation === AxisOrientation.x) {
|
|
157
|
+
if (xAxisMap.has(zoom.target.index)) {
|
|
158
|
+
const x = xAxisMap.get(zoom.target.index);
|
|
159
|
+
const rescaled = event.transform.rescaleX(x.scale);
|
|
160
|
+
x.setScale(rescaled);
|
|
161
|
+
const axis = xAxisMap.get(zoom.target.index);
|
|
162
|
+
this.transformCacheX.set(axis.index, event.transform);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return xAxisMap;
|
|
167
|
+
}), shareReplay({
|
|
168
|
+
bufferSize: 1,
|
|
169
|
+
refCount: true,
|
|
170
|
+
}));
|
|
171
|
+
this.yMap = combineLatest([
|
|
172
|
+
this.chartService.size,
|
|
173
|
+
this.chartService.config,
|
|
174
|
+
this.zoomService.zoomed,
|
|
175
|
+
]).pipe(map((data) => {
|
|
176
|
+
const [size, config, zoom] = data;
|
|
177
|
+
const xAxisMap = new Map();
|
|
178
|
+
const yAxisMap = new Map();
|
|
179
|
+
config.yAxis.map((_, index) => {
|
|
180
|
+
yAxisMap.set(index, Axis.createAxis(AxisOrientation.y, config, index));
|
|
181
|
+
});
|
|
182
|
+
config.xAxis.map((_, index) => {
|
|
183
|
+
xAxisMap.set(index, Axis.createAxis(AxisOrientation.x, config, index));
|
|
184
|
+
});
|
|
185
|
+
const top = Array.from(xAxisMap.values())
|
|
186
|
+
.filter((_) => _.options?.visible && _.options?.opposite)
|
|
187
|
+
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
188
|
+
const bottom = Array.from(xAxisMap.values())
|
|
189
|
+
.filter((_) => _.options?.visible && _.options?.opposite !== true)
|
|
190
|
+
.reduce((acc, cur) => acc + cur.selfSize, 0);
|
|
191
|
+
const finalHeight = (size.height || 0) -
|
|
192
|
+
top -
|
|
193
|
+
bottom -
|
|
194
|
+
config?.bounds?.top -
|
|
195
|
+
config.bounds?.bottom;
|
|
196
|
+
yAxisMap.forEach((axis) => {
|
|
197
|
+
let domain = axis.extremes;
|
|
198
|
+
if (axis.orientation === AxisOrientation.y) {
|
|
199
|
+
domain = [...axis.extremes].reverse();
|
|
200
|
+
}
|
|
201
|
+
if (axis?.options.inverted) {
|
|
202
|
+
domain = domain.reverse();
|
|
203
|
+
}
|
|
204
|
+
const scale = this.scaleMapping
|
|
205
|
+
.get(axis.options.scaleType.type)()
|
|
206
|
+
.domain(domain)
|
|
207
|
+
.range([config.bounds.top, finalHeight]);
|
|
208
|
+
if (axis.options.niceTicks) {
|
|
209
|
+
scale.nice();
|
|
210
|
+
}
|
|
211
|
+
if (axis.options.scaleType.type === ScaleType.log) {
|
|
212
|
+
scale.base(axis.options.scaleType.base);
|
|
213
|
+
}
|
|
214
|
+
axis.setScale(scale);
|
|
215
|
+
axis.setOriginDomain(scale.domain());
|
|
216
|
+
const hasCache = this.transformCacheY.has(axis.index);
|
|
217
|
+
const shouldRestore = zoom?.target?.orientation !== AxisOrientation.y ||
|
|
218
|
+
zoom.target?.index !== axis.index;
|
|
219
|
+
if (hasCache && shouldRestore) {
|
|
220
|
+
const restoredTransform = this.transformCacheY.get(axis.index);
|
|
221
|
+
axis.setScale(restoredTransform.rescaleY(scale));
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
if (zoom) {
|
|
225
|
+
const event = zoom.event;
|
|
226
|
+
if (zoom.target?.orientation === AxisOrientation.y) {
|
|
227
|
+
if (yAxisMap.has(zoom.target.index)) {
|
|
228
|
+
const y = yAxisMap.get(zoom.target.index);
|
|
229
|
+
const rescaled = event.transform.rescaleY(y.scale);
|
|
230
|
+
y.setScale(rescaled);
|
|
231
|
+
const axis = yAxisMap.get(zoom.target.index);
|
|
232
|
+
this.transformCacheY.set(axis.index, event.transform);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return yAxisMap;
|
|
237
|
+
}), shareReplay({
|
|
238
|
+
bufferSize: 1,
|
|
239
|
+
refCount: true,
|
|
240
|
+
}));
|
|
108
241
|
this.yScaleMap = combineLatest([
|
|
109
242
|
this.chartService.size,
|
|
110
243
|
this.chartService.config,
|
|
@@ -178,4 +311,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
178
311
|
providedIn: 'root',
|
|
179
312
|
}]
|
|
180
313
|
}], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i2.ZoomService }]; } });
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUV6QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRy9ELE9BQU8sRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFjLFdBQVcsRUFBRSxjQUFjLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBTW5ELE1BQU0sT0FBTyxZQUFZO0lBbUJ2QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCO1FBRHhCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBZDFCLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUVuRCxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFrQjthQUM3QyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDO2FBQ3JDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDakMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQzthQUN4QyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQy9CLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FB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dCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHtEM1pvb21FdmVudCwgWm9vbVRyYW5zZm9ybX0gZnJvbSAnZDMnO1xuaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9jb3JlL2F4aXMvYXhpcyc7XG5pbXBvcnQge0F4aXNPcmllbnRhdGlvbn0gZnJvbSAnLi4vbW9kZWwvZW51bS9heGlzLW9yaWVudGF0aW9uJztcbmltcG9ydCB7SUNoYXJ0Q29uZmlnfSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSwgd2l0aExhdGVzdEZyb20sfSBmcm9tICdyeGpzJztcbmltcG9ydCB7SUNoYXJ0RXZlbnR9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtZXZlbnQnO1xuaW1wb3J0IHtab29tU2VydmljZX0gZnJvbSAnLi96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHtTY2FsZVR5cGV9IGZyb20gJy4uL21vZGVsL2VudW0vc2NhbGUtdHlwZSc7XG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY2FsZVNlcnZpY2Uge1xuICBwdWJsaWMgeUF4aXNNYXA6IE9ic2VydmFibGU8TWFwPG51bWJlciwgQXhpcz4+O1xuICBwdWJsaWMgeEF4aXNNYXA6IE9ic2VydmFibGU8TWFwPG51bWJlciwgQXhpcz4+O1xuXG4gIHB1YmxpYyB5U2NhbGVNYXA6IE9ic2VydmFibGU8TWFwPG51bWJlciwgYW55Pj47XG4gIHB1YmxpYyB4U2NhbGVNYXA6IE9ic2VydmFibGU8TWFwPG51bWJlciwgYW55Pj47XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1DYWNoZVggPSBuZXcgTWFwPG51bWJlciwgWm9vbVRyYW5zZm9ybT4oKTtcbiAgcHJpdmF0ZSB0cmFuc2Zvcm1DYWNoZVkgPSBuZXcgTWFwPG51bWJlciwgWm9vbVRyYW5zZm9ybT4oKTtcblxuICBwcml2YXRlIHNjYWxlTWFwcGluZyA9IG5ldyBNYXA8U2NhbGVUeXBlLCBhbnk+KClcbiAgICAuc2V0KFNjYWxlVHlwZS5saW5lYXIsIGQzLnNjYWxlTGluZWFyKVxuICAgIC5zZXQoU2NhbGVUeXBlLnRpbWUsIGQzLnNjYWxlVGltZSlcbiAgICAuc2V0KFNjYWxlVHlwZS5jYXRlZ29yeSwgZDMuc2NhbGVPcmRpbmFsKVxuICAgIC5zZXQoU2NhbGVUeXBlLmxvZywgZDMuc2NhbGVMb2cpXG4gICAgLnNldChTY2FsZVR5cGUuc3ltbG9nLCBkMy5zY2FsZVN5bWxvZylcbiAgICAuc2V0KFNjYWxlVHlwZS5wb3csIGQzLnNjYWxlUG93KVxuICAgIC5zZXQoU2NhbGVUeXBlLnNxcnQsIGQzLnNjYWxlU3FydCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZVxuICApIHtcblxuICAgIHRoaXMueEF4aXNNYXAgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnNpemUsXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5jb25maWcsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoZGF0YTogW0RPTVJlY3RSZWFkT25seSwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbLCBjb25maWddID0gZGF0YTtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIEF4aXM+KCk7XG4gICAgICAgIGNvbmZpZy54QXhpcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgbWFwLnNldChpbmRleCwgQXhpcy5jcmVhdGVBeGlzKEF4aXNPcmllbnRhdGlvbi54LCBjb25maWcsIGluZGV4KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy55QXhpc01hcCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jaGFydFNlcnZpY2Uuc2l6ZSxcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZyxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdFJlYWRPbmx5LCBJQ2hhcnRDb25maWddKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPG51bWJlciwgQXhpcz4oKTtcbiAgICAgICAgY29uZmlnLnlBeGlzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICBtYXAuc2V0KGluZGV4LCBBeGlzLmNyZWF0ZUF4aXMoQXhpc09yaWVudGF0aW9uLnksIGNvbmZpZywgaW5kZXgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoe1xuICAgICAgICBidWZmZXJTaXplOiAxLFxuICAgICAgICByZWZDb3VudDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMueFNjYWxlTWFwID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5zaXplLFxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UuY29uZmlnLFxuICAgICAgdGhpcy56b29tU2VydmljZS56b29tZWQsXG4gICAgXSkucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMueUF4aXNNYXAsIHRoaXMueEF4aXNNYXApLFxuICAgICAgbWFwKFxuICAgICAgICAoXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgW0RPTVJlY3RSZWFkT25seSwgSUNoYXJ0Q29uZmlnLCBJQ2hhcnRFdmVudDxBeGlzPl0sXG4gICAgICAgICAgICBNYXA8bnVtYmVyLCBBeGlzPixcbiAgICAgICAgICAgIE1hcDxudW1iZXIsIEF4aXM+XG4gICAgICAgICAgXVxuICAgICAgICApID0+IHtcbiAgICAgICAgICBjb25zdCBbW3NpemUsIGNvbmZpZywgem9vbV0sIHlBeGVzLCB4QXhlc10gPSBkYXRhO1xuXG4gICAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcblxuICAgICAgICAgIGNvbnN0IGxlZnQgPSBbLi4ueUF4ZXMudmFsdWVzKCldXG4gICAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnM/LnZpc2libGUgJiYgXy5vcHRpb25zPy5vcHBvc2l0ZSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIuc2VsZlNpemUsIDApO1xuXG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBbLi4ueUF4ZXMudmFsdWVzKCldXG4gICAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnM/LnZpc2libGUgJiYgXy5vcHRpb25zPy5vcHBvc2l0ZSAhPT0gdHJ1ZSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIuc2VsZlNpemUsIDApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxXaWR0aCA9IChzaXplLndpZHRoIHx8IDApIC0gbGVmdCAtIHJpZ2h0O1xuXG4gICAgICAgICAgeEF4ZXMuZm9yRWFjaCgoYXhpcykgPT4ge1xuICAgICAgICAgICAgbGV0IGRvbWFpbiA9IGF4aXMuZXh0cmVtZXM7XG5cbiAgICAgICAgICAgIGlmIChheGlzPy5vcHRpb25zLmludmVydGVkKSB7XG4gICAgICAgICAgICAgIGRvbWFpbiA9IFsuLi5heGlzLmV4dHJlbWVzXS5yZXZlcnNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzY2FsZSA9IHRoaXMuc2NhbGVNYXBwaW5nXG4gICAgICAgICAgICAgIC5nZXQoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlKSgpXG4gICAgICAgICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAgICAgICAucmFuZ2UoWzAsIGZpbmFsV2lkdGggLSBjb25maWcuYm91bmRzLnJpZ2h0XSk7XG5cbiAgICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMubmljZVRpY2tzKSB7XG4gICAgICAgICAgICAgIHNjYWxlLm5pY2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGF4aXMub3B0aW9ucy5zY2FsZVR5cGUudHlwZSA9PT0gU2NhbGVUeXBlLmxvZykge1xuICAgICAgICAgICAgICBzY2FsZS5iYXNlKGF4aXMub3B0aW9ucy5zY2FsZVR5cGUuYmFzZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWFwLnNldChheGlzLmluZGV4LCBzY2FsZSk7XG4gICAgICAgICAgICBheGlzLnNldE9yaWdpbkRvbWFpbihzY2FsZS5kb21haW4oKSk7XG5cblxuICAgICAgICAgICAgY29uc3QgaGFzQ2FjaGUgPSB0aGlzLnRyYW5zZm9ybUNhY2hlWC5oYXMoYXhpcy5pbmRleCk7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRSZXN0b3JlID1cbiAgICAgICAgICAgICAgem9vbT8udGFyZ2V0Py5vcmllbnRhdGlvbiAhPT0gQXhpc09yaWVudGF0aW9uLnggfHxcbiAgICAgICAgICAgICAgem9vbS50YXJnZXQ/LmluZGV4ICE9PSBheGlzLmluZGV4O1xuXG4gICAgICAgICAgICBpZiAoaGFzQ2FjaGUgJiYgc2hvdWxkUmVzdG9yZSkge1xuICAgICAgICAgICAgICBjb25zdCByZXN0b3JlZFRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtQ2FjaGVYLmdldChheGlzLmluZGV4KTtcbiAgICAgICAgICAgICAgbWFwLnNldChheGlzLmluZGV4LCByZXN0b3JlZFRyYW5zZm9ybS5yZXNjYWxlWChzY2FsZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHpvb20pIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gem9vbS5ldmVudCBhcyBEM1pvb21FdmVudDxhbnksIGFueT47XG5cbiAgICAgICAgICAgIGlmICh6b29tLnRhcmdldD8ub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54KSB7XG5cbiAgICAgICAgICAgICAgaWYobWFwLmhhcyh6b29tLnRhcmdldC5pbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2NhbGUgPSBtYXAuZ2V0KHpvb20udGFyZ2V0LmluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNjYWxlZCA9IGV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWChjdXJyZW50U2NhbGUpO1xuICAgICAgICAgICAgICAgIG1hcC5zZXQoem9vbS50YXJnZXQuaW5kZXgsIHJlc2NhbGVkKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGF4aXMgPSB4QXhlcy5nZXQoem9vbS50YXJnZXQuaW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ2FjaGVYLnNldChheGlzLmluZGV4LCBldmVudC50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy55U2NhbGVNYXAgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnNpemUsXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5jb25maWcsXG4gICAgICB0aGlzLnpvb21TZXJ2aWNlLnpvb21lZCxcbiAgICBdKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy55QXhpc01hcCwgdGhpcy54QXhpc01hcCksXG4gICAgICBtYXAoXG4gICAgICAgIChcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICBbRE9NUmVjdFJlYWRPbmx5LCBJQ2hhcnRDb25maWcsIElDaGFydEV2ZW50PEF4aXM+XSxcbiAgICAgICAgICAgIE1hcDxudW1iZXIsIEF4aXM+LFxuICAgICAgICAgICAgTWFwPG51bWJlciwgQXhpcz5cbiAgICAgICAgICBdXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IFtbc2l6ZSwgY29uZmlnLCB6b29tXSwgeUF4ZXMsIHhBeGVzXSA9IGRhdGE7XG5cbiAgICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPG51bWJlciwgYW55PigpO1xuXG5cbiAgICAgICAgICBjb25zdCB0b3AgPSBbLi4ueEF4ZXMudmFsdWVzKCldXG4gICAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnM/LnZpc2libGUgJiYgXy5vcHRpb25zPy5vcHBvc2l0ZSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIuc2VsZlNpemUsIDApO1xuXG4gICAgICAgICAgY29uc3QgYm90dG9tID0gWy4uLnhBeGVzLnZhbHVlcygpXVxuICAgICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zPy52aXNpYmxlICYmIF8ub3B0aW9ucz8ub3Bwb3NpdGUgIT09IHRydWUpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLnNlbGZTaXplLCAwKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsSGVpZ2h0ID1cbiAgICAgICAgICAgIChzaXplLmhlaWdodCB8fCAwKSAtXG4gICAgICAgICAgICB0b3AgLVxuICAgICAgICAgICAgYm90dG9tIC1cbiAgICAgICAgICAgIGNvbmZpZz8uYm91bmRzPy50b3AgLVxuICAgICAgICAgICAgY29uZmlnLmJvdW5kcz8uYm90dG9tO1xuXG4gICAgICAgICAgeUF4ZXMuZm9yRWFjaCgoYXhpcykgPT4ge1xuICAgICAgICAgICAgbGV0IGRvbWFpbiA9IGF4aXMuZXh0cmVtZXM7XG5cbiAgICAgICAgICAgIGlmIChheGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueSkge1xuICAgICAgICAgICAgICBkb21haW4gPSBbLi4uYXhpcy5leHRyZW1lc10ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXhpcz8ub3B0aW9ucy5pbnZlcnRlZCkge1xuICAgICAgICAgICAgICBkb21haW4gPSBkb21haW4ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMuc2NhbGVNYXBwaW5nXG4gICAgICAgICAgICAgIC5nZXQoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlKSgpXG4gICAgICAgICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAgICAgICAucmFuZ2UoW2NvbmZpZy5ib3VuZHMudG9wLCBmaW5hbEhlaWdodF0pO1xuXG4gICAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLm5pY2VUaWNrcykge1xuICAgICAgICAgICAgICBzY2FsZS5uaWNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5sb2cpIHtcbiAgICAgICAgICAgICAgc2NhbGUuYmFzZShheGlzLm9wdGlvbnMuc2NhbGVUeXBlLmJhc2UpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1hcC5zZXQoYXhpcy5pbmRleCwgc2NhbGUpO1xuICAgICAgICAgICAgYXhpcy5zZXRPcmlnaW5Eb21haW4oc2NhbGUuZG9tYWluKCkpO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNDYWNoZSA9IHRoaXMudHJhbnNmb3JtQ2FjaGVZLmhhcyhheGlzLmluZGV4KTtcblxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUmVzdG9yZSA9XG4gICAgICAgICAgICAgIHpvb20/LnRhcmdldD8ub3JpZW50YXRpb24gIT09IEF4aXNPcmllbnRhdGlvbi55IHx8XG4gICAgICAgICAgICAgIHpvb20udGFyZ2V0Py5pbmRleCAhPT0gYXhpcy5pbmRleDtcblxuICAgICAgICAgICAgaWYgKGhhc0NhY2hlICYmIHNob3VsZFJlc3RvcmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdG9yZWRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybUNhY2hlWS5nZXQoYXhpcy5pbmRleCk7XG4gICAgICAgICAgICAgIG1hcC5zZXQoYXhpcy5pbmRleCwgcmVzdG9yZWRUcmFuc2Zvcm0ucmVzY2FsZVkoc2NhbGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh6b29tKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHpvb20uZXZlbnQgYXMgRDNab29tRXZlbnQ8YW55LCBhbnk+O1xuXG4gICAgICAgICAgICBpZiAoem9vbS50YXJnZXQ/Lm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueSkge1xuXG4gICAgICAgICAgICAgIGlmKG1hcC5oYXMoem9vbS50YXJnZXQuaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNjYWxlID0gbWFwLmdldCh6b29tLnRhcmdldC5pbmRleCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNjYWxlZCA9IGV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWShjdXJyZW50U2NhbGUpO1xuICAgICAgICAgICAgICAgIG1hcC5zZXQoem9vbS50YXJnZXQuaW5kZXgsIHJlc2NhbGVkKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGF4aXMgPSB5QXhlcy5nZXQoem9vbS50YXJnZXQuaW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ2FjaGVZLnNldChheGlzLmluZGV4LCBldmVudC50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUV6QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRy9ELE9BQU8sRUFBQyxhQUFhLEVBQVUsR0FBRyxFQUFjLFdBQVcsRUFBRSxjQUFjLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFHMUYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBTW5ELE1BQU0sT0FBTyxZQUFZO0lBc0J2QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCO1FBRHhCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBZDFCLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUVuRCxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFrQjthQUM3QyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDO2FBQ3JDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDakMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQzthQUN4QyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQy9CLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FB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Q1YsVUFBVSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7eUdBN2JVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHtEM1pvb21FdmVudCwgWm9vbVRyYW5zZm9ybX0gZnJvbSAnZDMnO1xuaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9jb3JlL2F4aXMvYXhpcyc7XG5pbXBvcnQge0F4aXNPcmllbnRhdGlvbn0gZnJvbSAnLi4vbW9kZWwvZW51bS9heGlzLW9yaWVudGF0aW9uJztcbmltcG9ydCB7SUNoYXJ0Q29uZmlnfSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSAnLi9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCB3aXRoTGF0ZXN0RnJvbSx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJQ2hhcnRFdmVudH0gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1ldmVudCc7XG5pbXBvcnQge1pvb21TZXJ2aWNlfSBmcm9tICcuL3pvb20uc2VydmljZSc7XG5pbXBvcnQge1NjYWxlVHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS9zY2FsZS10eXBlJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjYWxlU2VydmljZSB7XG4gIHB1YmxpYyB5QXhpc01hcDogT2JzZXJ2YWJsZTxNYXA8bnVtYmVyLCBBeGlzPj47XG4gIHB1YmxpYyB4QXhpc01hcDogT2JzZXJ2YWJsZTxNYXA8bnVtYmVyLCBBeGlzPj47XG5cbiAgcHVibGljIHlNYXA6IE9ic2VydmFibGU8TWFwPG51bWJlciwgQXhpcz4+O1xuICBwdWJsaWMgeE1hcDogT2JzZXJ2YWJsZTxNYXA8bnVtYmVyLCBBeGlzPj47XG5cbiAgcHVibGljIHlTY2FsZU1hcDogT2JzZXJ2YWJsZTxNYXA8bnVtYmVyLCBhbnk+PjtcbiAgcHVibGljIHhTY2FsZU1hcDogT2JzZXJ2YWJsZTxNYXA8bnVtYmVyLCBhbnk+PjtcblxuICBwcml2YXRlIHRyYW5zZm9ybUNhY2hlWCA9IG5ldyBNYXA8bnVtYmVyLCBab29tVHJhbnNmb3JtPigpO1xuICBwcml2YXRlIHRyYW5zZm9ybUNhY2hlWSA9IG5ldyBNYXA8bnVtYmVyLCBab29tVHJhbnNmb3JtPigpO1xuXG4gIHByaXZhdGUgc2NhbGVNYXBwaW5nID0gbmV3IE1hcDxTY2FsZVR5cGUsIGFueT4oKVxuICAgIC5zZXQoU2NhbGVUeXBlLmxpbmVhciwgZDMuc2NhbGVMaW5lYXIpXG4gICAgLnNldChTY2FsZVR5cGUudGltZSwgZDMuc2NhbGVUaW1lKVxuICAgIC5zZXQoU2NhbGVUeXBlLmNhdGVnb3J5LCBkMy5zY2FsZU9yZGluYWwpXG4gICAgLnNldChTY2FsZVR5cGUubG9nLCBkMy5zY2FsZUxvZylcbiAgICAuc2V0KFNjYWxlVHlwZS5zeW1sb2csIGQzLnNjYWxlU3ltbG9nKVxuICAgIC5zZXQoU2NhbGVUeXBlLnBvdywgZDMuc2NhbGVQb3cpXG4gICAgLnNldChTY2FsZVR5cGUuc3FydCwgZDMuc2NhbGVTcXJ0KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlXG4gICkge1xuXG4gICAgdGhpcy54QXhpc01hcCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jaGFydFNlcnZpY2Uuc2l6ZSxcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZyxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdFJlYWRPbmx5LCBJQ2hhcnRDb25maWddKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPG51bWJlciwgQXhpcz4oKTtcbiAgICAgICAgY29uZmlnLnhBeGlzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICBtYXAuc2V0KGluZGV4LCBBeGlzLmNyZWF0ZUF4aXMoQXhpc09yaWVudGF0aW9uLngsIGNvbmZpZywgaW5kZXgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnlBeGlzTWFwID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5zaXplLFxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UuY29uZmlnLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKGRhdGE6IFtET01SZWN0UmVhZE9ubHksIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgWywgY29uZmlnXSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8bnVtYmVyLCBBeGlzPigpO1xuXG4gICAgICAgIGNvbmZpZy55QXhpcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgbWFwLnNldChpbmRleCwgQXhpcy5jcmVhdGVBeGlzKEF4aXNPcmllbnRhdGlvbi55LCBjb25maWcsIGluZGV4KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnhTY2FsZU1hcCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jaGFydFNlcnZpY2Uuc2l6ZSxcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZyxcbiAgICAgIHRoaXMuem9vbVNlcnZpY2Uuem9vbWVkLFxuICAgIF0pLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnlBeGlzTWFwLCB0aGlzLnhBeGlzTWFwKSxcbiAgICAgIG1hcChcbiAgICAgICAgKFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIFtET01SZWN0UmVhZE9ubHksIElDaGFydENvbmZpZywgSUNoYXJ0RXZlbnQ8QXhpcz5dLFxuICAgICAgICAgICAgTWFwPG51bWJlciwgQXhpcz4sXG4gICAgICAgICAgICBNYXA8bnVtYmVyLCBBeGlzPlxuICAgICAgICAgIF1cbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgY29uc3QgW1tzaXplLCBjb25maWcsIHpvb21dLCB5QXhlcywgeEF4ZXNdID0gZGF0YTtcblxuICAgICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8bnVtYmVyLCBhbnk+KCk7XG5cbiAgICAgICAgICBjb25zdCBsZWZ0ID0gWy4uLnlBeGVzLnZhbHVlcygpXVxuICAgICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zPy52aXNpYmxlICYmIF8ub3B0aW9ucz8ub3Bwb3NpdGUpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLnNlbGZTaXplLCAwKTtcblxuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gWy4uLnlBeGVzLnZhbHVlcygpXVxuICAgICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zPy52aXNpYmxlICYmIF8ub3B0aW9ucz8ub3Bwb3NpdGUgIT09IHRydWUpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLnNlbGZTaXplLCAwKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsV2lkdGggPSAoc2l6ZS53aWR0aCB8fCAwKSAtIGxlZnQgLSByaWdodDtcblxuICAgICAgICAgIHhBeGVzLmZvckVhY2goKGF4aXMpID0+IHtcbiAgICAgICAgICAgIGxldCBkb21haW4gPSBheGlzLmV4dHJlbWVzO1xuXG4gICAgICAgICAgICBpZiAoYXhpcz8ub3B0aW9ucy5pbnZlcnRlZCkge1xuICAgICAgICAgICAgICBkb21haW4gPSBbLi4uYXhpcy5leHRyZW1lc10ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc2NhbGUgPSB0aGlzLnNjYWxlTWFwcGluZ1xuICAgICAgICAgICAgICAuZ2V0KGF4aXMub3B0aW9ucy5zY2FsZVR5cGUudHlwZSkoKVxuICAgICAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgICAgLnJhbmdlKFswLCBmaW5hbFdpZHRoIC0gY29uZmlnLmJvdW5kcy5yaWdodF0pO1xuXG4gICAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLm5pY2VUaWNrcykge1xuICAgICAgICAgICAgICBzY2FsZS5uaWNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5sb2cpIHtcbiAgICAgICAgICAgICAgc2NhbGUuYmFzZShheGlzLm9wdGlvbnMuc2NhbGVUeXBlLmJhc2UpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1hcC5zZXQoYXhpcy5pbmRleCwgc2NhbGUpO1xuICAgICAgICAgICAgYXhpcy5zZXRPcmlnaW5Eb21haW4oc2NhbGUuZG9tYWluKCkpO1xuXG5cbiAgICAgICAgICAgIGNvbnN0IGhhc0NhY2hlID0gdGhpcy50cmFuc2Zvcm1DYWNoZVguaGFzKGF4aXMuaW5kZXgpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUmVzdG9yZSA9XG4gICAgICAgICAgICAgIHpvb20/LnRhcmdldD8ub3JpZW50YXRpb24gIT09IEF4aXNPcmllbnRhdGlvbi54IHx8XG4gICAgICAgICAgICAgIHpvb20udGFyZ2V0Py5pbmRleCAhPT0gYXhpcy5pbmRleDtcblxuICAgICAgICAgICAgaWYgKGhhc0NhY2hlICYmIHNob3VsZFJlc3RvcmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdG9yZWRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybUNhY2hlWC5nZXQoYXhpcy5pbmRleCk7XG4gICAgICAgICAgICAgIG1hcC5zZXQoYXhpcy5pbmRleCwgcmVzdG9yZWRUcmFuc2Zvcm0ucmVzY2FsZVgoc2NhbGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh6b29tKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHpvb20uZXZlbnQgYXMgRDNab29tRXZlbnQ8YW55LCBhbnk+O1xuXG4gICAgICAgICAgICBpZiAoem9vbS50YXJnZXQ/Lm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCkge1xuXG4gICAgICAgICAgICAgIGlmIChtYXAuaGFzKHpvb20udGFyZ2V0LmluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTY2FsZSA9IG1hcC5nZXQoem9vbS50YXJnZXQuaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2NhbGVkID0gZXZlbnQudHJhbnNmb3JtLnJlc2NhbGVYKGN1cnJlbnRTY2FsZSk7XG4gICAgICAgICAgICAgICAgbWFwLnNldCh6b29tLnRhcmdldC5pbmRleCwgcmVzY2FsZWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYXhpcyA9IHhBeGVzLmdldCh6b29tLnRhcmdldC5pbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1DYWNoZVguc2V0KGF4aXMuaW5kZXgsIGV2ZW50LnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cblxuICAgIHRoaXMueE1hcCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jaGFydFNlcnZpY2Uuc2l6ZSxcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZyxcbiAgICAgIHRoaXMuem9vbVNlcnZpY2Uuem9vbWVkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKGRhdGE6IFtET01SZWN0UmVhZE9ubHksIElDaGFydENvbmZpZywgSUNoYXJ0RXZlbnQ8QXhpcz5dKSA9PiB7XG5cbiAgICAgICAgY29uc3QgW3NpemUsIGNvbmZpZywgem9vbV0gPSBkYXRhO1xuXG4gICAgICAgIGNvbnN0IHhBeGlzTWFwID0gbmV3IE1hcDxudW1iZXIsIEF4aXM+KCk7XG4gICAgICAgIGNvbnN0IHlBeGlzTWFwID0gbmV3IE1hcDxudW1iZXIsIEF4aXM+KCk7XG5cbiAgICAgICAgY29uZmlnLnlBeGlzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICB5QXhpc01hcC5zZXQoaW5kZXgsIEF4aXMuY3JlYXRlQXhpcyhBeGlzT3JpZW50YXRpb24ueSwgY29uZmlnLCBpbmRleCkpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGNvbmZpZy54QXhpcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgeEF4aXNNYXAuc2V0KGluZGV4LCBBeGlzLmNyZWF0ZUF4aXMoQXhpc09yaWVudGF0aW9uLngsIGNvbmZpZywgaW5kZXgpKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBjb25zdCBsZWZ0ID0gQXJyYXkuZnJvbSh5QXhpc01hcC52YWx1ZXMoKSlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnM/LnZpc2libGUgJiYgXy5vcHRpb25zPy5vcHBvc2l0ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLnNlbGZTaXplLCAwKTtcblxuICAgICAgICBjb25zdCByaWdodCA9IEFycmF5LmZyb20oeUF4aXNNYXAudmFsdWVzKCkpXG4gICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zPy52aXNpYmxlICYmIF8ub3B0aW9ucz8ub3Bwb3NpdGUgIT09IHRydWUpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ci5zZWxmU2l6ZSwgMCk7XG5cbiAgICAgICAgY29uc3QgZmluYWxXaWR0aCA9IChzaXplLndpZHRoIHx8IDApIC0gbGVmdCAtIHJpZ2h0O1xuXG4gICAgICAgIHhBeGlzTWFwLmZvckVhY2goKGF4aXMpID0+IHtcbiAgICAgICAgICBsZXQgZG9tYWluID0gYXhpcy5leHRyZW1lcztcblxuICAgICAgICAgIGlmIChheGlzPy5vcHRpb25zLmludmVydGVkKSB7XG4gICAgICAgICAgICBkb21haW4gPSBbLi4uYXhpcy5leHRyZW1lc10ucmV2ZXJzZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBzY2FsZSA9IHRoaXMuc2NhbGVNYXBwaW5nXG4gICAgICAgICAgICAuZ2V0KGF4aXMub3B0aW9ucy5zY2FsZVR5cGUudHlwZSkoKVxuICAgICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgICAucmFuZ2UoWzAsIGZpbmFsV2lkdGggLSBjb25maWcuYm91bmRzLnJpZ2h0XSk7XG5cbiAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLm5pY2VUaWNrcykge1xuICAgICAgICAgICAgc2NhbGUubmljZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5sb2cpIHtcbiAgICAgICAgICAgIHNjYWxlLmJhc2UoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS5iYXNlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGF4aXMuc2V0U2NhbGUoc2NhbGUpO1xuICAgICAgICAgIGF4aXMuc2V0T3JpZ2luRG9tYWluKHNjYWxlLmRvbWFpbigpKTtcblxuXG4gICAgICAgICAgY29uc3QgaGFzQ2FjaGUgPSB0aGlzLnRyYW5zZm9ybUNhY2hlWC5oYXMoYXhpcy5pbmRleCk7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkUmVzdG9yZSA9XG4gICAgICAgICAgICB6b29tPy50YXJnZXQ/Lm9yaWVudGF0aW9uICE9PSBBeGlzT3JpZW50YXRpb24ueCB8fFxuICAgICAgICAgICAgem9vbS50YXJnZXQ/LmluZGV4ICE9PSBheGlzLmluZGV4O1xuXG4gICAgICAgICAgaWYgKGhhc0NhY2hlICYmIHNob3VsZFJlc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RvcmVkVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm1DYWNoZVguZ2V0KGF4aXMuaW5kZXgpO1xuICAgICAgICAgICAgYXhpcy5zZXRTY2FsZShyZXN0b3JlZFRyYW5zZm9ybS5yZXNjYWxlWChzY2FsZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHpvb20pIHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IHpvb20uZXZlbnQgYXMgRDNab29tRXZlbnQ8YW55LCBhbnk+O1xuXG4gICAgICAgICAgaWYgKHpvb20udGFyZ2V0Py5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHtcblxuICAgICAgICAgICAgaWYgKHhBeGlzTWFwLmhhcyh6b29tLnRhcmdldC5pbmRleCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgeCA9IHhBeGlzTWFwLmdldCh6b29tLnRhcmdldC5pbmRleCk7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc2NhbGVkID0gZXZlbnQudHJhbnNmb3JtLnJlc2NhbGVYKHguc2NhbGUpO1xuICAgICAgICAgICAgICB4LnNldFNjYWxlKHJlc2NhbGVkKTtcblxuICAgICAgICAgICAgICBjb25zdCBheGlzID0geEF4aXNNYXAuZ2V0KHpvb20udGFyZ2V0LmluZGV4KTtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1DYWNoZVguc2V0KGF4aXMuaW5kZXgsIGV2ZW50LnRyYW5zZm9ybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHhBeGlzTWFwXG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgIClcblxuXG4gICAgdGhpcy55TWFwID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5zaXplLFxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UuY29uZmlnLFxuICAgICAgdGhpcy56b29tU2VydmljZS56b29tZWQsXG4gICAgXSkucGlwZShcblxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdFJlYWRPbmx5LCBJQ2hhcnRDb25maWcsIElDaGFydEV2ZW50PEF4aXM+XSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IFtzaXplLCBjb25maWcsIHpvb21dID0gZGF0YTtcblxuICAgICAgICBjb25zdCB4QXhpc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBBeGlzPigpO1xuICAgICAgICBjb25zdCB5QXhpc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBBeGlzPigpO1xuXG4gICAgICAgIGNvbmZpZy55QXhpcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgeUF4aXNNYXAuc2V0KGluZGV4LCBBeGlzLmNyZWF0ZUF4aXMoQXhpc09yaWVudGF0aW9uLnksIGNvbmZpZywgaW5kZXgpKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBjb25maWcueEF4aXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHhBeGlzTWFwLnNldChpbmRleCwgQXhpcy5jcmVhdGVBeGlzKEF4aXNPcmllbnRhdGlvbi54LCBjb25maWcsIGluZGV4KSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgY29uc3QgdG9wID0gQXJyYXkuZnJvbSh4QXhpc01hcC52YWx1ZXMoKSlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnM/LnZpc2libGUgJiYgXy5vcHRpb25zPy5vcHBvc2l0ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLnNlbGZTaXplLCAwKTtcblxuICAgICAgICBjb25zdCBib3R0b20gPSBBcnJheS5mcm9tKHhBeGlzTWFwLnZhbHVlcygpKVxuICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucz8udmlzaWJsZSAmJiBfLm9wdGlvbnM/Lm9wcG9zaXRlICE9PSB0cnVlKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIuc2VsZlNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IGZpbmFsSGVpZ2h0ID1cbiAgICAgICAgICAoc2l6ZS5oZWlnaHQgfHwgMCkgLVxuICAgICAgICAgIHRvcCAtXG4gICAgICAgICAgYm90dG9tIC1cbiAgICAgICAgICBjb25maWc/LmJvdW5kcz8udG9wIC1cbiAgICAgICAgICBjb25maWcuYm91bmRzPy5ib3R0b207XG5cbiAgICAgICAgeUF4aXNNYXAuZm9yRWFjaCgoYXhpcykgPT4ge1xuICAgICAgICAgIGxldCBkb21haW4gPSBheGlzLmV4dHJlbWVzO1xuXG4gICAgICAgICAgaWYgKGF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICAgICAgICBkb21haW4gPSBbLi4uYXhpcy5leHRyZW1lc10ucmV2ZXJzZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChheGlzPy5vcHRpb25zLmludmVydGVkKSB7XG4gICAgICAgICAgICBkb21haW4gPSBkb21haW4ucmV2ZXJzZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5zY2FsZU1hcHBpbmdcbiAgICAgICAgICAgIC5nZXQoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlKSgpXG4gICAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIC5yYW5nZShbY29uZmlnLmJvdW5kcy50b3AsIGZpbmFsSGVpZ2h0XSk7XG5cbiAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLm5pY2VUaWNrcykge1xuICAgICAgICAgICAgc2NhbGUubmljZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5sb2cpIHtcbiAgICAgICAgICAgIHNjYWxlLmJhc2UoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS5iYXNlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGF4aXMuc2V0U2NhbGUoc2NhbGUpO1xuICAgICAgICAgIGF4aXMuc2V0T3JpZ2luRG9tYWluKHNjYWxlLmRvbWFpbigpKTtcblxuICAgICAgICAgIGNvbnN0IGhhc0NhY2hlID0gdGhpcy50cmFuc2Zvcm1DYWNoZVkuaGFzKGF4aXMuaW5kZXgpO1xuXG4gICAgICAgICAgY29uc3Qgc2hvdWxkUmVzdG9yZSA9XG4gICAgICAgICAgICB6b29tPy50YXJnZXQ/Lm9yaWVudGF0aW9uICE9PSBBeGlzT3JpZW50YXRpb24ueSB8fFxuICAgICAgICAgICAgem9vbS50YXJnZXQ/LmluZGV4ICE9PSBheGlzLmluZGV4O1xuXG4gICAgICAgICAgaWYgKGhhc0NhY2hlICYmIHNob3VsZFJlc3RvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RvcmVkVHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm1DYWNoZVkuZ2V0KGF4aXMuaW5kZXgpO1xuICAgICAgICAgICAgYXhpcy5zZXRTY2FsZShyZXN0b3JlZFRyYW5zZm9ybS5yZXNjYWxlWShzY2FsZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHpvb20pIHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IHpvb20uZXZlbnQgYXMgRDNab29tRXZlbnQ8YW55LCBhbnk+O1xuXG4gICAgICAgICAgaWYgKHpvb20udGFyZ2V0Py5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcblxuICAgICAgICAgICAgaWYgKHlBeGlzTWFwLmhhcyh6b29tLnRhcmdldC5pbmRleCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgeSA9IHlBeGlzTWFwLmdldCh6b29tLnRhcmdldC5pbmRleCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzY2FsZWQgPSBldmVudC50cmFuc2Zvcm0ucmVzY2FsZVkoeS5zY2FsZSk7XG4gICAgICAgICAgICAgIHkuc2V0U2NhbGUocmVzY2FsZWQpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGF4aXMgPSB5QXhpc01hcC5nZXQoem9vbS50YXJnZXQuaW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNhY2hlWS5zZXQoYXhpcy5pbmRleCwgZXZlbnQudHJhbnNmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geUF4aXNNYXBcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoe1xuICAgICAgICBidWZmZXJTaXplOiAxLFxuICAgICAgICByZWZDb3VudDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgdGhpcy55U2NhbGVNYXAgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnNpemUsXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5jb25maWcsXG4gICAgICB0aGlzLnpvb21TZXJ2aWNlLnpvb21lZCxcbiAgICBdKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy55QXhpc01hcCwgdGhpcy54QXhpc01hcCksXG4gICAgICBtYXAoXG4gICAgICAgIChcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICBbRE9NUmVjdFJlYWRPbmx5LCBJQ2hhcnRDb25maWcsIElDaGFydEV2ZW50PEF4aXM+XSxcbiAgICAgICAgICAgIE1hcDxudW1iZXIsIEF4aXM+LFxuICAgICAgICAgICAgTWFwPG51bWJlciwgQXhpcz5cbiAgICAgICAgICBdXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IFtbc2l6ZSwgY29uZmlnLCB6b29tXSwgeUF4ZXMsIHhBeGVzXSA9IGRhdGE7XG5cbiAgICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPG51bWJlciwgYW55PigpO1xuXG5cbiAgICAgICAgICBjb25zdCB0b3AgPSBbLi4ueEF4ZXMudmFsdWVzKCldXG4gICAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnM/LnZpc2libGUgJiYgXy5vcHRpb25zPy5vcHBvc2l0ZSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIuc2VsZlNpemUsIDApO1xuXG4gICAgICAgICAgY29uc3QgYm90dG9tID0gWy4uLnhBeGVzLnZhbHVlcygpXVxuICAgICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zPy52aXNpYmxlICYmIF8ub3B0aW9ucz8ub3Bwb3NpdGUgIT09IHRydWUpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLnNlbGZTaXplLCAwKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsSGVpZ2h0ID1cbiAgICAgICAgICAgIChzaXplLmhlaWdodCB8fCAwKSAtXG4gICAgICAgICAgICB0b3AgLVxuICAgICAgICAgICAgYm90dG9tIC1cbiAgICAgICAgICAgIGNvbmZpZz8uYm91bmRzPy50b3AgLVxuICAgICAgICAgICAgY29uZmlnLmJvdW5kcz8uYm90dG9tO1xuXG4gICAgICAgICAgeUF4ZXMuZm9yRWFjaCgoYXhpcykgPT4ge1xuICAgICAgICAgICAgbGV0IGRvbWFpbiA9IGF4aXMuZXh0cmVtZXM7XG5cbiAgICAgICAgICAgIGlmIChheGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueSkge1xuICAgICAgICAgICAgICBkb21haW4gPSBbLi4uYXhpcy5leHRyZW1lc10ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXhpcz8ub3B0aW9ucy5pbnZlcnRlZCkge1xuICAgICAgICAgICAgICBkb21haW4gPSBkb21haW4ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMuc2NhbGVNYXBwaW5nXG4gICAgICAgICAgICAgIC5nZXQoYXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlKSgpXG4gICAgICAgICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAgICAgICAucmFuZ2UoW2NvbmZpZy5ib3VuZHMudG9wLCBmaW5hbEhlaWdodF0pO1xuXG4gICAgICAgICAgICBpZiAoYXhpcy5vcHRpb25zLm5pY2VUaWNrcykge1xuICAgICAgICAgICAgICBzY2FsZS5uaWNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5sb2cpIHtcbiAgICAgICAgICAgICAgc2NhbGUuYmFzZShheGlzLm9wdGlvbnMuc2NhbGVUeXBlLmJhc2UpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1hcC5zZXQoYXhpcy5pbmRleCwgc2NhbGUpO1xuICAgICAgICAgICAgYXhpcy5zZXRPcmlnaW5Eb21haW4oc2NhbGUuZG9tYWluKCkpO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNDYWNoZSA9IHRoaXMudHJhbnNmb3JtQ2FjaGVZLmhhcyhheGlzLmluZGV4KTtcblxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUmVzdG9yZSA9XG4gICAgICAgICAgICAgIHpvb20/LnRhcmdldD8ub3JpZW50YXRpb24gIT09IEF4aXNPcmllbnRhdGlvbi55IHx8XG4gICAgICAgICAgICAgIHpvb20udGFyZ2V0Py5pbmRleCAhPT0gYXhpcy5pbmRleDtcblxuICAgICAgICAgICAgaWYgKGhhc0NhY2hlICYmIHNob3VsZFJlc3RvcmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdG9yZWRUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybUNhY2hlWS5nZXQoYXhpcy5pbmRleCk7XG4gICAgICAgICAgICAgIG1hcC5zZXQoYXhpcy5pbmRleCwgcmVzdG9yZWRUcmFuc2Zvcm0ucmVzY2FsZVkoc2NhbGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh6b29tKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHpvb20uZXZlbnQgYXMgRDNab29tRXZlbnQ8YW55LCBhbnk+O1xuXG4gICAgICAgICAgICBpZiAoem9vbS50YXJnZXQ/Lm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueSkge1xuXG4gICAgICAgICAgICAgIGlmIChtYXAuaGFzKHpvb20udGFyZ2V0LmluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTY2FsZSA9IG1hcC5nZXQoem9vbS50YXJnZXQuaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzY2FsZWQgPSBldmVudC50cmFuc2Zvcm0ucmVzY2FsZVkoY3VycmVudFNjYWxlKTtcbiAgICAgICAgICAgICAgICBtYXAuc2V0KHpvb20udGFyZ2V0LmluZGV4LCByZXNjYWxlZCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBheGlzID0geUF4ZXMuZ2V0KHpvb20udGFyZ2V0LmluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNhY2hlWS5zZXQoYXhpcy5pbmRleCwgZXZlbnQudHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -12,7 +12,7 @@ export class ZoomService {
|
|
|
12
12
|
this.scaleHashMap = new Map();
|
|
13
13
|
this.elementHashMap = new Map();
|
|
14
14
|
this.zoomHashMap = new Map();
|
|
15
|
-
this.zoomed$ = new BehaviorSubject(
|
|
15
|
+
this.zoomed$ = new BehaviorSubject({});
|
|
16
16
|
this.zoomed = this.zoomed$.asObservable().pipe(shareReplay({
|
|
17
17
|
bufferSize: 1,
|
|
18
18
|
refCount: true
|
|
@@ -79,4 +79,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
79
79
|
providedIn: 'root',
|
|
80
80
|
}]
|
|
81
81
|
}], ctorParameters: function () { return []; } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L3NlcnZpY2Uvem9vbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBYyxXQUFXLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0QsT0FBTyxFQUFlLFlBQVksRUFBQyxNQUFNLElBQUksQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQzs7QUFLckMsTUFBTSxPQUFPLFdBQVc7SUFXdEI7UUFWQSwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFM0IsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztRQUN0QyxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDdEMsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7UUFFaEQsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFvQixFQUFFLENBQUMsQ0FBQztRQUkzRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6RCxVQUFVLEVBQUUsQ0FBQztZQUNiLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQXVCO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFlO1FBQ2pD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QUFFLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0csQ0FBQzs7d0dBbEZVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0F4aXN9IGZyb20gJy4uL2NvcmUvYXhpcy9heGlzJztcbmltcG9ydCB7SUNoYXJ0RXZlbnR9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtZXZlbnQnO1xuaW1wb3J0IHtab29tQmVoYXZpb3IsIHpvb21JZGVudGl0eX0gZnJvbSBcImQzXCI7XG5pbXBvcnQge0F4aXNPcmllbnRhdGlvbn0gZnJvbSBcIi4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvblwiO1xuaW1wb3J0IHtTY2FsZVR5cGV9IGZyb20gXCIuLi9tb2RlbC9lbnVtL3NjYWxlLXR5cGVcIjtcbmltcG9ydCBvYmplY3RIYXNoIGZyb20gJ29iamVjdC1oYXNoJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFpvb21TZXJ2aWNlIHtcbiAgYnJvYWRjYXN0U3Vic2NyaXB0aW9uID0gW107XG4gIHpvb21lZDogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxBeGlzPj47XG4gIGF4aXNIYXNoTWFwID0gbmV3IE1hcDxzdHJpbmcsIEF4aXM+KCk7XG4gIHNjYWxlSGFzaE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIGVsZW1lbnRIYXNoTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgem9vbUhhc2hNYXAgPSBuZXcgTWFwPHN0cmluZywgWm9vbUJlaGF2aW9yPGFueSwgYW55Pj4oKTtcblxuICBwcml2YXRlIHpvb21lZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDaGFydEV2ZW50PEF4aXM+Pih7fSk7XG4gIHByaXZhdGUgYnJvYWRjYXN0Q2hhbm5lbDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuem9vbWVkID0gdGhpcy56b29tZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoe1xuICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgIHJlZkNvdW50OiB0cnVlXG4gICAgfSkpO1xuICB9XG5cbiAgZmlyZVpvb20oem9vbTogSUNoYXJ0RXZlbnQ8QXhpcz4pIHtcbiAgICB0aGlzLnpvb21lZCQubmV4dCh6b29tKTtcbiAgfVxuXG4gIHNldEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbDogc3RyaW5nKSB7XG4gICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gY2hhbm5lbDtcbiAgfVxuXG4gIHNldFpvb20oZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBheGlzSW5kZXggPSAwLCBheGlzT3JpZW50YXRpb24gPSBBeGlzT3JpZW50YXRpb24ueCkge1xuXG4gICAgY29uc3QgaGFzaCA9IG9iamVjdEhhc2guc2hhMSh7aW5kZXg6IGF4aXNJbmRleCwgb3JpZW50YXRpb246IGF4aXNPcmllbnRhdGlvbn0pO1xuXG4gICAgaWYgKCF0aGlzLnpvb21IYXNoTWFwLmhhcyhoYXNoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRBeGlzID0gdGhpcy5heGlzSGFzaE1hcC5nZXQoaGFzaCk7XG4gICAgY29uc3QgY3VycmVudFNjYWxlID0gdGhpcy5zY2FsZUhhc2hNYXAuZ2V0KGhhc2gpO1xuICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50SGFzaE1hcC5nZXQoaGFzaCk7XG4gICAgY29uc3QgY3VycmVudFpvb20gPSB0aGlzLnpvb21IYXNoTWFwLmdldChoYXNoKTtcblxuICAgIGN1cnJlbnRTY2FsZS5kb21haW4oY3VycmVudEF4aXMub3JpZ2luRG9tYWluKVxuXG4gICAgaWYgKGF4aXNPcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHtcbiAgICAgIGlmIChjdXJyZW50QXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUubG9nKSB7XG4gICAgICAgIGN1cnJlbnRTY2FsZS5kb21haW4oY3VycmVudEF4aXMub3B0aW9ucy5pbnZlcnRlZCA/IFsuLi5jdXJyZW50QXhpcy5vcmlnaW5Eb21haW5dLnJldmVyc2UoKSA6IGN1cnJlbnRBeGlzLm9yaWdpbkRvbWFpbilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXhpc09yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueSkge1xuICAgICAgaWYgKGN1cnJlbnRBeGlzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5sb2cpIHtcbiAgICAgICAgY3VycmVudFNjYWxlLmRvbWFpbihjdXJyZW50QXhpcy5vcHRpb25zLmludmVydGVkID8gY3VycmVudEF4aXMub3JpZ2luRG9tYWluIDogWy4uLmN1cnJlbnRBeGlzLm9yaWdpbkRvbWFpbl0ucmV2ZXJzZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhID0gTWF0aC5hYnMoY3VycmVudFNjYWxlKHRvKSAtIGN1cnJlbnRTY2FsZShmcm9tKSk7XG4gICAgY29uc3Qgc2NhbGUgPSBjdXJyZW50U2NhbGUucmFuZ2UoKVsxXSAvIGRlbHRhO1xuXG4gICAgbGV0IHRyYW5zZm9ybSA9IHpvb21JZGVudGl0eS5zY2FsZShzY2FsZSk7XG5cbiAgICBpZiAoY3VycmVudEF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54KSB7XG4gICAgICBpZiAoY3VycmVudEF4aXMub3B0aW9ucy5zY2FsZVR5cGUudHlwZSA9PT0gU2NhbGVUeXBlLmxvZykge1xuICAgICAgICBjdXJyZW50U2NhbGUuZG9tYWluKGN1cnJlbnRBeGlzLm9wdGlvbnMuaW52ZXJ0ZWQgPyBbLi4uY3VycmVudFNjYWxlLmRvbWFpbigpXS5yZXZlcnNlKCkgOiBjdXJyZW50U2NhbGUuZG9tYWluKCkpXG4gICAgICB9XG4gICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jdXJyZW50U2NhbGUoZnJvbSksIDApO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50QXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcbiAgICAgIGlmIChjdXJyZW50QXhpcy5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUubG9nKSB7XG4gICAgICAgIGN1cnJlbnRTY2FsZS5kb21haW4oY3VycmVudEF4aXMub3B0aW9ucy5pbnZlcnRlZCA/IGN1cnJlbnRTY2FsZS5kb21haW4oKSA6IFsuLi5jdXJyZW50U2NhbGUuZG9tYWluKCldLnJldmVyc2UoKSlcbiAgICAgIH1cbiAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLWN1cnJlbnRTY2FsZShmcm9tKSk7XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50LnRyYW5zaXRpb24oKS5jYWxsKGN1cnJlbnRab29tLnRyYW5zZm9ybSwgdHJhbnNmb3JtLCBudWxsLCBuZXcgTW91c2VFdmVudCgnc2V0Wm9vbScpKVxuICB9XG5cbiAgcmVzZXRab29tKGF4aXNJbmRleCA9IDAsIGF4aXNPcmllbnRhdGlvbiA9IEF4aXNPcmllbnRhdGlvbi54KSB7XG4gICAgY29uc3QgaGFzaCA9IG9iamVjdEhhc2guc2hhMSh7aW5kZXg6IGF4aXNJbmRleCwgb3JpZW50YXRpb246IGF4aXNPcmllbnRhdGlvbn0pO1xuICAgIGlmICghdGhpcy56b29tSGFzaE1hcC5oYXMoaGFzaCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRIYXNoTWFwLmdldChoYXNoKTtcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuem9vbUhhc2hNYXAuZ2V0KGhhc2gpO1xuICAgIGN1cnJlbnRFbGVtZW50LnRyYW5zaXRpb24oKS5jYWxsKGN1cnJlbnRab29tLnRyYW5zZm9ybSwgem9vbUlkZW50aXR5LCBudWxsLCBuZXcgTW91c2VFdmVudCgncmVzZXRab29tJykpO1xuICB9XG5cbn1cbiJdfQ==
|