@flowmap.gl/data 8.0.0-alpha.2 → 8.0.0-alpha.22
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/dist/FlowmapAggregateAccessors.d.ts +16 -0
- package/dist/FlowmapAggregateAccessors.d.ts.map +1 -0
- package/dist/FlowmapAggregateAccessors.js +48 -0
- package/dist/FlowmapSelectors.d.ts +213 -0
- package/dist/FlowmapSelectors.d.ts.map +1 -0
- package/dist/FlowmapSelectors.js +861 -0
- package/dist/{FlowMapState.d.ts → FlowmapState.d.ts} +12 -8
- package/dist/FlowmapState.d.ts.map +1 -0
- package/dist/FlowmapState.js +2 -0
- package/dist/cluster/ClusterIndex.d.ts +3 -3
- package/dist/cluster/ClusterIndex.d.ts.map +1 -1
- package/dist/cluster/ClusterIndex.js +1 -1
- package/dist/cluster/cluster.d.ts +6 -5
- package/dist/cluster/cluster.d.ts.map +1 -1
- package/dist/cluster/cluster.js +76 -20
- package/dist/colors.d.ts +7 -7
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +55 -20
- package/dist/getViewStateForLocations.d.ts +18 -11
- package/dist/getViewStateForLocations.d.ts.map +1 -1
- package/dist/getViewStateForLocations.js +37 -23
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/provider/FlowmapDataProvider.d.ts +21 -0
- package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/FlowmapDataProvider.js +17 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts +25 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/LocalFlowmapDataProvider.js +111 -0
- package/dist/selector-functions.d.ts +10 -0
- package/dist/selector-functions.d.ts.map +1 -0
- package/dist/selector-functions.js +56 -0
- package/dist/types.d.ts +20 -16
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/dist/util.d.ts +0 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -4
- package/package.json +10 -12
- package/src/FlowmapAggregateAccessors.ts +67 -0
- package/src/{FlowMapSelectors.ts → FlowmapSelectors.ts} +453 -398
- package/src/{FlowMapState.ts → FlowmapState.ts} +11 -7
- package/src/cluster/ClusterIndex.ts +19 -12
- package/src/cluster/cluster.ts +96 -35
- package/src/colors.ts +70 -28
- package/src/getViewStateForLocations.ts +56 -40
- package/src/index.ts +9 -6
- package/src/provider/FlowmapDataProvider.ts +75 -0
- package/src/provider/LocalFlowmapDataProvider.ts +143 -0
- package/src/selector-functions.ts +87 -0
- package/src/types.ts +23 -19
- package/src/util.ts +0 -4
- package/dist/FlowMapAggregateAccessors.d.ts +0 -15
- package/dist/FlowMapAggregateAccessors.d.ts.map +0 -1
- package/dist/FlowMapAggregateAccessors.js +0 -43
- package/dist/FlowMapSelectors.d.ts +0 -182
- package/dist/FlowMapSelectors.d.ts.map +0 -1
- package/dist/FlowMapSelectors.js +0 -834
- package/dist/FlowMapState.d.ts.map +0 -1
- package/dist/FlowMapState.js +0 -2
- package/dist/provider/FlowMapDataProvider.d.ts +0 -16
- package/dist/provider/FlowMapDataProvider.d.ts.map +0 -1
- package/dist/provider/FlowMapDataProvider.js +0 -17
- package/dist/provider/LocalFlowMapDataProvider.d.ts +0 -20
- package/dist/provider/LocalFlowMapDataProvider.d.ts.map +0 -1
- package/dist/provider/LocalFlowMapDataProvider.js +0 -87
- package/src/FlowMapAggregateAccessors.ts +0 -60
- package/src/provider/FlowMapDataProvider.ts +0 -63
- package/src/provider/LocalFlowMapDataProvider.ts +0 -105
package/dist/colors.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { interpolateCool, interpolateInferno, interpolateMagma, interpolatePlasma, interpolateViridis, interpolateWarm, schemeBlues, schemeBuGn, schemeBuPu, schemeGnBu, schemeGreens, schemeGreys, schemeOranges, schemeOrRd, schemePuBu, schemePuBuGn, schemePuRd, schemePurples, schemeRdPu, schemeReds, schemeYlGn, schemeYlGnBu, schemeYlOrBr, schemeYlOrRd, } from 'd3-scale-chromatic';
|
|
2
2
|
import { range } from 'd3-array';
|
|
3
3
|
import { scalePow, scaleSequential, scaleSequentialPow } from 'd3-scale';
|
|
4
|
-
import { interpolateRgbBasis } from 'd3-interpolate';
|
|
5
|
-
import { color as d3color, hcl } from 'd3-color';
|
|
4
|
+
import { interpolateBasis, interpolateRgbBasis } from 'd3-interpolate';
|
|
5
|
+
import { color as d3color, hcl, rgb as colorRgb } from 'd3-color';
|
|
6
6
|
const DEFAULT_OUTLINE_COLOR = '#fff';
|
|
7
7
|
const DEFAULT_DIMMED_OPACITY = 0.4;
|
|
8
8
|
const DEFAULT_FLOW_MIN_COLOR = 'rgba(240,240,240,0.5)';
|
|
@@ -24,6 +24,9 @@ export function opacifyHex(hexCode, opacity) {
|
|
|
24
24
|
return `rgba(${col.r}, ${col.g}, ${col.b}, ${opacity})`;
|
|
25
25
|
}
|
|
26
26
|
export function colorAsRgba(color) {
|
|
27
|
+
if (Array.isArray(color)) {
|
|
28
|
+
return color;
|
|
29
|
+
}
|
|
27
30
|
const col = d3color(color);
|
|
28
31
|
if (!col) {
|
|
29
32
|
console.warn('Invalid color: ', color);
|
|
@@ -56,7 +59,7 @@ const getColorSteps = (interpolate) => range(0, SCALE_NUM_STEPS + 1)
|
|
|
56
59
|
.map((i) => interpolate(i / SCALE_NUM_STEPS))
|
|
57
60
|
.reverse();
|
|
58
61
|
const FLOW_MIN_COLOR = 'rgba(240,240,240,0.5)';
|
|
59
|
-
export const
|
|
62
|
+
export const GRAYISH = [FLOW_MIN_COLOR, ColorScheme.primary];
|
|
60
63
|
const schemeBluYl = [
|
|
61
64
|
'#f7feae',
|
|
62
65
|
'#b7e6a5',
|
|
@@ -87,7 +90,6 @@ export const schemeTeal = [
|
|
|
87
90
|
export const DEFAULT_COLOR_SCHEME = schemeTeal;
|
|
88
91
|
export const COLOR_SCHEMES = {
|
|
89
92
|
Blues: asScheme(schemeBlues),
|
|
90
|
-
BluesPale: BLUES_PALE,
|
|
91
93
|
BluGrn: [
|
|
92
94
|
'#c4e6c3',
|
|
93
95
|
'#96d2a4',
|
|
@@ -139,6 +141,7 @@ export const COLOR_SCHEMES = {
|
|
|
139
141
|
],
|
|
140
142
|
Emrld: schemeEmrld,
|
|
141
143
|
GnBu: asScheme(schemeGnBu),
|
|
144
|
+
Grayish: GRAYISH,
|
|
142
145
|
Greens: asScheme(schemeGreens),
|
|
143
146
|
Greys: asScheme(schemeGreys),
|
|
144
147
|
Inferno: getColorSteps(interpolateInferno),
|
|
@@ -279,17 +282,24 @@ const diffColors = {
|
|
|
279
282
|
},
|
|
280
283
|
outlineColor: 'rgb(230,233,237)',
|
|
281
284
|
};
|
|
282
|
-
export function
|
|
285
|
+
export function getFlowmapColors(settings) {
|
|
283
286
|
return getColors(false, // TODO: diffMode
|
|
284
|
-
|
|
287
|
+
settings.colorScheme, settings.darkMode, settings.fadeEnabled, settings.fadeOpacityEnabled, settings.fadeAmount, settings.animationEnabled);
|
|
285
288
|
}
|
|
286
|
-
export function getColors(diffMode,
|
|
289
|
+
export function getColors(diffMode, colorScheme, darkMode, fadeEnabled, fadeOpacityEnabled, fadeAmount, animate) {
|
|
287
290
|
if (diffMode) {
|
|
288
291
|
return diffColors;
|
|
289
292
|
}
|
|
290
|
-
let scheme
|
|
291
|
-
if (
|
|
292
|
-
scheme =
|
|
293
|
+
let scheme;
|
|
294
|
+
if (Array.isArray(colorScheme)) {
|
|
295
|
+
scheme = colorScheme;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
scheme =
|
|
299
|
+
(colorScheme && COLOR_SCHEMES[colorScheme]) || DEFAULT_COLOR_SCHEME;
|
|
300
|
+
if (darkMode) {
|
|
301
|
+
scheme = scheme.slice().reverse();
|
|
302
|
+
}
|
|
293
303
|
}
|
|
294
304
|
// if (animate)
|
|
295
305
|
// if (fadeAmount > 0)
|
|
@@ -319,14 +329,15 @@ export function getColors(diffMode, schemeKey, darkMode, fadeEnabled, fadeAmount
|
|
|
319
329
|
.range([0, (2 * fadeAmount) / 100]);
|
|
320
330
|
scheme = indices.map((c, i) => {
|
|
321
331
|
const color = colorScale(i);
|
|
322
|
-
const
|
|
323
|
-
if (color == null ||
|
|
332
|
+
const a = amount(i);
|
|
333
|
+
if (color == null || a == null)
|
|
324
334
|
return '#000';
|
|
325
335
|
const col = hcl(color);
|
|
326
|
-
col.l = darkMode
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
336
|
+
col.l = darkMode ? col.l - col.l * a : col.l + (100 - col.l) * a;
|
|
337
|
+
col.c = col.c - col.c * (a / 4);
|
|
338
|
+
if (fadeOpacityEnabled) {
|
|
339
|
+
col.opacity = col.opacity * (1.0 - a);
|
|
340
|
+
}
|
|
330
341
|
return col.toString();
|
|
331
342
|
});
|
|
332
343
|
}
|
|
@@ -342,8 +353,32 @@ export function getColors(diffMode, schemeKey, darkMode, fadeEnabled, fadeAmount
|
|
|
342
353
|
outlineColor: darkMode ? '#000' : 'rgba(255, 255, 255, 0.5)',
|
|
343
354
|
};
|
|
344
355
|
}
|
|
356
|
+
function interpolateRgbaBasis(colors) {
|
|
357
|
+
const spline = interpolateBasis;
|
|
358
|
+
const n = colors.length;
|
|
359
|
+
let r = new Array(n), g = new Array(n), b = new Array(n), opacity = new Array(n), i, color;
|
|
360
|
+
for (i = 0; i < n; ++i) {
|
|
361
|
+
color = colorRgb(colors[i]);
|
|
362
|
+
r[i] = color.r || 0;
|
|
363
|
+
g[i] = color.g || 0;
|
|
364
|
+
b[i] = color.b || 0;
|
|
365
|
+
opacity[i] = color.opacity || 0;
|
|
366
|
+
}
|
|
367
|
+
r = spline(r);
|
|
368
|
+
g = spline(g);
|
|
369
|
+
b = spline(b);
|
|
370
|
+
opacity = spline(opacity);
|
|
371
|
+
// color.opacity = 1;
|
|
372
|
+
return function (t) {
|
|
373
|
+
color.r = r(t);
|
|
374
|
+
color.g = g(t);
|
|
375
|
+
color.b = b(t);
|
|
376
|
+
color.opacity = opacity(t);
|
|
377
|
+
return color + '';
|
|
378
|
+
};
|
|
379
|
+
}
|
|
345
380
|
export function createFlowColorScale(domain, scheme, animate) {
|
|
346
|
-
const scale = scaleSequentialPow(
|
|
381
|
+
const scale = scaleSequentialPow(interpolateRgbaBasis(scheme))
|
|
347
382
|
// @ts-ignore
|
|
348
383
|
.exponent(animate ? 1 / 2 : 1 / 3)
|
|
349
384
|
.domain(domain);
|
|
@@ -379,7 +414,7 @@ function getLocationAreaColorsRGBA(colors, darkMode) {
|
|
|
379
414
|
};
|
|
380
415
|
}
|
|
381
416
|
function getFlowAndCircleColors(inputColors, defaultFlowColorScheme, darkMode) {
|
|
382
|
-
var _a;
|
|
417
|
+
var _a, _b, _c;
|
|
383
418
|
const flowColorScheme = (inputColors && inputColors.flows && inputColors.flows.scheme) ||
|
|
384
419
|
defaultFlowColorScheme;
|
|
385
420
|
const maxFlowColorHcl = hcl(flowColorScheme[flowColorScheme.length - 1]);
|
|
@@ -405,7 +440,7 @@ function getFlowAndCircleColors(inputColors, defaultFlowColorScheme, darkMode) {
|
|
|
405
440
|
inputColors.locationCircles &&
|
|
406
441
|
inputColors.locationCircles.highlighted, flowColorHighlighted),
|
|
407
442
|
empty: emptyColor,
|
|
408
|
-
|
|
443
|
+
outlineEmptyMix: (_c = (_b = inputColors === null || inputColors === void 0 ? void 0 : inputColors.locationCircles) === null || _b === void 0 ? void 0 : _b.outlineEmptyMix) !== null && _c !== void 0 ? _c : 0.4,
|
|
409
444
|
},
|
|
410
445
|
};
|
|
411
446
|
}
|
|
@@ -438,4 +473,4 @@ export function mixColorsRGBA(color1, color2, zeroToOne) {
|
|
|
438
473
|
return color1.map((v, i) => midpoint(v, color2[i], zeroToOne));
|
|
439
474
|
}
|
|
440
475
|
export default getColors;
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUcvQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUNyQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHNCQUFzQixHQUFHLHVCQUF1QixDQUFDO0FBQ3ZELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN0RSxNQUFNLDJCQUEyQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELE1BQU0sa0NBQWtDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRSxNQUFNLGtDQUFrQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFL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LEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFTLENBQUM7QUFDekUsQ0FBQztBQUVELGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaW50ZXJwb2xhdGVDb29sLFxuICBpbnRlcnBvbGF0ZUluZmVybm8sXG4gIGludGVycG9sYXRlTWFnbWEsXG4gIGludGVycG9sYXRlUGxhc21hLFxuICBpbnRlcnBvbGF0ZVZpcmlkaXMsXG4gIGludGVycG9sYXRlV2FybSxcbiAgc2NoZW1lQmx1ZXMsXG4gIHNjaGVtZUJ1R24sXG4gIHNjaGVtZUJ1UHUsXG4gIHNjaGVtZUduQnUsXG4gIHNjaGVtZUdyZWVucyxcbiAgc2NoZW1lR3JleXMsXG4gIHNjaGVtZU9yYW5nZXMsXG4gIHNjaGVtZU9yUmQsXG4gIHNjaGVtZVB1QnUsXG4gIHNjaGVtZVB1QnVHbixcbiAgc2NoZW1lUHVSZCxcbiAgc2NoZW1lUHVycGxlcyxcbiAgc2NoZW1lUmRQdSxcbiAgc2NoZW1lUmVkcyxcbiAgc2NoZW1lWWxHbixcbiAgc2NoZW1lWWxHbkJ1LFxuICBzY2hlbWVZbE9yQnIsXG4gIHNjaGVtZVlsT3JSZCxcbn0gZnJvbSAnZDMtc2NhbGUtY2hyb21hdGljJztcbmltcG9ydCB7cmFuZ2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7c2NhbGVQb3csIHNjYWxlU2VxdWVudGlhbCwgc2NhbGVTZXF1ZW50aWFsUG93fSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge2ludGVycG9sYXRlUmdiQmFzaXN9IGZyb20gJ2QzLWludGVycG9sYXRlJztcbmltcG9ydCB7Y29sb3IgYXMgZDNjb2xvciwgaGNsfSBmcm9tICdkMy1jb2xvcic7XG5pbXBvcnQge1NldHRpbmdzU3RhdGV9IGZyb20gJy4vRmxvd01hcFN0YXRlJztcblxuY29uc3QgREVGQVVMVF9PVVRMSU5FX0NPTE9SID0gJyNmZmYnO1xuY29uc3QgREVGQVVMVF9ESU1NRURfT1BBQ0lUWSA9IDAuNDtcbmNvbnN0IERFRkFVTFRfRkxPV19NSU5fQ09MT1IgPSAncmdiYSgyNDAsMjQwLDI0MCwwLjUpJztcbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyMxMzdDQkQnXTtcbmNvbnN0IERFRkFVTFRfTE9DQVRJT05fQVJFQV9DT0xPUiA9ICdyZ2JhKDIyMCwyMjAsMjIwLDAuNSknO1xuXG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX1BPU0lUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjZjY2NTRlJ107XG5jb25zdCBERUZBVUxUX0ZMT1dfQ09MT1JfU0NIRU1FX05FR0FUSVZFID0gW0RFRkFVTFRfRkxPV19NSU5fQ09MT1IsICcjMDBhOWNjJ107XG5cbmV4cG9ydCB0eXBlIENvbG9yU2NhbGUgPSAodmFsdWU6IG51bWJlcikgPT4gUkdCQTtcbmV4cG9ydCB0eXBlIFJHQkEgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuY29uc3QgRkFMTEJBQ0tfQ09MT1JfUkdCQTogUkdCQSA9IFsyNTUsIDI1NSwgMjU1LCAyNTVdO1xuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2l0eUZsb2F0VG9JbnRlZ2VyKG9wYWNpdHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnJvdW5kKG9wYWNpdHkgKiAyNTUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3BhY2lmeUhleChoZXhDb2RlOiBzdHJpbmcsIG9wYWNpdHk6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGMgPSBkM2NvbG9yKGhleENvZGUpO1xuICBpZiAoIWMpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY29sb3I6ICcsIGhleENvZGUpO1xuICAgIHJldHVybiBgcmdiYSgyNTUsIDI1NSwgMjU1LCAke29wYWNpdHl9KWA7XG4gIH1cbiAgY29uc3QgY29sID0gYy5yZ2IoKTtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sLnJ9LCAke2NvbC5nfSwgJHtjb2wuYn0sICR7b3BhY2l0eX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQXNSZ2JhKGNvbG9yOiBzdHJpbmcpOiBSR0JBIHtcbiAgY29uc3QgY29sID0gZDNjb2xvcihjb2xvcik7XG4gIGlmICghY29sKSB7XG4gICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGNvbG9yOiAnLCBjb2xvcik7XG4gICAgcmV0dXJuIEZBTExCQUNLX0NPTE9SX1JHQkE7XG4gIH1cbiAgY29uc3QgcmdiQ29sb3IgPSBjb2wucmdiKCk7XG4gIHJldHVybiBbXG4gICAgTWF0aC5mbG9vcihyZ2JDb2xvci5yKSxcbiAgICBNYXRoLmZsb29yKHJnYkNvbG9yLmcpLFxuICAgIE1hdGguZmxvb3IocmdiQ29sb3IuYiksXG4gICAgb3BhY2l0eUZsb2F0VG9JbnRlZ2VyKGNvbC5vcGFjaXR5KSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gY29sb3JBc1JnYmFPcihcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdENvbG9yOiBSR0JBIHwgc3RyaW5nLFxuKTogUkdCQSB7XG4gIGlmIChjb2xvcikge1xuICAgIHJldHVybiBjb2xvckFzUmdiYShjb2xvcik7XG4gIH1cbiAgaWYgKHR5cGVvZiBkZWZhdWx0Q29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGNvbG9yQXNSZ2JhKGRlZmF1bHRDb2xvcik7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbn1cblxuY29uc3QgYXNTY2hlbWUgPSAoc2NoZW1lOiBSZWFkb25seUFycmF5PFJlYWRvbmx5QXJyYXk8c3RyaW5nPj4pID0+XG4gIHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0gYXMgc3RyaW5nW107XG5cbmV4cG9ydCBlbnVtIENvbG9yU2NoZW1lIHtcbiAgcHJpbWFyeSA9ICcjMTYyZDNjJyxcbn1cblxuY29uc3QgU0NBTEVfTlVNX1NURVBTID0gMjA7XG5jb25zdCBnZXRDb2xvclN0ZXBzID0gKGludGVycG9sYXRlOiAoeDogbnVtYmVyKSA9PiBzdHJpbmcpID0+XG4gIHJhbmdlKDAsIFNDQUxFX05VTV9TVEVQUyArIDEpXG4gICAgLm1hcCgoaSkgPT4gaW50ZXJwb2xhdGUoaSAvIFNDQUxFX05VTV9TVEVQUykpXG4gICAgLnJldmVyc2UoKTtcblxuY29uc3QgRkxPV19NSU5fQ09MT1IgPSAncmdiYSgyNDAsMjQwLDI0MCwwLjUpJztcbmV4cG9ydCBjb25zdCBCTFVFU19QQUxFID0gW0ZMT1dfTUlOX0NPTE9SLCBDb2xvclNjaGVtZS5wcmltYXJ5XTtcbmNvbnN0IHNjaGVtZUJsdVlsID0gW1xuICAnI2Y3ZmVhZScsXG4gICcjYjdlNmE1JyxcbiAgJyM3Y2NiYTInLFxuICAnIzQ2YWVhMCcsXG4gICcjMDg5MDk5JyxcbiAgJyMwMDcxOGInLFxuICAnIzA0NTI3NScsXG5dO1xuXG5jb25zdCBzY2hlbWVFbXJsZCA9IFtcbiAgJyNkM2YyYTMnLFxuICAnIzk3ZTE5NicsXG4gICcjNmNjMDhiJyxcbiAgJyM0YzliODInLFxuICAnIzIxN2E3OScsXG4gICcjMTA1OTY1JyxcbiAgJyMwNzQwNTAnLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNjaGVtZVRlYWwgPSBbXG4gICcjZDFlZWVhJyxcbiAgJyNhOGRiZDknLFxuICAnIzg1YzRjOScsXG4gICcjNjhhYmI4JyxcbiAgJyM0ZjkwYTYnLFxuICAnIzNiNzM4ZicsXG4gICcjMmE1Njc0Jyxcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTE9SX1NDSEVNRSA9IHNjaGVtZVRlYWw7XG5leHBvcnQgY29uc3QgQ09MT1JfU0NIRU1FUzoge1trZXk6IHN0cmluZ106IHN0cmluZ1tdfSA9IHtcbiAgQmx1ZXM6IGFzU2NoZW1lKHNjaGVtZUJsdWVzKSxcbiAgQmx1ZXNQYWxlOiBCTFVFU19QQUxFLFxuICBCbHVHcm46IFtcbiAgICAnI2M0ZTZjMycsXG4gICAgJyM5NmQyYTQnLFxuICAgICcjNmRiYzkwJyxcbiAgICAnIzRkYTI4NCcsXG4gICAgJyMzNjg3N2EnLFxuICAgICcjMjY2YjZlJyxcbiAgICAnIzFkNGY2MCcsXG4gIF0sXG4gIEJsdVlsOiBzY2hlbWVCbHVZbCxcbiAgQnJ3bllsOiBbXG4gICAgJyNlZGU1Y2YnLFxuICAgICcjZTBjMmEyJyxcbiAgICAnI2QzOWM4MycsXG4gICAgJyNjMTc2NmYnLFxuICAgICcjYTY1NDYxJyxcbiAgICAnIzgxMzc1MycsXG4gICAgJyM1NDFmM2YnLFxuICBdLFxuICBCdUduOiBhc1NjaGVtZShzY2hlbWVCdUduKSxcbiAgQnVQdTogYXNTY2hlbWUoc2NoZW1lQnVQdSksXG4gIEJ1cmc6IFtcbiAgICAnI2ZmYzZjNCcsXG4gICAgJyNmNGEzYTgnLFxuICAgICcjZTM4MTkxJyxcbiAgICAnI2NjNjA3ZCcsXG4gICAgJyNhZDQ2NmMnLFxuICAgICcjOGIzMDU4JyxcbiAgICAnIzY3MjA0NCcsXG4gIF0sXG4gIEJ1cmdZbDogW1xuICAgICcjZmJlNmM1JyxcbiAgICAnI2Y1YmE5OCcsXG4gICAgJyNlZThhODInLFxuICAgICcjZGM3MTc2JyxcbiAgICAnI2M4NTg2YycsXG4gICAgJyM5YzNmNWQnLFxuICAgICcjNzAyODRhJyxcbiAgXSxcbiAgQ29vbDogZ2V0Q29sb3JTdGVwcyhpbnRlcnBvbGF0ZUNvb2wpLFxuICBEYXJrTWludDogW1xuICAgICcjZDJmYmQ0JyxcbiAgICAnI2E1ZGJjMicsXG4gICAgJyM3YmJjYjAnLFxuICAgICcjNTU5YzllJyxcbiAgICAnIzNhN2M4OScsXG4gICAgJyMyMzVkNzInLFxuICAgICcjMTIzZjVhJyxcbiAgXSxcbiAgRW1ybGQ6IHNjaGVtZUVtcmxkLFxuICBHbkJ1OiBhc1NjaGVtZShzY2hlbWVHbkJ1KSxcbiAgR3JlZW5zOiBhc1NjaGVtZShzY2hlbWVHcmVlbnMpLFxuICBHcmV5czogYXNTY2hlbWUoc2NoZW1lR3JleXMpLFxuICBJbmZlcm5vOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlSW5mZXJubyksXG4gIE1hZ2VudGE6IFtcbiAgICAnI2YzY2JkMycsXG4gICAgJyNlYWE5YmQnLFxuICAgICcjZGQ4OGFjJyxcbiAgICAnI2NhNjk5ZCcsXG4gICAgJyNiMTRkOGUnLFxuICAgICcjOTEzNTdkJyxcbiAgICAnIzZjMjE2NycsXG4gIF0sXG4gIE1hZ21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlTWFnbWEpLFxuICBNaW50OiBbXG4gICAgJyNlNGYxZTEnLFxuICAgICcjYjRkOWNjJyxcbiAgICAnIzg5YzBiNicsXG4gICAgJyM2M2E2YTAnLFxuICAgICcjNDQ4YzhhJyxcbiAgICAnIzI4NzI3NCcsXG4gICAgJyMwZDU4NWYnLFxuICBdLFxuICBPcmFuZ2VzOiBhc1NjaGVtZShzY2hlbWVPcmFuZ2VzKSxcbiAgT3JSZDogYXNTY2hlbWUoc2NoZW1lT3JSZCksXG4gIE9yWWVsOiBbXG4gICAgJyNlY2RhOWEnLFxuICAgICcjZWZjNDdlJyxcbiAgICAnI2YzYWQ2YScsXG4gICAgJyNmNzk0NWQnLFxuICAgICcjZjk3YjU3JyxcbiAgICAnI2Y2NjM1NicsXG4gICAgJyNlZTRkNWEnLFxuICBdLFxuICBQZWFjaDogW1xuICAgICcjZmRlMGM1JyxcbiAgICAnI2ZhY2JhNicsXG4gICAgJyNmOGI1OGInLFxuICAgICcjZjU5ZTcyJyxcbiAgICAnI2YyODU1ZCcsXG4gICAgJyNlZjZhNGMnLFxuICAgICcjZWI0YTQwJyxcbiAgXSxcbiAgUGxhc21hOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlUGxhc21hKSxcbiAgUGlua1lsOiBbXG4gICAgJyNmZWY2YjUnLFxuICAgICcjZmZkZDlhJyxcbiAgICAnI2ZmYzI4NScsXG4gICAgJyNmZmE2NzknLFxuICAgICcjZmE4YTc2JyxcbiAgICAnI2YxNmQ3YScsXG4gICAgJyNlMTUzODMnLFxuICBdLFxuICBQdUJ1OiBhc1NjaGVtZShzY2hlbWVQdUJ1KSxcbiAgUHVCdUduOiBhc1NjaGVtZShzY2hlbWVQdUJ1R24pLFxuICBQdVJkOiBhc1NjaGVtZShzY2hlbWVQdVJkKSxcbiAgUHVycDogW1xuICAgICcjZjNlMGY3JyxcbiAgICAnI2U0YzdmMScsXG4gICAgJyNkMWFmZTgnLFxuICAgICcjYjk5OGRkJyxcbiAgICAnIzlmODJjZScsXG4gICAgJyM4MjZkYmEnLFxuICAgICcjNjM1ODlmJyxcbiAgXSxcbiAgUHVycGxlczogYXNTY2hlbWUoc2NoZW1lUHVycGxlcyksXG4gIFB1cnBPcjogW1xuICAgICcjZjlkZGRhJyxcbiAgICAnI2YyYjljNCcsXG4gICAgJyNlNTk3YjknLFxuICAgICcjY2U3OGIzJyxcbiAgICAnI2FkNWZhZCcsXG4gICAgJyM4MzRiYTAnLFxuICAgICcjNTczYjg4JyxcbiAgXSxcbiAgUmRQdTogYXNTY2hlbWUoc2NoZW1lUmRQdSksXG4gIFJlZE9yOiBbXG4gICAgJyNmNmQyYTknLFxuICAgICcjZjViNzhlJyxcbiAgICAnI2YxOWM3YycsXG4gICAgJyNlYTgxNzEnLFxuICAgICcjZGQ2ODZjJyxcbiAgICAnI2NhNTI2OCcsXG4gICAgJyNiMTNmNjQnLFxuICBdLFxuICBSZWRzOiBhc1NjaGVtZShzY2hlbWVSZWRzKSxcbiAgU3Vuc2V0OiBbXG4gICAgJyNmM2U3OWInLFxuICAgICcjZmFjNDg0JyxcbiAgICAnI2Y4YTA3ZScsXG4gICAgJyNlYjdmODYnLFxuICAgICcjY2U2NjkzJyxcbiAgICAnI2EwNTlhMCcsXG4gICAgJyM1YzUzYTUnLFxuICBdLFxuICBTdW5zZXREYXJrOiBbXG4gICAgJyNmY2RlOWMnLFxuICAgICcjZmFhNDc2JyxcbiAgICAnI2YwNzQ2ZScsXG4gICAgJyNlMzRmNmYnLFxuICAgICcjZGMzOTc3JyxcbiAgICAnI2I5MjU3YScsXG4gICAgJyM3YzFkNmYnLFxuICBdLFxuICBUZWFsOiBzY2hlbWVUZWFsLFxuICBUZWFsR3JuOiBbXG4gICAgJyNiMGYyYmMnLFxuICAgICcjODllOGFjJyxcbiAgICAnIzY3ZGJhNScsXG4gICAgJyM0Y2M4YTMnLFxuICAgICcjMzhiMmEzJyxcbiAgICAnIzJjOThhMCcsXG4gICAgJyMyNTdkOTgnLFxuICBdLFxuICBWaXJpZGlzOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlVmlyaWRpcyksXG4gIFdhcm06IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVXYXJtKSxcbiAgWWxHbjogYXNTY2hlbWUoc2NoZW1lWWxHbiksXG4gIFlsR25CdTogYXNTY2hlbWUoc2NoZW1lWWxHbkJ1KSxcbiAgWWxPckJyOiBhc1NjaGVtZShzY2hlbWVZbE9yQnIpLFxuICBZbE9yUmQ6IGFzU2NoZW1lKHNjaGVtZVlsT3JSZCksXG59O1xuXG5leHBvcnQgY29uc3QgQ09MT1JfU0NIRU1FX0tFWVMgPSBPYmplY3Qua2V5cyhDT0xPUl9TQ0hFTUVTKTtcblxuY29uc3QgY29tcGxlbWVudGFyeSA9ICcjZjUyMDIwJztcbmNvbnN0IGJhc2VEaWZmQ29sb3IgPSAnIzE3YTViZSc7XG5cbmNvbnN0IGRpZmZDb2xvcnM6IERpZmZDb2xvcnMgPSB7XG4gIG5lZ2F0aXZlOiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogW0ZMT1dfTUlOX0NPTE9SLCBiYXNlRGlmZkNvbG9yXSxcbiAgICB9LFxuICB9LFxuICBwb3NpdGl2ZToge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IFtGTE9XX01JTl9DT0xPUiwgY29tcGxlbWVudGFyeV0sXG4gICAgfSxcbiAgfSxcbiAgbG9jYXRpb25BcmVhczoge1xuICAgIG91dGxpbmU6ICdyZ2JhKDkyLDExMiwxMjgsMC41KScsXG4gICAgbm9ybWFsOiAncmdiYSgyMjAsMjIwLDIyMCwwLjUpJyxcbiAgfSxcbiAgb3V0bGluZUNvbG9yOiAncmdiKDIzMCwyMzMsMjM3KScsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd01hcENvbG9ycyhcbiAgc2V0dGluZ3NTdGF0ZTogU2V0dGluZ3NTdGF0ZSxcbik6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICByZXR1cm4gZ2V0Q29sb3JzKFxuICAgIGZhbHNlLCAvLyBUT0RPOiBkaWZmTW9kZVxuICAgIHNldHRpbmdzU3RhdGUuY29sb3JTY2hlbWUsXG4gICAgc2V0dGluZ3NTdGF0ZS5kYXJrTW9kZSxcbiAgICBzZXR0aW5nc1N0YXRlLmZhZGVFbmFibGVkLFxuICAgIHNldHRpbmdzU3RhdGUuZmFkZUFtb3VudCxcbiAgICBzZXR0aW5nc1N0YXRlLmFuaW1hdGlvbkVuYWJsZWQsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcnMoXG4gIGRpZmZNb2RlOiBib29sZWFuLFxuICBzY2hlbWVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGFya01vZGU6IGJvb2xlYW4sXG4gIGZhZGVFbmFibGVkOiBib29sZWFuLFxuICBmYWRlQW1vdW50OiBudW1iZXIsXG4gIGFuaW1hdGU6IGJvb2xlYW4sXG4pOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHtcbiAgaWYgKGRpZmZNb2RlKSB7XG4gICAgcmV0dXJuIGRpZmZDb2xvcnM7XG4gIH1cblxuICBsZXQgc2NoZW1lID0gKHNjaGVtZUtleSAmJiBDT0xPUl9TQ0hFTUVTW3NjaGVtZUtleV0pIHx8IERFRkFVTFRfQ09MT1JfU0NIRU1FO1xuXG4gIGlmIChkYXJrTW9kZSkge1xuICAgIHNjaGVtZSA9IHNjaGVtZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuICAvLyBpZiAoYW5pbWF0ZSlcbiAgLy8gaWYgKGZhZGVBbW91bnQgPiAwKVxuICB7XG4gICAgY29uc3QgaW5kaWNlcyA9IHJhbmdlKDAsIE1hdGgubWF4KDEwLCBzY2hlbWUubGVuZ3RoKSk7XG4gICAgY29uc3QgTiA9IGluZGljZXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBjb2xvclNjYWxlID0gc2NhbGVTZXF1ZW50aWFsKGludGVycG9sYXRlUmdiQmFzaXMoc2NoZW1lKSkuZG9tYWluKFtcbiAgICAgIDAsXG4gICAgICBOLFxuICAgIF0pO1xuXG4gICAgaWYgKCFmYWRlRW5hYmxlZCB8fCBmYWRlQW1vdW50ID09PSAwKSB7XG4gICAgICBzY2hlbWUgPSBpbmRpY2VzLm1hcCgoYywgaSkgPT4gY29sb3JTY2FsZShpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFtb3VudCA9IHNjYWxlUG93KClcbiAgICAgICAgLy8gLmV4cG9uZW50KGFuaW1hdGUgPyAxIDogMS8yLjUpXG4gICAgICAgIC8vIC5leHBvbmVudChhbmltYXRlID8gMTAwIDogNTApXG4gICAgICAgIC8vIC5leHBvbmVudChhbmltYXRlID8gMjAgOiA1KVxuICAgICAgICAvLyAuZXhwb25lbnQoMS8yLjUpXG4gICAgICAgIC5leHBvbmVudCgxLjUpXG4gICAgICAgIC5kb21haW4oW04sIDBdKVxuICAgICAgICAvLyAucmFuZ2UoW2ZhZGVBbW91bnQvMTAwKihhbmltYXRlPzI6MSksIDBdKVxuICAgICAgICAvLyAucmFuZ2UoWzAsIGZhZGVBbW91bnQvMTAwKihhbmltYXRlPzI6MSldKVxuICAgICAgICAvLyAucmFuZ2UoZGFya01vZGUgPyBbMS1mYWRlQW1vdW50LzEwMCwgMV0gOiBbMSwgMSAtIGZhZGVBbW91bnQvMTAwXSlcbiAgICAgICAgLy8gLnJhbmdlKGRhcmtNb2RlID8gWzEgLSBmYWRlQW1vdW50LzEwMCwgMV0gOiBbZmFkZUFtb3VudC8xMDAsIDBdKVxuICAgICAgICAvLyAucmFuZ2UoWzEgLSBmYWRlQW1vdW50LzEwMCwgMV0pXG4gICAgICAgIC5yYW5nZShbMCwgKDIgKiBmYWRlQW1vdW50KSAvIDEwMF0pO1xuXG4gICAgICBzY2hlbWUgPSBpbmRpY2VzLm1hcChcbiAgICAgICAgKGMsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IGNvbG9yU2NhbGUoaSk7XG4gICAgICAgICAgY29uc3QgYWxwaGEgPSBhbW91bnQoaSk7XG4gICAgICAgICAgaWYgKGNvbG9yID09IG51bGwgfHwgYWxwaGEgPT0gbnVsbCkgcmV0dXJuICcjMDAwJztcbiAgICAgICAgICBjb25zdCBjb2wgPSBoY2woY29sb3IpO1xuICAgICAgICAgIGNvbC5sID0gZGFya01vZGVcbiAgICAgICAgICAgID8gY29sLmwgLSBjb2wubCAqIGFscGhhXG4gICAgICAgICAgICA6IGNvbC5sICsgKDEwMCAtIGNvbC5sKSAqIGFscGhhO1xuICAgICAgICAgIGNvbC5jID0gY29sLmMgLSBjb2wuYyAqIChhbHBoYSAvIDQpO1xuICAgICAgICAgIHJldHVybiBjb2wudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVSZ2JCYXNpcyhbY29sb3JTY2FsZShpKSwgZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZiddKShhbW91bnQoaSkpXG4gICAgICAgIC8vIGludGVycG9sYXRlSHNsKGNvbG9yU2NhbGUoaSksIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKShhbW91bnQoaSkpLnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXJrTW9kZSxcbiAgICBmbG93czoge1xuICAgICAgc2NoZW1lLFxuICAgIH0sXG4gICAgbG9jYXRpb25DaXJjbGVzOiB7XG4gICAgICBvdXRnb2luZzogZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZicsXG4gICAgfSxcbiAgICBvdXRsaW5lQ29sb3I6IGRhcmtNb2RlID8gJyMwMDAnIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBzY2hlbWU6IHN0cmluZ1tdLFxuICBhbmltYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogQ29sb3JTY2FsZSB7XG4gIGNvbnN0IHNjYWxlID0gc2NhbGVTZXF1ZW50aWFsUG93KGludGVycG9sYXRlUmdiQmFzaXMoc2NoZW1lKSlcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgLmV4cG9uZW50KGFuaW1hdGUgPyAxIC8gMiA6IDEgLyAzKVxuICAgIC5kb21haW4oZG9tYWluKTtcbiAgcmV0dXJuICh2YWx1ZTogbnVtYmVyKSA9PiBjb2xvckFzUmdiYShzY2FsZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd0NvbG9yU2NhbGUoXG4gIGNvbG9yczogQ29sb3JzUkdCQSB8IERpZmZDb2xvcnNSR0JBLFxuICBtYWduaXR1ZGVFeHRlbnQ6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsXG4gIGFuaW1hdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiAobWFnbml0dWRlOiBudW1iZXIpID0+IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgbWluTWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzBdIDogMDtcbiAgY29uc3QgbWF4TWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzFdIDogMDtcbiAgaWYgKGlzRGlmZkNvbG9yc1JHQkEoY29sb3JzKSkge1xuICAgIGNvbnN0IHBvc1NjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgICBbMCwgbWF4TWFnbml0dWRlXSxcbiAgICAgIGNvbG9ycy5wb3NpdGl2ZS5mbG93cy5zY2hlbWUsXG4gICAgICBhbmltYXRlLFxuICAgICk7XG4gICAgY29uc3QgbmVnU2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICAgIFswLCBtaW5NYWduaXR1ZGVdLFxuICAgICAgY29sb3JzLm5lZ2F0aXZlLmZsb3dzLnNjaGVtZSxcbiAgICAgIGFuaW1hdGUsXG4gICAgKTtcblxuICAgIHJldHVybiAobWFnbml0dWRlOiBudW1iZXIpID0+XG4gICAgICBtYWduaXR1ZGUgPj0gMCA/IHBvc1NjYWxlKG1hZ25pdHVkZSkgOiBuZWdTY2FsZShtYWduaXR1ZGUpO1xuICB9XG5cbiAgY29uc3Qgc2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICBbMCwgbWF4TWFnbml0dWRlIHx8IDBdLFxuICAgIGNvbG9ycy5mbG93cy5zY2hlbWUsXG4gICAgYW5pbWF0ZSxcbiAgKTtcbiAgcmV0dXJuIChtYWduaXR1ZGU6IG51bWJlcikgPT4gc2NhbGUobWFnbml0dWRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZkNvbG9ycyhcbiAgY29sb3JzOiBEaWZmQ29sb3JzIHwgQ29sb3JzLFxuKTogY29sb3JzIGlzIERpZmZDb2xvcnMge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzKS5wb3NpdGl2ZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWZmQ29sb3JzUkdCQShcbiAgY29sb3JzOiBEaWZmQ29sb3JzUkdCQSB8IENvbG9yc1JHQkEsXG4pOiBjb2xvcnMgaXMgRGlmZkNvbG9yc1JHQkEge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzUkdCQSkucG9zaXRpdmUgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgY29sb3JzOiBMb2NhdGlvbkFyZWFDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuKTogTG9jYXRpb25BcmVhQ29sb3JzUkdCQSB7XG4gIGNvbnN0IG5vcm1hbENvbG9yID0gKGNvbG9ycyAmJiBjb2xvcnMubm9ybWFsKSB8fCBERUZBVUxUX0xPQ0FUSU9OX0FSRUFfQ09MT1I7XG4gIGNvbnN0IG5vcm1hbENvbG9ySGNsID0gaGNsKG5vcm1hbENvbG9yKTtcbiAgY29uc3QgbG9jYXRpb25BcmVhc05vcm1hbCA9IGNvbG9yQXNSZ2JhKG5vcm1hbENvbG9yKTtcbiAgcmV0dXJuIHtcbiAgICBub3JtYWw6IGxvY2F0aW9uQXJlYXNOb3JtYWwsXG4gICAgY29ubmVjdGVkOiBjb2xvckFzUmdiYU9yKGNvbG9ycyAmJiBjb2xvcnMuY29ubmVjdGVkLCBsb2NhdGlvbkFyZWFzTm9ybWFsKSxcbiAgICBoaWdobGlnaHRlZDogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuaGlnaGxpZ2h0ZWQsXG4gICAgICBvcGFjaWZ5SGV4KFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oMSkudG9TdHJpbmcoKSxcbiAgICAgICAgMC41LFxuICAgICAgKSxcbiAgICApLFxuICAgIHNlbGVjdGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5zZWxlY3RlZCxcbiAgICAgIG9wYWNpZnlIZXgoXG4gICAgICAgIG5vcm1hbENvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgyKS50b1N0cmluZygpLFxuICAgICAgICAwLjgsXG4gICAgICApLFxuICAgICksXG4gICAgb3V0bGluZTogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMub3V0bGluZSxcbiAgICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oNCkudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzIHtcbiAgc2NoZW1lPzogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzIHtcbiAgaW5uZXI/OiBzdHJpbmc7XG4gIG91dGdvaW5nPzogc3RyaW5nO1xuICBpbmNvbWluZz86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGVtcHR5Pzogc3RyaW5nO1xuICBlbXB0eU91dGxpbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25BcmVhQ29sb3JzIHtcbiAgb3V0bGluZT86IHN0cmluZztcbiAgbm9ybWFsPzogc3RyaW5nO1xuICBzZWxlY3RlZD86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGNvbm5lY3RlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29sb3JzIHtcbiAgZGFya01vZGU/OiBib29sZWFuO1xuICBsb2NhdGlvbkFyZWFzPzogTG9jYXRpb25BcmVhQ29sb3JzO1xuICBkaW1tZWRPcGFjaXR5PzogbnVtYmVyO1xuICBvdXRsaW5lQ29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JzIGV4dGVuZHMgQmFzZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbG9ycyBleHRlbmRzIEJhc2VDb2xvcnMge1xuICBwb3NpdGl2ZT86IEZsb3dBbmRDaXJjbGVDb2xvcnM7XG4gIG5lZ2F0aXZlPzogRmxvd0FuZENpcmNsZUNvbG9ycztcbn1cblxuLy8gVGhlIHh4eENvbG9yc1JHQkEgb2JqZWN0cyBhcmUgbWlycm9yaW5nIHRoZSBpbnB1dCBjb2xvcnMnIG9iamVjdHMsXG4vLyBidXQgY29udmVydGVkIHRvIFJHQkEgYW5kIHdpdGggYWxsIHRoZSBvbWl0dGVkIG9uZXMgc2V0IHRvIGRlZmF1bHRzXG4vLyBvciBkZXJpdmVkLlxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzUkdCQSB7XG4gIHNjaGVtZTogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzUkdCQSB7XG4gIGlubmVyOiBSR0JBO1xuICBvdXRnb2luZzogUkdCQTtcbiAgaW5jb21pbmc6IFJHQkE7XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xuICBlbXB0eTogUkdCQTtcbiAgZW1wdHlPdXRsaW5lOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQXJlYUNvbG9yc1JHQkEge1xuICBvdXRsaW5lOiBSR0JBO1xuICBub3JtYWw6IFJHQkE7XG4gIHNlbGVjdGVkOiBSR0JBO1xuICBoaWdobGlnaHRlZDogUkdCQTtcbiAgY29ubmVjdGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDb2xvcnNSR0JBIHtcbiAgZGFya01vZGU6IGJvb2xlYW47XG4gIGxvY2F0aW9uQXJlYXM6IExvY2F0aW9uQXJlYUNvbG9yc1JHQkE7XG4gIGRpbW1lZE9wYWNpdHk6IG51bWJlcjtcbiAgb3V0bGluZUNvbG9yOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yc1JHQkEgZXh0ZW5kcyBCYXNlQ29sb3JzUkdCQSB7XG4gIGZsb3dzOiBGbG93Q29sb3JzUkdCQTtcbiAgbG9jYXRpb25DaXJjbGVzOiBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9yc1JHQkEge1xuICBmbG93czogRmxvd0NvbG9yc1JHQkE7XG4gIGxvY2F0aW9uQ2lyY2xlczogTG9jYXRpb25DaXJjbGVDb2xvcnNSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb2xvcnNSR0JBIGV4dGVuZHMgQmFzZUNvbG9yc1JHQkEge1xuICBwb3NpdGl2ZTogRmxvd0FuZENpcmNsZUNvbG9yc1JHQkE7XG4gIG5lZ2F0aXZlOiBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgaW5wdXRDb2xvcnM6IEZsb3dBbmRDaXJjbGVDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU6IHN0cmluZ1tdLFxuICBkYXJrTW9kZTogYm9vbGVhbixcbik6IEZsb3dBbmRDaXJjbGVDb2xvcnNSR0JBIHtcbiAgY29uc3QgZmxvd0NvbG9yU2NoZW1lID1cbiAgICAoaW5wdXRDb2xvcnMgJiYgaW5wdXRDb2xvcnMuZmxvd3MgJiYgaW5wdXRDb2xvcnMuZmxvd3Muc2NoZW1lKSB8fFxuICAgIGRlZmF1bHRGbG93Q29sb3JTY2hlbWU7XG4gIGNvbnN0IG1heEZsb3dDb2xvckhjbCA9IGhjbChmbG93Q29sb3JTY2hlbWVbZmxvd0NvbG9yU2NoZW1lLmxlbmd0aCAtIDFdKTtcbiAgY29uc3QgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQgPSBjb2xvckFzUmdiYU9yKFxuICAgIGlucHV0Q29sb3JzICYmIGlucHV0Q29sb3JzLmZsb3dzICYmIGlucHV0Q29sb3JzLmZsb3dzLmhpZ2hsaWdodGVkLFxuICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgwLjcpLnRvU3RyaW5nKCksXG4gICAgKSxcbiAgKTtcblxuICBjb25zdCBlbXB0eUNvbG9yID0gY29sb3JBc1JnYmFPcihcbiAgICBpbnB1dENvbG9ycz8ubG9jYXRpb25DaXJjbGVzPy5lbXB0eSxcbiAgICBkYXJrTW9kZSA/ICcjMDAwJyA6ICcjZmZmJyxcbiAgKTtcbiAgY29uc3QgaW5uZXJDb2xvciA9IGNvbG9yQXNSZ2JhT3IoXG4gICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmlubmVyLFxuICAgIG1heEZsb3dDb2xvckhjbC50b1N0cmluZygpLFxuICApO1xuICByZXR1cm4ge1xuICAgIGZsb3dzOiB7XG4gICAgICBzY2hlbWU6IGZsb3dDb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodGVkOiBmbG93Q29sb3JIaWdobGlnaHRlZCxcbiAgICB9LFxuICAgIGxvY2F0aW9uQ2lyY2xlczoge1xuICAgICAgaW5uZXI6IGlubmVyQ29sb3IsXG4gICAgICBvdXRnb2luZzogY29sb3JBc1JnYmFPcihcbiAgICAgICAgaW5wdXRDb2xvcnMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMgJiZcbiAgICAgICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMub3V0Z29pbmcsXG4gICAgICAgIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICAgICAgKSxcbiAgICAgIGluY29taW5nOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5pbmNvbWluZyxcbiAgICAgICAgbWF4Rmxvd0NvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgxLjI1KS50b1N0cmluZygpLFxuICAgICAgKSxcbiAgICAgIGhpZ2hsaWdodGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5oaWdobGlnaHRlZCxcbiAgICAgICAgZmxvd0NvbG9ySGlnaGxpZ2h0ZWQsXG4gICAgICApLFxuICAgICAgZW1wdHk6IGVtcHR5Q29sb3IsXG4gICAgICBlbXB0eU91dGxpbmU6IG1peENvbG9yc1JHQkEoaW5uZXJDb2xvciwgZW1wdHlDb2xvciwgMC40KSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCYXNlQ29sb3JzUkdCQShcbiAgY29sb3JzOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHwgdW5kZWZpbmVkLFxuKTogQmFzZUNvbG9yc1JHQkEge1xuICBjb25zdCBkYXJrTW9kZSA9IGNvbG9ycyAmJiBjb2xvcnMuZGFya01vZGUgPyB0cnVlIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgZGFya01vZGUsXG4gICAgbG9jYXRpb25BcmVhczogZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMubG9jYXRpb25BcmVhcyxcbiAgICAgIGRhcmtNb2RlLFxuICAgICksXG4gICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYShcbiAgICAgIChjb2xvcnMgJiYgY29sb3JzLm91dGxpbmVDb2xvcikgfHwgREVGQVVMVF9PVVRMSU5FX0NPTE9SLFxuICAgICksXG4gICAgZGltbWVkT3BhY2l0eTpcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuZGltbWVkT3BhY2l0eSAhPSBudWxsXG4gICAgICAgID8gY29sb3JzLmRpbW1lZE9wYWNpdHlcbiAgICAgICAgOiBERUZBVUxUX0RJTU1FRF9PUEFDSVRZLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JzUkdCQShjb2xvcnM6IENvbG9ycyB8IHVuZGVmaW5lZCk6IENvbG9yc1JHQkEge1xuICBjb25zdCBiYXNlQ29sb3JzUkdCQSA9IGdldEJhc2VDb2xvcnNSR0JBKGNvbG9ycyk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbG9yc1JHQkEsXG4gICAgLi4uZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlmZkNvbG9yc1JHQkEoXG4gIGNvbG9yczogRGlmZkNvbG9ycyB8IHVuZGVmaW5lZCxcbik6IERpZmZDb2xvcnNSR0JBIHtcbiAgY29uc3QgYmFzZUNvbG9yc1JHQkEgPSBnZXRCYXNlQ29sb3JzUkdCQShjb2xvcnMpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb2xvcnNSR0JBLFxuICAgIHBvc2l0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5wb3NpdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfUE9TSVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICAgIG5lZ2F0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5uZWdhdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfTkVHQVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiYUFzU3RyaW5nKGNvbG9yOiBSR0JBKTogc3RyaW5nIHtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sb3Iuam9pbignLCcpfSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlkcG9pbnQoYTogbnVtYmVyLCBiOiBudW1iZXIsIHplcm9Ub09uZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgKyAoYiAtIGEpICogemVyb1RvT25lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWl4Q29sb3JzUkdCQShcbiAgY29sb3IxOiBSR0JBLFxuICBjb2xvcjI6IFJHQkEsXG4gIHplcm9Ub09uZTogbnVtYmVyLFxuKTogUkdCQSB7XG4gIHJldHVybiBjb2xvcjEubWFwKCh2LCBpKSA9PiBtaWRwb2ludCh2LCBjb2xvcjJbaV0sIHplcm9Ub09uZSkpIGFzIFJHQkE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENvbG9ycztcbiJdfQ==
|
|
476
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsYUFBYSxFQUNiLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixhQUFhLEVBQ2IsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxLQUFLLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR2hFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUM7QUFDdkQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sMkJBQTJCLEdBQUcsdUJBQXVCLENBQUM7QUFFNUQsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sa0NBQWtDLEdBQUcsQ0FB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O0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUE4QjtJQUU5QixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCx1Q0FDSyxjQUFjLEtBQ2pCLFFBQVEsRUFBRSxzQkFBc0IsQ0FDOUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQ3pCLGtDQUFrQyxFQUNsQyxjQUFjLENBQUMsUUFBUSxDQUN4QixFQUNELFFBQVEsRUFBRSxzQkFBc0IsQ0FDOUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQ3pCLGtDQUFrQyxFQUNsQyxjQUFjLENBQUMsUUFBUSxDQUN4QixJQUNEO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBVztJQUN0QyxPQUFPLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsU0FBaUI7SUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUFZLEVBQ1osTUFBWSxFQUNaLFNBQWlCO0lBRWpCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFTLENBQUM7QUFDekUsQ0FBQztBQUVELGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaW50ZXJwb2xhdGVDb29sLFxuICBpbnRlcnBvbGF0ZUluZmVybm8sXG4gIGludGVycG9sYXRlTWFnbWEsXG4gIGludGVycG9sYXRlUGxhc21hLFxuICBpbnRlcnBvbGF0ZVZpcmlkaXMsXG4gIGludGVycG9sYXRlV2FybSxcbiAgc2NoZW1lQmx1ZXMsXG4gIHNjaGVtZUJ1R24sXG4gIHNjaGVtZUJ1UHUsXG4gIHNjaGVtZUduQnUsXG4gIHNjaGVtZUdyZWVucyxcbiAgc2NoZW1lR3JleXMsXG4gIHNjaGVtZU9yYW5nZXMsXG4gIHNjaGVtZU9yUmQsXG4gIHNjaGVtZVB1QnUsXG4gIHNjaGVtZVB1QnVHbixcbiAgc2NoZW1lUHVSZCxcbiAgc2NoZW1lUHVycGxlcyxcbiAgc2NoZW1lUmRQdSxcbiAgc2NoZW1lUmVkcyxcbiAgc2NoZW1lWWxHbixcbiAgc2NoZW1lWWxHbkJ1LFxuICBzY2hlbWVZbE9yQnIsXG4gIHNjaGVtZVlsT3JSZCxcbn0gZnJvbSAnZDMtc2NhbGUtY2hyb21hdGljJztcbmltcG9ydCB7cmFuZ2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7c2NhbGVQb3csIHNjYWxlU2VxdWVudGlhbCwgc2NhbGVTZXF1ZW50aWFsUG93fSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge2ludGVycG9sYXRlQmFzaXMsIGludGVycG9sYXRlUmdiQmFzaXN9IGZyb20gJ2QzLWludGVycG9sYXRlJztcbmltcG9ydCB7Y29sb3IgYXMgZDNjb2xvciwgaGNsLCByZ2IgYXMgY29sb3JSZ2J9IGZyb20gJ2QzLWNvbG9yJztcbmltcG9ydCB7U2V0dGluZ3NTdGF0ZX0gZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuXG5jb25zdCBERUZBVUxUX09VVExJTkVfQ09MT1IgPSAnI2ZmZic7XG5jb25zdCBERUZBVUxUX0RJTU1FRF9PUEFDSVRZID0gMC40O1xuY29uc3QgREVGQVVMVF9GTE9XX01JTl9DT0xPUiA9ICdyZ2JhKDI0MCwyNDAsMjQwLDAuNSknO1xuY29uc3QgREVGQVVMVF9GTE9XX0NPTE9SX1NDSEVNRSA9IFtERUZBVUxUX0ZMT1dfTUlOX0NPTE9SLCAnIzEzN0NCRCddO1xuY29uc3QgREVGQVVMVF9MT0NBVElPTl9BUkVBX0NPTE9SID0gJ3JnYmEoMjIwLDIyMCwyMjAsMC41KSc7XG5cbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfUE9TSVRJVkUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyNmNjY1NGUnXTtcbmNvbnN0IERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfTkVHQVRJVkUgPSBbREVGQVVMVF9GTE9XX01JTl9DT0xPUiwgJyMwMGE5Y2MnXTtcblxuZXhwb3J0IHR5cGUgQ29sb3JTY2FsZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBSR0JBO1xuZXhwb3J0IHR5cGUgUkdCQSA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBGQUxMQkFDS19DT0xPUl9SR0JBOiBSR0JBID0gWzI1NSwgMjU1LCAyNTUsIDI1NV07XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGFjaXR5RmxvYXRUb0ludGVnZXIob3BhY2l0eTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQob3BhY2l0eSAqIDI1NSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGFjaWZ5SGV4KGhleENvZGU6IHN0cmluZywgb3BhY2l0eTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IGQzY29sb3IoaGV4Q29kZSk7XG4gIGlmICghYykge1xuICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2xvcjogJywgaGV4Q29kZSk7XG4gICAgcmV0dXJuIGByZ2JhKDI1NSwgMjU1LCAyNTUsICR7b3BhY2l0eX0pYDtcbiAgfVxuICBjb25zdCBjb2wgPSBjLnJnYigpO1xuICByZXR1cm4gYHJnYmEoJHtjb2wucn0sICR7Y29sLmd9LCAke2NvbC5ifSwgJHtvcGFjaXR5fSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JBc1JnYmEoY29sb3I6IHN0cmluZyB8IG51bWJlcltdKTogUkdCQSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgIHJldHVybiBjb2xvciBhcyBSR0JBO1xuICB9XG4gIGNvbnN0IGNvbCA9IGQzY29sb3IoY29sb3IpO1xuICBpZiAoIWNvbCkge1xuICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2xvcjogJywgY29sb3IpO1xuICAgIHJldHVybiBGQUxMQkFDS19DT0xPUl9SR0JBO1xuICB9XG4gIGNvbnN0IHJnYkNvbG9yID0gY29sLnJnYigpO1xuICByZXR1cm4gW1xuICAgIE1hdGguZmxvb3IocmdiQ29sb3IuciksXG4gICAgTWF0aC5mbG9vcihyZ2JDb2xvci5nKSxcbiAgICBNYXRoLmZsb29yKHJnYkNvbG9yLmIpLFxuICAgIG9wYWNpdHlGbG9hdFRvSW50ZWdlcihjb2wub3BhY2l0eSksXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNvbG9yQXNSZ2JhT3IoXG4gIGNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRDb2xvcjogUkdCQSB8IHN0cmluZyxcbik6IFJHQkEge1xuICBpZiAoY29sb3IpIHtcbiAgICByZXR1cm4gY29sb3JBc1JnYmEoY29sb3IpO1xuICB9XG4gIGlmICh0eXBlb2YgZGVmYXVsdENvbG9yID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjb2xvckFzUmdiYShkZWZhdWx0Q29sb3IpO1xuICB9XG4gIHJldHVybiBkZWZhdWx0Q29sb3I7XG59XG5cbmNvbnN0IGFzU2NoZW1lID0gKHNjaGVtZTogUmVhZG9ubHlBcnJheTxSZWFkb25seUFycmF5PHN0cmluZz4+KSA9PlxuICBzY2hlbWVbc2NoZW1lLmxlbmd0aCAtIDFdIGFzIHN0cmluZ1tdO1xuXG5leHBvcnQgZW51bSBDb2xvclNjaGVtZSB7XG4gIHByaW1hcnkgPSAnIzE2MmQzYycsXG59XG5cbmNvbnN0IFNDQUxFX05VTV9TVEVQUyA9IDIwO1xuY29uc3QgZ2V0Q29sb3JTdGVwcyA9IChpbnRlcnBvbGF0ZTogKHg6IG51bWJlcikgPT4gc3RyaW5nKSA9PlxuICByYW5nZSgwLCBTQ0FMRV9OVU1fU1RFUFMgKyAxKVxuICAgIC5tYXAoKGkpID0+IGludGVycG9sYXRlKGkgLyBTQ0FMRV9OVU1fU1RFUFMpKVxuICAgIC5yZXZlcnNlKCk7XG5cbmNvbnN0IEZMT1dfTUlOX0NPTE9SID0gJ3JnYmEoMjQwLDI0MCwyNDAsMC41KSc7XG5leHBvcnQgY29uc3QgR1JBWUlTSCA9IFtGTE9XX01JTl9DT0xPUiwgQ29sb3JTY2hlbWUucHJpbWFyeV07XG5jb25zdCBzY2hlbWVCbHVZbCA9IFtcbiAgJyNmN2ZlYWUnLFxuICAnI2I3ZTZhNScsXG4gICcjN2NjYmEyJyxcbiAgJyM0NmFlYTAnLFxuICAnIzA4OTA5OScsXG4gICcjMDA3MThiJyxcbiAgJyMwNDUyNzUnLFxuXTtcblxuY29uc3Qgc2NoZW1lRW1ybGQgPSBbXG4gICcjZDNmMmEzJyxcbiAgJyM5N2UxOTYnLFxuICAnIzZjYzA4YicsXG4gICcjNGM5YjgyJyxcbiAgJyMyMTdhNzknLFxuICAnIzEwNTk2NScsXG4gICcjMDc0MDUwJyxcbl07XG5cbmV4cG9ydCBjb25zdCBzY2hlbWVUZWFsID0gW1xuICAnI2QxZWVlYScsXG4gICcjYThkYmQ5JyxcbiAgJyM4NWM0YzknLFxuICAnIzY4YWJiOCcsXG4gICcjNGY5MGE2JyxcbiAgJyMzYjczOGYnLFxuICAnIzJhNTY3NCcsXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0xPUl9TQ0hFTUUgPSBzY2hlbWVUZWFsO1xuZXhwb3J0IGNvbnN0IENPTE9SX1NDSEVNRVM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmdbXX0gPSB7XG4gIEJsdWVzOiBhc1NjaGVtZShzY2hlbWVCbHVlcyksXG4gIEJsdUdybjogW1xuICAgICcjYzRlNmMzJyxcbiAgICAnIzk2ZDJhNCcsXG4gICAgJyM2ZGJjOTAnLFxuICAgICcjNGRhMjg0JyxcbiAgICAnIzM2ODc3YScsXG4gICAgJyMyNjZiNmUnLFxuICAgICcjMWQ0ZjYwJyxcbiAgXSxcbiAgQmx1WWw6IHNjaGVtZUJsdVlsLFxuICBCcnduWWw6IFtcbiAgICAnI2VkZTVjZicsXG4gICAgJyNlMGMyYTInLFxuICAgICcjZDM5YzgzJyxcbiAgICAnI2MxNzY2ZicsXG4gICAgJyNhNjU0NjEnLFxuICAgICcjODEzNzUzJyxcbiAgICAnIzU0MWYzZicsXG4gIF0sXG4gIEJ1R246IGFzU2NoZW1lKHNjaGVtZUJ1R24pLFxuICBCdVB1OiBhc1NjaGVtZShzY2hlbWVCdVB1KSxcbiAgQnVyZzogW1xuICAgICcjZmZjNmM0JyxcbiAgICAnI2Y0YTNhOCcsXG4gICAgJyNlMzgxOTEnLFxuICAgICcjY2M2MDdkJyxcbiAgICAnI2FkNDY2YycsXG4gICAgJyM4YjMwNTgnLFxuICAgICcjNjcyMDQ0JyxcbiAgXSxcbiAgQnVyZ1lsOiBbXG4gICAgJyNmYmU2YzUnLFxuICAgICcjZjViYTk4JyxcbiAgICAnI2VlOGE4MicsXG4gICAgJyNkYzcxNzYnLFxuICAgICcjYzg1ODZjJyxcbiAgICAnIzljM2Y1ZCcsXG4gICAgJyM3MDI4NGEnLFxuICBdLFxuICBDb29sOiBnZXRDb2xvclN0ZXBzKGludGVycG9sYXRlQ29vbCksXG4gIERhcmtNaW50OiBbXG4gICAgJyNkMmZiZDQnLFxuICAgICcjYTVkYmMyJyxcbiAgICAnIzdiYmNiMCcsXG4gICAgJyM1NTljOWUnLFxuICAgICcjM2E3Yzg5JyxcbiAgICAnIzIzNWQ3MicsXG4gICAgJyMxMjNmNWEnLFxuICBdLFxuICBFbXJsZDogc2NoZW1lRW1ybGQsXG4gIEduQnU6IGFzU2NoZW1lKHNjaGVtZUduQnUpLFxuICBHcmF5aXNoOiBHUkFZSVNILFxuICBHcmVlbnM6IGFzU2NoZW1lKHNjaGVtZUdyZWVucyksXG4gIEdyZXlzOiBhc1NjaGVtZShzY2hlbWVHcmV5cyksXG4gIEluZmVybm86IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVJbmZlcm5vKSxcbiAgTWFnZW50YTogW1xuICAgICcjZjNjYmQzJyxcbiAgICAnI2VhYTliZCcsXG4gICAgJyNkZDg4YWMnLFxuICAgICcjY2E2OTlkJyxcbiAgICAnI2IxNGQ4ZScsXG4gICAgJyM5MTM1N2QnLFxuICAgICcjNmMyMTY3JyxcbiAgXSxcbiAgTWFnbWE6IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVNYWdtYSksXG4gIE1pbnQ6IFtcbiAgICAnI2U0ZjFlMScsXG4gICAgJyNiNGQ5Y2MnLFxuICAgICcjODljMGI2JyxcbiAgICAnIzYzYTZhMCcsXG4gICAgJyM0NDhjOGEnLFxuICAgICcjMjg3Mjc0JyxcbiAgICAnIzBkNTg1ZicsXG4gIF0sXG4gIE9yYW5nZXM6IGFzU2NoZW1lKHNjaGVtZU9yYW5nZXMpLFxuICBPclJkOiBhc1NjaGVtZShzY2hlbWVPclJkKSxcbiAgT3JZZWw6IFtcbiAgICAnI2VjZGE5YScsXG4gICAgJyNlZmM0N2UnLFxuICAgICcjZjNhZDZhJyxcbiAgICAnI2Y3OTQ1ZCcsXG4gICAgJyNmOTdiNTcnLFxuICAgICcjZjY2MzU2JyxcbiAgICAnI2VlNGQ1YScsXG4gIF0sXG4gIFBlYWNoOiBbXG4gICAgJyNmZGUwYzUnLFxuICAgICcjZmFjYmE2JyxcbiAgICAnI2Y4YjU4YicsXG4gICAgJyNmNTllNzInLFxuICAgICcjZjI4NTVkJyxcbiAgICAnI2VmNmE0YycsXG4gICAgJyNlYjRhNDAnLFxuICBdLFxuICBQbGFzbWE6IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVQbGFzbWEpLFxuICBQaW5rWWw6IFtcbiAgICAnI2ZlZjZiNScsXG4gICAgJyNmZmRkOWEnLFxuICAgICcjZmZjMjg1JyxcbiAgICAnI2ZmYTY3OScsXG4gICAgJyNmYThhNzYnLFxuICAgICcjZjE2ZDdhJyxcbiAgICAnI2UxNTM4MycsXG4gIF0sXG4gIFB1QnU6IGFzU2NoZW1lKHNjaGVtZVB1QnUpLFxuICBQdUJ1R246IGFzU2NoZW1lKHNjaGVtZVB1QnVHbiksXG4gIFB1UmQ6IGFzU2NoZW1lKHNjaGVtZVB1UmQpLFxuICBQdXJwOiBbXG4gICAgJyNmM2UwZjcnLFxuICAgICcjZTRjN2YxJyxcbiAgICAnI2QxYWZlOCcsXG4gICAgJyNiOTk4ZGQnLFxuICAgICcjOWY4MmNlJyxcbiAgICAnIzgyNmRiYScsXG4gICAgJyM2MzU4OWYnLFxuICBdLFxuICBQdXJwbGVzOiBhc1NjaGVtZShzY2hlbWVQdXJwbGVzKSxcbiAgUHVycE9yOiBbXG4gICAgJyNmOWRkZGEnLFxuICAgICcjZjJiOWM0JyxcbiAgICAnI2U1OTdiOScsXG4gICAgJyNjZTc4YjMnLFxuICAgICcjYWQ1ZmFkJyxcbiAgICAnIzgzNGJhMCcsXG4gICAgJyM1NzNiODgnLFxuICBdLFxuICBSZFB1OiBhc1NjaGVtZShzY2hlbWVSZFB1KSxcbiAgUmVkT3I6IFtcbiAgICAnI2Y2ZDJhOScsXG4gICAgJyNmNWI3OGUnLFxuICAgICcjZjE5YzdjJyxcbiAgICAnI2VhODE3MScsXG4gICAgJyNkZDY4NmMnLFxuICAgICcjY2E1MjY4JyxcbiAgICAnI2IxM2Y2NCcsXG4gIF0sXG4gIFJlZHM6IGFzU2NoZW1lKHNjaGVtZVJlZHMpLFxuICBTdW5zZXQ6IFtcbiAgICAnI2YzZTc5YicsXG4gICAgJyNmYWM0ODQnLFxuICAgICcjZjhhMDdlJyxcbiAgICAnI2ViN2Y4NicsXG4gICAgJyNjZTY2OTMnLFxuICAgICcjYTA1OWEwJyxcbiAgICAnIzVjNTNhNScsXG4gIF0sXG4gIFN1bnNldERhcms6IFtcbiAgICAnI2ZjZGU5YycsXG4gICAgJyNmYWE0NzYnLFxuICAgICcjZjA3NDZlJyxcbiAgICAnI2UzNGY2ZicsXG4gICAgJyNkYzM5NzcnLFxuICAgICcjYjkyNTdhJyxcbiAgICAnIzdjMWQ2ZicsXG4gIF0sXG4gIFRlYWw6IHNjaGVtZVRlYWwsXG4gIFRlYWxHcm46IFtcbiAgICAnI2IwZjJiYycsXG4gICAgJyM4OWU4YWMnLFxuICAgICcjNjdkYmE1JyxcbiAgICAnIzRjYzhhMycsXG4gICAgJyMzOGIyYTMnLFxuICAgICcjMmM5OGEwJyxcbiAgICAnIzI1N2Q5OCcsXG4gIF0sXG4gIFZpcmlkaXM6IGdldENvbG9yU3RlcHMoaW50ZXJwb2xhdGVWaXJpZGlzKSxcbiAgV2FybTogZ2V0Q29sb3JTdGVwcyhpbnRlcnBvbGF0ZVdhcm0pLFxuICBZbEduOiBhc1NjaGVtZShzY2hlbWVZbEduKSxcbiAgWWxHbkJ1OiBhc1NjaGVtZShzY2hlbWVZbEduQnUpLFxuICBZbE9yQnI6IGFzU2NoZW1lKHNjaGVtZVlsT3JCciksXG4gIFlsT3JSZDogYXNTY2hlbWUoc2NoZW1lWWxPclJkKSxcbn07XG5cbmV4cG9ydCBjb25zdCBDT0xPUl9TQ0hFTUVfS0VZUyA9IE9iamVjdC5rZXlzKENPTE9SX1NDSEVNRVMpO1xuXG5jb25zdCBjb21wbGVtZW50YXJ5ID0gJyNmNTIwMjAnO1xuY29uc3QgYmFzZURpZmZDb2xvciA9ICcjMTdhNWJlJztcblxuY29uc3QgZGlmZkNvbG9yczogRGlmZkNvbG9ycyA9IHtcbiAgbmVnYXRpdmU6IHtcbiAgICBmbG93czoge1xuICAgICAgc2NoZW1lOiBbRkxPV19NSU5fQ09MT1IsIGJhc2VEaWZmQ29sb3JdLFxuICAgIH0sXG4gIH0sXG4gIHBvc2l0aXZlOiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogW0ZMT1dfTUlOX0NPTE9SLCBjb21wbGVtZW50YXJ5XSxcbiAgICB9LFxuICB9LFxuICBsb2NhdGlvbkFyZWFzOiB7XG4gICAgb3V0bGluZTogJ3JnYmEoOTIsMTEyLDEyOCwwLjUpJyxcbiAgICBub3JtYWw6ICdyZ2JhKDIyMCwyMjAsMjIwLDAuNSknLFxuICB9LFxuICBvdXRsaW5lQ29sb3I6ICdyZ2IoMjMwLDIzMywyMzcpJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93bWFwQ29sb3JzKHNldHRpbmdzOiBTZXR0aW5nc1N0YXRlKTogQ29sb3JzIHwgRGlmZkNvbG9ycyB7XG4gIHJldHVybiBnZXRDb2xvcnMoXG4gICAgZmFsc2UsIC8vIFRPRE86IGRpZmZNb2RlXG4gICAgc2V0dGluZ3MuY29sb3JTY2hlbWUsXG4gICAgc2V0dGluZ3MuZGFya01vZGUsXG4gICAgc2V0dGluZ3MuZmFkZUVuYWJsZWQsXG4gICAgc2V0dGluZ3MuZmFkZU9wYWNpdHlFbmFibGVkLFxuICAgIHNldHRpbmdzLmZhZGVBbW91bnQsXG4gICAgc2V0dGluZ3MuYW5pbWF0aW9uRW5hYmxlZCxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9ycyhcbiAgZGlmZk1vZGU6IGJvb2xlYW4sXG4gIGNvbG9yU2NoZW1lOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgZGFya01vZGU6IGJvb2xlYW4sXG4gIGZhZGVFbmFibGVkOiBib29sZWFuLFxuICBmYWRlT3BhY2l0eUVuYWJsZWQ6IGJvb2xlYW4sXG4gIGZhZGVBbW91bnQ6IG51bWJlcixcbiAgYW5pbWF0ZTogYm9vbGVhbixcbik6IENvbG9ycyB8IERpZmZDb2xvcnMge1xuICBpZiAoZGlmZk1vZGUpIHtcbiAgICByZXR1cm4gZGlmZkNvbG9ycztcbiAgfVxuXG4gIGxldCBzY2hlbWU7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JTY2hlbWUpKSB7XG4gICAgc2NoZW1lID0gY29sb3JTY2hlbWU7XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1lID1cbiAgICAgIChjb2xvclNjaGVtZSAmJiBDT0xPUl9TQ0hFTUVTW2NvbG9yU2NoZW1lXSkgfHwgREVGQVVMVF9DT0xPUl9TQ0hFTUU7XG4gICAgaWYgKGRhcmtNb2RlKSB7XG4gICAgICBzY2hlbWUgPSBzY2hlbWUuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgKGFuaW1hdGUpXG4gIC8vIGlmIChmYWRlQW1vdW50ID4gMClcbiAge1xuICAgIGNvbnN0IGluZGljZXMgPSByYW5nZSgwLCBNYXRoLm1heCgxMCwgc2NoZW1lLmxlbmd0aCkpO1xuICAgIGNvbnN0IE4gPSBpbmRpY2VzLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgY29sb3JTY2FsZSA9IHNjYWxlU2VxdWVudGlhbChpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZSkpLmRvbWFpbihbXG4gICAgICAwLFxuICAgICAgTixcbiAgICBdKTtcblxuICAgIGlmICghZmFkZUVuYWJsZWQgfHwgZmFkZUFtb3VudCA9PT0gMCkge1xuICAgICAgc2NoZW1lID0gaW5kaWNlcy5tYXAoKGMsIGkpID0+IGNvbG9yU2NhbGUoaSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhbW91bnQgPSBzY2FsZVBvdygpXG4gICAgICAgIC8vIC5leHBvbmVudChhbmltYXRlID8gMSA6IDEvMi41KVxuICAgICAgICAvLyAuZXhwb25lbnQoYW5pbWF0ZSA/IDEwMCA6IDUwKVxuICAgICAgICAvLyAuZXhwb25lbnQoYW5pbWF0ZSA/IDIwIDogNSlcbiAgICAgICAgLy8gLmV4cG9uZW50KDEvMi41KVxuICAgICAgICAuZXhwb25lbnQoMS41KVxuICAgICAgICAuZG9tYWluKFtOLCAwXSlcbiAgICAgICAgLy8gLnJhbmdlKFtmYWRlQW1vdW50LzEwMCooYW5pbWF0ZT8yOjEpLCAwXSlcbiAgICAgICAgLy8gLnJhbmdlKFswLCBmYWRlQW1vdW50LzEwMCooYW5pbWF0ZT8yOjEpXSlcbiAgICAgICAgLy8gLnJhbmdlKGRhcmtNb2RlID8gWzEtZmFkZUFtb3VudC8xMDAsIDFdIDogWzEsIDEgLSBmYWRlQW1vdW50LzEwMF0pXG4gICAgICAgIC8vIC5yYW5nZShkYXJrTW9kZSA/IFsxIC0gZmFkZUFtb3VudC8xMDAsIDFdIDogW2ZhZGVBbW91bnQvMTAwLCAwXSlcbiAgICAgICAgLy8gLnJhbmdlKFsxIC0gZmFkZUFtb3VudC8xMDAsIDFdKVxuICAgICAgICAucmFuZ2UoWzAsICgyICogZmFkZUFtb3VudCkgLyAxMDBdKTtcblxuICAgICAgc2NoZW1lID0gaW5kaWNlcy5tYXAoXG4gICAgICAgIChjLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSBjb2xvclNjYWxlKGkpO1xuICAgICAgICAgIGNvbnN0IGEgPSBhbW91bnQoaSk7XG4gICAgICAgICAgaWYgKGNvbG9yID09IG51bGwgfHwgYSA9PSBudWxsKSByZXR1cm4gJyMwMDAnO1xuICAgICAgICAgIGNvbnN0IGNvbCA9IGhjbChjb2xvcik7XG4gICAgICAgICAgY29sLmwgPSBkYXJrTW9kZSA/IGNvbC5sIC0gY29sLmwgKiBhIDogY29sLmwgKyAoMTAwIC0gY29sLmwpICogYTtcbiAgICAgICAgICBjb2wuYyA9IGNvbC5jIC0gY29sLmMgKiAoYSAvIDQpO1xuICAgICAgICAgIGlmIChmYWRlT3BhY2l0eUVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbC5vcGFjaXR5ID0gY29sLm9wYWNpdHkgKiAoMS4wIC0gYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2wudG9TdHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gaW50ZXJwb2xhdGVSZ2JCYXNpcyhbY29sb3JTY2FsZShpKSwgZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZiddKShhbW91bnQoaSkpXG4gICAgICAgIC8vIGludGVycG9sYXRlSHNsKGNvbG9yU2NhbGUoaSksIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKShhbW91bnQoaSkpLnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXJrTW9kZSxcbiAgICBmbG93czoge1xuICAgICAgc2NoZW1lLFxuICAgIH0sXG4gICAgbG9jYXRpb25DaXJjbGVzOiB7XG4gICAgICBvdXRnb2luZzogZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZicsXG4gICAgfSxcbiAgICBvdXRsaW5lQ29sb3I6IGRhcmtNb2RlID8gJyMwMDAnIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlUmdiYUJhc2lzKGNvbG9yczogc3RyaW5nW10pIHtcbiAgY29uc3Qgc3BsaW5lID0gaW50ZXJwb2xhdGVCYXNpcztcbiAgY29uc3QgbiA9IGNvbG9ycy5sZW5ndGg7XG4gIGxldCByOiBhbnkgPSBuZXcgQXJyYXkobiksXG4gICAgZzogYW55ID0gbmV3IEFycmF5KG4pLFxuICAgIGI6IGFueSA9IG5ldyBBcnJheShuKSxcbiAgICBvcGFjaXR5OiBhbnkgPSBuZXcgQXJyYXkobiksXG4gICAgaSxcbiAgICBjb2xvcjogYW55O1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgY29sb3IgPSBjb2xvclJnYihjb2xvcnNbaV0pO1xuICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICBiW2ldID0gY29sb3IuYiB8fCAwO1xuICAgIG9wYWNpdHlbaV0gPSBjb2xvci5vcGFjaXR5IHx8IDA7XG4gIH1cbiAgciA9IHNwbGluZShyKTtcbiAgZyA9IHNwbGluZShnKTtcbiAgYiA9IHNwbGluZShiKTtcbiAgb3BhY2l0eSA9IHNwbGluZShvcGFjaXR5KTtcbiAgLy8gY29sb3Iub3BhY2l0eSA9IDE7XG4gIHJldHVybiBmdW5jdGlvbiAodDogbnVtYmVyKSB7XG4gICAgY29sb3IuciA9IHIodCk7XG4gICAgY29sb3IuZyA9IGcodCk7XG4gICAgY29sb3IuYiA9IGIodCk7XG4gICAgY29sb3Iub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgcmV0dXJuIGNvbG9yICsgJyc7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBzY2hlbWU6IHN0cmluZ1tdLFxuICBhbmltYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogQ29sb3JTY2FsZSB7XG4gIGNvbnN0IHNjYWxlID0gc2NhbGVTZXF1ZW50aWFsUG93KGludGVycG9sYXRlUmdiYUJhc2lzKHNjaGVtZSkpXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIC5leHBvbmVudChhbmltYXRlID8gMSAvIDIgOiAxIC8gMylcbiAgICAuZG9tYWluKGRvbWFpbik7XG5cbiAgcmV0dXJuICh2YWx1ZTogbnVtYmVyKSA9PiBjb2xvckFzUmdiYShzY2FsZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmxvd0NvbG9yU2NhbGUoXG4gIGNvbG9yczogQ29sb3JzUkdCQSB8IERpZmZDb2xvcnNSR0JBLFxuICBtYWduaXR1ZGVFeHRlbnQ6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsXG4gIGFuaW1hdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiAobWFnbml0dWRlOiBudW1iZXIpID0+IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgbWluTWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzBdIDogMDtcbiAgY29uc3QgbWF4TWFnbml0dWRlID0gbWFnbml0dWRlRXh0ZW50ID8gbWFnbml0dWRlRXh0ZW50WzFdIDogMDtcbiAgaWYgKGlzRGlmZkNvbG9yc1JHQkEoY29sb3JzKSkge1xuICAgIGNvbnN0IHBvc1NjYWxlID0gY3JlYXRlRmxvd0NvbG9yU2NhbGUoXG4gICAgICBbMCwgbWF4TWFnbml0dWRlXSxcbiAgICAgIGNvbG9ycy5wb3NpdGl2ZS5mbG93cy5zY2hlbWUsXG4gICAgICBhbmltYXRlLFxuICAgICk7XG4gICAgY29uc3QgbmVnU2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICAgIFswLCBtaW5NYWduaXR1ZGVdLFxuICAgICAgY29sb3JzLm5lZ2F0aXZlLmZsb3dzLnNjaGVtZSxcbiAgICAgIGFuaW1hdGUsXG4gICAgKTtcblxuICAgIHJldHVybiAobWFnbml0dWRlOiBudW1iZXIpID0+XG4gICAgICBtYWduaXR1ZGUgPj0gMCA/IHBvc1NjYWxlKG1hZ25pdHVkZSkgOiBuZWdTY2FsZShtYWduaXR1ZGUpO1xuICB9XG5cbiAgY29uc3Qgc2NhbGUgPSBjcmVhdGVGbG93Q29sb3JTY2FsZShcbiAgICBbMCwgbWF4TWFnbml0dWRlIHx8IDBdLFxuICAgIGNvbG9ycy5mbG93cy5zY2hlbWUsXG4gICAgYW5pbWF0ZSxcbiAgKTtcbiAgcmV0dXJuIChtYWduaXR1ZGU6IG51bWJlcikgPT4gc2NhbGUobWFnbml0dWRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZkNvbG9ycyhcbiAgY29sb3JzOiBEaWZmQ29sb3JzIHwgQ29sb3JzLFxuKTogY29sb3JzIGlzIERpZmZDb2xvcnMge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzKS5wb3NpdGl2ZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWZmQ29sb3JzUkdCQShcbiAgY29sb3JzOiBEaWZmQ29sb3JzUkdCQSB8IENvbG9yc1JHQkEsXG4pOiBjb2xvcnMgaXMgRGlmZkNvbG9yc1JHQkEge1xuICByZXR1cm4gKGNvbG9ycyBhcyBEaWZmQ29sb3JzUkdCQSkucG9zaXRpdmUgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgY29sb3JzOiBMb2NhdGlvbkFyZWFDb2xvcnMgfCB1bmRlZmluZWQsXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuKTogTG9jYXRpb25BcmVhQ29sb3JzUkdCQSB7XG4gIGNvbnN0IG5vcm1hbENvbG9yID0gKGNvbG9ycyAmJiBjb2xvcnMubm9ybWFsKSB8fCBERUZBVUxUX0xPQ0FUSU9OX0FSRUFfQ09MT1I7XG4gIGNvbnN0IG5vcm1hbENvbG9ySGNsID0gaGNsKG5vcm1hbENvbG9yKTtcbiAgY29uc3QgbG9jYXRpb25BcmVhc05vcm1hbCA9IGNvbG9yQXNSZ2JhKG5vcm1hbENvbG9yKTtcbiAgcmV0dXJuIHtcbiAgICBub3JtYWw6IGxvY2F0aW9uQXJlYXNOb3JtYWwsXG4gICAgY29ubmVjdGVkOiBjb2xvckFzUmdiYU9yKGNvbG9ycyAmJiBjb2xvcnMuY29ubmVjdGVkLCBsb2NhdGlvbkFyZWFzTm9ybWFsKSxcbiAgICBoaWdobGlnaHRlZDogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuaGlnaGxpZ2h0ZWQsXG4gICAgICBvcGFjaWZ5SGV4KFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oMSkudG9TdHJpbmcoKSxcbiAgICAgICAgMC41LFxuICAgICAgKSxcbiAgICApLFxuICAgIHNlbGVjdGVkOiBjb2xvckFzUmdiYU9yKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5zZWxlY3RlZCxcbiAgICAgIG9wYWNpZnlIZXgoXG4gICAgICAgIG5vcm1hbENvbG9ySGNsW2RhcmtNb2RlID8gJ2JyaWdodGVyJyA6ICdkYXJrZXInXSgyKS50b1N0cmluZygpLFxuICAgICAgICAwLjgsXG4gICAgICApLFxuICAgICksXG4gICAgb3V0bGluZTogY29sb3JBc1JnYmFPcihcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMub3V0bGluZSxcbiAgICAgIGNvbG9yQXNSZ2JhKFxuICAgICAgICBub3JtYWxDb2xvckhjbFtkYXJrTW9kZSA/ICdicmlnaHRlcicgOiAnZGFya2VyJ10oNCkudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgKSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzIHtcbiAgc2NoZW1lPzogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzIHtcbiAgaW5uZXI/OiBzdHJpbmc7XG4gIG91dGdvaW5nPzogc3RyaW5nO1xuICBpbmNvbWluZz86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGVtcHR5Pzogc3RyaW5nO1xuICBvdXRsaW5lRW1wdHlNaXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25BcmVhQ29sb3JzIHtcbiAgb3V0bGluZT86IHN0cmluZztcbiAgbm9ybWFsPzogc3RyaW5nO1xuICBzZWxlY3RlZD86IHN0cmluZztcbiAgaGlnaGxpZ2h0ZWQ/OiBzdHJpbmc7XG4gIGNvbm5lY3RlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29sb3JzIHtcbiAgZGFya01vZGU/OiBib29sZWFuO1xuICBsb2NhdGlvbkFyZWFzPzogTG9jYXRpb25BcmVhQ29sb3JzO1xuICBkaW1tZWRPcGFjaXR5PzogbnVtYmVyO1xuICBvdXRsaW5lQ29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JzIGV4dGVuZHMgQmFzZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FuZENpcmNsZUNvbG9ycyB7XG4gIGZsb3dzPzogRmxvd0NvbG9ycztcbiAgbG9jYXRpb25DaXJjbGVzPzogTG9jYXRpb25DaXJjbGVDb2xvcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbG9ycyBleHRlbmRzIEJhc2VDb2xvcnMge1xuICBwb3NpdGl2ZT86IEZsb3dBbmRDaXJjbGVDb2xvcnM7XG4gIG5lZ2F0aXZlPzogRmxvd0FuZENpcmNsZUNvbG9ycztcbn1cblxuLy8gVGhlIHh4eENvbG9yc1JHQkEgb2JqZWN0cyBhcmUgbWlycm9yaW5nIHRoZSBpbnB1dCBjb2xvcnMnIG9iamVjdHMsXG4vLyBidXQgY29udmVydGVkIHRvIFJHQkEgYW5kIHdpdGggYWxsIHRoZSBvbWl0dGVkIG9uZXMgc2V0IHRvIGRlZmF1bHRzXG4vLyBvciBkZXJpdmVkLlxuZXhwb3J0IGludGVyZmFjZSBGbG93Q29sb3JzUkdCQSB7XG4gIHNjaGVtZTogc3RyaW5nW107XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQ2lyY2xlQ29sb3JzUkdCQSB7XG4gIGlubmVyOiBSR0JBO1xuICBvdXRnb2luZzogUkdCQTtcbiAgaW5jb21pbmc6IFJHQkE7XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xuICBlbXB0eTogUkdCQTtcbiAgb3V0bGluZUVtcHR5TWl4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYXRpb25BcmVhQ29sb3JzUkdCQSB7XG4gIG91dGxpbmU6IFJHQkE7XG4gIG5vcm1hbDogUkdCQTtcbiAgc2VsZWN0ZWQ6IFJHQkE7XG4gIGhpZ2hsaWdodGVkOiBSR0JBO1xuICBjb25uZWN0ZWQ6IFJHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbG9yc1JHQkEge1xuICBkYXJrTW9kZTogYm9vbGVhbjtcbiAgbG9jYXRpb25BcmVhczogTG9jYXRpb25BcmVhQ29sb3JzUkdCQTtcbiAgZGltbWVkT3BhY2l0eTogbnVtYmVyO1xuICBvdXRsaW5lQ29sb3I6IFJHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JzUkdCQSBleHRlbmRzIEJhc2VDb2xvcnNSR0JBIHtcbiAgZmxvd3M6IEZsb3dDb2xvcnNSR0JBO1xuICBsb2NhdGlvbkNpcmNsZXM6IExvY2F0aW9uQ2lyY2xlQ29sb3JzUkdCQTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQSB7XG4gIGZsb3dzOiBGbG93Q29sb3JzUkdCQTtcbiAgbG9jYXRpb25DaXJjbGVzOiBMb2NhdGlvbkNpcmNsZUNvbG9yc1JHQkE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbG9yc1JHQkEgZXh0ZW5kcyBCYXNlQ29sb3JzUkdCQSB7XG4gIHBvc2l0aXZlOiBGbG93QW5kQ2lyY2xlQ29sb3JzUkdCQTtcbiAgbmVnYXRpdmU6IEZsb3dBbmRDaXJjbGVDb2xvcnNSR0JBO1xufVxuXG5mdW5jdGlvbiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICBpbnB1dENvbG9yczogRmxvd0FuZENpcmNsZUNvbG9ycyB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdEZsb3dDb2xvclNjaGVtZTogc3RyaW5nW10sXG4gIGRhcmtNb2RlOiBib29sZWFuLFxuKTogRmxvd0FuZENpcmNsZUNvbG9yc1JHQkEge1xuICBjb25zdCBmbG93Q29sb3JTY2hlbWUgPVxuICAgIChpbnB1dENvbG9ycyAmJiBpbnB1dENvbG9ycy5mbG93cyAmJiBpbnB1dENvbG9ycy5mbG93cy5zY2hlbWUpIHx8XG4gICAgZGVmYXVsdEZsb3dDb2xvclNjaGVtZTtcbiAgY29uc3QgbWF4Rmxvd0NvbG9ySGNsID0gaGNsKGZsb3dDb2xvclNjaGVtZVtmbG93Q29sb3JTY2hlbWUubGVuZ3RoIC0gMV0pO1xuICBjb25zdCBmbG93Q29sb3JIaWdobGlnaHRlZCA9IGNvbG9yQXNSZ2JhT3IoXG4gICAgaW5wdXRDb2xvcnMgJiYgaW5wdXRDb2xvcnMuZmxvd3MgJiYgaW5wdXRDb2xvcnMuZmxvd3MuaGlnaGxpZ2h0ZWQsXG4gICAgY29sb3JBc1JnYmEoXG4gICAgICBtYXhGbG93Q29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDAuNykudG9TdHJpbmcoKSxcbiAgICApLFxuICApO1xuXG4gIGNvbnN0IGVtcHR5Q29sb3IgPSBjb2xvckFzUmdiYU9yKFxuICAgIGlucHV0Q29sb3JzPy5sb2NhdGlvbkNpcmNsZXM/LmVtcHR5LFxuICAgIGRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnLFxuICApO1xuICBjb25zdCBpbm5lckNvbG9yID0gY29sb3JBc1JnYmFPcihcbiAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzICYmXG4gICAgICBpbnB1dENvbG9ycy5sb2NhdGlvbkNpcmNsZXMuaW5uZXIsXG4gICAgbWF4Rmxvd0NvbG9ySGNsLnRvU3RyaW5nKCksXG4gICk7XG4gIHJldHVybiB7XG4gICAgZmxvd3M6IHtcbiAgICAgIHNjaGVtZTogZmxvd0NvbG9yU2NoZW1lLFxuICAgICAgaGlnaGxpZ2h0ZWQ6IGZsb3dDb2xvckhpZ2hsaWdodGVkLFxuICAgIH0sXG4gICAgbG9jYXRpb25DaXJjbGVzOiB7XG4gICAgICBpbm5lcjogaW5uZXJDb2xvcixcbiAgICAgIG91dGdvaW5nOiBjb2xvckFzUmdiYU9yKFxuICAgICAgICBpbnB1dENvbG9ycyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcyAmJlxuICAgICAgICAgIGlucHV0Q29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5vdXRnb2luZyxcbiAgICAgICAgZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZicsXG4gICAgICApLFxuICAgICAgaW5jb21pbmc6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICAgIGlucHV0Q29sb3JzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmluY29taW5nLFxuICAgICAgICBtYXhGbG93Q29sb3JIY2xbZGFya01vZGUgPyAnYnJpZ2h0ZXInIDogJ2RhcmtlciddKDEuMjUpLnRvU3RyaW5nKCksXG4gICAgICApLFxuICAgICAgaGlnaGxpZ2h0ZWQ6IGNvbG9yQXNSZ2JhT3IoXG4gICAgICAgIGlucHV0Q29sb3JzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzICYmXG4gICAgICAgICAgaW5wdXRDb2xvcnMubG9jYXRpb25DaXJjbGVzLmhpZ2hsaWdodGVkLFxuICAgICAgICBmbG93Q29sb3JIaWdobGlnaHRlZCxcbiAgICAgICksXG4gICAgICBlbXB0eTogZW1wdHlDb2xvcixcbiAgICAgIG91dGxpbmVFbXB0eU1peDogaW5wdXRDb2xvcnM/LmxvY2F0aW9uQ2lyY2xlcz8ub3V0bGluZUVtcHR5TWl4ID8/IDAuNCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCYXNlQ29sb3JzUkdCQShcbiAgY29sb3JzOiBDb2xvcnMgfCBEaWZmQ29sb3JzIHwgdW5kZWZpbmVkLFxuKTogQmFzZUNvbG9yc1JHQkEge1xuICBjb25zdCBkYXJrTW9kZSA9IGNvbG9ycyAmJiBjb2xvcnMuZGFya01vZGUgPyB0cnVlIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgZGFya01vZGUsXG4gICAgbG9jYXRpb25BcmVhczogZ2V0TG9jYXRpb25BcmVhQ29sb3JzUkdCQShcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMubG9jYXRpb25BcmVhcyxcbiAgICAgIGRhcmtNb2RlLFxuICAgICksXG4gICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYShcbiAgICAgIChjb2xvcnMgJiYgY29sb3JzLm91dGxpbmVDb2xvcikgfHwgREVGQVVMVF9PVVRMSU5FX0NPTE9SLFxuICAgICksXG4gICAgZGltbWVkT3BhY2l0eTpcbiAgICAgIGNvbG9ycyAmJiBjb2xvcnMuZGltbWVkT3BhY2l0eSAhPSBudWxsXG4gICAgICAgID8gY29sb3JzLmRpbW1lZE9wYWNpdHlcbiAgICAgICAgOiBERUZBVUxUX0RJTU1FRF9PUEFDSVRZLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JzUkdCQShjb2xvcnM6IENvbG9ycyB8IHVuZGVmaW5lZCk6IENvbG9yc1JHQkEge1xuICBjb25zdCBiYXNlQ29sb3JzUkdCQSA9IGdldEJhc2VDb2xvcnNSR0JBKGNvbG9ycyk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbG9yc1JHQkEsXG4gICAgLi4uZ2V0Rmxvd0FuZENpcmNsZUNvbG9ycyhcbiAgICAgIGNvbG9ycyxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlmZkNvbG9yc1JHQkEoXG4gIGNvbG9yczogRGlmZkNvbG9ycyB8IHVuZGVmaW5lZCxcbik6IERpZmZDb2xvcnNSR0JBIHtcbiAgY29uc3QgYmFzZUNvbG9yc1JHQkEgPSBnZXRCYXNlQ29sb3JzUkdCQShjb2xvcnMpO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb2xvcnNSR0JBLFxuICAgIHBvc2l0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5wb3NpdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfUE9TSVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICAgIG5lZ2F0aXZlOiBnZXRGbG93QW5kQ2lyY2xlQ29sb3JzKFxuICAgICAgY29sb3JzICYmIGNvbG9ycy5uZWdhdGl2ZSxcbiAgICAgIERFRkFVTFRfRkxPV19DT0xPUl9TQ0hFTUVfTkVHQVRJVkUsXG4gICAgICBiYXNlQ29sb3JzUkdCQS5kYXJrTW9kZSxcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiYUFzU3RyaW5nKGNvbG9yOiBSR0JBKTogc3RyaW5nIHtcbiAgcmV0dXJuIGByZ2JhKCR7Y29sb3Iuam9pbignLCcpfSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlkcG9pbnQoYTogbnVtYmVyLCBiOiBudW1iZXIsIHplcm9Ub09uZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgKyAoYiAtIGEpICogemVyb1RvT25lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWl4Q29sb3JzUkdCQShcbiAgY29sb3IxOiBSR0JBLFxuICBjb2xvcjI6IFJHQkEsXG4gIHplcm9Ub09uZTogbnVtYmVyLFxuKTogUkdCQSB7XG4gIHJldHVybiBjb2xvcjEubWFwKCh2LCBpKSA9PiBtaWRwb2ludCh2LCBjb2xvcjJbaV0sIHplcm9Ub09uZSkpIGFzIFJHQkE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENvbG9ycztcbiJdfQ==
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
import { FeatureCollection, GeometryCollection, GeometryObject } from 'geojson';
|
|
2
|
-
import { ViewState } from './types';
|
|
1
|
+
import type { FeatureCollection, GeometryCollection, GeometryObject } from 'geojson';
|
|
2
|
+
import type { ViewState } from './types';
|
|
3
3
|
export declare type LocationProperties = any;
|
|
4
|
-
export declare
|
|
4
|
+
export declare type GetViewStateOptions = {
|
|
5
5
|
pad?: number;
|
|
6
|
+
padding?: {
|
|
7
|
+
top: number;
|
|
8
|
+
bottom: number;
|
|
9
|
+
left: number;
|
|
10
|
+
right: number;
|
|
11
|
+
};
|
|
6
12
|
tileSize?: number;
|
|
7
|
-
minZoom?: number;
|
|
8
13
|
maxZoom?: number;
|
|
9
|
-
}
|
|
10
|
-
export declare function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
};
|
|
15
|
+
export declare function getViewStateForFeatures(featureCollection: FeatureCollection<GeometryObject, LocationProperties> | GeometryCollection, size: [number, number], opts?: GetViewStateOptions): ViewState & {
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function getViewStateForLocations<L>(locations: Iterable<L>, getLocationCoords: (location: L) => [number, number], size: [number, number], opts?: GetViewStateOptions): ViewState & {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
};
|
|
16
23
|
//# sourceMappingURL=getViewStateForLocations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getViewStateForLocations.d.ts","sourceRoot":"","sources":["../src/getViewStateForLocations.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"getViewStateForLocations.d.ts","sourceRoot":"","sources":["../src/getViewStateForLocations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAEvC,oBAAY,kBAAkB,GAAG,GAAG,CAAC;AAErC,oBAAY,mBAAmB,GAAG;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,iBAAiB,EACb,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,CAAC,GACrD,kBAAkB,EACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,SAAS,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAyB7C;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EACtB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EACpD,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,IAAI,CAAC,EAAE,mBAAmB,GACzB,SAAS,GAAG;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAsB7C"}
|
|
@@ -1,30 +1,44 @@
|
|
|
1
|
-
import { viewport } from '@mapbox/geo-viewport';
|
|
2
1
|
import { geoBounds } from 'd3-geo';
|
|
2
|
+
import { fitBounds } from '@math.gl/web-mercator';
|
|
3
3
|
export function getViewStateForFeatures(featureCollection, size, opts) {
|
|
4
|
-
const { pad = 0.05,
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
4
|
+
const { pad = 0.05, maxZoom = 100 } = opts || {};
|
|
5
|
+
const bounds = geoBounds(featureCollection);
|
|
6
|
+
const [[x1, y1], [x2, y2]] = bounds;
|
|
7
|
+
const paddedBounds = pad
|
|
8
|
+
? [
|
|
9
|
+
[x1 - pad * (x2 - x1), y1 - pad * (y2 - y1)],
|
|
10
|
+
[x2 + pad * (x2 - x1), y2 + pad * (y2 - y1)],
|
|
11
|
+
]
|
|
12
|
+
: bounds;
|
|
13
|
+
const [width, height] = size;
|
|
14
|
+
return Object.assign(Object.assign({}, fitBounds({
|
|
15
|
+
width,
|
|
16
|
+
height,
|
|
17
|
+
bounds: paddedBounds,
|
|
18
|
+
padding: opts === null || opts === void 0 ? void 0 : opts.padding,
|
|
19
|
+
// minZoom,
|
|
20
|
+
maxZoom,
|
|
21
|
+
})), { width,
|
|
22
|
+
height, bearing: 0, pitch: 0 });
|
|
20
23
|
}
|
|
21
|
-
export function getViewStateForLocations(locations,
|
|
24
|
+
export function getViewStateForLocations(locations, getLocationCoords, size, opts) {
|
|
25
|
+
const asGeometry = (location) => ({
|
|
26
|
+
type: 'Point',
|
|
27
|
+
coordinates: getLocationCoords(location),
|
|
28
|
+
});
|
|
29
|
+
let geometries;
|
|
30
|
+
if (Array.isArray(locations)) {
|
|
31
|
+
geometries = locations.map(asGeometry);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
geometries = [];
|
|
35
|
+
for (const location of locations) {
|
|
36
|
+
geometries.push(asGeometry(location));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
22
39
|
return getViewStateForFeatures({
|
|
23
40
|
type: 'GeometryCollection',
|
|
24
|
-
geometries
|
|
25
|
-
type: 'Point',
|
|
26
|
-
coordinates: getLocationCentroid(location),
|
|
27
|
-
})),
|
|
41
|
+
geometries,
|
|
28
42
|
}, size, opts);
|
|
29
43
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dldFZpZXdTdGF0ZUZvckxvY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQWtCaEQsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxpQkFFc0IsRUFDdEIsSUFBc0IsRUFDdEIsSUFBMEI7SUFFMUIsTUFBTSxFQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGlCQUF3QixDQUFDLENBQUM7SUFDbkQsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxHQUF5QyxHQUFHO1FBQzVELENBQUMsQ0FBQztZQUNFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzdDO1FBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNYLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzdCLHVDQUNLLFNBQVMsQ0FBQztRQUNYLEtBQUs7UUFDTCxNQUFNO1FBQ04sTUFBTSxFQUFFLFlBQVk7UUFDcEIsT0FBTyxFQUFFLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPO1FBQ3RCLFdBQVc7UUFDWCxPQUFPO0tBQ1IsQ0FBQyxLQUNGLEtBQUs7UUFDTCxNQUFNLEVBQ04sT0FBTyxFQUFFLENBQUMsRUFDVixLQUFLLEVBQUUsQ0FBQyxJQUNSO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsU0FBc0IsRUFDdEIsaUJBQW9ELEVBQ3BELElBQXNCLEVBQ3RCLElBQTBCO0lBRTFCLE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksRUFBRSxPQUFPO1FBQ2IsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztLQUN6QyxDQUFDLENBQUM7SUFDSCxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUM1QixVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN4QztTQUFNO1FBQ0wsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0tBQ0Y7SUFDRCxPQUFPLHVCQUF1QixDQUM1QjtRQUNFLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsVUFBVTtLQUNKLEVBQ1IsSUFBSSxFQUNKLElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Z2VvQm91bmRzfSBmcm9tICdkMy1nZW8nO1xuaW1wb3J0IHtmaXRCb3VuZHN9IGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7XG5pbXBvcnQgdHlwZSB7XG4gIEZlYXR1cmVDb2xsZWN0aW9uLFxuICBHZW9tZXRyeUNvbGxlY3Rpb24sXG4gIEdlb21ldHJ5T2JqZWN0LFxufSBmcm9tICdnZW9qc29uJztcbmltcG9ydCB0eXBlIHtWaWV3U3RhdGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMb2NhdGlvblByb3BlcnRpZXMgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIEdldFZpZXdTdGF0ZU9wdGlvbnMgPSB7XG4gIHBhZD86IG51bWJlcjsgLy8gc2l6ZSByYXRpb1xuICBwYWRkaW5nPzoge3RvcDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyByaWdodDogbnVtYmVyfTtcbiAgdGlsZVNpemU/OiBudW1iZXI7XG4gIC8vIG1pblpvb20/OiBudW1iZXI7ICAvLyBub3Qgc3VwcG9ydGVkIGJ5IGZpdEJvdW5kc1xuICBtYXhab29tPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTdGF0ZUZvckZlYXR1cmVzKFxuICBmZWF0dXJlQ29sbGVjdGlvbjpcbiAgICB8IEZlYXR1cmVDb2xsZWN0aW9uPEdlb21ldHJ5T2JqZWN0LCBMb2NhdGlvblByb3BlcnRpZXM+XG4gICAgfCBHZW9tZXRyeUNvbGxlY3Rpb24sXG4gIHNpemU6IFtudW1iZXIsIG51bWJlcl0sXG4gIG9wdHM/OiBHZXRWaWV3U3RhdGVPcHRpb25zLFxuKTogVmlld1N0YXRlICYge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfSB7XG4gIGNvbnN0IHtwYWQgPSAwLjA1LCBtYXhab29tID0gMTAwfSA9IG9wdHMgfHwge307XG4gIGNvbnN0IGJvdW5kcyA9IGdlb0JvdW5kcyhmZWF0dXJlQ29sbGVjdGlvbiBhcyBhbnkpO1xuICBjb25zdCBbW3gxLCB5MV0sIFt4MiwgeTJdXSA9IGJvdW5kcztcbiAgY29uc3QgcGFkZGVkQm91bmRzOiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV0gPSBwYWRcbiAgICA/IFtcbiAgICAgICAgW3gxIC0gcGFkICogKHgyIC0geDEpLCB5MSAtIHBhZCAqICh5MiAtIHkxKV0sXG4gICAgICAgIFt4MiArIHBhZCAqICh4MiAtIHgxKSwgeTIgKyBwYWQgKiAoeTIgLSB5MSldLFxuICAgICAgXVxuICAgIDogYm91bmRzO1xuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBzaXplO1xuICByZXR1cm4ge1xuICAgIC4uLmZpdEJvdW5kcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGJvdW5kczogcGFkZGVkQm91bmRzLFxuICAgICAgcGFkZGluZzogb3B0cz8ucGFkZGluZyxcbiAgICAgIC8vIG1pblpvb20sXG4gICAgICBtYXhab29tLFxuICAgIH0pLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBiZWFyaW5nOiAwLFxuICAgIHBpdGNoOiAwLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zPEw+KFxuICBsb2NhdGlvbnM6IEl0ZXJhYmxlPEw+LFxuICBnZXRMb2NhdGlvbkNvb3JkczogKGxvY2F0aW9uOiBMKSA9PiBbbnVtYmVyLCBudW1iZXJdLFxuICBzaXplOiBbbnVtYmVyLCBudW1iZXJdLFxuICBvcHRzPzogR2V0Vmlld1N0YXRlT3B0aW9ucyxcbik6IFZpZXdTdGF0ZSAmIHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn0ge1xuICBjb25zdCBhc0dlb21ldHJ5ID0gKGxvY2F0aW9uOiBMKSA9PiAoe1xuICAgIHR5cGU6ICdQb2ludCcsXG4gICAgY29vcmRpbmF0ZXM6IGdldExvY2F0aW9uQ29vcmRzKGxvY2F0aW9uKSxcbiAgfSk7XG4gIGxldCBnZW9tZXRyaWVzO1xuICBpZiAoQXJyYXkuaXNBcnJheShsb2NhdGlvbnMpKSB7XG4gICAgZ2VvbWV0cmllcyA9IGxvY2F0aW9ucy5tYXAoYXNHZW9tZXRyeSk7XG4gIH0gZWxzZSB7XG4gICAgZ2VvbWV0cmllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICBnZW9tZXRyaWVzLnB1c2goYXNHZW9tZXRyeShsb2NhdGlvbikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ2V0Vmlld1N0YXRlRm9yRmVhdHVyZXMoXG4gICAge1xuICAgICAgdHlwZTogJ0dlb21ldHJ5Q29sbGVjdGlvbicsXG4gICAgICBnZW9tZXRyaWVzLFxuICAgIH0gYXMgYW55LFxuICAgIHNpemUsXG4gICAgb3B0cyxcbiAgKTtcbn1cbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './colors';
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
3
|
+
export * from './FlowmapState';
|
|
4
|
+
export * from './FlowmapSelectors';
|
|
5
|
+
export * from './selector-functions';
|
|
5
6
|
export * from './time';
|
|
6
7
|
export * from './getViewStateForLocations';
|
|
7
|
-
export * from './provider/
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export { default as
|
|
8
|
+
export * from './provider/FlowmapDataProvider';
|
|
9
|
+
export * from './cluster/cluster';
|
|
10
|
+
export * from './cluster/ClusterIndex';
|
|
11
|
+
export { default as FlowmapAggregateAccessors } from './FlowmapAggregateAccessors';
|
|
12
|
+
export type { default as FlowmapDataProvider } from './provider/FlowmapDataProvider';
|
|
13
|
+
export { default as LocalFlowmapDataProvider } from './provider/LocalFlowmapDataProvider';
|
|
11
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,OAAO,EAAC,OAAO,IAAI,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AACjF,YAAY,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,qCAAqC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,QAAQ,CAAC;AACvB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAC,OAAO,IAAI,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AACjF,YAAY,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,qCAAqC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './colors';
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
3
|
+
export * from './FlowmapState';
|
|
4
|
+
export * from './FlowmapSelectors';
|
|
5
|
+
export * from './selector-functions';
|
|
5
6
|
export * from './time';
|
|
6
7
|
export * from './getViewStateForLocations';
|
|
7
|
-
export * from './provider/
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
|
|
8
|
+
export * from './provider/FlowmapDataProvider';
|
|
9
|
+
export * from './cluster/cluster';
|
|
10
|
+
export * from './cluster/ClusterIndex';
|
|
11
|
+
export { default as FlowmapAggregateAccessors } from './FlowmapAggregateAccessors';
|
|
12
|
+
export { default as LocalFlowmapDataProvider } from './provider/LocalFlowmapDataProvider';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsT0FBTyxJQUFJLHlCQUF5QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFakYsT0FBTyxFQUFDLE9BQU8sSUFBSSx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL0Zsb3dtYXBTdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL0Zsb3dtYXBTZWxlY3RvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Rvci1mdW5jdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0Vmlld1N0YXRlRm9yTG9jYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZXIvRmxvd21hcERhdGFQcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2NsdXN0ZXIvY2x1c3Rlcic7XG5leHBvcnQgKiBmcm9tICcuL2NsdXN0ZXIvQ2x1c3RlckluZGV4JztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzfSBmcm9tICcuL0Zsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMnO1xuZXhwb3J0IHR5cGUge2RlZmF1bHQgYXMgRmxvd21hcERhdGFQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlci9GbG93bWFwRGF0YVByb3ZpZGVyJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBMb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXIvTG9jYWxGbG93bWFwRGF0YVByb3ZpZGVyJztcbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AggregateFlow, Cluster, LocationTotals } from '..';
|
|
2
|
+
import { FlowmapState } from '../FlowmapState';
|
|
3
|
+
import { ClusterNode, FlowmapData, FlowmapDataAccessors, LayersData, ViewportProps } from '../types';
|
|
4
|
+
export default interface FlowmapDataProvider<L, F> {
|
|
5
|
+
setAccessors(accessors: FlowmapDataAccessors<L, F>): void;
|
|
6
|
+
setFlowmapState(flowmapState: FlowmapState): Promise<void>;
|
|
7
|
+
getViewportForLocations(dims: [number, number]): Promise<ViewportProps | undefined>;
|
|
8
|
+
getFlowByIndex(index: number): Promise<F | AggregateFlow | undefined>;
|
|
9
|
+
getLocationById(id: string | number): Promise<L | Cluster | undefined>;
|
|
10
|
+
getLocationByIndex(idx: number): Promise<L | ClusterNode | undefined>;
|
|
11
|
+
getTotalsForLocation(id: string | number): Promise<LocationTotals | undefined>;
|
|
12
|
+
getLayersData(): Promise<LayersData | undefined>;
|
|
13
|
+
/**
|
|
14
|
+
* This is to give the data provider control over when/how often layersData
|
|
15
|
+
* is updated which leads to the flowmap being redrawn.
|
|
16
|
+
*/
|
|
17
|
+
updateLayersData(setLayersData: (layersData: LayersData | undefined) => void, changeFlags: Record<string, boolean>): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export declare function isFlowmapData<L, F>(data: Record<string, any>): data is FlowmapData<L, F>;
|
|
20
|
+
export declare function isFlowmapDataProvider<L, F>(dataProvider: Record<string, any>): dataProvider is FlowmapDataProvider<L, F>;
|
|
21
|
+
//# sourceMappingURL=FlowmapDataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/FlowmapDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,OAAO,EAAqB,cAAc,EAAC,MAAM,IAAI,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC;IAC/C,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1D,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI3D,uBAAuB,CACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACrB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAItC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;IAEtE,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEvE,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;IAEtE,oBAAoB,CAClB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAQvC,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAEjD;;;OAGG;IACH,gBAAgB,CACd,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI,EAC3D,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAO3B;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,YAAY,IAAI,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAU3C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function isFlowmapData(data) {
|
|
2
|
+
return (data && data.locations && data.flows
|
|
3
|
+
// TODO: test that they are iterable
|
|
4
|
+
// Array.isArray(data.locations) &&
|
|
5
|
+
// Array.isArray(data.flows)
|
|
6
|
+
);
|
|
7
|
+
}
|
|
8
|
+
export function isFlowmapDataProvider(dataProvider) {
|
|
9
|
+
return (dataProvider &&
|
|
10
|
+
typeof dataProvider.setFlowmapState === 'function' &&
|
|
11
|
+
typeof dataProvider.getViewportForLocations === 'function' &&
|
|
12
|
+
typeof dataProvider.getFlowByIndex === 'function' &&
|
|
13
|
+
typeof dataProvider.getLocationById === 'function' &&
|
|
14
|
+
typeof dataProvider.getLocationByIndex === 'function' &&
|
|
15
|
+
typeof dataProvider.getLayersData === 'function');
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcERhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9GbG93bWFwRGF0YVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1EQSxNQUFNLFVBQVUsYUFBYSxDQUMzQixJQUF5QjtJQUV6QixPQUFPLENBQ0wsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUs7SUFDcEMsb0NBQW9DO0lBQ3BDLG1DQUFtQztJQUNuQyw0QkFBNEI7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFlBQWlDO0lBRWpDLE9BQU8sQ0FDTCxZQUFZO1FBQ1osT0FBTyxZQUFZLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFDbEQsT0FBTyxZQUFZLENBQUMsdUJBQXVCLEtBQUssVUFBVTtRQUMxRCxPQUFPLFlBQVksQ0FBQyxjQUFjLEtBQUssVUFBVTtRQUNqRCxPQUFPLFlBQVksQ0FBQyxlQUFlLEtBQUssVUFBVTtRQUNsRCxPQUFPLFlBQVksQ0FBQyxrQkFBa0IsS0FBSyxVQUFVO1FBQ3JELE9BQU8sWUFBWSxDQUFDLGFBQWEsS0FBSyxVQUFVLENBQ2pELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZ2dyZWdhdGVGbG93LCBDbHVzdGVyLCBMb2NhdGlvbkFjY2Vzc29ycywgTG9jYXRpb25Ub3RhbHN9IGZyb20gJy4uJztcbmltcG9ydCB7Rmxvd21hcFN0YXRlfSBmcm9tICcuLi9GbG93bWFwU3RhdGUnO1xuaW1wb3J0IHtcbiAgQ2x1c3Rlck5vZGUsXG4gIEZsb3dtYXBEYXRhLFxuICBGbG93bWFwRGF0YUFjY2Vzc29ycyxcbiAgTGF5ZXJzRGF0YSxcbiAgVmlld3BvcnRQcm9wcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBpbnRlcmZhY2UgRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPiB7XG4gIHNldEFjY2Vzc29ycyhhY2Nlc3NvcnM6IEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+KTogdm9pZDtcblxuICBzZXRGbG93bWFwU3RhdGUoZmxvd21hcFN0YXRlOiBGbG93bWFwU3RhdGUpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIGNsZWFyRGF0YSgpOiB2b2lkO1xuXG4gIGdldFZpZXdwb3J0Rm9yTG9jYXRpb25zKFxuICAgIGRpbXM6IFtudW1iZXIsIG51bWJlcl0sXG4gICk6IFByb21pc2U8Vmlld3BvcnRQcm9wcyB8IHVuZGVmaW5lZD47XG5cbiAgLy8gZ2V0Rmxvd1RvdGFscygpOiBQcm9taXNlPEZsb3dUb3RhbHM+O1xuXG4gIGdldEZsb3dCeUluZGV4KGluZGV4OiBudW1iZXIpOiBQcm9taXNlPEYgfCBBZ2dyZWdhdGVGbG93IHwgdW5kZWZpbmVkPjtcblxuICBnZXRMb2NhdGlvbkJ5SWQoaWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TCB8IENsdXN0ZXIgfCB1bmRlZmluZWQ+O1xuXG4gIGdldExvY2F0aW9uQnlJbmRleChpZHg6IG51bWJlcik6IFByb21pc2U8TCB8IENsdXN0ZXJOb2RlIHwgdW5kZWZpbmVkPjtcblxuICBnZXRUb3RhbHNGb3JMb2NhdGlvbihcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICApOiBQcm9taXNlPExvY2F0aW9uVG90YWxzIHwgdW5kZWZpbmVkPjtcblxuICAvLyBnZXRMb2NhdGlvbnNJbkJib3goXG4gIC8vICAgYmJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gIC8vICk6IFByb21pc2U8QXJyYXk8Rmxvd0xvY2F0aW9uIHwgQ2x1c3Rlck5vZGU+IHwgdW5kZWZpbmVkPjtcblxuICAvLyBnZXRMb2NhdGlvbnNGb3JTZWFyY2hCb3goKTogUHJvbWlzZTwoRmxvd0xvY2F0aW9uIHwgQ2x1c3Rlck5vZGUpW10gfCB1bmRlZmluZWQ+O1xuXG4gIGdldExheWVyc0RhdGEoKTogUHJvbWlzZTxMYXllcnNEYXRhIHwgdW5kZWZpbmVkPjtcblxuICAvKipcbiAgICogVGhpcyBpcyB0byBnaXZlIHRoZSBkYXRhIHByb3ZpZGVyIGNvbnRyb2wgb3ZlciB3aGVuL2hvdyBvZnRlbiBsYXllcnNEYXRhXG4gICAqIGlzIHVwZGF0ZWQgd2hpY2ggbGVhZHMgdG8gdGhlIGZsb3dtYXAgYmVpbmcgcmVkcmF3bi5cbiAgICovXG4gIHVwZGF0ZUxheWVyc0RhdGEoXG4gICAgc2V0TGF5ZXJzRGF0YTogKGxheWVyc0RhdGE6IExheWVyc0RhdGEgfCB1bmRlZmluZWQpID0+IHZvaWQsXG4gICAgY2hhbmdlRmxhZ3M6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuICApOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGbG93bWFwRGF0YTxMLCBGPihcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pixcbik6IGRhdGEgaXMgRmxvd21hcERhdGE8TCwgRj4ge1xuICByZXR1cm4gKFxuICAgIGRhdGEgJiYgZGF0YS5sb2NhdGlvbnMgJiYgZGF0YS5mbG93c1xuICAgIC8vIFRPRE86IHRlc3QgdGhhdCB0aGV5IGFyZSBpdGVyYWJsZVxuICAgIC8vIEFycmF5LmlzQXJyYXkoZGF0YS5sb2NhdGlvbnMpICYmXG4gICAgLy8gQXJyYXkuaXNBcnJheShkYXRhLmZsb3dzKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGbG93bWFwRGF0YVByb3ZpZGVyPEwsIEY+KFxuICBkYXRhUHJvdmlkZXI6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pOiBkYXRhUHJvdmlkZXIgaXMgRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPiB7XG4gIHJldHVybiAoXG4gICAgZGF0YVByb3ZpZGVyICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5zZXRGbG93bWFwU3RhdGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLmdldFZpZXdwb3J0Rm9yTG9jYXRpb25zID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRGbG93QnlJbmRleCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUlkID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGRhdGFQcm92aWRlci5nZXRMb2NhdGlvbkJ5SW5kZXggPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgZGF0YVByb3ZpZGVyLmdldExheWVyc0RhdGEgPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type FlowmapDataProvider from './FlowmapDataProvider';
|
|
2
|
+
import type { Cluster, ClusterNode, FlowmapData, FlowmapDataAccessors, LayersData, LocationTotals, ViewportProps, AggregateFlow } from '../types';
|
|
3
|
+
import { FlowmapState } from '../FlowmapState';
|
|
4
|
+
import FlowmapSelectors from '../FlowmapSelectors';
|
|
5
|
+
import { GetViewStateOptions } from '../getViewStateForLocations';
|
|
6
|
+
export default class LocalFlowmapDataProvider<L, F> implements FlowmapDataProvider<L, F> {
|
|
7
|
+
private selectors;
|
|
8
|
+
private flowmapData;
|
|
9
|
+
private flowmapState;
|
|
10
|
+
constructor(accessors: FlowmapDataAccessors<L, F>);
|
|
11
|
+
setAccessors(accessors: FlowmapDataAccessors<L, F>): void;
|
|
12
|
+
setFlowmapData(flowmapData: FlowmapData<L, F>): void;
|
|
13
|
+
getSelectors(): FlowmapSelectors<L, F>;
|
|
14
|
+
getFlowmapData(): FlowmapData<L, F> | undefined;
|
|
15
|
+
setFlowmapState(flowmapState: FlowmapState): Promise<void>;
|
|
16
|
+
getFlowmapState(): FlowmapState | undefined;
|
|
17
|
+
getFlowByIndex(idx: number): Promise<F | AggregateFlow | undefined>;
|
|
18
|
+
getLocationByIndex(idx: number): Promise<L | ClusterNode | undefined>;
|
|
19
|
+
getLayersData(): Promise<LayersData | undefined>;
|
|
20
|
+
getLocationById(id: string | number): Promise<L | Cluster | undefined>;
|
|
21
|
+
getTotalsForLocation(id: string | number): Promise<LocationTotals | undefined>;
|
|
22
|
+
getViewportForLocations(dims: [number, number], opts?: GetViewStateOptions): Promise<ViewportProps | undefined>;
|
|
23
|
+
updateLayersData(setLayersData: (layersData: LayersData | undefined) => void): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=LocalFlowmapDataProvider.d.ts.map
|